diff --git a/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts b/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts index e757c721d..f0e7a05a2 100644 --- a/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts +++ b/e2e/src/specs/maintenance/server/database-backups.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, ManualJobName } from '@immich/sdk'; -import { errorDto } from 'src/responses'; -import { app, utils } from 'src/utils'; +import { errorDto } from 'src/responses.js'; +import { app, utils } from 'src/utils.js'; import request from 'supertest'; import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/maintenance/server/maintenance.e2e-spec.ts b/e2e/src/specs/maintenance/server/maintenance.e2e-spec.ts index bea5f5855..35c95194b 100644 --- a/e2e/src/specs/maintenance/server/maintenance.e2e-spec.ts +++ b/e2e/src/specs/maintenance/server/maintenance.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; -import { errorDto } from 'src/responses'; -import { app, utils } from 'src/utils'; +import { errorDto } from 'src/responses.js'; +import { app, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/maintenance/web/database-backups.e2e-spec.ts b/e2e/src/specs/maintenance/web/database-backups.e2e-spec.ts index d101215ce..efcf2ef27 100644 --- a/e2e/src/specs/maintenance/web/database-backups.e2e-spec.ts +++ b/e2e/src/specs/maintenance/web/database-backups.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe.configure({ mode: 'serial' }); diff --git a/e2e/src/specs/maintenance/web/maintenance.e2e-spec.ts b/e2e/src/specs/maintenance/web/maintenance.e2e-spec.ts index 6b58f5a42..13dfc5416 100644 --- a/e2e/src/specs/maintenance/web/maintenance.e2e-spec.ts +++ b/e2e/src/specs/maintenance/web/maintenance.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe.configure({ mode: 'serial' }); diff --git a/e2e/src/specs/server/api/album.e2e-spec.ts b/e2e/src/specs/server/api/album.e2e-spec.ts index 2969d606f..db1d00f6a 100644 --- a/e2e/src/specs/server/api/album.e2e-spec.ts +++ b/e2e/src/specs/server/api/album.e2e-spec.ts @@ -9,9 +9,9 @@ import { LoginResponseDto, SharedLinkType, } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/api-key.e2e-spec.ts b/e2e/src/specs/server/api/api-key.e2e-spec.ts index ec481cee0..c9761c909 100644 --- a/e2e/src/specs/server/api/api-key.e2e-spec.ts +++ b/e2e/src/specs/server/api/api-key.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, Permission, createApiKey } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/asset.e2e-spec.ts b/e2e/src/specs/server/api/asset.e2e-spec.ts index ad7f10281..6eb0dc412 100644 --- a/e2e/src/specs/server/api/asset.e2e-spec.ts +++ b/e2e/src/specs/server/api/asset.e2e-spec.ts @@ -14,10 +14,10 @@ import { randomBytes } from 'node:crypto'; import { readFile, writeFile } from 'node:fs/promises'; import { basename, join } from 'node:path'; import { Socket } from 'socket.io-client'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { makeRandomImage } from 'src/generators'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, tempDir, testAssetDir, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/fixtures.js'; +import { makeRandomImage } from 'src/generators.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, tempDir, testAssetDir, utils } from 'src/utils.js'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/download.e2e-spec.ts b/e2e/src/specs/server/api/download.e2e-spec.ts index 4dcb6934a..ef66b3606 100644 --- a/e2e/src/specs/server/api/download.e2e-spec.ts +++ b/e2e/src/specs/server/api/download.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { readFile, writeFile } from 'node:fs/promises'; -import { app, tempDir, utils } from 'src/utils'; +import { app, tempDir, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/integrity.e2e-spec.ts b/e2e/src/specs/server/api/integrity.e2e-spec.ts index 8b2b4364a..cd2b946f4 100644 --- a/e2e/src/specs/server/api/integrity.e2e-spec.ts +++ b/e2e/src/specs/server/api/integrity.e2e-spec.ts @@ -7,7 +7,7 @@ import { QueueName, } from '@immich/sdk'; import { readFile } from 'node:fs/promises'; -import { app, testAssetDir, utils } from 'src/utils'; +import { app, testAssetDir, utils } from 'src/utils.js'; import request from 'supertest'; import { afterEach, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/jobs.e2e-spec.ts b/e2e/src/specs/server/api/jobs.e2e-spec.ts index b4228eeb9..119bae011 100644 --- a/e2e/src/specs/server/api/jobs.e2e-spec.ts +++ b/e2e/src/specs/server/api/jobs.e2e-spec.ts @@ -2,7 +2,7 @@ import { LoginResponseDto, QueueCommand, QueueName, updateConfig } from '@immich import { cpSync, rmSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import { basename } from 'node:path'; -import { asBearerAuth, testAssetDir, utils } from 'src/utils'; +import { asBearerAuth, testAssetDir, utils } from 'src/utils.js'; import { afterEach, beforeAll, describe, expect, it } from 'vitest'; describe('/jobs', () => { diff --git a/e2e/src/specs/server/api/library.e2e-spec.ts b/e2e/src/specs/server/api/library.e2e-spec.ts index c3b83cf4e..bb459308d 100644 --- a/e2e/src/specs/server/api/library.e2e-spec.ts +++ b/e2e/src/specs/server/api/library.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto } from '@immich/sdk'; import { cpSync } from 'node:fs'; import { Socket } from 'socket.io-client'; -import { testAssetDir, testAssetDirInternal, utils } from 'src/utils'; +import { testAssetDir, testAssetDirInternal, utils } from 'src/utils.js'; import { utimes } from 'utimes'; import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/map.e2e-spec.ts b/e2e/src/specs/server/api/map.e2e-spec.ts index c7c504b3c..cf6a2abdb 100644 --- a/e2e/src/specs/server/api/map.e2e-spec.ts +++ b/e2e/src/specs/server/api/map.e2e-spec.ts @@ -2,8 +2,8 @@ import { AssetVisibility, LoginResponseDto } from '@immich/sdk'; import { readFile } from 'node:fs/promises'; import { basename, join } from 'node:path'; import { Socket } from 'socket.io-client'; -import { createUserDto } from 'src/fixtures'; -import { app, testAssetDir, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { app, testAssetDir, utils } from 'src/utils.js'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/oauth.e2e-spec.ts b/e2e/src/specs/server/api/oauth.e2e-spec.ts index ac37ce2a6..da018d0f0 100644 --- a/e2e/src/specs/server/api/oauth.e2e-spec.ts +++ b/e2e/src/specs/server/api/oauth.e2e-spec.ts @@ -9,8 +9,8 @@ import { updateConfig, } from '@immich/sdk'; import { createHash, randomBytes } from 'node:crypto'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, baseUrl, utils } from 'src/utils'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, baseUrl, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/person.e2e-spec.ts b/e2e/src/specs/server/api/person.e2e-spec.ts index 7f5518862..62286daf3 100644 --- a/e2e/src/specs/server/api/person.e2e-spec.ts +++ b/e2e/src/specs/server/api/person.e2e-spec.ts @@ -1,7 +1,7 @@ import { getPerson, LoginResponseDto, PersonResponseDto } from '@immich/sdk'; -import { uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { uuidDto } from 'src/fixtures.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/search.e2e-spec.ts b/e2e/src/specs/server/api/search.e2e-spec.ts index 47c88c238..82ff06138 100644 --- a/e2e/src/specs/server/api/search.e2e-spec.ts +++ b/e2e/src/specs/server/api/search.e2e-spec.ts @@ -11,7 +11,7 @@ import { DateTime } from 'luxon'; import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { Socket } from 'socket.io-client'; -import { app, asBearerAuth, TEN_TIMES, testAssetDir, utils } from 'src/utils'; +import { app, asBearerAuth, TEN_TIMES, testAssetDir, utils } from 'src/utils.js'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; const today = DateTime.now(); diff --git a/e2e/src/specs/server/api/server.e2e-spec.ts b/e2e/src/specs/server/api/server.e2e-spec.ts index ea410186c..48d2b2c6d 100644 --- a/e2e/src/specs/server/api/server.e2e-spec.ts +++ b/e2e/src/specs/server/api/server.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { app, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { app, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/session.e2e-spec.ts b/e2e/src/specs/server/api/session.e2e-spec.ts index 6f1599c65..cca29b30e 100644 --- a/e2e/src/specs/server/api/session.e2e-spec.ts +++ b/e2e/src/specs/server/api/session.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, getSessions, login, signUpAdmin } from '@immich/sdk'; -import { loginDto, signupDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { loginDto, signupDto, uuidDto } from 'src/fixtures.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/shared-link.e2e-spec.ts b/e2e/src/specs/server/api/shared-link.e2e-spec.ts index 6fec58c24..af527bcc0 100644 --- a/e2e/src/specs/server/api/shared-link.e2e-spec.ts +++ b/e2e/src/specs/server/api/shared-link.e2e-spec.ts @@ -7,9 +7,9 @@ import { createAlbum, deleteUserAdmin, } from '@immich/sdk'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, baseUrl, shareUrl, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/fixtures.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, baseUrl, shareUrl, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/stack.e2e-spec.ts b/e2e/src/specs/server/api/stack.e2e-spec.ts index 21284dcf7..05b74065d 100644 --- a/e2e/src/specs/server/api/stack.e2e-spec.ts +++ b/e2e/src/specs/server/api/stack.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, searchStacks } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/system-config.e2e-spec.ts b/e2e/src/specs/server/api/system-config.e2e-spec.ts index 91b747cf2..0990f8e99 100644 --- a/e2e/src/specs/server/api/system-config.e2e-spec.ts +++ b/e2e/src/specs/server/api/system-config.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, getConfig } from '@immich/sdk'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/system-metadata.e2e-spec.ts b/e2e/src/specs/server/api/system-metadata.e2e-spec.ts index 18589ed1d..7d7406932 100644 --- a/e2e/src/specs/server/api/system-metadata.e2e-spec.ts +++ b/e2e/src/specs/server/api/system-metadata.e2e-spec.ts @@ -1,5 +1,5 @@ import { LoginResponseDto, getServerConfig } from '@immich/sdk'; -import { app, utils } from 'src/utils'; +import { app, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/tag.e2e-spec.ts b/e2e/src/specs/server/api/tag.e2e-spec.ts index 40c8cd511..466028a22 100644 --- a/e2e/src/specs/server/api/tag.e2e-spec.ts +++ b/e2e/src/specs/server/api/tag.e2e-spec.ts @@ -9,9 +9,9 @@ import { tagAssets, upsertTags, } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { errorDto } from 'src/responses.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/trash.e2e-spec.ts b/e2e/src/specs/server/api/trash.e2e-spec.ts index e3ea72fdd..eaca6d0eb 100644 --- a/e2e/src/specs/server/api/trash.e2e-spec.ts +++ b/e2e/src/specs/server/api/trash.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, getAssetInfo, getAssetStatistics } from '@immich/sdk'; import { existsSync } from 'node:fs'; import { Socket } from 'socket.io-client'; -import { app, asBearerAuth, testAssetDir, testAssetDirInternal, utils } from 'src/utils'; +import { app, asBearerAuth, testAssetDir, testAssetDirInternal, utils } from 'src/utils.js'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/user-admin.e2e-spec.ts b/e2e/src/specs/server/api/user-admin.e2e-spec.ts index 37f3f2ea9..f724b72f7 100644 --- a/e2e/src/specs/server/api/user-admin.e2e-spec.ts +++ b/e2e/src/specs/server/api/user-admin.e2e-spec.ts @@ -9,8 +9,8 @@ import { login, } from '@immich/sdk'; import { Socket } from 'socket.io-client'; -import { createUserDto } from 'src/fixtures'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/api/user.e2e-spec.ts b/e2e/src/specs/server/api/user.e2e-spec.ts index ce6236eab..fb357b30e 100644 --- a/e2e/src/specs/server/api/user.e2e-spec.ts +++ b/e2e/src/specs/server/api/user.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, getMyUser, login } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/fixtures.js'; +import { app, asBearerAuth, utils } from 'src/utils.js'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/specs/server/cli/login.e2e-spec.ts b/e2e/src/specs/server/cli/login.e2e-spec.ts index 98a28be44..07ef85177 100644 --- a/e2e/src/specs/server/cli/login.e2e-spec.ts +++ b/e2e/src/specs/server/cli/login.e2e-spec.ts @@ -1,6 +1,6 @@ import { Permission } from '@immich/sdk'; import { stat } from 'node:fs/promises'; -import { app, immichCli, utils } from 'src/utils'; +import { app, immichCli, utils } from 'src/utils.js'; import { beforeEach, describe, expect, it } from 'vitest'; describe(`immich login`, () => { diff --git a/e2e/src/specs/server/cli/server-info.e2e-spec.ts b/e2e/src/specs/server/cli/server-info.e2e-spec.ts index 96c45c8cc..a778146c7 100644 --- a/e2e/src/specs/server/cli/server-info.e2e-spec.ts +++ b/e2e/src/specs/server/cli/server-info.e2e-spec.ts @@ -1,4 +1,4 @@ -import { immichCli, utils } from 'src/utils'; +import { immichCli, utils } from 'src/utils.js'; import { beforeAll, describe, expect, it } from 'vitest'; describe(`immich server-info`, () => { diff --git a/e2e/src/specs/server/cli/upload.e2e-spec.ts b/e2e/src/specs/server/cli/upload.e2e-spec.ts index 6ed5030e8..db72f7741 100644 --- a/e2e/src/specs/server/cli/upload.e2e-spec.ts +++ b/e2e/src/specs/server/cli/upload.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, getAllAlbums, getAssetStatistics } from '@immich/sdk'; import { cpSync, readFileSync } from 'node:fs'; import { mkdir, readdir, rm, symlink } from 'node:fs/promises'; -import { asKeyAuth, immichCli, specialCharStrings, testAssetDir, utils } from 'src/utils'; +import { asKeyAuth, immichCli, specialCharStrings, testAssetDir, utils } from 'src/utils.js'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; interface Test { diff --git a/e2e/src/specs/server/cli/version.e2e-spec.ts b/e2e/src/specs/server/cli/version.e2e-spec.ts index de03fdf35..7c26635ac 100644 --- a/e2e/src/specs/server/cli/version.e2e-spec.ts +++ b/e2e/src/specs/server/cli/version.e2e-spec.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs'; -import { immichCli } from 'src/utils'; +import { immichCli } from 'src/utils.js'; import { describe, expect, it } from 'vitest'; const pkg = JSON.parse(readFileSync('../packages/cli/package.json', 'utf8')); diff --git a/e2e/src/specs/server/immich-admin/immich-admin.e2e-spec.ts b/e2e/src/specs/server/immich-admin/immich-admin.e2e-spec.ts index ad0e43ff1..f9b62f633 100644 --- a/e2e/src/specs/server/immich-admin/immich-admin.e2e-spec.ts +++ b/e2e/src/specs/server/immich-admin/immich-admin.e2e-spec.ts @@ -1,4 +1,4 @@ -import { immichAdmin, utils } from 'src/utils'; +import { immichAdmin, utils } from 'src/utils.js'; import { beforeAll, describe, expect, it } from 'vitest'; describe(`immich-admin`, () => { diff --git a/e2e/src/specs/web/album.e2e-spec.ts b/e2e/src/specs/web/album.e2e-spec.ts index cd8bb8758..8d5d8b300 100644 --- a/e2e/src/specs/web/album.e2e-spec.ts +++ b/e2e/src/specs/web/album.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; import { readFileSync } from 'node:fs'; -import { testAssetDir, utils } from 'src/utils'; +import { testAssetDir, utils } from 'src/utils.js'; test.describe('Album', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/asset-viewer/detail-panel.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/detail-panel.e2e-spec.ts index bbe0ef328..34275bd72 100644 --- a/e2e/src/specs/web/asset-viewer/detail-panel.e2e-spec.ts +++ b/e2e/src/specs/web/asset-viewer/detail-panel.e2e-spec.ts @@ -3,7 +3,7 @@ import { expect, test } from '@playwright/test'; import { readFile } from 'node:fs/promises'; import { basename, join } from 'node:path'; import type { Socket } from 'socket.io-client'; -import { testAssetDir, utils } from 'src/utils'; +import { testAssetDir, utils } from 'src/utils.js'; test.describe('Detail Panel', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/asset-viewer/navbar.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/navbar.e2e-spec.ts index 8fcd1bbdb..3256a91f9 100644 --- a/e2e/src/specs/web/asset-viewer/navbar.e2e-spec.ts +++ b/e2e/src/specs/web/asset-viewer/navbar.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto, SharedLinkType } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe('Asset Viewer Navbar', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/asset-viewer/slideshow.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/slideshow.e2e-spec.ts index c8cbc2158..3d148040a 100644 --- a/e2e/src/specs/web/asset-viewer/slideshow.e2e-spec.ts +++ b/e2e/src/specs/web/asset-viewer/slideshow.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { expect, type Page, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe('Slideshow', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/auth.e2e-spec.ts b/e2e/src/specs/web/auth.e2e-spec.ts index a14a17791..c19fe2023 100644 --- a/e2e/src/specs/web/auth.e2e-spec.ts +++ b/e2e/src/specs/web/auth.e2e-spec.ts @@ -1,5 +1,5 @@ import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe('Registration', () => { test.beforeAll(() => { diff --git a/e2e/src/specs/web/duplicates.e2e-spec.ts b/e2e/src/specs/web/duplicates.e2e-spec.ts index c39e9019d..6e8b7b74c 100644 --- a/e2e/src/specs/web/duplicates.e2e-spec.ts +++ b/e2e/src/specs/web/duplicates.e2e-spec.ts @@ -1,7 +1,7 @@ import { AssetMediaResponseDto, LoginResponseDto, updateAssets } from '@immich/sdk'; import { expect, test } from '@playwright/test'; import crypto from 'node:crypto'; -import { asBearerAuth, utils } from 'src/utils'; +import { asBearerAuth, utils } from 'src/utils.js'; test.describe('Duplicates Utility', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/integrity.e2e-spec.ts b/e2e/src/specs/web/integrity.e2e-spec.ts index 615b1dc53..30a868729 100644 --- a/e2e/src/specs/web/integrity.e2e-spec.ts +++ b/e2e/src/specs/web/integrity.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, ManualJobName, QueueName } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe.configure({ mode: 'serial' }); diff --git a/e2e/src/specs/web/photo-viewer.e2e-spec.ts b/e2e/src/specs/web/photo-viewer.e2e-spec.ts index 71f2145be..51bc4abfe 100644 --- a/e2e/src/specs/web/photo-viewer.e2e-spec.ts +++ b/e2e/src/specs/web/photo-viewer.e2e-spec.ts @@ -1,7 +1,7 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; import type { Socket } from 'socket.io-client'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe('Photo Viewer', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/shared-link.e2e-spec.ts b/e2e/src/specs/web/shared-link.e2e-spec.ts index 838084093..3eed0ae51 100644 --- a/e2e/src/specs/web/shared-link.e2e-spec.ts +++ b/e2e/src/specs/web/shared-link.e2e-spec.ts @@ -7,7 +7,7 @@ import { createAlbum, } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { asBearerAuth, utils } from 'src/utils'; +import { asBearerAuth, utils } from 'src/utils.js'; test.describe('Shared Links', () => { let admin: LoginResponseDto; diff --git a/e2e/src/specs/web/user-admin.e2e-spec.ts b/e2e/src/specs/web/user-admin.e2e-spec.ts index 67a537ba9..546e85d21 100644 --- a/e2e/src/specs/web/user-admin.e2e-spec.ts +++ b/e2e/src/specs/web/user-admin.e2e-spec.ts @@ -1,6 +1,6 @@ import { getUserAdmin } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { asBearerAuth, utils } from 'src/utils'; +import { asBearerAuth, utils } from 'src/utils.js'; test.describe('User Administration', () => { test.beforeAll(() => { diff --git a/e2e/src/specs/web/websocket.e2e-spec.ts b/e2e/src/specs/web/websocket.e2e-spec.ts index a929c6467..5a5fb7297 100644 --- a/e2e/src/specs/web/websocket.e2e-spec.ts +++ b/e2e/src/specs/web/websocket.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; test.describe('Websocket', () => { let admin: LoginResponseDto; diff --git a/e2e/src/ui/generators/memory/model-objects.ts b/e2e/src/ui/generators/memory/model-objects.ts index 6b4d8c725..02a390954 100644 --- a/e2e/src/ui/generators/memory/model-objects.ts +++ b/e2e/src/ui/generators/memory/model-objects.ts @@ -1,9 +1,9 @@ import { faker } from '@faker-js/faker'; import { MemoryType, type MemoryResponseDto, type OnThisDayDto } from '@immich/sdk'; import { DateTime } from 'luxon'; -import { toAssetResponseDto } from 'src/ui/generators/timeline/rest-response'; -import type { MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config'; -import { SeededRandom, selectRandomMultiple } from 'src/ui/generators/timeline/utils'; +import { toAssetResponseDto } from 'src/ui/generators/timeline/rest-response.js'; +import type { MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config.js'; +import { SeededRandom, selectRandomMultiple } from 'src/ui/generators/timeline/utils.js'; export type MemoryConfig = { id?: string; diff --git a/e2e/src/ui/generators/timeline/distribution-patterns.ts b/e2e/src/ui/generators/timeline/distribution-patterns.ts index b6f3aab6d..35f5ead7f 100644 --- a/e2e/src/ui/generators/timeline/distribution-patterns.ts +++ b/e2e/src/ui/generators/timeline/distribution-patterns.ts @@ -1,5 +1,5 @@ -import { generateConsecutiveDays, generateDayAssets } from 'src/ui/generators/timeline/model-objects'; -import { SeededRandom, selectRandomDays } from 'src/ui/generators/timeline/utils'; +import { generateConsecutiveDays, generateDayAssets } from 'src/ui/generators/timeline/model-objects.js'; +import { SeededRandom, selectRandomDays } from 'src/ui/generators/timeline/utils.js'; import type { MockTimelineAsset } from './timeline-config'; import { GENERATION_CONSTANTS } from './timeline-config'; diff --git a/e2e/src/ui/generators/timeline/images.ts b/e2e/src/ui/generators/timeline/images.ts index 2eb141c55..cba2ebdf8 100644 --- a/e2e/src/ui/generators/timeline/images.ts +++ b/e2e/src/ui/generators/timeline/images.ts @@ -1,5 +1,5 @@ import sharp from 'sharp'; -import { SeededRandom } from 'src/ui/generators/timeline/utils'; +import { SeededRandom } from 'src/ui/generators/timeline/utils.js'; export const randomThumbnail = async (seed: string, ratio: number) => { const height = 235; diff --git a/e2e/src/ui/generators/timeline/model-objects.ts b/e2e/src/ui/generators/timeline/model-objects.ts index 094e5133a..1a45fdb6f 100644 --- a/e2e/src/ui/generators/timeline/model-objects.ts +++ b/e2e/src/ui/generators/timeline/model-objects.ts @@ -6,7 +6,7 @@ import { faker } from '@faker-js/faker'; import { AssetVisibility } from '@immich/sdk'; import { DateTime } from 'luxon'; import { writeFileSync } from 'node:fs'; -import { SeededRandom } from 'src/ui/generators/timeline/utils'; +import { SeededRandom } from 'src/ui/generators/timeline/utils.js'; import type { DayPattern, MonthDistribution } from './distribution-patterns'; import { ASSET_DISTRIBUTION, DAY_DISTRIBUTION } from './distribution-patterns'; import type { MockTimelineAsset, MockTimelineData, SerializedTimelineData, TimelineConfig } from './timeline-config'; diff --git a/e2e/src/ui/generators/timeline/rest-response.ts b/e2e/src/ui/generators/timeline/rest-response.ts index d7cf7adf0..aecb00920 100644 --- a/e2e/src/ui/generators/timeline/rest-response.ts +++ b/e2e/src/ui/generators/timeline/rest-response.ts @@ -15,8 +15,8 @@ import { type UserResponseDto, } from '@immich/sdk'; import { DateTime } from 'luxon'; -import { signupDto } from 'src/fixtures'; -import { parseTimeBucketKey } from 'src/ui/generators/timeline/utils'; +import { signupDto } from 'src/fixtures.js'; +import { parseTimeBucketKey } from 'src/ui/generators/timeline/utils.js'; import type { MockTimelineAsset, MockTimelineData } from './timeline-config'; /** diff --git a/e2e/src/ui/generators/timeline/timeline-config.ts b/e2e/src/ui/generators/timeline/timeline-config.ts index 5bfb2c180..d28d0c6d6 100644 --- a/e2e/src/ui/generators/timeline/timeline-config.ts +++ b/e2e/src/ui/generators/timeline/timeline-config.ts @@ -1,5 +1,5 @@ import type { AssetVisibility } from '@immich/sdk'; -import { DayPattern, MonthDistribution } from 'src/ui/generators/timeline/distribution-patterns'; +import { DayPattern, MonthDistribution } from 'src/ui/generators/timeline/distribution-patterns.js'; // Constants for generation parameters export const GENERATION_CONSTANTS = { diff --git a/e2e/src/ui/generators/timeline/utils.ts b/e2e/src/ui/generators/timeline/utils.ts index fbb9630a3..98ccdc661 100644 --- a/e2e/src/ui/generators/timeline/utils.ts +++ b/e2e/src/ui/generators/timeline/utils.ts @@ -1,5 +1,5 @@ import { DateTime } from 'luxon'; -import { GENERATION_CONSTANTS, MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config'; +import { GENERATION_CONSTANTS, MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config.js'; /** * Linear Congruential Generator for deterministic pseudo-random numbers diff --git a/e2e/src/ui/mock-network/base-network.ts b/e2e/src/ui/mock-network/base-network.ts index af8d1dbfe..0b361bd72 100644 --- a/e2e/src/ui/mock-network/base-network.ts +++ b/e2e/src/ui/mock-network/base-network.ts @@ -1,5 +1,5 @@ import { BrowserContext } from '@playwright/test'; -import { playwrightHost } from 'src/../playwright.config'; +import { playwrightHost } from 'src/../playwright.config.js'; export const setupBaseMockApiRoutes = async (context: BrowserContext, adminUserId: string) => { await context.addCookies([ diff --git a/e2e/src/ui/mock-network/broken-asset-network.ts b/e2e/src/ui/mock-network/broken-asset-network.ts index 2137cdd90..6d8f657a2 100644 --- a/e2e/src/ui/mock-network/broken-asset-network.ts +++ b/e2e/src/ui/mock-network/broken-asset-network.ts @@ -1,7 +1,7 @@ import { faker } from '@faker-js/faker'; import { AssetTypeEnum, AssetVisibility, type AssetResponseDto, type StackResponseDto } from '@immich/sdk'; import { BrowserContext } from '@playwright/test'; -import { randomPreview, randomThumbnail } from 'src/ui/generators/timeline'; +import { randomPreview, randomThumbnail } from 'src/ui/generators/timeline.js'; export type MockStack = { id: string; diff --git a/e2e/src/ui/mock-network/face-editor-network.ts b/e2e/src/ui/mock-network/face-editor-network.ts index 778f04baf..89f3b67a4 100644 --- a/e2e/src/ui/mock-network/face-editor-network.ts +++ b/e2e/src/ui/mock-network/face-editor-network.ts @@ -1,5 +1,5 @@ import { BrowserContext } from '@playwright/test'; -import { randomThumbnail } from 'src/ui/generators/timeline'; +import { randomThumbnail } from 'src/ui/generators/timeline.js'; // Minimal valid H.264 MP4 (8x8px, 1 frame) that browsers can decode to get videoWidth/videoHeight const MINIMAL_MP4_BASE64 = diff --git a/e2e/src/ui/mock-network/timeline-network.ts b/e2e/src/ui/mock-network/timeline-network.ts index 1a745b294..9c1947b6c 100644 --- a/e2e/src/ui/mock-network/timeline-network.ts +++ b/e2e/src/ui/mock-network/timeline-network.ts @@ -11,7 +11,7 @@ import { randomThumbnail, TimelineData, } from 'src/ui/generators/timeline'; -import { sleep } from 'src/ui/specs/timeline/utils'; +import { sleep } from 'src/ui/specs/timeline/utils.js'; import { MINIMAL_MP4_BUFFER } from './face-editor-network'; export class TimelineTestContext { diff --git a/e2e/src/ui/specs/asset-viewer/asset-viewer.e2e-spec.ts b/e2e/src/ui/specs/asset-viewer/asset-viewer.e2e-spec.ts index 85798f6be..c89b4881b 100644 --- a/e2e/src/ui/specs/asset-viewer/asset-viewer.e2e-spec.ts +++ b/e2e/src/ui/specs/asset-viewer/asset-viewer.e2e-spec.ts @@ -9,9 +9,9 @@ import { TimelineAssetConfig, TimelineData, } from 'src/ui/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network'; -import { utils } from 'src/utils'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network.js'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network.js'; +import { utils } from 'src/utils.js'; import { assetViewerUtils } from '../timeline/utils'; test.describe.configure({ mode: 'parallel' }); diff --git a/e2e/src/ui/specs/asset-viewer/broken-asset.e2e-spec.ts b/e2e/src/ui/specs/asset-viewer/broken-asset.e2e-spec.ts index 2b036d3f5..f26e307fb 100644 --- a/e2e/src/ui/specs/asset-viewer/broken-asset.e2e-spec.ts +++ b/e2e/src/ui/specs/asset-viewer/broken-asset.e2e-spec.ts @@ -1,5 +1,5 @@ import { expect, test } from '@playwright/test'; -import { toAssetResponseDto } from 'src/ui/generators/timeline'; +import { toAssetResponseDto } from 'src/ui/generators/timeline.js'; import { createMockStack, createMockStackAsset, diff --git a/e2e/src/ui/specs/asset-viewer/face-editor.e2e-spec.ts b/e2e/src/ui/specs/asset-viewer/face-editor.e2e-spec.ts index b1058f646..452fd070d 100644 --- a/e2e/src/ui/specs/asset-viewer/face-editor.e2e-spec.ts +++ b/e2e/src/ui/specs/asset-viewer/face-editor.e2e-spec.ts @@ -1,5 +1,5 @@ import { expect, Page, test } from '@playwright/test'; -import { SeededRandom, selectRandom, TimelineAssetConfig } from 'src/ui/generators/timeline'; +import { SeededRandom, selectRandom, TimelineAssetConfig } from 'src/ui/generators/timeline.js'; import { createMockPeople, FaceCreateCapture, diff --git a/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts b/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts index 5a442a608..928ee9afe 100644 --- a/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts +++ b/e2e/src/ui/specs/asset-viewer/ocr.e2e-spec.ts @@ -1,13 +1,13 @@ import type { AssetOcrResponseDto, AssetResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { toAssetResponseDto } from 'src/ui/generators/timeline'; +import { toAssetResponseDto } from 'src/ui/generators/timeline.js'; import { createMockStack, createMockStackAsset, MockStack, setupBrokenAssetMockApiRoutes, } from 'src/ui/mock-network/broken-asset-network'; -import { createMockOcrData, setupOcrMockApiRoutes } from 'src/ui/mock-network/ocr-network'; +import { createMockOcrData, setupOcrMockApiRoutes } from 'src/ui/mock-network/ocr-network.js'; import { assetViewerUtils } from '../timeline/utils'; import { setupAssetViewerFixture } from './utils'; diff --git a/e2e/src/ui/specs/asset-viewer/stack.e2e-spec.ts b/e2e/src/ui/specs/asset-viewer/stack.e2e-spec.ts index 976a44dd9..24c3ceb50 100644 --- a/e2e/src/ui/specs/asset-viewer/stack.e2e-spec.ts +++ b/e2e/src/ui/specs/asset-viewer/stack.e2e-spec.ts @@ -1,7 +1,7 @@ import { faker } from '@faker-js/faker'; import type { AssetResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { toAssetResponseDto } from 'src/ui/generators/timeline'; +import { toAssetResponseDto } from 'src/ui/generators/timeline.js'; import { createMockStack, createMockStackAsset, diff --git a/e2e/src/ui/specs/asset-viewer/utils.ts b/e2e/src/ui/specs/asset-viewer/utils.ts index 8cc2ad711..b8a1fddc5 100644 --- a/e2e/src/ui/specs/asset-viewer/utils.ts +++ b/e2e/src/ui/specs/asset-viewer/utils.ts @@ -11,9 +11,9 @@ import { TimelineData, toAssetResponseDto, } from 'src/ui/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network'; -import { utils } from 'src/utils'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network.js'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network.js'; +import { utils } from 'src/utils.js'; export type AssetViewerTestFixture = { adminUserId: string; diff --git a/e2e/src/ui/specs/memory/memory-viewer.e2e-spec.ts b/e2e/src/ui/specs/memory/memory-viewer.e2e-spec.ts index 8b088a382..e088924d7 100644 --- a/e2e/src/ui/specs/memory/memory-viewer.e2e-spec.ts +++ b/e2e/src/ui/specs/memory/memory-viewer.e2e-spec.ts @@ -1,7 +1,7 @@ import { faker } from '@faker-js/faker'; import type { MemoryResponseDto } from '@immich/sdk'; import { test } from '@playwright/test'; -import { generateMemoriesFromTimeline } from 'src/ui/generators/memory'; +import { generateMemoriesFromTimeline } from 'src/ui/generators/memory.js'; import { Changes, createDefaultTimelineConfig, @@ -9,9 +9,9 @@ import { TimelineAssetConfig, TimelineData, } from 'src/ui/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; -import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/ui/mock-network/memory-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network.js'; +import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/ui/mock-network/memory-network.js'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network.js'; import { memoryAssetViewerUtils, memoryGalleryUtils, memoryViewerUtils } from './utils'; test.describe.configure({ mode: 'parallel' }); diff --git a/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts b/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts index 87f809de7..90add2535 100644 --- a/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts +++ b/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts @@ -8,8 +8,8 @@ import { TimelineData, toAssetResponseDto, } from 'src/ui/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network.js'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network.js'; import { assetViewerUtils } from '../timeline/utils'; const buildSearchUrl = (assetId: string) => { diff --git a/e2e/src/ui/specs/timeline/timeline.e2e-spec.ts b/e2e/src/ui/specs/timeline/timeline.e2e-spec.ts index adbff0d3b..71524ab01 100644 --- a/e2e/src/ui/specs/timeline/timeline.e2e-spec.ts +++ b/e2e/src/ui/specs/timeline/timeline.e2e-spec.ts @@ -13,13 +13,13 @@ import { TimelineAssetConfig, TimelineData, } from 'src/ui/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network.js'; import { pageRoutePromise, setupTimelineMockApiRoutes, TimelineTestContext, } from 'src/ui/mock-network/timeline-network'; -import { utils } from 'src/utils'; +import { utils } from 'src/utils.js'; import { assetViewerUtils, padYearMonth, pageUtils, poll, thumbnailUtils, timelineUtils } from './utils'; test.describe.configure({ mode: 'parallel' }); diff --git a/e2e/src/ui/specs/timeline/utils.ts b/e2e/src/ui/specs/timeline/utils.ts index 96cdbc00b..3410331c0 100644 --- a/e2e/src/ui/specs/timeline/utils.ts +++ b/e2e/src/ui/specs/timeline/utils.ts @@ -1,6 +1,6 @@ import { expect, Page } from '@playwright/test'; import { DateTime } from 'luxon'; -import { TimelineAssetConfig } from 'src/ui/generators/timeline'; +import { TimelineAssetConfig } from 'src/ui/generators/timeline.js'; export const sleep = (ms: number) => { return new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/e2e/src/utils.ts b/e2e/src/utils.ts index 131297bb8..94f747eff 100644 --- a/e2e/src/utils.ts +++ b/e2e/src/utils.ts @@ -67,8 +67,8 @@ import { promisify } from 'node:util'; import { createGzip } from 'node:zlib'; import pg from 'pg'; import { io, type Socket } from 'socket.io-client'; -import { loginDto, signupDto } from 'src/fixtures'; -import { makeRandomImage } from 'src/generators'; +import { loginDto, signupDto } from 'src/fixtures.js'; +import { makeRandomImage } from 'src/generators.js'; import request from 'supertest'; import { playwrightDbHost, playwrightHost, playwriteBaseUrl } from '../playwright.config'; diff --git a/packages/cli/src/commands/asset.ts b/packages/cli/src/commands/asset.ts index f1dfdaec8..1850cc70b 100644 --- a/packages/cli/src/commands/asset.ts +++ b/packages/cli/src/commands/asset.ts @@ -21,8 +21,8 @@ import micromatch from 'micromatch'; import { Stats, createReadStream, existsSync } from 'node:fs'; import { stat, unlink } from 'node:fs/promises'; import path, { basename } from 'node:path'; -import { Queue } from 'src/queue'; -import { BaseOptions, Batcher, authenticate, crawl, requirePermissions, s, sha1 } from 'src/utils'; +import { Queue } from 'src/queue.js'; +import { BaseOptions, Batcher, authenticate, crawl, requirePermissions, s, sha1 } from 'src/utils.js'; const UPLOAD_WATCH_BATCH_SIZE = 100; const UPLOAD_WATCH_DEBOUNCE_TIME_MS = 10_000; diff --git a/packages/cli/src/commands/server-info.ts b/packages/cli/src/commands/server-info.ts index 9a5098e62..d506a87d8 100644 --- a/packages/cli/src/commands/server-info.ts +++ b/packages/cli/src/commands/server-info.ts @@ -1,5 +1,5 @@ import { getAssetStatistics, getMyUser, getServerVersion, getSupportedMediaTypes, Permission } from '@immich/sdk'; -import { authenticate, BaseOptions, requirePermissions } from 'src/utils'; +import { authenticate, BaseOptions, requirePermissions } from 'src/utils.js'; export const serverInfo = async (options: BaseOptions) => { const { url } = await authenticate(options); diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index deef7d8c8..ef921b6d9 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -3,9 +3,9 @@ import { AssetVisibility } from '@immich/sdk'; import { Command, Option } from 'commander'; import os from 'node:os'; import path from 'node:path'; -import { upload } from 'src/commands/asset'; -import { login, logout } from 'src/commands/auth'; -import { serverInfo } from 'src/commands/server-info'; +import { upload } from 'src/commands/asset.js'; +import { login, logout } from 'src/commands/auth.js'; +import { serverInfo } from 'src/commands/server-info.js'; import { version } from '../package.json'; const defaultConfigDirectory = path.join(os.homedir(), '.config/immich/'); diff --git a/packages/cli/src/utils.spec.ts b/packages/cli/src/utils.spec.ts index 3924f9ecb..821d43be4 100644 --- a/packages/cli/src/utils.spec.ts +++ b/packages/cli/src/utils.spec.ts @@ -1,6 +1,6 @@ import mockfs from 'mock-fs'; import { readFileSync } from 'node:fs'; -import { Batcher, CrawlOptions, crawl } from 'src/utils'; +import { Batcher, CrawlOptions, crawl } from 'src/utils.js'; import { Mock } from 'vitest'; interface Test { diff --git a/packages/scripts/src/commands/release.ts b/packages/scripts/src/commands/release.ts index 78e5027bd..f27ea24d1 100644 --- a/packages/scripts/src/commands/release.ts +++ b/packages/scripts/src/commands/release.ts @@ -8,10 +8,10 @@ import { RELEASE_TYPES, ReleaseError, ReleaseInputError, - ReleaseOptions, - ReleaseType, + type ReleaseOptions, + type ReleaseType, TextFile, -} from 'src/types'; +} from 'src/types.js'; const root = join(dirname(fileURLToPath(import.meta.url)), '../../../'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 484234062..b407b19e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -410,29 +410,29 @@ importers: specifier: ^0.6.3 version: 0.6.3 '@nestjs/bullmq': - specifier: ^11.0.1 - version: 11.0.5(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(bullmq@5.81.3(supports-color@8.1.1)) + specifier: ^12.0.0 + version: 12.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(bullmq@5.81.3(supports-color@8.1.1)) '@nestjs/common': - specifier: ^11.0.4 - version: 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + specifier: ^12.0.0 + version: 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) '@nestjs/core': - specifier: ^11.0.4 - version: 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + specifier: ^12.0.0 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/platform-express': - specifier: ^11.0.4 - version: 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(supports-color@8.1.1) + specifier: ^12.0.0 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(supports-color@8.1.1) '@nestjs/platform-socket.io': - specifier: ^11.0.4 - version: 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/websockets@11.2.3)(rxjs@7.8.2)(supports-color@8.1.1) + specifier: ^12.0.0 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/websockets@12.0.1)(rxjs@7.8.2)(supports-color@8.1.1) '@nestjs/schedule': - specifier: ^6.0.0 - version: 6.1.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3) + specifier: ^12.0.1 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1) '@nestjs/swagger': - specifier: ^11.4.2 - version: 11.4.7(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2) + specifier: ^12.0.0 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2) '@nestjs/websockets': - specifier: ^11.0.4 - version: 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@nestjs/platform-socket.io@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + specifier: ^12.0.0 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@nestjs/platform-socket.io@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.1 @@ -545,12 +545,12 @@ importers: specifier: ^9.0.2 version: 9.0.3 kysely: - specifier: 0.28.17 - version: 0.28.17 + specifier: ^0.29.5 + version: 0.29.5 kysely-postgres-js: specifier: ^3.0.0 - version: 3.0.0(kysely@0.28.17)(postgres@3.4.9) - lodash: + version: 3.0.0(kysely@0.29.5)(postgres@3.4.9) + lodash-es: specifier: ^4.17.21 version: 4.18.1 luxon: @@ -564,19 +564,19 @@ importers: version: 2.2.0 nest-commander: specifier: ^3.16.0 - version: 3.20.1(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@types/inquirer@8.2.13)(@types/node@24.13.3)(@typescript/typescript6@6.0.2) + version: 3.20.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@types/inquirer@8.2.13)(@types/node@24.13.3)(@typescript/typescript6@6.0.2) nestjs-cls: specifier: ^6.0.0 - version: 6.2.2(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 6.2.2(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) nestjs-kysely: specifier: 3.1.3 - version: 3.1.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(kysely@0.28.17)(reflect-metadata@0.2.2) + version: 3.1.3(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(kysely@0.29.5)(reflect-metadata@0.2.2) nestjs-otel: specifier: ^8.0.0 - version: 8.1.0(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(rxjs@7.8.2) + version: 8.1.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(rxjs@7.8.2) nestjs-zod: specifier: ^5.5.0 - version: 5.5.0(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@11.4.7(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.4.3) + version: 5.5.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.4.3) nodemailer: specifier: ^9.0.0 version: 9.0.5 @@ -646,16 +646,16 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.0 - version: 10.0.1(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)) + version: 10.0.1(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) '@nestjs/cli': - specifier: ^11.0.2 - version: 11.0.24(@swc/core@1.16.1(@swc/helpers@0.5.23))(@types/node@24.13.3)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(prettier@3.9.6)(uglify-js@3.19.3) + specifier: ^12.0.0 + version: 12.0.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(@types/node@24.13.3)(fork-ts-checker-webpack-plugin@9.1.0(@typescript/typescript6@6.0.2)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)))(prettier@3.9.6)(tsconfig-paths-webpack-plugin@4.2.0)(webpack-node-externals@3.0.0)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) '@nestjs/schematics': - specifier: ^11.0.0 - version: 11.1.0(@typescript/typescript6@6.0.2)(chokidar@4.0.3)(prettier@3.9.6) + specifier: ^12.0.0 + version: 12.0.0(@typescript/typescript6@6.0.2)(chokidar@4.0.3)(prettier@3.9.6) '@nestjs/testing': - specifier: ^11.0.4 - version: 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@nestjs/platform-express@11.2.3) + specifier: ^12.0.0 + version: 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@nestjs/platform-express@12.0.1) '@swc/core': specifier: ^1.4.14 version: 1.16.1(@swc/helpers@0.5.23) @@ -689,9 +689,9 @@ importers: '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 - '@types/lodash': + '@types/lodash-es': specifier: ^4.14.197 - version: 4.17.25 + version: 4.17.12 '@types/luxon': specifier: ^3.6.2 version: 3.7.5 @@ -733,19 +733,19 @@ importers: version: typescript@7.0.2 '@vitest/coverage-v8': specifier: ^4.0.0 - version: 4.1.11(vitest@3.2.7(@types/debug@4.1.13)(@types/node@24.13.3)(happy-dom@20.11.8)(jiti@2.7.0)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)) + version: 4.1.11(vitest@4.1.11) eslint: specifier: ^10.0.0 - version: 10.9.1(jiti@2.7.0)(supports-color@8.1.1) + version: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)) + version: 10.1.8(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)))(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(prettier@3.9.6) + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)))(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(prettier@3.9.6) eslint-plugin-unicorn: specifier: ^73.0.0 - version: 73.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)) + version: 73.0.0(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) globals: specifier: ^17.0.0 version: 17.11.0 @@ -773,21 +773,21 @@ importers: testcontainers: specifier: ^12.0.0 version: 12.1.0(supports-color@8.1.1) + tsc-alias: + specifier: ^1.8.16 + version: 1.9.2 typescript: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' typescript-eslint: specifier: ^8.28.0 - version: 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1) + version: 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) unplugin-swc: specifier: ^1.4.5 - version: 1.5.11(@swc/core@1.16.1(@swc/helpers@0.5.23))(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) - vite-tsconfig-paths: - specifier: ^6.0.0 - version: 6.1.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)) + version: 1.5.11(@swc/core@1.16.1(@swc/helpers@0.5.23))(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) vitest: - specifier: ^3.0.0 - version: 3.2.7(@types/debug@4.1.13)(@types/node@24.13.3)(happy-dom@20.11.8)(jiti@2.7.0)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) + specifier: ^4.0.0 + version: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.11)(happy-dom@20.11.8)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)) web: dependencies: @@ -1157,36 +1157,23 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@angular-devkit/core@19.2.24': - resolution: {integrity: sha512-Kd49warf6U/EyWe5BszF/eebN3zQ3bk7tgfEljAw8q/rX95UUtriJubWvp6pgzHfzBA4jwq8f+QiNZB8eBEXPA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/core@22.1.5': + resolution: {integrity: sha512-HiY6d5dkIdJs5grP9OHvgkf14QOcDIo+hbuT7YKuLItQ++ZxCwUabJMLCCJ5R0KrstE5NqED0dNcyk5WD01t5Q==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: - chokidar: ^4.0.0 + chokidar: ^5.0.0 peerDependenciesMeta: chokidar: optional: true - '@angular-devkit/core@19.2.27': - resolution: {integrity: sha512-3amNzoCVSKd7ah6l6lBQL4onwwJvqvam7FMoQBILrxtW5LB5ezh8gMSPuA4zJjKjoRzf9uoWdlzqv/84I52xZA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^4.0.0 - peerDependenciesMeta: - chokidar: - optional: true - - '@angular-devkit/schematics-cli@19.2.27': - resolution: {integrity: sha512-wHYH6SVXVykhLzovUHtYor3Nl4SpIiITi7r9DQDaKYUD4hpRBx25W6N9eGuakT9Vd5tV/x6wmvQFWQZQwFB7eA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics-cli@22.1.5': + resolution: {integrity: sha512-VB/5fH2b/2j8eeMm25vRYCJzBbpaM/VyHc8/+WqPzJahdWuvL0CeLWrxjHHT1exQ/kgbqHLaIWMgSywZe3EBhA==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular-devkit/schematics@19.2.24': - resolution: {integrity: sha512-lnw+ZM1Io+cJAkReC0NPDjqObL8NtKzKIkdgEEKC8CUmkhurYhedbicN8Y8NYHgG1uLd2GozW3+/QqPRZaN+Lw==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - - '@angular-devkit/schematics@19.2.27': - resolution: {integrity: sha512-/PZmyAlb2NGWPikRRuiWLdfHQd8Wrx6lX4HqvTcaDhlU43M3T0ud4PH2T3QDp7BzHYY92xtD8iPxX2asg67G1A==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics@22.1.5': + resolution: {integrity: sha512-HTmo9y8wjXKtJGVTYomTjZsjWzhirpu1pPRAzsVob3eiYOuxv1qDRAgWiHXNGp5CpnbHunZweXY/WffNGOFRyA==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -3125,49 +3112,49 @@ packages: '@sveltejs/kit': ^2.13.0 svelte: ^5.0.0 - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} + '@inquirer/ansi@2.0.7': + resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/checkbox@4.3.2': - resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} - engines: {node: '>=18'} + '@inquirer/checkbox@5.2.3': + resolution: {integrity: sha512-XEYX2WA8SBkLPczL6/yXPHLPCvDoptmh9v56Cy05BSV1Smk1vWy19bTC4qJBuIffw7+6l4CcaYYzGqG60RfW1g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} + '@inquirer/confirm@6.3.0': + resolution: {integrity: sha512-pZHXJImFtERmSNMBHcjwuz8Ck5vEFEYNUZnwbb8aJpjHv/TwGuFErNxF2Hp8+V+pNJs2EYPMlyWscvFEqO9jOQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} + '@inquirer/core@12.0.1': + resolution: {integrity: sha512-JMD5Jy/ScL5TZE18m83Nw25HjqGFLoWXwnEkW7IdwwAhZpB9Bus55/WU7zn3UqR1MOCjjTQOIYpiD4vjWA3LPw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/editor@4.2.23': - resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} - engines: {node: '>=18'} + '@inquirer/editor@5.3.1': + resolution: {integrity: sha512-y43COoyVUjPWIobn2Qep/uI1drPS78aaZZZ9kVi94Tyu/GuW2N8d8Q4rifJXGAXCEAXCPTTMjD8gC1HyvM5ukA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/expand@4.0.23': - resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} - engines: {node: '>=18'} + '@inquirer/expand@5.1.3': + resolution: {integrity: sha512-3NQJiXNJ/aj9wiAsr7pECdp5Qe9J0X9YUJCKsaFXS+ddOxfL6J4AIl3w3T4Gq3kK0WsQY5GMoDokK5X94m6lHw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -3183,85 +3170,94 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} - - '@inquirer/input@4.3.1': - resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} - engines: {node: '>=18'} + '@inquirer/external-editor@3.0.4': + resolution: {integrity: sha512-tZbbaK2ovq6vlrRBNQvjrypmrED/p5x2ncIHQ79cD55tei3dD96v5glMMA+6tiq7K104i/25DVYKWVPJuV6ptA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/number@3.0.23': - resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} - engines: {node: '>=18'} + '@inquirer/figures@2.0.8': + resolution: {integrity: sha512-tApbon79GM9ry56ja/Ud3SY2CL4TQsao9fIwDQbgTeNY55025GdMzQ2+UdegV/lx51VNGUB59M0v0nMpybYY4Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + + '@inquirer/input@5.1.4': + resolution: {integrity: sha512-3xQkQrOvgOzpSN2ciTVdRDlg1FWMCA8l+0KfB6SNlILoTCGzJTzO/gc0Rwjcb3usuGyKdaGtI6OiyMdeMeLWkg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/password@4.0.23': - resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} - engines: {node: '>=18'} + '@inquirer/number@4.2.1': + resolution: {integrity: sha512-5KaqwZNLRpUuWcoCrYghPP9TMaXL5v2Sk4xqePM7RCVegcJStoXdWibio60YIC1bec+z1fCyb67N6XPJIkZtGA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@7.10.1': - resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} - engines: {node: '>=18'} + '@inquirer/password@5.2.0': + resolution: {integrity: sha512-CvVcW09emkBESEOW+4R8CjLNkP3fB3XrjeL8CDvfpjgrJN+V9oerXmJAXXM3l+4xqYPD5Yaujzy/Ph0PLOdDuA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@7.3.2': - resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==} - engines: {node: '>=18'} + '@inquirer/prompts@8.5.2': + resolution: {integrity: sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/rawlist@4.1.11': - resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} - engines: {node: '>=18'} + '@inquirer/prompts@8.7.0': + resolution: {integrity: sha512-yQwBMYvpJ6jqrXtKiOwRD5XezjJoyt3VQvIyjsr5Arqb519nfIohOQymWVJ8/vEgg8xtZerrCsqlSaqt/LPC9A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/search@3.2.2': - resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} - engines: {node: '>=18'} + '@inquirer/rawlist@5.3.3': + resolution: {integrity: sha512-Mu7WrtmDLaXBDEyrRLS70SZgX9ZSm4Up1w0ZxiH8C1OOp9oaVCn2k8q3QGgmlnhsKYUhuaU3zFWhAP6wxkVIMA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/select@4.4.2': - resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} - engines: {node: '>=18'} + '@inquirer/search@4.3.1': + resolution: {integrity: sha512-0VWOvsHWI0rPj6CG70MoP4oXNCB6adcyN8bVFZXnh11eLDdPIK2f2XCmva78acPPDfJisfab7qNakwBh7hdBXw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} + '@inquirer/select@5.2.3': + resolution: {integrity: sha512-KuRTodDa6xBXX2noIpjuitpX/QT7Sfav7dIZ/OfUY54Hxg95nrGoshSzxx6Ey7qqLbImKdiGkSDt7KjPXjQgmA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@4.1.0': + resolution: {integrity: sha512-FMiJpuHUG3Dk0ex+UIXkre7i+i4OcwHWk9YdcVtZHFwb/r2rnrU2ipTCNAB7A+QOP0ryzIcqOfy76fRyyvOEAw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -3572,34 +3568,52 @@ packages: '@namnode/store@0.1.0': resolution: {integrity: sha512-4NGTldxKcmY0UuZ7OEkvCjs8ZEoeYB6M2UwMu74pdLiFMKxXbj9HdNk1Qn213bxX1O7bY5h+PLh5DZsTURZkYA==} - '@nestjs/bull-shared@11.0.5': - resolution: {integrity: sha512-QI7GHPk4oePBwszAZn/Kz5hgB79KijB1RDoo+E/BrSt33sHUrvRZXVyO0+knZleyloRYy0LT2VwsqSP/aQvg4Q==} + '@nestjs/bull-shared@12.0.0': + resolution: {integrity: sha512-OShKmwIt00oK2DIqKP4mjh9C2RQsoHPZbBsQwbnETPmK/+Ld1xyYQa1WOrYKKA8qoSzZJvxQaA6/4sV5SfAIyA==} peerDependencies: - '@nestjs/common': ^10.0.0 || ^11.0.0 - '@nestjs/core': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 || ^12.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 || ^12.0.0 - '@nestjs/bullmq@11.0.5': - resolution: {integrity: sha512-u0VGVc5aER8A+4jEYXDin2rtqIHR8sFL68RUgNDgZslvjdeb1QL4CF+Sr0v4zMXJEfaLSVD606Oq0cryNNCxHg==} + '@nestjs/bullmq@12.0.0': + resolution: {integrity: sha512-8aOL+TA2W6BgWVeNroofk4CDJrutPt8m+Kp5oghwOUHF73mSPDWTS2vPssuF8IrBq8g195JnKAc2Tu1OdQidLQ==} peerDependencies: - '@nestjs/common': ^10.0.0 || ^11.0.0 - '@nestjs/core': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 || ^12.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 || ^12.0.0 bullmq: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - '@nestjs/cli@11.0.24': - resolution: {integrity: sha512-aIHxQLSYtXShifA3zwWIeznEsZnNa3Iz2QRykFj+sl9IcbERBHr5nH87FRgywM+He3NxoF5WazHfR8FsmVeWxw==} + '@nestjs/cli@12.0.0': + resolution: {integrity: sha512-DxgGUKA4gj92lU2lF23Mlvm6y7AQBKEBuanNKNcmHeP6Cn3yqPZxN0LqyaJys25JCqO1bN8KgE3LICrvYlB93g==} engines: {node: '>= 20.11'} hasBin: true peerDependencies: - '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 || ^0.8.0 - '@swc/core': ^1.3.62 + '@rspack/core': ^1.7.7 || ^2.1.10 + '@swc/cli': ^0.8.0 + '@swc/core': ^1.15.18 + fork-ts-checker-webpack-plugin: ^9.1.0 + ts-loader: ^9.5.4 + tsconfig-paths-webpack-plugin: ^4.2.0 + webpack: ^5.105.4 + webpack-node-externals: ^3.0.0 peerDependenciesMeta: + '@rspack/core': + optional: true '@swc/cli': optional: true '@swc/core': optional: true + fork-ts-checker-webpack-plugin: + optional: true + ts-loader: + optional: true + tsconfig-paths-webpack-plugin: + optional: true + webpack: + optional: true + webpack-node-externals: + optional: true - '@nestjs/common@11.2.3': - resolution: {integrity: sha512-obdauJXHfthhepbV+LpGe88OeBlR/Kw9lwjLo0Utzc//agoLXYb9DUGhPQWtm81IpBWMv+19eiwcve9MsBZwXA==} + '@nestjs/common@12.0.1': + resolution: {integrity: sha512-v0zTaRCTV2K2xSnb3GnJoQKtaR6VxouJtm+P2gpr5w61dlXeWpXl1WVknCSzUqx2QwTV10tBkHETxvQvkf2Exg==} peerDependencies: class-transformer: '>=0.4.1' class-validator: '>=0.13.2' @@ -3611,14 +3625,14 @@ packages: class-validator: optional: true - '@nestjs/core@11.2.3': - resolution: {integrity: sha512-vkA9/Ja0Z3hvqXErSa+HaxrfF+cNXthNFi8VPNEKVli4rMd009yExAl0gLmko/Kf8peDXr72u1RN+j9Da2ukHg==} + '@nestjs/core@12.0.1': + resolution: {integrity: sha512-rU6tAi8vDdyzHgN0iW0J4UJvziroOqzHqzlqL7phOSPizaXVEePfv+OUOsdJEOh0Qd14mslc3udOheLrAEcZow==} engines: {node: '>= 20'} peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/microservices': ^11.0.0 - '@nestjs/platform-express': ^11.0.0 - '@nestjs/websockets': ^11.0.0 + '@nestjs/common': ^12.0.0 + '@nestjs/microservices': ^12.0.0 + '@nestjs/platform-express': ^12.0.0 + '@nestjs/websockets': ^12.0.0 reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: @@ -3629,10 +3643,11 @@ packages: '@nestjs/websockets': optional: true - '@nestjs/mapped-types@2.1.1': - resolution: {integrity: sha512-SCCoMEJ6jdeI5h/N+KCVF1+pmg/hmEkNA5nHTS8Gvww7T/LCl4o1gFLinw2iQ60w7slFkszHcGLKGdazVI4F8A==} + '@nestjs/mapped-types@12.0.0': + resolution: {integrity: sha512-aX7lxZcqXldtnSr0bgT2ZPQvpTpIwBMW1GMX29o4s3q02vmq6JoTYuPW0GwYXa8BiFMRX7WbGZVDA703pNqOMQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 || ^12.0.0 class-transformer: ^0.4.0 || ^0.5.0 class-validator: ^0.13.0 || ^0.14.0 || ^0.15.0 reflect-metadata: ^0.1.12 || ^0.2.0 @@ -3642,40 +3657,43 @@ packages: class-validator: optional: true - '@nestjs/platform-express@11.2.3': - resolution: {integrity: sha512-YFQvRXT2de1qNL9LJPUBQ31+RsfI4cJ+sbpU9ENM/hDCgoHSEhm7oxUuGGKmhTZBNZEYm8mDYdfoTFmAH1LIJg==} + '@nestjs/platform-express@12.0.1': + resolution: {integrity: sha512-nF8bRgROptMyixYBfiJUAsjj2o9k13zxAjUKYaqHTPk8mTSd+gk7hXz6NykXNrfHWmMEYC9RttQlMUdMHNTbuA==} peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/core': ^11.0.0 + '@nestjs/common': ^12.0.0 + '@nestjs/core': ^12.0.0 - '@nestjs/platform-socket.io@11.2.3': - resolution: {integrity: sha512-N0oW0b6EG4THDRYsSmyQMOwNnDU+Kzgk0M60jtWjWaxN8J5YQMA/yjmq7FcwMzH8hRpj5/9yq9XNRXapAm2djQ==} + '@nestjs/platform-socket.io@12.0.1': + resolution: {integrity: sha512-1lNTp0tjlRp+5rMX5b3G0l9bt1CH4ejH4ZMn7Qi7dJc536UpweNVWmL5zm8EHFN71Q3CxP1PbqL6aw+QrtS+8w==} peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/websockets': ^11.0.0 + '@nestjs/common': ^12.0.0 + '@nestjs/websockets': ^12.0.0 rxjs: ^7.1.0 - '@nestjs/schedule@6.1.3': - resolution: {integrity: sha512-RflMFOpR16Dwd1jAUbeB4mfGTCh65fvEdL4mSjQPJChpkRGRjIXjb+6YQcK2faQrVT60c9DmLmoVR7/ONCtuYQ==} + '@nestjs/schedule@12.0.1': + resolution: {integrity: sha512-v0z/li9L8oxpvuIDAGm5uOLaZ8KzsfZRzgWgppvs5vClneSinZP5IFl3C1F1DCeTCkNLiGN9g/oLUvzg8x++RQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@nestjs/common': ^10.0.0 || ^11.0.0 - '@nestjs/core': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^11.0.0 || ^12.0.0 + '@nestjs/core': ^11.0.0 || ^12.0.0 - '@nestjs/schematics@11.1.0': - resolution: {integrity: sha512-lVxGZ46tcdItFMoXr6vyKWlnOsm1SZm/GUqAEDvy2RL4Q4O+3bkziAhrO7Y8JLssFUUvNFEGqAizI52WAxhjDw==} + '@nestjs/schematics@12.0.0': + resolution: {integrity: sha512-ilsxam7i+SWd2psr12faLVSk86FYKnxRUGO6jAGNi1P9+O0kRaYVOScyrKeIj97W9T9UJoJF38fg+7KgjY/nOg==} + engines: {node: '>=22.12.0'} peerDependencies: prettier: ^3.0.0 - typescript: '>=4.8.2' + typescript: '>=6.0.0' peerDependenciesMeta: prettier: optional: true - '@nestjs/swagger@11.4.7': - resolution: {integrity: sha512-QyDYnmfP4IRucgmtQxMqzgRBdWtjFoDp8eFvvgf92+3wdLCL+Q0xOFO1948j/ntW/Wi7qT2dyck6ka8ADzPWQQ==} + '@nestjs/swagger@12.0.1': + resolution: {integrity: sha512-fQ0WyutSSHedO9HzSkOFKFaRygYNGBno5EggcZljs+KL8tHzPPTO5oyJpaf3BoOKFGGsN/0B13EbIpH2pkPx8g==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@fastify/static': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/common': ^11.0.1 - '@nestjs/core': ^11.0.1 + '@nestjs/common': ^12.0.0 + '@nestjs/core': ^12.0.0 class-transformer: '*' class-validator: '*' reflect-metadata: ^0.1.12 || ^0.2.0 @@ -3688,25 +3706,25 @@ packages: class-validator: optional: true - '@nestjs/testing@11.2.3': - resolution: {integrity: sha512-7ANDWlkm8Xw4CYIhCNZhtBzANsQUKqjteA2yx/6sjqGyWhekeBKz8wgCJykm0vo+ltrg6U34dZlm2NgiRcNHPQ==} + '@nestjs/testing@12.0.1': + resolution: {integrity: sha512-prf3fsUaoKS6t04XcQt5aSTp68Po1GxUcbEBPv+3iqAef07hKQEO15r0jmmwA+rWZfONYT1UcV3YIylR++/tCg==} peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/core': ^11.0.0 - '@nestjs/microservices': ^11.0.0 - '@nestjs/platform-express': ^11.0.0 + '@nestjs/common': ^12.0.0 + '@nestjs/core': ^12.0.0 + '@nestjs/microservices': ^12.0.0 + '@nestjs/platform-express': ^12.0.0 peerDependenciesMeta: '@nestjs/microservices': optional: true '@nestjs/platform-express': optional: true - '@nestjs/websockets@11.2.3': - resolution: {integrity: sha512-Vjh+KswJbUJpTwTHwNH2CvnetUGkk4dQzyXmPKgty6dxLxtJbLZM3oOoLhIr8XOwrEBZDKqluIdFs8QKZAIm/w==} + '@nestjs/websockets@12.0.1': + resolution: {integrity: sha512-TxyfPg726saaaRihjBc5izQjQ7bRV1VJrZiEH9KO1LztJQyFbMDVztUI8ZXRgMYDuv8ZY0ENUaDb2JkpCkny0Q==} peerDependencies: - '@nestjs/common': ^11.0.0 - '@nestjs/core': ^11.0.0 - '@nestjs/platform-socket.io': ^11.0.0 + '@nestjs/common': ^12.0.0 + '@nestjs/core': ^12.0.0 + '@nestjs/platform-socket.io': ^12.0.0 reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: @@ -5228,9 +5246,6 @@ packages: '@types/dom-to-image@2.6.7': resolution: {integrity: sha512-me5VbCv+fcXozblWwG13krNBvuEOm6kA5xoa4RrjDJCNFOZSWR3/QLtOXimBHk1Fisq69Gx3JtOoXtg1N1tijg==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} @@ -5698,23 +5713,9 @@ packages: '@vitest/browser': optional: true - '@vitest/expect@3.2.7': - resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==} - '@vitest/expect@4.1.11': resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - '@vitest/mocker@3.2.7': - resolution: {integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/mocker@4.1.11': resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} peerDependencies: @@ -5726,33 +5727,18 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.7': - resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==} - '@vitest/pretty-format@4.1.11': resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/runner@3.2.7': - resolution: {integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==} - '@vitest/runner@4.1.11': resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - '@vitest/snapshot@3.2.7': - resolution: {integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==} - '@vitest/snapshot@4.1.11': resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - '@vitest/spy@3.2.7': - resolution: {integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==} - '@vitest/spy@4.1.11': resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/utils@3.2.7': - resolution: {integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==} - '@vitest/utils@4.1.11': resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} @@ -5904,9 +5890,6 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} @@ -5922,10 +5905,6 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -5959,8 +5938,8 @@ packages: resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} engines: {node: '>=14'} - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} any-promise@1.3.0: @@ -6317,10 +6296,6 @@ packages: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -6382,10 +6357,6 @@ packages: peerDependencies: react: '>=17.0.0' - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} - engines: {node: '>=18'} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -6420,10 +6391,6 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} - cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -6504,6 +6471,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} @@ -7158,10 +7129,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} @@ -7466,9 +7433,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-lexer@2.3.2: resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} @@ -7483,6 +7447,9 @@ packages: es-toolkit@1.49.0: resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} + es-toolkit@1.51.0: + resolution: {integrity: sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw==} + es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} @@ -7810,9 +7777,18 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.4: resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -7856,9 +7832,9 @@ packages: file-source@0.6.1: resolution: {integrity: sha512-1R1KneL7eTXmXfKxC10V/9NeGOdbsAXJ+lQ//fvvcHUgtaZcZDWNJNblxAoVOyV1cj45pOtUrR3vZTBwqcW8XA==} - file-type@21.3.4: - resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} - engines: {node: '>=20'} + file-type@22.0.2: + resolution: {integrity: sha512-0H8TsCUGBLx+V5adH3EY52hTAcyLKbV1D4gq5cIOJ6DnQAHeV9Z2Hhuc5CoBX4YmvB2oL+JIC84z0qO7JsCoNw==} + engines: {node: '>=22'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -8085,9 +8061,6 @@ packages: peerDependencies: tslib: '2' - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -8779,17 +8752,10 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.3.0: resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true - js-yaml@5.3.0: - resolution: {integrity: sha512-muutsYr+e2+d3rTgUGslq5rxbBlUy3cJ61IsHag2QNDQV+7zXWjkUpmALIajhrlLlrgRUiymj6U3zUr/TMK84Q==} - hasBin: true - js-yaml@5.4.1: resolution: {integrity: sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==} hasBin: true @@ -8921,10 +8887,6 @@ packages: postgres: optional: true - kysely@0.28.17: - resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} - engines: {node: '>=20.0.0'} - kysely@0.29.5: resolution: {integrity: sha512-ooa+eSbBNPTo3MycPEuW5jdrxQdQwdtB3LC3h43FiXQbIry5tR0C5lDG7eealK0E4D7XjrnOP5DIUg/LyjRMYQ==} engines: {node: '>=22.0.0'} @@ -9208,9 +9170,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -9245,12 +9204,12 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.0.0: + resolution: {integrity: sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==} + magic-string@1.2.0: resolution: {integrity: sha512-ptco+HFxTLgjafSLim2LojBSwfg5feBjd+SqyiwdGkzC38UPdZy3zgrHMI2CoTf5fJL38tbHMYWVzIH8BxGqJw==} @@ -9747,9 +9706,9 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} mylas@2.1.14: resolution: {integrity: sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==} @@ -9860,9 +9819,6 @@ packages: resolution: {integrity: sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==} engines: {node: ^18 || ^20 || >= 21} - node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - node-emoji@2.2.0: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} @@ -10039,6 +9995,10 @@ packages: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} + ora@9.4.1: + resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} + engines: {node: '>=20'} + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -10206,10 +10166,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - pbf@3.3.0: resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} hasBin: true @@ -10262,8 +10218,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} picomatch@4.0.7: @@ -11328,9 +11284,6 @@ packages: rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -11581,10 +11534,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} @@ -11652,6 +11601,10 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + stream-source@0.3.5: resolution: {integrity: sha512-ZuEDP9sgjiAwUVoDModftG0JtYiLUV8K4ljYD1VyUMRWtbVf92474o4kuuul43iZ8t/hRuiDAx1dIJSvirrK/g==} @@ -11727,9 +11680,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - strtok3@10.3.5: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} @@ -11880,12 +11830,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - swagger-ui-dist@5.32.13: - resolution: {integrity: sha512-qQobzb3DeC2LeK0j3E8812Ef4aIq1y9flJxvZkimkqUC/w4u7wS+yCc+VakqGJLweUUBrI24effhwo8OsAvNAw==} - - symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} + swagger-ui-dist@5.32.14: + resolution: {integrity: sha512-nOA2pSQhcmODMUQZpJHYKNuwniDUqcOWGNaSCOoZv12FdOSJ9JxV95HtyRGNMqEBj6h6lCNTy20TgZDYTSuUIg==} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -12089,9 +12035,6 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.3.0: resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} @@ -12107,18 +12050,10 @@ packages: tinyqueue@3.0.0: resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - tinyrainbow@3.1.1: resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} - engines: {node: '>=14.0.0'} - tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} @@ -12199,17 +12134,6 @@ packages: engines: {node: '>=16.20.2'} hasBin: true - tsconfck@3.1.6: - resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} - engines: {node: ^18 || >=20} - deprecated: unmaintained - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - tsconfig-paths-webpack-plugin@4.2.0: resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} engines: {node: '>=10.13.0'} @@ -12291,11 +12215,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -12560,56 +12479,6 @@ packages: resolution: {integrity: sha512-FwjApRNZyN+RucPW9Z9kf0dyzyi3r3zlDfrTnzHXNaYpmT3pZ5w//d6QkApy1iypbDm+3fq+Gwfv+PYA4j4uYw==} engines: {node: '>=20.0.0'} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite-tsconfig-paths@6.1.1: - resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} - peerDependencies: - vite: '*' - - vite@7.3.6: - resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@8.2.2: resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -12667,34 +12536,6 @@ packages: peerDependencies: vitest: '>=2.0.0' - vitest@3.2.7: - resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.7 - '@vitest/ui': 3.2.7 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vitest@4.1.11: resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -12815,16 +12656,6 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.106.2: - resolution: {integrity: sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - webpack@5.108.4: resolution: {integrity: sha512-yur8LyJoeiWh47dErD+Ok7vlbmDsJ3UbbRPAoxbGJ54WpE2y5yVo5G/inUzujnYgw3tPmBRdn+G7PoxXaYC33w==} engines: {node: '>=10.13.0'} @@ -13064,10 +12895,6 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -13231,57 +13058,54 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@angular-devkit/core@19.2.24(chokidar@4.0.3)': + '@angular-devkit/core@22.1.5(chokidar@4.0.3)': dependencies: - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) jsonc-parser: 3.3.1 - picomatch: 4.0.4 - rxjs: 7.8.1 - source-map: 0.7.4 + picomatch: 4.0.5 + rxjs: 7.8.2 + source-map: 0.7.6 optionalDependencies: chokidar: 4.0.3 - '@angular-devkit/core@19.2.27(chokidar@4.0.3)': + '@angular-devkit/core@22.1.5(chokidar@5.0.0)': dependencies: - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) jsonc-parser: 3.3.1 - picomatch: 4.0.4 - rxjs: 7.8.1 - source-map: 0.7.4 + picomatch: 4.0.5 + rxjs: 7.8.2 + source-map: 0.7.6 optionalDependencies: - chokidar: 4.0.3 + chokidar: 5.0.0 - '@angular-devkit/schematics-cli@19.2.27(@types/node@24.13.3)(chokidar@4.0.3)': + '@angular-devkit/schematics-cli@22.1.5(@types/node@24.13.3)(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 19.2.27(chokidar@4.0.3) - '@angular-devkit/schematics': 19.2.27(chokidar@4.0.3) - '@inquirer/prompts': 7.3.2(@types/node@24.13.3) - ansi-colors: 4.1.3 - symbol-observable: 4.0.0 - yargs-parser: 21.1.1 + '@angular-devkit/core': 22.1.5(chokidar@5.0.0) + '@angular-devkit/schematics': 22.1.5(chokidar@5.0.0) + '@inquirer/prompts': 8.5.2(@types/node@24.13.3) transitivePeerDependencies: - '@types/node' - chokidar - '@angular-devkit/schematics@19.2.24(chokidar@4.0.3)': + '@angular-devkit/schematics@22.1.5(chokidar@4.0.3)': dependencies: - '@angular-devkit/core': 19.2.24(chokidar@4.0.3) + '@angular-devkit/core': 22.1.5(chokidar@4.0.3) jsonc-parser: 3.3.1 - magic-string: 0.30.17 - ora: 5.4.1 - rxjs: 7.8.1 + magic-string: 1.0.0 + ora: 9.4.1 + rxjs: 7.8.2 transitivePeerDependencies: - chokidar - '@angular-devkit/schematics@19.2.27(chokidar@4.0.3)': + '@angular-devkit/schematics@22.1.5(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 19.2.27(chokidar@4.0.3) + '@angular-devkit/core': 22.1.5(chokidar@5.0.0) jsonc-parser: 3.3.1 - magic-string: 0.30.17 - ora: 5.4.1 - rxjs: 7.8.1 + magic-string: 1.0.0 + ora: 9.4.1 + rxjs: 7.8.2 transitivePeerDependencies: - chokidar @@ -15644,6 +15468,11 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true + '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))': + dependencies: + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))': dependencies: eslint: 10.9.1(jiti@2.7.0)(supports-color@8.1.1) @@ -15672,6 +15501,10 @@ snapshots: mdn-data: 2.29.0 source-map-js: 1.2.1 + '@eslint/js@10.0.1(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))': + optionalDependencies: + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + '@eslint/js@10.0.1(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))': optionalDependencies: eslint: 10.9.1(jiti@2.7.0)(supports-color@8.1.1) @@ -15751,10 +15584,10 @@ snapshots: dependencies: '@fortawesome/fontawesome-common-types': 7.3.1 - '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)': + '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) lodash: 4.18.1 '@grpc/grpc-js@1.14.4': @@ -15938,51 +15771,48 @@ snapshots: tailwind-variants: 3.3.1(tailwind-merge@3.6.0)(tailwindcss@4.3.3) tailwindcss: 4.3.3 - '@inquirer/ansi@1.0.2': {} + '@inquirer/ansi@2.0.7': {} - '@inquirer/checkbox@4.3.2(@types/node@24.13.3)': + '@inquirer/checkbox@5.2.3(@types/node@24.13.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.13.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/confirm@5.1.21(@types/node@24.13.3)': + '@inquirer/confirm@6.3.0(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/core@10.3.2(@types/node@24.13.3)': + '@inquirer/core@12.0.1(@types/node@24.13.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.13.3) + '@inquirer/ansi': 2.0.7 + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0(@types/node@24.13.3) cli-width: 4.1.0 - mute-stream: 2.0.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 24.13.3 - '@inquirer/editor@4.2.23(@types/node@24.13.3)': + '@inquirer/editor@5.3.1(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/external-editor': 1.0.3(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/external-editor': 3.0.4(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/expand@4.0.23(@types/node@24.13.3)': + '@inquirer/expand@5.1.3(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 @@ -15993,88 +15823,92 @@ snapshots: optionalDependencies: '@types/node': 24.13.3 - '@inquirer/figures@1.0.15': {} - - '@inquirer/input@4.3.1(@types/node@24.13.3)': + '@inquirer/external-editor@3.0.4(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) + chardet: 2.1.1 + iconv-lite: 0.7.3 optionalDependencies: '@types/node': 24.13.3 - '@inquirer/number@3.0.23(@types/node@24.13.3)': + '@inquirer/figures@2.0.8': {} + + '@inquirer/input@5.1.4(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/password@4.0.23(@types/node@24.13.3)': + '@inquirer/number@4.2.1(@types/node@24.13.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/prompts@7.10.1(@types/node@24.13.3)': + '@inquirer/password@5.2.0(@types/node@24.13.3)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.13.3) - '@inquirer/confirm': 5.1.21(@types/node@24.13.3) - '@inquirer/editor': 4.2.23(@types/node@24.13.3) - '@inquirer/expand': 4.0.23(@types/node@24.13.3) - '@inquirer/input': 4.3.1(@types/node@24.13.3) - '@inquirer/number': 3.0.23(@types/node@24.13.3) - '@inquirer/password': 4.0.23(@types/node@24.13.3) - '@inquirer/rawlist': 4.1.11(@types/node@24.13.3) - '@inquirer/search': 3.2.2(@types/node@24.13.3) - '@inquirer/select': 4.4.2(@types/node@24.13.3) + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/prompts@7.3.2(@types/node@24.13.3)': + '@inquirer/prompts@8.5.2(@types/node@24.13.3)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.13.3) - '@inquirer/confirm': 5.1.21(@types/node@24.13.3) - '@inquirer/editor': 4.2.23(@types/node@24.13.3) - '@inquirer/expand': 4.0.23(@types/node@24.13.3) - '@inquirer/input': 4.3.1(@types/node@24.13.3) - '@inquirer/number': 3.0.23(@types/node@24.13.3) - '@inquirer/password': 4.0.23(@types/node@24.13.3) - '@inquirer/rawlist': 4.1.11(@types/node@24.13.3) - '@inquirer/search': 3.2.2(@types/node@24.13.3) - '@inquirer/select': 4.4.2(@types/node@24.13.3) + '@inquirer/checkbox': 5.2.3(@types/node@24.13.3) + '@inquirer/confirm': 6.3.0(@types/node@24.13.3) + '@inquirer/editor': 5.3.1(@types/node@24.13.3) + '@inquirer/expand': 5.1.3(@types/node@24.13.3) + '@inquirer/input': 5.1.4(@types/node@24.13.3) + '@inquirer/number': 4.2.1(@types/node@24.13.3) + '@inquirer/password': 5.2.0(@types/node@24.13.3) + '@inquirer/rawlist': 5.3.3(@types/node@24.13.3) + '@inquirer/search': 4.3.1(@types/node@24.13.3) + '@inquirer/select': 5.2.3(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/rawlist@4.1.11(@types/node@24.13.3)': + '@inquirer/prompts@8.7.0(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/type': 3.0.10(@types/node@24.13.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/checkbox': 5.2.3(@types/node@24.13.3) + '@inquirer/confirm': 6.3.0(@types/node@24.13.3) + '@inquirer/editor': 5.3.1(@types/node@24.13.3) + '@inquirer/expand': 5.1.3(@types/node@24.13.3) + '@inquirer/input': 5.1.4(@types/node@24.13.3) + '@inquirer/number': 4.2.1(@types/node@24.13.3) + '@inquirer/password': 5.2.0(@types/node@24.13.3) + '@inquirer/rawlist': 5.3.3(@types/node@24.13.3) + '@inquirer/search': 4.3.1(@types/node@24.13.3) + '@inquirer/select': 5.2.3(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/search@3.2.2(@types/node@24.13.3)': + '@inquirer/rawlist@5.3.3(@types/node@24.13.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.13.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/select@4.4.2(@types/node@24.13.3)': + '@inquirer/search@4.3.1(@types/node@24.13.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.13.3) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.13.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0(@types/node@24.13.3) optionalDependencies: '@types/node': 24.13.3 - '@inquirer/type@3.0.10(@types/node@24.13.3)': + '@inquirer/select@5.2.3(@types/node@24.13.3)': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 12.0.1(@types/node@24.13.3) + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0(@types/node@24.13.3) + optionalDependencies: + '@types/node': 24.13.3 + + '@inquirer/type@4.1.0(@types/node@24.13.3)': optionalDependencies: '@types/node': 24.13.3 @@ -16439,61 +16273,50 @@ snapshots: '@namnode/store@0.1.0': {} - '@nestjs/bull-shared@11.0.5(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)': + '@nestjs/bull-shared@12.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 - '@nestjs/bullmq@11.0.5(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(bullmq@5.81.3(supports-color@8.1.1))': + '@nestjs/bullmq@12.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(bullmq@5.81.3(supports-color@8.1.1))': dependencies: - '@nestjs/bull-shared': 11.0.5(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3) - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/bull-shared': 12.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) bullmq: 5.81.3(supports-color@8.1.1) tslib: 2.8.1 - '@nestjs/cli@11.0.24(@swc/core@1.16.1(@swc/helpers@0.5.23))(@types/node@24.13.3)(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(prettier@3.9.6)(uglify-js@3.19.3)': + '@nestjs/cli@12.0.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(@types/node@24.13.3)(fork-ts-checker-webpack-plugin@9.1.0(@typescript/typescript6@6.0.2)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)))(prettier@3.9.6)(tsconfig-paths-webpack-plugin@4.2.0)(webpack-node-externals@3.0.0)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3))': dependencies: - '@angular-devkit/core': 19.2.27(chokidar@4.0.3) - '@angular-devkit/schematics': 19.2.27(chokidar@4.0.3) - '@angular-devkit/schematics-cli': 19.2.27(@types/node@24.13.3)(chokidar@4.0.3) - '@inquirer/prompts': 7.10.1(@types/node@24.13.3) - '@nestjs/schematics': 11.1.0(chokidar@4.0.3)(prettier@3.9.6)(typescript@5.9.3) - ansis: 4.2.0 - chokidar: 4.0.3 + '@angular-devkit/core': 22.1.5(chokidar@5.0.0) + '@angular-devkit/schematics': 22.1.5(chokidar@5.0.0) + '@angular-devkit/schematics-cli': 22.1.5(@types/node@24.13.3)(chokidar@5.0.0) + '@inquirer/prompts': 8.7.0(@types/node@24.13.3) + '@nestjs/schematics': 12.0.0(chokidar@5.0.0)(prettier@3.9.6)(typescript@6.0.3) + ansis: 4.3.1 + chokidar: 5.0.0 cli-table3: 0.6.5 - commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) - glob: 13.0.6 - node-emoji: 1.11.0 - ora: 5.4.1 + commander: 15.0.0 + minimatch: 10.2.6 + node-emoji: 2.2.0 + ora: 9.4.1 tsconfig-paths: 4.2.0 - tsconfig-paths-webpack-plugin: 4.2.0 - typescript: 5.9.3 - webpack: 5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) - webpack-node-externals: 3.0.0 + typescript: 6.0.3 optionalDependencies: '@swc/core': 1.16.1(@swc/helpers@0.5.23) + fork-ts-checker-webpack-plugin: 9.1.0(@typescript/typescript6@6.0.2)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) + tsconfig-paths-webpack-plugin: 4.2.0 + webpack: 5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) + webpack-node-externals: 3.0.0 transitivePeerDependencies: - - '@minify-html/node' - - '@swc/css' - - '@swc/html' - '@types/node' - - clean-css - - cssnano - - csso - - esbuild - - html-minifier-terser - - lightningcss - - postcss - prettier - - uglify-js - - webpack-cli - '@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1)': + '@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1)': dependencies: - file-type: 21.3.4(supports-color@8.1.1) + '@standard-schema/spec': 1.1.0 + file-type: 22.0.2(supports-color@8.1.1) iterare: 1.2.1 load-esm: 1.0.3 reflect-metadata: 0.2.2 @@ -16503,9 +16326,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/core@11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/core@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) fast-safe-stringify: 2.1.1 iterare: 1.2.1 path-to-regexp: 8.4.2 @@ -16514,18 +16337,18 @@ snapshots: tslib: 2.8.1 uid: 2.0.2 optionalDependencies: - '@nestjs/platform-express': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(supports-color@8.1.1) - '@nestjs/websockets': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@nestjs/platform-socket.io@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/platform-express': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(supports-color@8.1.1) + '@nestjs/websockets': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@nestjs/platform-socket.io@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/mapped-types@2.1.1(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(reflect-metadata@0.2.2)': + '@nestjs/mapped-types@12.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(reflect-metadata@0.2.2)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) reflect-metadata: 0.2.2 - '@nestjs/platform-express@11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(supports-color@8.1.1)': + '@nestjs/platform-express@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(supports-color@8.1.1)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) cors: 2.8.6 express: 5.2.1(supports-color@8.1.1) multer: 2.2.0 @@ -16534,10 +16357,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/platform-socket.io@11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/websockets@11.2.3)(rxjs@7.8.2)(supports-color@8.1.1)': + '@nestjs/platform-socket.io@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/websockets@12.0.1)(rxjs@7.8.2)(supports-color@8.1.1)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/websockets': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@nestjs/platform-socket.io@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/websockets': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@nestjs/platform-socket.io@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) rxjs: 7.8.2 socket.io: 4.8.3(supports-color@8.1.1) tslib: 2.8.1 @@ -16546,16 +16369,16 @@ snapshots: - supports-color - utf-8-validate - '@nestjs/schedule@6.1.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)': + '@nestjs/schedule@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) cron: 4.4.0 - '@nestjs/schematics@11.1.0(@typescript/typescript6@6.0.2)(chokidar@4.0.3)(prettier@3.9.6)': + '@nestjs/schematics@12.0.0(@typescript/typescript6@6.0.2)(chokidar@4.0.3)(prettier@3.9.6)': dependencies: - '@angular-devkit/core': 19.2.24(chokidar@4.0.3) - '@angular-devkit/schematics': 19.2.24(chokidar@4.0.3) + '@angular-devkit/core': 22.1.5(chokidar@4.0.3) + '@angular-devkit/schematics': 22.1.5(chokidar@4.0.3) comment-json: 5.0.0 jsonc-parser: 3.3.1 pluralize: 8.0.0 @@ -16565,51 +16388,52 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/schematics@11.1.0(chokidar@4.0.3)(prettier@3.9.6)(typescript@5.9.3)': + '@nestjs/schematics@12.0.0(chokidar@5.0.0)(prettier@3.9.6)(typescript@6.0.3)': dependencies: - '@angular-devkit/core': 19.2.24(chokidar@4.0.3) - '@angular-devkit/schematics': 19.2.24(chokidar@4.0.3) + '@angular-devkit/core': 22.1.5(chokidar@5.0.0) + '@angular-devkit/schematics': 22.1.5(chokidar@5.0.0) comment-json: 5.0.0 jsonc-parser: 3.3.1 pluralize: 8.0.0 - typescript: 5.9.3 + typescript: 6.0.3 optionalDependencies: prettier: 3.9.6 transitivePeerDependencies: - chokidar - '@nestjs/swagger@11.4.7(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2)': + '@nestjs/swagger@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2)': dependencies: '@microsoft/tsdoc': 0.16.0 - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/mapped-types': 2.1.1(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(reflect-metadata@0.2.2) - js-yaml: 5.3.0 - lodash: 4.18.1 + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/mapped-types': 12.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(reflect-metadata@0.2.2) + '@standard-schema/spec': 1.1.0 + es-toolkit: 1.51.0 + js-yaml: 5.4.1 path-to-regexp: 8.4.2 reflect-metadata: 0.2.2 - swagger-ui-dist: 5.32.13 + swagger-ui-dist: 5.32.14 typescript: '@typescript/typescript6@6.0.2' - '@nestjs/testing@11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@nestjs/platform-express@11.2.3)': + '@nestjs/testing@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@nestjs/platform-express@12.0.1)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-express': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(supports-color@8.1.1) + '@nestjs/platform-express': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(supports-color@8.1.1) - '@nestjs/websockets@11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@nestjs/platform-socket.io@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/websockets@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@nestjs/platform-socket.io@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) iterare: 1.2.1 object-hash: 3.0.0 reflect-metadata: 0.2.2 rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-socket.io': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/websockets@11.2.3)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/platform-socket.io': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/websockets@12.0.1)(rxjs@7.8.2)(supports-color@8.1.1) '@noble/hashes@1.4.0': {} @@ -18048,15 +17872,11 @@ snapshots: '@types/dom-to-image@2.6.7': {} - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.9 - '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 + optional: true '@types/esrecurse@4.3.1': {} @@ -18374,6 +18194,22 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/type-utils': 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/utils': 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/visitor-keys': 8.68.0 + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + ignore: 7.0.6 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -18390,6 +18226,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/visitor-keys': 8.68.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@typescript-eslint/scope-manager': 8.68.0 @@ -18420,6 +18268,18 @@ snapshots: dependencies: typescript: '@typescript/typescript6@6.0.2' + '@typescript-eslint/type-utils@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/utils': 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@typescript-eslint/types': 8.68.0 @@ -18449,6 +18309,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)) @@ -18540,20 +18411,6 @@ snapshots: dependencies: valibot: 1.4.2(@typescript/typescript6@6.0.2) - '@vitest/coverage-v8@4.1.11(vitest@3.2.7(@types/debug@4.1.13)(@types/node@24.13.3)(happy-dom@20.11.8)(jiti@2.7.0)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))': - dependencies: - '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.11 - ast-v8-to-istanbul: 1.0.4 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - magicast: 0.5.3 - obug: 2.1.4 - std-env: 4.2.0 - tinyrainbow: 3.1.1 - vitest: 3.2.7(@types/debug@4.1.13)(@types/node@24.13.3)(happy-dom@20.11.8)(jiti@2.7.0)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - '@vitest/coverage-v8@4.1.11(vitest@4.1.11)': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -18568,14 +18425,6 @@ snapshots: tinyrainbow: 3.1.1 vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.11)(happy-dom@20.11.8)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)) - '@vitest/expect@3.2.7': - dependencies: - '@types/chai': 5.2.3 - '@vitest/spy': 3.2.7 - '@vitest/utils': 3.2.7 - chai: 5.3.3 - tinyrainbow: 2.0.0 - '@vitest/expect@4.1.11': dependencies: '@standard-schema/spec': 1.1.0 @@ -18585,14 +18434,6 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@3.2.7(vite@7.3.6(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 3.2.7 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.6(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - '@vitest/mocker@4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.11 @@ -18601,31 +18442,15 @@ snapshots: optionalDependencies: vite: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - '@vitest/pretty-format@3.2.7': - dependencies: - tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.1.11': dependencies: tinyrainbow: 3.1.1 - '@vitest/runner@3.2.7': - dependencies: - '@vitest/utils': 3.2.7 - pathe: 2.0.3 - strip-literal: 3.1.0 - '@vitest/runner@4.1.11': dependencies: '@vitest/utils': 4.1.11 pathe: 2.0.3 - '@vitest/snapshot@3.2.7': - dependencies: - '@vitest/pretty-format': 3.2.7 - magic-string: 0.30.21 - pathe: 2.0.3 - '@vitest/snapshot@4.1.11': dependencies: '@vitest/pretty-format': 4.1.11 @@ -18633,18 +18458,8 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.7': - dependencies: - tinyspy: 4.0.4 - '@vitest/spy@4.1.11': {} - '@vitest/utils@3.2.7': - dependencies: - '@vitest/pretty-format': 3.2.7 - loupe: 3.2.1 - tinyrainbow: 2.0.0 - '@vitest/utils@4.1.11': dependencies: '@vitest/pretty-format': 4.1.11 @@ -18796,10 +18611,6 @@ snapshots: optionalDependencies: ajv: 8.20.0 - ajv-formats@3.0.1(ajv@8.18.0): - optionalDependencies: - ajv: 8.18.0 - ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -18820,13 +18631,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.4 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -18860,8 +18664,6 @@ snapshots: dependencies: string-width: 4.2.3 - ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -18882,7 +18684,7 @@ snapshots: ansis@3.17.0: {} - ansis@4.2.0: {} + ansis@4.3.1: {} any-promise@1.3.0: {} @@ -19264,8 +19066,6 @@ snapshots: bytestreamjs@2.0.1: {} - cac@6.7.14: {} - cacheable-lookup@7.0.0: {} cacheable-request@10.2.14: @@ -19331,14 +19131,6 @@ snapshots: dependencies: react: 19.2.8 - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.3 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 - chai@6.2.2: {} chalk@4.1.2: @@ -19362,8 +19154,6 @@ snapshots: chardet@2.1.1: {} - check-error@2.1.3: {} - cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -19449,6 +19239,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-spinners@3.4.0: {} + cli-table3@0.6.5: dependencies: string-width: 4.2.3 @@ -19696,15 +19488,6 @@ snapshots: optionalDependencies: typescript: '@typescript/typescript6@6.0.2' - cosmiconfig@8.3.6(typescript@5.9.3): - dependencies: - import-fresh: 3.3.1 - js-yaml: 4.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.9.3 - cpu-features@0.0.10: dependencies: buildcheck: 0.0.7 @@ -20132,8 +19915,6 @@ snapshots: dependencies: mimic-response: 3.1.0 - deep-eql@5.0.2: {} - deep-equal@1.0.1: {} deep-extend@0.6.0: {} @@ -20435,8 +20216,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} - es-module-lexer@2.3.2: {} es-object-atoms@1.1.2: @@ -20452,6 +20231,8 @@ snapshots: es-toolkit@1.49.0: {} + es-toolkit@1.51.0: {} + es5-ext@0.10.64: dependencies: es6-iterator: 2.0.3 @@ -20587,6 +20368,10 @@ snapshots: escape-string-regexp@5.0.0: {} + eslint-config-prettier@10.1.8(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)): + dependencies: + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + eslint-config-prettier@10.1.8(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)): dependencies: eslint: 10.9.1(jiti@2.7.0)(supports-color@8.1.1) @@ -20619,6 +20404,16 @@ snapshots: lodash.memoize: 4.1.2 semver: 7.8.5 + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)))(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(prettier@3.9.6): + dependencies: + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + prettier: 3.9.6 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.13 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 10.1.8(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)))(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(prettier@3.9.6): dependencies: eslint: 10.9.1(jiti@2.7.0)(supports-color@8.1.1) @@ -20647,6 +20442,30 @@ snapshots: transitivePeerDependencies: - ts-node + eslint-plugin-unicorn@73.0.0(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) + '@eslint/css-tree': 4.0.5 + browserslist: 4.28.6 + change-case: 5.4.4 + ci-info: 4.4.0 + core-js-compat: 3.49.0 + detect-indent: 7.0.2 + entities: 4.5.0 + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + find-up-simple: 1.0.1 + globals: 17.11.0 + indent-string: 5.0.0 + is-builtin-module: 5.0.0 + is-identifier: 1.1.0 + pluralize: 8.0.0 + quote-js-string: 0.1.0 + regjsparser: 0.13.2 + reserved-identifiers: 1.2.0 + semver: 7.8.5 + strip-indent: 4.1.1 + yaml: 2.9.0 + eslint-plugin-unicorn@73.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)) @@ -20694,6 +20513,43 @@ snapshots: eslint-visitor-keys@5.0.1: {} + eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5(supports-color@8.1.1) + '@eslint/config-helpers': 0.7.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.6 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1)) @@ -20987,8 +20843,18 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.4: {} + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -21029,7 +20895,7 @@ snapshots: dependencies: stream-source: 0.3.5 - file-type@21.3.4(supports-color@8.1.1): + file-type@22.0.2(supports-color@8.1.1): dependencies: '@tokenizer/inflate': 0.4.1(supports-color@8.1.1) strtok3: 10.3.5 @@ -21110,12 +20976,12 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): + fork-ts-checker-webpack-plugin@9.1.0(@typescript/typescript6@6.0.2)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): dependencies: '@babel/code-frame': 7.29.7 chalk: 4.1.2 chokidar: 4.0.3 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(@typescript/typescript6@6.0.2) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 @@ -21124,8 +20990,9 @@ snapshots: schema-utils: 3.3.0 semver: 7.8.5 tapable: 2.3.3 - typescript: 5.9.3 - webpack: 5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) + typescript: '@typescript/typescript6@6.0.2' + webpack: 5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) + optional: true form-data-encoder@2.1.4: {} @@ -21162,6 +21029,7 @@ snapshots: graceful-fs: 4.2.11 jsonfile: 6.2.1 universalify: 2.0.1 + optional: true fs-extra@11.3.6: dependencies: @@ -21173,7 +21041,8 @@ snapshots: dependencies: minipass: 3.3.6 - fs-monkey@1.1.0: {} + fs-monkey@1.1.0: + optional: true fs.realpath@1.0.0: {} @@ -21273,8 +21142,6 @@ snapshots: dependencies: tslib: 2.8.1 - glob-to-regexp@0.4.1: {} - glob@10.5.0: dependencies: foreground-child: 3.3.1 @@ -22081,16 +21948,10 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-yaml@4.3.0: dependencies: argparse: 2.0.1 - js-yaml@5.3.0: - dependencies: - argparse: 2.0.1 - js-yaml@5.4.1: dependencies: argparse: 2.0.1 @@ -22268,20 +22129,12 @@ snapshots: type-is: 2.1.0 vary: 1.1.2 - kysely-postgres-js@3.0.0(kysely@0.28.17)(postgres@3.4.9): - dependencies: - kysely: 0.28.17 - optionalDependencies: - postgres: 3.4.9 - kysely-postgres-js@3.0.0(kysely@0.29.5)(postgres@3.4.9): dependencies: kysely: 0.29.5 optionalDependencies: postgres: 3.4.9 - kysely@0.28.17: {} - kysely@0.29.5: {} latest-version@7.0.0: @@ -22489,8 +22342,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.1: {} - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -22517,11 +22368,11 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.17: + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.21: + magic-string@1.0.0: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -22790,6 +22641,7 @@ snapshots: memfs@3.5.3: dependencies: fs-monkey: 1.1.0 + optional: true memfs@4.64.0(tslib@2.8.1): dependencies: @@ -23306,7 +23158,7 @@ snapshots: mute-stream@0.0.8: {} - mute-stream@2.0.0: {} + mute-stream@3.0.0: {} mylas@2.1.14: {} @@ -23343,12 +23195,12 @@ snapshots: neo-async@2.6.2: {} - nest-commander@3.20.1(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@types/inquirer@8.2.13)(@types/node@24.13.3)(@typescript/typescript6@6.0.2): + nest-commander@3.20.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@types/inquirer@8.2.13)(@types/node@24.13.3)(@typescript/typescript6@6.0.2): dependencies: '@fig/complete-commander': 3.2.0(commander@11.1.0) - '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3) - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/inquirer': 8.2.13 commander: 11.1.0 cosmiconfig: 8.3.6(@typescript/typescript6@6.0.2) @@ -23357,38 +23209,38 @@ snapshots: - '@types/node' - typescript - nestjs-cls@6.2.2(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2): + nestjs-cls@6.2.2(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2): dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) reflect-metadata: 0.2.2 rxjs: 7.8.2 - nestjs-kysely@3.1.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(kysely@0.28.17)(reflect-metadata@0.2.2): + nestjs-kysely@3.1.3(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(kysely@0.29.5)(reflect-metadata@0.2.2): dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - kysely: 0.28.17 + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + kysely: 0.29.5 reflect-metadata: 0.2.2 tslib: 2.8.1 - nestjs-otel@8.1.0(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(rxjs@7.8.2): + nestjs-otel@8.1.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(rxjs@7.8.2): dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) - '@nestjs/core': 11.2.3(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.2.3)(@nestjs/websockets@11.2.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@12.0.1)(@nestjs/websockets@12.0.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@opentelemetry/api': 1.9.1 '@opentelemetry/host-metrics': 0.38.3(@opentelemetry/api@1.9.1) rxjs: 7.8.2 tslib: 2.8.1 - nestjs-zod@5.5.0(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@11.4.7(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.4.3): + nestjs-zod@5.5.0(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/swagger@12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.4.3): dependencies: - '@nestjs/common': 11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/common': 12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) deepmerge: 4.3.1 rxjs: 7.8.2 zod: 4.4.3 optionalDependencies: - '@nestjs/swagger': 11.4.7(@nestjs/common@11.2.3(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.2.3)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2) + '@nestjs/swagger': 12.0.1(@nestjs/common@12.0.1(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@12.0.1)(@typescript/typescript6@6.0.2)(reflect-metadata@0.2.2) next-tick@1.1.0: {} @@ -23411,10 +23263,6 @@ snapshots: node-addon-api@8.8.0: {} - node-emoji@1.11.0: - dependencies: - lodash: 4.18.1 - node-emoji@2.2.0: dependencies: '@sindresorhus/is': 4.6.0 @@ -23615,6 +23463,17 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 + ora@9.4.1: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.2.2 + p-cancelable@3.0.0: {} p-event@6.0.1: @@ -23781,8 +23640,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - pbf@3.3.0: dependencies: ieee754: 1.2.1 @@ -23833,7 +23690,7 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} picomatch@4.0.7: {} @@ -25007,6 +24864,7 @@ snapshots: '@rollup/rollup-win32-x64-gnu': 4.62.0 '@rollup/rollup-win32-x64-msvc': 4.62.0 fsevents: 2.3.3 + optional: true roughjs@4.6.6: dependencies: @@ -25054,10 +24912,6 @@ snapshots: rw@1.3.3: {} - rxjs@7.8.1: - dependencies: - tslib: 2.8.1 - rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -25425,8 +25279,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} - source-map@0.7.6: {} source-map@0.8.0: {} @@ -25494,6 +25346,8 @@ snapshots: stdin-discarder@0.2.2: {} + stdin-discarder@0.3.2: {} + stream-source@0.3.5: {} streamsearch@1.1.0: {} @@ -25573,10 +25427,6 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 - strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -25799,12 +25649,10 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 - swagger-ui-dist@5.32.13: + swagger-ui-dist@5.32.14: dependencies: '@scarf/scarf': 1.4.0 - symbol-observable@4.0.0: {} - symbol-tree@3.2.4: optional: true @@ -25935,24 +25783,6 @@ snapshots: - bare-abort-controller - react-native-b4a - terser-webpack-plugin@5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - terser: 5.49.0 - webpack: 5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) - optionalDependencies: - '@swc/core': 1.16.1(@swc/helpers@0.5.23) - clean-css: 5.3.3 - cssnano: 6.1.2(postcss@8.5.26) - csso: 5.0.5 - esbuild: 0.28.2 - html-minifier-terser: 7.2.0 - lightningcss: 1.33.0 - postcss: 8.5.26 - uglify-js: 3.19.3 - terser-webpack-plugin@5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -26049,8 +25879,6 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} - tinyexec@1.3.0: {} tinyglobby@0.2.17: @@ -26062,12 +25890,8 @@ snapshots: tinyqueue@3.0.0: {} - tinyrainbow@2.0.0: {} - tinyrainbow@3.1.1: {} - tinyspy@4.0.4: {} - tldts-core@6.1.86: optional: true @@ -26143,10 +25967,6 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfck@3.1.6(@typescript/typescript6@6.0.2): - optionalDependencies: - typescript: '@typescript/typescript6@6.0.2' - tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 @@ -26218,6 +26038,17 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1): + dependencies: + '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/parser': 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + '@typescript-eslint/typescript-estree': 8.68.0(@typescript/typescript6@6.0.2)(supports-color@8.1.1) + '@typescript-eslint/utils': 8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@1.21.7)(supports-color@8.1.1))(supports-color@8.1.1) + eslint: 10.9.1(jiti@1.21.7)(supports-color@8.1.1) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + typescript-eslint@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1))(@typescript/typescript6@6.0.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1) @@ -26229,8 +26060,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript@5.9.3: {} - typescript@6.0.3: {} typescript@7.0.2: @@ -26372,12 +26201,12 @@ snapshots: unpipe@1.0.0: {} - unplugin-swc@1.5.11(@swc/core@1.16.1(@swc/helpers@0.5.23))(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): + unplugin-swc@1.5.11(@swc/core@1.16.1(@swc/helpers@0.5.23))(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): dependencies: '@rollup/pluginutils': 5.4.0(rollup@4.62.0) '@swc/core': 1.16.1(@swc/helpers@0.5.23) load-tsconfig: 0.2.5 - unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) + unplugin: 3.3.0(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -26389,7 +26218,7 @@ snapshots: - vite - webpack - unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): + unplugin@3.3.0(esbuild@0.28.2)(rolldown@1.2.5)(rollup@4.62.0)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0))(webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.7 @@ -26399,7 +26228,7 @@ snapshots: rolldown: 1.2.5 rollup: 4.62.0 vite: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - webpack: 5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) + webpack: 5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3) update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: @@ -26520,55 +26349,6 @@ snapshots: - '@types/node' - rollup - vite-node@3.2.4(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3(supports-color@8.1.1) - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.6(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-tsconfig-paths@6.1.1(@typescript/typescript6@6.0.2)(supports-color@8.1.1)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)): - dependencies: - debug: 4.4.3(supports-color@8.1.1) - globrex: 0.1.2 - tsconfck: 3.1.6(@typescript/typescript6@6.0.2) - vite: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - transitivePeerDependencies: - - supports-color - - typescript - - vite@7.3.6(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0): - dependencies: - esbuild: 0.28.2 - fdir: 6.5.0(picomatch@4.0.7) - picomatch: 4.0.7 - postcss: 8.5.26 - rollup: 4.62.0 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 24.13.3 - fsevents: 2.3.3 - jiti: 2.7.0 - lightningcss: 1.33.0 - sass: 1.102.0 - terser: 5.49.0 - tsx: 4.23.12 - yaml: 2.9.0 - vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 @@ -26594,50 +26374,6 @@ snapshots: dependencies: vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.11)(happy-dom@20.11.8)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)) - vitest@3.2.7(@types/debug@4.1.13)(@types/node@24.13.3)(happy-dom@20.11.8)(jiti@2.7.0)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0): - dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.7 - '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)) - '@vitest/pretty-format': 3.2.7 - '@vitest/runner': 3.2.7 - '@vitest/snapshot': 3.2.7 - '@vitest/spy': 3.2.7 - '@vitest/utils': 3.2.7 - chai: 5.3.3 - debug: 4.4.3(supports-color@8.1.1) - expect-type: 1.4.0 - magic-string: 0.30.21 - pathe: 2.0.3 - picomatch: 4.0.7 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.17 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.3.6(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.102.0)(supports-color@8.1.1)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.13 - '@types/node': 24.13.3 - happy-dom: 20.11.8 - jsdom: 26.1.0(canvas@3.2.3)(supports-color@8.1.1) - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@4.1.11(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.11)(happy-dom@20.11.8)(jsdom@26.1.0(canvas@3.2.3)(supports-color@8.1.1))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.102.0)(terser@5.49.0)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 @@ -26812,52 +26548,13 @@ snapshots: flat: 5.0.2 wildcard: 2.0.1 - webpack-node-externals@3.0.0: {} + webpack-node-externals@3.0.0: + optional: true webpack-sources@3.5.1: {} webpack-virtual-modules@0.6.2: {} - webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.9 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.18.0 - acorn-import-phases: 1.0.4(acorn@8.18.0) - browserslist: 4.28.6 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.24.4 - es-module-lexer: 2.3.2 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - loader-runner: 4.3.2 - mime-db: 1.54.0 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.3 - terser-webpack-plugin: 5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)(webpack@5.106.2(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3)) - watchpack: 2.5.2 - webpack-sources: 3.5.1 - transitivePeerDependencies: - - '@minify-html/node' - - '@swc/core' - - '@swc/css' - - '@swc/html' - - clean-css - - cssnano - - csso - - esbuild - - html-minifier-terser - - lightningcss - - postcss - - uglify-js - webpack@5.108.4(@swc/core@1.16.1(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.26))(csso@5.0.5)(esbuild@0.28.2)(html-minifier-terser@7.2.0)(lightningcss@1.33.0)(postcss@8.5.26)(uglify-js@3.19.3): dependencies: '@types/estree': 1.0.9 @@ -27093,8 +26790,6 @@ snapshots: yocto-queue@1.2.2: {} - yoctocolors-cjs@2.1.3: {} - yoctocolors@2.1.2: {} zimmerframe@1.1.4: {} diff --git a/server/mise.toml b/server/mise.toml index 9a2b475e1..d57909388 100644 --- a/server/mise.toml +++ b/server/mise.toml @@ -3,7 +3,9 @@ run = "pnpm install --filter immich --frozen-lockfile" [tasks.build] env._.path = "./node_modules/.bin" -run = "nest build" +# TODO we shouldn't technically need tsc-alias, but the nestjs tsconfig paths resolution is broken right now with ESM +# remove when https://github.com/nestjs/nest-cli/pull/3545 has been released +run = "nest build && tsc-alias" [tasks.test] env._.path = "./node_modules/.bin" @@ -47,10 +49,7 @@ description = "Run database migration commands (create, generate, run, sync-orde run = { task = "migrations query 'DROP schema public cascade; CREATE schema public;'" } [tasks."schema-reset"] -run = [ - { task = ":schema-drop" }, - { task = "migrations run" }, -] +run = [{ task = ":schema-drop" }, { task = "migrations run" }] [tasks."email-dev"] env._.path = "./node_modules/.bin" @@ -78,5 +77,7 @@ run = [ run = [ { task = ":ci-unit" }, { task = ":ci-medium" }, - { task = ":migrations", args = ["verify-order"] }, + { task = ":migrations", args = [ + "verify-order", + ] }, ] diff --git a/server/nest-cli.json b/server/nest-cli.json index 16a8b8a09..82cd828ec 100644 --- a/server/nest-cli.json +++ b/server/nest-cli.json @@ -4,7 +4,6 @@ "sourceRoot": "src", "compilerOptions": { "deleteOutDir": false, - "webpack": false, "plugins": [ { "name": "@nestjs/swagger", diff --git a/server/package.json b/server/package.json index cb4ae64d6..241815a1b 100644 --- a/server/package.json +++ b/server/package.json @@ -5,13 +5,14 @@ "author": "", "private": true, "license": "GNU Affero General Public License version 3", + "type": "module", "files": [ "bin", "dist", "helmet.json" ], "scripts": { - "build": "nest build", + "build": "nest build && tsc-alias", "format": "prettier --cache --check .", "format:fix": "prettier --cache --write --list-different .", "start": "pnpm run start:dev", @@ -41,14 +42,14 @@ "@extism/extism": "2.0.0-rc13", "@immich/plugin-sdk": "workspace:*", "@immich/sql-tools": "^0.6.3", - "@nestjs/bullmq": "^11.0.1", - "@nestjs/common": "^11.0.4", - "@nestjs/core": "^11.0.4", - "@nestjs/platform-express": "^11.0.4", - "@nestjs/platform-socket.io": "^11.0.4", - "@nestjs/schedule": "^6.0.0", - "@nestjs/swagger": "^11.4.2", - "@nestjs/websockets": "^11.0.4", + "@nestjs/bullmq": "^12.0.0", + "@nestjs/common": "^12.0.0", + "@nestjs/core": "^12.0.0", + "@nestjs/platform-express": "^12.0.0", + "@nestjs/platform-socket.io": "^12.0.0", + "@nestjs/schedule": "^12.0.1", + "@nestjs/swagger": "^12.0.0", + "@nestjs/websockets": "^12.0.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.0.0", "@opentelemetry/exporter-prometheus": "^0.222.0", @@ -86,9 +87,9 @@ "jose": "^6.0.0", "js-yaml": "^5.0.0", "jsonwebtoken": "^9.0.2", - "kysely": "0.28.17", + "kysely": "^0.29.5", "kysely-postgres-js": "^3.0.0", - "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "luxon": "^3.4.2", "mnemonist": "^0.40.3", "multer": "^2.0.2", @@ -122,9 +123,9 @@ }, "devDependencies": { "@eslint/js": "^10.0.0", - "@nestjs/cli": "^11.0.2", - "@nestjs/schematics": "^11.0.0", - "@nestjs/testing": "^11.0.4", + "@nestjs/cli": "^12.0.0", + "@nestjs/schematics": "^12.0.0", + "@nestjs/testing": "^12.0.0", "@swc/core": "^1.4.14", "@types/archiver": "^7.0.0", "@types/async-lock": "^1.4.2", @@ -136,7 +137,7 @@ "@types/fluent-ffmpeg": "^2.1.21", "@types/js-yaml": "^4.0.9", "@types/jsonwebtoken": "^9.0.10", - "@types/lodash": "^4.14.197", + "@types/lodash-es": "^4.14.197", "@types/luxon": "^3.6.2", "@types/mock-fs": "^4.13.1", "@types/multer": "^2.0.0", @@ -164,11 +165,11 @@ "supertest": "^7.1.0", "tailwindcss": "^3.4.0", "testcontainers": "^12.0.0", + "tsc-alias": "^1.8.16", "typescript": "npm:@typescript/typescript6@^6.0.2", "typescript-eslint": "^8.28.0", "unplugin-swc": "^1.4.5", - "vite-tsconfig-paths": "^6.0.0", - "vitest": "^3.0.0" + "vitest": "^4.0.0" }, "overrides": { "sharp": "^0.35.3" diff --git a/server/src/app.common.ts b/server/src/app.common.ts index 5ea52a059..03d834e48 100644 --- a/server/src/app.common.ts +++ b/server/src/app.common.ts @@ -5,14 +5,14 @@ import cookieParser from 'cookie-parser'; import helmetMiddleware from 'helmet'; import { existsSync } from 'node:fs'; import sirv from 'sirv'; -import { IMMICH_SERVER_START, excludePaths, serverVersion } from 'src/constants'; -import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; -import { WebSocketAdapter } from 'src/middleware/websocket.adapter'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { bootstrapTelemetry } from 'src/repositories/telemetry.repository'; -import { ApiService } from 'src/services/api.service'; -import { useSwagger } from 'src/utils/misc'; +import { IMMICH_SERVER_START, excludePaths, serverVersion } from 'src/constants.js'; +import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service.js'; +import { WebSocketAdapter } from 'src/middleware/websocket.adapter.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { bootstrapTelemetry } from 'src/repositories/telemetry.repository.js'; +import { ApiService } from 'src/services/api.service.js'; +import { useSwagger } from 'src/utils/misc.js'; export function configureTelemetry() { const { telemetry } = new ConfigRepository().getEnv(); diff --git a/server/src/app.module.ts b/server/src/app.module.ts index a4e8ac27c..b933dcbbc 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -6,39 +6,39 @@ import { ClsModule } from 'nestjs-cls'; import { KyselyModule } from 'nestjs-kysely'; import { OpenTelemetryModule } from 'nestjs-otel'; import { ZodSerializerInterceptor, ZodValidationPipe } from 'nestjs-zod'; -import { commandsAndQuestions } from 'src/commands'; -import { IWorker } from 'src/constants'; -import { controllers } from 'src/controllers'; -import { ImmichWorker } from 'src/enum'; -import { MaintenanceAuthGuard } from 'src/maintenance/maintenance-auth.guard'; -import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository'; -import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository'; -import { MaintenanceWorkerController } from 'src/maintenance/maintenance-worker.controller'; -import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; -import { AuthGuard } from 'src/middleware/auth.guard'; -import { ErrorInterceptor } from 'src/middleware/error.interceptor'; -import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor'; -import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter'; -import { LoggingInterceptor } from 'src/middleware/logging.interceptor'; -import { repositories } from 'src/repositories'; -import { AppRepository } from 'src/repositories/app.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { ProcessRepository } from 'src/repositories/process.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { teardownTelemetry, TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { WebsocketRepository } from 'src/repositories/websocket.repository'; -import { services } from 'src/services'; -import { AuthService } from 'src/services/auth.service'; -import { CliService } from 'src/services/cli.service'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { QueueService } from 'src/services/queue.service'; -import { getKyselyConfig } from 'src/utils/database'; -import { configureUserAgent } from 'src/utils/fetch'; +import { commandsAndQuestions } from 'src/commands/index.js'; +import { IWorker } from 'src/constants.js'; +import { controllers } from 'src/controllers/index.js'; +import { ImmichWorker } from 'src/enum.js'; +import { MaintenanceAuthGuard } from 'src/maintenance/maintenance-auth.guard.js'; +import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository.js'; +import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository.js'; +import { MaintenanceWorkerController } from 'src/maintenance/maintenance-worker.controller.js'; +import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service.js'; +import { AuthGuard } from 'src/middleware/auth.guard.js'; +import { ErrorInterceptor } from 'src/middleware/error.interceptor.js'; +import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor.js'; +import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter.js'; +import { LoggingInterceptor } from 'src/middleware/logging.interceptor.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { repositories } from 'src/repositories/index.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { teardownTelemetry, TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { WebsocketRepository } from 'src/repositories/websocket.repository.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { CliService } from 'src/services/cli.service.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { services } from 'src/services/index.js'; +import { QueueService } from 'src/services/queue.service.js'; +import { getKyselyConfig } from 'src/utils/database.js'; +import { configureUserAgent } from 'src/utils/fetch.js'; const common = [...repositories, ...services, GlobalExceptionFilter]; diff --git a/server/src/bin/sync-open-api.ts b/server/src/bin/sync-open-api.ts index d5316b34c..68a0b8be3 100644 --- a/server/src/bin/sync-open-api.ts +++ b/server/src/bin/sync-open-api.ts @@ -2,8 +2,8 @@ process.env.DB_URL = 'postgres://postgres:postgres@localhost:5432/immich'; import { NestFactory } from '@nestjs/core'; import { NestExpressApplication } from '@nestjs/platform-express'; -import { ApiModule } from 'src/app.module'; -import { useSwagger } from 'src/utils/misc'; +import { ApiModule } from 'src/app.module.js'; +import { useSwagger } from 'src/utils/misc.js'; const sync = async () => { const app = await NestFactory.create(ApiModule, { preview: true }); diff --git a/server/src/bin/sync-sql.ts b/server/src/bin/sync-sql.ts index 528941e0b..c66a14897 100644 --- a/server/src/bin/sync-sql.ts +++ b/server/src/bin/sync-sql.ts @@ -9,15 +9,15 @@ import { OpenTelemetryModule } from 'nestjs-otel'; import { mkdir, rm, writeFile } from 'node:fs/promises'; import { join } from 'node:path'; import { format } from 'sql-formatter'; -import { GENERATE_SQL_KEY, GenerateSqlQueries } from 'src/decorators'; -import { repositories } from 'src/repositories'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { SyncRepository } from 'src/repositories/sync.repository'; -import { AuthService } from 'src/services/auth.service'; -import { getKyselyConfig } from 'src/utils/database'; +import { GENERATE_SQL_KEY, GenerateSqlQueries } from 'src/decorators.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { repositories } from 'src/repositories/index.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { SyncRepository } from 'src/repositories/sync.repository.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { getKyselyConfig } from 'src/utils/database.js'; const handleError = (label: string, error: Error | any) => { console.error(`${label} error: ${error}`); diff --git a/server/src/commands/grant-admin.ts b/server/src/commands/grant-admin.ts index 41fd4f234..ba36f31bb 100644 --- a/server/src/commands/grant-admin.ts +++ b/server/src/commands/grant-admin.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner, InquirerService, Question, QuestionSet } from 'nest-commander'; -import { CliService } from 'src/services/cli.service'; +import { CliService } from 'src/services/cli.service.js'; const prompt = (inquirer: InquirerService) => { return function ask(): Promise { diff --git a/server/src/commands/index.ts b/server/src/commands/index.ts index 0d03e4cd9..17f543e78 100644 --- a/server/src/commands/index.ts +++ b/server/src/commands/index.ts @@ -1,16 +1,16 @@ -import { GrantAdminCommand, PromptEmailQuestion, RevokeAdminCommand } from 'src/commands/grant-admin'; -import { ListUsersCommand } from 'src/commands/list-users.command'; -import { DisableMaintenanceModeCommand, EnableMaintenanceModeCommand } from 'src/commands/maintenance-mode'; +import { GrantAdminCommand, PromptEmailQuestion, RevokeAdminCommand } from 'src/commands/grant-admin.js'; +import { ListUsersCommand } from 'src/commands/list-users.command.js'; +import { DisableMaintenanceModeCommand, EnableMaintenanceModeCommand } from 'src/commands/maintenance-mode.js'; import { ChangeMediaLocationCommand, PromptConfirmMoveQuestions, PromptMediaLocationQuestions, -} from 'src/commands/media-location.command'; -import { DisableOAuthLogin, EnableOAuthLogin } from 'src/commands/oauth-login'; -import { DisablePasswordLoginCommand, EnablePasswordLoginCommand } from 'src/commands/password-login'; -import { PromptPasswordResetQuestions, ResetAdminPasswordCommand } from 'src/commands/reset-admin-password.command'; -import { SchemaCheck } from 'src/commands/schema-check'; -import { VersionCommand } from 'src/commands/version.command'; +} from 'src/commands/media-location.command.js'; +import { DisableOAuthLogin, EnableOAuthLogin } from 'src/commands/oauth-login.js'; +import { DisablePasswordLoginCommand, EnablePasswordLoginCommand } from 'src/commands/password-login.js'; +import { PromptPasswordResetQuestions, ResetAdminPasswordCommand } from 'src/commands/reset-admin-password.command.js'; +import { SchemaCheck } from 'src/commands/schema-check.js'; +import { VersionCommand } from 'src/commands/version.command.js'; export const commandsAndQuestions = [ ResetAdminPasswordCommand, diff --git a/server/src/commands/list-users.command.ts b/server/src/commands/list-users.command.ts index 299ea8228..98c8bf163 100644 --- a/server/src/commands/list-users.command.ts +++ b/server/src/commands/list-users.command.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner } from 'nest-commander'; -import { CliService } from 'src/services/cli.service'; +import { CliService } from 'src/services/cli.service.js'; @Command({ name: 'list-users', diff --git a/server/src/commands/maintenance-mode.ts b/server/src/commands/maintenance-mode.ts index 3416acf05..797ad6294 100644 --- a/server/src/commands/maintenance-mode.ts +++ b/server/src/commands/maintenance-mode.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner } from 'nest-commander'; -import { CliService } from 'src/services/cli.service'; +import { CliService } from 'src/services/cli.service.js'; @Command({ name: 'enable-maintenance-mode', diff --git a/server/src/commands/media-location.command.ts b/server/src/commands/media-location.command.ts index 5a4e9bbe3..66bbf926f 100644 --- a/server/src/commands/media-location.command.ts +++ b/server/src/commands/media-location.command.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner, InquirerService, Question, QuestionSet } from 'nest-commander'; -import { CliService } from 'src/services/cli.service'; +import { CliService } from 'src/services/cli.service.js'; @Command({ name: 'change-media-location', diff --git a/server/src/commands/oauth-login.ts b/server/src/commands/oauth-login.ts index 9ec7013fa..b55102ab7 100644 --- a/server/src/commands/oauth-login.ts +++ b/server/src/commands/oauth-login.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner } from 'nest-commander'; -import { CliService } from 'src/services/cli.service'; +import { CliService } from 'src/services/cli.service.js'; @Command({ name: 'enable-oauth-login', diff --git a/server/src/commands/password-login.ts b/server/src/commands/password-login.ts index 057abd164..7019aeafe 100644 --- a/server/src/commands/password-login.ts +++ b/server/src/commands/password-login.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner } from 'nest-commander'; -import { CliService } from 'src/services/cli.service'; +import { CliService } from 'src/services/cli.service.js'; @Command({ name: 'enable-password-login', diff --git a/server/src/commands/reset-admin-password.command.ts b/server/src/commands/reset-admin-password.command.ts index 703f69332..a9196fa90 100644 --- a/server/src/commands/reset-admin-password.command.ts +++ b/server/src/commands/reset-admin-password.command.ts @@ -1,6 +1,6 @@ import { Command, CommandRunner, InquirerService, Question, QuestionSet } from 'nest-commander'; -import { UserAdminResponseDto } from 'src/dtos/user.dto'; -import { CliService } from 'src/services/cli.service'; +import { UserAdminResponseDto } from 'src/dtos/user.dto.js'; +import { CliService } from 'src/services/cli.service.js'; const prompt = (inquirer: InquirerService) => { return (admin: UserAdminResponseDto) => { diff --git a/server/src/commands/schema-check.ts b/server/src/commands/schema-check.ts index fc38254dd..b7521a503 100644 --- a/server/src/commands/schema-check.ts +++ b/server/src/commands/schema-check.ts @@ -1,7 +1,7 @@ import { asHuman } from '@immich/sql-tools'; import { Command, CommandRunner } from 'nest-commander'; -import { ErrorMessages } from 'src/constants'; -import { CliService } from 'src/services/cli.service'; +import { ErrorMessages } from 'src/constants.js'; +import { CliService } from 'src/services/cli.service.js'; @Command({ name: 'schema-check', diff --git a/server/src/commands/version.command.ts b/server/src/commands/version.command.ts index 585f097b6..feeef18d8 100644 --- a/server/src/commands/version.command.ts +++ b/server/src/commands/version.command.ts @@ -1,5 +1,5 @@ import { Command, CommandRunner } from 'nest-commander'; -import { VersionService } from 'src/services/version.service'; +import { VersionService } from 'src/services/version.service.js'; @Command({ name: 'version', diff --git a/server/src/constants.ts b/server/src/constants.ts index 856a6ffc5..efa5885c3 100644 --- a/server/src/constants.ts +++ b/server/src/constants.ts @@ -9,7 +9,7 @@ import { TranscodeHardwareAcceleration, VectorIndex, VideoCodec, -} from 'src/enum'; +} from 'src/enum.js'; export const IMMICH_SERVER_START = 'Immich Server is listening'; @@ -49,8 +49,7 @@ export const LOGIN_DUMMY_HASH = '$2b$10$abcdefghijklmnopqrstuuABCDEFGHIJKLMNOPQR export const IWorker = 'IWorker'; -// eslint-disable-next-line unicorn/prefer-module -const basePath = dirname(__filename); +const basePath = dirname(import.meta.filename); const packageFile = join(basePath, '..', 'package.json'); const { version } = JSON.parse(readFileSync(packageFile, 'utf8')); export const serverVersion = new SemVer(version); diff --git a/server/src/controllers/activity.controller.spec.ts b/server/src/controllers/activity.controller.spec.ts index 899c7257d..83ec4c697 100644 --- a/server/src/controllers/activity.controller.spec.ts +++ b/server/src/controllers/activity.controller.spec.ts @@ -1,8 +1,8 @@ -import { ActivityController } from 'src/controllers/activity.controller'; -import { ActivityService } from 'src/services/activity.service'; +import { ActivityController } from 'src/controllers/activity.controller.js'; +import { ActivityService } from 'src/services/activity.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(ActivityController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/activity.controller.ts b/server/src/controllers/activity.controller.ts index 850e95510..1098200f9 100644 --- a/server/src/controllers/activity.controller.ts +++ b/server/src/controllers/activity.controller.ts @@ -1,19 +1,19 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Query, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import type { Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { ActivityCreateDto, ActivityDto, ActivityResponseDto, ActivitySearchDto, ActivityStatisticsResponseDto, -} from 'src/dtos/activity.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { ActivityService } from 'src/services/activity.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/activity.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { ActivityService } from 'src/services/activity.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Activities) @Controller('activities') diff --git a/server/src/controllers/album.controller.spec.ts b/server/src/controllers/album.controller.spec.ts index 239a60210..da85c3c9e 100644 --- a/server/src/controllers/album.controller.spec.ts +++ b/server/src/controllers/album.controller.spec.ts @@ -1,8 +1,8 @@ -import { AlbumController } from 'src/controllers/album.controller'; -import { AlbumService } from 'src/services/album.service'; +import { AlbumController } from 'src/controllers/album.controller.js'; +import { AlbumService } from 'src/services/album.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(AlbumController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/album.controller.ts b/server/src/controllers/album.controller.ts index 4101309db..70ebc13a1 100644 --- a/server/src/controllers/album.controller.ts +++ b/server/src/controllers/album.controller.ts @@ -1,6 +1,6 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { AddUsersDto, AlbumResponseDto, @@ -12,14 +12,14 @@ import { GetAlbumsDto, UpdateAlbumDto, UpdateAlbumUserDto, -} from 'src/dtos/album.dto'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { MapMarkerResponseDto } from 'src/dtos/map.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { AlbumService } from 'src/services/album.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/album.dto.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { MapMarkerResponseDto } from 'src/dtos/map.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { AlbumService } from 'src/services/album.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Albums) @Controller('albums') diff --git a/server/src/controllers/api-key.controller.spec.ts b/server/src/controllers/api-key.controller.spec.ts index 815e00a9a..d6a54370c 100644 --- a/server/src/controllers/api-key.controller.spec.ts +++ b/server/src/controllers/api-key.controller.spec.ts @@ -1,9 +1,9 @@ -import { ApiKeyController } from 'src/controllers/api-key.controller'; -import { Permission } from 'src/enum'; -import { ApiKeyService } from 'src/services/api-key.service'; +import { ApiKeyController } from 'src/controllers/api-key.controller.js'; +import { Permission } from 'src/enum.js'; +import { ApiKeyService } from 'src/services/api-key.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(ApiKeyController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/api-key.controller.ts b/server/src/controllers/api-key.controller.ts index a179e253d..fb5be4ec5 100644 --- a/server/src/controllers/api-key.controller.ts +++ b/server/src/controllers/api-key.controller.ts @@ -1,12 +1,12 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { ApiKeyCreateDto, ApiKeyCreateResponseDto, ApiKeyResponseDto, ApiKeyUpdateDto } from 'src/dtos/api-key.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { ApiKeyService } from 'src/services/api-key.service'; -import { UUIDParamDto } from 'src/validation'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { ApiKeyCreateDto, ApiKeyCreateResponseDto, ApiKeyResponseDto, ApiKeyUpdateDto } from 'src/dtos/api-key.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { ApiKeyService } from 'src/services/api-key.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.ApiKeys) @Controller('api-keys') diff --git a/server/src/controllers/app.controller.spec.ts b/server/src/controllers/app.controller.spec.ts index 4cc00e78c..bc659f897 100644 --- a/server/src/controllers/app.controller.spec.ts +++ b/server/src/controllers/app.controller.spec.ts @@ -1,7 +1,7 @@ -import { AppController } from 'src/controllers/app.controller'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { AppController } from 'src/controllers/app.controller.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; import request from 'supertest'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(AppController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/app.controller.ts b/server/src/controllers/app.controller.ts index eca7e5bcb..e4739fb42 100644 --- a/server/src/controllers/app.controller.ts +++ b/server/src/controllers/app.controller.ts @@ -1,7 +1,7 @@ import { Controller, Get, Header } from '@nestjs/common'; import { ApiExcludeEndpoint } from '@nestjs/swagger'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; @Controller() export class AppController { diff --git a/server/src/controllers/asset-file.controller.ts b/server/src/controllers/asset-file.controller.ts index 5d50f54ee..f73ac7d0e 100644 --- a/server/src/controllers/asset-file.controller.ts +++ b/server/src/controllers/asset-file.controller.ts @@ -1,15 +1,15 @@ import { Controller, Delete, Get, HttpCode, HttpStatus, Next, Param, Query, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { NextFunction, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AssetFileResponseDto, AssetFileSearchDto } from 'src/dtos/asset-file.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { AssetFileService } from 'src/services/asset-file.service'; -import { sendFile } from 'src/utils/file'; -import { UUIDParamDto } from 'src/validation'; +import type { NextFunction, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AssetFileResponseDto, AssetFileSearchDto } from 'src/dtos/asset-file.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { AssetFileService } from 'src/services/asset-file.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.AssetFiles) @Controller('asset-files') diff --git a/server/src/controllers/asset-media.controller.spec.ts b/server/src/controllers/asset-media.controller.spec.ts index 43d9a9778..9887d4490 100644 --- a/server/src/controllers/asset-media.controller.spec.ts +++ b/server/src/controllers/asset-media.controller.spec.ts @@ -1,11 +1,11 @@ -import { AssetMediaController } from 'src/controllers/asset-media.controller'; -import { AssetMediaStatus } from 'src/dtos/asset-media-response.dto'; -import { AssetMetadataKey } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { AssetMediaService } from 'src/services/asset-media.service'; +import { AssetMediaController } from 'src/controllers/asset-media.controller.js'; +import { AssetMediaStatus } from 'src/dtos/asset-media-response.dto.js'; +import { AssetMetadataKey } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; const makeUploadDto = (options?: { omit: string }): Record => { const dto: Record = { diff --git a/server/src/controllers/asset-media.controller.ts b/server/src/controllers/asset-media.controller.ts index c357c1343..1646c867e 100644 --- a/server/src/controllers/asset-media.controller.ts +++ b/server/src/controllers/asset-media.controller.ts @@ -15,30 +15,30 @@ import { UseInterceptors, } from '@nestjs/common'; import { ApiBody, ApiConsumes, ApiHeader, ApiResponse, ApiTags } from '@nestjs/swagger'; -import { NextFunction, Request, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import { type NextFunction, type Request, type Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { AssetBulkUploadCheckResponseDto, AssetMediaResponseDto, AssetMediaStatus, -} from 'src/dtos/asset-media-response.dto'; +} from 'src/dtos/asset-media-response.dto.js'; import { AssetBulkUploadCheckDto, AssetMediaCreateDto, AssetMediaOptionsDto, AssetMediaSize, -} from 'src/dtos/asset-media.dto'; -import { AssetDownloadOriginalDto } from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiTag, ImmichHeader, Permission, RouteKey } from 'src/enum'; -import { AssetUploadInterceptor } from 'src/middleware/asset-upload.interceptor'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { FileUploadInterceptor, getFiles } from 'src/middleware/file-upload.interceptor'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { AssetMediaService } from 'src/services/asset-media.service'; -import { UploadFiles } from 'src/types'; -import { ImmichFileResponse, sendFile } from 'src/utils/file'; -import { FileNotEmptyValidator, UUIDParamDto } from 'src/validation'; +} from 'src/dtos/asset-media.dto.js'; +import { AssetDownloadOriginalDto } from 'src/dtos/asset.dto.js'; +import { type AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiTag, ImmichHeader, Permission, RouteKey } from 'src/enum.js'; +import { AssetUploadInterceptor } from 'src/middleware/asset-upload.interceptor.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { FileUploadInterceptor, getFiles } from 'src/middleware/file-upload.interceptor.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; +import type { UploadFiles } from 'src/types.js'; +import { ImmichFileResponse, sendFile } from 'src/utils/file.js'; +import { FileNotEmptyValidator, UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Assets) @Controller(RouteKey.Asset) diff --git a/server/src/controllers/asset.controller.spec.ts b/server/src/controllers/asset.controller.spec.ts index 92710d6ff..d95025385 100644 --- a/server/src/controllers/asset.controller.spec.ts +++ b/server/src/controllers/asset.controller.spec.ts @@ -1,9 +1,9 @@ -import { AssetController } from 'src/controllers/asset.controller'; -import { AssetMetadataKey } from 'src/enum'; -import { AssetService } from 'src/services/asset.service'; +import { AssetController } from 'src/controllers/asset.controller.js'; +import { AssetMetadataKey } from 'src/enum.js'; +import { AssetService } from 'src/services/asset.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(AssetController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/asset.controller.ts b/server/src/controllers/asset.controller.ts index 7fcc44c7d..93e89983c 100644 --- a/server/src/controllers/asset.controller.ts +++ b/server/src/controllers/asset.controller.ts @@ -1,7 +1,7 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put, Query } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AssetResponseDto } from 'src/dtos/asset-response.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AssetResponseDto } from 'src/dtos/asset-response.dto.js'; import { AssetBulkDeleteDto, AssetBulkUpdateDto, @@ -16,14 +16,14 @@ import { AssetStatsDto, AssetStatsResponseDto, UpdateAssetDto, -} from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetEditsCreateDto, AssetEditsResponseDto } from 'src/dtos/editing.dto'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; -import { ApiTag, Permission, RouteKey } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { AssetService } from 'src/services/asset.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/asset.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { AssetEditsCreateDto, AssetEditsResponseDto } from 'src/dtos/editing.dto.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; +import { ApiTag, Permission, RouteKey } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { AssetService } from 'src/services/asset.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Assets) @Controller(RouteKey.Asset) diff --git a/server/src/controllers/auth-admin.controller.ts b/server/src/controllers/auth-admin.controller.ts index d4cada9af..49895b93a 100644 --- a/server/src/controllers/auth-admin.controller.ts +++ b/server/src/controllers/auth-admin.controller.ts @@ -1,10 +1,10 @@ import { Controller, HttpCode, HttpStatus, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { AuthAdminService } from 'src/services/auth-admin.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { AuthAdminService } from 'src/services/auth-admin.service.js'; @ApiTags(ApiTag.AuthenticationAdmin) @Controller('admin/auth') diff --git a/server/src/controllers/auth.controller.spec.ts b/server/src/controllers/auth.controller.spec.ts index 832547776..c110e703c 100644 --- a/server/src/controllers/auth.controller.spec.ts +++ b/server/src/controllers/auth.controller.spec.ts @@ -1,11 +1,11 @@ import { BadRequestException } from '@nestjs/common'; -import { AuthController } from 'src/controllers/auth.controller'; -import { LoginResponseDto } from 'src/dtos/auth.dto'; -import { AuthService } from 'src/services/auth.service'; +import { AuthController } from 'src/controllers/auth.controller.js'; +import { LoginResponseDto } from 'src/dtos/auth.dto.js'; +import { AuthService } from 'src/services/auth.service.js'; import request from 'supertest'; -import { mediumFactory } from 'test/medium.factory'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { mediumFactory } from 'test/medium.factory.js'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(AuthController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/auth.controller.ts b/server/src/controllers/auth.controller.ts index b96ba4dee..91147a3b3 100644 --- a/server/src/controllers/auth.controller.ts +++ b/server/src/controllers/auth.controller.ts @@ -1,9 +1,9 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Post, Put, Req, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Request, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import type { Request, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { - AuthDto, + type AuthDto, AuthStatusResponseDto, ChangePasswordDto, LoginCredentialDto, @@ -15,12 +15,12 @@ import { SessionUnlockDto, SignUpDto, ValidateAccessTokenResponseDto, -} from 'src/dtos/auth.dto'; -import { UserAdminResponseDto } from 'src/dtos/user.dto'; -import { ApiTag, AuthType, ImmichCookie, Permission } from 'src/enum'; -import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard'; -import { AuthService, LoginDetails } from 'src/services/auth.service'; -import { respondWithCookie, respondWithoutCookie } from 'src/utils/response'; +} from 'src/dtos/auth.dto.js'; +import { UserAdminResponseDto } from 'src/dtos/user.dto.js'; +import { ApiTag, AuthType, ImmichCookie, Permission } from 'src/enum.js'; +import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard.js'; +import { AuthService, type LoginDetails } from 'src/services/auth.service.js'; +import { respondWithCookie, respondWithoutCookie } from 'src/utils/response.js'; @ApiTags(ApiTag.Authentication) @Controller('auth') diff --git a/server/src/controllers/cluster-group.controller.ts b/server/src/controllers/cluster-group.controller.ts index 8df0cc9a4..c26d8ff67 100644 --- a/server/src/controllers/cluster-group.controller.ts +++ b/server/src/controllers/cluster-group.controller.ts @@ -1,14 +1,14 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Put, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ClusterGroupRequestCreateDto, ClusterGroupRequestResponseDto } from 'src/dtos/cluster-group.dto'; -import { UserResponseDto } from 'src/dtos/user.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { ClusterGroupService } from 'src/services/cluster-group.service'; -import { UUIDParamDto } from 'src/validation'; +import type { Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { ClusterGroupRequestCreateDto, ClusterGroupRequestResponseDto } from 'src/dtos/cluster-group.dto.js'; +import { UserResponseDto } from 'src/dtos/user.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { ClusterGroupService } from 'src/services/cluster-group.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.ClusterGroups) @Controller('cluster-groups') diff --git a/server/src/controllers/config-admin.controller.ts b/server/src/controllers/config-admin.controller.ts index b135b0e62..d4f6f0d26 100644 --- a/server/src/controllers/config-admin.controller.ts +++ b/server/src/controllers/config-admin.controller.ts @@ -1,10 +1,10 @@ import { Body, Controller, Get, Put } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AdminConfigDto } from 'src/dtos/config.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AdminConfigDto } from 'src/dtos/config.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; @ApiTags(ApiTag.ConfigAdmin) @Controller('admin/config') diff --git a/server/src/controllers/config-public.controller.ts b/server/src/controllers/config-public.controller.ts index 87f7bb14c..f5ca7d792 100644 --- a/server/src/controllers/config-public.controller.ts +++ b/server/src/controllers/config-public.controller.ts @@ -1,10 +1,10 @@ import { Controller, Get } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { PublicConfigDto } from 'src/dtos/config.dto'; -import { ApiTag } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { PublicConfigDto } from 'src/dtos/config.dto.js'; +import { ApiTag } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; @ApiTags(ApiTag.ConfigPublic) @Controller('public/config') diff --git a/server/src/controllers/config-user.controller.ts b/server/src/controllers/config-user.controller.ts index 8f49d119f..104d50a33 100644 --- a/server/src/controllers/config-user.controller.ts +++ b/server/src/controllers/config-user.controller.ts @@ -1,10 +1,10 @@ import { Controller, Get } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { UserConfigDto } from 'src/dtos/config.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { UserConfigDto } from 'src/dtos/config.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; @ApiTags(ApiTag.ConfigUser) @Controller('config') diff --git a/server/src/controllers/config.controller.spec.ts b/server/src/controllers/config.controller.spec.ts index fdd6a76e7..c1e0cb3b5 100644 --- a/server/src/controllers/config.controller.spec.ts +++ b/server/src/controllers/config.controller.spec.ts @@ -1,16 +1,16 @@ -import _ from 'lodash'; -import { ConfigAdminController } from 'src/controllers/config-admin.controller'; -import { ConfigPublicController } from 'src/controllers/config-public.controller'; -import { ConfigUserController } from 'src/controllers/config-user.controller'; -import { defaults, mapPublicConfig, mapUserConfig } from 'src/dtos/config.dto'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { cloneDeep } from 'lodash-es'; +import { ConfigAdminController } from 'src/controllers/config-admin.controller.js'; +import { ConfigPublicController } from 'src/controllers/config-public.controller.js'; +import { ConfigUserController } from 'src/controllers/config-user.controller.js'; +import { defaults, mapPublicConfig, mapUserConfig } from 'src/dtos/config.dto.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; /** Returns a full config that passes Zod validation (required URLs and min lengths). */ function validConfig() { - const config = _.cloneDeep(defaults) as typeof defaults & { + const config = cloneDeep(defaults) as typeof defaults & { oauth: { mobileRedirectUri: string }; notifications: { smtp: { from: string; transport: { host: string } } }; server: { externalDomain: string }; diff --git a/server/src/controllers/database-backup.controller.spec.ts b/server/src/controllers/database-backup.controller.spec.ts index 57a7ecc31..1901ce98b 100644 --- a/server/src/controllers/database-backup.controller.spec.ts +++ b/server/src/controllers/database-backup.controller.spec.ts @@ -1,10 +1,10 @@ import { BadRequestException } from '@nestjs/common'; -import { DatabaseBackupController } from 'src/controllers/database-backup.controller'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { MaintenanceService } from 'src/services/maintenance.service'; +import { DatabaseBackupController } from 'src/controllers/database-backup.controller.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { MaintenanceService } from 'src/services/maintenance.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(DatabaseBackupController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/database-backup.controller.ts b/server/src/controllers/database-backup.controller.ts index 4cb2092d1..83aba5502 100644 --- a/server/src/controllers/database-backup.controller.ts +++ b/server/src/controllers/database-backup.controller.ts @@ -1,22 +1,22 @@ import { Body, Controller, Delete, Get, Next, Param, Post, Res, UploadedFile, UseInterceptors } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { ApiBody, ApiConsumes, ApiTags } from '@nestjs/swagger'; -import { NextFunction, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import type { NextFunction, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { DatabaseBackupDeleteDto, DatabaseBackupListResponseDto, DatabaseBackupUploadDto, -} from 'src/dtos/database-backup.dto'; -import { ApiTag, ImmichCookie, Permission } from 'src/enum'; -import { Authenticated, FileResponse, GetLoginDetails } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { LoginDetails } from 'src/services/auth.service'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { MaintenanceService } from 'src/services/maintenance.service'; -import { sendFile } from 'src/utils/file'; -import { respondWithCookie } from 'src/utils/response'; -import { FilenameParamDto } from 'src/validation'; +} from 'src/dtos/database-backup.dto.js'; +import { ApiTag, ImmichCookie, Permission } from 'src/enum.js'; +import { Authenticated, FileResponse, GetLoginDetails } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { LoginDetails } from 'src/services/auth.service.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { MaintenanceService } from 'src/services/maintenance.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { respondWithCookie } from 'src/utils/response.js'; +import { FilenameParamDto } from 'src/validation.js'; @ApiTags(ApiTag.DatabaseBackups) @Controller('admin/database-backups') diff --git a/server/src/controllers/download.controller.spec.ts b/server/src/controllers/download.controller.spec.ts index ce3768895..b56ac2607 100644 --- a/server/src/controllers/download.controller.spec.ts +++ b/server/src/controllers/download.controller.spec.ts @@ -1,9 +1,9 @@ import { Readable } from 'node:stream'; -import { DownloadController } from 'src/controllers/download.controller'; -import { DownloadService } from 'src/services/download.service'; +import { DownloadController } from 'src/controllers/download.controller.js'; +import { DownloadService } from 'src/services/download.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(DownloadController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/download.controller.ts b/server/src/controllers/download.controller.ts index e45eeb23f..2066247eb 100644 --- a/server/src/controllers/download.controller.ts +++ b/server/src/controllers/download.controller.ts @@ -1,12 +1,12 @@ import { Body, Controller, HttpCode, HttpStatus, Post, StreamableFile } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { DownloadArchiveDto, DownloadInfoDto, DownloadResponseDto } from 'src/dtos/download.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { DownloadService } from 'src/services/download.service'; -import { asStreamableFile } from 'src/utils/file'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { DownloadArchiveDto, DownloadInfoDto, DownloadResponseDto } from 'src/dtos/download.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { DownloadService } from 'src/services/download.service.js'; +import { asStreamableFile } from 'src/utils/file.js'; @ApiTags(ApiTag.Download) @Controller('download') diff --git a/server/src/controllers/duplicate.controller.spec.ts b/server/src/controllers/duplicate.controller.spec.ts index c8ca0e579..b1dd6e5f6 100644 --- a/server/src/controllers/duplicate.controller.spec.ts +++ b/server/src/controllers/duplicate.controller.spec.ts @@ -1,8 +1,8 @@ -import { DuplicateController } from 'src/controllers/duplicate.controller'; -import { DuplicateService } from 'src/services/duplicate.service'; +import { DuplicateController } from 'src/controllers/duplicate.controller.js'; +import { DuplicateService } from 'src/services/duplicate.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(DuplicateController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/duplicate.controller.ts b/server/src/controllers/duplicate.controller.ts index 6502c3b2a..0ecede242 100644 --- a/server/src/controllers/duplicate.controller.ts +++ b/server/src/controllers/duplicate.controller.ts @@ -1,13 +1,13 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { DuplicateResolveDto, DuplicateResponseDto } from 'src/dtos/duplicate.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { DuplicateService } from 'src/services/duplicate.service'; -import { UUIDParamDto } from 'src/validation'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { DuplicateResolveDto, DuplicateResponseDto } from 'src/dtos/duplicate.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { DuplicateService } from 'src/services/duplicate.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Duplicates) @Controller('duplicates') diff --git a/server/src/controllers/face.controller.ts b/server/src/controllers/face.controller.ts index a1c1d6ee4..2865d338a 100644 --- a/server/src/controllers/face.controller.ts +++ b/server/src/controllers/face.controller.ts @@ -1,18 +1,18 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { AssetFaceCreateDto, AssetFaceDeleteDto, AssetFaceResponseDto, FaceDto, PersonResponseDto, -} from 'src/dtos/person.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { PersonService } from 'src/services/person.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/person.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { PersonService } from 'src/services/person.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Faces) @Controller('faces') diff --git a/server/src/controllers/index.spec.ts b/server/src/controllers/index.spec.ts index 69a3f1b0c..e156e01b0 100644 --- a/server/src/controllers/index.spec.ts +++ b/server/src/controllers/index.spec.ts @@ -1,8 +1,8 @@ import { RequestMethod } from '@nestjs/common'; import { METHOD_METADATA, PATH_METADATA } from '@nestjs/common/constants'; import { Reflector } from '@nestjs/core'; -import { controllers } from 'src/controllers'; -import { AuthenticatedOptions, getAuthenticatedOptions } from 'src/middleware/auth.guard'; +import { controllers } from 'src/controllers/index.js'; +import { AuthenticatedOptions, getAuthenticatedOptions } from 'src/middleware/auth.guard.js'; const UNAUTHENTICATED_ADMIN_ROUTES = new Set([ 'GET admin/maintenance/status', diff --git a/server/src/controllers/index.ts b/server/src/controllers/index.ts index a50ab050e..3cf594ce7 100644 --- a/server/src/controllers/index.ts +++ b/server/src/controllers/index.ts @@ -1,49 +1,49 @@ -import { ActivityController } from 'src/controllers/activity.controller'; -import { AlbumController } from 'src/controllers/album.controller'; -import { ApiKeyController } from 'src/controllers/api-key.controller'; -import { AppController } from 'src/controllers/app.controller'; -import { AssetFilesController } from 'src/controllers/asset-file.controller'; -import { AssetMediaController } from 'src/controllers/asset-media.controller'; -import { AssetController } from 'src/controllers/asset.controller'; -import { AuthAdminController } from 'src/controllers/auth-admin.controller'; -import { AuthController } from 'src/controllers/auth.controller'; -import { ClusterGroupController } from 'src/controllers/cluster-group.controller'; -import { ConfigAdminController } from 'src/controllers/config-admin.controller'; -import { ConfigPublicController } from 'src/controllers/config-public.controller'; -import { ConfigUserController } from 'src/controllers/config-user.controller'; -import { DatabaseBackupController } from 'src/controllers/database-backup.controller'; -import { DownloadController } from 'src/controllers/download.controller'; -import { DuplicateController } from 'src/controllers/duplicate.controller'; -import { FaceController } from 'src/controllers/face.controller'; -import { IntegrityAdminController } from 'src/controllers/integrity-admin.controller'; -import { JobController } from 'src/controllers/job.controller'; -import { LibraryController } from 'src/controllers/library.controller'; -import { MaintenanceController } from 'src/controllers/maintenance.controller'; -import { MapController } from 'src/controllers/map.controller'; -import { MemoryController } from 'src/controllers/memory.controller'; -import { NotificationAdminController } from 'src/controllers/notification-admin.controller'; -import { NotificationController } from 'src/controllers/notification.controller'; -import { OAuthController } from 'src/controllers/oauth.controller'; -import { PartnerController } from 'src/controllers/partner.controller'; -import { PersonController } from 'src/controllers/person.controller'; -import { PluginController } from 'src/controllers/plugin.controller'; -import { QueueController } from 'src/controllers/queue.controller'; -import { SearchController } from 'src/controllers/search.controller'; -import { ServerController } from 'src/controllers/server.controller'; -import { SessionController } from 'src/controllers/session.controller'; -import { SharedLinkController } from 'src/controllers/shared-link.controller'; -import { StackController } from 'src/controllers/stack.controller'; -import { SyncController } from 'src/controllers/sync.controller'; -import { SystemConfigController } from 'src/controllers/system-config.controller'; -import { SystemMetadataController } from 'src/controllers/system-metadata.controller'; -import { TagController } from 'src/controllers/tag.controller'; -import { TimelineController } from 'src/controllers/timeline.controller'; -import { TrashController } from 'src/controllers/trash.controller'; -import { UserAdminController } from 'src/controllers/user-admin.controller'; -import { UserController } from 'src/controllers/user.controller'; -import { VideoStreamController } from 'src/controllers/video-stream.controller'; -import { ViewController } from 'src/controllers/view.controller'; -import { WorkflowController } from 'src/controllers/workflow.controller'; +import { ActivityController } from 'src/controllers/activity.controller.js'; +import { AlbumController } from 'src/controllers/album.controller.js'; +import { ApiKeyController } from 'src/controllers/api-key.controller.js'; +import { AppController } from 'src/controllers/app.controller.js'; +import { AssetFilesController } from 'src/controllers/asset-file.controller.js'; +import { AssetMediaController } from 'src/controllers/asset-media.controller.js'; +import { AssetController } from 'src/controllers/asset.controller.js'; +import { AuthAdminController } from 'src/controllers/auth-admin.controller.js'; +import { AuthController } from 'src/controllers/auth.controller.js'; +import { ClusterGroupController } from 'src/controllers/cluster-group.controller.js'; +import { ConfigAdminController } from 'src/controllers/config-admin.controller.js'; +import { ConfigPublicController } from 'src/controllers/config-public.controller.js'; +import { ConfigUserController } from 'src/controllers/config-user.controller.js'; +import { DatabaseBackupController } from 'src/controllers/database-backup.controller.js'; +import { DownloadController } from 'src/controllers/download.controller.js'; +import { DuplicateController } from 'src/controllers/duplicate.controller.js'; +import { FaceController } from 'src/controllers/face.controller.js'; +import { IntegrityAdminController } from 'src/controllers/integrity-admin.controller.js'; +import { JobController } from 'src/controllers/job.controller.js'; +import { LibraryController } from 'src/controllers/library.controller.js'; +import { MaintenanceController } from 'src/controllers/maintenance.controller.js'; +import { MapController } from 'src/controllers/map.controller.js'; +import { MemoryController } from 'src/controllers/memory.controller.js'; +import { NotificationAdminController } from 'src/controllers/notification-admin.controller.js'; +import { NotificationController } from 'src/controllers/notification.controller.js'; +import { OAuthController } from 'src/controllers/oauth.controller.js'; +import { PartnerController } from 'src/controllers/partner.controller.js'; +import { PersonController } from 'src/controllers/person.controller.js'; +import { PluginController } from 'src/controllers/plugin.controller.js'; +import { QueueController } from 'src/controllers/queue.controller.js'; +import { SearchController } from 'src/controllers/search.controller.js'; +import { ServerController } from 'src/controllers/server.controller.js'; +import { SessionController } from 'src/controllers/session.controller.js'; +import { SharedLinkController } from 'src/controllers/shared-link.controller.js'; +import { StackController } from 'src/controllers/stack.controller.js'; +import { SyncController } from 'src/controllers/sync.controller.js'; +import { SystemConfigController } from 'src/controllers/system-config.controller.js'; +import { SystemMetadataController } from 'src/controllers/system-metadata.controller.js'; +import { TagController } from 'src/controllers/tag.controller.js'; +import { TimelineController } from 'src/controllers/timeline.controller.js'; +import { TrashController } from 'src/controllers/trash.controller.js'; +import { UserAdminController } from 'src/controllers/user-admin.controller.js'; +import { UserController } from 'src/controllers/user.controller.js'; +import { VideoStreamController } from 'src/controllers/video-stream.controller.js'; +import { ViewController } from 'src/controllers/view.controller.js'; +import { WorkflowController } from 'src/controllers/workflow.controller.js'; export const controllers = [ ApiKeyController, diff --git a/server/src/controllers/integrity-admin.controller.ts b/server/src/controllers/integrity-admin.controller.ts index a0ef6c107..10bec75a1 100644 --- a/server/src/controllers/integrity-admin.controller.ts +++ b/server/src/controllers/integrity-admin.controller.ts @@ -1,20 +1,20 @@ import { Controller, Delete, Get, HttpCode, HttpStatus, Next, Param, Query, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { NextFunction, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import type { NextFunction, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { IntegrityGetReportDto, IntegrityReportResponseDto, IntegrityReportSummaryResponseDto, IntegrityReportTypeParamDto, -} from 'src/dtos/integrity.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { IntegrityService } from 'src/services/integrity.service'; -import { sendFile } from 'src/utils/file'; -import { UUIDv7ParamDto } from 'src/validation'; +} from 'src/dtos/integrity.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { IntegrityService } from 'src/services/integrity.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { UUIDv7ParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Maintenance) @Controller('admin/integrity') diff --git a/server/src/controllers/job.controller.spec.ts b/server/src/controllers/job.controller.spec.ts index 4f6f9337c..133231e5d 100644 --- a/server/src/controllers/job.controller.spec.ts +++ b/server/src/controllers/job.controller.spec.ts @@ -1,8 +1,8 @@ -import { JobController } from 'src/controllers/job.controller'; -import { JobService } from 'src/services/job.service'; -import { QueueService } from 'src/services/queue.service'; +import { JobController } from 'src/controllers/job.controller.js'; +import { JobService } from 'src/services/job.service.js'; +import { QueueService } from 'src/services/queue.service.js'; import request from 'supertest'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(JobController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/job.controller.ts b/server/src/controllers/job.controller.ts index 783d5a313..870f80f77 100644 --- a/server/src/controllers/job.controller.ts +++ b/server/src/controllers/job.controller.ts @@ -1,14 +1,14 @@ import { Body, Controller, Get, HttpCode, HttpStatus, Param, Post, Put } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { JobCreateDto } from 'src/dtos/job.dto'; -import { QueueResponseLegacyDto, QueuesResponseLegacyDto } from 'src/dtos/queue-legacy.dto'; -import { QueueCommandDto, QueueNameParamDto } from 'src/dtos/queue.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { JobService } from 'src/services/job.service'; -import { QueueService } from 'src/services/queue.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { JobCreateDto } from 'src/dtos/job.dto.js'; +import { QueueResponseLegacyDto, QueuesResponseLegacyDto } from 'src/dtos/queue-legacy.dto.js'; +import { QueueCommandDto, QueueNameParamDto } from 'src/dtos/queue.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { JobService } from 'src/services/job.service.js'; +import { QueueService } from 'src/services/queue.service.js'; @ApiTags(ApiTag.Jobs) @Controller('jobs') diff --git a/server/src/controllers/library.controller.spec.ts b/server/src/controllers/library.controller.spec.ts index 2b606f983..706d03bbd 100644 --- a/server/src/controllers/library.controller.spec.ts +++ b/server/src/controllers/library.controller.spec.ts @@ -1,8 +1,8 @@ -import { LibraryController } from 'src/controllers/library.controller'; -import { LibraryService } from 'src/services/library.service'; +import { LibraryController } from 'src/controllers/library.controller.js'; +import { LibraryService } from 'src/services/library.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(LibraryController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/library.controller.ts b/server/src/controllers/library.controller.ts index 30feef7bc..f0a9fb696 100644 --- a/server/src/controllers/library.controller.ts +++ b/server/src/controllers/library.controller.ts @@ -1,6 +1,6 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { CreateLibraryDto, LibraryResponseDto, @@ -8,11 +8,11 @@ import { UpdateLibraryDto, ValidateLibraryDto, ValidateLibraryResponseDto, -} from 'src/dtos/library.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { LibraryService } from 'src/services/library.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/library.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { LibraryService } from 'src/services/library.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Libraries) @Controller('libraries') diff --git a/server/src/controllers/maintenance.controller.spec.ts b/server/src/controllers/maintenance.controller.spec.ts index 59b00b8ae..19b1b5a1f 100644 --- a/server/src/controllers/maintenance.controller.spec.ts +++ b/server/src/controllers/maintenance.controller.spec.ts @@ -1,9 +1,9 @@ -import { MaintenanceController } from 'src/controllers/maintenance.controller'; -import { MaintenanceAction } from 'src/enum'; -import { MaintenanceService } from 'src/services/maintenance.service'; +import { MaintenanceController } from 'src/controllers/maintenance.controller.js'; +import { MaintenanceAction } from 'src/enum.js'; +import { MaintenanceService } from 'src/services/maintenance.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(MaintenanceController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/maintenance.controller.ts b/server/src/controllers/maintenance.controller.ts index 3d8c6c119..9715f396d 100644 --- a/server/src/controllers/maintenance.controller.ts +++ b/server/src/controllers/maintenance.controller.ts @@ -1,20 +1,20 @@ import { BadRequestException, Body, Controller, Get, Post, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import type { Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { MaintenanceAuthDto, MaintenanceDetectInstallResponseDto, MaintenanceLoginDto, MaintenanceStatusResponseDto, SetMaintenanceModeDto, -} from 'src/dtos/maintenance.dto'; -import { ApiTag, ImmichCookie, MaintenanceAction, Permission } from 'src/enum'; -import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard'; -import { LoginDetails } from 'src/services/auth.service'; -import { MaintenanceService } from 'src/services/maintenance.service'; -import { respondWithCookie } from 'src/utils/response'; +} from 'src/dtos/maintenance.dto.js'; +import { ApiTag, ImmichCookie, MaintenanceAction, Permission } from 'src/enum.js'; +import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard.js'; +import type { LoginDetails } from 'src/services/auth.service.js'; +import { MaintenanceService } from 'src/services/maintenance.service.js'; +import { respondWithCookie } from 'src/utils/response.js'; @ApiTags(ApiTag.Maintenance) @Controller('admin/maintenance') diff --git a/server/src/controllers/map.controller.spec.ts b/server/src/controllers/map.controller.spec.ts index 4c5f16bc7..7e4ea05a5 100644 --- a/server/src/controllers/map.controller.spec.ts +++ b/server/src/controllers/map.controller.spec.ts @@ -1,8 +1,8 @@ -import { MapController } from 'src/controllers/map.controller'; -import { MapService } from 'src/services/map.service'; +import { MapController } from 'src/controllers/map.controller.js'; +import { MapService } from 'src/services/map.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(MapController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/map.controller.ts b/server/src/controllers/map.controller.ts index ae3b56af2..8cb9d4bb6 100644 --- a/server/src/controllers/map.controller.ts +++ b/server/src/controllers/map.controller.ts @@ -1,16 +1,16 @@ import { Controller, Get, HttpCode, HttpStatus, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { MapMarkerDto, MapMarkerResponseDto, MapReverseGeocodeDto, MapReverseGeocodeResponseDto, -} from 'src/dtos/map.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { MapService } from 'src/services/map.service'; +} from 'src/dtos/map.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { MapService } from 'src/services/map.service.js'; @ApiTags(ApiTag.Map) @Controller('map') diff --git a/server/src/controllers/memory.controller.spec.ts b/server/src/controllers/memory.controller.spec.ts index b717ee966..d35b46dcf 100644 --- a/server/src/controllers/memory.controller.spec.ts +++ b/server/src/controllers/memory.controller.spec.ts @@ -1,9 +1,9 @@ -import { MemoryController } from 'src/controllers/memory.controller'; -import { MemoryService } from 'src/services/memory.service'; +import { MemoryController } from 'src/controllers/memory.controller.js'; +import { MemoryService } from 'src/services/memory.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(MemoryController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/memory.controller.ts b/server/src/controllers/memory.controller.ts index 66a301288..236896b9b 100644 --- a/server/src/controllers/memory.controller.ts +++ b/server/src/controllers/memory.controller.ts @@ -1,19 +1,19 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put, Query } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { MemoryCreateDto, MemoryResponseDto, MemorySearchDto, MemoryStatisticsResponseDto, MemoryUpdateDto, -} from 'src/dtos/memory.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { MemoryService } from 'src/services/memory.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/memory.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { MemoryService } from 'src/services/memory.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Memories) @Controller('memories') diff --git a/server/src/controllers/notification-admin.controller.spec.ts b/server/src/controllers/notification-admin.controller.spec.ts index e440f5bcf..99796592b 100644 --- a/server/src/controllers/notification-admin.controller.spec.ts +++ b/server/src/controllers/notification-admin.controller.spec.ts @@ -1,8 +1,8 @@ -import { NotificationAdminController } from 'src/controllers/notification-admin.controller'; -import { NotificationAdminService } from 'src/services/notification-admin.service'; +import { NotificationAdminController } from 'src/controllers/notification-admin.controller.js'; +import { NotificationAdminService } from 'src/services/notification-admin.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(NotificationAdminController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/notification-admin.controller.ts b/server/src/controllers/notification-admin.controller.ts index 7a5585fad..a3f512659 100644 --- a/server/src/controllers/notification-admin.controller.ts +++ b/server/src/controllers/notification-admin.controller.ts @@ -1,19 +1,19 @@ import { Body, Controller, HttpCode, HttpStatus, Param, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfigSmtpDto } from 'src/dtos/config.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfigSmtpDto } from 'src/dtos/config.dto.js'; import { NotificationCreateDto, NotificationDto, TemplateDto, TemplateResponseDto, TestEmailResponseDto, -} from 'src/dtos/notification.dto'; -import { ApiTag } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { EmailTemplate } from 'src/repositories/email.repository'; -import { NotificationAdminService } from 'src/services/notification-admin.service'; +} from 'src/dtos/notification.dto.js'; +import { ApiTag } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { EmailTemplate } from 'src/repositories/email.repository.js'; +import { NotificationAdminService } from 'src/services/notification-admin.service.js'; @ApiTags(ApiTag.NotificationsAdmin) @Controller('admin/notifications') diff --git a/server/src/controllers/notification.controller.spec.ts b/server/src/controllers/notification.controller.spec.ts index f65537cbb..ebd4e01ba 100644 --- a/server/src/controllers/notification.controller.spec.ts +++ b/server/src/controllers/notification.controller.spec.ts @@ -1,9 +1,9 @@ -import { NotificationController } from 'src/controllers/notification.controller'; -import { NotificationService } from 'src/services/notification.service'; +import { NotificationController } from 'src/controllers/notification.controller.js'; +import { NotificationService } from 'src/services/notification.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(NotificationController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/notification.controller.ts b/server/src/controllers/notification.controller.ts index 0a28e1bda..053ef70e4 100644 --- a/server/src/controllers/notification.controller.ts +++ b/server/src/controllers/notification.controller.ts @@ -1,18 +1,18 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { NotificationDeleteAllDto, NotificationDto, NotificationSearchDto, NotificationUpdateAllDto, NotificationUpdateDto, -} from 'src/dtos/notification.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { NotificationService } from 'src/services/notification.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/notification.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { NotificationService } from 'src/services/notification.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Notifications) @Controller('notifications') diff --git a/server/src/controllers/oauth.controller.spec.ts b/server/src/controllers/oauth.controller.spec.ts index a8aa33a4f..b03aca443 100644 --- a/server/src/controllers/oauth.controller.spec.ts +++ b/server/src/controllers/oauth.controller.spec.ts @@ -1,8 +1,8 @@ -import { OAuthController } from 'src/controllers/oauth.controller'; -import { AuthService } from 'src/services/auth.service'; +import { OAuthController } from 'src/controllers/oauth.controller.js'; +import { AuthService } from 'src/services/auth.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(OAuthController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/oauth.controller.ts b/server/src/controllers/oauth.controller.ts index 54f5c1f10..2375f5df8 100644 --- a/server/src/controllers/oauth.controller.ts +++ b/server/src/controllers/oauth.controller.ts @@ -1,20 +1,20 @@ import { Body, Controller, Get, HttpCode, HttpStatus, Post, Redirect, Req, Res } from '@nestjs/common'; import { ApiConsumes, ApiTags } from '@nestjs/swagger'; -import { Request, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import type { Request, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { - AuthDto, + type AuthDto, LoginResponseDto, OAuthAuthorizeResponseDto, OAuthBackchannelLogoutDto, OAuthCallbackDto, OAuthConfigDto, -} from 'src/dtos/auth.dto'; -import { UserAdminResponseDto } from 'src/dtos/user.dto'; -import { ApiTag, AuthType, ImmichCookie } from 'src/enum'; -import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard'; -import { AuthService, LoginDetails } from 'src/services/auth.service'; -import { respondWithCookie } from 'src/utils/response'; +} from 'src/dtos/auth.dto.js'; +import { UserAdminResponseDto } from 'src/dtos/user.dto.js'; +import { ApiTag, AuthType, ImmichCookie } from 'src/enum.js'; +import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard.js'; +import { AuthService, type LoginDetails } from 'src/services/auth.service.js'; +import { respondWithCookie } from 'src/utils/response.js'; @ApiTags(ApiTag.Authentication) @Controller('oauth') diff --git a/server/src/controllers/partner.controller.spec.ts b/server/src/controllers/partner.controller.spec.ts index 38cb717be..8e0b7b19d 100644 --- a/server/src/controllers/partner.controller.spec.ts +++ b/server/src/controllers/partner.controller.spec.ts @@ -1,9 +1,9 @@ -import { PartnerController } from 'src/controllers/partner.controller'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PartnerService } from 'src/services/partner.service'; +import { PartnerController } from 'src/controllers/partner.controller.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PartnerService } from 'src/services/partner.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(PartnerController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/partner.controller.ts b/server/src/controllers/partner.controller.ts index 951aee7e0..ffef961ec 100644 --- a/server/src/controllers/partner.controller.ts +++ b/server/src/controllers/partner.controller.ts @@ -1,12 +1,12 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Post, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { PartnerCreateDto, PartnerResponseDto, PartnerSearchDto, PartnerUpdateDto } from 'src/dtos/partner.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { PartnerService } from 'src/services/partner.service'; -import { UUIDParamDto } from 'src/validation'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { PartnerCreateDto, PartnerResponseDto, PartnerSearchDto, PartnerUpdateDto } from 'src/dtos/partner.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { PartnerService } from 'src/services/partner.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Partners) @Controller('partners') diff --git a/server/src/controllers/person.controller.spec.ts b/server/src/controllers/person.controller.spec.ts index 0d3d3eea4..986f4f11c 100644 --- a/server/src/controllers/person.controller.spec.ts +++ b/server/src/controllers/person.controller.spec.ts @@ -1,10 +1,10 @@ -import { PersonController } from 'src/controllers/person.controller'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PersonService } from 'src/services/person.service'; +import { PersonController } from 'src/controllers/person.controller.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PersonService } from 'src/services/person.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory } from 'test/small.factory'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory } from 'test/small.factory.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(PersonController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/person.controller.ts b/server/src/controllers/person.controller.ts index 665071726..3878747f1 100644 --- a/server/src/controllers/person.controller.ts +++ b/server/src/controllers/person.controller.ts @@ -14,10 +14,10 @@ import { Res, } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { NextFunction, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import type { NextFunction, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { AssetFaceUpdateDto, MergePersonDto, @@ -28,13 +28,13 @@ import { PersonSearchDto, PersonStatisticsResponseDto, PersonUpdateDto, -} from 'src/dtos/person.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PersonService } from 'src/services/person.service'; -import { sendFile } from 'src/utils/file'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/person.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PersonService } from 'src/services/person.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.People) @Controller('people') diff --git a/server/src/controllers/plugin.controller.spec.ts b/server/src/controllers/plugin.controller.spec.ts index bc42a4f75..1f5b63567 100644 --- a/server/src/controllers/plugin.controller.spec.ts +++ b/server/src/controllers/plugin.controller.spec.ts @@ -1,9 +1,9 @@ -import { PluginController } from 'src/controllers/plugin.controller'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PluginService } from 'src/services/plugin.service'; +import { PluginController } from 'src/controllers/plugin.controller.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PluginService } from 'src/services/plugin.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(PluginController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/plugin.controller.ts b/server/src/controllers/plugin.controller.ts index 10eb4ba51..365f36326 100644 --- a/server/src/controllers/plugin.controller.ts +++ b/server/src/controllers/plugin.controller.ts @@ -1,17 +1,17 @@ import { Controller, Get, Param, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { PluginMethodResponseDto, PluginMethodSearchDto, PluginResponseDto, PluginSearchDto, PluginTemplateResponseDto, -} from 'src/dtos/plugin.dto'; -import { Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { PluginService } from 'src/services/plugin.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/plugin.dto.js'; +import { Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { PluginService } from 'src/services/plugin.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags('Plugins') @Controller('plugins') diff --git a/server/src/controllers/queue.controller.ts b/server/src/controllers/queue.controller.ts index 1d8d918c5..ff0293c50 100644 --- a/server/src/controllers/queue.controller.ts +++ b/server/src/controllers/queue.controller.ts @@ -1,7 +1,7 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { QueueDeleteDto, QueueJobResponseDto, @@ -9,10 +9,10 @@ import { QueueNameParamDto, QueueResponseDto, QueueUpdateDto, -} from 'src/dtos/queue.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { QueueService } from 'src/services/queue.service'; +} from 'src/dtos/queue.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { QueueService } from 'src/services/queue.service.js'; @ApiTags(ApiTag.Queues) @Controller('queues') diff --git a/server/src/controllers/search.controller.spec.ts b/server/src/controllers/search.controller.spec.ts index 6754be8af..a94d25555 100644 --- a/server/src/controllers/search.controller.spec.ts +++ b/server/src/controllers/search.controller.spec.ts @@ -1,8 +1,8 @@ -import { SearchController } from 'src/controllers/search.controller'; -import { SearchService } from 'src/services/search.service'; +import { SearchController } from 'src/controllers/search.controller.js'; +import { SearchService } from 'src/services/search.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(SearchController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/search.controller.ts b/server/src/controllers/search.controller.ts index 2dea0cf7a..766874d2c 100644 --- a/server/src/controllers/search.controller.ts +++ b/server/src/controllers/search.controller.ts @@ -1,9 +1,9 @@ import { Body, Controller, Get, HttpCode, HttpStatus, Post, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AssetResponseDto } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { PersonResponseDto } from 'src/dtos/person.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AssetResponseDto } from 'src/dtos/asset-response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { PersonResponseDto } from 'src/dtos/person.dto.js'; import { LargeAssetSearchDto, MetadataSearchDto, @@ -17,10 +17,10 @@ import { SearchSuggestionRequestDto, SmartSearchDto, StatisticsSearchDto, -} from 'src/dtos/search.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { SearchService } from 'src/services/search.service'; +} from 'src/dtos/search.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { SearchService } from 'src/services/search.service.js'; @ApiTags(ApiTag.Search) @Controller('search') diff --git a/server/src/controllers/server.controller.ts b/server/src/controllers/server.controller.ts index ef9f408e8..2a07a4752 100644 --- a/server/src/controllers/server.controller.ts +++ b/server/src/controllers/server.controller.ts @@ -1,7 +1,7 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Put } from '@nestjs/common'; import { ApiNotFoundResponse, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto.js'; import { ServerAboutResponseDto, ServerApkLinksDto, @@ -13,13 +13,13 @@ import { ServerStorageResponseDto, ServerVersionHistoryResponseDto, ServerVersionResponseDto, -} from 'src/dtos/server.dto'; -import { VersionCheckStateResponseDto } from 'src/dtos/system-metadata.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { ServerService } from 'src/services/server.service'; -import { SystemMetadataService } from 'src/services/system-metadata.service'; -import { VersionService } from 'src/services/version.service'; +} from 'src/dtos/server.dto.js'; +import { VersionCheckStateResponseDto } from 'src/dtos/system-metadata.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { ServerService } from 'src/services/server.service.js'; +import { SystemMetadataService } from 'src/services/system-metadata.service.js'; +import { VersionService } from 'src/services/version.service.js'; @ApiTags(ApiTag.Server) @Controller('server') diff --git a/server/src/controllers/session.controller.ts b/server/src/controllers/session.controller.ts index db212dbe9..bc4a00126 100644 --- a/server/src/controllers/session.controller.ts +++ b/server/src/controllers/session.controller.ts @@ -1,12 +1,17 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SessionCreateDto, SessionCreateResponseDto, SessionResponseDto, SessionUpdateDto } from 'src/dtos/session.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { SessionService } from 'src/services/session.service'; -import { UUIDParamDto } from 'src/validation'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { + SessionCreateDto, + SessionCreateResponseDto, + SessionResponseDto, + SessionUpdateDto, +} from 'src/dtos/session.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { SessionService } from 'src/services/session.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Sessions) @Controller('sessions') diff --git a/server/src/controllers/shared-link.controller.spec.ts b/server/src/controllers/shared-link.controller.spec.ts index ee5c3c69c..84711811a 100644 --- a/server/src/controllers/shared-link.controller.spec.ts +++ b/server/src/controllers/shared-link.controller.spec.ts @@ -1,10 +1,10 @@ -import { SharedLinkController } from 'src/controllers/shared-link.controller'; -import { Permission, SharedLinkType } from 'src/enum'; -import { SharedLinkService } from 'src/services/shared-link.service'; +import { SharedLinkController } from 'src/controllers/shared-link.controller.js'; +import { Permission, SharedLinkType } from 'src/enum.js'; +import { SharedLinkService } from 'src/services/shared-link.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory, newUuid } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory, newUuid } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(SharedLinkController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/shared-link.controller.ts b/server/src/controllers/shared-link.controller.ts index b3a8dd9f5..ee59042fc 100644 --- a/server/src/controllers/shared-link.controller.ts +++ b/server/src/controllers/shared-link.controller.ts @@ -14,25 +14,25 @@ import { Res, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Request, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AssetIdsResponseDto } from 'src/dtos/asset-ids.response.dto'; -import { AssetIdsDto } from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import type { Request, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AssetIdsResponseDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AssetIdsDto } from 'src/dtos/asset.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { SharedLinkCreateDto, SharedLinkEditDto, SharedLinkLoginDto, SharedLinkResponseDto, SharedLinkSearchDto, -} from 'src/dtos/shared-link.dto'; -import { ApiTag, ImmichCookie, Permission } from 'src/enum'; -import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { LoginDetails } from 'src/services/auth.service'; -import { SharedLinkService } from 'src/services/shared-link.service'; -import { respondWithCookie } from 'src/utils/response'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/shared-link.dto.js'; +import { ApiTag, ImmichCookie, Permission } from 'src/enum.js'; +import { Auth, Authenticated, GetLoginDetails } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { LoginDetails } from 'src/services/auth.service.js'; +import { SharedLinkService } from 'src/services/shared-link.service.js'; +import { respondWithCookie } from 'src/utils/response.js'; +import { UUIDParamDto } from 'src/validation.js'; const getAuthTokens = (cookies: Record | undefined) => { return cookies?.[ImmichCookie.SharedLinkToken]?.split(',') || []; diff --git a/server/src/controllers/stack.controller.spec.ts b/server/src/controllers/stack.controller.spec.ts index bc9c87da1..46fbbb57a 100644 --- a/server/src/controllers/stack.controller.spec.ts +++ b/server/src/controllers/stack.controller.spec.ts @@ -1,9 +1,9 @@ -import { StackController } from 'src/controllers/stack.controller'; -import { StackService } from 'src/services/stack.service'; +import { StackController } from 'src/controllers/stack.controller.js'; +import { StackService } from 'src/services/stack.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(StackController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/stack.controller.ts b/server/src/controllers/stack.controller.ts index d3d120971..55bbdac8b 100644 --- a/server/src/controllers/stack.controller.ts +++ b/server/src/controllers/stack.controller.ts @@ -1,13 +1,13 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put, Query } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { StackCreateDto, StackResponseDto, StackSearchDto, StackUpdateDto } from 'src/dtos/stack.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { StackService } from 'src/services/stack.service'; -import { UUIDAssetIDParamDto, UUIDParamDto } from 'src/validation'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { StackCreateDto, StackResponseDto, StackSearchDto, StackUpdateDto } from 'src/dtos/stack.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { StackService } from 'src/services/stack.service.js'; +import { UUIDAssetIDParamDto, UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Stacks) @Controller('stacks') diff --git a/server/src/controllers/sync.controller.spec.ts b/server/src/controllers/sync.controller.spec.ts index 1f2c0f137..191877980 100644 --- a/server/src/controllers/sync.controller.spec.ts +++ b/server/src/controllers/sync.controller.spec.ts @@ -1,9 +1,9 @@ -import { SyncController } from 'src/controllers/sync.controller'; -import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter'; -import { SyncService } from 'src/services/sync.service'; +import { SyncController } from 'src/controllers/sync.controller.js'; +import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter.js'; +import { SyncService } from 'src/services/sync.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(SyncController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/sync.controller.ts b/server/src/controllers/sync.controller.ts index b696db821..670104f52 100644 --- a/server/src/controllers/sync.controller.ts +++ b/server/src/controllers/sync.controller.ts @@ -1,13 +1,13 @@ import { Body, Controller, Delete, Get, Header, HttpCode, HttpStatus, Post, Req, Res } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Request, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SyncAckDeleteDto, SyncAckDto, SyncAckSetDto, SyncStreamDto } from 'src/dtos/sync.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter'; -import { SyncService } from 'src/services/sync.service'; +import type { Request, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { SyncAckDeleteDto, SyncAckDto, SyncAckSetDto, SyncStreamDto } from 'src/dtos/sync.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter.js'; +import { SyncService } from 'src/services/sync.service.js'; @ApiTags(ApiTag.Sync) @Controller('sync') diff --git a/server/src/controllers/system-config.controller.spec.ts b/server/src/controllers/system-config.controller.spec.ts index 0ae8741c6..72f6bdb38 100644 --- a/server/src/controllers/system-config.controller.spec.ts +++ b/server/src/controllers/system-config.controller.spec.ts @@ -1,15 +1,15 @@ -import _ from 'lodash'; -import { SystemConfigController } from 'src/controllers/system-config.controller'; -import { defaults } from 'src/dtos/config.dto'; -import { StorageTemplateService } from 'src/services/storage-template.service'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { cloneDeep } from 'lodash-es'; +import { SystemConfigController } from 'src/controllers/system-config.controller.js'; +import { defaults } from 'src/dtos/config.dto.js'; +import { StorageTemplateService } from 'src/services/storage-template.service.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; /** Returns a full config that passes Zod validation (required URLs and min lengths). */ function validConfig() { - const config = _.cloneDeep(defaults) as typeof defaults & { + const config = cloneDeep(defaults) as typeof defaults & { oauth: { mobileRedirectUri: string }; notifications: { smtp: { from: string; transport: { host: string } } }; server: { externalDomain: string }; diff --git a/server/src/controllers/system-config.controller.ts b/server/src/controllers/system-config.controller.ts index b7c5f0099..d10eb6c11 100644 --- a/server/src/controllers/system-config.controller.ts +++ b/server/src/controllers/system-config.controller.ts @@ -1,11 +1,11 @@ import { Body, Controller, Get, Put } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AdminConfigDto, ConfigTemplateStorageOptionDto } from 'src/dtos/config.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { StorageTemplateService } from 'src/services/storage-template.service'; -import { SystemConfigService } from 'src/services/system-config.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AdminConfigDto, ConfigTemplateStorageOptionDto } from 'src/dtos/config.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { StorageTemplateService } from 'src/services/storage-template.service.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; @ApiTags(ApiTag.SystemConfig) @Controller('system-config') diff --git a/server/src/controllers/system-metadata.controller.spec.ts b/server/src/controllers/system-metadata.controller.spec.ts index 0f5fba08a..0d021d0f0 100644 --- a/server/src/controllers/system-metadata.controller.spec.ts +++ b/server/src/controllers/system-metadata.controller.spec.ts @@ -1,7 +1,7 @@ -import { SystemMetadataController } from 'src/controllers/system-metadata.controller'; -import { SystemMetadataService } from 'src/services/system-metadata.service'; +import { SystemMetadataController } from 'src/controllers/system-metadata.controller.js'; +import { SystemMetadataService } from 'src/services/system-metadata.service.js'; import request from 'supertest'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(SystemMetadataController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/system-metadata.controller.ts b/server/src/controllers/system-metadata.controller.ts index 8f73def3f..14f2632f8 100644 --- a/server/src/controllers/system-metadata.controller.ts +++ b/server/src/controllers/system-metadata.controller.ts @@ -1,14 +1,14 @@ import { Body, Controller, Get, HttpCode, HttpStatus, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; import { AdminOnboardingUpdateDto, ReverseGeocodingStateResponseDto, VersionCheckStateResponseDto, -} from 'src/dtos/system-metadata.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Authenticated } from 'src/middleware/auth.guard'; -import { SystemMetadataService } from 'src/services/system-metadata.service'; +} from 'src/dtos/system-metadata.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Authenticated } from 'src/middleware/auth.guard.js'; +import { SystemMetadataService } from 'src/services/system-metadata.service.js'; @ApiTags(ApiTag.SystemMetadata) @Controller('system-metadata') diff --git a/server/src/controllers/tag.controller.spec.ts b/server/src/controllers/tag.controller.spec.ts index 64d62ed52..cfcda8e99 100644 --- a/server/src/controllers/tag.controller.spec.ts +++ b/server/src/controllers/tag.controller.spec.ts @@ -1,9 +1,9 @@ -import { TagController } from 'src/controllers/tag.controller'; -import { TagService } from 'src/services/tag.service'; +import { TagController } from 'src/controllers/tag.controller.js'; +import { TagService } from 'src/services/tag.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(TagController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/tag.controller.ts b/server/src/controllers/tag.controller.ts index aeab5f44b..b56375c98 100644 --- a/server/src/controllers/tag.controller.ts +++ b/server/src/controllers/tag.controller.ts @@ -1,8 +1,8 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { TagBulkAssetsDto, TagBulkAssetsResponseDto, @@ -10,11 +10,11 @@ import { TagResponseDto, TagUpdateDto, TagUpsertDto, -} from 'src/dtos/tag.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { TagService } from 'src/services/tag.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/tag.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { TagService } from 'src/services/tag.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Tags) @Controller('tags') diff --git a/server/src/controllers/timeline.controller.spec.ts b/server/src/controllers/timeline.controller.spec.ts index 288945ee9..18ff964d4 100644 --- a/server/src/controllers/timeline.controller.spec.ts +++ b/server/src/controllers/timeline.controller.spec.ts @@ -1,8 +1,8 @@ -import { TimelineController } from 'src/controllers/timeline.controller'; -import { TimelineService } from 'src/services/timeline.service'; +import { TimelineController } from 'src/controllers/timeline.controller.js'; +import { TimelineService } from 'src/services/timeline.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(TimelineController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/timeline.controller.ts b/server/src/controllers/timeline.controller.ts index f1789a79e..a3c140275 100644 --- a/server/src/controllers/timeline.controller.ts +++ b/server/src/controllers/timeline.controller.ts @@ -1,11 +1,11 @@ import { Controller, Get, Header, Query } from '@nestjs/common'; import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { TimeBucketAssetDto, TimeBucketAssetResponseDto, TimeBucketDto } from 'src/dtos/time-bucket.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { TimelineService } from 'src/services/timeline.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { TimeBucketAssetDto, TimeBucketAssetResponseDto, TimeBucketDto } from 'src/dtos/time-bucket.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { TimelineService } from 'src/services/timeline.service.js'; @ApiTags(ApiTag.Timeline) @Controller('timeline') diff --git a/server/src/controllers/trash.controller.spec.ts b/server/src/controllers/trash.controller.spec.ts index 1b923692b..dfbec3aae 100644 --- a/server/src/controllers/trash.controller.spec.ts +++ b/server/src/controllers/trash.controller.spec.ts @@ -1,8 +1,8 @@ -import { TrashController } from 'src/controllers/trash.controller'; -import { TrashService } from 'src/services/trash.service'; +import { TrashController } from 'src/controllers/trash.controller.js'; +import { TrashService } from 'src/services/trash.service.js'; import request from 'supertest'; -import { factory } from 'test/small.factory'; -import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { factory } from 'test/small.factory.js'; +import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(TrashController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/trash.controller.ts b/server/src/controllers/trash.controller.ts index ec37c63ec..e2c97aa6e 100644 --- a/server/src/controllers/trash.controller.ts +++ b/server/src/controllers/trash.controller.ts @@ -1,12 +1,12 @@ import { Body, Controller, HttpCode, HttpStatus, Post } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { TrashResponseDto } from 'src/dtos/trash.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { TrashService } from 'src/services/trash.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { TrashResponseDto } from 'src/dtos/trash.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { TrashService } from 'src/services/trash.service.js'; @ApiTags(ApiTag.Trash) @Controller('trash') diff --git a/server/src/controllers/user-admin.controller.spec.ts b/server/src/controllers/user-admin.controller.spec.ts index 3fa423f9b..721e4bb08 100644 --- a/server/src/controllers/user-admin.controller.spec.ts +++ b/server/src/controllers/user-admin.controller.spec.ts @@ -1,11 +1,11 @@ -import { UserAdminController } from 'src/controllers/user-admin.controller'; -import { UserAdminCreateDto } from 'src/dtos/user.dto'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { UserAdminService } from 'src/services/user-admin.service'; +import { UserAdminController } from 'src/controllers/user-admin.controller.js'; +import { UserAdminCreateDto } from 'src/dtos/user.dto.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { UserAdminService } from 'src/services/user-admin.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { factory } from 'test/small.factory'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { factory } from 'test/small.factory.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(UserAdminController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/user-admin.controller.ts b/server/src/controllers/user-admin.controller.ts index 18798c00c..867dd22a1 100644 --- a/server/src/controllers/user-admin.controller.ts +++ b/server/src/controllers/user-admin.controller.ts @@ -1,22 +1,22 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put, Query } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AssetStatsDto, AssetStatsResponseDto } from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto'; -import { SessionResponseDto } from 'src/dtos/session.dto'; -import { UserPreferencesResponseDto, UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AssetStatsDto, AssetStatsResponseDto } from 'src/dtos/asset.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto.js'; +import { SessionResponseDto } from 'src/dtos/session.dto.js'; +import { UserPreferencesResponseDto, UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto.js'; import { UserAdminCreateDto, UserAdminDeleteDto, UserAdminResponseDto, UserAdminSearchDto, UserAdminUpdateDto, -} from 'src/dtos/user.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { UserAdminService } from 'src/services/user-admin.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/user.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { UserAdminService } from 'src/services/user-admin.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.UsersAdmin) @Controller('admin/users') diff --git a/server/src/controllers/user.controller.spec.ts b/server/src/controllers/user.controller.spec.ts index d15eda31d..33ec36cf2 100644 --- a/server/src/controllers/user.controller.spec.ts +++ b/server/src/controllers/user.controller.spec.ts @@ -1,9 +1,9 @@ -import { UserController } from 'src/controllers/user.controller'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { UserService } from 'src/services/user.service'; +import { UserController } from 'src/controllers/user.controller.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { UserService } from 'src/services/user.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(UserController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/user.controller.ts b/server/src/controllers/user.controller.ts index 4e93f3c4b..d26034aef 100644 --- a/server/src/controllers/user.controller.ts +++ b/server/src/controllers/user.controller.ts @@ -16,22 +16,22 @@ import { UseInterceptors, } from '@nestjs/common'; import { ApiBody, ApiConsumes, ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { NextFunction, Response } from 'express'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto'; -import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto'; -import { OnboardingDto, OnboardingResponseDto } from 'src/dtos/onboarding.dto'; -import { UserPreferencesResponseDto, UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto'; -import { CreateProfileImageDto, CreateProfileImageResponseDto } from 'src/dtos/user-profile.dto'; -import { UserAdminResponseDto, UserResponseDto, UserUpdateMeDto } from 'src/dtos/user.dto'; -import { ApiTag, Permission, RouteKey } from 'src/enum'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { UserService } from 'src/services/user.service'; -import { sendFile } from 'src/utils/file'; -import { UUIDParamDto } from 'src/validation'; +import type { NextFunction, Response } from 'express'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto.js'; +import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto.js'; +import { OnboardingDto, OnboardingResponseDto } from 'src/dtos/onboarding.dto.js'; +import { UserPreferencesResponseDto, UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto.js'; +import { CreateProfileImageDto, CreateProfileImageResponseDto } from 'src/dtos/user-profile.dto.js'; +import { UserAdminResponseDto, UserResponseDto, UserUpdateMeDto } from 'src/dtos/user.dto.js'; +import { ApiTag, Permission, RouteKey } from 'src/enum.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { UserService } from 'src/services/user.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Users) @Controller(RouteKey.User) diff --git a/server/src/controllers/video-stream.controller.ts b/server/src/controllers/video-stream.controller.ts index ed99f6729..c4066044f 100644 --- a/server/src/controllers/video-stream.controller.ts +++ b/server/src/controllers/video-stream.controller.ts @@ -1,23 +1,23 @@ import { Controller, Delete, Get, Header, Headers, HttpCode, HttpStatus, Next, Param, Res } from '@nestjs/common'; import { ApiProduces, ApiTags } from '@nestjs/swagger'; -import { NextFunction, Response } from 'express'; +import type { NextFunction, Response } from 'express'; import { ZodValidationException } from 'nestjs-zod'; -import { HLS_PLAYLIST_CONTENT_TYPE } from 'src/constants'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { HLS_PLAYLIST_CONTENT_TYPE } from 'src/constants.js'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { HlsPlaylistHeaderDto, HlsSegmentHeaderDto, HlsSegmentParamDto, HlsSessionParamDto, HlsVariantParamDto, -} from 'src/dtos/streaming.dto'; -import { ApiTag, ImmichHeader, Permission, RouteKey } from 'src/enum'; -import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { HlsService } from 'src/services/hls.service'; -import { sendFile } from 'src/utils/file'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/streaming.dto.js'; +import { ApiTag, ImmichHeader, Permission, RouteKey } from 'src/enum.js'; +import { Auth, Authenticated, FileResponse } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { HlsService } from 'src/services/hls.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags(ApiTag.Assets) @Controller(RouteKey.Asset) diff --git a/server/src/controllers/view.controller.ts b/server/src/controllers/view.controller.ts index b07d83fe5..292c3691a 100644 --- a/server/src/controllers/view.controller.ts +++ b/server/src/controllers/view.controller.ts @@ -1,11 +1,11 @@ import { Controller, Get, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AssetResponseDto } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiTag, Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { ViewService } from 'src/services/view.service'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import { AssetResponseDto } from 'src/dtos/asset-response.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiTag, Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { ViewService } from 'src/services/view.service.js'; @ApiTags(ApiTag.Views) @Controller('view') diff --git a/server/src/controllers/workflow.controller.spec.ts b/server/src/controllers/workflow.controller.spec.ts index 0b9166767..e5ab30198 100644 --- a/server/src/controllers/workflow.controller.spec.ts +++ b/server/src/controllers/workflow.controller.spec.ts @@ -1,10 +1,10 @@ import { WorkflowTrigger } from '@immich/plugin-sdk'; -import { WorkflowController } from 'src/controllers/workflow.controller'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { WorkflowService } from 'src/services/workflow.service'; +import { WorkflowController } from 'src/controllers/workflow.controller.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { WorkflowService } from 'src/services/workflow.service.js'; import request from 'supertest'; -import { errorDto } from 'test/medium/responses'; -import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils'; +import { errorDto } from 'test/medium/responses.js'; +import { automock, ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js'; describe(WorkflowController.name, () => { let ctx: ControllerContext; diff --git a/server/src/controllers/workflow.controller.ts b/server/src/controllers/workflow.controller.ts index b0d025763..d79b07440 100644 --- a/server/src/controllers/workflow.controller.ts +++ b/server/src/controllers/workflow.controller.ts @@ -1,7 +1,7 @@ import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post, Put, Query } from '@nestjs/common'; import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger'; -import { Endpoint, HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Endpoint, HistoryBuilder } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { WorkflowCreateDto, WorkflowGetLogsDto, @@ -11,11 +11,11 @@ import { WorkflowShareResponseDto, WorkflowTriggerResponseDto, WorkflowUpdateDto, -} from 'src/dtos/workflow.dto'; -import { Permission } from 'src/enum'; -import { Auth, Authenticated } from 'src/middleware/auth.guard'; -import { WorkflowService } from 'src/services/workflow.service'; -import { UUIDParamDto } from 'src/validation'; +} from 'src/dtos/workflow.dto.js'; +import { Permission } from 'src/enum.js'; +import { Auth, Authenticated } from 'src/middleware/auth.guard.js'; +import { WorkflowService } from 'src/services/workflow.service.js'; +import { UUIDParamDto } from 'src/validation.js'; @ApiTags('Workflows') @Controller('workflows') diff --git a/server/src/cores/storage.core.spec.ts b/server/src/cores/storage.core.spec.ts index 08e410bbe..12ce60d0c 100644 --- a/server/src/cores/storage.core.spec.ts +++ b/server/src/cores/storage.core.spec.ts @@ -1,4 +1,4 @@ -import { StorageCore } from 'src/cores/storage.core'; +import { StorageCore } from 'src/cores/storage.core.js'; import { vitest } from 'vitest'; vitest.mock('src/constants', () => ({ diff --git a/server/src/cores/storage.core.ts b/server/src/cores/storage.core.ts index 46124d96a..405e56416 100644 --- a/server/src/cores/storage.core.ts +++ b/server/src/cores/storage.core.ts @@ -1,5 +1,5 @@ import { dirname, join, resolve } from 'node:path'; -import { StorageAsset } from 'src/database'; +import { StorageAsset } from 'src/database.js'; import { AssetFileType, AssetPathType, @@ -9,18 +9,18 @@ import { RawExtractedFormat, StorageFolder, UserPathType, -} from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MoveRepository } from 'src/repositories/move.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { VideoInterfaces } from 'src/types'; -import { getAssetFile } from 'src/utils/asset.util'; -import { getConfig } from 'src/utils/config'; +} from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MoveRepository } from 'src/repositories/move.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import type { VideoInterfaces } from 'src/types.js'; +import { getAssetFile } from 'src/utils/asset.util.js'; +import { getConfig } from 'src/utils/config.js'; export interface MoveRequest { entityId: string; diff --git a/server/src/database.ts b/server/src/database.ts index 2d04b1382..5b207c7b4 100644 --- a/server/src/database.ts +++ b/server/src/database.ts @@ -1,5 +1,5 @@ import { Selectable, ShallowDehydrateObject } from 'kysely'; -import { MapAsset } from 'src/dtos/asset-response.dto'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; import { AlbumUserRole, AssetFileType, @@ -12,12 +12,12 @@ import { SourceType, UserAvatarColor, UserStatus, -} from 'src/enum'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { PluginTable } from 'src/schema/tables/plugin.table'; -import { UserMetadataItem } from 'src/types'; +} from 'src/enum.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { PluginTable } from 'src/schema/tables/plugin.table.js'; +import type { UserMetadataItem } from 'src/types.js'; export type AuthUser = { id: string; diff --git a/server/src/decorators.ts b/server/src/decorators.ts index b8556be41..6a832ad38 100644 --- a/server/src/decorators.ts +++ b/server/src/decorators.ts @@ -1,11 +1,11 @@ import { BeforeUpdateTrigger, Column, ColumnOptions } from '@immich/sql-tools'; import { SetMetadata, applyDecorators } from '@nestjs/common'; import { ApiOperation, ApiOperationOptions, ApiTags } from '@nestjs/swagger'; -import _ from 'lodash'; -import { ApiCustomExtension, ApiTag, ImmichWorker, JobName, MetadataKey, QueueName } from 'src/enum'; -import { EmitEvent } from 'src/repositories/event.repository'; -import { immich_uuid_v7, updated_at } from 'src/schema/functions'; -import { setUnion } from 'src/utils/set'; +import { chunk, flatten } from 'lodash-es'; +import { ApiCustomExtension, ApiTag, ImmichWorker, JobName, MetadataKey, QueueName } from 'src/enum.js'; +import { EmitEvent } from 'src/repositories/event.repository.js'; +import { immich_uuid_v7, updated_at } from 'src/schema/functions.js'; +import { setUnion } from 'src/utils/set.js'; const GeneratedUuidV7Column = (options: Omit = {}) => Column({ ...options, type: 'uuid', nullable: false, default: () => `${immich_uuid_v7.name}()` }); @@ -55,7 +55,7 @@ function chunks(collection: Array | Set, size: number): Array> } return result; } - return _.chunk(collection, size); + return chunk(collection, size); } /** @@ -100,7 +100,7 @@ export function Chunked( } export function ChunkedArray(options?: { paramIndex?: number; chunkSize?: number }): MethodDecorator { - return Chunked({ ...options, mergeFn: _.flatten }); + return Chunked({ ...options, mergeFn: flatten }); } export function ChunkedSet(options?: { paramIndex?: number; chunkSize?: number }): MethodDecorator { diff --git a/server/src/dtos/activity.dto.ts b/server/src/dtos/activity.dto.ts index facd4ed25..f7eb63e09 100644 --- a/server/src/dtos/activity.dto.ts +++ b/server/src/dtos/activity.dto.ts @@ -1,7 +1,7 @@ import { createZodDto } from 'nestjs-zod'; -import { Activity } from 'src/database'; -import { mapUser, UserResponseSchema } from 'src/dtos/user.dto'; -import { isoDatetimeToDate } from 'src/validation'; +import { Activity } from 'src/database.js'; +import { mapUser, UserResponseSchema } from 'src/dtos/user.dto.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; export enum ReactionLevel { diff --git a/server/src/dtos/album-response.dto.spec.ts b/server/src/dtos/album-response.dto.spec.ts index c03662288..12b49601e 100644 --- a/server/src/dtos/album-response.dto.spec.ts +++ b/server/src/dtos/album-response.dto.spec.ts @@ -1,6 +1,6 @@ -import { mapAlbum } from 'src/dtos/album.dto'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { getForAlbum } from 'test/mappers'; +import { mapAlbum } from 'src/dtos/album.dto.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { getForAlbum } from 'test/mappers.js'; describe('mapAlbum', () => { it('should set start and end dates', () => { diff --git a/server/src/dtos/album.dto.ts b/server/src/dtos/album.dto.ts index f6a1bdb0d..16024c44f 100644 --- a/server/src/dtos/album.dto.ts +++ b/server/src/dtos/album.dto.ts @@ -1,14 +1,14 @@ import { ShallowDehydrateObject } from 'kysely'; import { createZodDto } from 'nestjs-zod'; -import { AlbumUser, AuthSharedLink } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { BulkIdErrorReasonSchema } from 'src/dtos/asset-ids.response.dto'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { UserResponseSchema, mapUser } from 'src/dtos/user.dto'; -import { AlbumUserRole, AlbumUserRoleSchema, AssetOrder, AssetOrderSchema } from 'src/enum'; -import { MaybeDehydrated } from 'src/types'; -import { asDateTimeString } from 'src/utils/date'; -import { stringToBool } from 'src/validation'; +import { AlbumUser, AuthSharedLink } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { BulkIdErrorReasonSchema } from 'src/dtos/asset-ids.response.dto.js'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { UserResponseSchema, mapUser } from 'src/dtos/user.dto.js'; +import { AlbumUserRole, AlbumUserRoleSchema, AssetOrder, AssetOrderSchema } from 'src/enum.js'; +import type { MaybeDehydrated } from 'src/types.js'; +import { asDateTimeString } from 'src/utils/date.js'; +import { stringToBool } from 'src/validation.js'; import z from 'zod'; const AlbumUserAddSchema = z diff --git a/server/src/dtos/api-key.dto.ts b/server/src/dtos/api-key.dto.ts index 8c933e06b..fbd7857a3 100644 --- a/server/src/dtos/api-key.dto.ts +++ b/server/src/dtos/api-key.dto.ts @@ -1,7 +1,7 @@ import { createZodDto } from 'nestjs-zod'; -import { HistoryBuilder } from 'src/decorators'; -import { Permission } from 'src/enum'; -import { isoDatetimeToDate } from 'src/validation'; +import { HistoryBuilder } from 'src/decorators.js'; +import { Permission } from 'src/enum.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const PermissionSchema = z.enum(Permission).describe('List of permissions').meta({ id: 'Permission' }); diff --git a/server/src/dtos/asset-file.dto.ts b/server/src/dtos/asset-file.dto.ts index 54a772cd8..0384eb34c 100644 --- a/server/src/dtos/asset-file.dto.ts +++ b/server/src/dtos/asset-file.dto.ts @@ -1,8 +1,8 @@ import { Selectable } from 'kysely'; import { createZodDto } from 'nestjs-zod'; -import { AssetFileTypeSchema } from 'src/enum'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { isoDatetimeToDate, stringToBool } from 'src/validation'; +import { AssetFileTypeSchema } from 'src/enum.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { isoDatetimeToDate, stringToBool } from 'src/validation.js'; import z from 'zod'; const AssetFileSearchSchema = z diff --git a/server/src/dtos/asset-media.dto.ts b/server/src/dtos/asset-media.dto.ts index 88542a11e..584337f2d 100644 --- a/server/src/dtos/asset-media.dto.ts +++ b/server/src/dtos/asset-media.dto.ts @@ -1,8 +1,8 @@ import { createZodDto } from 'nestjs-zod'; -import { HistoryBuilder } from 'src/decorators'; -import { AssetMetadataUpsertItemSchema } from 'src/dtos/asset.dto'; -import { ApiCustomExtension, AssetVisibilitySchema } from 'src/enum'; -import { isoDatetimeToDate, JsonParsed, stringToBool } from 'src/validation'; +import { HistoryBuilder } from 'src/decorators.js'; +import { AssetMetadataUpsertItemSchema } from 'src/dtos/asset.dto.js'; +import { ApiCustomExtension, AssetVisibilitySchema } from 'src/enum.js'; +import { isoDatetimeToDate, JsonParsed, stringToBool } from 'src/validation.js'; import z from 'zod'; export enum AssetMediaSize { diff --git a/server/src/dtos/asset-response.dto.ts b/server/src/dtos/asset-response.dto.ts index eaa05b40d..2750ceb44 100644 --- a/server/src/dtos/asset-response.dto.ts +++ b/server/src/dtos/asset-response.dto.ts @@ -1,13 +1,13 @@ import { Selectable, ShallowDehydrateObject } from 'kysely'; import { createZodDto } from 'nestjs-zod'; -import { AssetFace, AssetFile, Exif, Stack, Tag, User } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetEditActionItem } from 'src/dtos/editing.dto'; -import { ExifResponseSchema, mapExif } from 'src/dtos/exif.dto'; -import { PersonResponseDto, PersonResponseSchema, mapPerson } from 'src/dtos/person.dto'; -import { TagResponseSchema, mapTag } from 'src/dtos/tag.dto'; -import { UserResponseSchema, mapUser } from 'src/dtos/user.dto'; +import { AssetFace, AssetFile, Exif, Stack, Tag, User } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { AssetEditActionItem } from 'src/dtos/editing.dto.js'; +import { ExifResponseSchema, mapExif } from 'src/dtos/exif.dto.js'; +import { PersonResponseDto, PersonResponseSchema, mapPerson } from 'src/dtos/person.dto.js'; +import { TagResponseSchema, mapTag } from 'src/dtos/tag.dto.js'; +import { UserResponseSchema, mapUser } from 'src/dtos/user.dto.js'; import { AssetStatus, AssetType, @@ -15,11 +15,11 @@ import { AssetVisibility, AssetVisibilitySchema, ChecksumAlgorithm, -} from 'src/enum'; -import { MaybeDehydrated } from 'src/types'; -import { hexOrBufferToBase64 } from 'src/utils/bytes'; -import { asDateTimeString } from 'src/utils/date'; -import { mimeTypes } from 'src/utils/mime-types'; +} from 'src/enum.js'; +import type { MaybeDehydrated } from 'src/types.js'; +import { hexOrBufferToBase64 } from 'src/utils/bytes.js'; +import { asDateTimeString } from 'src/utils/date.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; import z from 'zod'; const SanitizedAssetResponseSchema = z diff --git a/server/src/dtos/asset.dto.ts b/server/src/dtos/asset.dto.ts index 26c983a7d..1c01ba640 100644 --- a/server/src/dtos/asset.dto.ts +++ b/server/src/dtos/asset.dto.ts @@ -1,9 +1,9 @@ import { createZodDto } from 'nestjs-zod'; -import { HistoryBuilder } from 'src/decorators'; -import { BulkIdsSchema } from 'src/dtos/asset-ids.response.dto'; -import { AssetType, AssetVisibilitySchema } from 'src/enum'; -import { AssetStats } from 'src/repositories/asset.repository'; -import { IsNotSiblingOf, isoDatetimeToDate, latitudeSchema, longitudeSchema, stringToBool } from 'src/validation'; +import { HistoryBuilder } from 'src/decorators.js'; +import { BulkIdsSchema } from 'src/dtos/asset-ids.response.dto.js'; +import { AssetType, AssetVisibilitySchema } from 'src/enum.js'; +import { AssetStats } from 'src/repositories/asset.repository.js'; +import { IsNotSiblingOf, isoDatetimeToDate, latitudeSchema, longitudeSchema, stringToBool } from 'src/validation.js'; import z from 'zod'; const UpdateAssetBaseSchema = z diff --git a/server/src/dtos/auth.dto.ts b/server/src/dtos/auth.dto.ts index 40b4e25b6..44d15d30c 100644 --- a/server/src/dtos/auth.dto.ts +++ b/server/src/dtos/auth.dto.ts @@ -1,8 +1,8 @@ import { createZodDto } from 'nestjs-zod'; -import { AuthApiKey, AuthSession, AuthSharedLink, AuthUser, UserAdmin } from 'src/database'; -import { ImmichCookie, UserMetadataKey } from 'src/enum'; -import { UserMetadataItem } from 'src/types'; -import { toEmail } from 'src/validation'; +import { AuthApiKey, AuthSession, AuthSharedLink, AuthUser, UserAdmin } from 'src/database.js'; +import { ImmichCookie, UserMetadataKey } from 'src/enum.js'; +import type { UserMetadataItem } from 'src/types.js'; +import { toEmail } from 'src/validation.js'; import z from 'zod'; export type CookieResponse = { diff --git a/server/src/dtos/bbox.dto.ts b/server/src/dtos/bbox.dto.ts index 8c2417379..22459675e 100644 --- a/server/src/dtos/bbox.dto.ts +++ b/server/src/dtos/bbox.dto.ts @@ -1,4 +1,4 @@ -import { latitudeSchema, longitudeSchema } from 'src/validation'; +import { latitudeSchema, longitudeSchema } from 'src/validation.js'; import z from 'zod'; export const BBoxSchema = z diff --git a/server/src/dtos/calendar-heatmap.dto.ts b/server/src/dtos/calendar-heatmap.dto.ts index b52d6e27b..21e2fcb7b 100644 --- a/server/src/dtos/calendar-heatmap.dto.ts +++ b/server/src/dtos/calendar-heatmap.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { CalendarHeatmapType } from 'src/enum'; -import { isoDateToDate } from 'src/validation'; +import { CalendarHeatmapType } from 'src/enum.js'; +import { isoDateToDate } from 'src/validation.js'; import z from 'zod'; const CalendarHeatmapTypeSchema = z diff --git a/server/src/dtos/cluster-group.dto.ts b/server/src/dtos/cluster-group.dto.ts index d7de9d08e..32c542d2e 100644 --- a/server/src/dtos/cluster-group.dto.ts +++ b/server/src/dtos/cluster-group.dto.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely'; import { createZodDto } from 'nestjs-zod'; -import { ClusterGroupRequestTable } from 'src/schema/tables/cluster-group-request.table'; -import { isoDatetimeToDate } from 'src/validation'; +import { ClusterGroupRequestTable } from 'src/schema/tables/cluster-group-request.table.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const ClusterGroupRequestCreateSchema = z diff --git a/server/src/dtos/config.dto.spec.ts b/server/src/dtos/config.dto.spec.ts index ce4f5a5d0..5e7b610c7 100644 --- a/server/src/dtos/config.dto.spec.ts +++ b/server/src/dtos/config.dto.spec.ts @@ -5,8 +5,8 @@ import { mapUserConfig, PublicConfigDto, UserConfigDto, -} from 'src/dtos/config.dto'; -import { getKeysDeep } from 'src/utils/misc'; +} from 'src/dtos/config.dto.js'; +import { getKeysDeep } from 'src/utils/misc.js'; import z from 'zod'; const PUBLIC_PROPERTIES = [ diff --git a/server/src/dtos/config.dto.ts b/server/src/dtos/config.dto.ts index 8fbdd637e..a3c235b7e 100644 --- a/server/src/dtos/config.dto.ts +++ b/server/src/dtos/config.dto.ts @@ -29,8 +29,8 @@ import { VideoCodecSchema, VideoContainer, VideoContainerSchema, -} from 'src/enum'; -import { DeepPartial } from 'src/types'; +} from 'src/enum.js'; +import type { DeepPartial } from 'src/types.js'; import z from 'zod'; const { Admin, User, Public } = ConfigVisibility; diff --git a/server/src/dtos/duplicate.dto.ts b/server/src/dtos/duplicate.dto.ts index 66d14e605..e52081673 100644 --- a/server/src/dtos/duplicate.dto.ts +++ b/server/src/dtos/duplicate.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { AssetResponseSchema } from 'src/dtos/asset-response.dto'; +import { AssetResponseSchema } from 'src/dtos/asset-response.dto.js'; import z from 'zod'; const DuplicateResponseSchema = z diff --git a/server/src/dtos/env.dto.ts b/server/src/dtos/env.dto.ts index 7716c4b30..38c192996 100644 --- a/server/src/dtos/env.dto.ts +++ b/server/src/dtos/env.dto.ts @@ -1,5 +1,5 @@ -import { ImmichEnvironmentSchema, LogFormatSchema, LogLevelSchema } from 'src/enum'; -import { IsIPRange } from 'src/validation'; +import { ImmichEnvironmentSchema, LogFormatSchema, LogLevelSchema } from 'src/enum.js'; +import { IsIPRange } from 'src/validation.js'; import z from 'zod'; // TODO import from sql-tools once the swagger plugin supports external enums diff --git a/server/src/dtos/exif.dto.ts b/server/src/dtos/exif.dto.ts index 99bdaaf10..216235cf2 100644 --- a/server/src/dtos/exif.dto.ts +++ b/server/src/dtos/exif.dto.ts @@ -1,7 +1,7 @@ import { createZodDto } from 'nestjs-zod'; -import { Exif } from 'src/database'; -import { MaybeDehydrated } from 'src/types'; -import { asDateTimeString } from 'src/utils/date'; +import { Exif } from 'src/database.js'; +import type { MaybeDehydrated } from 'src/types.js'; +import { asDateTimeString } from 'src/utils/date.js'; import z from 'zod'; export const ExifResponseSchema = z diff --git a/server/src/dtos/integrity.dto.ts b/server/src/dtos/integrity.dto.ts index 52df5bf79..e2b9c5526 100644 --- a/server/src/dtos/integrity.dto.ts +++ b/server/src/dtos/integrity.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { IntegrityReport, IntegrityReportSchema } from 'src/enum'; +import { IntegrityReport, IntegrityReportSchema } from 'src/enum.js'; import z from 'zod'; const IntegrityReportSummaryResponseSchema = z diff --git a/server/src/dtos/job.dto.ts b/server/src/dtos/job.dto.ts index 325dae4d2..05f98f56f 100644 --- a/server/src/dtos/job.dto.ts +++ b/server/src/dtos/job.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { ManualJobNameSchema } from 'src/enum'; +import { ManualJobNameSchema } from 'src/enum.js'; import z from 'zod'; const JobCreateSchema = z diff --git a/server/src/dtos/library.dto.ts b/server/src/dtos/library.dto.ts index 906a6e663..f649c40ba 100644 --- a/server/src/dtos/library.dto.ts +++ b/server/src/dtos/library.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { Library } from 'src/database'; -import { isoDatetimeToDate } from 'src/validation'; +import { Library } from 'src/database.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const stringArrayMax128 = z diff --git a/server/src/dtos/license.dto.ts b/server/src/dtos/license.dto.ts index a68905fb4..b0f88230c 100644 --- a/server/src/dtos/license.dto.ts +++ b/server/src/dtos/license.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { UserLicenseSchema } from 'src/dtos/user.dto'; +import { UserLicenseSchema } from 'src/dtos/user.dto.js'; const LicenseKeySchema = UserLicenseSchema.pick({ licenseKey: true, diff --git a/server/src/dtos/maintenance.dto.ts b/server/src/dtos/maintenance.dto.ts index 96b376c5e..da83c0b1f 100644 --- a/server/src/dtos/maintenance.dto.ts +++ b/server/src/dtos/maintenance.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { MaintenanceAction, MaintenanceActionSchema, StorageFolderSchema } from 'src/enum'; +import { MaintenanceAction, MaintenanceActionSchema, StorageFolderSchema } from 'src/enum.js'; import z from 'zod'; const SetMaintenanceModeSchema = z diff --git a/server/src/dtos/map.dto.ts b/server/src/dtos/map.dto.ts index f44285093..47f10cfa7 100644 --- a/server/src/dtos/map.dto.ts +++ b/server/src/dtos/map.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { isoDatetimeToDate, latitudeSchema, longitudeSchema, stringToBool } from 'src/validation'; +import { isoDatetimeToDate, latitudeSchema, longitudeSchema, stringToBool } from 'src/validation.js'; import z from 'zod'; const MapReverseGeocodeSchema = z diff --git a/server/src/dtos/memory.dto.ts b/server/src/dtos/memory.dto.ts index a401d0efa..9bfa6ab45 100644 --- a/server/src/dtos/memory.dto.ts +++ b/server/src/dtos/memory.dto.ts @@ -1,10 +1,10 @@ import { createZodDto } from 'nestjs-zod'; -import { Memory } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { AssetResponseSchema, mapAsset } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetOrderWithRandomSchema, MemoryType, MemoryTypeSchema } from 'src/enum'; -import { isoDatetimeToDate, isoDateToDate, nonEmptyPartial, stringToBool } from 'src/validation'; +import { Memory } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { AssetResponseSchema, mapAsset } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { AssetOrderWithRandomSchema, MemoryType, MemoryTypeSchema } from 'src/enum.js'; +import { isoDatetimeToDate, isoDateToDate, nonEmptyPartial, stringToBool } from 'src/validation.js'; import z from 'zod'; const MemorySearchSchema = z diff --git a/server/src/dtos/notification.dto.ts b/server/src/dtos/notification.dto.ts index 04f937fc0..bdf0e8495 100644 --- a/server/src/dtos/notification.dto.ts +++ b/server/src/dtos/notification.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { NotificationLevel, NotificationLevelSchema, NotificationType, NotificationTypeSchema } from 'src/enum'; -import { isoDatetimeToDate, stringToBool } from 'src/validation'; +import { NotificationLevel, NotificationLevelSchema, NotificationType, NotificationTypeSchema } from 'src/enum.js'; +import { isoDatetimeToDate, stringToBool } from 'src/validation.js'; import z from 'zod'; const TestEmailResponseSchema = z diff --git a/server/src/dtos/partner.dto.ts b/server/src/dtos/partner.dto.ts index 049cf2b25..c415b1264 100644 --- a/server/src/dtos/partner.dto.ts +++ b/server/src/dtos/partner.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { UserResponseSchema } from 'src/dtos/user.dto'; -import { PartnerDirection } from 'src/repositories/partner.repository'; +import { UserResponseSchema } from 'src/dtos/user.dto.js'; +import { PartnerDirection } from 'src/repositories/partner.repository.js'; import z from 'zod'; const PartnerDirectionSchema = z.enum(PartnerDirection).describe('Partner direction').meta({ id: 'PartnerDirection' }); diff --git a/server/src/dtos/person.dto.ts b/server/src/dtos/person.dto.ts index 0379b6f3b..149cbe23b 100644 --- a/server/src/dtos/person.dto.ts +++ b/server/src/dtos/person.dto.ts @@ -1,15 +1,15 @@ import { Selectable } from 'kysely'; import { createZodDto } from 'nestjs-zod'; -import { AssetFace, Person } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetEditActionItem } from 'src/dtos/editing.dto'; -import { SourceTypeSchema } from 'src/enum'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { ImageDimensions, MaybeDehydrated } from 'src/types'; -import { asDateString, asDateTimeString } from 'src/utils/date'; -import { transformFaceBoundingBox } from 'src/utils/transform'; -import { hexColor, stringToBool } from 'src/validation'; +import { AssetFace, Person } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { AssetEditActionItem } from 'src/dtos/editing.dto.js'; +import { SourceTypeSchema } from 'src/enum.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import type { ImageDimensions, MaybeDehydrated } from 'src/types.js'; +import { asDateString, asDateTimeString } from 'src/utils/date.js'; +import { transformFaceBoundingBox } from 'src/utils/transform.js'; +import { hexColor, stringToBool } from 'src/validation.js'; import z from 'zod'; const PersonCreateSchema = z diff --git a/server/src/dtos/plugin-manifest.dto.ts b/server/src/dtos/plugin-manifest.dto.ts index 67da9e231..e0dbab52d 100644 --- a/server/src/dtos/plugin-manifest.dto.ts +++ b/server/src/dtos/plugin-manifest.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { JsonSchemaSchema } from 'src/dtos/json-schema.dto'; -import { WorkflowTriggerSchema, WorkflowTypeSchema } from 'src/enum'; +import { JsonSchemaSchema } from 'src/dtos/json-schema.dto.js'; +import { WorkflowTriggerSchema, WorkflowTypeSchema } from 'src/enum.js'; import z from 'zod'; const pluginNameRegex = /^[a-z0-9-]+[a-z0-9]$/; diff --git a/server/src/dtos/plugin.dto.ts b/server/src/dtos/plugin.dto.ts index 777380a10..9a06ad834 100644 --- a/server/src/dtos/plugin.dto.ts +++ b/server/src/dtos/plugin.dto.ts @@ -1,8 +1,8 @@ import { WorkflowTrigger } from '@immich/plugin-sdk'; import { createZodDto } from 'nestjs-zod'; -import { JsonSchemaDto } from 'src/dtos/json-schema.dto'; -import { WorkflowTriggerSchema, WorkflowType, WorkflowTypeSchema } from 'src/enum'; -import { asPluginKey } from 'src/utils/workflow'; +import { JsonSchemaDto } from 'src/dtos/json-schema.dto.js'; +import { WorkflowTriggerSchema, WorkflowType, WorkflowTypeSchema } from 'src/enum.js'; +import { asPluginKey } from 'src/utils/workflow.js'; import z from 'zod'; const PluginSearchSchema = z diff --git a/server/src/dtos/queue-legacy.dto.ts b/server/src/dtos/queue-legacy.dto.ts index 44f988fd2..ca2136580 100644 --- a/server/src/dtos/queue-legacy.dto.ts +++ b/server/src/dtos/queue-legacy.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { QueueResponseDto, QueueStatisticsSchema } from 'src/dtos/queue.dto'; -import { QueueName } from 'src/enum'; +import { QueueResponseDto, QueueStatisticsSchema } from 'src/dtos/queue.dto.js'; +import { QueueName } from 'src/enum.js'; import z from 'zod'; const QueueStatusLegacySchema = z diff --git a/server/src/dtos/queue.dto.ts b/server/src/dtos/queue.dto.ts index 2147f60bd..6ab871814 100644 --- a/server/src/dtos/queue.dto.ts +++ b/server/src/dtos/queue.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { HistoryBuilder } from 'src/decorators'; -import { JobNameSchema, QueueCommandSchema, QueueJobStatusSchema, QueueNameSchema } from 'src/enum'; +import { HistoryBuilder } from 'src/decorators.js'; +import { JobNameSchema, QueueCommandSchema, QueueJobStatusSchema, QueueNameSchema } from 'src/enum.js'; import z from 'zod'; const QueueNameParamSchema = z diff --git a/server/src/dtos/search.dto.ts b/server/src/dtos/search.dto.ts index 686ce38a2..a7c85587b 100644 --- a/server/src/dtos/search.dto.ts +++ b/server/src/dtos/search.dto.ts @@ -1,8 +1,8 @@ import { createZodDto } from 'nestjs-zod'; -import { Place } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { AlbumResponseSchema } from 'src/dtos/album.dto'; -import { AssetResponseSchema } from 'src/dtos/asset-response.dto'; +import { Place } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { AlbumResponseSchema } from 'src/dtos/album.dto.js'; +import { AssetResponseSchema } from 'src/dtos/asset-response.dto.js'; import { AssetOrder, AssetOrderSchema, @@ -10,8 +10,8 @@ import { AssetVisibilitySchema, SearchOrderField, SearchOrderFieldSchema, -} from 'src/enum'; -import { isoDatetimeToDate, nonEmptyPartial, stringToBool } from 'src/validation'; +} from 'src/enum.js'; +import { isoDatetimeToDate, nonEmptyPartial, stringToBool } from 'src/validation.js'; import z from 'zod'; const ADDED_V3_2 = new HistoryBuilder().added('v3.2.0').getExtensions(); diff --git a/server/src/dtos/server.dto.ts b/server/src/dtos/server.dto.ts index f2aaa11d9..2f8144dcd 100644 --- a/server/src/dtos/server.dto.ts +++ b/server/src/dtos/server.dto.ts @@ -1,7 +1,7 @@ import { createZodDto } from 'nestjs-zod'; import type { SemVer } from 'semver'; -import { ExtraModel, HistoryBuilder } from 'src/decorators'; -import { isoDatetimeToDate } from 'src/validation'; +import { ExtraModel, HistoryBuilder } from 'src/decorators.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const ServerPingResponseSchema = z diff --git a/server/src/dtos/session.dto.ts b/server/src/dtos/session.dto.ts index c81dac6d7..d4a5f23dc 100644 --- a/server/src/dtos/session.dto.ts +++ b/server/src/dtos/session.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { Session } from 'src/database'; +import { Session } from 'src/database.js'; import z from 'zod'; const SessionCreateSchema = z diff --git a/server/src/dtos/shared-link.dto.ts b/server/src/dtos/shared-link.dto.ts index a54b3afc4..cb3281f8f 100644 --- a/server/src/dtos/shared-link.dto.ts +++ b/server/src/dtos/shared-link.dto.ts @@ -1,10 +1,10 @@ import { createZodDto } from 'nestjs-zod'; -import { SharedLink } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { AlbumResponseSchema, mapAlbum } from 'src/dtos/album.dto'; -import { AssetResponseSchema, mapAsset } from 'src/dtos/asset-response.dto'; -import { SharedLinkType, SharedLinkTypeSchema } from 'src/enum'; -import { isoDatetimeToDate } from 'src/validation'; +import { SharedLink } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { AlbumResponseSchema, mapAlbum } from 'src/dtos/album.dto.js'; +import { AssetResponseSchema, mapAsset } from 'src/dtos/asset-response.dto.js'; +import { SharedLinkType, SharedLinkTypeSchema } from 'src/enum.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const SharedLinkSearchSchema = z diff --git a/server/src/dtos/stack.dto.ts b/server/src/dtos/stack.dto.ts index 1956974ba..01ced378c 100644 --- a/server/src/dtos/stack.dto.ts +++ b/server/src/dtos/stack.dto.ts @@ -1,7 +1,7 @@ import { createZodDto } from 'nestjs-zod'; -import { Stack } from 'src/database'; -import { AssetResponseSchema, mapAsset } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Stack } from 'src/database.js'; +import { AssetResponseSchema, mapAsset } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import z from 'zod'; const StackSearchSchema = z diff --git a/server/src/dtos/streaming.dto.ts b/server/src/dtos/streaming.dto.ts index c83c3e38a..2b94b2335 100644 --- a/server/src/dtos/streaming.dto.ts +++ b/server/src/dtos/streaming.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { ImmichHeader } from 'src/enum'; +import { ImmichHeader } from 'src/enum.js'; import z from 'zod'; const HlsSessionParamSchema = z.object({ diff --git a/server/src/dtos/sync.dto.ts b/server/src/dtos/sync.dto.ts index 1d5fe64aa..9dfe13ca5 100644 --- a/server/src/dtos/sync.dto.ts +++ b/server/src/dtos/sync.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { ExtraModel } from 'src/decorators'; -import { AssetEditActionSchema } from 'src/dtos/editing.dto'; +import { ExtraModel } from 'src/decorators.js'; +import { AssetEditActionSchema } from 'src/dtos/editing.dto.js'; import { AlbumUserRole, AlbumUserRoleSchema, @@ -13,8 +13,8 @@ import { SyncRequestTypeSchema, UserAvatarColorSchema, UserMetadataKeySchema, -} from 'src/enum'; -import { isoDatetimeToDate } from 'src/validation'; +} from 'src/enum.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const SyncUserV1Schema = z diff --git a/server/src/dtos/tag.dto.ts b/server/src/dtos/tag.dto.ts index 7f6dfbf20..19e01abd1 100644 --- a/server/src/dtos/tag.dto.ts +++ b/server/src/dtos/tag.dto.ts @@ -1,8 +1,8 @@ import { createZodDto } from 'nestjs-zod'; -import { Tag } from 'src/database'; -import { MaybeDehydrated } from 'src/types'; -import { asDateTimeString } from 'src/utils/date'; -import { hexColor } from 'src/validation'; +import { Tag } from 'src/database.js'; +import type { MaybeDehydrated } from 'src/types.js'; +import { asDateTimeString } from 'src/utils/date.js'; +import { hexColor } from 'src/validation.js'; import z from 'zod'; const TagCreateSchema = z diff --git a/server/src/dtos/time-bucket.dto.ts b/server/src/dtos/time-bucket.dto.ts index c85c7e83a..a958d62e1 100644 --- a/server/src/dtos/time-bucket.dto.ts +++ b/server/src/dtos/time-bucket.dto.ts @@ -1,7 +1,7 @@ import { createZodDto } from 'nestjs-zod'; -import { BBoxSchema } from 'src/dtos/bbox.dto'; -import { AssetOrderBySchema, AssetOrderSchema, AssetVisibilitySchema } from 'src/enum'; -import { stringToBool } from 'src/validation'; +import { BBoxSchema } from 'src/dtos/bbox.dto.js'; +import { AssetOrderBySchema, AssetOrderSchema, AssetVisibilitySchema } from 'src/enum.js'; +import { stringToBool } from 'src/validation.js'; import z from 'zod'; const TimeBucketQueryBaseSchema = z diff --git a/server/src/dtos/user-preferences.dto.ts b/server/src/dtos/user-preferences.dto.ts index 5dcb72ae5..b9ae3d1ac 100644 --- a/server/src/dtos/user-preferences.dto.ts +++ b/server/src/dtos/user-preferences.dto.ts @@ -1,6 +1,6 @@ import { createZodDto } from 'nestjs-zod'; -import { AssetOrderSchema, UserAvatarColorSchema } from 'src/enum'; -import { UserPreferences } from 'src/types'; +import { AssetOrderSchema, UserAvatarColorSchema } from 'src/enum.js'; +import type { UserPreferences } from 'src/types.js'; import z from 'zod'; const AlbumsUpdateSchema = z diff --git a/server/src/dtos/user-profile.dto.ts b/server/src/dtos/user-profile.dto.ts index e4ab29b6d..7465b1c4c 100644 --- a/server/src/dtos/user-profile.dto.ts +++ b/server/src/dtos/user-profile.dto.ts @@ -1,7 +1,7 @@ import { ApiProperty } from '@nestjs/swagger'; import { createZodDto } from 'nestjs-zod'; -import { UploadFieldName } from 'src/dtos/asset-media.dto'; -import { isoDatetimeToDate } from 'src/validation'; +import { UploadFieldName } from 'src/dtos/asset-media.dto.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; export class CreateProfileImageDto { diff --git a/server/src/dtos/user.dto.spec.ts b/server/src/dtos/user.dto.spec.ts index 6acc9554f..459e85b07 100644 --- a/server/src/dtos/user.dto.spec.ts +++ b/server/src/dtos/user.dto.spec.ts @@ -1,4 +1,4 @@ -import { UserAdminCreateSchema, UserUpdateMeSchema } from 'src/dtos/user.dto'; +import { UserAdminCreateSchema, UserUpdateMeSchema } from 'src/dtos/user.dto.js'; describe('update user DTO', () => { it('should allow emails without a tld', () => { diff --git a/server/src/dtos/user.dto.ts b/server/src/dtos/user.dto.ts index 2a15e4397..673bd233b 100644 --- a/server/src/dtos/user.dto.ts +++ b/server/src/dtos/user.dto.ts @@ -1,11 +1,11 @@ import { createZodDto } from 'nestjs-zod'; -import { User, UserAdmin } from 'src/database'; -import { HistoryBuilder } from 'src/decorators'; -import { pinCodeRegex } from 'src/dtos/auth.dto'; -import { UserAvatarColor, UserAvatarColorSchema, UserMetadataKey, UserStatusSchema } from 'src/enum'; -import { MaybeDehydrated, UserMetadataItem } from 'src/types'; -import { asDateTimeString } from 'src/utils/date'; -import { isoDatetimeToDate, sanitizeFilename, stringToBool, toEmail } from 'src/validation'; +import { User, UserAdmin } from 'src/database.js'; +import { HistoryBuilder } from 'src/decorators.js'; +import { pinCodeRegex } from 'src/dtos/auth.dto.js'; +import { UserAvatarColor, UserAvatarColorSchema, UserMetadataKey, UserStatusSchema } from 'src/enum.js'; +import type { MaybeDehydrated, UserMetadataItem } from 'src/types.js'; +import { asDateTimeString } from 'src/utils/date.js'; +import { isoDatetimeToDate, sanitizeFilename, stringToBool, toEmail } from 'src/validation.js'; import z from 'zod'; export const UserUpdateMeSchema = z diff --git a/server/src/dtos/workflow.dto.ts b/server/src/dtos/workflow.dto.ts index 990cae79a..064883fb7 100644 --- a/server/src/dtos/workflow.dto.ts +++ b/server/src/dtos/workflow.dto.ts @@ -1,7 +1,7 @@ import type { WorkflowStepConfig, WorkflowTrigger } from '@immich/plugin-sdk'; import { createZodDto } from 'nestjs-zod'; -import { WorkflowResultSchema, WorkflowTriggerSchema, WorkflowTypeSchema } from 'src/enum'; -import { isoDatetimeToDate } from 'src/validation'; +import { WorkflowResultSchema, WorkflowTriggerSchema, WorkflowTypeSchema } from 'src/enum.js'; +import { isoDatetimeToDate } from 'src/validation.js'; import z from 'zod'; const WorkflowTriggerResponseSchema = z diff --git a/server/src/emails/album-invite.email.tsx b/server/src/emails/album-invite.email.tsx index fdc189af9..d1ea2ac10 100644 --- a/server/src/emails/album-invite.email.tsx +++ b/server/src/emails/album-invite.email.tsx @@ -1,9 +1,9 @@ import { Img, Link, Section, Text } from '@react-email/components'; import * as React from 'react'; -import { ImmichButton } from 'src/emails/components/button.component'; -import ImmichLayout from 'src/emails/components/immich.layout'; -import { AlbumInviteEmailProps } from 'src/repositories/email.repository'; -import { replaceTemplateTags } from 'src/utils/replace-template-tags'; +import { ImmichButton } from 'src/emails/components/button.component.js'; +import ImmichLayout from 'src/emails/components/immich.layout.js'; +import { AlbumInviteEmailProps } from 'src/repositories/email.repository.js'; +import { replaceTemplateTags } from 'src/utils/replace-template-tags.js'; export const AlbumInviteEmail = ({ baseUrl, diff --git a/server/src/emails/album-update.email.tsx b/server/src/emails/album-update.email.tsx index 6fd2abb05..7e7e366f5 100644 --- a/server/src/emails/album-update.email.tsx +++ b/server/src/emails/album-update.email.tsx @@ -1,9 +1,9 @@ import { Img, Link, Section, Text } from '@react-email/components'; import * as React from 'react'; -import { ImmichButton } from 'src/emails/components/button.component'; -import ImmichLayout from 'src/emails/components/immich.layout'; -import { AlbumUpdateEmailProps } from 'src/repositories/email.repository'; -import { replaceTemplateTags } from 'src/utils/replace-template-tags'; +import { ImmichButton } from 'src/emails/components/button.component.js'; +import ImmichLayout from 'src/emails/components/immich.layout.js'; +import { AlbumUpdateEmailProps } from 'src/repositories/email.repository.js'; +import { replaceTemplateTags } from 'src/utils/replace-template-tags.js'; export const AlbumUpdateEmail = ({ baseUrl, diff --git a/server/src/emails/components/futo.layout.tsx b/server/src/emails/components/futo.layout.tsx index c53120141..5442f4ac7 100644 --- a/server/src/emails/components/futo.layout.tsx +++ b/server/src/emails/components/futo.layout.tsx @@ -13,7 +13,7 @@ import { Text, } from '@react-email/components'; import * as React from 'react'; -import { ImmichFooter } from './footer.template'; +import { ImmichFooter } from './footer.template.js'; interface FutoLayoutProps { children: React.ReactNode; diff --git a/server/src/emails/components/immich.layout.tsx b/server/src/emails/components/immich.layout.tsx index 911c6b31e..6a2755433 100644 --- a/server/src/emails/components/immich.layout.tsx +++ b/server/src/emails/components/immich.layout.tsx @@ -1,6 +1,6 @@ import { Body, Container, Font, Head, Hr, Html, Img, Preview, Section, Tailwind, Text } from '@react-email/components'; import * as React from 'react'; -import { ImmichFooter } from 'src/emails/components/footer.template'; +import { ImmichFooter } from 'src/emails/components/footer.template.js'; interface ImmichLayoutProps { children: React.ReactNode; diff --git a/server/src/emails/license.email.tsx b/server/src/emails/license.email.tsx index 42dc8918e..86fe48275 100644 --- a/server/src/emails/license.email.tsx +++ b/server/src/emails/license.email.tsx @@ -1,7 +1,7 @@ import { Link, Section, Text } from '@react-email/components'; import * as React from 'react'; -import { ImmichButton } from 'src/emails/components/button.component'; -import FutoLayout from 'src/emails/components/futo.layout'; +import { ImmichButton } from 'src/emails/components/button.component.js'; +import FutoLayout from 'src/emails/components/futo.layout.js'; /** * Template to be used for FUTOPay project diff --git a/server/src/emails/test.email.tsx b/server/src/emails/test.email.tsx index 0d8730708..619581f5a 100644 --- a/server/src/emails/test.email.tsx +++ b/server/src/emails/test.email.tsx @@ -1,7 +1,7 @@ import { Link, Row, Text } from '@react-email/components'; import * as React from 'react'; -import ImmichLayout from 'src/emails/components/immich.layout'; -import { TestEmailProps } from 'src/repositories/email.repository'; +import ImmichLayout from 'src/emails/components/immich.layout.js'; +import { TestEmailProps } from 'src/repositories/email.repository.js'; export const TestEmail = ({ baseUrl, displayName }: TestEmailProps) => ( diff --git a/server/src/emails/welcome.email.tsx b/server/src/emails/welcome.email.tsx index 57e86ab25..b330b1929 100644 --- a/server/src/emails/welcome.email.tsx +++ b/server/src/emails/welcome.email.tsx @@ -1,9 +1,9 @@ import { Link, Section, Text } from '@react-email/components'; import * as React from 'react'; -import { ImmichButton } from 'src/emails/components/button.component'; -import ImmichLayout from 'src/emails/components/immich.layout'; -import { WelcomeEmailProps } from 'src/repositories/email.repository'; -import { replaceTemplateTags } from 'src/utils/replace-template-tags'; +import { ImmichButton } from 'src/emails/components/button.component.js'; +import ImmichLayout from 'src/emails/components/immich.layout.js'; +import { WelcomeEmailProps } from 'src/repositories/email.repository.js'; +import { replaceTemplateTags } from 'src/utils/replace-template-tags.js'; export const WelcomeEmail = ({ baseUrl, displayName, username, password, customTemplate }: WelcomeEmailProps) => { const usableTemplateVariables = { diff --git a/server/src/main.ts b/server/src/main.ts index 5876d2fe5..72795c76d 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -4,12 +4,12 @@ import { ChildProcess, fork } from 'node:child_process'; import { dirname, join } from 'node:path'; import { Worker } from 'node:worker_threads'; import { PostgresError } from 'postgres'; -import { ImmichAdminModule } from 'src/app.module'; -import { DatabaseLock, ExitCode, ImmichWorker, LogLevel, SystemMetadataKey } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { type DB } from 'src/schema'; -import { getKyselyConfig } from 'src/utils/database'; +import { ImmichAdminModule } from 'src/app.module.js'; +import { DatabaseLock, ExitCode, ImmichWorker, LogLevel, SystemMetadataKey } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { type DB } from 'src/schema/index.js'; +import { getKyselyConfig } from 'src/utils/database.js'; /** * Manages worker lifecycle @@ -97,8 +97,7 @@ class Workers { private startWorker(name: ImmichWorker) { console.log(`Starting ${name} worker`); - // eslint-disable-next-line unicorn/prefer-module - const basePath = dirname(__filename); + const basePath = dirname(import.meta.filename); const workerFile = join(basePath, 'workers', `${name}.js`); let anyWorker: Worker | ChildProcess; diff --git a/server/src/maintenance/maintenance-auth.guard.ts b/server/src/maintenance/maintenance-auth.guard.ts index e2c472ff7..8533b171c 100644 --- a/server/src/maintenance/maintenance-auth.guard.ts +++ b/server/src/maintenance/maintenance-auth.guard.ts @@ -1,10 +1,10 @@ import { CanActivate, ExecutionContext, Injectable, SetMetadata, applyDecorators } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { Request } from 'express'; -import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto'; -import { MetadataKey } from 'src/enum'; -import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto.js'; +import { MetadataKey } from 'src/enum.js'; +import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; export const MaintenanceRoute = (options = {}): MethodDecorator => { const decorators: MethodDecorator[] = [SetMetadata(MetadataKey.AuthRoute, options)]; diff --git a/server/src/maintenance/maintenance-health.repository.ts b/server/src/maintenance/maintenance-health.repository.ts index 925389204..4e35e6066 100644 --- a/server/src/maintenance/maintenance-health.repository.ts +++ b/server/src/maintenance/maintenance-health.repository.ts @@ -1,14 +1,13 @@ import { Injectable } from '@nestjs/common'; import { fork } from 'node:child_process'; import { dirname, join } from 'node:path'; -import { IMMICH_SERVER_START } from 'src/constants'; +import { IMMICH_SERVER_START } from 'src/constants.js'; @Injectable() export class MaintenanceHealthRepository { checkApiHealth(): Promise { return new Promise((resolve, reject) => { - // eslint-disable-next-line unicorn/prefer-module - const basePath = dirname(__filename); + const basePath = dirname(import.meta.filename); const workerFile = join(basePath, '..', 'workers', `api.js`); const worker = fork(workerFile, [], { diff --git a/server/src/maintenance/maintenance-websocket.repository.ts b/server/src/maintenance/maintenance-websocket.repository.ts index d13ceb083..836c808e0 100644 --- a/server/src/maintenance/maintenance-websocket.repository.ts +++ b/server/src/maintenance/maintenance-websocket.repository.ts @@ -7,10 +7,10 @@ import { WebSocketServer, } from '@nestjs/websockets'; import { Server, Socket } from 'socket.io'; -import { MaintenanceAuthDto, MaintenanceStatusResponseDto } from 'src/dtos/maintenance.dto'; -import { AppRepository } from 'src/repositories/app.repository'; -import { AppRestartEvent, ArgsOf } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { MaintenanceAuthDto, MaintenanceStatusResponseDto } from 'src/dtos/maintenance.dto.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import type { AppRestartEvent, ArgsOf } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; interface ServerEventMap { AppRestart: [AppRestartEvent]; diff --git a/server/src/maintenance/maintenance-worker.controller.ts b/server/src/maintenance/maintenance-worker.controller.ts index bf06853bf..c1cd84c2b 100644 --- a/server/src/maintenance/maintenance-worker.controller.ts +++ b/server/src/maintenance/maintenance-worker.controller.ts @@ -12,29 +12,29 @@ import { UseInterceptors, } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; -import { NextFunction, Request, Response } from 'express'; +import type { NextFunction, Request, Response } from 'express'; import { MaintenanceAuthDto, MaintenanceDetectInstallResponseDto, MaintenanceLoginDto, MaintenanceStatusResponseDto, SetMaintenanceModeDto, -} from 'src/dtos/maintenance.dto'; -import { ServerConfigDto, ServerPingResponse, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { ImmichCookie } from 'src/enum'; -import { MaintenanceRoute } from 'src/maintenance/maintenance-auth.guard'; -import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; -import { GetLoginDetails } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { LoginDetails } from 'src/services/auth.service'; -import { sendFile } from 'src/utils/file'; -import { respondWithCookie } from 'src/utils/response'; -import { FilenameParamDto } from 'src/validation'; +} from 'src/dtos/maintenance.dto.js'; +import { ServerConfigDto, ServerPingResponse, ServerVersionResponseDto } from 'src/dtos/server.dto.js'; +import { ImmichCookie } from 'src/enum.js'; +import { MaintenanceRoute } from 'src/maintenance/maintenance-auth.guard.js'; +import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service.js'; +import { GetLoginDetails } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { LoginDetails } from 'src/services/auth.service.js'; +import { sendFile } from 'src/utils/file.js'; +import { respondWithCookie } from 'src/utils/response.js'; +import { FilenameParamDto } from 'src/validation.js'; -import type { DatabaseBackupController as _DatabaseBackupController } from 'src/controllers/database-backup.controller'; -import type { ServerController as _ServerController } from 'src/controllers/server.controller'; -import { DatabaseBackupDeleteDto, DatabaseBackupListResponseDto } from 'src/dtos/database-backup.dto'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; +import type { DatabaseBackupController as _DatabaseBackupController } from 'src/controllers/database-backup.controller.js'; +import type { ServerController as _ServerController } from 'src/controllers/server.controller.js'; +import { DatabaseBackupDeleteDto, DatabaseBackupListResponseDto } from 'src/dtos/database-backup.dto.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; @Controller() export class MaintenanceWorkerController { diff --git a/server/src/maintenance/maintenance-worker.service.spec.ts b/server/src/maintenance/maintenance-worker.service.spec.ts index 1d5bee62b..4c58080fb 100644 --- a/server/src/maintenance/maintenance-worker.service.spec.ts +++ b/server/src/maintenance/maintenance-worker.service.spec.ts @@ -1,11 +1,11 @@ import { UnauthorizedException } from '@nestjs/common'; import { SignJWT } from 'jose'; -import { MaintenanceAction, SystemMetadataKey } from 'src/enum'; -import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository'; -import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository'; -import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { automock, AutoMocked, getMocks, ServiceMocks } from 'test/utils'; +import { MaintenanceAction, SystemMetadataKey } from 'src/enum.js'; +import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository.js'; +import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository.js'; +import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { automock, AutoMocked, getMocks, ServiceMocks } from 'test/utils.js'; describe(MaintenanceWorkerService.name, () => { let sut: MaintenanceWorkerService; diff --git a/server/src/maintenance/maintenance-worker.service.ts b/server/src/maintenance/maintenance-worker.service.ts index f088637a5..edcf45d01 100644 --- a/server/src/maintenance/maintenance-worker.service.ts +++ b/server/src/maintenance/maintenance-worker.service.ts @@ -4,34 +4,34 @@ import { NextFunction, Request, Response } from 'express'; import { jwtVerify } from 'jose'; import { readFileSync } from 'node:fs'; import { IncomingHttpHeaders } from 'node:http'; -import { serverVersion } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; +import { serverVersion } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; import { MaintenanceAuthDto, MaintenanceDetectInstallResponseDto, MaintenanceStatusResponseDto, SetMaintenanceModeDto, -} from 'src/dtos/maintenance.dto'; -import { ServerConfigDto, ServerPingResponse, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { DatabaseLock, ImmichCookie, MaintenanceAction, SystemMetadataKey } from 'src/enum'; -import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository'; -import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository'; -import { AppRepository } from 'src/repositories/app.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { ProcessRepository } from 'src/repositories/process.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { type ApiService as _ApiService } from 'src/services/api.service'; -import { type BaseService as _BaseService } from 'src/services/base.service'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { type ServerService as _ServerService } from 'src/services/server.service'; -import { type VersionService as _VersionService } from 'src/services/version.service'; -import { MaintenanceModeState } from 'src/types'; -import { getConfig } from 'src/utils/config'; -import { createMaintenanceLoginUrl, detectPriorInstall } from 'src/utils/maintenance'; -import { getExternalDomain } from 'src/utils/misc'; +} from 'src/dtos/maintenance.dto.js'; +import { ServerConfigDto, ServerPingResponse, ServerVersionResponseDto } from 'src/dtos/server.dto.js'; +import { DatabaseLock, ImmichCookie, MaintenanceAction, SystemMetadataKey } from 'src/enum.js'; +import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository.js'; +import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { type ApiService as _ApiService } from 'src/services/api.service.js'; +import { type BaseService as _BaseService } from 'src/services/base.service.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { type ServerService as _ServerService } from 'src/services/server.service.js'; +import { type VersionService as _VersionService } from 'src/services/version.service.js'; +import type { MaintenanceModeState } from 'src/types.js'; +import { getConfig } from 'src/utils/config.js'; +import { createMaintenanceLoginUrl, detectPriorInstall } from 'src/utils/maintenance.js'; +import { getExternalDomain } from 'src/utils/misc.js'; /** * This service is available inside of maintenance mode to manage maintenance mode diff --git a/server/src/middleware/asset-upload.interceptor.ts b/server/src/middleware/asset-upload.interceptor.ts index 0f1eaa4ce..c8fe7793c 100644 --- a/server/src/middleware/asset-upload.interceptor.ts +++ b/server/src/middleware/asset-upload.interceptor.ts @@ -1,11 +1,11 @@ import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; import { Response } from 'express'; import { of } from 'rxjs'; -import { AssetMediaResponseDto, AssetMediaStatus } from 'src/dtos/asset-media-response.dto'; -import { ImmichHeader } from 'src/enum'; -import { AuthenticatedRequest } from 'src/middleware/auth.guard'; -import { AssetMediaService } from 'src/services/asset-media.service'; -import { fromMaybeArray } from 'src/utils/request'; +import { AssetMediaResponseDto, AssetMediaStatus } from 'src/dtos/asset-media-response.dto.js'; +import { ImmichHeader } from 'src/enum.js'; +import { AuthenticatedRequest } from 'src/middleware/auth.guard.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; +import { fromMaybeArray } from 'src/utils/request.js'; @Injectable() export class AssetUploadInterceptor implements NestInterceptor { diff --git a/server/src/middleware/auth.guard.spec.ts b/server/src/middleware/auth.guard.spec.ts index 5b094c03c..abf52a5c1 100644 --- a/server/src/middleware/auth.guard.spec.ts +++ b/server/src/middleware/auth.guard.spec.ts @@ -1,10 +1,10 @@ import { ExecutionContext } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; -import { Authenticated, AuthGuard } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { AuthService } from 'src/services/auth.service'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { Authenticated, AuthGuard } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; class TestController { @Authenticated({ public: true, setup: true }) diff --git a/server/src/middleware/auth.guard.ts b/server/src/middleware/auth.guard.ts index 93bcfe26e..c71655c70 100644 --- a/server/src/middleware/auth.guard.ts +++ b/server/src/middleware/auth.guard.ts @@ -9,11 +9,11 @@ import { import { Reflector } from '@nestjs/core'; import { ApiBearerAuth, ApiCookieAuth, ApiExtension, ApiOkResponse, ApiQuery, ApiSecurity } from '@nestjs/swagger'; import { Request } from 'express'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiCustomExtension, ImmichQuery, MetadataKey, Permission } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { AuthService, LoginDetails } from 'src/services/auth.service'; -import { getUserAgentDetails } from 'src/utils/request'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiCustomExtension, ImmichQuery, MetadataKey, Permission } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { AuthService, LoginDetails } from 'src/services/auth.service.js'; +import { getUserAgentDetails } from 'src/utils/request.js'; type AdminRoute = { admin?: true }; type SharedLinkRoute = { sharedLink?: true }; diff --git a/server/src/middleware/error.interceptor.ts b/server/src/middleware/error.interceptor.ts index 2cf5369e9..970db4ac0 100644 --- a/server/src/middleware/error.interceptor.ts +++ b/server/src/middleware/error.interceptor.ts @@ -7,9 +7,9 @@ import { } from '@nestjs/common'; import { Request } from 'express'; import { Observable, catchError, throwError } from 'rxjs'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { isHttpException, onRequestError } from 'src/utils/logger'; -import { routeToErrorMessage } from 'src/utils/misc'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { isHttpException, onRequestError } from 'src/utils/logger.js'; +import { routeToErrorMessage } from 'src/utils/misc.js'; @Injectable() export class ErrorInterceptor implements NestInterceptor { diff --git a/server/src/middleware/file-upload.interceptor.ts b/server/src/middleware/file-upload.interceptor.ts index cd9559001..5c8a3d8d5 100644 --- a/server/src/middleware/file-upload.interceptor.ts +++ b/server/src/middleware/file-upload.interceptor.ts @@ -8,14 +8,14 @@ import { createHash, randomUUID } from 'node:crypto'; import { join } from 'node:path'; import { pipeline } from 'node:stream'; import { Observable } from 'rxjs'; -import { UploadFieldName } from 'src/dtos/asset-media.dto'; -import { RouteKey } from 'src/enum'; -import { AuthRequest } from 'src/middleware/auth.guard'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { AssetMediaService } from 'src/services/asset-media.service'; -import { ImmichFile, UploadFile, UploadFiles } from 'src/types'; -import { asUploadRequest, mapToUploadFile } from 'src/utils/asset.util'; +import { UploadFieldName } from 'src/dtos/asset-media.dto.js'; +import { RouteKey } from 'src/enum.js'; +import { AuthRequest } from 'src/middleware/auth.guard.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; +import type { ImmichFile, UploadFile, UploadFiles } from 'src/types.js'; +import { asUploadRequest, mapToUploadFile } from 'src/utils/asset.util.js'; export function getFile(files: UploadFiles, property: 'assetData' | 'sidecarData') { const file = files[property]?.[0]; diff --git a/server/src/middleware/global-exception.filter.ts b/server/src/middleware/global-exception.filter.ts index 67bba5c35..f232136c1 100644 --- a/server/src/middleware/global-exception.filter.ts +++ b/server/src/middleware/global-exception.filter.ts @@ -2,9 +2,9 @@ import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/co import { Request, Response } from 'express'; import { ClsService } from 'nestjs-cls'; import { ZodSerializationException, ZodValidationException } from 'nestjs-zod'; -import { ImmichHeader } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { onRequestError } from 'src/utils/logger'; +import { ImmichHeader } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { onRequestError } from 'src/utils/logger.js'; import { ZodError } from 'zod'; @Catch() diff --git a/server/src/middleware/logging.interceptor.ts b/server/src/middleware/logging.interceptor.ts index fe0daeed0..d1cd9c0e4 100644 --- a/server/src/middleware/logging.interceptor.ts +++ b/server/src/middleware/logging.interceptor.ts @@ -1,7 +1,7 @@ import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; import { Request, Response } from 'express'; import { Observable, finalize } from 'rxjs'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; const maxArrayLength = 100; const replacer = (key: string, value: unknown) => { diff --git a/server/src/middleware/websocket.adapter.ts b/server/src/middleware/websocket.adapter.ts index 64bb1f9ea..cedaabc51 100644 --- a/server/src/middleware/websocket.adapter.ts +++ b/server/src/middleware/websocket.adapter.ts @@ -3,7 +3,7 @@ import { IoAdapter } from '@nestjs/platform-socket.io'; import { createAdapter } from '@socket.io/redis-adapter'; import { Redis } from 'ioredis'; import { ServerOptions } from 'socket.io'; -import { ConfigRepository } from 'src/repositories/config.repository'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; export class WebSocketAdapter extends IoAdapter { constructor(private app: INestApplicationContext) { diff --git a/server/src/repositories/access.repository.ts b/server/src/repositories/access.repository.ts index 9acb8c3fc..3c1e5c694 100644 --- a/server/src/repositories/access.repository.ts +++ b/server/src/repositories/access.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Kysely, NotNull, sql } from 'kysely'; +import { type Kysely, type NotNull, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { ChunkedSet, DummyValue, GenerateSql } from 'src/decorators'; -import { AlbumUserRole, AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; -import { asUuid } from 'src/utils/database'; +import { ChunkedSet, DummyValue, GenerateSql } from 'src/decorators.js'; +import { AlbumUserRole, AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { asUuid } from 'src/utils/database.js'; class ActivityAccess { constructor(private db: Kysely) {} diff --git a/server/src/repositories/activity.repository.ts b/server/src/repositories/activity.repository.ts index 69fa02f59..45382d6d1 100644 --- a/server/src/repositories/activity.repository.ts +++ b/server/src/repositories/activity.repository.ts @@ -1,13 +1,13 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, NotNull, sql } from 'kysely'; +import { type Insertable, type Kysely, type NotNull, sql } from 'kysely'; import { jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; -import { ActivityTable } from 'src/schema/tables/activity.table'; -import { asUuid, dummy } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { ActivityTable } from 'src/schema/tables/activity.table.js'; +import { asUuid, dummy } from 'src/utils/database.js'; export interface ActivitySearch { albumId?: string; diff --git a/server/src/repositories/album-user.repository.ts b/server/src/repositories/album-user.repository.ts index 558a0c05d..7d6b84d26 100644 --- a/server/src/repositories/album-user.repository.ts +++ b/server/src/repositories/album-user.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, Updateable } from 'kysely'; +import type { Insertable, Kysely, Updateable } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AlbumUserRole } from 'src/enum'; -import { DB } from 'src/schema'; -import { AlbumUserTable } from 'src/schema/tables/album-user.table'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AlbumUserRole } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { AlbumUserTable } from 'src/schema/tables/album-user.table.js'; export type AlbumPermissionId = { albumId: string; diff --git a/server/src/repositories/album.repository.ts b/server/src/repositories/album.repository.ts index ced4357ff..722dfa849 100644 --- a/server/src/repositories/album.repository.ts +++ b/server/src/repositories/album.repository.ts @@ -1,24 +1,24 @@ import { Injectable } from '@nestjs/common'; import { - ExpressionBuilder, - Insertable, - Kysely, - NotNull, - Selectable, - ShallowDehydrateObject, + type ExpressionBuilder, + type Insertable, + type Kysely, + type NotNull, + type Selectable, + type ShallowDehydrateObject, sql, - Updateable, + type Updateable, } from 'kysely'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { Chunked, ChunkedArray, ChunkedSet, DummyValue, GenerateSql } from 'src/decorators'; -import { AlbumUserCreateDto, MapAlbumDto } from 'src/dtos/album.dto'; -import { AlbumUserRole } from 'src/enum'; -import { DB } from 'src/schema'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { asUuid, dummy, withDefaultVisibility } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { Chunked, ChunkedArray, ChunkedSet, DummyValue, GenerateSql } from 'src/decorators.js'; +import { AlbumUserCreateDto, MapAlbumDto } from 'src/dtos/album.dto.js'; +import { AlbumUserRole } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { asUuid, dummy, withDefaultVisibility } from 'src/utils/database.js'; export interface AlbumAssetCount { albumId: string; diff --git a/server/src/repositories/api-key.repository.ts b/server/src/repositories/api-key.repository.ts index 1e0d13f16..7db2e7dd7 100644 --- a/server/src/repositories/api-key.repository.ts +++ b/server/src/repositories/api-key.repository.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, Updateable } from 'kysely'; +import type { Insertable, Kysely, Updateable } from 'kysely'; import { jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { ApiKeyTable } from 'src/schema/tables/api-key.table'; -import { asUuid } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { ApiKeyTable } from 'src/schema/tables/api-key.table.js'; +import { asUuid } from 'src/utils/database.js'; @Injectable() export class ApiKeyRepository { diff --git a/server/src/repositories/app.repository.ts b/server/src/repositories/app.repository.ts index 96e413232..0cc671ddb 100644 --- a/server/src/repositories/app.repository.ts +++ b/server/src/repositories/app.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; import { createAdapter } from '@socket.io/redis-adapter'; -import Redis from 'ioredis'; +import { Redis } from 'ioredis'; import { Server as SocketIO } from 'socket.io'; -import { ExitCode } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { AppRestartEvent } from 'src/repositories/event.repository'; +import { ExitCode } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { AppRestartEvent } from 'src/repositories/event.repository.js'; @Injectable() export class AppRepository { diff --git a/server/src/repositories/asset-edit.repository.ts b/server/src/repositories/asset-edit.repository.ts index 164ebec6b..dd612b1ad 100644 --- a/server/src/repositories/asset-edit.repository.ts +++ b/server/src/repositories/asset-edit.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Kysely } from 'kysely'; +import type { Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetEditActionItem, AssetEditActionItemResponseDto } from 'src/dtos/editing.dto'; -import { DB } from 'src/schema'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetEditActionItem, AssetEditActionItemResponseDto } from 'src/dtos/editing.dto.js'; +import { DB } from 'src/schema/index.js'; @Injectable() export class AssetEditRepository { diff --git a/server/src/repositories/asset-file.repository.ts b/server/src/repositories/asset-file.repository.ts index ac0f51e60..b96096c4d 100644 --- a/server/src/repositories/asset-file.repository.ts +++ b/server/src/repositories/asset-file.repository.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { Kysely } from 'kysely'; +import type { Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { AssetFileSearchDto } from 'src/dtos/asset-file.dto'; -import { DB } from 'src/schema'; +import { AssetFileSearchDto } from 'src/dtos/asset-file.dto.js'; +import { DB } from 'src/schema/index.js'; @Injectable() export class AssetFileRepository { diff --git a/server/src/repositories/asset-job.repository.ts b/server/src/repositories/asset-job.repository.ts index c2be9d12e..2ce63e610 100644 --- a/server/src/repositories/asset-job.repository.ts +++ b/server/src/repositories/asset-job.repository.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { Kysely, sql } from 'kysely'; +import { type Kysely, sql } from 'kysely'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetFileType, AssetStatus, AssetType, AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetFileType, AssetStatus, AssetType, AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; import { anyUuid, asUuid, @@ -19,8 +19,8 @@ import { withFiles, withVideoFormat, withVideoStream, -} from 'src/utils/database'; -import { mimeTypes } from 'src/utils/mime-types'; +} from 'src/utils/database.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; @Injectable() export class AssetJobRepository { diff --git a/server/src/repositories/asset.repository.ts b/server/src/repositories/asset.repository.ts index 6b62402a2..a980fd168 100644 --- a/server/src/repositories/asset.repository.ts +++ b/server/src/repositories/asset.repository.ts @@ -1,22 +1,22 @@ import { Injectable } from '@nestjs/common'; import { - ExpressionBuilder, - Insertable, - Kysely, - NotNull, - Selectable, - SelectQueryBuilder, - ShallowDehydrateObject, + type ExpressionBuilder, + type Insertable, + type Kysely, + type NotNull, + type Selectable, + type SelectQueryBuilder, + type ShallowDehydrateObject, sql, - Updateable, + type Updateable, UpdateResult, } from 'kysely'; import { jsonArrayFrom } from 'kysely/helpers/postgres'; -import { isEmpty, isUndefined, omitBy } from 'lodash'; +import { isEmpty, isUndefined, omitBy } from 'lodash-es'; import { InjectKysely } from 'nestjs-kysely'; -import { LockableProperty, Stack } from 'src/database'; -import { Chunked, ChunkedArray, DummyValue, GenerateSql } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { LockableProperty, Stack } from 'src/database.js'; +import { Chunked, ChunkedArray, DummyValue, GenerateSql } from 'src/decorators.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; import { AssetFileType, AssetOrder, @@ -25,14 +25,14 @@ import { AssetType, AssetVisibility, CalendarHeatmapType, -} from 'src/enum'; -import { DB } from 'src/schema'; -import { AssetAudioTable, AssetKeyframeTable, AssetVideoTable } from 'src/schema/tables/asset-av.table'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { AssetJobStatusTable } from 'src/schema/tables/asset-job-status.table'; -import { AssetMetadataTable } from 'src/schema/tables/asset-metadata.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; +} from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { AssetAudioTable, AssetKeyframeTable, AssetVideoTable } from 'src/schema/tables/asset-av.table.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { AssetJobStatusTable } from 'src/schema/tables/asset-job-status.table.js'; +import { AssetMetadataTable } from 'src/schema/tables/asset-metadata.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; import { anyUuid, asUuid, @@ -53,8 +53,8 @@ import { withSmartSearch, withTagId, withTags, -} from 'src/utils/database'; -import { globToPostgresRegex } from 'src/utils/misc'; +} from 'src/utils/database.js'; +import { globToPostgresRegex } from 'src/utils/misc.js'; export type AssetStats = Record; diff --git a/server/src/repositories/cluster-group.repository.ts b/server/src/repositories/cluster-group.repository.ts index 821870b34..5caeb9d28 100644 --- a/server/src/repositories/cluster-group.repository.ts +++ b/server/src/repositories/cluster-group.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, sql } from 'kysely'; +import { type Insertable, type Kysely, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { ClusterGroupRequestTable } from 'src/schema/tables/cluster-group-request.table'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { ClusterGroupRequestTable } from 'src/schema/tables/cluster-group-request.table.js'; @Injectable() export class ClusterGroupRepository { diff --git a/server/src/repositories/config.repository.spec.ts b/server/src/repositories/config.repository.spec.ts index 3c579a1a9..84a45291b 100644 --- a/server/src/repositories/config.repository.spec.ts +++ b/server/src/repositories/config.repository.spec.ts @@ -1,5 +1,5 @@ -import { ImmichTelemetry } from 'src/enum'; -import { clearEnvCache, ConfigRepository } from 'src/repositories/config.repository'; +import { ImmichTelemetry } from 'src/enum.js'; +import { clearEnvCache, ConfigRepository } from 'src/repositories/config.repository.js'; const getEnv = () => { clearEnvCache(); diff --git a/server/src/repositories/config.repository.ts b/server/src/repositories/config.repository.ts index 909d6d62d..16b0bfe80 100644 --- a/server/src/repositories/config.repository.ts +++ b/server/src/repositories/config.repository.ts @@ -6,12 +6,12 @@ import { Request, Response } from 'express'; import { HelmetOptions } from 'helmet'; import { RedisOptions } from 'ioredis'; import { CLS_ID, ClsModuleOptions } from 'nestjs-cls'; -import { OpenTelemetryModuleOptions } from 'nestjs-otel/lib/interfaces'; +import { OpenTelemetryModuleOptions } from 'nestjs-otel/lib/interfaces/index.js'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; -import { citiesFile, IWorker } from 'src/constants'; -import { Telemetry } from 'src/decorators'; -import { EnvSchema } from 'src/dtos/env.dto'; +import { citiesFile, IWorker } from 'src/constants.js'; +import { Telemetry } from 'src/decorators.js'; +import { EnvSchema } from 'src/dtos/env.dto.js'; import { DatabaseExtension, ImmichEnvironment, @@ -21,9 +21,9 @@ import { LogFormat, LogLevel, QueueName, -} from 'src/enum'; -import { VectorExtension } from 'src/types'; -import { setDifference } from 'src/utils/set'; +} from 'src/enum.js'; +import type { VectorExtension } from 'src/types.js'; +import { setDifference } from 'src/utils/set.js'; export interface EnvData { host?: string; @@ -157,11 +157,7 @@ const resolveHelmetFile = (helmetFile: 'true' | 'false' | string | undefined) => return; } - helmetFile = - helmetFile === 'true' - ? // eslint-disable-next-line unicorn/prefer-module - join(__dirname, '..', '..', 'helmet.json') - : helmetFile; + helmetFile = helmetFile === 'true' ? join(import.meta.dirname, '..', '..', 'helmet.json') : helmetFile; try { return JSON.parse(readFileSync(helmetFile).toString()) as HelmetOptions; diff --git a/server/src/repositories/cron.repository.ts b/server/src/repositories/cron.repository.ts index 03fecca9a..7d43ee7b8 100644 --- a/server/src/repositories/cron.repository.ts +++ b/server/src/repositories/cron.repository.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { SchedulerRegistry } from '@nestjs/schedule'; import { CronJob, CronTime } from 'cron'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; type CronBase = { name: string; diff --git a/server/src/repositories/database.repository.ts b/server/src/repositories/database.repository.ts index 165752783..bc521a96b 100644 --- a/server/src/repositories/database.repository.ts +++ b/server/src/repositories/database.repository.ts @@ -1,7 +1,8 @@ import { schemaDiff, schemaFromCode, schemaFromDatabase } from '@immich/sql-tools'; import { Injectable } from '@nestjs/common'; import AsyncLock from 'async-lock'; -import { FileMigrationProvider, Kysely, Migrator, sql } from 'kysely'; +import { Kysely, sql } from 'kysely'; +import { FileMigrationProvider, Migrator } from 'kysely/migration'; import { InjectKysely } from 'nestjs-kysely'; import { readdir } from 'node:fs/promises'; import { join } from 'node:path'; @@ -15,16 +16,16 @@ import { VECTOR_VERSION_RANGE, VECTORCHORD_LIST_SLACK_FACTOR, VECTORCHORD_VERSION_RANGE, -} from 'src/constants'; -import { GenerateSql } from 'src/decorators'; -import { DatabaseExtension, DatabaseLock, VectorIndex } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import 'src/schema'; // make sure all schema definitions are imported for schemaFromCode -import { DB } from 'src/schema'; -import { immich_uuid_v7 } from 'src/schema/functions'; -import { ExtensionVersion, VectorExtension } from 'src/types'; -import { vectorIndexQuery } from 'src/utils/database'; +} from 'src/constants.js'; +import { GenerateSql } from 'src/decorators.js'; +import { DatabaseExtension, DatabaseLock, VectorIndex } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { immich_uuid_v7 } from 'src/schema/functions.js'; +import 'src/schema/index.js'; // make sure all schema definitions are imported for schemaFromCode +import { DB } from 'src/schema/index.js'; +import type { ExtensionVersion, VectorExtension } from 'src/types.js'; +import { vectorIndexQuery } from 'src/utils/database.js'; import z from 'zod'; export let cachedVectorExtension: VectorExtension | undefined; @@ -492,8 +493,8 @@ export class DatabaseRepository { provider: new FileMigrationProvider({ fs: { readdir }, path: { join }, - // eslint-disable-next-line unicorn/prefer-module - migrationFolder: join(__dirname, '..', 'schema/migrations'), + import: (filePath) => import(filePath), + migrationFolder: join(import.meta.dirname, '..', 'schema/migrations'), }), }); } diff --git a/server/src/repositories/download.repository.ts b/server/src/repositories/download.repository.ts index 61a0f23d5..88bf8141c 100644 --- a/server/src/repositories/download.repository.ts +++ b/server/src/repositories/download.repository.ts @@ -1,9 +1,9 @@ import { Injectable } from '@nestjs/common'; import { Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; -import { anyUuid } from 'src/utils/database'; +import { AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { anyUuid } from 'src/utils/database.js'; const builder = (db: Kysely) => db diff --git a/server/src/repositories/duplicate.repository.ts b/server/src/repositories/duplicate.repository.ts index 6a9b4e908..7b4682e85 100644 --- a/server/src/repositories/duplicate.repository.ts +++ b/server/src/repositories/duplicate.repository.ts @@ -1,15 +1,15 @@ import { Injectable } from '@nestjs/common'; -import { Kysely, NotNull, Selectable, ShallowDehydrateObject, sql } from 'kysely'; +import { type Kysely, type NotNull, type Selectable, type ShallowDehydrateObject, sql } from 'kysely'; import { jsonArrayFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { Chunked, DummyValue, GenerateSql } from 'src/decorators'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { AssetType, VectorIndex } from 'src/enum'; -import { probes } from 'src/repositories/database.repository'; -import { DB } from 'src/schema'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { anyUuid, asUuid, withDefaultVisibility } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { Chunked, DummyValue, GenerateSql } from 'src/decorators.js'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { AssetType, VectorIndex } from 'src/enum.js'; +import { probes } from 'src/repositories/database.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { anyUuid, asUuid, withDefaultVisibility } from 'src/utils/database.js'; // Maximum number of candidate duplicates to return from vector search const DUPLICATE_SEARCH_LIMIT = 64; diff --git a/server/src/repositories/email.repository.spec.ts b/server/src/repositories/email.repository.spec.ts index 5640b26bf..e9d7e4dee 100644 --- a/server/src/repositories/email.repository.spec.ts +++ b/server/src/repositories/email.repository.spec.ts @@ -1,6 +1,6 @@ -import { EmailRenderRequest, EmailRepository, EmailTemplate } from 'src/repositories/email.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { automock } from 'test/utils'; +import { EmailRenderRequest, EmailRepository, EmailTemplate } from 'src/repositories/email.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { automock } from 'test/utils.js'; describe(EmailRepository.name, () => { let sut: EmailRepository; diff --git a/server/src/repositories/email.repository.ts b/server/src/repositories/email.repository.ts index a0cc23661..85a439dc4 100644 --- a/server/src/repositories/email.repository.ts +++ b/server/src/repositories/email.repository.ts @@ -2,12 +2,12 @@ import { Injectable } from '@nestjs/common'; import { render } from '@react-email/render'; import { createTransport } from 'nodemailer'; import React from 'react'; -import { AlbumInviteEmail } from 'src/emails/album-invite.email'; -import { AlbumUpdateEmail } from 'src/emails/album-update.email'; -import { TestEmail } from 'src/emails/test.email'; -import { WelcomeEmail } from 'src/emails/welcome.email'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { EmailImageAttachment } from 'src/types'; +import { AlbumInviteEmail } from 'src/emails/album-invite.email.js'; +import { AlbumUpdateEmail } from 'src/emails/album-update.email.js'; +import { TestEmail } from 'src/emails/test.email.js'; +import { WelcomeEmail } from 'src/emails/welcome.email.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { EmailImageAttachment } from 'src/types.js'; export type SendEmailOptions = { from: string; diff --git a/server/src/repositories/event.repository.ts b/server/src/repositories/event.repository.ts index 4ce5f7fbd..a54ed9d93 100644 --- a/server/src/repositories/event.repository.ts +++ b/server/src/repositories/event.repository.ts @@ -1,15 +1,15 @@ import { Injectable } from '@nestjs/common'; import { ModuleRef, Reflector } from '@nestjs/core'; -import _ from 'lodash'; +import { orderBy } from 'lodash-es'; import { Socket } from 'socket.io'; -import { Asset } from 'src/database'; -import { EventConfig } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { ImmichWorker, JobStatus, MetadataKey, QueueName, UserAvatarColor, UserStatus } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { JobItem, JobSource, UploadFile } from 'src/types'; +import { Asset } from 'src/database.js'; +import { EventConfig } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { ImmichWorker, JobStatus, MetadataKey, QueueName, UserAvatarColor, UserStatus } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { JobItem, JobSource, UploadFile } from 'src/types.js'; type EmitHandlers = Partial<{ [T in EmitEvent]: Array> }>; @@ -205,7 +205,7 @@ export class EventRepository { } } - const handlers = _.orderBy(items, ['priority'], ['asc']); + const handlers = orderBy(items, ['priority'], ['asc']); // register by priority for (const handler of handlers) { diff --git a/server/src/repositories/index.ts b/server/src/repositories/index.ts index 606f3b8b5..ddd80b77b 100644 --- a/server/src/repositories/index.ts +++ b/server/src/repositories/index.ts @@ -1,58 +1,58 @@ -import { AccessRepository } from 'src/repositories/access.repository'; -import { ActivityRepository } from 'src/repositories/activity.repository'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { ApiKeyRepository } from 'src/repositories/api-key.repository'; -import { AppRepository } from 'src/repositories/app.repository'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { AssetFileRepository } from 'src/repositories/asset-file.repository'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CronRepository } from 'src/repositories/cron.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { DownloadRepository } from 'src/repositories/download.repository'; -import { DuplicateRepository } from 'src/repositories/duplicate.repository'; -import { EmailRepository } from 'src/repositories/email.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { IntegrityRepository } from 'src/repositories/integrity.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LibraryRepository } from 'src/repositories/library.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { MapRepository } from 'src/repositories/map.repository'; -import { MediaRepository } from 'src/repositories/media.repository'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { MoveRepository } from 'src/repositories/move.repository'; -import { NotificationRepository } from 'src/repositories/notification.repository'; -import { OAuthRepository } from 'src/repositories/oauth.repository'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { ProcessRepository } from 'src/repositories/process.repository'; -import { SearchRepository } from 'src/repositories/search.repository'; -import { ServerInfoRepository } from 'src/repositories/server-info.repository'; -import { SessionRepository } from 'src/repositories/session.repository'; -import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository'; -import { SyncRepository } from 'src/repositories/sync.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { TrashRepository } from 'src/repositories/trash.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { VersionHistoryRepository } from 'src/repositories/version-history.repository'; -import { VideoStreamRepository } from 'src/repositories/video-stream.repository'; -import { ViewRepository } from 'src/repositories/view-repository'; -import { WebsocketRepository } from 'src/repositories/websocket.repository'; -import { WorkflowRepository } from 'src/repositories/workflow.repository'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ActivityRepository } from 'src/repositories/activity.repository.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { ApiKeyRepository } from 'src/repositories/api-key.repository.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { AssetFileRepository } from 'src/repositories/asset-file.repository.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CronRepository } from 'src/repositories/cron.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { DownloadRepository } from 'src/repositories/download.repository.js'; +import { DuplicateRepository } from 'src/repositories/duplicate.repository.js'; +import { EmailRepository } from 'src/repositories/email.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { IntegrityRepository } from 'src/repositories/integrity.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LibraryRepository } from 'src/repositories/library.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { MapRepository } from 'src/repositories/map.repository.js'; +import { MediaRepository } from 'src/repositories/media.repository.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import { MoveRepository } from 'src/repositories/move.repository.js'; +import { NotificationRepository } from 'src/repositories/notification.repository.js'; +import { OAuthRepository } from 'src/repositories/oauth.repository.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; +import { SearchRepository } from 'src/repositories/search.repository.js'; +import { ServerInfoRepository } from 'src/repositories/server-info.repository.js'; +import { SessionRepository } from 'src/repositories/session.repository.js'; +import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository.js'; +import { SyncRepository } from 'src/repositories/sync.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import { TrashRepository } from 'src/repositories/trash.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { VersionHistoryRepository } from 'src/repositories/version-history.repository.js'; +import { VideoStreamRepository } from 'src/repositories/video-stream.repository.js'; +import { ViewRepository } from 'src/repositories/view-repository.js'; +import { WebsocketRepository } from 'src/repositories/websocket.repository.js'; +import { WorkflowRepository } from 'src/repositories/workflow.repository.js'; export const repositories = [ AccessRepository, diff --git a/server/src/repositories/integrity.repository.ts b/server/src/repositories/integrity.repository.ts index 2599da47b..ded2f4f8d 100644 --- a/server/src/repositories/integrity.repository.ts +++ b/server/src/repositories/integrity.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, sql } from 'kysely'; +import { type Insertable, type Kysely, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetFileType, IntegrityReport } from 'src/enum'; -import { DB } from 'src/schema'; -import { IntegrityReportTable } from 'src/schema/tables/integrity-report.table'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetFileType, IntegrityReport } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { IntegrityReportTable } from 'src/schema/tables/integrity-report.table.js'; export type ReportPaginationOptions = { cursor?: string; diff --git a/server/src/repositories/job.repository.ts b/server/src/repositories/job.repository.ts index e925bd503..e38a584ca 100644 --- a/server/src/repositories/job.repository.ts +++ b/server/src/repositories/job.repository.ts @@ -3,14 +3,14 @@ import { Injectable } from '@nestjs/common'; import { ModuleRef, Reflector } from '@nestjs/core'; import { JobsOptions, Queue, Worker } from 'bullmq'; import { setTimeout } from 'node:timers/promises'; -import { JobConfig } from 'src/decorators'; -import { QueueJobResponseDto, QueueJobSearchDto } from 'src/dtos/queue.dto'; -import { ImmichWorker, JobName, JobStatus, MetadataKey, QueueCleanType, QueueJobStatus, QueueName } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { JobCounts, JobItem, JobOf } from 'src/types'; -import { getKeyByValue, getMethodNames, ImmichStartupError } from 'src/utils/misc'; +import { JobConfig } from 'src/decorators.js'; +import { QueueJobResponseDto, QueueJobSearchDto } from 'src/dtos/queue.dto.js'; +import { ImmichWorker, JobName, JobStatus, MetadataKey, QueueCleanType, QueueJobStatus, QueueName } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { JobCounts, JobItem, JobOf } from 'src/types.js'; +import { getKeyByValue, getMethodNames, ImmichStartupError } from 'src/utils/misc.js'; type JobMapItem = { jobName: JobName; diff --git a/server/src/repositories/library.repository.ts b/server/src/repositories/library.repository.ts index 60777fee8..9597e1dd4 100644 --- a/server/src/repositories/library.repository.ts +++ b/server/src/repositories/library.repository.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, sql, Updateable } from 'kysely'; +import { type Insertable, type Kysely, sql, type Updateable } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { LibraryStatsResponseDto } from 'src/dtos/library.dto'; -import { AssetType, AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; -import { LibraryTable } from 'src/schema/tables/library.table'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { LibraryStatsResponseDto } from 'src/dtos/library.dto.js'; +import { AssetType, AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { LibraryTable } from 'src/schema/tables/library.table.js'; export enum AssetSyncResult { DO_NOTHING, diff --git a/server/src/repositories/logging.repository.spec.ts b/server/src/repositories/logging.repository.spec.ts index 9e7317cbb..e2365b675 100644 --- a/server/src/repositories/logging.repository.spec.ts +++ b/server/src/repositories/logging.repository.spec.ts @@ -1,8 +1,8 @@ import { ClsService } from 'nestjs-cls'; -import { ImmichWorker } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository, MyConsoleLogger } from 'src/repositories/logging.repository'; -import { newConfigRepositoryMock } from 'test/repositories/config.repository.mock'; +import { ImmichWorker } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository, MyConsoleLogger } from 'src/repositories/logging.repository.js'; +import { newConfigRepositoryMock } from 'test/repositories/config.repository.mock.js'; import { Mocked } from 'vitest'; describe(LoggingRepository.name, () => { diff --git a/server/src/repositories/logging.repository.ts b/server/src/repositories/logging.repository.ts index f3da39c97..12d408045 100644 --- a/server/src/repositories/logging.repository.ts +++ b/server/src/repositories/logging.repository.ts @@ -1,9 +1,9 @@ import { ConsoleLogger, Inject, Injectable, Scope } from '@nestjs/common'; import { isLogLevelEnabled } from '@nestjs/common/services/utils/is-log-level-enabled.util'; import { ClsService } from 'nestjs-cls'; -import { Telemetry } from 'src/decorators'; -import { LogFormat, LogLevel } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; +import { Telemetry } from 'src/decorators.js'; +import { LogFormat, LogLevel } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; type LogDetails = any; type LogFunction = () => string; diff --git a/server/src/repositories/machine-learning.repository.ts b/server/src/repositories/machine-learning.repository.ts index 208a43aea..7c52778eb 100644 --- a/server/src/repositories/machine-learning.repository.ts +++ b/server/src/repositories/machine-learning.repository.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { Duration } from 'luxon'; import { readFile } from 'node:fs/promises'; -import { MachineLearningConfig } from 'src/dtos/config.dto'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { MachineLearningConfig } from 'src/dtos/config.dto.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; export interface BoundingBox { x1: number; diff --git a/server/src/repositories/map.repository.ts b/server/src/repositories/map.repository.ts index 3d0147443..6f7ea6ad1 100644 --- a/server/src/repositories/map.repository.ts +++ b/server/src/repositories/map.repository.ts @@ -1,19 +1,19 @@ import { Injectable } from '@nestjs/common'; -import { getName } from 'i18n-iso-countries'; -import { Expression, Insertable, Kysely, NotNull, sql, SqlBool } from 'kysely'; +import isoCountries from 'i18n-iso-countries'; +import { type Expression, type Insertable, type Kysely, type NotNull, sql, type SqlBool } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; import { createReadStream, existsSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import readLine from 'node:readline'; -import { citiesFile, reverseGeocodeMaxDistance } from 'src/constants'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetVisibility, SystemMetadataKey } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { DB } from 'src/schema'; -import { GeodataPlacesTable } from 'src/schema/tables/geodata-places.table'; -import { NaturalEarthCountriesTable } from 'src/schema/tables/natural-earth-countries.table'; +import { citiesFile, reverseGeocodeMaxDistance } from 'src/constants.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetVisibility, SystemMetadataKey } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { DB } from 'src/schema/index.js'; +import { GeodataPlacesTable } from 'src/schema/tables/geodata-places.table.js'; +import { NaturalEarthCountriesTable } from 'src/schema/tables/natural-earth-countries.table.js'; export interface MapMarkerSearchOptions { isArchived?: boolean; @@ -166,7 +166,7 @@ export class MapRepository { this.logger.verboseFn(() => `Raw: ${JSON.stringify(response, null, 2)}`); const { countryCode, name: city, admin1Name } = response; - const country = getName(countryCode, 'en') ?? null; + const country = isoCountries.getName(countryCode, 'en') ?? null; const state = admin1Name; return { country, state, city }; @@ -194,7 +194,7 @@ export class MapRepository { this.logger.verboseFn(() => `Raw: ${JSON.stringify(ne_response, ['id', 'admin', 'admin_a3', 'type'], 2)}`); const { admin_a3 } = ne_response; - const country = getName(admin_a3, 'en') ?? null; + const country = isoCountries.getName(admin_a3, 'en') ?? null; const state = null; const city = null; diff --git a/server/src/repositories/media.repository.spec.ts b/server/src/repositories/media.repository.spec.ts index 116f8af59..866b073e9 100644 --- a/server/src/repositories/media.repository.spec.ts +++ b/server/src/repositories/media.repository.spec.ts @@ -2,11 +2,11 @@ import { mkdtempDisposableSync, statSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import sharp from 'sharp'; -import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto'; -import { Colorspace, ImageFormat } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MediaRepository } from 'src/repositories/media.repository'; -import { automock } from 'test/utils'; +import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto.js'; +import { Colorspace, ImageFormat } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MediaRepository } from 'src/repositories/media.repository.js'; +import { automock } from 'test/utils.js'; const getPixelColor = async (buffer: Buffer, x: number, y: number) => { const metadata = await sharp(buffer).metadata(); diff --git a/server/src/repositories/media.repository.ts b/server/src/repositories/media.repository.ts index 1100e856b..228736aa7 100644 --- a/server/src/repositories/media.repository.ts +++ b/server/src/repositories/media.repository.ts @@ -1,15 +1,15 @@ import { Injectable } from '@nestjs/common'; import { ExifDateTime, exiftool, WriteTags } from 'exiftool-vendored'; import ffmpeg, { FfprobeData, FfprobeStream } from 'fluent-ffmpeg'; -import _ from 'lodash'; +import { camelCase, upperFirst } from 'lodash-es'; import { Duration } from 'luxon'; import { spawn } from 'node:child_process'; import fs from 'node:fs/promises'; import { Writable } from 'node:stream'; -import sharp from 'sharp'; -import { ORIENTATION_TO_SHARP_ROTATION } from 'src/constants'; -import { Exif } from 'src/database'; -import { AssetEditActionItem } from 'src/dtos/editing.dto'; +import sharp, { Sharp } from 'sharp'; +import { ORIENTATION_TO_SHARP_ROTATION } from 'src/constants.js'; +import { Exif } from 'src/database.js'; +import { AssetEditActionItem } from 'src/dtos/editing.dto.js'; import { AacProfile, Av1Profile, @@ -23,9 +23,9 @@ import { HevcProfile, LogLevel, RawExtractedFormat, -} from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { +} from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import type { DecodeToBufferOptions, GenerateThumbhashOptions, GenerateThumbnailOptions, @@ -34,16 +34,16 @@ import { TranscodeCommand, VideoInfo, VideoPacketInfo, -} from 'src/types'; -import { handlePromiseError } from 'src/utils/misc'; -import { createAffineMatrix } from 'src/utils/transform'; +} from 'src/types.js'; +import { handlePromiseError } from 'src/utils/misc.js'; +import { createAffineMatrix } from 'src/utils/transform.js'; const probe = (input: string, options: string[]): Promise => new Promise((resolve, reject) => ffmpeg.ffprobe(input, options, (error, data) => (error ? reject(error) : resolve(data))), ); -const pascalCase = (str: string) => _.upperFirst(_.camelCase(str.toLowerCase())); +const pascalCase = (str: string) => upperFirst(camelCase(str.toLowerCase())); type ProgressEvent = { frames: number; @@ -149,7 +149,7 @@ export class MediaRepository { return this.getImageDecodingPipeline(input, options).raw().toBuffer({ resolveWithObject: true }); } - private applyEdits(pipeline: sharp.Sharp, edits: AssetEditActionItem[]): sharp.Sharp { + private applyEdits(pipeline: Sharp, edits: AssetEditActionItem[]): Sharp { const crop = edits.find((edit) => edit.action === 'crop'); if (crop) { pipeline = pipeline.extract({ diff --git a/server/src/repositories/memory.repository.ts b/server/src/repositories/memory.repository.ts index b2c84afed..a350bef3d 100644 --- a/server/src/repositories/memory.repository.ts +++ b/server/src/repositories/memory.repository.ts @@ -1,14 +1,14 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, OrderByDirection, sql, Updateable } from 'kysely'; +import { type Insertable, type Kysely, type OrderByDirection, sql, type Updateable } from 'kysely'; import { jsonArrayFrom } from 'kysely/helpers/postgres'; import { DateTime } from 'luxon'; import { InjectKysely } from 'nestjs-kysely'; -import { Chunked, ChunkedSet, DummyValue, GenerateSql } from 'src/decorators'; -import { MemorySearchDto } from 'src/dtos/memory.dto'; -import { AssetOrderWithRandom, AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; -import { MemoryTable } from 'src/schema/tables/memory.table'; -import { IBulkAsset } from 'src/types'; +import { Chunked, ChunkedSet, DummyValue, GenerateSql } from 'src/decorators.js'; +import { MemorySearchDto } from 'src/dtos/memory.dto.js'; +import { AssetOrderWithRandom, AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; +import type { IBulkAsset } from 'src/types.js'; @Injectable() export class MemoryRepository implements IBulkAsset { diff --git a/server/src/repositories/metadata.repository.ts b/server/src/repositories/metadata.repository.ts index c4a3b4f89..96daa4415 100644 --- a/server/src/repositories/metadata.repository.ts +++ b/server/src/repositories/metadata.repository.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { BinaryField, DefaultReadTaskOptions, ExifTool, ReadTaskOptions, Tags } from 'exiftool-vendored'; import geotz from 'geo-tz'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { mimeTypes } from 'src/utils/mime-types'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; interface ExifDuration { Value: number; diff --git a/server/src/repositories/move.repository.ts b/server/src/repositories/move.repository.ts index 2ea69eba2..9e35dd24d 100644 --- a/server/src/repositories/move.repository.ts +++ b/server/src/repositories/move.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, sql, Updateable } from 'kysely'; +import { type Insertable, type Kysely, sql, type Updateable } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetPathType, PathType } from 'src/enum'; -import { DB } from 'src/schema'; -import { MoveTable } from 'src/schema/tables/move.table'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetPathType, type PathType } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { MoveTable } from 'src/schema/tables/move.table.js'; @Injectable() export class MoveRepository { diff --git a/server/src/repositories/notification.repository.ts b/server/src/repositories/notification.repository.ts index e89240341..a9818516e 100644 --- a/server/src/repositories/notification.repository.ts +++ b/server/src/repositories/notification.repository.ts @@ -1,11 +1,11 @@ -import { Insertable, Kysely, Updateable } from 'kysely'; +import type { Insertable, Kysely, Updateable } from 'kysely'; import { DateTime } from 'luxon'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { NotificationSearchDto } from 'src/dtos/notification.dto'; -import { DB } from 'src/schema'; -import { NotificationTable } from 'src/schema/tables/notification.table'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { NotificationSearchDto } from 'src/dtos/notification.dto.js'; +import { DB } from 'src/schema/index.js'; +import { NotificationTable } from 'src/schema/tables/notification.table.js'; export class NotificationRepository { constructor(@InjectKysely() private db: Kysely) {} diff --git a/server/src/repositories/oauth.repository.ts b/server/src/repositories/oauth.repository.ts index bbf7ef00b..e7f1c2c26 100644 --- a/server/src/repositories/oauth.repository.ts +++ b/server/src/repositories/oauth.repository.ts @@ -15,8 +15,8 @@ import { skipSubjectCheck, type UserInfoResponse, } from 'openid-client'; -import { OAuthTokenEndpointAuthMethod } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { OAuthTokenEndpointAuthMethod } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; export type OAuthConfig = { clientId: string; diff --git a/server/src/repositories/ocr.repository.ts b/server/src/repositories/ocr.repository.ts index 916f2643f..df627ae86 100644 --- a/server/src/repositories/ocr.repository.ts +++ b/server/src/repositories/ocr.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, sql } from 'kysely'; +import { type Insertable, type Kysely, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; -import { DB } from 'src/schema'; -import { AssetOcrTable } from 'src/schema/tables/asset-ocr.table'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; +import { DB } from 'src/schema/index.js'; +import { AssetOcrTable } from 'src/schema/tables/asset-ocr.table.js'; @Injectable() export class OcrRepository { diff --git a/server/src/repositories/partner.repository.ts b/server/src/repositories/partner.repository.ts index e386386be..30127ef9f 100644 --- a/server/src/repositories/partner.repository.ts +++ b/server/src/repositories/partner.repository.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { ExpressionBuilder, Insertable, Kysely, NotNull, Updateable } from 'kysely'; +import type { ExpressionBuilder, Insertable, Kysely, NotNull, Updateable } from 'kysely'; import { jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { PartnerTable } from 'src/schema/tables/partner.table'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { PartnerTable } from 'src/schema/tables/partner.table.js'; export interface PartnerIds { sharedById: string; diff --git a/server/src/repositories/person.repository.ts b/server/src/repositories/person.repository.ts index 3e6e6d137..c5ed9fa1d 100644 --- a/server/src/repositories/person.repository.ts +++ b/server/src/repositories/person.repository.ts @@ -1,17 +1,17 @@ import { Injectable } from '@nestjs/common'; -import { ExpressionBuilder, Insertable, Kysely, sql, Updateable } from 'kysely'; +import { type ExpressionBuilder, type Insertable, type Kysely, sql, type Updateable } from 'kysely'; import { jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { AssetFace } from 'src/database'; -import { Chunked, ChunkedArray, DummyValue, GenerateSql } from 'src/decorators'; -import { AssetFileType, AssetVisibility, SourceType, UserMetadataKey } from 'src/enum'; -import { DB } from 'src/schema'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { FaceSearchTable } from 'src/schema/tables/face-search.table'; -import { PersonGroupTable } from 'src/schema/tables/person-group.table'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { asUuid, dummy, inSharedAlbum, removeUndefinedKeys, withFilePath } from 'src/utils/database'; -import { paginationHelper, PaginationOptions } from 'src/utils/pagination'; +import { AssetFace } from 'src/database.js'; +import { Chunked, ChunkedArray, DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetFileType, AssetVisibility, SourceType, UserMetadataKey } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { FaceSearchTable } from 'src/schema/tables/face-search.table.js'; +import { PersonGroupTable } from 'src/schema/tables/person-group.table.js'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { asUuid, dummy, inSharedAlbum, removeUndefinedKeys, withFilePath } from 'src/utils/database.js'; +import { paginationHelper, type PaginationOptions } from 'src/utils/pagination.js'; export interface PersonSearchOptions { withHidden: boolean; diff --git a/server/src/repositories/plugin.repository.ts b/server/src/repositories/plugin.repository.ts index 2b177a38c..b3bedf1cb 100644 --- a/server/src/repositories/plugin.repository.ts +++ b/server/src/repositories/plugin.repository.ts @@ -1,17 +1,17 @@ import { CallContext, Plugin as ExtismPlugin, newPlugin } from '@extism/extism'; import { Injectable } from '@nestjs/common'; import { createPool, Pool } from 'generic-pool'; -import { Insertable, Kysely } from 'kysely'; +import type { Insertable, Kysely } from 'kysely'; import { jsonArrayFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { PluginMethodSearchDto, PluginSearchDto } from 'src/dtos/plugin.dto'; -import { LogLevel, WorkflowType } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { PluginMethodTable } from 'src/schema/tables/plugin-method.table'; -import { PluginTable } from 'src/schema/tables/plugin.table'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { PluginMethodSearchDto, PluginSearchDto } from 'src/dtos/plugin.dto.js'; +import { LogLevel, WorkflowType } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { PluginMethodTable } from 'src/schema/tables/plugin-method.table.js'; +import { PluginTable } from 'src/schema/tables/plugin.table.js'; type PluginMethod = { pluginKey: string; methodName: string }; type PluginLoad = { key: string; label: string; wasmBytes: Buffer }; diff --git a/server/src/repositories/process.repository.spec.ts b/server/src/repositories/process.repository.spec.ts index 3dbe909d2..47ae7a693 100644 --- a/server/src/repositories/process.repository.spec.ts +++ b/server/src/repositories/process.repository.spec.ts @@ -1,7 +1,7 @@ import { ChildProcessWithoutNullStreams } from 'node:child_process'; import { Readable, Writable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; -import { ProcessRepository } from 'src/repositories/process.repository'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; function* data() { yield 'Hello, world!'; diff --git a/server/src/repositories/search.repository.ts b/server/src/repositories/search.repository.ts index 0956e34d4..9ec789cad 100644 --- a/server/src/repositories/search.repository.ts +++ b/server/src/repositories/search.repository.ts @@ -1,14 +1,14 @@ import { Injectable } from '@nestjs/common'; -import { Kysely, OrderByDirection, Selectable, ShallowDehydrateObject, sql } from 'kysely'; +import { type Kysely, type OrderByDirection, type Selectable, type ShallowDehydrateObject, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { SearchFilter, SearchOrder } from 'src/dtos/search.dto'; -import { AssetStatus, AssetType, AssetVisibility, VectorIndex } from 'src/enum'; -import { probes } from 'src/repositories/database.repository'; -import { DB } from 'src/schema'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { SearchFilter, SearchOrder } from 'src/dtos/search.dto.js'; +import { AssetStatus, AssetType, AssetVisibility, VectorIndex } from 'src/enum.js'; +import { probes } from 'src/repositories/database.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; import { anyUuid, searchAssetBuilder, @@ -19,8 +19,8 @@ import { searchStatisticsV3Examples, withExifInner, withSearchOrder, -} from 'src/utils/database'; -import { paginationHelper, PaginationOptions } from 'src/utils/pagination'; +} from 'src/utils/database.js'; +import { paginationHelper, type PaginationOptions } from 'src/utils/pagination.js'; import z from 'zod'; export interface SearchAssetIdOptions { diff --git a/server/src/repositories/server-info.repository.ts b/server/src/repositories/server-info.repository.ts index 4b0e13356..1e841918f 100644 --- a/server/src/repositories/server-info.repository.ts +++ b/server/src/repositories/server-info.repository.ts @@ -4,9 +4,9 @@ import { exec as execCallback } from 'node:child_process'; import { readFile } from 'node:fs/promises'; import { promisify } from 'node:util'; import sharp from 'sharp'; -import { ReleaseChannel } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { ReleaseChannel } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; export interface VersionResponse { version: string; diff --git a/server/src/repositories/session.repository.ts b/server/src/repositories/session.repository.ts index 58a5e721c..6425a2115 100644 --- a/server/src/repositories/session.repository.ts +++ b/server/src/repositories/session.repository.ts @@ -1,13 +1,13 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, Updateable } from 'kysely'; +import type { Insertable, Kysely, Updateable } from 'kysely'; import { jsonObjectFrom } from 'kysely/helpers/postgres'; import { DateTime } from 'luxon'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { SessionTable } from 'src/schema/tables/session.table'; -import { asUuid } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { SessionTable } from 'src/schema/tables/session.table.js'; +import { asUuid } from 'src/utils/database.js'; @Injectable() export class SessionRepository { diff --git a/server/src/repositories/shared-link-asset.repository.ts b/server/src/repositories/shared-link-asset.repository.ts index 113654645..445ff3014 100644 --- a/server/src/repositories/shared-link-asset.repository.ts +++ b/server/src/repositories/shared-link-asset.repository.ts @@ -1,7 +1,7 @@ -import { Kysely } from 'kysely'; +import type { Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; export class SharedLinkAssetRepository { constructor(@InjectKysely() private db: Kysely) {} diff --git a/server/src/repositories/shared-link.repository.ts b/server/src/repositories/shared-link.repository.ts index 22839205a..fb28257ef 100644 --- a/server/src/repositories/shared-link.repository.ts +++ b/server/src/repositories/shared-link.repository.ts @@ -1,15 +1,23 @@ import { Injectable } from '@nestjs/common'; -import { ExpressionBuilder, Insertable, Kysely, Selectable, ShallowDehydrateObject, sql, Updateable } from 'kysely'; +import { + type ExpressionBuilder, + type Insertable, + type Kysely, + type Selectable, + type ShallowDehydrateObject, + sql, + type Updateable, +} from 'kysely'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; -import _ from 'lodash'; +import { omit } from 'lodash-es'; import { InjectKysely } from 'nestjs-kysely'; -import { Album, columns } from 'src/database'; -import { ChunkedArray, DummyValue, GenerateSql } from 'src/decorators'; -import { AlbumUserRole, SharedLinkType } from 'src/enum'; -import { DB } from 'src/schema'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { SharedLinkTable } from 'src/schema/tables/shared-link.table'; +import { Album, columns } from 'src/database.js'; +import { ChunkedArray, DummyValue, GenerateSql } from 'src/decorators.js'; +import { AlbumUserRole, SharedLinkType } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { SharedLinkTable } from 'src/schema/tables/shared-link.table.js'; export type SharedLinkSearchOptions = { userId: string; @@ -176,7 +184,7 @@ export class SharedLinkRepository { async create(entity: Insertable & { assetIds?: string[] }) { const { id } = await this.db .insertInto('shared_link') - .values(_.omit(entity, 'assetIds')) + .values(omit(entity, 'assetIds')) .returningAll() .executeTakeFirstOrThrow(); @@ -193,7 +201,7 @@ export class SharedLinkRepository { async update(entity: Updateable & { id: string; assetIds?: string[] }) { const { id } = await this.db .updateTable('shared_link') - .set(_.omit(entity, 'assets', 'album', 'assetIds')) + .set(omit(entity, 'assets', 'album', 'assetIds')) .where('shared_link.id', '=', entity.id) .returningAll() .executeTakeFirstOrThrow(); diff --git a/server/src/repositories/stack.repository.ts b/server/src/repositories/stack.repository.ts index 1cb0b33fc..d374d226a 100644 --- a/server/src/repositories/stack.repository.ts +++ b/server/src/repositories/stack.repository.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; -import { ExpressionBuilder, Insertable, Kysely, Updateable } from 'kysely'; +import type { ExpressionBuilder, Insertable, Kysely, Updateable } from 'kysely'; import { jsonArrayFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { asUuid, withDefaultVisibility } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { asUuid, withDefaultVisibility } from 'src/utils/database.js'; export interface StackSearch { ownerId: string; diff --git a/server/src/repositories/storage.repository.spec.ts b/server/src/repositories/storage.repository.spec.ts index aaf875d3b..38dcafcc7 100644 --- a/server/src/repositories/storage.repository.spec.ts +++ b/server/src/repositories/storage.repository.spec.ts @@ -1,8 +1,8 @@ import mockfs from 'mock-fs'; -import { CrawlOptionsDto } from 'src/dtos/library.dto'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { automock } from 'test/utils'; +import { CrawlOptionsDto } from 'src/dtos/library.dto.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { automock } from 'test/utils.js'; interface Test { test: string; diff --git a/server/src/repositories/storage.repository.ts b/server/src/repositories/storage.repository.ts index 7ee74d987..74648b154 100644 --- a/server/src/repositories/storage.repository.ts +++ b/server/src/repositories/storage.repository.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import archiver from 'archiver'; import chokidar, { ChokidarOptions } from 'chokidar'; -import { escapePath, glob, globStream } from 'fast-glob'; +import fastGlob from 'fast-glob'; import { constants, createReadStream, @@ -16,9 +16,9 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import { PassThrough, Readable, Writable } from 'node:stream'; import { createGunzip, createGzip } from 'node:zlib'; -import { CrawlOptionsDto, WalkOptionsDto } from 'src/dtos/library.dto'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { mimeTypes } from 'src/utils/mime-types'; +import { CrawlOptionsDto, WalkOptionsDto } from 'src/dtos/library.dto.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; export interface WatchEvents { onReady(): void; @@ -227,7 +227,7 @@ export class StorageRepository { const globbedPaths = pathsToCrawl.map((path) => this.asGlob(path)); - return glob(globbedPaths, { + return fastGlob.glob(globbedPaths, { absolute: true, caseSensitiveMatch: false, onlyFiles: true, @@ -245,7 +245,7 @@ export class StorageRepository { const globbedPaths = pathsToCrawl.map((path) => this.asGlob(path)); - const stream = globStream(globbedPaths, { + const stream = fastGlob.globStream(globbedPaths, { absolute: true, caseSensitiveMatch: false, onlyFiles: true, @@ -282,7 +282,11 @@ export class StorageRepository { watchDir = watch; // Native fs.watch without chokidar overhead private asGlob(pathToCrawl: string): string { - const escapedPath = escapePath(pathToCrawl).replaceAll('"', '["]').replaceAll("'", "[']").replaceAll('`', '[`]'); + const escapedPath = fastGlob + .escapePath(pathToCrawl) + .replaceAll('"', '["]') + .replaceAll("'", "[']") + .replaceAll('`', '[`]'); const extensions = `*{${mimeTypes.getSupportedFileExtensions().join(',')}}`; return `${escapedPath}/**/${extensions}`; } diff --git a/server/src/repositories/sync-checkpoint.repository.ts b/server/src/repositories/sync-checkpoint.repository.ts index 9db56e1bf..4534d61c9 100644 --- a/server/src/repositories/sync-checkpoint.repository.ts +++ b/server/src/repositories/sync-checkpoint.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, sql } from 'kysely'; +import { type Insertable, type Kysely, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { SyncEntityType } from 'src/enum'; -import { DB } from 'src/schema'; -import { SessionSyncCheckpointTable } from 'src/schema/tables/sync-checkpoint.table'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { SyncEntityType } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { SessionSyncCheckpointTable } from 'src/schema/tables/sync-checkpoint.table.js'; @Injectable() export class SyncCheckpointRepository { diff --git a/server/src/repositories/sync.repository.ts b/server/src/repositories/sync.repository.ts index a8359cac5..77ea76a7c 100644 --- a/server/src/repositories/sync.repository.ts +++ b/server/src/repositories/sync.repository.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { Kysely, sql } from 'kysely'; +import { type Kysely, sql } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { SyncAck } from 'src/types'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import type { SyncAck } from 'src/types.js'; export type SyncBackfillOptions = { nowId: string; diff --git a/server/src/repositories/system-metadata.repository.ts b/server/src/repositories/system-metadata.repository.ts index 755dc4cd3..8398ad888 100644 --- a/server/src/repositories/system-metadata.repository.ts +++ b/server/src/repositories/system-metadata.repository.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely } from 'kysely'; +import type { Insertable, Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; import { readFile } from 'node:fs/promises'; -import { GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { SystemMetadataTable } from 'src/schema/tables/system-metadata.table'; -import { SystemMetadata } from 'src/types'; +import { GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { SystemMetadataTable } from 'src/schema/tables/system-metadata.table.js'; +import type { SystemMetadata } from 'src/types.js'; type Upsert = Insertable; diff --git a/server/src/repositories/tag.repository.ts b/server/src/repositories/tag.repository.ts index 2ea264a97..d6fbceae4 100644 --- a/server/src/repositories/tag.repository.ts +++ b/server/src/repositories/tag.repository.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, InsertQueryBuilder, Kysely, QueryCreator, Selectable, Updateable } from 'kysely'; +import type { Insertable, InsertQueryBuilder, Kysely, QueryCreator, Selectable, Updateable } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { Chunked, ChunkedSet, DummyValue, GenerateSql } from 'src/decorators'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { TagAssetTable } from 'src/schema/tables/tag-asset.table'; -import { TagTable } from 'src/schema/tables/tag.table'; +import { columns } from 'src/database.js'; +import { Chunked, ChunkedSet, DummyValue, GenerateSql } from 'src/decorators.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { TagAssetTable } from 'src/schema/tables/tag-asset.table.js'; +import { TagTable } from 'src/schema/tables/tag.table.js'; @Injectable() export class TagRepository { constructor( diff --git a/server/src/repositories/telemetry.repository.ts b/server/src/repositories/telemetry.repository.ts index 146eaa30d..891e94e63 100644 --- a/server/src/repositories/telemetry.repository.ts +++ b/server/src/repositories/telemetry.repository.ts @@ -11,13 +11,13 @@ import { resourceFromAttributes } from '@opentelemetry/resources'; import { AggregationType } from '@opentelemetry/sdk-metrics'; import { NodeSDK, contextBase } from '@opentelemetry/sdk-node'; import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'; -import { snakeCase, startCase } from 'lodash'; +import { snakeCase, startCase } from 'lodash-es'; import { MetricService } from 'nestjs-otel'; -import { copyMetadataFromFunctionToFunction } from 'nestjs-otel/lib/opentelemetry.utils'; -import { excludePaths, serverVersion } from 'src/constants'; -import { ImmichTelemetry, MetadataKey } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { copyMetadataFromFunctionToFunction } from 'nestjs-otel/lib/opentelemetry.utils.js'; +import { excludePaths, serverVersion } from 'src/constants.js'; +import { ImmichTelemetry, MetadataKey } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; type MetricGroupOptions = { enabled: boolean }; diff --git a/server/src/repositories/trash.repository.ts b/server/src/repositories/trash.repository.ts index f6f13188d..1b554c893 100644 --- a/server/src/repositories/trash.repository.ts +++ b/server/src/repositories/trash.repository.ts @@ -1,8 +1,8 @@ -import { Kysely } from 'kysely'; +import type { Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetStatus } from 'src/enum'; -import { DB } from 'src/schema'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetStatus } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; export class TrashRepository { constructor(@InjectKysely() private db: Kysely) {} diff --git a/server/src/repositories/user.repository.ts b/server/src/repositories/user.repository.ts index afe14fb49..110cf04d5 100644 --- a/server/src/repositories/user.repository.ts +++ b/server/src/repositories/user.repository.ts @@ -1,15 +1,15 @@ import { Injectable } from '@nestjs/common'; -import { ExpressionBuilder, Insertable, Kysely, sql, Updateable } from 'kysely'; +import { type ExpressionBuilder, type Insertable, type Kysely, sql, type Updateable } from 'kysely'; import { jsonArrayFrom } from 'kysely/helpers/postgres'; import { DateTime } from 'luxon'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetType, AssetVisibility, UserStatus } from 'src/enum'; -import { DB } from 'src/schema'; -import { UserTable } from 'src/schema/tables/user.table'; -import { UserMetadata, UserMetadataItem } from 'src/types'; -import { asUuid } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetType, AssetVisibility, UserStatus } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import type { UserMetadata, UserMetadataItem } from 'src/types.js'; +import { asUuid } from 'src/utils/database.js'; export interface UserListFilter { id?: string; diff --git a/server/src/repositories/version-history.repository.ts b/server/src/repositories/version-history.repository.ts index b69e0e5fa..a2b08580f 100644 --- a/server/src/repositories/version-history.repository.ts +++ b/server/src/repositories/version-history.repository.ts @@ -1,9 +1,9 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely } from 'kysely'; +import type { Insertable, Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; -import { VersionHistoryTable } from 'src/schema/tables/version-history.table'; +import { GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; +import { VersionHistoryTable } from 'src/schema/tables/version-history.table.js'; @Injectable() export class VersionHistoryRepository { diff --git a/server/src/repositories/video-stream.repository.ts b/server/src/repositories/video-stream.repository.ts index 43c5ef80f..1681562ea 100644 --- a/server/src/repositories/video-stream.repository.ts +++ b/server/src/repositories/video-stream.repository.ts @@ -1,14 +1,14 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely } from 'kysely'; +import type { Insertable, Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { DB } from 'src/schema'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { DB } from 'src/schema/index.js'; import { VideoStreamSegmentTable, VideoStreamSessionTable, VideoStreamVariantTable, -} from 'src/schema/tables/video-stream.table'; -import { withAudioStream, withVideoFormat, withVideoPackets, withVideoStream } from 'src/utils/database'; +} from 'src/schema/tables/video-stream.table.js'; +import { withAudioStream, withVideoFormat, withVideoPackets, withVideoStream } from 'src/utils/database.js'; @Injectable() export class VideoStreamRepository { diff --git a/server/src/repositories/view-repository.ts b/server/src/repositories/view-repository.ts index ceab79f6e..711e85ad3 100644 --- a/server/src/repositories/view-repository.ts +++ b/server/src/repositories/view-repository.ts @@ -1,9 +1,9 @@ -import { Kysely } from 'kysely'; +import type { Kysely } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { AssetVisibility } from 'src/enum'; -import { DB } from 'src/schema'; -import { asUuid, withExif } from 'src/utils/database'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { AssetVisibility } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { asUuid, withExif } from 'src/utils/database.js'; export class ViewRepository { constructor(@InjectKysely() private db: Kysely) {} diff --git a/server/src/repositories/websocket.repository.ts b/server/src/repositories/websocket.repository.ts index 3b4328563..5c963d017 100644 --- a/server/src/repositories/websocket.repository.ts +++ b/server/src/repositories/websocket.repository.ts @@ -7,14 +7,14 @@ import { WebSocketServer, } from '@nestjs/websockets'; import { Server, Socket } from 'socket.io'; -import { AssetResponseDto } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { NotificationDto } from 'src/dtos/notification.dto'; -import { ReleaseEventV1, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { SyncAssetEditV1, SyncAssetExifV1, SyncAssetV2 } from 'src/dtos/sync.dto'; -import { AppRestartEvent, ArgsOf, EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { handlePromiseError } from 'src/utils/misc'; +import { AssetResponseDto } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { NotificationDto } from 'src/dtos/notification.dto.js'; +import { ReleaseEventV1, ServerVersionResponseDto } from 'src/dtos/server.dto.js'; +import { SyncAssetEditV1, SyncAssetExifV1, SyncAssetV2 } from 'src/dtos/sync.dto.js'; +import { type AppRestartEvent, type ArgsOf, EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { handlePromiseError } from 'src/utils/misc.js'; export const serverEvents = [ 'ConfigUpdate', diff --git a/server/src/repositories/workflow.repository.ts b/server/src/repositories/workflow.repository.ts index 834489619..ff0e777a3 100644 --- a/server/src/repositories/workflow.repository.ts +++ b/server/src/repositories/workflow.repository.ts @@ -1,15 +1,15 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, Updateable } from 'kysely'; +import type { Insertable, Kysely, Updateable } from 'kysely'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; -import { columns } from 'src/database'; -import { DummyValue, GenerateSql } from 'src/decorators'; -import { WorkflowGetLogsDto, WorkflowSearchDto } from 'src/dtos/workflow.dto'; -import { DB } from 'src/schema'; -import { WorkflowLogTable } from 'src/schema/tables/workflow-log.table'; -import { WorkflowStepTable } from 'src/schema/tables/workflow-step.table'; -import { WorkflowTable } from 'src/schema/tables/workflow.table'; -import { withTags } from 'src/utils/database'; +import { columns } from 'src/database.js'; +import { DummyValue, GenerateSql } from 'src/decorators.js'; +import { WorkflowGetLogsDto, WorkflowSearchDto } from 'src/dtos/workflow.dto.js'; +import { DB } from 'src/schema/index.js'; +import { WorkflowLogTable } from 'src/schema/tables/workflow-log.table.js'; +import { WorkflowStepTable } from 'src/schema/tables/workflow-step.table.js'; +import { WorkflowTable } from 'src/schema/tables/workflow.table.js'; +import { withTags } from 'src/utils/database.js'; export type WorkflowStepUpsert = Omit, 'workflowId' | 'order'>; diff --git a/server/src/schema/enums.ts b/server/src/schema/enums.ts index ecf559c39..512b16754 100644 --- a/server/src/schema/enums.ts +++ b/server/src/schema/enums.ts @@ -1,5 +1,5 @@ import { registerEnum } from '@immich/sql-tools'; -import { AlbumUserRole, AssetStatus, AssetVisibility, ChecksumAlgorithm, SourceType, VideoCodec } from 'src/enum'; +import { AlbumUserRole, AssetStatus, AssetVisibility, ChecksumAlgorithm, SourceType, VideoCodec } from 'src/enum.js'; export const album_user_role_enum = registerEnum({ name: 'album_user_role_enum', diff --git a/server/src/schema/index.ts b/server/src/schema/index.ts index 61dc5d876..8f85c552e 100644 --- a/server/src/schema/index.ts +++ b/server/src/schema/index.ts @@ -4,7 +4,7 @@ import { asset_face_source_type, asset_visibility_enum, assets_status_enum, -} from 'src/schema/enums'; +} from 'src/schema/enums.js'; import { album_user_after_insert, album_user_delete, @@ -26,75 +26,75 @@ import { updated_at, user_delete_audit, user_metadata_audit, -} from 'src/schema/functions'; -import { ActivityTable } from 'src/schema/tables/activity.table'; -import { AlbumAssetAuditTable } from 'src/schema/tables/album-asset-audit.table'; -import { AlbumAssetTable } from 'src/schema/tables/album-asset.table'; -import { AlbumAuditTable } from 'src/schema/tables/album-audit.table'; -import { AlbumUserAuditTable } from 'src/schema/tables/album-user-audit.table'; -import { AlbumUserTable } from 'src/schema/tables/album-user.table'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { ApiKeyTable } from 'src/schema/tables/api-key.table'; -import { AssetAuditTable } from 'src/schema/tables/asset-audit.table'; -import { AssetAudioTable, AssetKeyframeTable, AssetVideoTable } from 'src/schema/tables/asset-av.table'; -import { AssetEditAuditTable } from 'src/schema/tables/asset-edit-audit.table'; -import { AssetEditTable } from 'src/schema/tables/asset-edit.table'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetFaceAuditTable } from 'src/schema/tables/asset-face-audit.table'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { AssetJobStatusTable } from 'src/schema/tables/asset-job-status.table'; -import { AssetMetadataAuditTable } from 'src/schema/tables/asset-metadata-audit.table'; -import { AssetMetadataTable } from 'src/schema/tables/asset-metadata.table'; -import { AssetOcrAuditTable } from 'src/schema/tables/asset-ocr-audit.table'; -import { AssetOcrTable } from 'src/schema/tables/asset-ocr.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { ClusterGroupRequestTable } from 'src/schema/tables/cluster-group-request.table'; -import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table'; -import { FaceSearchTable } from 'src/schema/tables/face-search.table'; -import { GeodataPlacesTable } from 'src/schema/tables/geodata-places.table'; -import { IntegrityReportTable } from 'src/schema/tables/integrity-report.table'; -import { LibraryTable } from 'src/schema/tables/library.table'; -import { MemoryAssetAuditTable } from 'src/schema/tables/memory-asset-audit.table'; -import { MemoryAssetTable } from 'src/schema/tables/memory-asset.table'; -import { MemoryAuditTable } from 'src/schema/tables/memory-audit.table'; -import { MemoryTable } from 'src/schema/tables/memory.table'; -import { MoveTable } from 'src/schema/tables/move.table'; -import { NaturalEarthCountriesTable } from 'src/schema/tables/natural-earth-countries.table'; -import { NotificationTable } from 'src/schema/tables/notification.table'; -import { OcrSearchTable } from 'src/schema/tables/ocr-search.table'; -import { PartnerAuditTable } from 'src/schema/tables/partner-audit.table'; -import { PartnerTable } from 'src/schema/tables/partner.table'; -import { PersonAuditTable } from 'src/schema/tables/person-audit.table'; -import { PersonGroupAuditTable } from 'src/schema/tables/person-group-audit.table'; -import { PersonGroupTable } from 'src/schema/tables/person-group.table'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { PluginMethodTable } from 'src/schema/tables/plugin-method.table'; -import { PluginTable } from 'src/schema/tables/plugin.table'; -import { SessionTable } from 'src/schema/tables/session.table'; -import { SharedLinkAssetTable } from 'src/schema/tables/shared-link-asset.table'; -import { SharedLinkTable } from 'src/schema/tables/shared-link.table'; -import { SmartSearchTable } from 'src/schema/tables/smart-search.table'; -import { StackAuditTable } from 'src/schema/tables/stack-audit.table'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { SessionSyncCheckpointTable } from 'src/schema/tables/sync-checkpoint.table'; -import { SystemMetadataTable } from 'src/schema/tables/system-metadata.table'; -import { TagAssetTable } from 'src/schema/tables/tag-asset.table'; -import { TagClosureTable } from 'src/schema/tables/tag-closure.table'; -import { TagTable } from 'src/schema/tables/tag.table'; -import { UserAuditTable } from 'src/schema/tables/user-audit.table'; -import { UserMetadataAuditTable } from 'src/schema/tables/user-metadata-audit.table'; -import { UserMetadataTable } from 'src/schema/tables/user-metadata.table'; -import { UserTable } from 'src/schema/tables/user.table'; -import { VersionHistoryTable } from 'src/schema/tables/version-history.table'; +} from 'src/schema/functions.js'; +import { ActivityTable } from 'src/schema/tables/activity.table.js'; +import { AlbumAssetAuditTable } from 'src/schema/tables/album-asset-audit.table.js'; +import { AlbumAssetTable } from 'src/schema/tables/album-asset.table.js'; +import { AlbumAuditTable } from 'src/schema/tables/album-audit.table.js'; +import { AlbumUserAuditTable } from 'src/schema/tables/album-user-audit.table.js'; +import { AlbumUserTable } from 'src/schema/tables/album-user.table.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { ApiKeyTable } from 'src/schema/tables/api-key.table.js'; +import { AssetAuditTable } from 'src/schema/tables/asset-audit.table.js'; +import { AssetAudioTable, AssetKeyframeTable, AssetVideoTable } from 'src/schema/tables/asset-av.table.js'; +import { AssetEditAuditTable } from 'src/schema/tables/asset-edit-audit.table.js'; +import { AssetEditTable } from 'src/schema/tables/asset-edit.table.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetFaceAuditTable } from 'src/schema/tables/asset-face-audit.table.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { AssetJobStatusTable } from 'src/schema/tables/asset-job-status.table.js'; +import { AssetMetadataAuditTable } from 'src/schema/tables/asset-metadata-audit.table.js'; +import { AssetMetadataTable } from 'src/schema/tables/asset-metadata.table.js'; +import { AssetOcrAuditTable } from 'src/schema/tables/asset-ocr-audit.table.js'; +import { AssetOcrTable } from 'src/schema/tables/asset-ocr.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { ClusterGroupRequestTable } from 'src/schema/tables/cluster-group-request.table.js'; +import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table.js'; +import { FaceSearchTable } from 'src/schema/tables/face-search.table.js'; +import { GeodataPlacesTable } from 'src/schema/tables/geodata-places.table.js'; +import { IntegrityReportTable } from 'src/schema/tables/integrity-report.table.js'; +import { LibraryTable } from 'src/schema/tables/library.table.js'; +import { MemoryAssetAuditTable } from 'src/schema/tables/memory-asset-audit.table.js'; +import { MemoryAssetTable } from 'src/schema/tables/memory-asset.table.js'; +import { MemoryAuditTable } from 'src/schema/tables/memory-audit.table.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; +import { MoveTable } from 'src/schema/tables/move.table.js'; +import { NaturalEarthCountriesTable } from 'src/schema/tables/natural-earth-countries.table.js'; +import { NotificationTable } from 'src/schema/tables/notification.table.js'; +import { OcrSearchTable } from 'src/schema/tables/ocr-search.table.js'; +import { PartnerAuditTable } from 'src/schema/tables/partner-audit.table.js'; +import { PartnerTable } from 'src/schema/tables/partner.table.js'; +import { PersonAuditTable } from 'src/schema/tables/person-audit.table.js'; +import { PersonGroupAuditTable } from 'src/schema/tables/person-group-audit.table.js'; +import { PersonGroupTable } from 'src/schema/tables/person-group.table.js'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { PluginMethodTable } from 'src/schema/tables/plugin-method.table.js'; +import { PluginTable } from 'src/schema/tables/plugin.table.js'; +import { SessionTable } from 'src/schema/tables/session.table.js'; +import { SharedLinkAssetTable } from 'src/schema/tables/shared-link-asset.table.js'; +import { SharedLinkTable } from 'src/schema/tables/shared-link.table.js'; +import { SmartSearchTable } from 'src/schema/tables/smart-search.table.js'; +import { StackAuditTable } from 'src/schema/tables/stack-audit.table.js'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { SessionSyncCheckpointTable } from 'src/schema/tables/sync-checkpoint.table.js'; +import { SystemMetadataTable } from 'src/schema/tables/system-metadata.table.js'; +import { TagAssetTable } from 'src/schema/tables/tag-asset.table.js'; +import { TagClosureTable } from 'src/schema/tables/tag-closure.table.js'; +import { TagTable } from 'src/schema/tables/tag.table.js'; +import { UserAuditTable } from 'src/schema/tables/user-audit.table.js'; +import { UserMetadataAuditTable } from 'src/schema/tables/user-metadata-audit.table.js'; +import { UserMetadataTable } from 'src/schema/tables/user-metadata.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import { VersionHistoryTable } from 'src/schema/tables/version-history.table.js'; import { VideoStreamSegmentTable, VideoStreamSessionTable, VideoStreamVariantTable, -} from 'src/schema/tables/video-stream.table'; -import { WorkflowLogTable } from 'src/schema/tables/workflow-log.table'; -import { WorkflowStepTable } from 'src/schema/tables/workflow-step.table'; -import { WorkflowTable } from 'src/schema/tables/workflow.table'; +} from 'src/schema/tables/video-stream.table.js'; +import { WorkflowLogTable } from 'src/schema/tables/workflow-log.table.js'; +import { WorkflowStepTable } from 'src/schema/tables/workflow-step.table.js'; +import { WorkflowTable } from 'src/schema/tables/workflow.table.js'; @Extensions(['uuid-ossp', 'unaccent', 'cube', 'earthdistance', 'pg_trgm', 'plpgsql']) @Database({ name: 'immich' }) diff --git a/server/src/schema/migrations/1744910873969-InitialMigration.ts b/server/src/schema/migrations/1744910873969-InitialMigration.ts index 9611d878d..d02f76765 100644 --- a/server/src/schema/migrations/1744910873969-InitialMigration.ts +++ b/server/src/schema/migrations/1744910873969-InitialMigration.ts @@ -1,8 +1,8 @@ import { Kysely, sql } from 'kysely'; -import { ErrorMessages } from 'src/constants'; -import { getVectorExtension } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { vectorIndexQuery } from 'src/utils/database'; +import { ErrorMessages } from 'src/constants.js'; +import { getVectorExtension } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { vectorIndexQuery } from 'src/utils/database.js'; const lastMigrationSql = sql<{ name: string }>`SELECT "name" FROM "migrations" ORDER BY "timestamp" DESC LIMIT 1;`; const tableExists = sql<{ result: string | null }>`select to_regclass('migrations') as "result"`; diff --git a/server/src/schema/migrations/1749067526135-UserOnboardingDefault.ts b/server/src/schema/migrations/1749067526135-UserOnboardingDefault.ts index e6aabec27..74f4aded1 100644 --- a/server/src/schema/migrations/1749067526135-UserOnboardingDefault.ts +++ b/server/src/schema/migrations/1749067526135-UserOnboardingDefault.ts @@ -1,5 +1,5 @@ import { Kysely, sql } from 'kysely'; -import { UserMetadataKey } from 'src/enum'; +import { UserMetadataKey } from 'src/enum.js'; export async function up(db: Kysely): Promise { await sql`INSERT INTO user_metadata SELECT id, ${UserMetadataKey.Onboarding}, '{"isOnboarded": true}' FROM users diff --git a/server/src/schema/migrations/1752759108283-ConvertToAbsolutePaths.ts b/server/src/schema/migrations/1752759108283-ConvertToAbsolutePaths.ts index 839af40cf..2748300bf 100644 --- a/server/src/schema/migrations/1752759108283-ConvertToAbsolutePaths.ts +++ b/server/src/schema/migrations/1752759108283-ConvertToAbsolutePaths.ts @@ -1,5 +1,5 @@ import { Kysely, sql } from 'kysely'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; const logger = LoggingRepository.create('Migrations'); diff --git a/server/src/schema/migrations/1764483051488-OCRBigramsForCJK.ts b/server/src/schema/migrations/1764483051488-OCRBigramsForCJK.ts index 3f5cb5fa8..24746b2de 100644 --- a/server/src/schema/migrations/1764483051488-OCRBigramsForCJK.ts +++ b/server/src/schema/migrations/1764483051488-OCRBigramsForCJK.ts @@ -1,5 +1,5 @@ import { Kysely, sql } from 'kysely'; -import { tokenizeForSearch } from 'src/utils/database'; +import { tokenizeForSearch } from 'src/utils/database.js'; export async function up(db: Kysely): Promise { await sql`truncate ${sql.table('ocr_search')}`.execute(db); diff --git a/server/src/schema/migrations/1776848612954-MigrateAlbumOwnerIdToAlbumUser.ts b/server/src/schema/migrations/1776848612954-MigrateAlbumOwnerIdToAlbumUser.ts index 60c543f40..596baa84f 100644 --- a/server/src/schema/migrations/1776848612954-MigrateAlbumOwnerIdToAlbumUser.ts +++ b/server/src/schema/migrations/1776848612954-MigrateAlbumOwnerIdToAlbumUser.ts @@ -1,5 +1,5 @@ import { Kysely, sql } from 'kysely'; -import { AlbumUserRole } from 'src/enum'; +import { AlbumUserRole } from 'src/enum.js'; export async function up(db: Kysely): Promise { await sql`CREATE OR REPLACE FUNCTION album_user_after_insert() diff --git a/server/src/schema/tables/activity.table.ts b/server/src/schema/tables/activity.table.ts index 4a3cc196e..24c0f32d8 100644 --- a/server/src/schema/tables/activity.table.ts +++ b/server/src/schema/tables/activity.table.ts @@ -4,18 +4,18 @@ import { CreateDateColumn, ForeignKeyColumn, ForeignKeyConstraint, - Generated, + type Generated, Index, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AlbumAssetTable } from 'src/schema/tables/album-asset.table'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AlbumAssetTable } from 'src/schema/tables/album-asset.table.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('activity') @UpdatedAtTrigger('activity_updatedAt') diff --git a/server/src/schema/tables/album-asset-audit.table.ts b/server/src/schema/tables/album-asset-audit.table.ts index 176d32575..7c9f0cb1b 100644 --- a/server/src/schema/tables/album-asset-audit.table.ts +++ b/server/src/schema/tables/album-asset-audit.table.ts @@ -1,6 +1,6 @@ -import { Column, CreateDateColumn, ForeignKeyColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; -import { AlbumTable } from 'src/schema/tables/album.table'; +import { Column, CreateDateColumn, ForeignKeyColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; @Table('album_asset_audit') export class AlbumAssetAuditTable { diff --git a/server/src/schema/tables/album-asset.table.ts b/server/src/schema/tables/album-asset.table.ts index 5853e846f..6d0b35411 100644 --- a/server/src/schema/tables/album-asset.table.ts +++ b/server/src/schema/tables/album-asset.table.ts @@ -2,15 +2,15 @@ import { AfterDeleteTrigger, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { album_asset_delete_audit } from 'src/schema/functions'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { album_asset_delete_audit } from 'src/schema/functions.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table({ name: 'album_asset' }) @UpdatedAtTrigger('album_asset_updatedAt') diff --git a/server/src/schema/tables/album-audit.table.ts b/server/src/schema/tables/album-audit.table.ts index 7865f6bfa..bb3fe22b5 100644 --- a/server/src/schema/tables/album-audit.table.ts +++ b/server/src/schema/tables/album-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('album_audit') export class AlbumAuditTable { diff --git a/server/src/schema/tables/album-user-audit.table.ts b/server/src/schema/tables/album-user-audit.table.ts index d4798761e..7c574b290 100644 --- a/server/src/schema/tables/album-user-audit.table.ts +++ b/server/src/schema/tables/album-user-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('album_user_audit') export class AlbumUserAuditTable { diff --git a/server/src/schema/tables/album-user.table.ts b/server/src/schema/tables/album-user.table.ts index c015c1354..510fdbf61 100644 --- a/server/src/schema/tables/album-user.table.ts +++ b/server/src/schema/tables/album-user.table.ts @@ -4,18 +4,18 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, Index, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AlbumUserRole } from 'src/enum'; -import { album_user_role_enum } from 'src/schema/enums'; -import { album_user_after_insert, album_user_delete, album_user_delete_audit } from 'src/schema/functions'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AlbumUserRole } from 'src/enum.js'; +import { album_user_role_enum } from 'src/schema/enums.js'; +import { album_user_after_insert, album_user_delete, album_user_delete_audit } from 'src/schema/functions.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table({ name: 'album_user' }) @Index({ diff --git a/server/src/schema/tables/album.table.ts b/server/src/schema/tables/album.table.ts index c0d13d490..bc7592b0f 100644 --- a/server/src/schema/tables/album.table.ts +++ b/server/src/schema/tables/album.table.ts @@ -3,15 +3,15 @@ import { CreateDateColumn, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetOrder } from 'src/enum'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AssetOrder } from 'src/enum.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table({ name: 'album' }) @UpdatedAtTrigger('album_updatedAt') diff --git a/server/src/schema/tables/api-key.table.ts b/server/src/schema/tables/api-key.table.ts index f0e33a9c7..ccc2f0889 100644 --- a/server/src/schema/tables/api-key.table.ts +++ b/server/src/schema/tables/api-key.table.ts @@ -2,15 +2,15 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { Permission } from 'src/enum'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { Permission } from 'src/enum.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('api_key') @UpdatedAtTrigger('api_key_updatedAt') diff --git a/server/src/schema/tables/asset-audit.table.ts b/server/src/schema/tables/asset-audit.table.ts index fee6dde59..5dec47161 100644 --- a/server/src/schema/tables/asset-audit.table.ts +++ b/server/src/schema/tables/asset-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('asset_audit') export class AssetAuditTable { diff --git a/server/src/schema/tables/asset-av.table.ts b/server/src/schema/tables/asset-av.table.ts index 41824e250..7f61609c3 100644 --- a/server/src/schema/tables/asset-av.table.ts +++ b/server/src/schema/tables/asset-av.table.ts @@ -1,5 +1,5 @@ import { Column, ForeignKeyColumn, Table } from '@immich/sql-tools'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('asset_audio') export class AssetAudioTable { diff --git a/server/src/schema/tables/asset-edit-audit.table.ts b/server/src/schema/tables/asset-edit-audit.table.ts index 9c8b29f37..848f6539f 100644 --- a/server/src/schema/tables/asset-edit-audit.table.ts +++ b/server/src/schema/tables/asset-edit-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('asset_edit_audit') export class AssetEditAuditTable { diff --git a/server/src/schema/tables/asset-edit.table.ts b/server/src/schema/tables/asset-edit.table.ts index 2e9d2be20..d7315f8b0 100644 --- a/server/src/schema/tables/asset-edit.table.ts +++ b/server/src/schema/tables/asset-edit.table.ts @@ -3,17 +3,17 @@ import { AfterInsertTrigger, Column, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, Unique, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetEditAction, AssetEditParameters } from 'src/dtos/editing.dto'; -import { asset_edit_audit, asset_edit_delete, asset_edit_insert } from 'src/schema/functions'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AssetEditAction, type AssetEditParameters } from 'src/dtos/editing.dto.js'; +import { asset_edit_audit, asset_edit_delete, asset_edit_insert } from 'src/schema/functions.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('asset_edit') @UpdatedAtTrigger('asset_edit_updatedAt') diff --git a/server/src/schema/tables/asset-exif.table.ts b/server/src/schema/tables/asset-exif.table.ts index d725189e6..f5c4546ef 100644 --- a/server/src/schema/tables/asset-exif.table.ts +++ b/server/src/schema/tables/asset-exif.table.ts @@ -1,16 +1,16 @@ import { Column, ForeignKeyColumn, - Generated, + type Generated, Index, Int8, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { LockableProperty } from 'src/database'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { LockableProperty } from 'src/database.js'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('asset_exif') @Index({ diff --git a/server/src/schema/tables/asset-face-audit.table.ts b/server/src/schema/tables/asset-face-audit.table.ts index 2e6190480..ae32c46a8 100644 --- a/server/src/schema/tables/asset-face-audit.table.ts +++ b/server/src/schema/tables/asset-face-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('asset_face_audit') export class AssetFaceAuditTable { diff --git a/server/src/schema/tables/asset-face.table.ts b/server/src/schema/tables/asset-face.table.ts index 9832f99ce..69213dc1f 100644 --- a/server/src/schema/tables/asset-face.table.ts +++ b/server/src/schema/tables/asset-face.table.ts @@ -3,19 +3,19 @@ import { Column, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, Index, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { SourceType } from 'src/enum'; -import { asset_face_source_type } from 'src/schema/enums'; -import { asset_face_audit } from 'src/schema/functions'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { PersonGroupTable } from 'src/schema/tables/person-group.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { SourceType } from 'src/enum.js'; +import { asset_face_source_type } from 'src/schema/enums.js'; +import { asset_face_audit } from 'src/schema/functions.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { PersonGroupTable } from 'src/schema/tables/person-group.table.js'; @Table({ name: 'asset_face' }) @UpdatedAtTrigger('asset_face_updatedAt') diff --git a/server/src/schema/tables/asset-file.table.ts b/server/src/schema/tables/asset-file.table.ts index 6285e4d65..bd234c406 100644 --- a/server/src/schema/tables/asset-file.table.ts +++ b/server/src/schema/tables/asset-file.table.ts @@ -2,16 +2,16 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, Unique, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetFileType } from 'src/enum'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AssetFileType } from 'src/enum.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('asset_file') @Unique({ columns: ['assetId', 'type', 'isEdited'] }) diff --git a/server/src/schema/tables/asset-job-status.table.ts b/server/src/schema/tables/asset-job-status.table.ts index 4d889ade4..11ee772ad 100644 --- a/server/src/schema/tables/asset-job-status.table.ts +++ b/server/src/schema/tables/asset-job-status.table.ts @@ -1,5 +1,5 @@ import { Column, ForeignKeyColumn, Table, Timestamp } from '@immich/sql-tools'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('asset_job_status') export class AssetJobStatusTable { diff --git a/server/src/schema/tables/asset-metadata-audit.table.ts b/server/src/schema/tables/asset-metadata-audit.table.ts index 15c0b47ed..d21b2549f 100644 --- a/server/src/schema/tables/asset-metadata-audit.table.ts +++ b/server/src/schema/tables/asset-metadata-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('asset_metadata_audit') export class AssetMetadataAuditTable { diff --git a/server/src/schema/tables/asset-metadata.table.ts b/server/src/schema/tables/asset-metadata.table.ts index dc5b98416..3747bd648 100644 --- a/server/src/schema/tables/asset-metadata.table.ts +++ b/server/src/schema/tables/asset-metadata.table.ts @@ -2,16 +2,16 @@ import { AfterDeleteTrigger, Column, ForeignKeyColumn, - Generated, + type Generated, PrimaryColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetMetadataKey } from 'src/enum'; -import { asset_metadata_audit } from 'src/schema/functions'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AssetMetadataKey } from 'src/enum.js'; +import { asset_metadata_audit } from 'src/schema/functions.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @UpdatedAtTrigger('asset_metadata_updated_at') @Table('asset_metadata') diff --git a/server/src/schema/tables/asset-ocr-audit.table.ts b/server/src/schema/tables/asset-ocr-audit.table.ts index 8c7efe1d6..1442c321a 100644 --- a/server/src/schema/tables/asset-ocr-audit.table.ts +++ b/server/src/schema/tables/asset-ocr-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('asset_ocr_audit') export class AssetOcrAuditTable { diff --git a/server/src/schema/tables/asset-ocr.table.ts b/server/src/schema/tables/asset-ocr.table.ts index 80f6c52da..6a9200aa0 100644 --- a/server/src/schema/tables/asset-ocr.table.ts +++ b/server/src/schema/tables/asset-ocr.table.ts @@ -2,15 +2,15 @@ import { AfterDeleteTrigger, Column, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { asset_ocr_delete_audit } from 'src/schema/functions'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { asset_ocr_delete_audit } from 'src/schema/functions.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('asset_ocr') @UpdatedAtTrigger('asset_ocr_updatedAt') diff --git a/server/src/schema/tables/asset.table.ts b/server/src/schema/tables/asset.table.ts index 80b25cd2a..0d009c1f9 100644 --- a/server/src/schema/tables/asset.table.ts +++ b/server/src/schema/tables/asset.table.ts @@ -4,21 +4,21 @@ import { CreateDateColumn, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, Index, PrimaryGeneratedColumn, Table, - Timestamp, + type Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum'; -import { asset_checksum_algorithm_enum, asset_visibility_enum, assets_status_enum } from 'src/schema/enums'; -import { asset_delete_audit } from 'src/schema/functions'; -import { LibraryTable } from 'src/schema/tables/library.table'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { UserTable } from 'src/schema/tables/user.table'; -import { ASSET_CHECKSUM_CONSTRAINT } from 'src/utils/database'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum.js'; +import { asset_checksum_algorithm_enum, asset_visibility_enum, assets_status_enum } from 'src/schema/enums.js'; +import { asset_delete_audit } from 'src/schema/functions.js'; +import { LibraryTable } from 'src/schema/tables/library.table.js'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import { ASSET_CHECKSUM_CONSTRAINT } from 'src/utils/database.js'; @Table('asset') @UpdatedAtTrigger('asset_updatedAt') diff --git a/server/src/schema/tables/cluster-group-request.table.ts b/server/src/schema/tables/cluster-group-request.table.ts index d85ab0618..860072bb3 100644 --- a/server/src/schema/tables/cluster-group-request.table.ts +++ b/server/src/schema/tables/cluster-group-request.table.ts @@ -1,14 +1,14 @@ import { CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, Unique, } from '@immich/sql-tools'; -import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('cluster_group_request') @Unique({ columns: ['clusterGroupId', 'userId'] }) diff --git a/server/src/schema/tables/cluster-group.table.ts b/server/src/schema/tables/cluster-group.table.ts index 79c7d91db..c7d3f79b8 100644 --- a/server/src/schema/tables/cluster-group.table.ts +++ b/server/src/schema/tables/cluster-group.table.ts @@ -1,13 +1,13 @@ import { Column, CreateDateColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; @Table('cluster_group') @UpdatedAtTrigger('cluster_group_updatedAt') diff --git a/server/src/schema/tables/face-search.table.ts b/server/src/schema/tables/face-search.table.ts index 7c585437c..69574c58d 100644 --- a/server/src/schema/tables/face-search.table.ts +++ b/server/src/schema/tables/face-search.table.ts @@ -1,5 +1,5 @@ import { Column, ForeignKeyColumn, Index, Table } from '@immich/sql-tools'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; @Table({ name: 'face_search' }) @Index({ diff --git a/server/src/schema/tables/geodata-places.table.ts b/server/src/schema/tables/geodata-places.table.ts index 101ddb759..f2409a8ec 100644 --- a/server/src/schema/tables/geodata-places.table.ts +++ b/server/src/schema/tables/geodata-places.table.ts @@ -1,4 +1,4 @@ -import { Column, Index, PrimaryColumn, Table, Timestamp } from '@immich/sql-tools'; +import { Column, Index, PrimaryColumn, Table, type Timestamp } from '@immich/sql-tools'; @Table({ name: 'geodata_places', primaryConstraintName: 'geodata_places_pkey' }) @Index({ diff --git a/server/src/schema/tables/integrity-report.table.ts b/server/src/schema/tables/integrity-report.table.ts index 0ef7967aa..66f476680 100644 --- a/server/src/schema/tables/integrity-report.table.ts +++ b/server/src/schema/tables/integrity-report.table.ts @@ -1,8 +1,16 @@ -import { Column, CreateDateColumn, ForeignKeyColumn, Generated, Table, Timestamp, Unique } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; -import { IntegrityReport } from 'src/enum'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { + Column, + CreateDateColumn, + ForeignKeyColumn, + type Generated, + Table, + Timestamp, + Unique, +} from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; +import { IntegrityReport } from 'src/enum.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('integrity_report') @Unique({ columns: ['type', 'path'] }) diff --git a/server/src/schema/tables/library.table.ts b/server/src/schema/tables/library.table.ts index 2f79a3e78..94d6a9ebd 100644 --- a/server/src/schema/tables/library.table.ts +++ b/server/src/schema/tables/library.table.ts @@ -3,14 +3,14 @@ import { CreateDateColumn, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('library') @UpdatedAtTrigger('library_updatedAt') diff --git a/server/src/schema/tables/memory-asset-audit.table.ts b/server/src/schema/tables/memory-asset-audit.table.ts index 67c434c45..74e6ce357 100644 --- a/server/src/schema/tables/memory-asset-audit.table.ts +++ b/server/src/schema/tables/memory-asset-audit.table.ts @@ -1,6 +1,6 @@ -import { Column, CreateDateColumn, ForeignKeyColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; -import { MemoryTable } from 'src/schema/tables/memory.table'; +import { Column, CreateDateColumn, ForeignKeyColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; @Table('memory_asset_audit') export class MemoryAssetAuditTable { diff --git a/server/src/schema/tables/memory-asset.table.ts b/server/src/schema/tables/memory-asset.table.ts index b44c78c3b..407cb739e 100644 --- a/server/src/schema/tables/memory-asset.table.ts +++ b/server/src/schema/tables/memory-asset.table.ts @@ -2,15 +2,15 @@ import { AfterDeleteTrigger, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { memory_asset_delete_audit } from 'src/schema/functions'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { MemoryTable } from 'src/schema/tables/memory.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { memory_asset_delete_audit } from 'src/schema/functions.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; @Table('memory_asset') @UpdatedAtTrigger('memory_asset_updatedAt') diff --git a/server/src/schema/tables/memory-audit.table.ts b/server/src/schema/tables/memory-audit.table.ts index 6d278676b..3b532a0fe 100644 --- a/server/src/schema/tables/memory-audit.table.ts +++ b/server/src/schema/tables/memory-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('memory_audit') export class MemoryAuditTable { diff --git a/server/src/schema/tables/memory.table.ts b/server/src/schema/tables/memory.table.ts index c132d42fe..ab2595004 100644 --- a/server/src/schema/tables/memory.table.ts +++ b/server/src/schema/tables/memory.table.ts @@ -4,16 +4,16 @@ import { CreateDateColumn, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, - Timestamp, + type Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { MemoryType } from 'src/enum'; -import { memory_delete_audit } from 'src/schema/functions'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { MemoryType } from 'src/enum.js'; +import { memory_delete_audit } from 'src/schema/functions.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('memory') @UpdatedAtTrigger('memory_updatedAt') diff --git a/server/src/schema/tables/move.table.ts b/server/src/schema/tables/move.table.ts index c7229431f..4c43fdd5d 100644 --- a/server/src/schema/tables/move.table.ts +++ b/server/src/schema/tables/move.table.ts @@ -1,5 +1,5 @@ -import { Column, Generated, PrimaryGeneratedColumn, Table, Unique } from '@immich/sql-tools'; -import { PathType } from 'src/enum'; +import { Column, type Generated, PrimaryGeneratedColumn, Table, Unique } from '@immich/sql-tools'; +import type { PathType } from 'src/enum.js'; @Table('move_history') // path lock (per entity) diff --git a/server/src/schema/tables/natural-earth-countries.table.ts b/server/src/schema/tables/natural-earth-countries.table.ts index 06f189264..ac51df1bd 100644 --- a/server/src/schema/tables/natural-earth-countries.table.ts +++ b/server/src/schema/tables/natural-earth-countries.table.ts @@ -1,4 +1,4 @@ -import { Column, Generated, PrimaryGeneratedColumn, Table } from '@immich/sql-tools'; +import { Column, type Generated, PrimaryGeneratedColumn, Table } from '@immich/sql-tools'; @Table({ name: 'naturalearth_countries', primaryConstraintName: 'naturalearth_countries_pkey' }) export class NaturalEarthCountriesTable { diff --git a/server/src/schema/tables/notification.table.ts b/server/src/schema/tables/notification.table.ts index fd1afc35c..62dbbf41f 100644 --- a/server/src/schema/tables/notification.table.ts +++ b/server/src/schema/tables/notification.table.ts @@ -3,15 +3,15 @@ import { CreateDateColumn, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { NotificationLevel, NotificationType } from 'src/enum'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { NotificationLevel, NotificationType } from 'src/enum.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('notification') @UpdatedAtTrigger('notification_updatedAt') diff --git a/server/src/schema/tables/ocr-search.table.ts b/server/src/schema/tables/ocr-search.table.ts index 74aefb333..a2e3b2710 100644 --- a/server/src/schema/tables/ocr-search.table.ts +++ b/server/src/schema/tables/ocr-search.table.ts @@ -1,5 +1,5 @@ import { Column, ForeignKeyColumn, Index, Table } from '@immich/sql-tools'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('ocr_search') @Index({ diff --git a/server/src/schema/tables/partner-audit.table.ts b/server/src/schema/tables/partner-audit.table.ts index 3cfd1854e..8881d9f5d 100644 --- a/server/src/schema/tables/partner-audit.table.ts +++ b/server/src/schema/tables/partner-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('partner_audit') export class PartnerAuditTable { diff --git a/server/src/schema/tables/partner.table.ts b/server/src/schema/tables/partner.table.ts index 408cac650..264344dda 100644 --- a/server/src/schema/tables/partner.table.ts +++ b/server/src/schema/tables/partner.table.ts @@ -3,14 +3,14 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { partner_delete_audit } from 'src/schema/functions'; -import { UserTable } from 'src/schema/tables/user.table'; +import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { partner_delete_audit } from 'src/schema/functions.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('partner') @UpdatedAtTrigger('partner_updatedAt') diff --git a/server/src/schema/tables/person-audit.table.ts b/server/src/schema/tables/person-audit.table.ts index 4045c2917..c8edf3448 100644 --- a/server/src/schema/tables/person-audit.table.ts +++ b/server/src/schema/tables/person-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('person_audit') export class PersonAuditTable { diff --git a/server/src/schema/tables/person-group-audit.table.ts b/server/src/schema/tables/person-group-audit.table.ts index a8a8117d5..71b491618 100644 --- a/server/src/schema/tables/person-group-audit.table.ts +++ b/server/src/schema/tables/person-group-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('person_group_audit') export class PersonGroupAuditTable { diff --git a/server/src/schema/tables/person-group.table.ts b/server/src/schema/tables/person-group.table.ts index 36e4c4a94..30d0ca419 100644 --- a/server/src/schema/tables/person-group.table.ts +++ b/server/src/schema/tables/person-group.table.ts @@ -2,15 +2,15 @@ import { AfterDeleteTrigger, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { person_group_delete_audit } from 'src/schema/functions'; -import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table'; +import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { person_group_delete_audit } from 'src/schema/functions.js'; +import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table.js'; @Table('person_group') @UpdatedAtTrigger('person_group_updatedAt') diff --git a/server/src/schema/tables/person.table.ts b/server/src/schema/tables/person.table.ts index 0c9324c92..84c6e190f 100644 --- a/server/src/schema/tables/person.table.ts +++ b/server/src/schema/tables/person.table.ts @@ -4,17 +4,17 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, Index, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { person_delete_audit } from 'src/schema/functions'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { PersonGroupTable } from 'src/schema/tables/person-group.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { person_delete_audit } from 'src/schema/functions.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { PersonGroupTable } from 'src/schema/tables/person-group.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('person') @Index({ diff --git a/server/src/schema/tables/plugin-method.table.ts b/server/src/schema/tables/plugin-method.table.ts index c80c9ab87..e56f5133b 100644 --- a/server/src/schema/tables/plugin-method.table.ts +++ b/server/src/schema/tables/plugin-method.table.ts @@ -1,7 +1,7 @@ -import { Column, ForeignKeyColumn, Generated, PrimaryGeneratedColumn, Table, Unique } from '@immich/sql-tools'; -import { JsonSchemaDto } from 'src/dtos/json-schema.dto'; -import { WorkflowType } from 'src/enum'; -import { PluginTable } from 'src/schema/tables/plugin.table'; +import { Column, ForeignKeyColumn, type Generated, PrimaryGeneratedColumn, Table, Unique } from '@immich/sql-tools'; +import { JsonSchemaDto } from 'src/dtos/json-schema.dto.js'; +import { WorkflowType } from 'src/enum.js'; +import { PluginTable } from 'src/schema/tables/plugin.table.js'; @Unique({ columns: ['pluginId', 'name'] }) @Table('plugin_method') diff --git a/server/src/schema/tables/plugin.table.ts b/server/src/schema/tables/plugin.table.ts index 5de5a329d..6f4e0f4f9 100644 --- a/server/src/schema/tables/plugin.table.ts +++ b/server/src/schema/tables/plugin.table.ts @@ -1,14 +1,14 @@ import { Column, CreateDateColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, Unique, UpdateDateColumn, } from '@immich/sql-tools'; -import { PluginTemplate } from 'src/dtos/plugin.dto'; +import { PluginTemplate } from 'src/dtos/plugin.dto.js'; @Unique({ columns: ['name', 'version'] }) @Table('plugin') diff --git a/server/src/schema/tables/session.table.ts b/server/src/schema/tables/session.table.ts index 68381b7f8..1c37d2ece 100644 --- a/server/src/schema/tables/session.table.ts +++ b/server/src/schema/tables/session.table.ts @@ -2,14 +2,14 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table({ name: 'session' }) @UpdatedAtTrigger('session_updatedAt') diff --git a/server/src/schema/tables/shared-link-asset.table.ts b/server/src/schema/tables/shared-link-asset.table.ts index ff96f6998..8b613191e 100644 --- a/server/src/schema/tables/shared-link-asset.table.ts +++ b/server/src/schema/tables/shared-link-asset.table.ts @@ -1,6 +1,6 @@ import { ForeignKeyColumn, Table } from '@immich/sql-tools'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { SharedLinkTable } from 'src/schema/tables/shared-link.table'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { SharedLinkTable } from 'src/schema/tables/shared-link.table.js'; @Table('shared_link_asset') export class SharedLinkAssetTable { diff --git a/server/src/schema/tables/shared-link.table.ts b/server/src/schema/tables/shared-link.table.ts index d99520388..7910805e5 100644 --- a/server/src/schema/tables/shared-link.table.ts +++ b/server/src/schema/tables/shared-link.table.ts @@ -2,14 +2,14 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, } from '@immich/sql-tools'; -import { SharedLinkType } from 'src/enum'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { SharedLinkType } from 'src/enum.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('shared_link') export class SharedLinkTable { diff --git a/server/src/schema/tables/smart-search.table.ts b/server/src/schema/tables/smart-search.table.ts index 31071e613..5540fe609 100644 --- a/server/src/schema/tables/smart-search.table.ts +++ b/server/src/schema/tables/smart-search.table.ts @@ -1,5 +1,5 @@ import { Column, ForeignKeyColumn, Index, Table } from '@immich/sql-tools'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table({ name: 'smart_search' }) @Index({ diff --git a/server/src/schema/tables/stack-audit.table.ts b/server/src/schema/tables/stack-audit.table.ts index 3a62545cd..726d44cda 100644 --- a/server/src/schema/tables/stack-audit.table.ts +++ b/server/src/schema/tables/stack-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('stack_audit') export class StackAuditTable { diff --git a/server/src/schema/tables/stack.table.ts b/server/src/schema/tables/stack.table.ts index 3f903e065..27a73bf90 100644 --- a/server/src/schema/tables/stack.table.ts +++ b/server/src/schema/tables/stack.table.ts @@ -2,16 +2,16 @@ import { AfterDeleteTrigger, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { stack_delete_audit } from 'src/schema/functions'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { stack_delete_audit } from 'src/schema/functions.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('stack') @UpdatedAtTrigger('stack_updatedAt') diff --git a/server/src/schema/tables/sync-checkpoint.table.ts b/server/src/schema/tables/sync-checkpoint.table.ts index d9ada5aed..a62b930d6 100644 --- a/server/src/schema/tables/sync-checkpoint.table.ts +++ b/server/src/schema/tables/sync-checkpoint.table.ts @@ -2,15 +2,15 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { SyncEntityType } from 'src/enum'; -import { SessionTable } from 'src/schema/tables/session.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { SyncEntityType } from 'src/enum.js'; +import { SessionTable } from 'src/schema/tables/session.table.js'; @Table('session_sync_checkpoint') @UpdatedAtTrigger('session_sync_checkpoint_updatedAt') diff --git a/server/src/schema/tables/system-metadata.table.ts b/server/src/schema/tables/system-metadata.table.ts index 9f2117250..50fa9be9b 100644 --- a/server/src/schema/tables/system-metadata.table.ts +++ b/server/src/schema/tables/system-metadata.table.ts @@ -1,6 +1,6 @@ import { Column, PrimaryColumn, Table } from '@immich/sql-tools'; -import { SystemMetadataKey } from 'src/enum'; -import { SystemMetadata } from 'src/types'; +import { SystemMetadataKey } from 'src/enum.js'; +import type { SystemMetadata } from 'src/types.js'; @Table('system_metadata') export class SystemMetadataTable { diff --git a/server/src/schema/tables/tag-asset.table.ts b/server/src/schema/tables/tag-asset.table.ts index 9d7ea026c..e86ca3d0c 100644 --- a/server/src/schema/tables/tag-asset.table.ts +++ b/server/src/schema/tables/tag-asset.table.ts @@ -1,6 +1,6 @@ import { ForeignKeyColumn, Index, Table } from '@immich/sql-tools'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { TagTable } from 'src/schema/tables/tag.table'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { TagTable } from 'src/schema/tables/tag.table.js'; @Index({ columns: ['assetId', 'tagId'] }) @Table('tag_asset') diff --git a/server/src/schema/tables/tag-closure.table.ts b/server/src/schema/tables/tag-closure.table.ts index 2e1c83a20..d23d2bff6 100644 --- a/server/src/schema/tables/tag-closure.table.ts +++ b/server/src/schema/tables/tag-closure.table.ts @@ -1,5 +1,5 @@ import { ForeignKeyColumn, Table } from '@immich/sql-tools'; -import { TagTable } from 'src/schema/tables/tag.table'; +import { TagTable } from 'src/schema/tables/tag.table.js'; @Table('tag_closure') export class TagClosureTable { diff --git a/server/src/schema/tables/tag.table.ts b/server/src/schema/tables/tag.table.ts index 2a07239d8..05dc68d3d 100644 --- a/server/src/schema/tables/tag.table.ts +++ b/server/src/schema/tables/tag.table.ts @@ -2,15 +2,15 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, Unique, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('tag') @UpdatedAtTrigger('tag_updatedAt') diff --git a/server/src/schema/tables/user-audit.table.ts b/server/src/schema/tables/user-audit.table.ts index 36f89dfa7..e63039bff 100644 --- a/server/src/schema/tables/user-audit.table.ts +++ b/server/src/schema/tables/user-audit.table.ts @@ -1,5 +1,5 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; @Table('user_audit') export class UserAuditTable { diff --git a/server/src/schema/tables/user-metadata-audit.table.ts b/server/src/schema/tables/user-metadata-audit.table.ts index 17dee673b..470e8683a 100644 --- a/server/src/schema/tables/user-metadata-audit.table.ts +++ b/server/src/schema/tables/user-metadata-audit.table.ts @@ -1,6 +1,6 @@ -import { Column, CreateDateColumn, Generated, Table, Timestamp } from '@immich/sql-tools'; -import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; -import { UserMetadataKey } from 'src/enum'; +import { Column, CreateDateColumn, type Generated, Table, Timestamp } from '@immich/sql-tools'; +import { PrimaryGeneratedUuidV7Column } from 'src/decorators.js'; +import { UserMetadataKey } from 'src/enum.js'; @Table('user_metadata_audit') export class UserMetadataAuditTable { diff --git a/server/src/schema/tables/user-metadata.table.ts b/server/src/schema/tables/user-metadata.table.ts index 6983ed3dd..bdbb3f0ce 100644 --- a/server/src/schema/tables/user-metadata.table.ts +++ b/server/src/schema/tables/user-metadata.table.ts @@ -2,17 +2,17 @@ import { AfterDeleteTrigger, Column, ForeignKeyColumn, - Generated, + type Generated, PrimaryColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { UserMetadataKey } from 'src/enum'; -import { user_metadata_audit } from 'src/schema/functions'; -import { UserTable } from 'src/schema/tables/user.table'; -import { UserMetadata, UserMetadataItem } from 'src/types'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { UserMetadataKey } from 'src/enum.js'; +import { user_metadata_audit } from 'src/schema/functions.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import type { UserMetadata, UserMetadataItem } from 'src/types.js'; @UpdatedAtTrigger('user_metadata_updated_at') @Table('user_metadata') diff --git a/server/src/schema/tables/user.table.ts b/server/src/schema/tables/user.table.ts index be8b05d12..1dfa224e5 100644 --- a/server/src/schema/tables/user.table.ts +++ b/server/src/schema/tables/user.table.ts @@ -4,7 +4,7 @@ import { CreateDateColumn, DeleteDateColumn, ForeignKeyColumn, - Generated, + type Generated, Index, PrimaryGeneratedColumn, Table, @@ -12,10 +12,10 @@ import { UpdateDateColumn, } from '@immich/sql-tools'; import { ColumnType } from 'kysely'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { UserAvatarColor, UserStatus } from 'src/enum'; -import { user_delete_audit } from 'src/schema/functions'; -import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { UserAvatarColor, UserStatus } from 'src/enum.js'; +import { user_delete_audit } from 'src/schema/functions.js'; +import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table.js'; @Table('user') @UpdatedAtTrigger('user_updatedAt') diff --git a/server/src/schema/tables/version-history.table.ts b/server/src/schema/tables/version-history.table.ts index 12eab7fd6..d320d5977 100644 --- a/server/src/schema/tables/version-history.table.ts +++ b/server/src/schema/tables/version-history.table.ts @@ -1,4 +1,4 @@ -import { Column, CreateDateColumn, Generated, PrimaryGeneratedColumn, Table, Timestamp } from '@immich/sql-tools'; +import { Column, CreateDateColumn, type Generated, PrimaryGeneratedColumn, Table, Timestamp } from '@immich/sql-tools'; @Table('version_history') export class VersionHistoryTable { diff --git a/server/src/schema/tables/video-stream.table.ts b/server/src/schema/tables/video-stream.table.ts index 1545b19d8..729120e02 100644 --- a/server/src/schema/tables/video-stream.table.ts +++ b/server/src/schema/tables/video-stream.table.ts @@ -2,16 +2,16 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, Index, PrimaryColumn, PrimaryGeneratedColumn, Table, - Timestamp, + type Timestamp, } from '@immich/sql-tools'; -import { VideoSegmentCodec } from 'src/enum'; -import { video_stream_variant_codec_enum } from 'src/schema/enums'; -import { AssetTable } from 'src/schema/tables/asset.table'; +import type { VideoSegmentCodec } from 'src/enum.js'; +import { video_stream_variant_codec_enum } from 'src/schema/enums.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; @Table('video_stream_session') export class VideoStreamSessionTable { diff --git a/server/src/schema/tables/workflow-log.table.ts b/server/src/schema/tables/workflow-log.table.ts index e720cb2a3..387743374 100644 --- a/server/src/schema/tables/workflow-log.table.ts +++ b/server/src/schema/tables/workflow-log.table.ts @@ -2,14 +2,14 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, } from '@immich/sql-tools'; -import { WorkflowResult } from 'src/enum'; -import { WorkflowStepTable } from 'src/schema/tables/workflow-step.table'; -import { WorkflowTable } from 'src/schema/tables/workflow.table'; +import { WorkflowResult } from 'src/enum.js'; +import { WorkflowStepTable } from 'src/schema/tables/workflow-step.table.js'; +import { WorkflowTable } from 'src/schema/tables/workflow.table.js'; @Table('workflow_log') export class WorkflowLogTable { diff --git a/server/src/schema/tables/workflow-step.table.ts b/server/src/schema/tables/workflow-step.table.ts index 49cb58c73..8d7696da1 100644 --- a/server/src/schema/tables/workflow-step.table.ts +++ b/server/src/schema/tables/workflow-step.table.ts @@ -1,8 +1,7 @@ import { WorkflowStepConfig } from '@immich/plugin-sdk'; -import { Column, ForeignKeyColumn, PrimaryGeneratedColumn, Table } from '@immich/sql-tools'; -import { Generated } from 'kysely'; -import { PluginMethodTable } from 'src/schema/tables/plugin-method.table'; -import { WorkflowTable } from 'src/schema/tables/workflow.table'; +import { Column, ForeignKeyColumn, PrimaryGeneratedColumn, Table, type Generated } from '@immich/sql-tools'; +import { PluginMethodTable } from 'src/schema/tables/plugin-method.table.js'; +import { WorkflowTable } from 'src/schema/tables/workflow.table.js'; @Table('workflow_step') export class WorkflowStepTable { diff --git a/server/src/schema/tables/workflow.table.ts b/server/src/schema/tables/workflow.table.ts index c0c9dc94e..0ab2cb27c 100644 --- a/server/src/schema/tables/workflow.table.ts +++ b/server/src/schema/tables/workflow.table.ts @@ -3,14 +3,14 @@ import { Column, CreateDateColumn, ForeignKeyColumn, - Generated, + type Generated, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from '@immich/sql-tools'; -import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; -import { UserTable } from 'src/schema/tables/user.table'; +import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; @Table('workflow') @UpdatedAtTrigger('workflow_updatedAt') diff --git a/server/src/services/activity.service.spec.ts b/server/src/services/activity.service.spec.ts index 03cd0132c..af1cc3e22 100644 --- a/server/src/services/activity.service.spec.ts +++ b/server/src/services/activity.service.spec.ts @@ -1,11 +1,11 @@ import { BadRequestException } from '@nestjs/common'; -import { ReactionType } from 'src/dtos/activity.dto'; -import { ActivityService } from 'src/services/activity.service'; -import { ActivityFactory } from 'test/factories/activity.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { getForActivity } from 'test/mappers'; -import { newUuid, newUuids } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { ReactionType } from 'src/dtos/activity.dto.js'; +import { ActivityService } from 'src/services/activity.service.js'; +import { ActivityFactory } from 'test/factories/activity.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { getForActivity } from 'test/mappers.js'; +import { newUuid, newUuids } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(ActivityService.name, () => { let sut: ActivityService; diff --git a/server/src/services/activity.service.ts b/server/src/services/activity.service.ts index 6e179f10f..60bba48bd 100644 --- a/server/src/services/activity.service.ts +++ b/server/src/services/activity.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { Activity } from 'src/database'; +import { Activity } from 'src/database.js'; import { ActivityCreateDto, ActivityDto, @@ -10,10 +10,10 @@ import { MaybeDuplicate, ReactionLevel, ReactionType, -} from 'src/dtos/activity.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { Permission } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; +} from 'src/dtos/activity.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { Permission } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; @Injectable() export class ActivityService extends BaseService { diff --git a/server/src/services/album.service.spec.ts b/server/src/services/album.service.spec.ts index a97407b2d..2a5930c86 100644 --- a/server/src/services/album.service.spec.ts +++ b/server/src/services/album.service.spec.ts @@ -1,16 +1,16 @@ import { BadRequestException } from '@nestjs/common'; -import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { AlbumUserRole, AssetOrder, UserMetadataKey } from 'src/enum'; -import { AlbumService } from 'src/services/album.service'; -import { AlbumUserFactory } from 'test/factories/album-user.factory'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { getForAlbum } from 'test/mappers'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { AlbumUserRole, AssetOrder, UserMetadataKey } from 'src/enum.js'; +import { AlbumService } from 'src/services/album.service.js'; +import { AlbumUserFactory } from 'test/factories/album-user.factory.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { getForAlbum } from 'test/mappers.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(AlbumService.name, () => { let sut: AlbumService; diff --git a/server/src/services/album.service.ts b/server/src/services/album.service.ts index 8cf3106dd..42e82e8a1 100644 --- a/server/src/services/album.service.ts +++ b/server/src/services/album.service.ts @@ -10,17 +10,17 @@ import { mapAlbum, UpdateAlbumDto, UpdateAlbumUserDto, -} from 'src/dtos/album.dto'; -import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { MapMarkerResponseDto } from 'src/dtos/map.dto'; -import { AlbumUserRole, Permission } from 'src/enum'; -import { AlbumAssetCount, AlbumInfoOptions } from 'src/repositories/album.repository'; -import { BaseService } from 'src/services/base.service'; -import { addAssets, removeAssets } from 'src/utils/asset.util'; -import { asDateTimeString } from 'src/utils/date'; -import { findOrFail } from 'src/utils/misc'; -import { getPreferences } from 'src/utils/preferences'; +} from 'src/dtos/album.dto.js'; +import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { MapMarkerResponseDto } from 'src/dtos/map.dto.js'; +import { AlbumUserRole, Permission } from 'src/enum.js'; +import { AlbumAssetCount, AlbumInfoOptions } from 'src/repositories/album.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { addAssets, removeAssets } from 'src/utils/asset.util.js'; +import { asDateTimeString } from 'src/utils/date.js'; +import { findOrFail } from 'src/utils/misc.js'; +import { getPreferences } from 'src/utils/preferences.js'; @Injectable() export class AlbumService extends BaseService { diff --git a/server/src/services/api-key.service.spec.ts b/server/src/services/api-key.service.spec.ts index 64ae09a0a..b12f9e5cf 100644 --- a/server/src/services/api-key.service.spec.ts +++ b/server/src/services/api-key.service.spec.ts @@ -1,11 +1,11 @@ import { BadRequestException, ForbiddenException } from '@nestjs/common'; -import { Permission } from 'src/enum'; -import { ApiKeyService } from 'src/services/api-key.service'; -import { ApiKeyFactory } from 'test/factories/api-key.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { SessionFactory } from 'test/factories/session.factory'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { Permission } from 'src/enum.js'; +import { ApiKeyService } from 'src/services/api-key.service.js'; +import { ApiKeyFactory } from 'test/factories/api-key.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { SessionFactory } from 'test/factories/session.factory.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(ApiKeyService.name, () => { let sut: ApiKeyService; diff --git a/server/src/services/api-key.service.ts b/server/src/services/api-key.service.ts index d65ebc4d9..e1067072a 100644 --- a/server/src/services/api-key.service.ts +++ b/server/src/services/api-key.service.ts @@ -1,11 +1,11 @@ import { BadRequestException, ForbiddenException, Injectable } from '@nestjs/common'; -import { ApiKey } from 'src/database'; -import { ApiKeyCreateDto, ApiKeyCreateResponseDto, ApiKeyResponseDto, ApiKeyUpdateDto } from 'src/dtos/api-key.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { Permission } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { isGranted } from 'src/utils/access'; -import { findOrFail } from 'src/utils/misc'; +import { ApiKey } from 'src/database.js'; +import { ApiKeyCreateDto, ApiKeyCreateResponseDto, ApiKeyResponseDto, ApiKeyUpdateDto } from 'src/dtos/api-key.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { Permission } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { isGranted } from 'src/utils/access.js'; +import { findOrFail } from 'src/utils/misc.js'; @Injectable() export class ApiKeyService extends BaseService { diff --git a/server/src/services/api.service.spec.ts b/server/src/services/api.service.spec.ts index 1152b8998..1d00867d7 100644 --- a/server/src/services/api.service.spec.ts +++ b/server/src/services/api.service.spec.ts @@ -1,4 +1,4 @@ -import { ApiService, render } from 'src/services/api.service'; +import { ApiService, render } from 'src/services/api.service.js'; describe(ApiService.name, () => { describe('render', () => { diff --git a/server/src/services/api.service.ts b/server/src/services/api.service.ts index 29e84eda7..6ea77a378 100644 --- a/server/src/services/api.service.ts +++ b/server/src/services/api.service.ts @@ -1,12 +1,12 @@ import { Injectable, NotAcceptableException } from '@nestjs/common'; import { NextFunction, Request, Response } from 'express'; -import { escape } from 'lodash'; +import { escape } from 'lodash-es'; import { readFileSync } from 'node:fs'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { AuthService } from 'src/services/auth.service'; -import { SharedLinkService } from 'src/services/shared-link.service'; -import { OpenGraphTags } from 'src/utils/misc'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { SharedLinkService } from 'src/services/shared-link.service.js'; +import { OpenGraphTags } from 'src/utils/misc.js'; export const render = (index: string, meta: OpenGraphTags) => { const [title, description, imageUrl] = [meta.title, meta.description, meta.imageUrl].map((item) => diff --git a/server/src/services/asset-file.service.ts b/server/src/services/asset-file.service.ts index 155d2d407..853b1983b 100644 --- a/server/src/services/asset-file.service.ts +++ b/server/src/services/asset-file.service.ts @@ -1,11 +1,11 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { AssetFileResponseDto, AssetFileSearchDto, mapAssetFile } from 'src/dtos/asset-file.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetFileType, CacheControl, JobName, Permission } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { getFilenameExtension, getFileNameWithoutExtension, ImmichFileResponse } from 'src/utils/file'; -import { mimeTypes } from 'src/utils/mime-types'; -import { findOrFail } from 'src/utils/misc'; +import { AssetFileResponseDto, AssetFileSearchDto, mapAssetFile } from 'src/dtos/asset-file.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { AssetFileType, CacheControl, JobName, Permission } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { getFilenameExtension, getFileNameWithoutExtension, ImmichFileResponse } from 'src/utils/file.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { findOrFail } from 'src/utils/misc.js'; @Injectable() export class AssetFileService extends BaseService { diff --git a/server/src/services/asset-media.service.spec.ts b/server/src/services/asset-media.service.spec.ts index 14527debb..0751cef21 100644 --- a/server/src/services/asset-media.service.spec.ts +++ b/server/src/services/asset-media.service.spec.ts @@ -4,25 +4,25 @@ import { NotFoundException, UnauthorizedException, } from '@nestjs/common'; -import { AssetFile } from 'src/database'; -import { AssetMediaStatus, AssetRejectReason, AssetUploadAction } from 'src/dtos/asset-media-response.dto'; -import { AssetMediaCreateDto, AssetMediaSize, UploadFieldName } from 'src/dtos/asset-media.dto'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { AssetEditAction } from 'src/dtos/editing.dto'; -import { AssetFileType, AssetType, AssetVisibility, CacheControl, JobName } from 'src/enum'; -import { AuthRequest } from 'src/middleware/auth.guard'; -import { AssetMediaService } from 'src/services/asset-media.service'; -import { UploadBody } from 'src/types'; -import { ASSET_CHECKSUM_CONSTRAINT } from 'src/utils/database'; -import { ImmichFileResponse } from 'src/utils/file'; -import { AssetFileFactory } from 'test/factories/asset-file.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { fileStub } from 'test/fixtures/file.stub'; -import { userStub } from 'test/fixtures/user.stub'; -import { getForAsset } from 'test/mappers'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { AssetFile } from 'src/database.js'; +import { AssetMediaStatus, AssetRejectReason, AssetUploadAction } from 'src/dtos/asset-media-response.dto.js'; +import { AssetMediaCreateDto, AssetMediaSize, UploadFieldName } from 'src/dtos/asset-media.dto.js'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { AssetEditAction } from 'src/dtos/editing.dto.js'; +import { AssetFileType, AssetType, AssetVisibility, CacheControl, JobName } from 'src/enum.js'; +import { AuthRequest } from 'src/middleware/auth.guard.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; +import type { UploadBody } from 'src/types.js'; +import { ASSET_CHECKSUM_CONSTRAINT } from 'src/utils/database.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { AssetFileFactory } from 'test/factories/asset-file.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { fileStub } from 'test/fixtures/file.stub.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { getForAsset } from 'test/mappers.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const file1 = Buffer.from('d2947b871a706081be194569951b7db246907957', 'hex'); diff --git a/server/src/services/asset-media.service.ts b/server/src/services/asset-media.service.ts index 1bb9d1e5b..ec75fcb6a 100644 --- a/server/src/services/asset-media.service.ts +++ b/server/src/services/asset-media.service.ts @@ -1,23 +1,23 @@ import { BadRequestException, Injectable, InternalServerErrorException, NotFoundException } from '@nestjs/common'; import sanitize from 'sanitize-filename'; -import { StorageCore } from 'src/cores/storage.core'; -import { Asset, AuthSharedLink } from 'src/database'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { Asset, AuthSharedLink } from 'src/database.js'; import { AssetBulkUploadCheckResponseDto, AssetMediaResponseDto, AssetMediaStatus, AssetRejectReason, AssetUploadAction, -} from 'src/dtos/asset-media-response.dto'; +} from 'src/dtos/asset-media-response.dto.js'; import { AssetBulkUploadCheckDto, AssetMediaCreateDto, AssetMediaOptionsDto, AssetMediaSize, UploadFieldName, -} from 'src/dtos/asset-media.dto'; -import { AssetDownloadOriginalDto } from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +} from 'src/dtos/asset-media.dto.js'; +import { AssetDownloadOriginalDto } from 'src/dtos/asset.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { AssetFileType, AssetVisibility, @@ -26,16 +26,16 @@ import { JobName, Permission, StorageFolder, -} from 'src/enum'; -import { AuthRequest } from 'src/middleware/auth.guard'; -import { BaseService } from 'src/services/base.service'; -import { UploadFile, UploadRequest } from 'src/types'; -import { requireUploadAccess } from 'src/utils/access'; -import { asUploadRequest, onBeforeLink } from 'src/utils/asset.util'; -import { isAssetChecksumConstraint } from 'src/utils/database'; -import { getFilenameExtension, getFileNameWithoutExtension, ImmichFileResponse } from 'src/utils/file'; -import { mimeTypes } from 'src/utils/mime-types'; -import { fromChecksum } from 'src/utils/request'; +} from 'src/enum.js'; +import { AuthRequest } from 'src/middleware/auth.guard.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { UploadFile, UploadRequest } from 'src/types.js'; +import { requireUploadAccess } from 'src/utils/access.js'; +import { asUploadRequest, onBeforeLink } from 'src/utils/asset.util.js'; +import { isAssetChecksumConstraint } from 'src/utils/database.js'; +import { getFilenameExtension, getFileNameWithoutExtension, ImmichFileResponse } from 'src/utils/file.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { fromChecksum } from 'src/utils/request.js'; export interface AssetMediaRedirectResponse { targetSize: AssetMediaSize | 'original'; diff --git a/server/src/services/asset.service.spec.ts b/server/src/services/asset.service.spec.ts index f5c430428..2bca1fec9 100755 --- a/server/src/services/asset.service.spec.ts +++ b/server/src/services/asset.service.spec.ts @@ -1,16 +1,24 @@ import { BadRequestException } from '@nestjs/common'; import { DateTime } from 'luxon'; -import { AssetJobName, AssetStatsResponseDto } from 'src/dtos/asset.dto'; -import { AssetEditAction } from 'src/dtos/editing.dto'; -import { AssetFileType, AssetMetadataKey, AssetStatus, AssetType, AssetVisibility, JobName, JobStatus } from 'src/enum'; -import { AssetStats } from 'src/repositories/asset.repository'; -import { AssetService } from 'src/services/asset.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { getForAsset, getForAssetDeletion } from 'test/mappers'; -import { factory, newUuid } from 'test/small.factory'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { AssetJobName, AssetStatsResponseDto } from 'src/dtos/asset.dto.js'; +import { AssetEditAction } from 'src/dtos/editing.dto.js'; +import { + AssetFileType, + AssetMetadataKey, + AssetStatus, + AssetType, + AssetVisibility, + JobName, + JobStatus, +} from 'src/enum.js'; +import { AssetStats } from 'src/repositories/asset.repository.js'; +import { AssetService } from 'src/services/asset.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { getForAsset, getForAssetDeletion } from 'test/mappers.js'; +import { factory, newUuid } from 'test/small.factory.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; const stats: AssetStats = { [AssetType.Image]: 10, diff --git a/server/src/services/asset.service.ts b/server/src/services/asset.service.ts index 83cc7a653..44525955d 100644 --- a/server/src/services/asset.service.ts +++ b/server/src/services/asset.service.ts @@ -1,9 +1,9 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import _ from 'lodash'; +import { isUndefined, omitBy } from 'lodash-es'; import { DateTime, Duration } from 'luxon'; -import { AssetFile } from 'src/database'; -import { OnJob } from 'src/decorators'; -import { AssetResponseDto, SanitizedAssetResponseDto, mapAsset } from 'src/dtos/asset-response.dto'; +import type { AssetFile } from 'src/database.js'; +import { OnJob } from 'src/decorators.js'; +import { AssetResponseDto, SanitizedAssetResponseDto, mapAsset } from 'src/dtos/asset-response.dto.js'; import { AssetBulkDeleteDto, AssetBulkUpdateDto, @@ -18,10 +18,15 @@ import { AssetStatsDto, UpdateAssetDto, mapStats, -} from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetEditAction, AssetEditActionItem, AssetEditsCreateDto, AssetEditsResponseDto } from 'src/dtos/editing.dto'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; +} from 'src/dtos/asset.dto.js'; +import type { AuthDto } from 'src/dtos/auth.dto.js'; +import { + AssetEditAction, + type AssetEditActionItem, + AssetEditsCreateDto, + AssetEditsResponseDto, +} from 'src/dtos/editing.dto.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; import { AssetFileType, AssetStatus, @@ -31,10 +36,10 @@ import { JobStatus, Permission, QueueName, -} from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { JobItem, JobOf } from 'src/types'; -import { requireElevatedPermission } from 'src/utils/access'; +} from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobItem, JobOf } from 'src/types.js'; +import { requireElevatedPermission } from 'src/utils/access.js'; import { getAssetFiles, getDimensions, @@ -42,11 +47,11 @@ import { onAfterUnlink, onBeforeLink, onBeforeUnlink, -} from 'src/utils/asset.util'; -import { updateLockedColumns } from 'src/utils/database'; -import { extractTimeZone } from 'src/utils/date'; -import { batched, findOrFail } from 'src/utils/misc'; -import { transformOcrBoundingBox } from 'src/utils/transform'; +} from 'src/utils/asset.util.js'; +import { updateLockedColumns } from 'src/utils/database.js'; +import { extractTimeZone } from 'src/utils/date.js'; +import { batched, findOrFail } from 'src/utils/misc.js'; +import { transformOcrBoundingBox } from 'src/utils/transform.js'; @Injectable() export class AssetService extends BaseService { @@ -143,8 +148,8 @@ export class AssetService extends BaseService { } = dto; await this.requireAccess({ auth, permission: Permission.AssetUpdate, ids }); - const assetDto = _.omitBy({ isFavorite, visibility, duplicateId }, _.isUndefined); - const exifDto = _.omitBy( + const assetDto = omitBy({ isFavorite, visibility, duplicateId }, isUndefined); + const exifDto = omitBy( { latitude, longitude, @@ -152,7 +157,7 @@ export class AssetService extends BaseService { description, dateTimeOriginal, }, - _.isUndefined, + isUndefined, ); if (Object.keys(exifDto).length > 0) { @@ -490,7 +495,7 @@ export class AssetService extends BaseService { rating?: number | null; }) { const { id, description, dateTimeOriginal, latitude, longitude, rating } = dto; - const writes = _.omitBy( + const writes = omitBy( { description, dateTimeOriginal, @@ -499,7 +504,7 @@ export class AssetService extends BaseService { longitude, rating, }, - _.isUndefined, + isUndefined, ); if (Object.keys(writes).length > 0) { diff --git a/server/src/services/auth-admin.service.ts b/server/src/services/auth-admin.service.ts index 3648a1995..0a42ec41c 100644 --- a/server/src/services/auth-admin.service.ts +++ b/server/src/services/auth-admin.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { BaseService } from 'src/services/base.service'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { BaseService } from 'src/services/base.service.js'; @Injectable() export class AuthAdminService extends BaseService { diff --git a/server/src/services/auth.service.spec.ts b/server/src/services/auth.service.spec.ts index 6a7469344..1181d73ca 100644 --- a/server/src/services/auth.service.spec.ts +++ b/server/src/services/auth.service.spec.ts @@ -1,21 +1,21 @@ import { BadRequestException, ForbiddenException, UnauthorizedException } from '@nestjs/common'; import { DateTime } from 'luxon'; -import { SALT_ROUNDS } from 'src/constants'; -import { UserAdmin } from 'src/database'; -import { AuthDto, SignUpDto } from 'src/dtos/auth.dto'; -import { AuthType, Permission } from 'src/enum'; -import { AuthService } from 'src/services/auth.service'; -import { UserMetadataItem } from 'src/types'; -import { ApiKeyFactory } from 'test/factories/api-key.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { OAuthProfileFactory } from 'test/factories/oauth-profile.factory'; -import { SessionFactory } from 'test/factories/session.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { sharedLinkStub } from 'test/fixtures/shared-link.stub'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { userStub } from 'test/fixtures/user.stub'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { SALT_ROUNDS } from 'src/constants.js'; +import { UserAdmin } from 'src/database.js'; +import { AuthDto, SignUpDto } from 'src/dtos/auth.dto.js'; +import { AuthType, Permission } from 'src/enum.js'; +import { AuthService } from 'src/services/auth.service.js'; +import type { UserMetadataItem } from 'src/types.js'; +import { ApiKeyFactory } from 'test/factories/api-key.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { OAuthProfileFactory } from 'test/factories/oauth-profile.factory.js'; +import { SessionFactory } from 'test/factories/session.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { sharedLinkStub } from 'test/fixtures/shared-link.stub.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const email = 'test@immich.com'; const loginDetails = { diff --git a/server/src/services/auth.service.ts b/server/src/services/auth.service.ts index 3229ae2b0..76f4e700d 100644 --- a/server/src/services/auth.service.ts +++ b/server/src/services/auth.service.ts @@ -2,8 +2,8 @@ import { BadRequestException, ForbiddenException, Injectable, UnauthorizedExcept import { parse } from 'cookie'; import { DateTime } from 'luxon'; import { IncomingHttpHeaders } from 'node:http'; -import { LOGIN_DUMMY_HASH, LOGIN_URL, MOBILE_REDIRECT, SALT_ROUNDS } from 'src/constants'; -import { AuthSharedLink, AuthUser, UserAdmin } from 'src/database'; +import { LOGIN_DUMMY_HASH, LOGIN_URL, MOBILE_REDIRECT, SALT_ROUNDS } from 'src/constants.js'; +import { AuthSharedLink, AuthUser, UserAdmin } from 'src/database.js'; import { AuthDto, AuthStatusResponseDto, @@ -19,15 +19,15 @@ import { SessionUnlockDto, SignUpDto, mapLoginResponse, -} from 'src/dtos/auth.dto'; -import { UserAdminResponseDto, mapUserAdmin } from 'src/dtos/user.dto'; -import { AuthType, ImmichCookie, ImmichHeader, ImmichQuery, JobName, Permission } from 'src/enum'; -import { OAuthProfile } from 'src/repositories/oauth.repository'; -import { BaseService } from 'src/services/base.service'; -import { isGranted } from 'src/utils/access'; -import { HumanReadableSize } from 'src/utils/bytes'; -import { generateProfileImage } from 'src/utils/profile-image'; -import { getUserAgentDetails } from 'src/utils/request'; +} from 'src/dtos/auth.dto.js'; +import { UserAdminResponseDto, mapUserAdmin } from 'src/dtos/user.dto.js'; +import { AuthType, ImmichCookie, ImmichHeader, ImmichQuery, JobName, Permission } from 'src/enum.js'; +import { OAuthProfile } from 'src/repositories/oauth.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { isGranted } from 'src/utils/access.js'; +import { HumanReadableSize } from 'src/utils/bytes.js'; +import { generateProfileImage } from 'src/utils/profile-image.js'; +import { getUserAgentDetails } from 'src/utils/request.js'; export interface LoginDetails { isSecure: boolean; clientIp: string; diff --git a/server/src/services/base.service.ts b/server/src/services/base.service.ts index 3c5dab1ed..a5fa25a1b 100644 --- a/server/src/services/base.service.ts +++ b/server/src/services/base.service.ts @@ -1,69 +1,69 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { Insertable } from 'kysely'; import sanitize from 'sanitize-filename'; -import { SALT_ROUNDS } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { UserAdmin } from 'src/database'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ActivityRepository } from 'src/repositories/activity.repository'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { ApiKeyRepository } from 'src/repositories/api-key.repository'; -import { AppRepository } from 'src/repositories/app.repository'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { AssetFileRepository } from 'src/repositories/asset-file.repository'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CronRepository } from 'src/repositories/cron.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { DownloadRepository } from 'src/repositories/download.repository'; -import { DuplicateRepository } from 'src/repositories/duplicate.repository'; -import { EmailRepository } from 'src/repositories/email.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { IntegrityRepository } from 'src/repositories/integrity.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LibraryRepository } from 'src/repositories/library.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { MapRepository } from 'src/repositories/map.repository'; -import { MediaRepository } from 'src/repositories/media.repository'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { MoveRepository } from 'src/repositories/move.repository'; -import { NotificationRepository } from 'src/repositories/notification.repository'; -import { OAuthRepository } from 'src/repositories/oauth.repository'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { ProcessRepository } from 'src/repositories/process.repository'; -import { SearchRepository } from 'src/repositories/search.repository'; -import { ServerInfoRepository } from 'src/repositories/server-info.repository'; -import { SessionRepository } from 'src/repositories/session.repository'; -import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository'; -import { SyncRepository } from 'src/repositories/sync.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { TrashRepository } from 'src/repositories/trash.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { VersionHistoryRepository } from 'src/repositories/version-history.repository'; -import { VideoStreamRepository } from 'src/repositories/video-stream.repository'; -import { ViewRepository } from 'src/repositories/view-repository'; -import { WebsocketRepository } from 'src/repositories/websocket.repository'; -import { WorkflowRepository } from 'src/repositories/workflow.repository'; -import { UserTable } from 'src/schema/tables/user.table'; -import { ClassConstructor } from 'src/types'; -import { AccessRequest, checkAccess, requireAccess } from 'src/utils/access'; -import { getConfig, updateConfig } from 'src/utils/config'; +import { SALT_ROUNDS } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { UserAdmin } from 'src/database.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ActivityRepository } from 'src/repositories/activity.repository.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { ApiKeyRepository } from 'src/repositories/api-key.repository.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { AssetFileRepository } from 'src/repositories/asset-file.repository.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CronRepository } from 'src/repositories/cron.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { DownloadRepository } from 'src/repositories/download.repository.js'; +import { DuplicateRepository } from 'src/repositories/duplicate.repository.js'; +import { EmailRepository } from 'src/repositories/email.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { IntegrityRepository } from 'src/repositories/integrity.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LibraryRepository } from 'src/repositories/library.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { MapRepository } from 'src/repositories/map.repository.js'; +import { MediaRepository } from 'src/repositories/media.repository.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import { MoveRepository } from 'src/repositories/move.repository.js'; +import { NotificationRepository } from 'src/repositories/notification.repository.js'; +import { OAuthRepository } from 'src/repositories/oauth.repository.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; +import { SearchRepository } from 'src/repositories/search.repository.js'; +import { ServerInfoRepository } from 'src/repositories/server-info.repository.js'; +import { SessionRepository } from 'src/repositories/session.repository.js'; +import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository.js'; +import { SyncRepository } from 'src/repositories/sync.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import { TrashRepository } from 'src/repositories/trash.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { VersionHistoryRepository } from 'src/repositories/version-history.repository.js'; +import { VideoStreamRepository } from 'src/repositories/video-stream.repository.js'; +import { ViewRepository } from 'src/repositories/view-repository.js'; +import { WebsocketRepository } from 'src/repositories/websocket.repository.js'; +import { WorkflowRepository } from 'src/repositories/workflow.repository.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import type { ClassConstructor } from 'src/types.js'; +import { AccessRequest, checkAccess, requireAccess } from 'src/utils/access.js'; +import { getConfig, updateConfig } from 'src/utils/config.js'; export const BASE_SERVICE_DEPENDENCIES = [ LoggingRepository, diff --git a/server/src/services/cli.service.spec.ts b/server/src/services/cli.service.spec.ts index 29c62d258..af5322ec4 100644 --- a/server/src/services/cli.service.spec.ts +++ b/server/src/services/cli.service.spec.ts @@ -1,8 +1,8 @@ import { jwtVerify } from 'jose'; -import { MaintenanceAction, SystemMetadataKey } from 'src/enum'; -import { CliService } from 'src/services/cli.service'; -import { UserFactory } from 'test/factories/user.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { MaintenanceAction, SystemMetadataKey } from 'src/enum.js'; +import { CliService } from 'src/services/cli.service.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; import { describe, it } from 'vitest'; describe(CliService.name, () => { diff --git a/server/src/services/cli.service.ts b/server/src/services/cli.service.ts index f37353d7a..ca74a276a 100644 --- a/server/src/services/cli.service.ts +++ b/server/src/services/cli.service.ts @@ -1,13 +1,13 @@ import { schemaDiff } from '@immich/sql-tools'; import { Injectable } from '@nestjs/common'; import { isAbsolute, join } from 'node:path'; -import { SALT_ROUNDS } from 'src/constants'; -import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto'; -import { UserAdminResponseDto, mapUserAdmin } from 'src/dtos/user.dto'; -import { MaintenanceAction, SystemMetadataKey } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { createMaintenanceLoginUrl, generateMaintenanceSecret } from 'src/utils/maintenance'; -import { getExternalDomain } from 'src/utils/misc'; +import { SALT_ROUNDS } from 'src/constants.js'; +import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto.js'; +import { UserAdminResponseDto, mapUserAdmin } from 'src/dtos/user.dto.js'; +import { MaintenanceAction, SystemMetadataKey } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { createMaintenanceLoginUrl, generateMaintenanceSecret } from 'src/utils/maintenance.js'; +import { getExternalDomain } from 'src/utils/misc.js'; export type SchemaReport = { migrations: MigrationStatus[]; @@ -22,8 +22,7 @@ type MigrationStatus = { @Injectable() export class CliService extends BaseService { async schemaReport(): Promise { - // eslint-disable-next-line unicorn/prefer-module - const allFiles = await this.storageRepository.readdir(join(__dirname, '../schema/migrations')); + const allFiles = await this.storageRepository.readdir(join(import.meta.dirname, '../schema/migrations')); const files = allFiles.filter((file) => file.endsWith('.js')).map((file) => file.slice(0, -3)); const rows = await this.databaseRepository.getMigrations(); const filesSet = new Set(files); diff --git a/server/src/services/cluster-group.service.ts b/server/src/services/cluster-group.service.ts index 521c2b0a5..a66c6cbf7 100644 --- a/server/src/services/cluster-group.service.ts +++ b/server/src/services/cluster-group.service.ts @@ -1,15 +1,15 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { MaybeDuplicate } from 'src/dtos/activity.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { MaybeDuplicate } from 'src/dtos/activity.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { ClusterGroupRequestCreateDto, ClusterGroupRequestResponseDto, mapClusterGroupRequest, -} from 'src/dtos/cluster-group.dto'; -import { mapUser, UserResponseDto } from 'src/dtos/user.dto'; -import { JobName, Permission } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { findOrFail } from 'src/utils/misc'; +} from 'src/dtos/cluster-group.dto.js'; +import { mapUser, UserResponseDto } from 'src/dtos/user.dto.js'; +import { JobName, Permission } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { findOrFail } from 'src/utils/misc.js'; @Injectable() export class ClusterGroupService extends BaseService { diff --git a/server/src/services/database-backup.service.spec.ts b/server/src/services/database-backup.service.spec.ts index 242eac9e5..d300914e9 100644 --- a/server/src/services/database-backup.service.spec.ts +++ b/server/src/services/database-backup.service.spec.ts @@ -1,13 +1,13 @@ import { BadRequestException } from '@nestjs/common'; import { DateTime } from 'luxon'; import { Duplex, PassThrough, Readable } from 'node:stream'; -import { StorageCore } from 'src/cores/storage.core'; -import { defaults, SystemConfig } from 'src/dtos/config.dto'; -import { ImmichWorker, JobStatus, StorageFolder } from 'src/enum'; -import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { automock, AutoMocked, getMocks, mockDuplex, mockSpawn, ServiceMocks } from 'test/utils'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { defaults, SystemConfig } from 'src/dtos/config.dto.js'; +import { ImmichWorker, JobStatus, StorageFolder } from 'src/enum.js'; +import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { automock, AutoMocked, getMocks, mockDuplex, mockSpawn, ServiceMocks } from 'test/utils.js'; describe(DatabaseBackupService.name, () => { let sut: DatabaseBackupService; diff --git a/server/src/services/database-backup.service.ts b/server/src/services/database-backup.service.ts index f4365bb5f..f513b6e6b 100644 --- a/server/src/services/database-backup.service.ts +++ b/server/src/services/database-backup.service.ts @@ -1,36 +1,36 @@ import { BadRequestException, Injectable, Optional } from '@nestjs/common'; -import { debounce } from 'lodash'; +import { debounce } from 'lodash-es'; import { DateTime } from 'luxon'; import path, { basename } from 'node:path'; import { Duplex, PassThrough, Readable, Writable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; import semver from 'semver'; -import { serverVersion } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; -import { DatabaseBackupListResponseDto } from 'src/dtos/database-backup.dto'; -import { CacheControl, DatabaseLock, ImmichWorker, JobName, JobStatus, QueueName, StorageFolder } from 'src/enum'; -import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CronRepository } from 'src/repositories/cron.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { ArgOf } from 'src/repositories/event.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { ProcessRepository } from 'src/repositories/process.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { getConfig } from 'src/utils/config'; +import { serverVersion } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { DatabaseBackupListResponseDto } from 'src/dtos/database-backup.dto.js'; +import { CacheControl, DatabaseLock, ImmichWorker, JobName, JobStatus, QueueName, StorageFolder } from 'src/enum.js'; +import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CronRepository } from 'src/repositories/cron.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { getConfig } from 'src/utils/config.js'; import { findDatabaseBackupVersion, isFailedDatabaseBackupName, isValidDatabaseBackupName, isValidDatabaseRoutineBackupName, UnsupportedPostgresError, -} from 'src/utils/database-backups'; -import { ImmichFileResponse } from 'src/utils/file'; -import { handlePromiseError } from 'src/utils/misc'; +} from 'src/utils/database-backups.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { handlePromiseError } from 'src/utils/misc.js'; @Injectable() export class DatabaseBackupService { diff --git a/server/src/services/database.service.spec.ts b/server/src/services/database.service.spec.ts index c735d42c5..15f3992e0 100644 --- a/server/src/services/database.service.spec.ts +++ b/server/src/services/database.service.spec.ts @@ -1,9 +1,9 @@ -import { EXTENSION_NAMES } from 'src/constants'; -import { DatabaseExtension, VectorIndex } from 'src/enum'; -import { DatabaseService } from 'src/services/database.service'; -import { VectorExtension } from 'src/types'; -import { envData, mockEnvData } from 'test/repositories/config.repository.mock'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { EXTENSION_NAMES } from 'src/constants.js'; +import { DatabaseExtension, VectorIndex } from 'src/enum.js'; +import { DatabaseService } from 'src/services/database.service.js'; +import type { VectorExtension } from 'src/types.js'; +import { envData, mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(DatabaseService.name, () => { let sut: DatabaseService; diff --git a/server/src/services/database.service.ts b/server/src/services/database.service.ts index 3201f76da..c6025a575 100644 --- a/server/src/services/database.service.ts +++ b/server/src/services/database.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; import semver from 'semver'; -import { ErrorMessages, EXTENSION_NAMES, VECTOR_EXTENSIONS } from 'src/constants'; -import { OnEvent } from 'src/decorators'; -import { BootstrapEventPriority, DatabaseExtension, DatabaseLock, VectorIndex } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { VectorExtension } from 'src/types'; +import { ErrorMessages, EXTENSION_NAMES, VECTOR_EXTENSIONS } from 'src/constants.js'; +import { OnEvent } from 'src/decorators.js'; +import { BootstrapEventPriority, DatabaseExtension, DatabaseLock, VectorIndex } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { VectorExtension } from 'src/types.js'; type CreateFailedArgs = { name: string; extension: string }; type UpdateFailedArgs = { name: string; extension: string; availableVersion: string }; diff --git a/server/src/services/download.service.spec.ts b/server/src/services/download.service.spec.ts index 8b2e2b97f..cb4d850d9 100644 --- a/server/src/services/download.service.spec.ts +++ b/server/src/services/download.service.spec.ts @@ -1,10 +1,10 @@ import { BadRequestException } from '@nestjs/common'; import { Readable } from 'node:stream'; -import { DownloadResponseDto } from 'src/dtos/download.dto'; -import { DownloadService } from 'src/services/download.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { DownloadResponseDto } from 'src/dtos/download.dto.js'; +import { DownloadService } from 'src/services/download.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; import { vitest } from 'vitest'; const downloadResponse: DownloadResponseDto = { diff --git a/server/src/services/download.service.ts b/server/src/services/download.service.ts index c73da1954..10c4c7f2f 100644 --- a/server/src/services/download.service.ts +++ b/server/src/services/download.service.ts @@ -1,14 +1,19 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { parse } from 'node:path'; import sanitize from 'sanitize-filename'; -import { StorageCore } from 'src/cores/storage.core'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { DownloadArchiveDto, DownloadArchiveInfo, DownloadInfoDto, DownloadResponseDto } from 'src/dtos/download.dto'; -import { Permission } from 'src/enum'; -import { ImmichReadStream } from 'src/repositories/storage.repository'; -import { BaseService } from 'src/services/base.service'; -import { HumanReadableSize } from 'src/utils/bytes'; -import { getPreferences } from 'src/utils/preferences'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { + DownloadArchiveDto, + DownloadArchiveInfo, + DownloadInfoDto, + DownloadResponseDto, +} from 'src/dtos/download.dto.js'; +import { Permission } from 'src/enum.js'; +import { ImmichReadStream } from 'src/repositories/storage.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { HumanReadableSize } from 'src/utils/bytes.js'; +import { getPreferences } from 'src/utils/preferences.js'; @Injectable() export class DownloadService extends BaseService { diff --git a/server/src/services/duplicate.service.spec.ts b/server/src/services/duplicate.service.spec.ts index 6e6f50d2f..305ac4715 100644 --- a/server/src/services/duplicate.service.spec.ts +++ b/server/src/services/duplicate.service.spec.ts @@ -1,13 +1,13 @@ import { BadRequestException } from '@nestjs/common'; -import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { AssetType, AssetVisibility, JobName, JobStatus } from 'src/enum'; -import { DuplicateService } from 'src/services/duplicate.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { getForDuplicate } from 'test/mappers'; -import { newUuid } from 'test/small.factory'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { AssetType, AssetVisibility, JobName, JobStatus } from 'src/enum.js'; +import { DuplicateService } from 'src/services/duplicate.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { getForDuplicate } from 'test/mappers.js'; +import { newUuid } from 'test/small.factory.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; import { beforeEach, describe, expect, it, vitest } from 'vitest'; vitest.useFakeTimers(); diff --git a/server/src/services/duplicate.service.ts b/server/src/services/duplicate.service.ts index 08c7630f9..dc882fcab 100644 --- a/server/src/services/duplicate.service.ts +++ b/server/src/services/duplicate.service.ts @@ -1,15 +1,15 @@ import { Injectable } from '@nestjs/common'; -import { OnJob } from 'src/decorators'; -import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { MapAsset, mapAsset } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { DuplicateResolveDto, DuplicateResolveGroupDto, DuplicateResponseDto } from 'src/dtos/duplicate.dto'; -import { AssetStatus, AssetVisibility, JobName, JobStatus, Permission, QueueName } from 'src/enum'; -import { AssetDuplicateResult } from 'src/repositories/search.repository'; -import { BaseService } from 'src/services/base.service'; -import { JobOf } from 'src/types'; -import { suggestDuplicateKeepAssetIds } from 'src/utils/duplicate'; -import { batched, isDuplicateDetectionEnabled } from 'src/utils/misc'; +import { OnJob } from 'src/decorators.js'; +import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { MapAsset, mapAsset } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { DuplicateResolveDto, DuplicateResolveGroupDto, DuplicateResponseDto } from 'src/dtos/duplicate.dto.js'; +import { AssetStatus, AssetVisibility, JobName, JobStatus, Permission, QueueName } from 'src/enum.js'; +import { AssetDuplicateResult } from 'src/repositories/search.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf } from 'src/types.js'; +import { suggestDuplicateKeepAssetIds } from 'src/utils/duplicate.js'; +import { batched, isDuplicateDetectionEnabled } from 'src/utils/misc.js'; type ResolveRequest = { assetUpdate: { diff --git a/server/src/services/hls.service.spec.ts b/server/src/services/hls.service.spec.ts index 5badd6c93..27cc368fd 100644 --- a/server/src/services/hls.service.spec.ts +++ b/server/src/services/hls.service.spec.ts @@ -1,9 +1,9 @@ import { BadRequestException, NotFoundException } from '@nestjs/common'; -import { HlsVideoResolution, VideoCodec } from 'src/enum'; -import { HlsService } from 'src/services/hls.service'; -import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub'; -import { factory } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { HlsVideoResolution, VideoCodec } from 'src/enum.js'; +import { HlsService } from 'src/services/hls.service.js'; +import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub.js'; +import { factory } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; // EXTINF values come from FFmpeg's playlist to enforce an exact match const eiffelExpectedMediaPlaylist = `#EXTM3U diff --git a/server/src/services/hls.service.ts b/server/src/services/hls.service.ts index d2f7133c0..21bfc9212 100644 --- a/server/src/services/hls.service.ts +++ b/server/src/services/hls.service.ts @@ -1,18 +1,18 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; import { constants } from 'node:fs'; import { join } from 'node:path'; -import { HLS_SEGMENT_DURATION, HLS_SEGMENT_FILENAME_REGEX, HLS_VARIANTS, HLS_VERSION } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { ConfigFFmpegDto } from 'src/dtos/config.dto'; -import { CacheControl, ImmichWorker, Permission } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { VideoPacketInfo, VideoStreamInfo } from 'src/types'; -import { PendingEvents } from 'src/utils/event'; -import { ImmichFileResponse } from 'src/utils/file'; -import { getCodecString, getOutputSize } from 'src/utils/media'; +import { HLS_SEGMENT_DURATION, HLS_SEGMENT_FILENAME_REGEX, HLS_VARIANTS, HLS_VERSION } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { ConfigFFmpegDto } from 'src/dtos/config.dto.js'; +import { CacheControl, ImmichWorker, Permission } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { VideoPacketInfo, VideoStreamInfo } from 'src/types.js'; +import { PendingEvents } from 'src/utils/event.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { getCodecString, getOutputSize } from 'src/utils/media.js'; type AssetWithStreamInfo = { videoStream: VideoStreamInfo & { timeBase: number }; packets: VideoPacketInfo }; type Segmentation = { fps: number; framesPerSegment: number; segmentCount: number; segmentDuration: number }; diff --git a/server/src/services/index.ts b/server/src/services/index.ts index 2a45d0308..b8ad33be0 100644 --- a/server/src/services/index.ts +++ b/server/src/services/index.ts @@ -1,56 +1,56 @@ -import { ActivityService } from 'src/services/activity.service'; -import { AlbumService } from 'src/services/album.service'; -import { ApiKeyService } from 'src/services/api-key.service'; -import { ApiService } from 'src/services/api.service'; -import { AssetFileService } from 'src/services/asset-file.service'; -import { AssetMediaService } from 'src/services/asset-media.service'; -import { AssetService } from 'src/services/asset.service'; -import { AuthAdminService } from 'src/services/auth-admin.service'; -import { AuthService } from 'src/services/auth.service'; -import { CliService } from 'src/services/cli.service'; -import { ClusterGroupService } from 'src/services/cluster-group.service'; -import { DatabaseBackupService } from 'src/services/database-backup.service'; -import { DatabaseService } from 'src/services/database.service'; -import { DownloadService } from 'src/services/download.service'; -import { DuplicateService } from 'src/services/duplicate.service'; -import { HlsService } from 'src/services/hls.service'; -import { IntegrityService } from 'src/services/integrity.service'; -import { JobService } from 'src/services/job.service'; -import { LibraryService } from 'src/services/library.service'; -import { MaintenanceService } from 'src/services/maintenance.service'; -import { MapService } from 'src/services/map.service'; -import { MediaService } from 'src/services/media.service'; -import { MemoryService } from 'src/services/memory.service'; -import { MetadataService } from 'src/services/metadata.service'; -import { NotificationAdminService } from 'src/services/notification-admin.service'; -import { NotificationService } from 'src/services/notification.service'; -import { OcrService } from 'src/services/ocr.service'; -import { PartnerService } from 'src/services/partner.service'; -import { PersonService } from 'src/services/person.service'; -import { PluginService } from 'src/services/plugin.service'; -import { QueueService } from 'src/services/queue.service'; -import { SearchService } from 'src/services/search.service'; -import { ServerService } from 'src/services/server.service'; -import { SessionService } from 'src/services/session.service'; -import { SharedLinkService } from 'src/services/shared-link.service'; -import { SmartInfoService } from 'src/services/smart-info.service'; -import { StackService } from 'src/services/stack.service'; -import { StorageTemplateService } from 'src/services/storage-template.service'; -import { StorageService } from 'src/services/storage.service'; -import { SyncService } from 'src/services/sync.service'; -import { SystemConfigService } from 'src/services/system-config.service'; -import { SystemMetadataService } from 'src/services/system-metadata.service'; -import { TagService } from 'src/services/tag.service'; -import { TelemetryService } from 'src/services/telemetry.service'; -import { TimelineService } from 'src/services/timeline.service'; -import { TranscodingService } from 'src/services/transcoding.service'; -import { TrashService } from 'src/services/trash.service'; -import { UserAdminService } from 'src/services/user-admin.service'; -import { UserService } from 'src/services/user.service'; -import { VersionService } from 'src/services/version.service'; -import { ViewService } from 'src/services/view.service'; -import { WorkflowExecutionService } from 'src/services/workflow-execution.service'; -import { WorkflowService } from 'src/services/workflow.service'; +import { ActivityService } from 'src/services/activity.service.js'; +import { AlbumService } from 'src/services/album.service.js'; +import { ApiKeyService } from 'src/services/api-key.service.js'; +import { ApiService } from 'src/services/api.service.js'; +import { AssetFileService } from 'src/services/asset-file.service.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; +import { AssetService } from 'src/services/asset.service.js'; +import { AuthAdminService } from 'src/services/auth-admin.service.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { CliService } from 'src/services/cli.service.js'; +import { ClusterGroupService } from 'src/services/cluster-group.service.js'; +import { DatabaseBackupService } from 'src/services/database-backup.service.js'; +import { DatabaseService } from 'src/services/database.service.js'; +import { DownloadService } from 'src/services/download.service.js'; +import { DuplicateService } from 'src/services/duplicate.service.js'; +import { HlsService } from 'src/services/hls.service.js'; +import { IntegrityService } from 'src/services/integrity.service.js'; +import { JobService } from 'src/services/job.service.js'; +import { LibraryService } from 'src/services/library.service.js'; +import { MaintenanceService } from 'src/services/maintenance.service.js'; +import { MapService } from 'src/services/map.service.js'; +import { MediaService } from 'src/services/media.service.js'; +import { MemoryService } from 'src/services/memory.service.js'; +import { MetadataService } from 'src/services/metadata.service.js'; +import { NotificationAdminService } from 'src/services/notification-admin.service.js'; +import { NotificationService } from 'src/services/notification.service.js'; +import { OcrService } from 'src/services/ocr.service.js'; +import { PartnerService } from 'src/services/partner.service.js'; +import { PersonService } from 'src/services/person.service.js'; +import { PluginService } from 'src/services/plugin.service.js'; +import { QueueService } from 'src/services/queue.service.js'; +import { SearchService } from 'src/services/search.service.js'; +import { ServerService } from 'src/services/server.service.js'; +import { SessionService } from 'src/services/session.service.js'; +import { SharedLinkService } from 'src/services/shared-link.service.js'; +import { SmartInfoService } from 'src/services/smart-info.service.js'; +import { StackService } from 'src/services/stack.service.js'; +import { StorageTemplateService } from 'src/services/storage-template.service.js'; +import { StorageService } from 'src/services/storage.service.js'; +import { SyncService } from 'src/services/sync.service.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; +import { SystemMetadataService } from 'src/services/system-metadata.service.js'; +import { TagService } from 'src/services/tag.service.js'; +import { TelemetryService } from 'src/services/telemetry.service.js'; +import { TimelineService } from 'src/services/timeline.service.js'; +import { TranscodingService } from 'src/services/transcoding.service.js'; +import { TrashService } from 'src/services/trash.service.js'; +import { UserAdminService } from 'src/services/user-admin.service.js'; +import { UserService } from 'src/services/user.service.js'; +import { VersionService } from 'src/services/version.service.js'; +import { ViewService } from 'src/services/view.service.js'; +import { WorkflowExecutionService } from 'src/services/workflow-execution.service.js'; +import { WorkflowService } from 'src/services/workflow.service.js'; export const services = [ ApiKeyService, diff --git a/server/src/services/integrity.service.spec.ts b/server/src/services/integrity.service.spec.ts index d4b38d632..2d386a39c 100644 --- a/server/src/services/integrity.service.spec.ts +++ b/server/src/services/integrity.service.spec.ts @@ -1,5 +1,5 @@ -import { IntegrityService } from 'src/services/integrity.service'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { IntegrityService } from 'src/services/integrity.service.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(IntegrityService.name, () => { let sut: IntegrityService; diff --git a/server/src/services/integrity.service.ts b/server/src/services/integrity.service.ts index 18add1c06..d1abb9fa9 100644 --- a/server/src/services/integrity.service.ts +++ b/server/src/services/integrity.service.ts @@ -3,14 +3,14 @@ import { createHash } from 'node:crypto'; import { basename } from 'node:path'; import { Readable, Writable } from 'node:stream'; import { pipeline } from 'node:stream/promises'; -import { JOBS_LIBRARY_PAGINATION_SIZE } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; +import { JOBS_LIBRARY_PAGINATION_SIZE } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; import { IntegrityGetReportDto, IntegrityReportResponseDto, IntegrityReportSummaryResponseDto, -} from 'src/dtos/integrity.dto'; +} from 'src/dtos/integrity.dto.js'; import { AssetStatus, CacheControl, @@ -22,10 +22,10 @@ import { QueueName, StorageFolder, SystemMetadataKey, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { IIntegrityDeleteReportsJob, IIntegrityDeleteReportTypeJob, IIntegrityJob, @@ -33,9 +33,9 @@ import { IIntegrityPathWithChecksumJob, IIntegrityPathWithReportJob, IIntegrityUntrackedFilesJob, -} from 'src/types'; -import { ImmichFileResponse } from 'src/utils/file'; -import { batched, handlePromiseError } from 'src/utils/misc'; +} from 'src/types.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { batched, handlePromiseError } from 'src/utils/misc.js'; /** * Untracked Files: diff --git a/server/src/services/job.service.spec.ts b/server/src/services/job.service.spec.ts index 7a7ebb8e0..44d418e40 100644 --- a/server/src/services/job.service.spec.ts +++ b/server/src/services/job.service.spec.ts @@ -1,9 +1,9 @@ -import { AssetType, ImmichWorker, JobName, JobStatus, QueueName } from 'src/enum'; -import { JobService } from 'src/services/job.service'; -import { JobItem } from 'src/types'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { AssetType, ImmichWorker, JobName, JobStatus, QueueName } from 'src/enum.js'; +import { JobService } from 'src/services/job.service.js'; +import type { JobItem } from 'src/types.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(JobService.name, () => { let sut: JobService; diff --git a/server/src/services/job.service.ts b/server/src/services/job.service.ts index 3a9f7e76c..e89f5a721 100644 --- a/server/src/services/job.service.ts +++ b/server/src/services/job.service.ts @@ -1,12 +1,12 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { OnEvent } from 'src/decorators'; -import { mapAsset } from 'src/dtos/asset-response.dto'; -import { JobCreateDto } from 'src/dtos/job.dto'; -import { AssetType, AssetVisibility, IntegrityReport, JobName, JobStatus, ManualJobName } from 'src/enum'; -import { ArgsOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { JobItem } from 'src/types'; -import { hexOrBufferToBase64 } from 'src/utils/bytes'; +import { OnEvent } from 'src/decorators.js'; +import { mapAsset } from 'src/dtos/asset-response.dto.js'; +import { JobCreateDto } from 'src/dtos/job.dto.js'; +import { AssetType, AssetVisibility, IntegrityReport, JobName, JobStatus, ManualJobName } from 'src/enum.js'; +import { ArgsOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobItem } from 'src/types.js'; +import { hexOrBufferToBase64 } from 'src/utils/bytes.js'; const asJobItem = (dto: JobCreateDto): JobItem => { switch (dto.name) { diff --git a/server/src/services/library.service.spec.ts b/server/src/services/library.service.spec.ts index 575de8759..42452c165 100644 --- a/server/src/services/library.service.spec.ts +++ b/server/src/services/library.service.spec.ts @@ -1,17 +1,17 @@ import { BadRequestException } from '@nestjs/common'; import { Stats } from 'node:fs'; -import { JOBS_LIBRARY_PAGINATION_SIZE } from 'src/constants'; -import { defaults, SystemConfig } from 'src/dtos/config.dto'; -import { mapLibrary } from 'src/dtos/library.dto'; -import { AssetType, CronJob, ImmichWorker, JobName, JobStatus } from 'src/enum'; -import { LibraryService } from 'src/services/library.service'; -import { ILibraryBulkIdsJob, ILibraryFileJob } from 'src/types'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { makeMockWatcher } from 'test/repositories/storage.repository.mock'; -import { factory, newDate, newUuid } from 'test/small.factory'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { JOBS_LIBRARY_PAGINATION_SIZE } from 'src/constants.js'; +import { defaults, SystemConfig } from 'src/dtos/config.dto.js'; +import { mapLibrary } from 'src/dtos/library.dto.js'; +import { AssetType, CronJob, ImmichWorker, JobName, JobStatus } from 'src/enum.js'; +import { LibraryService } from 'src/services/library.service.js'; +import type { ILibraryBulkIdsJob, ILibraryFileJob } from 'src/types.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { makeMockWatcher } from 'test/repositories/storage.repository.mock.js'; +import { factory, newDate, newUuid } from 'test/small.factory.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; import { vitest } from 'vitest'; async function* mockWalk() { diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index fa405b9d2..2d090f186 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -4,9 +4,9 @@ import { R_OK } from 'node:constants'; import { Stats } from 'node:fs'; import path, { isAbsolute, parse } from 'node:path'; import picomatch from 'picomatch'; -import { JOBS_LIBRARY_PAGINATION_SIZE } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; +import { JOBS_LIBRARY_PAGINATION_SIZE } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; import { CreateLibraryDto, LibraryResponseDto, @@ -16,7 +16,7 @@ import { ValidateLibraryDto, ValidateLibraryImportPathResponseDto, ValidateLibraryResponseDto, -} from 'src/dtos/library.dto'; +} from 'src/dtos/library.dto.js'; import { AssetStatus, AssetType, @@ -27,14 +27,14 @@ import { JobName, JobStatus, QueueName, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { AssetSyncResult } from 'src/repositories/library.repository'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { BaseService } from 'src/services/base.service'; -import { JobOf } from 'src/types'; -import { mimeTypes } from 'src/utils/mime-types'; -import { batched, findOrFail, handlePromiseError } from 'src/utils/misc'; +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { AssetSyncResult } from 'src/repositories/library.repository.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf } from 'src/types.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { batched, findOrFail, handlePromiseError } from 'src/utils/misc.js'; @Injectable() export class LibraryService extends BaseService { diff --git a/server/src/services/maintenance.service.spec.ts b/server/src/services/maintenance.service.spec.ts index 1eaefb689..d71d2ae98 100644 --- a/server/src/services/maintenance.service.spec.ts +++ b/server/src/services/maintenance.service.spec.ts @@ -1,6 +1,6 @@ -import { MaintenanceAction, SystemMetadataKey } from 'src/enum'; -import { MaintenanceService } from 'src/services/maintenance.service'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { MaintenanceAction, SystemMetadataKey } from 'src/enum.js'; +import { MaintenanceService } from 'src/services/maintenance.service.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(MaintenanceService.name, () => { let sut: MaintenanceService; diff --git a/server/src/services/maintenance.service.ts b/server/src/services/maintenance.service.ts index bcd6f2e83..6c1c5681a 100644 --- a/server/src/services/maintenance.service.ts +++ b/server/src/services/maintenance.service.ts @@ -1,22 +1,22 @@ import { Injectable } from '@nestjs/common'; -import { OnEvent } from 'src/decorators'; +import { OnEvent } from 'src/decorators.js'; import { MaintenanceAuthDto, MaintenanceDetectInstallResponseDto, MaintenanceStatusResponseDto, SetMaintenanceModeDto, -} from 'src/dtos/maintenance.dto'; -import { MaintenanceAction, SystemMetadataKey } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { MaintenanceModeState } from 'src/types'; +} from 'src/dtos/maintenance.dto.js'; +import { MaintenanceAction, SystemMetadataKey } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { MaintenanceModeState } from 'src/types.js'; import { createMaintenanceLoginUrl, detectPriorInstall, generateMaintenanceSecret, signMaintenanceJwt, -} from 'src/utils/maintenance'; -import { getExternalDomain } from 'src/utils/misc'; +} from 'src/utils/maintenance.js'; +import { getExternalDomain } from 'src/utils/misc.js'; /** * This service is available outside of maintenance mode to manage maintenance mode diff --git a/server/src/services/map.service.spec.ts b/server/src/services/map.service.spec.ts index d90726649..c8f724994 100644 --- a/server/src/services/map.service.spec.ts +++ b/server/src/services/map.service.spec.ts @@ -1,11 +1,11 @@ -import { MapService } from 'src/services/map.service'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { PartnerFactory } from 'test/factories/partner.factory'; -import { userStub } from 'test/fixtures/user.stub'; -import { getForPartner } from 'test/mappers'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { MapService } from 'src/services/map.service.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { PartnerFactory } from 'test/factories/partner.factory.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { getForPartner } from 'test/mappers.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(MapService.name, () => { let sut: MapService; diff --git a/server/src/services/map.service.ts b/server/src/services/map.service.ts index 594ef99c7..7ecb0e070 100644 --- a/server/src/services/map.service.ts +++ b/server/src/services/map.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { MapMarkerDto, MapMarkerResponseDto, MapReverseGeocodeDto } from 'src/dtos/map.dto'; -import { BaseService } from 'src/services/base.service'; -import { getMyPartnerIds } from 'src/utils/asset.util'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { MapMarkerDto, MapMarkerResponseDto, MapReverseGeocodeDto } from 'src/dtos/map.dto.js'; +import { BaseService } from 'src/services/base.service.js'; +import { getMyPartnerIds } from 'src/utils/asset.util.js'; @Injectable() export class MapService extends BaseService { diff --git a/server/src/services/media.service.spec.ts b/server/src/services/media.service.spec.ts index 1a5ecd340..0280956fc 100644 --- a/server/src/services/media.service.spec.ts +++ b/server/src/services/media.service.spec.ts @@ -1,8 +1,8 @@ import { ShallowDehydrateObject } from 'kysely'; import { OutputInfo } from 'sharp'; -import { Exif } from 'src/database'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { AssetEditAction } from 'src/dtos/editing.dto'; +import { Exif } from 'src/database.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetEditAction } from 'src/dtos/editing.dto.js'; import { AssetFileType, AssetPathType, @@ -19,18 +19,18 @@ import { TranscodeHardwareAcceleration, TranscodePolicy, VideoCodec, -} from 'src/enum'; -import { MediaService } from 'src/services/media.service'; -import { AudioStreamInfo, JobCounts, RawImageInfo, VideoFormat, VideoStreamInfo } from 'src/types'; -import { AssetFaceFactory } from 'test/factories/asset-face.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { PersonFactory } from 'test/factories/person.factory'; -import { probeStub } from 'test/fixtures/media.stub'; -import { personThumbnailStub } from 'test/fixtures/person.stub'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { getForGenerateThumbnail } from 'test/mappers'; -import { factory, newUuid } from 'test/small.factory'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +} from 'src/enum.js'; +import { MediaService } from 'src/services/media.service.js'; +import type { AudioStreamInfo, JobCounts, RawImageInfo, VideoFormat, VideoStreamInfo } from 'src/types.js'; +import { AssetFaceFactory } from 'test/factories/asset-face.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { PersonFactory } from 'test/factories/person.factory.js'; +import { probeStub } from 'test/fixtures/media.stub.js'; +import { personThumbnailStub } from 'test/fixtures/person.stub.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { getForGenerateThumbnail } from 'test/mappers.js'; +import { factory, newUuid } from 'test/small.factory.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; const fullsizeBuffer = Buffer.from('embedded image data'); const rawBuffer = Buffer.from('raw image data'); diff --git a/server/src/services/media.service.ts b/server/src/services/media.service.ts index 9fda932bc..f3fc8454d 100644 --- a/server/src/services/media.service.ts +++ b/server/src/services/media.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@nestjs/common'; -import { FACE_THUMBNAIL_SIZE } from 'src/constants'; -import { ImagePathOptions, StorageCore, ThumbnailPathEntity } from 'src/cores/storage.core'; -import { AssetFile } from 'src/database'; -import { OnEvent, OnJob } from 'src/decorators'; -import { ConfigFFmpegDto, SystemConfig } from 'src/dtos/config.dto'; -import { AssetEditAction, CropParameters } from 'src/dtos/editing.dto'; +import { FACE_THUMBNAIL_SIZE } from 'src/constants.js'; +import { ImagePathOptions, StorageCore, ThumbnailPathEntity } from 'src/cores/storage.core.js'; +import { AssetFile } from 'src/database.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { ConfigFFmpegDto, SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetEditAction, CropParameters } from 'src/dtos/editing.dto.js'; import { AssetFileType, AssetType, @@ -23,11 +23,11 @@ import { TranscodeTarget, VideoCodec, VideoContainer, -} from 'src/enum'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { BoundingBox } from 'src/repositories/machine-learning.repository'; -import { BaseService } from 'src/services/base.service'; -import { +} from 'src/enum.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { BoundingBox } from 'src/repositories/machine-learning.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { AudioStreamInfo, DecodeToBufferOptions, GenerateThumbnailOptions, @@ -37,13 +37,13 @@ import { VideoFormat, VideoInterfaces, VideoStreamInfo, -} from 'src/types'; -import { getAssetFile, getDimensions } from 'src/utils/asset.util'; -import { checkFaceVisibility, checkOcrVisibility } from 'src/utils/editor'; -import { BaseConfig, ThumbnailConfig } from 'src/utils/media'; -import { mimeTypes } from 'src/utils/mime-types'; -import { batched, clamp } from 'src/utils/misc'; -import { getOutputDimensions } from 'src/utils/transform'; +} from 'src/types.js'; +import { getAssetFile, getDimensions } from 'src/utils/asset.util.js'; +import { checkFaceVisibility, checkOcrVisibility } from 'src/utils/editor.js'; +import { BaseConfig, ThumbnailConfig } from 'src/utils/media.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { batched, clamp } from 'src/utils/misc.js'; +import { getOutputDimensions } from 'src/utils/transform.js'; interface UpsertFileOptions { assetId: string; diff --git a/server/src/services/memory.service.spec.ts b/server/src/services/memory.service.spec.ts index cc35c672f..7a63487e0 100644 --- a/server/src/services/memory.service.spec.ts +++ b/server/src/services/memory.service.spec.ts @@ -1,11 +1,11 @@ import { BadRequestException } from '@nestjs/common'; -import { MemoryService } from 'src/services/memory.service'; -import { OnThisDayData } from 'src/types'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { MemoryFactory } from 'test/factories/memory.factory'; -import { getForMemory } from 'test/mappers'; -import { factory, newUuid, newUuids } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { MemoryService } from 'src/services/memory.service.js'; +import type { OnThisDayData } from 'src/types.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { MemoryFactory } from 'test/factories/memory.factory.js'; +import { getForMemory } from 'test/mappers.js'; +import { factory, newUuid, newUuids } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(MemoryService.name, () => { let sut: MemoryService; diff --git a/server/src/services/memory.service.ts b/server/src/services/memory.service.ts index 9ffbba8c1..e1c5b9c19 100644 --- a/server/src/services/memory.service.ts +++ b/server/src/services/memory.service.ts @@ -1,14 +1,20 @@ import { Injectable } from '@nestjs/common'; import { DateTime } from 'luxon'; -import { Memory } from 'src/database'; -import { OnJob } from 'src/decorators'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { MemoryCreateDto, MemoryResponseDto, MemorySearchDto, MemoryUpdateDto, mapMemory } from 'src/dtos/memory.dto'; -import { DatabaseLock, JobName, MemoryType, Permission, QueueName, SystemMetadataKey } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { addAssets, removeAssets } from 'src/utils/asset.util'; -import { findOrFail } from 'src/utils/misc'; +import { Memory } from 'src/database.js'; +import { OnJob } from 'src/decorators.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { + MemoryCreateDto, + MemoryResponseDto, + MemorySearchDto, + MemoryUpdateDto, + mapMemory, +} from 'src/dtos/memory.dto.js'; +import { DatabaseLock, JobName, MemoryType, Permission, QueueName, SystemMetadataKey } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { addAssets, removeAssets } from 'src/utils/asset.util.js'; +import { findOrFail } from 'src/utils/misc.js'; const DAYS = 3; diff --git a/server/src/services/metadata.service.spec.ts b/server/src/services/metadata.service.spec.ts index 5f1036567..7963d4d04 100644 --- a/server/src/services/metadata.service.spec.ts +++ b/server/src/services/metadata.service.spec.ts @@ -2,7 +2,7 @@ import { BinaryField, ExifDateTime } from 'exiftool-vendored'; import { DateTime } from 'luxon'; import { randomBytes } from 'node:crypto'; import { Stats } from 'node:fs'; -import { defaults } from 'src/dtos/config.dto'; +import { defaults } from 'src/dtos/config.dto.js'; import { AssetFileType, AssetType, @@ -13,17 +13,17 @@ import { JobName, JobStatus, SourceType, -} from 'src/enum'; -import { ImmichTags } from 'src/repositories/metadata.repository'; -import { firstDateTime, MetadataService } from 'src/services/metadata.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { PersonGroupFactory } from 'test/factories/person-group.factory'; -import { PersonFactory } from 'test/factories/person.factory'; -import { videoInfoStub } from 'test/fixtures/media.stub'; -import { tagStub } from 'test/fixtures/tag.stub'; -import { getForMetadataExtraction, getForSidecarWrite } from 'test/mappers'; -import { factory } from 'test/small.factory'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +} from 'src/enum.js'; +import { ImmichTags } from 'src/repositories/metadata.repository.js'; +import { firstDateTime, MetadataService } from 'src/services/metadata.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { PersonGroupFactory } from 'test/factories/person-group.factory.js'; +import { PersonFactory } from 'test/factories/person.factory.js'; +import { videoInfoStub } from 'test/fixtures/media.stub.js'; +import { tagStub } from 'test/fixtures/tag.stub.js'; +import { getForMetadataExtraction, getForSidecarWrite } from 'test/mappers.js'; +import { factory } from 'test/small.factory.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; const forSidecarJob = ( asset: { @@ -1052,7 +1052,7 @@ describe(MetadataService.name, () => { ISO: 100, LensModel: 'test lens', MediaGroupUUID: 'livePhoto', - Make: 'test-factory', + Make: 'test-factory.js', Model: "'mockel'", ModifyDate: ExifDateTime.fromISO(dateForTest.toISOString()), Orientation: 0, diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index c6abad7cb..6d129c029 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -1,15 +1,14 @@ import { Injectable } from '@nestjs/common'; import { ContainerDirectoryItem, ExifDateTime, Tags } from 'exiftool-vendored'; import { Insertable } from 'kysely'; -import _ from 'lodash'; +import { isUndefined, omitBy, pick } from 'lodash-es'; import { DateTime, Duration } from 'luxon'; import { Stats } from 'node:fs'; import { constants } from 'node:fs/promises'; import { join, parse } from 'node:path'; - -import { StorageCore } from 'src/cores/storage.core'; -import { Asset, AssetFile } from 'src/database'; -import { OnEvent, OnJob } from 'src/decorators'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { Asset, AssetFile } from 'src/database.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; import { AssetFileType, AssetType, @@ -22,22 +21,22 @@ import { JobStatus, QueueName, SourceType, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { ReverseGeocodeResult } from 'src/repositories/map.repository'; -import { ImmichTags } from 'src/repositories/metadata.repository'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { BaseService } from 'src/services/base.service'; -import { JobOf } from 'src/types'; -import { getAssetFiles } from 'src/utils/asset.util'; -import { isAssetChecksumConstraint } from 'src/utils/database'; -import { mergeTimeZone } from 'src/utils/date'; -import { mimeTypes } from 'src/utils/mime-types'; -import { batched, isFaceImportEnabled } from 'src/utils/misc'; -import { upsertTags } from 'src/utils/tag'; -import { Tasks } from 'src/utils/tasks'; +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { ReverseGeocodeResult } from 'src/repositories/map.repository.js'; +import { ImmichTags } from 'src/repositories/metadata.repository.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf } from 'src/types.js'; +import { getAssetFiles } from 'src/utils/asset.util.js'; +import { isAssetChecksumConstraint } from 'src/utils/database.js'; +import { mergeTimeZone } from 'src/utils/date.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { batched, isFaceImportEnabled } from 'src/utils/misc.js'; +import { upsertTags } from 'src/utils/tag.js'; +import { Tasks } from 'src/utils/tasks.js'; const POSTGRES_INT_MAX = 2_147_483_647; const POSTGRES_INT_MIN = -2_147_483_648; @@ -485,7 +484,7 @@ export class MetadataService extends BaseService { const { sidecarFile } = getAssetFiles(asset.files); const sidecarPath = sidecarFile?.path || `${asset.originalPath}.xmp`; - const { description, dateTimeOriginal, latitude, longitude, rating, tags, timeZone } = _.pick( + const { description, dateTimeOriginal, latitude, longitude, rating, tags, timeZone } = pick( { description: asset.exifInfo.description, dateTimeOriginal: asset.exifInfo.dateTimeOriginal, @@ -498,7 +497,7 @@ export class MetadataService extends BaseService { lockedProperties, ); - const exif = _.omitBy( + const exif = omitBy( { Description: description, ImageDescription: description, @@ -508,7 +507,7 @@ export class MetadataService extends BaseService { Rating: rating, TagsList: tags, }, - _.isUndefined, + isUndefined, ); if (Object.keys(exif).length === 0) { diff --git a/server/src/services/notification-admin.service.spec.ts b/server/src/services/notification-admin.service.spec.ts index 12fb3e71f..eb4b0ca20 100644 --- a/server/src/services/notification-admin.service.spec.ts +++ b/server/src/services/notification-admin.service.spec.ts @@ -1,8 +1,8 @@ -import { defaults, SystemConfig } from 'src/dtos/config.dto'; -import { EmailTemplate } from 'src/repositories/email.repository'; -import { NotificationService } from 'src/services/notification.service'; -import { userStub } from 'test/fixtures/user.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { defaults, SystemConfig } from 'src/dtos/config.dto.js'; +import { EmailTemplate } from 'src/repositories/email.repository.js'; +import { NotificationService } from 'src/services/notification.service.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const smtpTransport = Object.freeze({ ...defaults, diff --git a/server/src/services/notification-admin.service.ts b/server/src/services/notification-admin.service.ts index 63c1da0d2..af4596cfd 100644 --- a/server/src/services/notification-admin.service.ts +++ b/server/src/services/notification-admin.service.ts @@ -1,11 +1,11 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfigSmtpDto } from 'src/dtos/config.dto'; -import { mapNotification, NotificationCreateDto } from 'src/dtos/notification.dto'; -import { NotificationLevel, NotificationType } from 'src/enum'; -import { EmailTemplate } from 'src/repositories/email.repository'; -import { BaseService } from 'src/services/base.service'; -import { getExternalDomain } from 'src/utils/misc'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfigSmtpDto } from 'src/dtos/config.dto.js'; +import { mapNotification, NotificationCreateDto } from 'src/dtos/notification.dto.js'; +import { NotificationLevel, NotificationType } from 'src/enum.js'; +import { EmailTemplate } from 'src/repositories/email.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { getExternalDomain } from 'src/utils/misc.js'; @Injectable() export class NotificationAdminService extends BaseService { diff --git a/server/src/services/notification.service.spec.ts b/server/src/services/notification.service.spec.ts index 47b9b7257..d3f945572 100644 --- a/server/src/services/notification.service.spec.ts +++ b/server/src/services/notification.service.spec.ts @@ -1,15 +1,15 @@ -import { AdminConfigDto, defaults, SystemConfig } from 'src/dtos/config.dto'; -import { AssetFileType, JobName, JobStatus, UserMetadataKey } from 'src/enum'; -import { NotificationService } from 'src/services/notification.service'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFileFactory } from 'test/factories/asset-file.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { notificationStub } from 'test/fixtures/notification.stub'; -import { userStub } from 'test/fixtures/user.stub'; -import { getForAlbum } from 'test/mappers'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { AdminConfigDto, defaults, SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetFileType, JobName, JobStatus, UserMetadataKey } from 'src/enum.js'; +import { NotificationService } from 'src/services/notification.service.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFileFactory } from 'test/factories/asset-file.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { notificationStub } from 'test/fixtures/notification.stub.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { getForAlbum } from 'test/mappers.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const configs = { smtpDisabled: Object.freeze({ diff --git a/server/src/services/notification.service.ts b/server/src/services/notification.service.ts index 6fcbd8191..ffd8da64a 100644 --- a/server/src/services/notification.service.ts +++ b/server/src/services/notification.service.ts @@ -1,9 +1,9 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { OnEvent, OnJob } from 'src/decorators'; -import { MapAlbumDto } from 'src/dtos/album.dto'; -import { mapAsset } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfigSmtpDto } from 'src/dtos/config.dto'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { MapAlbumDto } from 'src/dtos/album.dto.js'; +import { mapAsset } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfigSmtpDto } from 'src/dtos/config.dto.js'; import { mapNotification, NotificationDeleteAllDto, @@ -11,7 +11,7 @@ import { NotificationSearchDto, NotificationUpdateAllDto, NotificationUpdateDto, -} from 'src/dtos/notification.dto'; +} from 'src/dtos/notification.dto.js'; import { AssetFileType, JobName, @@ -20,15 +20,15 @@ import { NotificationType, Permission, QueueName, -} from 'src/enum'; -import { EmailTemplate } from 'src/repositories/email.repository'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { EmailImageAttachment, JobOf } from 'src/types'; -import { getFilenameExtension } from 'src/utils/file'; -import { getExternalDomain } from 'src/utils/misc'; -import { isEqualObject } from 'src/utils/object'; -import { getPreferences } from 'src/utils/preferences'; +} from 'src/enum.js'; +import { EmailTemplate } from 'src/repositories/email.repository.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { EmailImageAttachment, JobOf } from 'src/types.js'; +import { getFilenameExtension } from 'src/utils/file.js'; +import { getExternalDomain } from 'src/utils/misc.js'; +import { isEqualObject } from 'src/utils/object.js'; +import { getPreferences } from 'src/utils/preferences.js'; @Injectable() export class NotificationService extends BaseService { diff --git a/server/src/services/ocr.service.spec.ts b/server/src/services/ocr.service.spec.ts index d5b146e94..38481148f 100644 --- a/server/src/services/ocr.service.spec.ts +++ b/server/src/services/ocr.service.spec.ts @@ -1,8 +1,8 @@ -import { AssetFileType, AssetVisibility, ImmichWorker, JobName, JobStatus } from 'src/enum'; -import { OcrService } from 'src/services/ocr.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { AssetFileType, AssetVisibility, ImmichWorker, JobName, JobStatus } from 'src/enum.js'; +import { OcrService } from 'src/services/ocr.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; describe(OcrService.name, () => { let sut: OcrService; diff --git a/server/src/services/ocr.service.ts b/server/src/services/ocr.service.ts index 8e32a4437..f8f54afc0 100644 --- a/server/src/services/ocr.service.ts +++ b/server/src/services/ocr.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; -import { OnJob } from 'src/decorators'; -import { AssetVisibility, JobName, JobStatus, QueueName } from 'src/enum'; -import { OCR } from 'src/repositories/machine-learning.repository'; -import { BaseService } from 'src/services/base.service'; -import { JobOf } from 'src/types'; -import { tokenizeForSearch } from 'src/utils/database'; -import { batched, isOcrEnabled } from 'src/utils/misc'; +import { OnJob } from 'src/decorators.js'; +import { AssetVisibility, JobName, JobStatus, QueueName } from 'src/enum.js'; +import { OCR } from 'src/repositories/machine-learning.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf } from 'src/types.js'; +import { tokenizeForSearch } from 'src/utils/database.js'; +import { batched, isOcrEnabled } from 'src/utils/misc.js'; @Injectable() export class OcrService extends BaseService { diff --git a/server/src/services/partner.service.spec.ts b/server/src/services/partner.service.spec.ts index b947f3795..13682e89d 100644 --- a/server/src/services/partner.service.spec.ts +++ b/server/src/services/partner.service.spec.ts @@ -1,11 +1,11 @@ import { BadRequestException } from '@nestjs/common'; -import { PartnerDirection } from 'src/repositories/partner.repository'; -import { PartnerService } from 'src/services/partner.service'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { PartnerFactory } from 'test/factories/partner.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { getForPartner } from 'test/mappers'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { PartnerDirection } from 'src/repositories/partner.repository.js'; +import { PartnerService } from 'src/services/partner.service.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { PartnerFactory } from 'test/factories/partner.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { getForPartner } from 'test/mappers.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(PartnerService.name, () => { let sut: PartnerService; diff --git a/server/src/services/partner.service.ts b/server/src/services/partner.service.ts index 26d770107..4d5d74e0e 100644 --- a/server/src/services/partner.service.ts +++ b/server/src/services/partner.service.ts @@ -1,11 +1,11 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { Partner } from 'src/database'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { PartnerCreateDto, PartnerResponseDto, PartnerSearchDto, PartnerUpdateDto } from 'src/dtos/partner.dto'; -import { mapUser } from 'src/dtos/user.dto'; -import { Permission } from 'src/enum'; -import { PartnerDirection, PartnerIds } from 'src/repositories/partner.repository'; -import { BaseService } from 'src/services/base.service'; +import { Partner } from 'src/database.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { PartnerCreateDto, PartnerResponseDto, PartnerSearchDto, PartnerUpdateDto } from 'src/dtos/partner.dto.js'; +import { mapUser } from 'src/dtos/user.dto.js'; +import { Permission } from 'src/enum.js'; +import { PartnerDirection, PartnerIds } from 'src/repositories/partner.repository.js'; +import { BaseService } from 'src/services/base.service.js'; @Injectable() export class PartnerService extends BaseService { diff --git a/server/src/services/person.service.spec.ts b/server/src/services/person.service.spec.ts index 53deeca61..1266a7a91 100644 --- a/server/src/services/person.service.spec.ts +++ b/server/src/services/person.service.spec.ts @@ -1,17 +1,17 @@ import { BadRequestException, NotFoundException } from '@nestjs/common'; -import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { mapFaces, mapPerson } from 'src/dtos/person.dto'; -import { AssetFileType, CacheControl, JobName, JobStatus, SourceType, SystemMetadataKey } from 'src/enum'; -import { PersonService } from 'src/services/person.service'; -import { ImmichFileResponse } from 'src/utils/file'; -import { AssetFaceFactory } from 'test/factories/asset-face.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { PersonGroupFactory } from 'test/factories/person-group.factory'; -import { PersonFactory } from 'test/factories/person.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { mapFaces, mapPerson } from 'src/dtos/person.dto.js'; +import { AssetFileType, CacheControl, JobName, JobStatus, SourceType, SystemMetadataKey } from 'src/enum.js'; +import { PersonService } from 'src/services/person.service.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { AssetFaceFactory } from 'test/factories/asset-face.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { PersonGroupFactory } from 'test/factories/person-group.factory.js'; +import { PersonFactory } from 'test/factories/person.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; import { getAsDetectedFace, getForAsset, @@ -19,9 +19,9 @@ import { getForDetectedFaces, getForFaceSearch, getForFacialRecognitionJob, -} from 'test/mappers'; -import { newDate, newUuid } from 'test/small.factory'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +} from 'test/mappers.js'; +import { newDate, newUuid } from 'test/small.factory.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; describe(PersonService.name, () => { let sut: PersonService; diff --git a/server/src/services/person.service.ts b/server/src/services/person.service.ts index 0606eb70c..1a4e38b1c 100644 --- a/server/src/services/person.service.ts +++ b/server/src/services/person.service.ts @@ -1,9 +1,9 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; import { Insertable, Selectable, Updateable } from 'kysely'; -import { Person } from 'src/database'; -import { Chunked, OnJob } from 'src/decorators'; -import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { Person } from 'src/database.js'; +import { Chunked, OnJob } from 'src/decorators.js'; +import { BulkIdErrorReason, BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { AssetFaceCreateDto, AssetFaceDeleteDto, @@ -20,7 +20,7 @@ import { PersonSearchDto, PersonStatisticsResponseDto, PersonUpdateDto, -} from 'src/dtos/person.dto'; +} from 'src/dtos/person.dto.js'; import { AssetVisibility, CacheControl, @@ -32,19 +32,19 @@ import { SourceType, SystemMetadataKey, VectorIndex, -} from 'src/enum'; -import { BoundingBox } from 'src/repositories/machine-learning.repository'; -import { PersonId, UpdateFacesData } from 'src/repositories/person.repository'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { FaceSearchTable } from 'src/schema/tables/face-search.table'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { BaseService } from 'src/services/base.service'; -import { JobItem, JobOf } from 'src/types'; -import { getDimensions } from 'src/utils/asset.util'; -import { ImmichFileResponse } from 'src/utils/file'; -import { mimeTypes } from 'src/utils/mime-types'; -import { batched, findOrFail, isFacialRecognitionEnabled } from 'src/utils/misc'; -import { Point, transformPoints } from 'src/utils/transform'; +} from 'src/enum.js'; +import { BoundingBox } from 'src/repositories/machine-learning.repository.js'; +import { PersonId, UpdateFacesData } from 'src/repositories/person.repository.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { FaceSearchTable } from 'src/schema/tables/face-search.table.js'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobItem, JobOf } from 'src/types.js'; +import { getDimensions } from 'src/utils/asset.util.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { batched, findOrFail, isFacialRecognitionEnabled } from 'src/utils/misc.js'; +import { Point, transformPoints } from 'src/utils/transform.js'; const personKey = ({ ownerId, personGroupId }: PersonId) => `${ownerId}/${personGroupId}`; diff --git a/server/src/services/plugin.service.ts b/server/src/services/plugin.service.ts index f9c4d0e2b..78075f2e0 100644 --- a/server/src/services/plugin.service.ts +++ b/server/src/services/plugin.service.ts @@ -8,9 +8,9 @@ import { PluginResponseDto, PluginSearchDto, PluginTemplateResponseDto, -} from 'src/dtos/plugin.dto'; -import { BaseService } from 'src/services/base.service'; -import { isMethodCompatible } from 'src/utils/workflow'; +} from 'src/dtos/plugin.dto.js'; +import { BaseService } from 'src/services/base.service.js'; +import { isMethodCompatible } from 'src/utils/workflow.js'; @Injectable() export class PluginService extends BaseService { diff --git a/server/src/services/queue.service.spec.ts b/server/src/services/queue.service.spec.ts index 3490c634e..331c22201 100644 --- a/server/src/services/queue.service.spec.ts +++ b/server/src/services/queue.service.spec.ts @@ -1,9 +1,9 @@ import { BadRequestException } from '@nestjs/common'; -import { defaults, SystemConfig } from 'src/dtos/config.dto'; -import { ImmichWorker, JobName, QueueCommand, QueueName } from 'src/enum'; -import { QueueService } from 'src/services/queue.service'; -import { factory } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { defaults, SystemConfig } from 'src/dtos/config.dto.js'; +import { ImmichWorker, JobName, QueueCommand, QueueName } from 'src/enum.js'; +import { QueueService } from 'src/services/queue.service.js'; +import { factory } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(QueueService.name, () => { let sut: QueueService; diff --git a/server/src/services/queue.service.ts b/server/src/services/queue.service.ts index 7130146c1..794cac97c 100644 --- a/server/src/services/queue.service.ts +++ b/server/src/services/queue.service.ts @@ -1,13 +1,13 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { OnEvent } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfig } from 'src/dtos/config.dto'; +import { OnEvent } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; import { mapQueueLegacy, mapQueuesLegacy, QueueResponseLegacyDto, QueuesResponseLegacyDto, -} from 'src/dtos/queue-legacy.dto'; +} from 'src/dtos/queue-legacy.dto.js'; import { QueueCommandDto, QueueDeleteDto, @@ -15,7 +15,7 @@ import { QueueJobSearchDto, QueueResponseDto, QueueUpdateDto, -} from 'src/dtos/queue.dto'; +} from 'src/dtos/queue.dto.js'; import { BootstrapEventPriority, CronJob, @@ -25,11 +25,11 @@ import { QueueCleanType, QueueCommand, QueueName, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { ConcurrentQueueName, JobItem } from 'src/types'; -import { handlePromiseError } from 'src/utils/misc'; +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { ConcurrentQueueName, JobItem } from 'src/types.js'; +import { handlePromiseError } from 'src/utils/misc.js'; const asNightlyTasksCron = (config: SystemConfig) => { const [hours, minutes] = config.nightlyTasks.startTime.split(':').map(Number); diff --git a/server/src/services/search.service.spec.ts b/server/src/services/search.service.spec.ts index 1496acd92..3fd665046 100644 --- a/server/src/services/search.service.spec.ts +++ b/server/src/services/search.service.spec.ts @@ -1,14 +1,14 @@ import { BadRequestException, UnauthorizedException } from '@nestjs/common'; -import { mapAsset } from 'src/dtos/asset-response.dto'; -import { SearchSuggestionType } from 'src/dtos/search.dto'; -import { AssetVisibility } from 'src/enum'; -import { SearchService } from 'src/services/search.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { getForAsset } from 'test/mappers'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { mapAsset } from 'src/dtos/asset-response.dto.js'; +import { SearchSuggestionType } from 'src/dtos/search.dto.js'; +import { AssetVisibility } from 'src/enum.js'; +import { SearchService } from 'src/services/search.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { getForAsset } from 'test/mappers.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; import { beforeEach, vitest } from 'vitest'; vitest.useFakeTimers(); diff --git a/server/src/services/search.service.ts b/server/src/services/search.service.ts index d1791f05b..7f73d0886 100644 --- a/server/src/services/search.service.ts +++ b/server/src/services/search.service.ts @@ -1,9 +1,9 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { LRUMap } from 'mnemonist'; -import { AssetMapOptions, AssetResponseDto, MapAsset, mapAsset } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { mapPerson, PersonResponseDto } from 'src/dtos/person.dto'; +import { AssetMapOptions, AssetResponseDto, MapAsset, mapAsset } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { mapPerson, PersonResponseDto } from 'src/dtos/person.dto.js'; import { isFullyAlbumConfined, isNewShapeRequest, @@ -21,15 +21,15 @@ import { SearchSuggestionType, SmartSearchDto, StatisticsSearchDto, -} from 'src/dtos/search.dto'; -import { AssetOrder, AssetVisibility, Permission } from 'src/enum'; -import { AssetSearchScope } from 'src/repositories/search.repository'; -import { BaseService } from 'src/services/base.service'; -import { requireElevatedPermission } from 'src/utils/access'; -import { getMyPartnerIds } from 'src/utils/asset.util'; -import { isSmartSearchEnabled } from 'src/utils/misc'; -import { decodeSearchCursor, encodeSearchCursor } from 'src/utils/search-cursor'; -import { applyLockedVisibilityPolicy, collectFilterIds } from 'src/utils/search-filter'; +} from 'src/dtos/search.dto.js'; +import { AssetOrder, AssetVisibility, Permission } from 'src/enum.js'; +import { AssetSearchScope } from 'src/repositories/search.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { requireElevatedPermission } from 'src/utils/access.js'; +import { getMyPartnerIds } from 'src/utils/asset.util.js'; +import { isSmartSearchEnabled } from 'src/utils/misc.js'; +import { decodeSearchCursor, encodeSearchCursor } from 'src/utils/search-cursor.js'; +import { applyLockedVisibilityPolicy, collectFilterIds } from 'src/utils/search-filter.js'; @Injectable() export class SearchService extends BaseService { diff --git a/server/src/services/server.service.spec.ts b/server/src/services/server.service.spec.ts index 82f53bcf3..cecac3718 100644 --- a/server/src/services/server.service.spec.ts +++ b/server/src/services/server.service.spec.ts @@ -1,7 +1,7 @@ -import { SystemMetadataKey } from 'src/enum'; -import { ServerService } from 'src/services/server.service'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { SystemMetadataKey } from 'src/enum.js'; +import { ServerService } from 'src/services/server.service.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(ServerService.name, () => { let sut: ServerService; diff --git a/server/src/services/server.service.ts b/server/src/services/server.service.ts index 6732099fa..1de815e17 100644 --- a/server/src/services/server.service.ts +++ b/server/src/services/server.service.ts @@ -1,8 +1,8 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; -import { serverVersion } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent } from 'src/decorators'; -import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto'; +import { serverVersion } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent } from 'src/decorators.js'; +import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto.js'; import { ServerAboutResponseDto, ServerApkLinksDto, @@ -13,18 +13,18 @@ import { ServerStatsResponseDto, ServerStorageResponseDto, UsageByUserDto, -} from 'src/dtos/server.dto'; -import { StorageFolder, SystemMetadataKey } from 'src/enum'; -import { UserStatsQueryResponse } from 'src/repositories/user.repository'; -import { BaseService } from 'src/services/base.service'; -import { asHumanReadable } from 'src/utils/bytes'; -import { mimeTypes } from 'src/utils/mime-types'; +} from 'src/dtos/server.dto.js'; +import { StorageFolder, SystemMetadataKey } from 'src/enum.js'; +import { UserStatsQueryResponse } from 'src/repositories/user.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { asHumanReadable } from 'src/utils/bytes.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; import { isDuplicateDetectionEnabled, isFacialRecognitionEnabled, isOcrEnabled, isSmartSearchEnabled, -} from 'src/utils/misc'; +} from 'src/utils/misc.js'; @Injectable() export class ServerService extends BaseService { diff --git a/server/src/services/session.service.spec.ts b/server/src/services/session.service.spec.ts index c6bd5f2f7..22ec53cba 100644 --- a/server/src/services/session.service.spec.ts +++ b/server/src/services/session.service.spec.ts @@ -1,9 +1,9 @@ -import { JobStatus } from 'src/enum'; -import { SessionService } from 'src/services/session.service'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { SessionFactory } from 'test/factories/session.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { JobStatus } from 'src/enum.js'; +import { SessionService } from 'src/services/session.service.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { SessionFactory } from 'test/factories/session.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe('SessionService', () => { let sut: SessionService; diff --git a/server/src/services/session.service.ts b/server/src/services/session.service.ts index 735a8c245..e1ebec9d8 100644 --- a/server/src/services/session.service.ts +++ b/server/src/services/session.service.ts @@ -1,17 +1,17 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { DateTime } from 'luxon'; -import { OnEvent, OnJob } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { SessionCreateDto, SessionCreateResponseDto, SessionResponseDto, SessionUpdateDto, mapSession, -} from 'src/dtos/session.dto'; -import { JobName, JobStatus, Permission, QueueName } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; +} from 'src/dtos/session.dto.js'; +import { JobName, JobStatus, Permission, QueueName } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; @Injectable() export class SessionService extends BaseService { diff --git a/server/src/services/shared-link.service.spec.ts b/server/src/services/shared-link.service.spec.ts index 684d15bf7..33e587993 100644 --- a/server/src/services/shared-link.service.spec.ts +++ b/server/src/services/shared-link.service.spec.ts @@ -1,16 +1,16 @@ import { BadRequestException, ForbiddenException, UnauthorizedException } from '@nestjs/common'; -import { AssetIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { mapSharedLink } from 'src/dtos/shared-link.dto'; -import { SharedLinkType } from 'src/enum'; -import { SharedLinkService } from 'src/services/shared-link.service'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { SharedLinkFactory } from 'test/factories/shared-link.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { sharedLinkStub } from 'test/fixtures/shared-link.stub'; -import { getForSharedLink } from 'test/mappers'; -import { factory } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { AssetIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { mapSharedLink } from 'src/dtos/shared-link.dto.js'; +import { SharedLinkType } from 'src/enum.js'; +import { SharedLinkService } from 'src/services/shared-link.service.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { SharedLinkFactory } from 'test/factories/shared-link.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { sharedLinkStub } from 'test/fixtures/shared-link.stub.js'; +import { getForSharedLink } from 'test/mappers.js'; +import { factory } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(SharedLinkService.name, () => { let sut: SharedLinkService; diff --git a/server/src/services/shared-link.service.ts b/server/src/services/shared-link.service.ts index 31ca32f55..599cf34f3 100644 --- a/server/src/services/shared-link.service.ts +++ b/server/src/services/shared-link.service.ts @@ -1,8 +1,8 @@ import { BadRequestException, ForbiddenException, Injectable, UnauthorizedException } from '@nestjs/common'; import { PostgresError } from 'postgres'; -import { AssetIdErrorReason, AssetIdsResponseDto } from 'src/dtos/asset-ids.response.dto'; -import { AssetIdsDto } from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { AssetIdErrorReason, AssetIdsResponseDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AssetIdsDto } from 'src/dtos/asset.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { mapSharedLink, SharedLinkCreateDto, @@ -10,10 +10,10 @@ import { SharedLinkLoginDto, SharedLinkResponseDto, SharedLinkSearchDto, -} from 'src/dtos/shared-link.dto'; -import { Permission, SharedLinkType } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { findOrFail, getExternalDomain, OpenGraphTags } from 'src/utils/misc'; +} from 'src/dtos/shared-link.dto.js'; +import { Permission, SharedLinkType } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { findOrFail, getExternalDomain, OpenGraphTags } from 'src/utils/misc.js'; @Injectable() export class SharedLinkService extends BaseService { diff --git a/server/src/services/shared/user-methods.ts b/server/src/services/shared/user-methods.ts index 96e3a3075..5f03fc827 100644 --- a/server/src/services/shared/user-methods.ts +++ b/server/src/services/shared/user-methods.ts @@ -1,8 +1,8 @@ import { DateTime } from 'luxon'; -import { CalendarHeatmapDto } from 'src/dtos/calendar-heatmap.dto'; -import { CalendarHeatmapType } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { asDateString } from 'src/utils/date'; +import { CalendarHeatmapDto } from 'src/dtos/calendar-heatmap.dto.js'; +import { CalendarHeatmapType } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { asDateString } from 'src/utils/date.js'; export const getCalendarHeatmap = async ( userId: string, diff --git a/server/src/services/smart-info.service.spec.ts b/server/src/services/smart-info.service.spec.ts index 354672a6e..c97d0c1da 100644 --- a/server/src/services/smart-info.service.spec.ts +++ b/server/src/services/smart-info.service.spec.ts @@ -1,10 +1,10 @@ -import { SystemConfig } from 'src/dtos/config.dto'; -import { AssetFileType, AssetVisibility, ImmichWorker, JobName, JobStatus } from 'src/enum'; -import { SmartInfoService } from 'src/services/smart-info.service'; -import { getCLIPModelInfo } from 'src/utils/misc'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetFileType, AssetVisibility, ImmichWorker, JobName, JobStatus } from 'src/enum.js'; +import { SmartInfoService } from 'src/services/smart-info.service.js'; +import { getCLIPModelInfo } from 'src/utils/misc.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; describe(SmartInfoService.name, () => { let sut: SmartInfoService; diff --git a/server/src/services/smart-info.service.ts b/server/src/services/smart-info.service.ts index e147d3da7..50914faa0 100644 --- a/server/src/services/smart-info.service.ts +++ b/server/src/services/smart-info.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; -import { SystemConfig } from 'src/dtos/config.dto'; +import { SystemConfig } from 'src/dtos/config.dto.js'; -import { OnEvent, OnJob } from 'src/decorators'; -import { AssetVisibility, DatabaseLock, ImmichWorker, JobName, JobStatus, QueueName } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { JobOf } from 'src/types'; -import { batched, getCLIPModelInfo, isSmartSearchEnabled } from 'src/utils/misc'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { AssetVisibility, DatabaseLock, ImmichWorker, JobName, JobStatus, QueueName } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf } from 'src/types.js'; +import { batched, getCLIPModelInfo, isSmartSearchEnabled } from 'src/utils/misc.js'; @Injectable() export class SmartInfoService extends BaseService { diff --git a/server/src/services/stack.service.spec.ts b/server/src/services/stack.service.spec.ts index 933c7f39c..b9b4beefe 100644 --- a/server/src/services/stack.service.spec.ts +++ b/server/src/services/stack.service.spec.ts @@ -1,12 +1,12 @@ import { BadRequestException } from '@nestjs/common'; -import { StackService } from 'src/services/stack.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { StackFactory } from 'test/factories/stack.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { getForStack } from 'test/mappers'; -import { newUuid } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { StackService } from 'src/services/stack.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { StackFactory } from 'test/factories/stack.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { getForStack } from 'test/mappers.js'; +import { newUuid } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(StackService.name, () => { let sut: StackService; diff --git a/server/src/services/stack.service.ts b/server/src/services/stack.service.ts index 9dc47a97b..5e16e1654 100644 --- a/server/src/services/stack.service.ts +++ b/server/src/services/stack.service.ts @@ -1,11 +1,11 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { StackCreateDto, StackResponseDto, StackSearchDto, StackUpdateDto, mapStack } from 'src/dtos/stack.dto'; -import { Permission } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { findOrFail } from 'src/utils/misc'; -import { UUIDAssetIDParamDto } from 'src/validation'; +import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { StackCreateDto, StackResponseDto, StackSearchDto, StackUpdateDto, mapStack } from 'src/dtos/stack.dto.js'; +import { Permission } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { findOrFail } from 'src/utils/misc.js'; +import { UUIDAssetIDParamDto } from 'src/validation.js'; @Injectable() export class StackService extends BaseService { diff --git a/server/src/services/storage-template.service.spec.ts b/server/src/services/storage-template.service.spec.ts index 72d8802e1..752815c02 100644 --- a/server/src/services/storage-template.service.spec.ts +++ b/server/src/services/storage-template.service.spec.ts @@ -1,13 +1,13 @@ import { Stats } from 'node:fs'; -import { defaults, SystemConfig } from 'src/dtos/config.dto'; -import { AssetPathType, AssetType, JobStatus } from 'src/enum'; -import { StorageTemplateService } from 'src/services/storage-template.service'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { userStub } from 'test/fixtures/user.stub'; -import { getForAlbum, getForStorageTemplate } from 'test/mappers'; -import { makeStream, newTestService, ServiceMocks } from 'test/utils'; +import { defaults, SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetPathType, AssetType, JobStatus } from 'src/enum.js'; +import { StorageTemplateService } from 'src/services/storage-template.service.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { getForAlbum, getForStorageTemplate } from 'test/mappers.js'; +import { makeStream, newTestService, ServiceMocks } from 'test/utils.js'; const motionAsset = AssetFactory.from({ type: AssetType.Video }).exif().build(); const stillAsset = AssetFactory.from({ livePhotoVideoId: motionAsset.id }).exif().build(); diff --git a/server/src/services/storage-template.service.ts b/server/src/services/storage-template.service.ts index c2aaf986e..8cd5515a9 100644 --- a/server/src/services/storage-template.service.ts +++ b/server/src/services/storage-template.service.ts @@ -3,9 +3,9 @@ import handlebar from 'handlebars'; import { DateTime } from 'luxon'; import path from 'node:path'; import sanitize from 'sanitize-filename'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; -import { ConfigTemplateStorageOptionDto } from 'src/dtos/config.dto'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { ConfigTemplateStorageOptionDto } from 'src/dtos/config.dto.js'; import { AssetFileType, AssetPathType, @@ -15,12 +15,12 @@ import { JobStatus, QueueName, StorageFolder, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { JobOf, StorageAsset } from 'src/types'; -import { getAssetFile } from 'src/utils/asset.util'; -import { getFilenameExtension, getLivePhotoMotionFilename } from 'src/utils/file'; +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf, StorageAsset } from 'src/types.js'; +import { getAssetFile } from 'src/utils/asset.util.js'; +import { getFilenameExtension, getLivePhotoMotionFilename } from 'src/utils/file.js'; const storageTokens = { secondOptions: ['s', 'ss', 'SSS'], diff --git a/server/src/services/storage.service.spec.ts b/server/src/services/storage.service.spec.ts index 3ca9cd7ce..0ccc02e08 100644 --- a/server/src/services/storage.service.spec.ts +++ b/server/src/services/storage.service.spec.ts @@ -1,8 +1,8 @@ -import { SystemMetadataKey } from 'src/enum'; -import { StorageService } from 'src/services/storage.service'; -import { ImmichStartupError } from 'src/utils/misc'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { SystemMetadataKey } from 'src/enum.js'; +import { StorageService } from 'src/services/storage.service.js'; +import { ImmichStartupError } from 'src/utils/misc.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(StorageService.name, () => { let sut: StorageService; diff --git a/server/src/services/storage.service.ts b/server/src/services/storage.service.ts index 95926d650..58bc6fe9b 100644 --- a/server/src/services/storage.service.ts +++ b/server/src/services/storage.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { join } from 'node:path'; -import { ErrorMessages } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; +import { ErrorMessages } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; import { BootstrapEventPriority, DatabaseLock, @@ -11,10 +11,10 @@ import { QueueName, StorageFolder, SystemMetadataKey, -} from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { JobOf, SystemFlags } from 'src/types'; -import { ImmichStartupError } from 'src/utils/misc'; +} from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { JobOf, SystemFlags } from 'src/types.js'; +import { ImmichStartupError } from 'src/utils/misc.js'; const docsMessage = `Please see https://docs.immich.app/administration/system-integrity#folder-checks for more information.`; diff --git a/server/src/services/sync.service.spec.ts b/server/src/services/sync.service.spec.ts index ff505c1e6..ea652948f 100644 --- a/server/src/services/sync.service.spec.ts +++ b/server/src/services/sync.service.spec.ts @@ -1,7 +1,7 @@ import { Writable } from 'node:stream'; -import { SyncEntityType } from 'src/enum'; -import { send } from 'src/services/sync.service'; -import { serialize } from 'src/utils/sync'; +import { SyncEntityType } from 'src/enum.js'; +import { send } from 'src/services/sync.service.js'; +import { serialize } from 'src/utils/sync.js'; type TestStream = { stream: Writable; diff --git a/server/src/services/sync.service.ts b/server/src/services/sync.service.ts index c9b98c5d6..dea9db80d 100644 --- a/server/src/services/sync.service.ts +++ b/server/src/services/sync.service.ts @@ -3,8 +3,8 @@ import { Insertable } from 'kysely'; import { DateTime, Duration } from 'luxon'; import { once } from 'node:events'; import { Writable } from 'node:stream'; -import { OnJob } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { OnJob } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { SyncAckDeleteDto, SyncAckSetDto, @@ -12,14 +12,14 @@ import { SyncAssetV2, SyncItem, SyncStreamDto, -} from 'src/dtos/sync.dto'; -import { JobName, QueueName, SyncEntityType, SyncRequestType } from 'src/enum'; -import { SyncQueryOptions } from 'src/repositories/sync.repository'; -import { SessionSyncCheckpointTable } from 'src/schema/tables/sync-checkpoint.table'; -import { BaseService } from 'src/services/base.service'; -import { SyncAck } from 'src/types'; -import { hexOrBufferToBase64 } from 'src/utils/bytes'; -import { fromAck, serialize, SerializeOptions, toAck } from 'src/utils/sync'; +} from 'src/dtos/sync.dto.js'; +import { JobName, QueueName, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { SyncQueryOptions } from 'src/repositories/sync.repository.js'; +import { SessionSyncCheckpointTable } from 'src/schema/tables/sync-checkpoint.table.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { SyncAck } from 'src/types.js'; +import { hexOrBufferToBase64 } from 'src/utils/bytes.js'; +import { fromAck, serialize, SerializeOptions, toAck } from 'src/utils/sync.js'; type CheckpointMap = Partial>; type AssetLike = Omit & { diff --git a/server/src/services/system-config.service.spec.ts b/server/src/services/system-config.service.spec.ts index e6ada2f0b..9bd1c676a 100644 --- a/server/src/services/system-config.service.spec.ts +++ b/server/src/services/system-config.service.spec.ts @@ -1,5 +1,5 @@ import { BadRequestException } from '@nestjs/common'; -import { defaults, SystemConfig } from 'src/dtos/config.dto'; +import { defaults, SystemConfig } from 'src/dtos/config.dto.js'; import { AudioCodec, Colorspace, @@ -15,11 +15,11 @@ import { TranscodePolicy, VideoCodec, VideoContainer, -} from 'src/enum'; -import { SystemConfigService } from 'src/services/system-config.service'; -import { DeepPartial } from 'src/types'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { newTestService, ServiceMocks } from 'test/utils'; +} from 'src/enum.js'; +import { SystemConfigService } from 'src/services/system-config.service.js'; +import type { DeepPartial } from 'src/types.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const partialConfig = { ffmpeg: { crf: 30 }, diff --git a/server/src/services/system-config.service.ts b/server/src/services/system-config.service.ts index 055a21f1c..fbc2bea12 100644 --- a/server/src/services/system-config.service.ts +++ b/server/src/services/system-config.service.ts @@ -1,6 +1,6 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import _ from 'lodash'; -import { OnEvent } from 'src/decorators'; +import { isEqual } from 'lodash-es'; +import { OnEvent } from 'src/decorators.js'; import { AdminConfigDto, defaults, @@ -9,12 +9,12 @@ import { mapUserConfig, PublicConfigDto, UserConfigDto, -} from 'src/dtos/config.dto'; -import { BootstrapEventPriority } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { clearConfigCache } from 'src/utils/config'; -import { toPlainObject } from 'src/utils/object'; +} from 'src/dtos/config.dto.js'; +import { BootstrapEventPriority } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { clearConfigCache } from 'src/utils/config.js'; +import { toPlainObject } from 'src/utils/object.js'; @Injectable() export class SystemConfigService extends BaseService { @@ -76,7 +76,7 @@ export class SystemConfigService extends BaseService { @OnEvent({ name: 'ConfigValidate' }) onConfigValidate({ newConfig, oldConfig }: ArgOf<'ConfigValidate'>) { const { logLevel } = this.configRepository.getEnv(); - if (logLevel && !_.isEqual(toPlainObject(newConfig.logging), oldConfig.logging)) { + if (logLevel && !isEqual(toPlainObject(newConfig.logging), oldConfig.logging)) { throw new Error('Logging cannot be changed while the environment variable IMMICH_LOG_LEVEL is set.'); } } diff --git a/server/src/services/system-metadata.service.spec.ts b/server/src/services/system-metadata.service.spec.ts index f5bdcde7b..60deba198 100644 --- a/server/src/services/system-metadata.service.spec.ts +++ b/server/src/services/system-metadata.service.spec.ts @@ -1,6 +1,6 @@ -import { SystemMetadataKey } from 'src/enum'; -import { SystemMetadataService } from 'src/services/system-metadata.service'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { SystemMetadataKey } from 'src/enum.js'; +import { SystemMetadataService } from 'src/services/system-metadata.service.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(SystemMetadataService.name, () => { let sut: SystemMetadataService; diff --git a/server/src/services/system-metadata.service.ts b/server/src/services/system-metadata.service.ts index 30af71537..aab21371e 100644 --- a/server/src/services/system-metadata.service.ts +++ b/server/src/services/system-metadata.service.ts @@ -4,9 +4,9 @@ import { AdminOnboardingUpdateDto, ReverseGeocodingStateResponseDto, VersionCheckStateResponseDto, -} from 'src/dtos/system-metadata.dto'; -import { SystemMetadataKey } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; +} from 'src/dtos/system-metadata.dto.js'; +import { SystemMetadataKey } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; @Injectable() export class SystemMetadataService extends BaseService { diff --git a/server/src/services/tag.service.spec.ts b/server/src/services/tag.service.spec.ts index ddc0f388f..82b50fdfc 100644 --- a/server/src/services/tag.service.spec.ts +++ b/server/src/services/tag.service.spec.ts @@ -1,10 +1,10 @@ import { BadRequestException } from '@nestjs/common'; -import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { JobStatus } from 'src/enum'; -import { TagService } from 'src/services/tag.service'; -import { authStub } from 'test/fixtures/auth.stub'; -import { tagResponseStub, tagStub } from 'test/fixtures/tag.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { JobStatus } from 'src/enum.js'; +import { TagService } from 'src/services/tag.service.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { tagResponseStub, tagStub } from 'test/fixtures/tag.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(TagService.name, () => { let sut: TagService; diff --git a/server/src/services/tag.service.ts b/server/src/services/tag.service.ts index c2285a3a2..48e49c4a9 100644 --- a/server/src/services/tag.service.ts +++ b/server/src/services/tag.service.ts @@ -1,8 +1,8 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { Insertable } from 'kysely'; -import { OnJob } from 'src/decorators'; -import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { OnJob } from 'src/decorators.js'; +import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { TagBulkAssetsDto, TagBulkAssetsResponseDto, @@ -11,14 +11,14 @@ import { TagUpdateDto, TagUpsertDto, mapTag, -} from 'src/dtos/tag.dto'; -import { JobName, JobStatus, Permission, QueueName } from 'src/enum'; -import { TagAssetTable } from 'src/schema/tables/tag-asset.table'; -import { BaseService } from 'src/services/base.service'; -import { addAssets, removeAssets } from 'src/utils/asset.util'; -import { updateLockedColumns } from 'src/utils/database'; -import { findOrFail } from 'src/utils/misc'; -import { upsertTags } from 'src/utils/tag'; +} from 'src/dtos/tag.dto.js'; +import { JobName, JobStatus, Permission, QueueName } from 'src/enum.js'; +import { TagAssetTable } from 'src/schema/tables/tag-asset.table.js'; +import { BaseService } from 'src/services/base.service.js'; +import { addAssets, removeAssets } from 'src/utils/asset.util.js'; +import { updateLockedColumns } from 'src/utils/database.js'; +import { findOrFail } from 'src/utils/misc.js'; +import { upsertTags } from 'src/utils/tag.js'; @Injectable() export class TagService extends BaseService { diff --git a/server/src/services/telemetry.service.ts b/server/src/services/telemetry.service.ts index 51945bede..2339c05a0 100644 --- a/server/src/services/telemetry.service.ts +++ b/server/src/services/telemetry.service.ts @@ -1,8 +1,8 @@ -import { snakeCase } from 'lodash'; -import { OnEvent } from 'src/decorators'; -import { ImmichWorker, JobStatus } from 'src/enum'; -import { ArgOf, ArgsOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; +import { snakeCase } from 'lodash-es'; +import { OnEvent } from 'src/decorators.js'; +import { ImmichWorker, JobStatus } from 'src/enum.js'; +import type { ArgOf, ArgsOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; export class TelemetryService extends BaseService { @OnEvent({ name: 'AppBootstrap', workers: [ImmichWorker.Api] }) diff --git a/server/src/services/timeline.service.spec.ts b/server/src/services/timeline.service.spec.ts index 76a2ef0c6..c668b9baf 100644 --- a/server/src/services/timeline.service.spec.ts +++ b/server/src/services/timeline.service.spec.ts @@ -1,8 +1,8 @@ import { BadRequestException } from '@nestjs/common'; -import { AssetVisibility } from 'src/enum'; -import { TimelineService } from 'src/services/timeline.service'; -import { authStub } from 'test/fixtures/auth.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { AssetVisibility } from 'src/enum.js'; +import { TimelineService } from 'src/services/timeline.service.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(TimelineService.name, () => { let sut: TimelineService; diff --git a/server/src/services/timeline.service.ts b/server/src/services/timeline.service.ts index 197b331cc..fcda8cf4c 100644 --- a/server/src/services/timeline.service.ts +++ b/server/src/services/timeline.service.ts @@ -1,11 +1,11 @@ import { BadRequestException, Injectable } from '@nestjs/common'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { TimeBucketAssetDto, TimeBucketDto, TimeBucketsResponseDto } from 'src/dtos/time-bucket.dto'; -import { AssetVisibility, Permission } from 'src/enum'; -import { TimeBucketOptions } from 'src/repositories/asset.repository'; -import { BaseService } from 'src/services/base.service'; -import { requireElevatedPermission } from 'src/utils/access'; -import { getMyPartnerIds } from 'src/utils/asset.util'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { TimeBucketAssetDto, TimeBucketDto, TimeBucketsResponseDto } from 'src/dtos/time-bucket.dto.js'; +import { AssetVisibility, Permission } from 'src/enum.js'; +import { TimeBucketOptions } from 'src/repositories/asset.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { requireElevatedPermission } from 'src/utils/access.js'; +import { getMyPartnerIds } from 'src/utils/asset.util.js'; @Injectable() export class TimelineService extends BaseService { diff --git a/server/src/services/transcoding.service.spec.ts b/server/src/services/transcoding.service.spec.ts index 5980b7078..58649aa3a 100644 --- a/server/src/services/transcoding.service.spec.ts +++ b/server/src/services/transcoding.service.spec.ts @@ -4,11 +4,11 @@ import { HLS_CLEANUP_INTERVAL_MS, HLS_INACTIVITY_TIMEOUT_MS, HLS_LEASE_DURATION_MS, -} from 'src/constants'; -import { TranscodingService } from 'src/services/transcoding.service'; -import { VIDEO_STREAM_SESSION_PK_CONSTRAINT } from 'src/utils/database'; -import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub'; -import { mockSpawn, newTestService, ServiceMocks } from 'test/utils'; +} from 'src/constants.js'; +import { TranscodingService } from 'src/services/transcoding.service.js'; +import { VIDEO_STREAM_SESSION_PK_CONSTRAINT } from 'src/utils/database.js'; +import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub.js'; +import { mockSpawn, newTestService, ServiceMocks } from 'test/utils.js'; import { vi } from 'vitest'; describe(TranscodingService.name, () => { diff --git a/server/src/services/transcoding.service.ts b/server/src/services/transcoding.service.ts index 8b083bfaf..a4235fb61 100644 --- a/server/src/services/transcoding.service.ts +++ b/server/src/services/transcoding.service.ts @@ -11,15 +11,15 @@ import { HLS_SEGMENT_DURATION, HLS_SEGMENT_FILENAME_REGEX, HLS_VARIANTS, -} from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; -import { DatabaseLock, ImmichWorker, JobName, QueueName, TranscodeTarget } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { VideoInterfaces } from 'src/types'; -import { isVideoStreamSessionPkConstraint } from 'src/utils/database'; -import { BaseConfig } from 'src/utils/media'; +} from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { DatabaseLock, ImmichWorker, JobName, QueueName, TranscodeTarget } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { VideoInterfaces } from 'src/types.js'; +import { isVideoStreamSessionPkConstraint } from 'src/utils/database.js'; +import { BaseConfig } from 'src/utils/media.js'; type Session = { assetId: string; diff --git a/server/src/services/trash.service.spec.ts b/server/src/services/trash.service.spec.ts index e43c49e54..3da7cd6ec 100644 --- a/server/src/services/trash.service.spec.ts +++ b/server/src/services/trash.service.spec.ts @@ -1,8 +1,8 @@ import { BadRequestException } from '@nestjs/common'; -import { JobName, JobStatus } from 'src/enum'; -import { TrashService } from 'src/services/trash.service'; -import { authStub } from 'test/fixtures/auth.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { JobName, JobStatus } from 'src/enum.js'; +import { TrashService } from 'src/services/trash.service.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; async function* makeAssetIdStream(count: number): AsyncIterableIterator<{ id: string }> { for (let i = 0; i < count; i++) { diff --git a/server/src/services/trash.service.ts b/server/src/services/trash.service.ts index 368e16beb..ecc722992 100644 --- a/server/src/services/trash.service.ts +++ b/server/src/services/trash.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { OnEvent, OnJob } from 'src/decorators'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { TrashResponseDto } from 'src/dtos/trash.dto'; -import { JobName, JobStatus, Permission, QueueName } from 'src/enum'; -import { BaseService } from 'src/services/base.service'; -import { batched } from 'src/utils/misc'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { TrashResponseDto } from 'src/dtos/trash.dto.js'; +import { JobName, JobStatus, Permission, QueueName } from 'src/enum.js'; +import { BaseService } from 'src/services/base.service.js'; +import { batched } from 'src/utils/misc.js'; @Injectable() export class TrashService extends BaseService { diff --git a/server/src/services/user-admin.service.spec.ts b/server/src/services/user-admin.service.spec.ts index c52ae5422..d4ae774a6 100644 --- a/server/src/services/user-admin.service.spec.ts +++ b/server/src/services/user-admin.service.spec.ts @@ -1,12 +1,12 @@ import { BadRequestException, ForbiddenException } from '@nestjs/common'; -import { mapUserAdmin } from 'src/dtos/user.dto'; -import { JobName, UserStatus } from 'src/enum'; -import { UserAdminService } from 'src/services/user-admin.service'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { userStub } from 'test/fixtures/user.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { mapUserAdmin } from 'src/dtos/user.dto.js'; +import { JobName, UserStatus } from 'src/enum.js'; +import { UserAdminService } from 'src/services/user-admin.service.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; import { describe } from 'vitest'; describe(UserAdminService.name, () => { diff --git a/server/src/services/user-admin.service.ts b/server/src/services/user-admin.service.ts index f80a81061..f73ef5be3 100644 --- a/server/src/services/user-admin.service.ts +++ b/server/src/services/user-admin.service.ts @@ -1,10 +1,10 @@ import { BadRequestException, ForbiddenException, Injectable } from '@nestjs/common'; -import { SALT_ROUNDS } from 'src/constants'; -import { AssetStatsDto, AssetStatsResponseDto, mapStats } from 'src/dtos/asset.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto'; -import { SessionResponseDto, mapSession } from 'src/dtos/session.dto'; -import { UserPreferencesResponseDto, UserPreferencesUpdateDto, mapPreferences } from 'src/dtos/user-preferences.dto'; +import { SALT_ROUNDS } from 'src/constants.js'; +import { AssetStatsDto, AssetStatsResponseDto, mapStats } from 'src/dtos/asset.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto.js'; +import { SessionResponseDto, mapSession } from 'src/dtos/session.dto.js'; +import { UserPreferencesResponseDto, UserPreferencesUpdateDto, mapPreferences } from 'src/dtos/user-preferences.dto.js'; import { UserAdminCreateDto, UserAdminDeleteDto, @@ -12,13 +12,13 @@ import { UserAdminSearchDto, UserAdminUpdateDto, mapUserAdmin, -} from 'src/dtos/user.dto'; -import { JobName, UserMetadataKey, UserStatus } from 'src/enum'; -import { UserFindOptions } from 'src/repositories/user.repository'; -import { BaseService } from 'src/services/base.service'; -import { getCalendarHeatmap } from 'src/services/shared/user-methods'; -import { findOrFail } from 'src/utils/misc'; -import { getPreferences, getPreferencesPartial, mergePreferences } from 'src/utils/preferences'; +} from 'src/dtos/user.dto.js'; +import { JobName, UserMetadataKey, UserStatus } from 'src/enum.js'; +import { UserFindOptions } from 'src/repositories/user.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { getCalendarHeatmap } from 'src/services/shared/user-methods.js'; +import { findOrFail } from 'src/utils/misc.js'; +import { getPreferences, getPreferencesPartial, mergePreferences } from 'src/utils/preferences.js'; @Injectable() export class UserAdminService extends BaseService { diff --git a/server/src/services/user.service.spec.ts b/server/src/services/user.service.spec.ts index a00efe82f..d50574d21 100644 --- a/server/src/services/user.service.spec.ts +++ b/server/src/services/user.service.spec.ts @@ -1,14 +1,14 @@ import { BadRequestException, InternalServerErrorException, NotFoundException } from '@nestjs/common'; -import { UserAdmin } from 'src/database'; -import { CacheControl, JobName, UserMetadataKey } from 'src/enum'; -import { UserService } from 'src/services/user.service'; -import { ImmichFileResponse } from 'src/utils/file'; -import { AuthFactory } from 'test/factories/auth.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { systemConfigStub } from 'test/fixtures/system-config.stub'; -import { userStub } from 'test/fixtures/user.stub'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { UserAdmin } from 'src/database.js'; +import { CacheControl, JobName, UserMetadataKey } from 'src/enum.js'; +import { UserService } from 'src/services/user.service.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { systemConfigStub } from 'test/fixtures/system-config.stub.js'; +import { userStub } from 'test/fixtures/user.stub.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const makeDeletedAt = (daysAgo: number) => { const deletedAt = new Date(); diff --git a/server/src/services/user.service.ts b/server/src/services/user.service.ts index 1630fd9dd..510c3cdc2 100644 --- a/server/src/services/user.service.ts +++ b/server/src/services/user.service.ts @@ -1,28 +1,28 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; import { Updateable } from 'kysely'; import { DateTime } from 'luxon'; -import { SALT_ROUNDS } from 'src/constants'; -import { StorageCore } from 'src/cores/storage.core'; -import { OnEvent, OnJob } from 'src/decorators'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto'; -import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto'; -import { OnboardingDto, OnboardingResponseDto } from 'src/dtos/onboarding.dto'; -import { UserPreferencesResponseDto, UserPreferencesUpdateDto, mapPreferences } from 'src/dtos/user-preferences.dto'; -import { CreateProfileImageResponseDto } from 'src/dtos/user-profile.dto'; -import { UserAdminResponseDto, UserResponseDto, UserUpdateMeDto, mapUser, mapUserAdmin } from 'src/dtos/user.dto'; -import { CacheControl, JobName, JobStatus, QueueName, StorageFolder, UserMetadataKey } from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { UserFindOptions } from 'src/repositories/user.repository'; -import { UserTable } from 'src/schema/tables/user.table'; -import { BaseService } from 'src/services/base.service'; -import { getCalendarHeatmap } from 'src/services/shared/user-methods'; -import { JobOf, UserMetadataItem } from 'src/types'; -import { ImmichFileResponse } from 'src/utils/file'; -import { mimeTypes } from 'src/utils/mime-types'; -import { findOrFail } from 'src/utils/misc'; -import { getPreferences, getPreferencesPartial, mergePreferences } from 'src/utils/preferences'; -import { generateProfileImage } from 'src/utils/profile-image'; +import { SALT_ROUNDS } from 'src/constants.js'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { CalendarHeatmapDto, CalendarHeatmapResponseDto } from 'src/dtos/calendar-heatmap.dto.js'; +import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto.js'; +import { OnboardingDto, OnboardingResponseDto } from 'src/dtos/onboarding.dto.js'; +import { UserPreferencesResponseDto, UserPreferencesUpdateDto, mapPreferences } from 'src/dtos/user-preferences.dto.js'; +import { CreateProfileImageResponseDto } from 'src/dtos/user-profile.dto.js'; +import { UserAdminResponseDto, UserResponseDto, UserUpdateMeDto, mapUser, mapUserAdmin } from 'src/dtos/user.dto.js'; +import { CacheControl, JobName, JobStatus, QueueName, StorageFolder, UserMetadataKey } from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { UserFindOptions } from 'src/repositories/user.repository.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import { BaseService } from 'src/services/base.service.js'; +import { getCalendarHeatmap } from 'src/services/shared/user-methods.js'; +import type { JobOf, UserMetadataItem } from 'src/types.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { mimeTypes } from 'src/utils/mime-types.js'; +import { findOrFail } from 'src/utils/misc.js'; +import { getPreferences, getPreferencesPartial, mergePreferences } from 'src/utils/preferences.js'; +import { generateProfileImage } from 'src/utils/profile-image.js'; @Injectable() export class UserService extends BaseService { diff --git a/server/src/services/version.service.spec.ts b/server/src/services/version.service.spec.ts index b5fc6764f..8435d1097 100644 --- a/server/src/services/version.service.spec.ts +++ b/server/src/services/version.service.spec.ts @@ -1,16 +1,17 @@ import { DateTime } from 'luxon'; -import { SemVer } from 'semver'; -import { defaults } from 'src/dtos/config.dto'; -import { CronJob, JobName, JobStatus, ReleaseChannel, SystemMetadataKey } from 'src/enum'; -import { VersionService } from 'src/services/version.service'; -import { factory } from 'test/small.factory'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { defaults } from 'src/dtos/config.dto.js'; +import { CronJob, JobName, JobStatus, ReleaseChannel, SystemMetadataKey } from 'src/enum.js'; +import { VersionService } from 'src/services/version.service.js'; +import { factory } from 'test/small.factory.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; const mockVersionResponse = (version: string) => ({ version, published_at: DateTime.utc().toISO(), }); +vitest.mock('node:fs', () => ({ readFileSync: () => JSON.stringify({ version: 'v3.0.0' }) })); + describe(VersionService.name, () => { let sut: VersionService; let mocks: ServiceMocks; @@ -21,11 +22,6 @@ describe(VersionService.name, () => { mocks.cron.update.mockResolvedValue(); }); - vitest.mock(import('src/constants.js'), async (importOriginal) => ({ - ...(await importOriginal()), - serverVersion: new SemVer('v3.0.0'), - })); - it('should work', () => { expect(sut).toBeDefined(); }); diff --git a/server/src/services/version.service.ts b/server/src/services/version.service.ts index 85bf579fb..6c9ed9b08 100644 --- a/server/src/services/version.service.ts +++ b/server/src/services/version.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@nestjs/common'; import { DateTime } from 'luxon'; import semver, { SemVer } from 'semver'; -import { serverVersion } from 'src/constants'; -import { OnEvent, OnJob } from 'src/decorators'; -import { ReleaseEventV1, ReleaseType, ServerVersionResponseDto } from 'src/dtos/server.dto'; +import { serverVersion } from 'src/constants.js'; +import { OnEvent, OnJob } from 'src/decorators.js'; +import { ReleaseEventV1, ReleaseType, ServerVersionResponseDto } from 'src/dtos/server.dto.js'; import { CronJob, DatabaseLock, @@ -13,11 +13,11 @@ import { QueueName, ReleaseChannel, SystemMetadataKey, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { BaseService } from 'src/services/base.service'; -import { VersionCheckMetadata } from 'src/types'; -import { handlePromiseError } from 'src/utils/misc'; +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { VersionCheckMetadata } from 'src/types.js'; +import { handlePromiseError } from 'src/utils/misc.js'; const asNotification = ( channel: ReleaseChannel, diff --git a/server/src/services/view.service.spec.ts b/server/src/services/view.service.spec.ts index a4bc51b0c..6c707cf87 100644 --- a/server/src/services/view.service.spec.ts +++ b/server/src/services/view.service.spec.ts @@ -1,9 +1,9 @@ -import { mapAsset } from 'src/dtos/asset-response.dto'; -import { ViewService } from 'src/services/view.service'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { getForAsset } from 'test/mappers'; -import { newTestService, ServiceMocks } from 'test/utils'; +import { mapAsset } from 'src/dtos/asset-response.dto.js'; +import { ViewService } from 'src/services/view.service.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { getForAsset } from 'test/mappers.js'; +import { newTestService, ServiceMocks } from 'test/utils.js'; describe(ViewService.name, () => { let sut: ViewService; diff --git a/server/src/services/view.service.ts b/server/src/services/view.service.ts index 9d1ee3cf8..b6dfd85ff 100644 --- a/server/src/services/view.service.ts +++ b/server/src/services/view.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; -import { AssetResponseDto, mapAsset } from 'src/dtos/asset-response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { BaseService } from 'src/services/base.service'; +import { AssetResponseDto, mapAsset } from 'src/dtos/asset-response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { BaseService } from 'src/services/base.service.js'; @Injectable() export class ViewService extends BaseService { diff --git a/server/src/services/workflow-execution.service.ts b/server/src/services/workflow-execution.service.ts index 193fab16d..93fac06d4 100644 --- a/server/src/services/workflow-execution.service.ts +++ b/server/src/services/workflow-execution.service.ts @@ -8,12 +8,12 @@ import { } from '@immich/plugin-sdk'; import { HttpException, UnauthorizedException } from '@nestjs/common'; import { join } from 'node:path'; -import { DummyValue, OnEvent, OnJob } from 'src/decorators'; -import { AlbumsAddAssetsDto, CreateAlbumDto, GetAlbumsDto } from 'src/dtos/album.dto'; -import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { PluginManifestDto } from 'src/dtos/plugin-manifest.dto'; -import { TagBulkAssetsDto } from 'src/dtos/tag.dto'; +import { DummyValue, OnEvent, OnJob } from 'src/decorators.js'; +import { AlbumsAddAssetsDto, CreateAlbumDto, GetAlbumsDto } from 'src/dtos/album.dto.js'; +import { BulkIdsDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { PluginManifestDto } from 'src/dtos/plugin-manifest.dto.js'; +import { TagBulkAssetsDto } from 'src/dtos/tag.dto.js'; import { BootstrapEventPriority, DatabaseLock, @@ -24,13 +24,13 @@ import { QueueName, WorkflowResult, WorkflowType, -} from 'src/enum'; -import { ArgOf } from 'src/repositories/event.repository'; -import { AlbumService } from 'src/services/album.service'; -import { AssetService } from 'src/services/asset.service'; -import { BaseService } from 'src/services/base.service'; -import { TagService } from 'src/services/tag.service'; -import { JobOf } from 'src/types'; +} from 'src/enum.js'; +import type { ArgOf } from 'src/repositories/event.repository.js'; +import { AlbumService } from 'src/services/album.service.js'; +import { AssetService } from 'src/services/asset.service.js'; +import { BaseService } from 'src/services/base.service.js'; +import { TagService } from 'src/services/tag.service.js'; +import type { JobOf } from 'src/types.js'; const dummy = () => { throw new Error( diff --git a/server/src/services/workflow.service.ts b/server/src/services/workflow.service.ts index e68e6aa94..d79dd5537 100644 --- a/server/src/services/workflow.service.ts +++ b/server/src/services/workflow.service.ts @@ -1,6 +1,6 @@ import { WorkflowStepConfig, WorkflowTrigger } from '@immich/plugin-sdk'; import { BadRequestException, Injectable } from '@nestjs/common'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { AuthDto } from 'src/dtos/auth.dto.js'; import { mapWorkflow, mapWorkflowShare, @@ -12,12 +12,12 @@ import { WorkflowShareResponseDto, WorkflowTriggerResponseDto, WorkflowUpdateDto, -} from 'src/dtos/workflow.dto'; -import { Permission } from 'src/enum'; -import { PluginMethodSearchResponse } from 'src/repositories/plugin.repository'; -import { BaseService } from 'src/services/base.service'; -import { findOrFail } from 'src/utils/misc'; -import { getWorkflowTriggers, isMethodCompatible, resolveMethod } from 'src/utils/workflow'; +} from 'src/dtos/workflow.dto.js'; +import { Permission } from 'src/enum.js'; +import { PluginMethodSearchResponse } from 'src/repositories/plugin.repository.js'; +import { BaseService } from 'src/services/base.service.js'; +import { findOrFail } from 'src/utils/misc.js'; +import { getWorkflowTriggers, isMethodCompatible, resolveMethod } from 'src/utils/workflow.js'; @Injectable() export class WorkflowService extends BaseService { diff --git a/server/src/types.ts b/server/src/types.ts index 633ed9b0c..4cf7d4066 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -1,11 +1,11 @@ import { ShallowDehydrateObject } from 'kysely'; -import { VECTOR_EXTENSIONS } from 'src/constants'; -import { AssetFile } from 'src/database'; -import { UploadFieldName } from 'src/dtos/asset-media.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { AssetEditActionItem } from 'src/dtos/editing.dto'; -import { SetMaintenanceModeDto } from 'src/dtos/maintenance.dto'; +import { VECTOR_EXTENSIONS } from 'src/constants.js'; +import { AssetFile } from 'src/database.js'; +import { UploadFieldName } from 'src/dtos/asset-media.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetEditActionItem } from 'src/dtos/editing.dto.js'; +import { SetMaintenanceModeDto } from 'src/dtos/maintenance.dto.js'; import { AacProfile, AssetOrder, @@ -29,7 +29,7 @@ import { SystemMetadataKey, TranscodeTarget, UserMetadataKey, -} from 'src/enum'; +} from 'src/enum.js'; import { Mocked } from 'vitest'; export type DeepPartial = T extends Date diff --git a/server/src/utils/access.ts b/server/src/utils/access.ts index dc3c635ba..efb497b48 100644 --- a/server/src/utils/access.ts +++ b/server/src/utils/access.ts @@ -1,9 +1,9 @@ import { BadRequestException, UnauthorizedException } from '@nestjs/common'; -import { AuthSharedLink } from 'src/database'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AlbumUserRole, Permission } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { areSetsEqual, isSetSuperset, setDifference, setUnion } from 'src/utils/set'; +import { AuthSharedLink } from 'src/database.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { AlbumUserRole, Permission } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { areSetsEqual, isSetSuperset, setDifference, setUnion } from 'src/utils/set.js'; export type GrantedRequest = { requested: Permission[]; diff --git a/server/src/utils/asset.util.ts b/server/src/utils/asset.util.ts index cca61dab1..34d3e37f6 100644 --- a/server/src/utils/asset.util.ts +++ b/server/src/utils/asset.util.ts @@ -1,17 +1,17 @@ import { BadRequestException } from '@nestjs/common'; -import { StorageCore } from 'src/cores/storage.core'; -import { AssetFile } from 'src/database'; -import { BulkIdErrorReason, BulkIdResponseDto } from 'src/dtos/asset-ids.response.dto'; -import { UploadFieldName } from 'src/dtos/asset-media.dto'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetFileType, AssetType, AssetVisibility, Permission } from 'src/enum'; -import { AuthRequest } from 'src/middleware/auth.guard'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { IBulkAsset, ImmichFile, UploadFile, UploadRequest } from 'src/types'; -import { checkAccess } from 'src/utils/access'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { AssetFile } from 'src/database.js'; +import { BulkIdErrorReason, BulkIdResponseDto } from 'src/dtos/asset-ids.response.dto.js'; +import { UploadFieldName } from 'src/dtos/asset-media.dto.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { AssetFileType, AssetType, AssetVisibility, Permission } from 'src/enum.js'; +import { AuthRequest } from 'src/middleware/auth.guard.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import type { IBulkAsset, ImmichFile, UploadFile, UploadRequest } from 'src/types.js'; +import { checkAccess } from 'src/utils/access.js'; export const getAssetFile = (files: AssetFile[], type: AssetFileType, { isEdited }: { isEdited: boolean }) => { return files.find((file) => file.type === type && file.isEdited === isEdited); diff --git a/server/src/utils/config.ts b/server/src/utils/config.ts index 38e5facb0..e90f6cbc6 100644 --- a/server/src/utils/config.ts +++ b/server/src/utils/config.ts @@ -1,13 +1,13 @@ import AsyncLock from 'async-lock'; import { load as loadYaml } from 'js-yaml'; -import * as _ from 'lodash'; -import { AdminConfigDto, SystemConfig, defaults } from 'src/dtos/config.dto'; -import { DatabaseLock, SystemMetadataKey } from 'src/enum'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { DeepPartial } from 'src/types'; -import { getKeysDeep, unsetDeep } from 'src/utils/misc'; +import { cloneDeep, get, isEmpty, isEqual, set } from 'lodash-es'; +import { AdminConfigDto, SystemConfig, defaults } from 'src/dtos/config.dto.js'; +import { DatabaseLock, SystemMetadataKey } from 'src/enum.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import type { DeepPartial } from 'src/types.js'; +import { getKeysDeep, unsetDeep } from 'src/utils/misc.js'; type RepoDeps = { configRepo: ConfigRepository; @@ -45,16 +45,16 @@ export const updateConfig = async (repos: RepoDeps, newConfig: SystemConfig): Pr // get the difference between the new config and the default config const partialConfig: DeepPartial = {}; for (const property of getKeysDeep(defaults)) { - const newValue = _.get(newConfig, property); + const newValue = get(newConfig, property); const isEmpty = [undefined, null, ''].includes(newValue); - const defaultValue = _.get(defaults, property); - const isEqual = newValue === defaultValue || _.isEqual(newValue, defaultValue); + const defaultValue = get(defaults, property); + const equal = newValue === defaultValue || isEqual(newValue, defaultValue); - if (isEmpty || isEqual) { + if (isEmpty || equal) { continue; } - _.set(partialConfig, property, newValue); + set(partialConfig, property, newValue); } await metadataRepo.set(SystemMetadataKey.SystemConfig, partialConfig); @@ -83,18 +83,18 @@ const buildConfig = async (repos: RepoDeps) => { : await metadataRepo.get(SystemMetadataKey.SystemConfig); // merge with defaults - const rawConfig = _.cloneDeep(defaults); + const rawConfig = cloneDeep(defaults); for (const property of getKeysDeep(partial)) { - _.set(rawConfig, property, _.get(partial, property)); + set(rawConfig, property, get(partial, property)); } // check for extra properties - const unknownKeys = _.cloneDeep(rawConfig); + const unknownKeys = cloneDeep(rawConfig); for (const property of getKeysDeep(defaults)) { unsetDeep(unknownKeys, property); } - if (!_.isEmpty(unknownKeys)) { + if (!isEmpty(unknownKeys)) { logger.warn(`Unknown keys found: ${JSON.stringify(unknownKeys, null, 2)}`); } diff --git a/server/src/utils/database.ts b/server/src/utils/database.ts index 7b1cd7bb2..fc8e04fb3 100644 --- a/server/src/utils/database.ts +++ b/server/src/utils/database.ts @@ -18,9 +18,9 @@ import { import { PostgresJSDialect } from 'kysely-postgres-js'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; import { Notice, PostgresError } from 'postgres'; -import { columns, lockableProperties, LockableProperty, Person } from 'src/database'; -import { DummyValue, GenerateSqlQueries } from 'src/decorators'; -import { AssetEditActionItem } from 'src/dtos/editing.dto'; +import { columns, lockableProperties, LockableProperty, Person } from 'src/database.js'; +import { DummyValue, GenerateSqlQueries } from 'src/decorators.js'; +import { AssetEditActionItem } from 'src/dtos/editing.dto.js'; import { DEFAULT_SEARCH_ORDER, IdsFilter, @@ -29,7 +29,7 @@ import { SearchOrder, StringFilter, StringPatternFilter, -} from 'src/dtos/search.dto'; +} from 'src/dtos/search.dto.js'; import { AssetFileType, AssetOrder, @@ -38,16 +38,16 @@ import { DatabaseExtension, ExifOrientation, SearchOrderField, -} from 'src/enum'; +} from 'src/enum.js'; import { AssetSearchBuilderOptions, AssetSearchBuilderV3Options, AssetSearchScope, -} from 'src/repositories/search.repository'; -import { DB } from 'src/schema'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AudioStreamInfo, VectorExtension, VideoFormat, VideoPacketInfo, VideoStreamInfo } from 'src/types'; -import { fromChecksum } from 'src/utils/request'; +} from 'src/repositories/search.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import type { AudioStreamInfo, VectorExtension, VideoFormat, VideoPacketInfo, VideoStreamInfo } from 'src/types.js'; +import { fromChecksum } from 'src/utils/request.js'; export const getKyselyConfig = (connection: DatabaseConnectionParams): KyselyConfig => { return { diff --git a/server/src/utils/date.spec.ts b/server/src/utils/date.spec.ts index 476b5cb52..e04d90100 100644 --- a/server/src/utils/date.spec.ts +++ b/server/src/utils/date.spec.ts @@ -1,4 +1,4 @@ -import { asDateString, asDateTimeString } from 'src/utils/date'; +import { asDateString, asDateTimeString } from 'src/utils/date.js'; import { describe, expect, it } from 'vitest'; describe('asDateString', () => { diff --git a/server/src/utils/date.ts b/server/src/utils/date.ts index 394bab8a0..6154129ef 100644 --- a/server/src/utils/date.ts +++ b/server/src/utils/date.ts @@ -1,5 +1,5 @@ import { DateTime } from 'luxon'; -import { isoDateToDate, isoDatetimeToDate } from 'src/validation'; +import { isoDateToDate, isoDatetimeToDate } from 'src/validation.js'; /** * Convert a date to a ISO 8601 datetime string. diff --git a/server/src/utils/duplicate.spec.ts b/server/src/utils/duplicate.spec.ts index 0c353aedc..c7245cd32 100644 --- a/server/src/utils/duplicate.spec.ts +++ b/server/src/utils/duplicate.spec.ts @@ -1,7 +1,7 @@ -import { AssetResponseDto } from 'src/dtos/asset-response.dto'; -import { ExifResponseSchema } from 'src/dtos/exif.dto'; -import { AssetType, AssetVisibility } from 'src/enum'; -import { getExifCount, suggestDuplicate, suggestDuplicateKeepAssetIds } from 'src/utils/duplicate'; +import { AssetResponseDto } from 'src/dtos/asset-response.dto.js'; +import { ExifResponseSchema } from 'src/dtos/exif.dto.js'; +import { AssetType, AssetVisibility } from 'src/enum.js'; +import { getExifCount, suggestDuplicate, suggestDuplicateKeepAssetIds } from 'src/utils/duplicate.js'; import { describe, expect, it } from 'vitest'; import type { z } from 'zod'; diff --git a/server/src/utils/duplicate.ts b/server/src/utils/duplicate.ts index 4f6deb2fc..9bf076657 100644 --- a/server/src/utils/duplicate.ts +++ b/server/src/utils/duplicate.ts @@ -1,4 +1,4 @@ -import { AssetResponseDto } from 'src/dtos/asset-response.dto'; +import { AssetResponseDto } from 'src/dtos/asset-response.dto.js'; /** * Counts all truthy values in the exifInfo object. diff --git a/server/src/utils/editor.spec.ts b/server/src/utils/editor.spec.ts index ed013f935..99bb6b925 100644 --- a/server/src/utils/editor.spec.ts +++ b/server/src/utils/editor.spec.ts @@ -1,7 +1,7 @@ -import { AssetFace } from 'src/database'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; -import { SourceType } from 'src/enum'; -import { boundingBoxOverlap, checkFaceVisibility, checkOcrVisibility } from 'src/utils/editor'; +import { AssetFace } from 'src/database.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; +import { SourceType } from 'src/enum.js'; +import { boundingBoxOverlap, checkFaceVisibility, checkOcrVisibility } from 'src/utils/editor.js'; import { describe, expect, it } from 'vitest'; describe('boundingBoxOverlap', () => { diff --git a/server/src/utils/editor.ts b/server/src/utils/editor.ts index 21678f2a8..7c6e02aad 100644 --- a/server/src/utils/editor.ts +++ b/server/src/utils/editor.ts @@ -1,6 +1,6 @@ -import { AssetFace } from 'src/database'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; -import { ImageDimensions } from 'src/types'; +import { AssetFace } from 'src/database.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; +import type { ImageDimensions } from 'src/types.js'; type BoundingBox = { x1: number; diff --git a/server/src/utils/event.ts b/server/src/utils/event.ts index fd791620d..650a36011 100644 --- a/server/src/utils/event.ts +++ b/server/src/utils/event.ts @@ -1,4 +1,4 @@ -import { ArgOf, EmitEvent } from 'src/repositories/event.repository'; +import type { ArgOf, EmitEvent } from 'src/repositories/event.repository.js'; export class PendingEvents extends { error?: string } ? T : never }[EmitEvent]> { private pending = new Map>[]; timeout: NodeJS.Timeout }>(); diff --git a/server/src/utils/fetch.spec.ts b/server/src/utils/fetch.spec.ts index 4cd532e88..883e30e3a 100644 --- a/server/src/utils/fetch.spec.ts +++ b/server/src/utils/fetch.spec.ts @@ -1,5 +1,5 @@ -import { serverVersion } from 'src/constants'; -import { configureUserAgent } from 'src/utils/fetch'; +import { serverVersion } from 'src/constants.js'; +import { configureUserAgent } from 'src/utils/fetch.js'; describe('fetch', () => { it('should set the default user-agent header', async () => { diff --git a/server/src/utils/fetch.ts b/server/src/utils/fetch.ts index 33bd08790..5ffef3dd0 100644 --- a/server/src/utils/fetch.ts +++ b/server/src/utils/fetch.ts @@ -1,4 +1,4 @@ -import { serverVersion } from 'src/constants'; +import { serverVersion } from 'src/constants.js'; export function configureUserAgent() { const originalFetch = fetch; diff --git a/server/src/utils/file.ts b/server/src/utils/file.ts index df3a0ce3e..fd61c286d 100644 --- a/server/src/utils/file.ts +++ b/server/src/utils/file.ts @@ -3,10 +3,10 @@ import { NextFunction, Response } from 'express'; import { access, constants } from 'node:fs/promises'; import { basename, extname } from 'node:path'; import { promisify } from 'node:util'; -import { CacheControl } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { ImmichReadStream } from 'src/repositories/storage.repository'; -import { isConnectionAborted } from 'src/utils/misc'; +import { CacheControl } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { ImmichReadStream } from 'src/repositories/storage.repository.js'; +import { isConnectionAborted } from 'src/utils/misc.js'; export function getFileNameWithoutExtension(path: string): string { return basename(path, getFilenameExtension(path)); diff --git a/server/src/utils/logger.ts b/server/src/utils/logger.ts index bfb020246..d968e3cfa 100644 --- a/server/src/utils/logger.ts +++ b/server/src/utils/logger.ts @@ -1,6 +1,6 @@ import { HttpException } from '@nestjs/common'; import { Request } from 'express'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; const isRequestAborted = (request: Request) => request.destroyed && !request.complete; export const isHttpException = (error: Error): error is HttpException => error instanceof HttpException; diff --git a/server/src/utils/maintenance.ts b/server/src/utils/maintenance.ts index d970b5ebf..74d94164d 100644 --- a/server/src/utils/maintenance.ts +++ b/server/src/utils/maintenance.ts @@ -1,10 +1,10 @@ import { SignJWT } from 'jose'; import { randomBytes } from 'node:crypto'; import { join } from 'node:path'; -import { StorageCore } from 'src/cores/storage.core'; -import { MaintenanceAuthDto, MaintenanceDetectInstallResponseDto } from 'src/dtos/maintenance.dto'; -import { StorageFolder } from 'src/enum'; -import { StorageRepository } from 'src/repositories/storage.repository'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { MaintenanceAuthDto, MaintenanceDetectInstallResponseDto } from 'src/dtos/maintenance.dto.js'; +import { StorageFolder } from 'src/enum.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; export async function createMaintenanceLoginUrl( baseUrl: string, diff --git a/server/src/utils/media.ts b/server/src/utils/media.ts index 49877904e..945087dd2 100644 --- a/server/src/utils/media.ts +++ b/server/src/utils/media.ts @@ -1,5 +1,12 @@ -import { AUDIO_ENCODER, AV1_LEVELS, CodecLevel, H264_LEVELS, HEVC_LEVELS, SUPPORTED_HWA_CODECS } from 'src/constants'; -import { ConfigFFmpegDto } from 'src/dtos/config.dto'; +import { + AUDIO_ENCODER, + AV1_LEVELS, + CodecLevel, + H264_LEVELS, + HEVC_LEVELS, + SUPPORTED_HWA_CODECS, +} from 'src/constants.js'; +import { ConfigFFmpegDto } from 'src/dtos/config.dto.js'; import { ColorMatrix, ColorPrimaries, @@ -9,8 +16,8 @@ import { TranscodeHardwareAcceleration, TranscodeTarget, VideoCodec, -} from 'src/enum'; -import { +} from 'src/enum.js'; +import type { AudioStreamInfo, BitrateDistribution, HlsCommandOptions, @@ -20,7 +27,7 @@ import { VideoInterfaces, VideoStreamInfo, VideoTuning, -} from 'src/types'; +} from 'src/types.js'; export const isVideoRotated = (videoStream: VideoStreamInfo): boolean => Math.abs(videoStream.rotation) === 90; diff --git a/server/src/utils/mime-types.spec.ts b/server/src/utils/mime-types.spec.ts index fd670da77..ac0f3bfbd 100644 --- a/server/src/utils/mime-types.spec.ts +++ b/server/src/utils/mime-types.spec.ts @@ -1,4 +1,4 @@ -import { mimeTypes } from 'src/utils/mime-types'; +import { mimeTypes } from 'src/utils/mime-types.js'; describe('mimeTypes', () => { for (const { mimetype, extension } of [ diff --git a/server/src/utils/mime-types.ts b/server/src/utils/mime-types.ts index bb5e7be95..3e3f6641a 100644 --- a/server/src/utils/mime-types.ts +++ b/server/src/utils/mime-types.ts @@ -1,5 +1,5 @@ -import { AssetType } from 'src/enum'; -import { getFilenameExtension } from 'src/utils/file'; +import { AssetType } from 'src/enum.js'; +import { getFilenameExtension } from 'src/utils/file.js'; const raw = { '.3fr': ['image/3fr', 'image/x-hasselblad-3fr'], diff --git a/server/src/utils/misc.spec.ts b/server/src/utils/misc.spec.ts index e6b36d4a0..0f6e6e589 100644 --- a/server/src/utils/misc.spec.ts +++ b/server/src/utils/misc.spec.ts @@ -1,4 +1,4 @@ -import { getKeysDeep, globToPostgresRegex, unsetDeep } from 'src/utils/misc'; +import { getKeysDeep, globToPostgresRegex, unsetDeep } from 'src/utils/misc.js'; import { describe, expect, it } from 'vitest'; describe('getKeysDeep', () => { diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts index 77c06c244..c9caedd0c 100644 --- a/server/src/utils/misc.ts +++ b/server/src/utils/misc.ts @@ -7,16 +7,16 @@ import { SwaggerDocumentOptions, SwaggerModule, } from '@nestjs/swagger'; -import _ from 'lodash'; +import { get, isArray, isDate, isEmpty, isObject, orderBy, unset } from 'lodash-es'; import { cleanupOpenApiDoc } from 'nestjs-zod'; import { writeFileSync } from 'node:fs'; import path from 'node:path'; import picomatch from 'picomatch'; -import { CLIP_MODEL_INFO, JOBS_ASSET_PAGINATION_SIZE, endpointTags, serverVersion } from 'src/constants'; -import { extraModels } from 'src/decorators'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { ApiCustomExtension, ImmichCookie, ImmichHeader, MetadataKey } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; +import { CLIP_MODEL_INFO, JOBS_ASSET_PAGINATION_SIZE, endpointTags, serverVersion } from 'src/constants.js'; +import { extraModels } from 'src/decorators.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { ApiCustomExtension, ImmichCookie, ImmichHeader, MetadataKey } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; type OperationObject = NonNullable; type ReferenceOrSchemaObject = Extract['schema']; @@ -69,7 +69,7 @@ export const getKeysDeep = (target: unknown, path: string[] = []) => { continue; } - if (_.isObject(value) && !_.isArray(value) && !_.isDate(value)) { + if (isObject(value) && !isArray(value) && !isDate(value)) { properties.push(...getKeysDeep(value, [...path, key])); continue; } @@ -83,14 +83,14 @@ export const getKeysDeep = (target: unknown, path: string[] = []) => { export const unsetDeep = (object: unknown, key: string) => { const parts = key.split('.'); while (parts.length > 0) { - _.unset(object, parts); + unset(object, parts); parts.pop(); - if (!_.isEmpty(_.get(object, parts))) { + if (!isEmpty(get(object, parts))) { break; } } - return _.isEmpty(object) ? undefined : object; + return isEmpty(object) ? undefined : object; }; const isMachineLearningEnabled = (machineLearning: SystemConfig['machineLearning']) => machineLearning.enabled; @@ -307,7 +307,7 @@ const patchOpenAPI = (document: OpenAPIObject) => { } if (operation.parameters) { - operation.parameters = _.orderBy(operation.parameters, 'name'); + operation.parameters = orderBy(operation.parameters, 'name'); } } } diff --git a/server/src/utils/object.ts b/server/src/utils/object.ts index 25ae42cba..1d74dec6b 100644 --- a/server/src/utils/object.ts +++ b/server/src/utils/object.ts @@ -1,4 +1,4 @@ -import { isEqual, isPlainObject } from 'lodash'; +import { isEqual, isPlainObject } from 'lodash-es'; /** * Deeply clones and converts a class instance to a plain object. diff --git a/server/src/utils/preferences.ts b/server/src/utils/preferences.ts index 807952ca6..2d4da5506 100644 --- a/server/src/utils/preferences.ts +++ b/server/src/utils/preferences.ts @@ -1,9 +1,9 @@ -import _ from 'lodash'; -import { UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto'; -import { AssetOrder, UserMetadataKey } from 'src/enum'; -import { DeepPartial, UserMetadataItem, UserPreferences } from 'src/types'; -import { HumanReadableSize } from 'src/utils/bytes'; -import { getKeysDeep } from 'src/utils/misc'; +import { get, isEqual, set } from 'lodash-es'; +import { UserPreferencesUpdateDto } from 'src/dtos/user-preferences.dto.js'; +import { AssetOrder, UserMetadataKey } from 'src/enum.js'; +import type { DeepPartial, UserMetadataItem, UserPreferences } from 'src/types.js'; +import { HumanReadableSize } from 'src/utils/bytes.js'; +import { getKeysDeep } from 'src/utils/misc.js'; const getDefaultPreferences = (): UserPreferences => { return { @@ -62,7 +62,7 @@ export const getPreferences = (metadata: UserMetadataItem[]): UserPreferences => const item = metadata.find(({ key }) => key === UserMetadataKey.Preferences); const partial = item?.value || {}; for (const property of getKeysDeep(partial)) { - _.set(preferences, property, _.get(partial, property)); + set(preferences, property, get(partial, property)); } return preferences; @@ -72,16 +72,16 @@ export const getPreferencesPartial = (newPreferences: UserPreferences) => { const defaultPreferences = getDefaultPreferences(); const partial: DeepPartial = {}; for (const property of getKeysDeep(defaultPreferences)) { - const newValue = _.get(newPreferences, property); + const newValue = get(newPreferences, property); const isEmpty = [undefined, null, ''].includes(newValue); - const defaultValue = _.get(defaultPreferences, property); - const isEqual = newValue === defaultValue || _.isEqual(newValue, defaultValue); + const defaultValue = get(defaultPreferences, property); + const equal = newValue === defaultValue || isEqual(newValue, defaultValue); - if (isEmpty || isEqual) { + if (isEmpty || equal) { continue; } - _.set(partial, property, newValue); + set(partial, property, newValue); } return partial; @@ -89,7 +89,7 @@ export const getPreferencesPartial = (newPreferences: UserPreferences) => { export const mergePreferences = (preferences: UserPreferences, dto: UserPreferencesUpdateDto) => { for (const key of getKeysDeep(dto)) { - _.set(preferences, key, _.get(dto, key)); + set(preferences, key, get(dto, key)); } return preferences; diff --git a/server/src/utils/profile-image.ts b/server/src/utils/profile-image.ts index ea2c0d3b6..60cc3fbe9 100644 --- a/server/src/utils/profile-image.ts +++ b/server/src/utils/profile-image.ts @@ -1,9 +1,9 @@ import { join } from 'node:path'; -import { StorageCore } from 'src/cores/storage.core'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { StorageFolder } from 'src/enum'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { MediaRepository } from 'src/repositories/media.repository'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { StorageFolder } from 'src/enum.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { MediaRepository } from 'src/repositories/media.repository.js'; type Repos = { media: MediaRepository; diff --git a/server/src/utils/request.spec.ts b/server/src/utils/request.spec.ts index f65d19f86..ad8c25258 100644 --- a/server/src/utils/request.spec.ts +++ b/server/src/utils/request.spec.ts @@ -1,4 +1,4 @@ -import { getAppVersionFromUA } from 'src/utils/request'; +import { getAppVersionFromUA } from 'src/utils/request.js'; describe(getAppVersionFromUA.name, () => { it('should get the app version for android', () => { diff --git a/server/src/utils/response.ts b/server/src/utils/response.ts index d5356285f..c036e556a 100644 --- a/server/src/utils/response.ts +++ b/server/src/utils/response.ts @@ -1,7 +1,7 @@ import { CookieOptions, Response } from 'express'; import { Duration } from 'luxon'; -import { CookieResponse } from 'src/dtos/auth.dto'; -import { ImmichCookie } from 'src/enum'; +import { CookieResponse } from 'src/dtos/auth.dto.js'; +import { ImmichCookie } from 'src/enum.js'; export const respondWithCookie = (res: Response, body: T, { isSecure, values }: CookieResponse) => { const defaults: CookieOptions = { diff --git a/server/src/utils/search-cursor.spec.ts b/server/src/utils/search-cursor.spec.ts index 53574f0b3..b42718c77 100644 --- a/server/src/utils/search-cursor.spec.ts +++ b/server/src/utils/search-cursor.spec.ts @@ -1,5 +1,5 @@ import { BadRequestException } from '@nestjs/common'; -import { decodeSearchCursor, encodeSearchCursor } from 'src/utils/search-cursor'; +import { decodeSearchCursor, encodeSearchCursor } from 'src/utils/search-cursor.js'; import { describe, expect, it } from 'vitest'; describe('encodeSearchCursor', () => { diff --git a/server/src/utils/search-filter.spec.ts b/server/src/utils/search-filter.spec.ts index c4abe9436..8ea6ddc2d 100644 --- a/server/src/utils/search-filter.spec.ts +++ b/server/src/utils/search-filter.spec.ts @@ -1,8 +1,8 @@ import { UnauthorizedException } from '@nestjs/common'; -import { isAlbumConfined, isFullyAlbumConfined, SearchFilter } from 'src/dtos/search.dto'; -import { AssetVisibility } from 'src/enum'; -import { applyLockedVisibilityPolicy, collectFilterIds } from 'src/utils/search-filter'; -import { AuthFactory } from 'test/factories/auth.factory'; +import { isAlbumConfined, isFullyAlbumConfined, SearchFilter } from 'src/dtos/search.dto.js'; +import { AssetVisibility } from 'src/enum.js'; +import { applyLockedVisibilityPolicy, collectFilterIds } from 'src/utils/search-filter.js'; +import { AuthFactory } from 'test/factories/auth.factory.js'; import { describe, expect, it } from 'vitest'; const elevatedAuth = () => AuthFactory.from().session({ hasElevatedPermission: true }).build(); diff --git a/server/src/utils/search-filter.ts b/server/src/utils/search-filter.ts index 83ea63d31..674947a08 100644 --- a/server/src/utils/search-filter.ts +++ b/server/src/utils/search-filter.ts @@ -1,7 +1,7 @@ -import { AuthDto } from 'src/dtos/auth.dto'; -import { SearchFilter, SearchFilterBranch } from 'src/dtos/search.dto'; -import { AssetVisibility } from 'src/enum'; -import { requireElevatedPermission } from 'src/utils/access'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { SearchFilter, SearchFilterBranch } from 'src/dtos/search.dto.js'; +import { AssetVisibility } from 'src/enum.js'; +import { requireElevatedPermission } from 'src/utils/access.js'; type EnumField = 'type' | 'visibility'; type EnumOperator = keyof NonNullable; diff --git a/server/src/utils/sync.ts b/server/src/utils/sync.ts index 51c62862e..1d64ff3d1 100644 --- a/server/src/utils/sync.ts +++ b/server/src/utils/sync.ts @@ -1,6 +1,6 @@ -import { SyncItem } from 'src/dtos/sync.dto'; -import { SyncEntityType } from 'src/enum'; -import { SyncAck } from 'src/types'; +import { SyncItem } from 'src/dtos/sync.dto.js'; +import { SyncEntityType } from 'src/enum.js'; +import type { SyncAck } from 'src/types.js'; type Impossible = { [P in K]: never; diff --git a/server/src/utils/tag.ts b/server/src/utils/tag.ts index 4e8a86a7f..8de3ceb25 100644 --- a/server/src/utils/tag.ts +++ b/server/src/utils/tag.ts @@ -1,5 +1,5 @@ -import { Tag } from 'src/database'; -import { TagRepository } from 'src/repositories/tag.repository'; +import { Tag } from 'src/database.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; type UpsertRequest = { userId: string; tags: string[] }; export const upsertTags = async (repository: TagRepository, { userId, tags }: UpsertRequest) => { diff --git a/server/src/utils/transform.spec.ts b/server/src/utils/transform.spec.ts index f65278842..da4a6a093 100644 --- a/server/src/utils/transform.spec.ts +++ b/server/src/utils/transform.spec.ts @@ -1,6 +1,6 @@ -import { AssetEditAction, AssetEditActionItem, MirrorAxis } from 'src/dtos/editing.dto'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; -import { transformFaceBoundingBox, transformOcrBoundingBox } from 'src/utils/transform'; +import { AssetEditAction, AssetEditActionItem, MirrorAxis } from 'src/dtos/editing.dto.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; +import { transformFaceBoundingBox, transformOcrBoundingBox } from 'src/utils/transform.js'; import { describe, expect, it } from 'vitest'; describe('transformFaceBoundingBox', () => { diff --git a/server/src/utils/transform.ts b/server/src/utils/transform.ts index 76d5247de..f958fb48e 100644 --- a/server/src/utils/transform.ts +++ b/server/src/utils/transform.ts @@ -1,6 +1,6 @@ -import { AssetEditAction, AssetEditActionItem } from 'src/dtos/editing.dto'; -import { AssetOcrResponseDto } from 'src/dtos/ocr.dto'; -import { ImageDimensions } from 'src/types'; +import { AssetEditAction, AssetEditActionItem } from 'src/dtos/editing.dto.js'; +import { AssetOcrResponseDto } from 'src/dtos/ocr.dto.js'; +import type { ImageDimensions } from 'src/types.js'; import { applyToPoint, compose, flipX, flipY, identity, Matrix, rotate, scale, translate } from 'transformation-matrix'; export const getOutputDimensions = ( diff --git a/server/src/utils/workflow.spec.ts b/server/src/utils/workflow.spec.ts index 544b97f4b..80bc468d9 100644 --- a/server/src/utils/workflow.spec.ts +++ b/server/src/utils/workflow.spec.ts @@ -1,6 +1,6 @@ import { WorkflowTrigger } from '@immich/plugin-sdk'; -import { WorkflowType } from 'src/enum'; -import { isMethodCompatible } from 'src/utils/workflow'; +import { WorkflowType } from 'src/enum.js'; +import { isMethodCompatible } from 'src/utils/workflow.js'; const tests: Array<{ trigger: WorkflowTrigger; types: WorkflowType[]; expected: boolean }> = [ { diff --git a/server/src/utils/workflow.ts b/server/src/utils/workflow.ts index a3a9d56c4..cdce0c30a 100644 --- a/server/src/utils/workflow.ts +++ b/server/src/utils/workflow.ts @@ -1,6 +1,6 @@ import { WorkflowTrigger } from '@immich/plugin-sdk'; -import { WorkflowType } from 'src/enum'; -import { PluginMethodSearchResponse } from 'src/repositories/plugin.repository'; +import { WorkflowType } from 'src/enum.js'; +import { PluginMethodSearchResponse } from 'src/repositories/plugin.repository.js'; export const triggerMap: Record = { [WorkflowTrigger.AssetCreate]: [WorkflowType.AssetV1], diff --git a/server/src/validation.spec.ts b/server/src/validation.spec.ts index 7305c4d5c..4a56bc81e 100644 --- a/server/src/validation.spec.ts +++ b/server/src/validation.spec.ts @@ -1,4 +1,4 @@ -import { IsNotSiblingOf, toEmail } from 'src/validation'; +import { IsNotSiblingOf, toEmail } from 'src/validation.js'; import { describe, expect, it } from 'vitest'; import z from 'zod'; diff --git a/server/src/validation.ts b/server/src/validation.ts index f9f4288ee..3e26bee3a 100644 --- a/server/src/validation.ts +++ b/server/src/validation.ts @@ -2,17 +2,17 @@ import { FileValidator, Injectable } from '@nestjs/common'; import { DateTime } from 'luxon'; import { createZodDto } from 'nestjs-zod'; import sanitize from 'sanitize-filename'; -import { isIP, isIPRange } from 'validator'; +import validator from 'validator'; import z from 'zod'; export type IsIPRangeOptions = { requireCIDR?: boolean }; function isIPOrRange(value: string, options?: IsIPRangeOptions): boolean { const { requireCIDR = true } = options ?? {}; - if (isIPRange(value)) { + if (validator.isIPRange(value)) { return true; } - return !requireCIDR && isIP(value); + return !requireCIDR && validator.isIP(value); } /** diff --git a/server/src/workers/api.ts b/server/src/workers/api.ts index 99c08c0fa..0165a2c6e 100644 --- a/server/src/workers/api.ts +++ b/server/src/workers/api.ts @@ -1,17 +1,21 @@ import { NestFactory } from '@nestjs/core'; import { NestExpressApplication } from '@nestjs/platform-express'; -import { configureExpress, configureTelemetry } from 'src/app.common'; -import { ApiModule } from 'src/app.module'; -import { AppRepository } from 'src/repositories/app.repository'; -import { ApiService } from 'src/services/api.service'; -import { isStartUpError } from 'src/utils/misc'; +import { configureExpress, configureTelemetry } from 'src/app.common.js'; +import { ApiModule } from 'src/app.module.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { ApiService } from 'src/services/api.service.js'; +import { isStartUpError } from 'src/utils/misc.js'; async function bootstrap() { process.title = 'immich-api'; configureTelemetry(); - const app = await NestFactory.create(ApiModule, { bufferLogs: true }); + const app = await NestFactory.create(ApiModule, { + bufferLogs: true, + routeConflictPolicy: { duplicate: 'error' }, + routeResolutionStrategy: 'specificity', + }); app.get(AppRepository).setCloseFn(() => app.close()); void configureExpress(app, { diff --git a/server/src/workers/maintenance.ts b/server/src/workers/maintenance.ts index 035ec600a..822e56e21 100644 --- a/server/src/workers/maintenance.ts +++ b/server/src/workers/maintenance.ts @@ -1,16 +1,20 @@ import { NestFactory } from '@nestjs/core'; import { NestExpressApplication } from '@nestjs/platform-express'; -import { configureExpress, configureTelemetry } from 'src/app.common'; -import { MaintenanceModule } from 'src/app.module'; -import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service'; -import { AppRepository } from 'src/repositories/app.repository'; -import { isStartUpError } from 'src/utils/misc'; +import { configureExpress, configureTelemetry } from 'src/app.common.js'; +import { MaintenanceModule } from 'src/app.module.js'; +import { MaintenanceWorkerService } from 'src/maintenance/maintenance-worker.service.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { isStartUpError } from 'src/utils/misc.js'; async function bootstrap() { process.title = 'immich-maintenance'; configureTelemetry(); - const app = await NestFactory.create(MaintenanceModule, { bufferLogs: true }); + const app = await NestFactory.create(MaintenanceModule, { + bufferLogs: true, + routeConflictPolicy: { duplicate: 'error' }, + routeResolutionStrategy: 'specificity', + }); app.get(AppRepository).setCloseFn(() => app.close()); void configureExpress(app, { diff --git a/server/src/workers/microservices.ts b/server/src/workers/microservices.ts index 8f06b4b0b..0ba1174a4 100644 --- a/server/src/workers/microservices.ts +++ b/server/src/workers/microservices.ts @@ -1,13 +1,13 @@ import { NestFactory } from '@nestjs/core'; import { isMainThread } from 'node:worker_threads'; -import { MicroservicesModule } from 'src/app.module'; -import { serverVersion } from 'src/constants'; -import { WebSocketAdapter } from 'src/middleware/websocket.adapter'; -import { AppRepository } from 'src/repositories/app.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { bootstrapTelemetry } from 'src/repositories/telemetry.repository'; -import { isStartUpError } from 'src/utils/misc'; +import { MicroservicesModule } from 'src/app.module.js'; +import { serverVersion } from 'src/constants.js'; +import { WebSocketAdapter } from 'src/middleware/websocket.adapter.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { bootstrapTelemetry } from 'src/repositories/telemetry.repository.js'; +import { isStartUpError } from 'src/utils/misc.js'; export async function bootstrap() { const { telemetry } = new ConfigRepository().getEnv(); diff --git a/server/test/factories/activity.factory.ts b/server/test/factories/activity.factory.ts index 861b11515..164d8e9f6 100644 --- a/server/test/factories/activity.factory.ts +++ b/server/test/factories/activity.factory.ts @@ -1,9 +1,9 @@ import { Selectable } from 'kysely'; -import { ActivityTable } from 'src/schema/tables/activity.table'; -import { build } from 'test/factories/builder.factory'; -import { ActivityLike, FactoryBuilder, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { ActivityTable } from 'src/schema/tables/activity.table.js'; +import { build } from 'test/factories/builder.factory.js'; +import { ActivityLike, FactoryBuilder, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class ActivityFactory { #user!: UserFactory; diff --git a/server/test/factories/album-user.factory.ts b/server/test/factories/album-user.factory.ts index 6e2f8cb83..1e9733676 100644 --- a/server/test/factories/album-user.factory.ts +++ b/server/test/factories/album-user.factory.ts @@ -1,11 +1,11 @@ import { Selectable } from 'kysely'; -import { AlbumUserRole } from 'src/enum'; -import { AlbumUserTable } from 'src/schema/tables/album-user.table'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { build } from 'test/factories/builder.factory'; -import { AlbumUserLike, FactoryBuilder, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { AlbumUserRole } from 'src/enum.js'; +import { AlbumUserTable } from 'src/schema/tables/album-user.table.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AlbumUserLike, FactoryBuilder, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class AlbumUserFactory { #user!: UserFactory; diff --git a/server/test/factories/album.factory.ts b/server/test/factories/album.factory.ts index 336a9747c..93796f42a 100644 --- a/server/test/factories/album.factory.ts +++ b/server/test/factories/album.factory.ts @@ -1,13 +1,13 @@ import { Selectable } from 'kysely'; -import { AlbumUserRole, AssetOrder } from 'src/enum'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { SharedLinkTable } from 'src/schema/tables/shared-link.table'; -import { AlbumUserFactory } from 'test/factories/album-user.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { build } from 'test/factories/builder.factory'; -import { AlbumLike, AlbumUserLike, AssetLike, FactoryBuilder, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { AlbumUserRole, AssetOrder } from 'src/enum.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { SharedLinkTable } from 'src/schema/tables/shared-link.table.js'; +import { AlbumUserFactory } from 'test/factories/album-user.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AlbumLike, AlbumUserLike, AssetLike, FactoryBuilder, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class AlbumFactory { #owner!: UserFactory; diff --git a/server/test/factories/api-key.factory.ts b/server/test/factories/api-key.factory.ts index d16b50ba5..c1c4debbe 100644 --- a/server/test/factories/api-key.factory.ts +++ b/server/test/factories/api-key.factory.ts @@ -1,10 +1,10 @@ import { Selectable } from 'kysely'; -import { Permission } from 'src/enum'; -import { ApiKeyTable } from 'src/schema/tables/api-key.table'; -import { build } from 'test/factories/builder.factory'; -import { ApiKeyLike, FactoryBuilder, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { Permission } from 'src/enum.js'; +import { ApiKeyTable } from 'src/schema/tables/api-key.table.js'; +import { build } from 'test/factories/builder.factory.js'; +import { ApiKeyLike, FactoryBuilder, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class ApiKeyFactory { #user!: UserFactory; diff --git a/server/test/factories/asset-edit.factory.ts b/server/test/factories/asset-edit.factory.ts index 897ed26d6..2822cf590 100644 --- a/server/test/factories/asset-edit.factory.ts +++ b/server/test/factories/asset-edit.factory.ts @@ -1,10 +1,10 @@ import { Selectable } from 'kysely'; -import { AssetEditAction, AssetEditActionItem } from 'src/dtos/editing.dto'; -import { AssetEditTable } from 'src/schema/tables/asset-edit.table'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { build } from 'test/factories/builder.factory'; -import { AssetEditLike, AssetLike, FactoryBuilder } from 'test/factories/types'; -import { newDate, newUuid } from 'test/small.factory'; +import { AssetEditAction, AssetEditActionItem } from 'src/dtos/editing.dto.js'; +import { AssetEditTable } from 'src/schema/tables/asset-edit.table.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AssetEditLike, AssetLike, FactoryBuilder } from 'test/factories/types.js'; +import { newDate, newUuid } from 'test/small.factory.js'; export class AssetEditFactory { private constructor(private readonly value: Selectable) {} diff --git a/server/test/factories/asset-exif.factory.ts b/server/test/factories/asset-exif.factory.ts index ada83d509..f6b0e7d48 100644 --- a/server/test/factories/asset-exif.factory.ts +++ b/server/test/factories/asset-exif.factory.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetExifLike } from 'test/factories/types'; -import { factory } from 'test/small.factory'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetExifLike } from 'test/factories/types.js'; +import { factory } from 'test/small.factory.js'; export class AssetExifFactory { private constructor(private readonly value: Selectable) {} diff --git a/server/test/factories/asset-face.factory.ts b/server/test/factories/asset-face.factory.ts index c24e543af..8d49bc5d2 100644 --- a/server/test/factories/asset-face.factory.ts +++ b/server/test/factories/asset-face.factory.ts @@ -1,10 +1,10 @@ import { Selectable } from 'kysely'; -import { SourceType } from 'src/enum'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { build } from 'test/factories/builder.factory'; -import { PersonFactory } from 'test/factories/person.factory'; -import { AssetFaceLike, FactoryBuilder, PersonLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { SourceType } from 'src/enum.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { build } from 'test/factories/builder.factory.js'; +import { PersonFactory } from 'test/factories/person.factory.js'; +import { AssetFaceLike, FactoryBuilder, PersonLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class AssetFaceFactory { #person: PersonFactory | null = null; diff --git a/server/test/factories/asset-file.factory.ts b/server/test/factories/asset-file.factory.ts index 511ab45bb..776dcdcbc 100644 --- a/server/test/factories/asset-file.factory.ts +++ b/server/test/factories/asset-file.factory.ts @@ -1,10 +1,10 @@ import { Selectable } from 'kysely'; -import { AssetFileType } from 'src/enum'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { build } from 'test/factories/builder.factory'; -import { AssetFileLike, AssetLike, FactoryBuilder } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { AssetFileType } from 'src/enum.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AssetFileLike, AssetLike, FactoryBuilder } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class AssetFileFactory { private constructor(private readonly value: Selectable) {} diff --git a/server/test/factories/asset.factory.ts b/server/test/factories/asset.factory.ts index 0a992719e..4210bcafd 100644 --- a/server/test/factories/asset.factory.ts +++ b/server/test/factories/asset.factory.ts @@ -1,13 +1,13 @@ import { Selectable } from 'kysely'; -import { AssetFileType, AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { AssetEditFactory } from 'test/factories/asset-edit.factory'; -import { AssetExifFactory } from 'test/factories/asset-exif.factory'; -import { AssetFaceFactory } from 'test/factories/asset-face.factory'; -import { AssetFileFactory } from 'test/factories/asset-file.factory'; -import { build } from 'test/factories/builder.factory'; -import { StackFactory } from 'test/factories/stack.factory'; +import { AssetFileType, AssetStatus, AssetType, AssetVisibility, ChecksumAlgorithm } from 'src/enum.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { AssetEditFactory } from 'test/factories/asset-edit.factory.js'; +import { AssetExifFactory } from 'test/factories/asset-exif.factory.js'; +import { AssetFaceFactory } from 'test/factories/asset-face.factory.js'; +import { AssetFileFactory } from 'test/factories/asset-file.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { StackFactory } from 'test/factories/stack.factory.js'; import { AssetEditLike, AssetExifLike, @@ -17,9 +17,9 @@ import { FactoryBuilder, StackLike, UserLike, -} from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newSha1, newUuid, newUuidV7 } from 'test/small.factory'; +} from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newSha1, newUuid, newUuidV7 } from 'test/small.factory.js'; export class AssetFactory { #owner!: UserFactory; diff --git a/server/test/factories/auth.factory.ts b/server/test/factories/auth.factory.ts index fd38c4264..77884ff5f 100644 --- a/server/test/factories/auth.factory.ts +++ b/server/test/factories/auth.factory.ts @@ -1,10 +1,10 @@ -import { AuthDto } from 'src/dtos/auth.dto'; -import { ApiKeyFactory } from 'test/factories/api-key.factory'; -import { build } from 'test/factories/builder.factory'; -import { SharedLinkFactory } from 'test/factories/shared-link.factory'; -import { ApiKeyLike, FactoryBuilder, SharedLinkLike, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newUuid } from 'test/small.factory'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { ApiKeyFactory } from 'test/factories/api-key.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { SharedLinkFactory } from 'test/factories/shared-link.factory.js'; +import { ApiKeyLike, FactoryBuilder, SharedLinkLike, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newUuid } from 'test/small.factory.js'; export class AuthFactory { #user: UserFactory; diff --git a/server/test/factories/builder.factory.ts b/server/test/factories/builder.factory.ts index 4efa7a498..e8ed1a30f 100644 --- a/server/test/factories/builder.factory.ts +++ b/server/test/factories/builder.factory.ts @@ -1,4 +1,4 @@ -import { FactoryBuilder } from 'test/factories/types'; +import { FactoryBuilder } from 'test/factories/types.js'; export const build = (factory: T, builder?: FactoryBuilder) => { return builder ? builder(factory) : factory; diff --git a/server/test/factories/cluster-group.factory.ts b/server/test/factories/cluster-group.factory.ts index 21a39bfd7..2f39b254a 100644 --- a/server/test/factories/cluster-group.factory.ts +++ b/server/test/factories/cluster-group.factory.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely'; -import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table'; -import { ClusterGroupLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table.js'; +import { ClusterGroupLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class ClusterGroupFactory { private constructor(private readonly value: Selectable) {} diff --git a/server/test/factories/memory.factory.ts b/server/test/factories/memory.factory.ts index bda1d15c2..f2f914899 100644 --- a/server/test/factories/memory.factory.ts +++ b/server/test/factories/memory.factory.ts @@ -1,10 +1,10 @@ import { Selectable } from 'kysely'; -import { MemoryType } from 'src/enum'; -import { MemoryTable } from 'src/schema/tables/memory.table'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { build } from 'test/factories/builder.factory'; -import { AssetLike, FactoryBuilder, MemoryLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { MemoryType } from 'src/enum.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AssetLike, FactoryBuilder, MemoryLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class MemoryFactory { #assets: AssetFactory[] = []; diff --git a/server/test/factories/oauth-profile.factory.ts b/server/test/factories/oauth-profile.factory.ts index 31a8e4ea7..d7beb8a16 100644 --- a/server/test/factories/oauth-profile.factory.ts +++ b/server/test/factories/oauth-profile.factory.ts @@ -1,6 +1,6 @@ -import { OAuthProfile } from 'src/repositories/oauth.repository'; -import { OAuthProfileLike } from 'test/factories/types'; -import { newUuid } from 'test/small.factory'; +import { OAuthProfile } from 'src/repositories/oauth.repository.js'; +import { OAuthProfileLike } from 'test/factories/types.js'; +import { newUuid } from 'test/small.factory.js'; export class OAuthProfileFactory { private constructor(private value: OAuthProfile) {} diff --git a/server/test/factories/partner.factory.ts b/server/test/factories/partner.factory.ts index f631db1eb..d1a65f2e3 100644 --- a/server/test/factories/partner.factory.ts +++ b/server/test/factories/partner.factory.ts @@ -1,9 +1,9 @@ import { Selectable } from 'kysely'; -import { PartnerTable } from 'src/schema/tables/partner.table'; -import { build } from 'test/factories/builder.factory'; -import { FactoryBuilder, PartnerLike, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { PartnerTable } from 'src/schema/tables/partner.table.js'; +import { build } from 'test/factories/builder.factory.js'; +import { FactoryBuilder, PartnerLike, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class PartnerFactory { #sharedWith!: UserFactory; diff --git a/server/test/factories/person-group.factory.ts b/server/test/factories/person-group.factory.ts index 436f777f6..f027a5def 100644 --- a/server/test/factories/person-group.factory.ts +++ b/server/test/factories/person-group.factory.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely'; -import { PersonGroupTable } from 'src/schema/tables/person-group.table'; -import { PersonGroupLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { PersonGroupTable } from 'src/schema/tables/person-group.table.js'; +import { PersonGroupLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class PersonGroupFactory { private constructor(private readonly value: Selectable) {} diff --git a/server/test/factories/person.factory.ts b/server/test/factories/person.factory.ts index 84b0cf5d9..700180ea8 100644 --- a/server/test/factories/person.factory.ts +++ b/server/test/factories/person.factory.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { PersonLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { PersonLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class PersonFactory { private constructor(private readonly value: Selectable) {} diff --git a/server/test/factories/session.factory.ts b/server/test/factories/session.factory.ts index 188b8b638..72ef17d97 100644 --- a/server/test/factories/session.factory.ts +++ b/server/test/factories/session.factory.ts @@ -1,7 +1,7 @@ import { Selectable } from 'kysely'; -import { SessionTable } from 'src/schema/tables/session.table'; -import { SessionLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { SessionTable } from 'src/schema/tables/session.table.js'; +import { SessionLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class SessionFactory { private constructor(private value: Selectable) {} diff --git a/server/test/factories/shared-link.factory.ts b/server/test/factories/shared-link.factory.ts index a37283df7..c0231ef10 100644 --- a/server/test/factories/shared-link.factory.ts +++ b/server/test/factories/shared-link.factory.ts @@ -1,12 +1,12 @@ import { Selectable } from 'kysely'; -import { SharedLinkType } from 'src/enum'; -import { SharedLinkTable } from 'src/schema/tables/shared-link.table'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { build } from 'test/factories/builder.factory'; -import { AlbumLike, AssetLike, FactoryBuilder, SharedLinkLike, UserLike } from 'test/factories/types'; -import { UserFactory } from 'test/factories/user.factory'; -import { factory, newDate, newUuid } from 'test/small.factory'; +import { SharedLinkType } from 'src/enum.js'; +import { SharedLinkTable } from 'src/schema/tables/shared-link.table.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AlbumLike, AssetLike, FactoryBuilder, SharedLinkLike, UserLike } from 'test/factories/types.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { factory, newDate, newUuid } from 'test/small.factory.js'; export class SharedLinkFactory { #owner: UserFactory; diff --git a/server/test/factories/stack.factory.ts b/server/test/factories/stack.factory.ts index 69775973c..b597c8ed3 100644 --- a/server/test/factories/stack.factory.ts +++ b/server/test/factories/stack.factory.ts @@ -1,9 +1,9 @@ import { Selectable } from 'kysely'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { build } from 'test/factories/builder.factory'; -import { AssetLike, FactoryBuilder, StackLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { build } from 'test/factories/builder.factory.js'; +import { AssetLike, FactoryBuilder, StackLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class StackFactory { #assets: AssetFactory[] = []; diff --git a/server/test/factories/types.ts b/server/test/factories/types.ts index a227deef8..2f4e2cabe 100644 --- a/server/test/factories/types.ts +++ b/server/test/factories/types.ts @@ -1,23 +1,23 @@ import { Selectable } from 'kysely'; -import { OAuthProfile } from 'src/repositories/oauth.repository'; -import { ActivityTable } from 'src/schema/tables/activity.table'; -import { AlbumUserTable } from 'src/schema/tables/album-user.table'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { ApiKeyTable } from 'src/schema/tables/api-key.table'; -import { AssetEditTable } from 'src/schema/tables/asset-edit.table'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetFaceTable } from 'src/schema/tables/asset-face.table'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table'; -import { MemoryTable } from 'src/schema/tables/memory.table'; -import { PartnerTable } from 'src/schema/tables/partner.table'; -import { PersonGroupTable } from 'src/schema/tables/person-group.table'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { SessionTable } from 'src/schema/tables/session.table'; -import { SharedLinkTable } from 'src/schema/tables/shared-link.table'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { UserTable } from 'src/schema/tables/user.table'; +import { OAuthProfile } from 'src/repositories/oauth.repository.js'; +import { ActivityTable } from 'src/schema/tables/activity.table.js'; +import { AlbumUserTable } from 'src/schema/tables/album-user.table.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { ApiKeyTable } from 'src/schema/tables/api-key.table.js'; +import { AssetEditTable } from 'src/schema/tables/asset-edit.table.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetFaceTable } from 'src/schema/tables/asset-face.table.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { ClusterGroupTable } from 'src/schema/tables/cluster-group.table.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; +import { PartnerTable } from 'src/schema/tables/partner.table.js'; +import { PersonGroupTable } from 'src/schema/tables/person-group.table.js'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { SessionTable } from 'src/schema/tables/session.table.js'; +import { SharedLinkTable } from 'src/schema/tables/shared-link.table.js'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; export type FactoryBuilder = (builder: T) => R; diff --git a/server/test/factories/user.factory.ts b/server/test/factories/user.factory.ts index df5366c9b..8569177fc 100644 --- a/server/test/factories/user.factory.ts +++ b/server/test/factories/user.factory.ts @@ -1,9 +1,9 @@ import { Selectable } from 'kysely'; -import { UserStatus } from 'src/enum'; -import { UserMetadataTable } from 'src/schema/tables/user-metadata.table'; -import { UserTable } from 'src/schema/tables/user.table'; -import { UserLike } from 'test/factories/types'; -import { newDate, newUuid, newUuidV7 } from 'test/small.factory'; +import { UserStatus } from 'src/enum.js'; +import { UserMetadataTable } from 'src/schema/tables/user-metadata.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import { UserLike } from 'test/factories/types.js'; +import { newDate, newUuid, newUuidV7 } from 'test/small.factory.js'; export class UserFactory { #metadata: Selectable[] = []; diff --git a/server/test/fixtures/auth.stub.ts b/server/test/fixtures/auth.stub.ts index 7ac7c1497..170e5fe11 100644 --- a/server/test/fixtures/auth.stub.ts +++ b/server/test/fixtures/auth.stub.ts @@ -1,5 +1,5 @@ -import { AuthSession } from 'src/database'; -import { AuthDto } from 'src/dtos/auth.dto'; +import { AuthSession } from 'src/database.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; const authUser = { admin: { diff --git a/server/test/fixtures/media.stub.ts b/server/test/fixtures/media.stub.ts index 4421a0980..55ec16b0e 100644 --- a/server/test/fixtures/media.stub.ts +++ b/server/test/fixtures/media.stub.ts @@ -7,8 +7,8 @@ import { DvSignalCompatibility, H264Profile, HevcProfile, -} from 'src/enum'; -import { AudioStreamInfo, VideoFormat, VideoInfo, VideoStreamInfo } from 'src/types'; +} from 'src/enum.js'; +import type { AudioStreamInfo, VideoFormat, VideoInfo, VideoStreamInfo } from 'src/types.js'; const probeStubDefaultFormat: VideoFormat = { formatName: 'mov,mp4,m4a,3gp,3g2,mj2', diff --git a/server/test/fixtures/notification.stub.ts b/server/test/fixtures/notification.stub.ts index b5a436a62..8bd5cca5d 100644 --- a/server/test/fixtures/notification.stub.ts +++ b/server/test/fixtures/notification.stub.ts @@ -1,4 +1,4 @@ -import { NotificationLevel, NotificationType } from 'src/enum'; +import { NotificationLevel, NotificationType } from 'src/enum.js'; export const notificationStub = { albumEvent: { diff --git a/server/test/fixtures/person.stub.ts b/server/test/fixtures/person.stub.ts index 6ab32e1f0..88776f3d7 100644 --- a/server/test/fixtures/person.stub.ts +++ b/server/test/fixtures/person.stub.ts @@ -1,6 +1,6 @@ -import { AssetFileType, AssetType } from 'src/enum'; -import { AssetFileFactory } from 'test/factories/asset-file.factory'; -import { userStub } from 'test/fixtures/user.stub'; +import { AssetFileType, AssetType } from 'src/enum.js'; +import { AssetFileFactory } from 'test/factories/asset-file.factory.js'; +import { userStub } from 'test/fixtures/user.stub.js'; export const personThumbnailStub = { newThumbnailStart: Object.freeze({ diff --git a/server/test/fixtures/shared-link.stub.ts b/server/test/fixtures/shared-link.stub.ts index c29bdf631..a71a263a0 100644 --- a/server/test/fixtures/shared-link.stub.ts +++ b/server/test/fixtures/shared-link.stub.ts @@ -1,9 +1,9 @@ import { DateTime } from 'luxon'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { SharedLinkType } from 'src/enum'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { authStub } from 'test/fixtures/auth.stub'; -import { userStub } from 'test/fixtures/user.stub'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { SharedLinkType } from 'src/enum.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; +import { userStub } from 'test/fixtures/user.stub.js'; const today = new Date(); const tomorrow = DateTime.now().plus({ days: 1 }).toJSDate(); diff --git a/server/test/fixtures/system-config.stub.ts b/server/test/fixtures/system-config.stub.ts index 6ba655692..b719c6948 100644 --- a/server/test/fixtures/system-config.stub.ts +++ b/server/test/fixtures/system-config.stub.ts @@ -1,5 +1,5 @@ -import { SystemConfig } from 'src/dtos/config.dto'; -import { DeepPartial } from 'src/types'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import type { DeepPartial } from 'src/types.js'; export const systemConfigStub = { enabled: { diff --git a/server/test/fixtures/tag.stub.ts b/server/test/fixtures/tag.stub.ts index 8382dec14..53063f38b 100644 --- a/server/test/fixtures/tag.stub.ts +++ b/server/test/fixtures/tag.stub.ts @@ -1,6 +1,6 @@ -import { Tag } from 'src/database'; -import { TagResponseDto } from 'src/dtos/tag.dto'; -import { newUuidV7 } from 'test/small.factory'; +import { Tag } from 'src/database.js'; +import { TagResponseDto } from 'src/dtos/tag.dto.js'; +import { newUuidV7 } from 'test/small.factory.js'; const parent = Object.freeze({ id: 'tag-parent', diff --git a/server/test/fixtures/user.stub.ts b/server/test/fixtures/user.stub.ts index f6d3a42bd..9834ea31e 100644 --- a/server/test/fixtures/user.stub.ts +++ b/server/test/fixtures/user.stub.ts @@ -1,6 +1,6 @@ -import { UserAdmin } from 'src/database'; -import { UserStatus } from 'src/enum'; -import { authStub } from 'test/fixtures/auth.stub'; +import { UserAdmin } from 'src/database.js'; +import { UserStatus } from 'src/enum.js'; +import { authStub } from 'test/fixtures/auth.stub.js'; export const userStub = { admin: { diff --git a/server/test/mappers.ts b/server/test/mappers.ts index 6937c5545..60b8a94cb 100644 --- a/server/test/mappers.ts +++ b/server/test/mappers.ts @@ -1,20 +1,20 @@ import { Selectable, ShallowDehydrateObject } from 'kysely'; -import { MapAsset } from 'src/dtos/asset-response.dto'; -import { AssetEditActionItem } from 'src/dtos/editing.dto'; -import { AssetFileType } from 'src/enum'; -import { FaceSearchResult } from 'src/repositories/search.repository'; -import { ActivityTable } from 'src/schema/tables/activity.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { PartnerTable } from 'src/schema/tables/partner.table'; -import { AudioStreamInfo, VideoFormat, VideoStreamInfo } from 'src/types'; -import { AlbumFactory } from 'test/factories/album.factory'; -import { AssetFaceFactory } from 'test/factories/asset-face.factory'; -import { AssetFactory } from 'test/factories/asset.factory'; -import { MemoryFactory } from 'test/factories/memory.factory'; -import { SharedLinkFactory } from 'test/factories/shared-link.factory'; -import { StackFactory } from 'test/factories/stack.factory'; -import { UserFactory } from 'test/factories/user.factory'; -import { newUuid } from 'test/small.factory'; +import { MapAsset } from 'src/dtos/asset-response.dto.js'; +import { AssetEditActionItem } from 'src/dtos/editing.dto.js'; +import { AssetFileType } from 'src/enum.js'; +import { FaceSearchResult } from 'src/repositories/search.repository.js'; +import { ActivityTable } from 'src/schema/tables/activity.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { PartnerTable } from 'src/schema/tables/partner.table.js'; +import type { AudioStreamInfo, VideoFormat, VideoStreamInfo } from 'src/types.js'; +import { AlbumFactory } from 'test/factories/album.factory.js'; +import { AssetFaceFactory } from 'test/factories/asset-face.factory.js'; +import { AssetFactory } from 'test/factories/asset.factory.js'; +import { MemoryFactory } from 'test/factories/memory.factory.js'; +import { SharedLinkFactory } from 'test/factories/shared-link.factory.js'; +import { StackFactory } from 'test/factories/stack.factory.js'; +import { UserFactory } from 'test/factories/user.factory.js'; +import { newUuid } from 'test/small.factory.js'; export const getForStorageTemplate = (asset: ReturnType) => { return { diff --git a/server/test/medium.factory.ts b/server/test/medium.factory.ts index 886f090b5..9b5cb13b2 100644 --- a/server/test/medium.factory.ts +++ b/server/test/medium.factory.ts @@ -4,10 +4,10 @@ import { createHash, randomBytes } from 'node:crypto'; import { Stats } from 'node:fs'; import { resolve } from 'node:path'; import { Writable } from 'node:stream'; -import { AssetFace } from 'src/database'; -import { AuthDto, LoginResponseDto } from 'src/dtos/auth.dto'; -import { SystemConfig } from 'src/dtos/config.dto'; -import { AssetEditActionItem, AssetEditsCreateDto } from 'src/dtos/editing.dto'; +import { AssetFace } from 'src/database.js'; +import { AuthDto, LoginResponseDto } from 'src/dtos/auth.dto.js'; +import { SystemConfig } from 'src/dtos/config.dto.js'; +import { AssetEditActionItem, AssetEditsCreateDto } from 'src/dtos/editing.dto.js'; import { AlbumUserRole, AssetType, @@ -17,80 +17,79 @@ import { SourceType, SyncEntityType, SyncRequestType, -} from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ActivityRepository } from 'src/repositories/activity.repository'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { ApiKeyRepository } from 'src/repositories/api-key.repository'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { AssetFileRepository } from 'src/repositories/asset-file.repository'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CronRepository } from 'src/repositories/cron.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { DuplicateRepository } from 'src/repositories/duplicate.repository'; -import { EmailRepository } from 'src/repositories/email.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { IntegrityRepository } from 'src/repositories/integrity.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LibraryRepository } from 'src/repositories/library.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { MapRepository } from 'src/repositories/map.repository'; -import { MediaRepository } from 'src/repositories/media.repository'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { NotificationRepository } from 'src/repositories/notification.repository'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { SearchRepository } from 'src/repositories/search.repository'; -import { SessionRepository } from 'src/repositories/session.repository'; -import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository'; -import { SyncRepository } from 'src/repositories/sync.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { VersionHistoryRepository } from 'src/repositories/version-history.repository'; -import { WorkflowRepository } from 'src/repositories/workflow.repository'; -import { DB } from 'src/schema'; -import { AlbumTable } from 'src/schema/tables/album.table'; -import { AssetExifTable } from 'src/schema/tables/asset-exif.table'; -import { AssetFileTable } from 'src/schema/tables/asset-file.table'; -import { AssetJobStatusTable } from 'src/schema/tables/asset-job-status.table'; -import { AssetMetadataTable } from 'src/schema/tables/asset-metadata.table'; -import { AssetTable } from 'src/schema/tables/asset.table'; -import { FaceSearchTable } from 'src/schema/tables/face-search.table'; -import { MemoryTable } from 'src/schema/tables/memory.table'; -import { PersonTable } from 'src/schema/tables/person.table'; -import { SessionTable } from 'src/schema/tables/session.table'; -import { StackTable } from 'src/schema/tables/stack.table'; -import { TagAssetTable } from 'src/schema/tables/tag-asset.table'; -import { TagTable } from 'src/schema/tables/tag.table'; -import { UserTable } from 'src/schema/tables/user.table'; -import { BASE_SERVICE_DEPENDENCIES, BaseService } from 'src/services/base.service'; -import { MetadataService } from 'src/services/metadata.service'; -import { SyncService } from 'src/services/sync.service'; -import { ClassConstructor, ClassConstructorsToInstances, UploadFile } from 'src/types'; -import { getConfig, updateConfig } from 'src/utils/config'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock'; -import { factory, newDate, newEmbedding, newUuid } from 'test/small.factory'; -import { automock, wait } from 'test/utils'; +} from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ActivityRepository } from 'src/repositories/activity.repository.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { ApiKeyRepository } from 'src/repositories/api-key.repository.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { AssetFileRepository } from 'src/repositories/asset-file.repository.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CronRepository } from 'src/repositories/cron.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { DuplicateRepository } from 'src/repositories/duplicate.repository.js'; +import { EmailRepository } from 'src/repositories/email.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { IntegrityRepository } from 'src/repositories/integrity.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LibraryRepository } from 'src/repositories/library.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { MapRepository } from 'src/repositories/map.repository.js'; +import { MediaRepository } from 'src/repositories/media.repository.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import { NotificationRepository } from 'src/repositories/notification.repository.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { SearchRepository } from 'src/repositories/search.repository.js'; +import { SessionRepository } from 'src/repositories/session.repository.js'; +import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository.js'; +import { SyncRepository } from 'src/repositories/sync.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { VersionHistoryRepository } from 'src/repositories/version-history.repository.js'; +import { WorkflowRepository } from 'src/repositories/workflow.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AlbumTable } from 'src/schema/tables/album.table.js'; +import { AssetExifTable } from 'src/schema/tables/asset-exif.table.js'; +import { AssetFileTable } from 'src/schema/tables/asset-file.table.js'; +import { AssetJobStatusTable } from 'src/schema/tables/asset-job-status.table.js'; +import { AssetMetadataTable } from 'src/schema/tables/asset-metadata.table.js'; +import { AssetTable } from 'src/schema/tables/asset.table.js'; +import { FaceSearchTable } from 'src/schema/tables/face-search.table.js'; +import { MemoryTable } from 'src/schema/tables/memory.table.js'; +import { PersonTable } from 'src/schema/tables/person.table.js'; +import { SessionTable } from 'src/schema/tables/session.table.js'; +import { StackTable } from 'src/schema/tables/stack.table.js'; +import { TagAssetTable } from 'src/schema/tables/tag-asset.table.js'; +import { TagTable } from 'src/schema/tables/tag.table.js'; +import { UserTable } from 'src/schema/tables/user.table.js'; +import { BASE_SERVICE_DEPENDENCIES, BaseService } from 'src/services/base.service.js'; +import { MetadataService } from 'src/services/metadata.service.js'; +import { SyncService } from 'src/services/sync.service.js'; +import type { ClassConstructor, ClassConstructorsToInstances, UploadFile } from 'src/types.js'; +import { getConfig, updateConfig } from 'src/utils/config.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock.js'; +import { factory, newDate, newEmbedding, newUuid } from 'test/small.factory.js'; +import { automock, wait } from 'test/utils.js'; import { Mocked } from 'vitest'; -// eslint-disable-next-line unicorn/prefer-module -export const testAssetsDir = resolve(__dirname, '../../e2e/test-assets'); +export const testAssetsDir = resolve(import.meta.dirname, '../../e2e/test-assets'); type MediumTestOptions = { mock: Array<(typeof BASE_SERVICE_DEPENDENCIES)[number]>; diff --git a/server/test/medium/globalSetup.ts b/server/test/medium/globalSetup.ts index 4f56216b8..3bb153c1d 100644 --- a/server/test/medium/globalSetup.ts +++ b/server/test/medium/globalSetup.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { getKyselyConfig } from 'src/utils/database'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { getKyselyConfig } from 'src/utils/database.js'; import { GenericContainer, Wait } from 'testcontainers'; const globalSetup = async () => { diff --git a/server/test/medium/specs/exif/audio-video.spec.ts b/server/test/medium/specs/exif/audio-video.spec.ts index 2f6af6594..fe6ca72f3 100644 --- a/server/test/medium/specs/exif/audio-video.spec.ts +++ b/server/test/medium/specs/exif/audio-video.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; import { resolve } from 'node:path'; -import { AssetType } from 'src/enum'; -import { DB } from 'src/schema'; -import { withAudioStream, withVideoFormat, withVideoPackets, withVideoStream } from 'src/utils/database'; -import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub'; -import { ExifTestContext, testAssetsDir } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetType } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { withAudioStream, withVideoFormat, withVideoPackets, withVideoStream } from 'src/utils/database.js'; +import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub.js'; +import { ExifTestContext, testAssetsDir } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let database: Kysely; diff --git a/server/test/medium/specs/exif/exif-date-time.spec.ts b/server/test/medium/specs/exif/exif-date-time.spec.ts index 3341800b3..e147c2969 100644 --- a/server/test/medium/specs/exif/exif-date-time.spec.ts +++ b/server/test/medium/specs/exif/exif-date-time.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; import { DateTime } from 'luxon'; import { resolve } from 'node:path'; -import { DB } from 'src/schema'; -import { ExifTestContext, testAssetsDir } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { DB } from 'src/schema/index.js'; +import { ExifTestContext, testAssetsDir } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let database: Kysely; diff --git a/server/test/medium/specs/exif/exif-gps.spec.ts b/server/test/medium/specs/exif/exif-gps.spec.ts index 91326be28..006288c96 100644 --- a/server/test/medium/specs/exif/exif-gps.spec.ts +++ b/server/test/medium/specs/exif/exif-gps.spec.ts @@ -1,8 +1,8 @@ import { Kysely } from 'kysely'; import { resolve } from 'node:path'; -import { DB } from 'src/schema'; -import { ExifTestContext, testAssetsDir } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { DB } from 'src/schema/index.js'; +import { ExifTestContext, testAssetsDir } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let database: Kysely; diff --git a/server/test/medium/specs/exif/exif-tags.spec.ts b/server/test/medium/specs/exif/exif-tags.spec.ts index c65d4b3f7..08edd269e 100644 --- a/server/test/medium/specs/exif/exif-tags.spec.ts +++ b/server/test/medium/specs/exif/exif-tags.spec.ts @@ -1,8 +1,8 @@ import { Kysely } from 'kysely'; import { resolve } from 'node:path'; -import { DB } from 'src/schema'; -import { ExifTestContext, testAssetsDir } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { DB } from 'src/schema/index.js'; +import { ExifTestContext, testAssetsDir } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let database: Kysely; diff --git a/server/test/medium/specs/repositories/asset-edit.repository.spec.ts b/server/test/medium/specs/repositories/asset-edit.repository.spec.ts index 512c6c73f..3feddd5b6 100644 --- a/server/test/medium/specs/repositories/asset-edit.repository.spec.ts +++ b/server/test/medium/specs/repositories/asset-edit.repository.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; -import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { BaseService } from 'src/services/base.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { BaseService } from 'src/services/base.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/repositories/asset-job.repository.spec.ts b/server/test/medium/specs/repositories/asset-job.repository.spec.ts index 7b3695866..33c78ea08 100644 --- a/server/test/medium/specs/repositories/asset-job.repository.spec.ts +++ b/server/test/medium/specs/repositories/asset-job.repository.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; -import { AssetFileType } from 'src/enum'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { BaseService } from 'src/services/base.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetFileType } from 'src/enum.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { BaseService } from 'src/services/base.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; const consume = async (generator: AsyncIterableIterator) => { const values: T[] = await Array.fromAsync(generator); diff --git a/server/test/medium/specs/repositories/asset.repository.spec.ts b/server/test/medium/specs/repositories/asset.repository.spec.ts index 70240a1fd..7a434d78d 100644 --- a/server/test/medium/specs/repositories/asset.repository.spec.ts +++ b/server/test/medium/specs/repositories/asset.repository.spec.ts @@ -1,12 +1,12 @@ import { Kysely } from 'kysely'; -import { AssetOrder, AssetOrderBy, AssetVisibility } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { BaseService } from 'src/services/base.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetOrder, AssetOrderBy, AssetVisibility } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { BaseService } from 'src/services/base.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/repositories/metadata.repository.spec.ts b/server/test/medium/specs/repositories/metadata.repository.spec.ts index 976f33695..7873bcb1b 100644 --- a/server/test/medium/specs/repositories/metadata.repository.spec.ts +++ b/server/test/medium/specs/repositories/metadata.repository.spec.ts @@ -2,13 +2,13 @@ import { Kysely } from 'kysely'; import { mkdtempSync, readFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { DB } from 'src/schema'; -import { BaseService } from 'src/services/base.service'; -import { newMediumService } from 'test/medium.factory'; -import { newDate } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import { DB } from 'src/schema/index.js'; +import { BaseService } from 'src/services/base.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { newDate } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let database: Kysely; diff --git a/server/test/medium/specs/repositories/person.repository.spec.ts b/server/test/medium/specs/repositories/person.repository.spec.ts index 4d1604b60..bf38eb774 100644 --- a/server/test/medium/specs/repositories/person.repository.spec.ts +++ b/server/test/medium/specs/repositories/person.repository.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; -import { AssetFileType } from 'src/enum'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { DB } from 'src/schema'; -import { BaseService } from 'src/services/base.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetFileType } from 'src/enum.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { DB } from 'src/schema/index.js'; +import { BaseService } from 'src/services/base.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/repositories/tag.repository.spec.ts b/server/test/medium/specs/repositories/tag.repository.spec.ts index 3f062b702..1923e7eb3 100644 --- a/server/test/medium/specs/repositories/tag.repository.spec.ts +++ b/server/test/medium/specs/repositories/tag.repository.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { DB } from 'src/schema'; -import { BaseService } from 'src/services/base.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { DB } from 'src/schema/index.js'; +import { BaseService } from 'src/services/base.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/activity.service.spec.ts b/server/test/medium/specs/services/activity.service.spec.ts index c568f05a2..bfd4c255e 100644 --- a/server/test/medium/specs/services/activity.service.spec.ts +++ b/server/test/medium/specs/services/activity.service.spec.ts @@ -1,17 +1,17 @@ import { Kysely } from 'kysely'; -import { ReactionType } from 'src/dtos/activity.dto'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ActivityRepository } from 'src/repositories/activity.repository'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { ActivityService } from 'src/services/activity.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory, newUuid } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { ReactionType } from 'src/dtos/activity.dto.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ActivityRepository } from 'src/repositories/activity.repository.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { ActivityService } from 'src/services/activity.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory, newUuid } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/album.service.spec.ts b/server/test/medium/specs/services/album.service.spec.ts index 9670f4c5c..ca413443b 100644 --- a/server/test/medium/specs/services/album.service.spec.ts +++ b/server/test/medium/specs/services/album.service.spec.ts @@ -1,14 +1,14 @@ import { Kysely } from 'kysely'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { AlbumService } from 'src/services/album.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AlbumService } from 'src/services/album.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/api-key.service.spec.ts b/server/test/medium/specs/services/api-key.service.spec.ts index 32fbf7b9d..21a742e68 100644 --- a/server/test/medium/specs/services/api-key.service.spec.ts +++ b/server/test/medium/specs/services/api-key.service.spec.ts @@ -1,13 +1,13 @@ import { Kysely } from 'kysely'; -import { Permission } from 'src/enum'; -import { ApiKeyRepository } from 'src/repositories/api-key.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { DB } from 'src/schema'; -import { ApiKeyService } from 'src/services/api-key.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { Permission } from 'src/enum.js'; +import { ApiKeyRepository } from 'src/repositories/api-key.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { DB } from 'src/schema/index.js'; +import { ApiKeyService } from 'src/services/api-key.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/asset-media.service.spec.ts b/server/test/medium/specs/services/asset-media.service.spec.ts index 52ec8e12d..5c99f2e29 100644 --- a/server/test/medium/specs/services/asset-media.service.spec.ts +++ b/server/test/medium/specs/services/asset-media.service.spec.ts @@ -1,24 +1,24 @@ import { Kysely } from 'kysely'; import { randomBytes } from 'node:crypto'; -import { AssetMediaStatus } from 'src/dtos/asset-media-response.dto'; -import { AssetMediaSize } from 'src/dtos/asset-media.dto'; -import { AssetFileType, SharedLinkType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { AssetMediaService } from 'src/services/asset-media.service'; -import { AssetService } from 'src/services/asset.service'; -import { ImmichFileResponse } from 'src/utils/file'; -import { mediumFactory, newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetMediaStatus } from 'src/dtos/asset-media-response.dto.js'; +import { AssetMediaSize } from 'src/dtos/asset-media.dto.js'; +import { AssetFileType, SharedLinkType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AssetMediaService } from 'src/services/asset-media.service.js'; +import { AssetService } from 'src/services/asset.service.js'; +import { ImmichFileResponse } from 'src/utils/file.js'; +import { mediumFactory, newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/asset.service.spec.ts b/server/test/medium/specs/services/asset.service.spec.ts index cb6e1d744..6d79d58e0 100644 --- a/server/test/medium/specs/services/asset.service.spec.ts +++ b/server/test/medium/specs/services/asset.service.spec.ts @@ -1,25 +1,25 @@ import { Kysely } from 'kysely'; -import { AssetEditAction } from 'src/dtos/editing.dto'; -import { AssetFileType, AssetMetadataKey, AssetStatus, JobName, SharedLinkType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { AssetService } from 'src/services/asset.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetEditAction } from 'src/dtos/editing.dto.js'; +import { AssetFileType, AssetMetadataKey, AssetStatus, JobName, SharedLinkType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AssetService } from 'src/services/asset.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/audit.database.spec.ts b/server/test/medium/specs/services/audit.database.spec.ts index b4ddf78a4..7e7e09151 100644 --- a/server/test/medium/specs/services/audit.database.spec.ts +++ b/server/test/medium/specs/services/audit.database.spec.ts @@ -1,12 +1,12 @@ -import { AssetEditAction } from 'src/dtos/editing.dto'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { partner_delete_audit, stack_delete_audit } from 'src/schema/functions'; -import { BaseService } from 'src/services/base.service'; -import { MediumTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetEditAction } from 'src/dtos/editing.dto.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { partner_delete_audit, stack_delete_audit } from 'src/schema/functions.js'; +import { BaseService } from 'src/services/base.service.js'; +import { MediumTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; describe('audit', () => { let ctx: MediumTestContext; diff --git a/server/test/medium/specs/services/auth-admin.service.spec.ts b/server/test/medium/specs/services/auth-admin.service.spec.ts index fa2a69f66..1a3e0023a 100644 --- a/server/test/medium/specs/services/auth-admin.service.spec.ts +++ b/server/test/medium/specs/services/auth-admin.service.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { AuthAdminService } from 'src/services/auth-admin.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AuthAdminService } from 'src/services/auth-admin.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/auth.service.spec.ts b/server/test/medium/specs/services/auth.service.spec.ts index af969bae9..5ba081042 100644 --- a/server/test/medium/specs/services/auth.service.spec.ts +++ b/server/test/medium/specs/services/auth.service.spec.ts @@ -1,24 +1,24 @@ import { BadRequestException } from '@nestjs/common'; import { hash } from 'bcrypt'; import { Kysely } from 'kysely'; -import { AuthType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SessionRepository } from 'src/repositories/session.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { AuthService } from 'src/services/auth.service'; -import { mediumFactory, newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AuthType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SessionRepository } from 'src/repositories/session.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { mediumFactory, newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/cluster-group.service.spec.ts b/server/test/medium/specs/services/cluster-group.service.spec.ts index 2192e89e6..4befb9fcb 100644 --- a/server/test/medium/specs/services/cluster-group.service.spec.ts +++ b/server/test/medium/specs/services/cluster-group.service.spec.ts @@ -1,15 +1,15 @@ import { Kysely } from 'kysely'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { ClusterGroupService } from 'src/services/cluster-group.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { ClusterGroupService } from 'src/services/cluster-group.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/duplicate.service.spec.ts b/server/test/medium/specs/services/duplicate.service.spec.ts index 6afae277c..bdb0103e7 100644 --- a/server/test/medium/specs/services/duplicate.service.spec.ts +++ b/server/test/medium/specs/services/duplicate.service.spec.ts @@ -1,22 +1,22 @@ import { Kysely } from 'kysely'; -import { BulkIdErrorReason, BulkIdResponseDto } from 'src/dtos/asset-ids.response.dto'; -import { AssetStatus, AssetVisibility } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { DuplicateRepository } from 'src/repositories/duplicate.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { DB } from 'src/schema'; -import { DuplicateService } from 'src/services/duplicate.service'; -import { clearConfigCache } from 'src/utils/config'; -import { MediumTestContext, newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { BulkIdErrorReason, BulkIdResponseDto } from 'src/dtos/asset-ids.response.dto.js'; +import { AssetStatus, AssetVisibility } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { DuplicateRepository } from 'src/repositories/duplicate.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { DB } from 'src/schema/index.js'; +import { DuplicateService } from 'src/services/duplicate.service.js'; +import { clearConfigCache } from 'src/utils/config.js'; +import { MediumTestContext, newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/integrity.service.spec.ts b/server/test/medium/specs/services/integrity.service.spec.ts index 919b00947..ff4ec7810 100644 --- a/server/test/medium/specs/services/integrity.service.spec.ts +++ b/server/test/medium/specs/services/integrity.service.spec.ts @@ -3,20 +3,20 @@ import { DateTime } from 'luxon'; import { createHash, randomUUID } from 'node:crypto'; import { Readable } from 'node:stream'; import { text } from 'node:stream/consumers'; -import { StorageCore } from 'src/cores/storage.core'; -import { AssetFileType, IntegrityReport, JobName, JobStatus, SystemMetadataKey } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { IntegrityRepository } from 'src/repositories/integrity.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { DB } from 'src/schema'; -import { IntegrityService } from 'src/services/integrity.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB, makeStream } from 'test/utils'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { AssetFileType, IntegrityReport, JobName, JobStatus, SystemMetadataKey } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { IntegrityRepository } from 'src/repositories/integrity.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { DB } from 'src/schema/index.js'; +import { IntegrityService } from 'src/services/integrity.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB, makeStream } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/library.service.spec.ts b/server/test/medium/specs/services/library.service.spec.ts index 4284e47fe..395ffc92e 100644 --- a/server/test/medium/specs/services/library.service.spec.ts +++ b/server/test/medium/specs/services/library.service.spec.ts @@ -3,21 +3,21 @@ import { existsSync } from 'node:fs'; import { copyFile, mkdir, mkdtemp, rm, utimes, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { dirname, join, resolve } from 'node:path'; -import { StorageCore } from 'src/cores/storage.core'; -import { AssetStatus, JobName, JobStatus } from 'src/enum'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LibraryRepository } from 'src/repositories/library.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { DB } from 'src/schema'; -import { LibraryService } from 'src/services/library.service'; -import { MediumTestContext, testAssetsDir } from 'test/medium.factory'; -import { newUuid } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { AssetStatus, JobName, JobStatus } from 'src/enum.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LibraryRepository } from 'src/repositories/library.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { DB } from 'src/schema/index.js'; +import { LibraryService } from 'src/services/library.service.js'; +import { MediumTestContext, testAssetsDir } from 'test/medium.factory.js'; +import { newUuid } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; // `validateImportPath` checks candidate paths against the media location StorageCore.setMediaLocation('/photos'); diff --git a/server/test/medium/specs/services/memory.service.spec.ts b/server/test/medium/specs/services/memory.service.spec.ts index 03670f566..0a406b33a 100644 --- a/server/test/medium/specs/services/memory.service.spec.ts +++ b/server/test/medium/specs/services/memory.service.spec.ts @@ -1,20 +1,20 @@ import { Kysely } from 'kysely'; import { DateTime } from 'luxon'; -import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { AssetFileType, MemoryType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { MemoryService } from 'src/services/memory.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { AssetFileType, MemoryType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { MemoryService } from 'src/services/memory.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/metadata.service.spec.ts b/server/test/medium/specs/services/metadata.service.spec.ts index c3f111e5a..7d26d230a 100644 --- a/server/test/medium/specs/services/metadata.service.spec.ts +++ b/server/test/medium/specs/services/metadata.service.spec.ts @@ -3,19 +3,19 @@ import { Stats } from 'node:fs'; import { writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { DB } from 'src/schema'; -import { MetadataService } from 'src/services/metadata.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB, newRandomImage } from 'test/utils'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { DB } from 'src/schema/index.js'; +import { MetadataService } from 'src/services/metadata.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB, newRandomImage } from 'test/utils.js'; type TimeZoneTest = { description: string; diff --git a/server/test/medium/specs/services/ocr.service.spec.ts b/server/test/medium/specs/services/ocr.service.spec.ts index efcc7aa13..6254d8760 100644 --- a/server/test/medium/specs/services/ocr.service.spec.ts +++ b/server/test/medium/specs/services/ocr.service.spec.ts @@ -1,17 +1,17 @@ import { Kysely } from 'kysely'; -import { AssetFileType, JobStatus } from 'src/enum'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { DB } from 'src/schema'; -import { OcrService } from 'src/services/ocr.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetFileType, JobStatus } from 'src/enum.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { DB } from 'src/schema/index.js'; +import { OcrService } from 'src/services/ocr.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/partner.service.spec.ts b/server/test/medium/specs/services/partner.service.spec.ts index addbd2bdb..581065a81 100644 --- a/server/test/medium/specs/services/partner.service.spec.ts +++ b/server/test/medium/specs/services/partner.service.spec.ts @@ -1,13 +1,13 @@ import { Kysely } from 'kysely'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PartnerDirection, PartnerRepository } from 'src/repositories/partner.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { PartnerService } from 'src/services/partner.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory, newUuid } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PartnerDirection, PartnerRepository } from 'src/repositories/partner.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { PartnerService } from 'src/services/partner.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory, newUuid } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/person.service.spec.ts b/server/test/medium/specs/services/person.service.spec.ts index 377d8c5ec..1fc795e93 100644 --- a/server/test/medium/specs/services/person.service.spec.ts +++ b/server/test/medium/specs/services/person.service.spec.ts @@ -1,25 +1,25 @@ import { Kysely } from 'kysely'; import { DateTime } from 'luxon'; -import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto'; -import { AssetFaceCreateDto } from 'src/dtos/person.dto'; -import { AssetFileType, JobName } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { DB } from 'src/schema'; -import { PersonService } from 'src/services/person.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto.js'; +import { AssetFaceCreateDto } from 'src/dtos/person.dto.js'; +import { AssetFileType, JobName } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { DB } from 'src/schema/index.js'; +import { PersonService } from 'src/services/person.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/plugin.service.spec.ts b/server/test/medium/specs/services/plugin.service.spec.ts index de4882a57..66e6974d2 100644 --- a/server/test/medium/specs/services/plugin.service.spec.ts +++ b/server/test/medium/specs/services/plugin.service.spec.ts @@ -1,12 +1,12 @@ import { Kysely } from 'kysely'; -import { WorkflowType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { DB } from 'src/schema'; -import { PluginService } from 'src/services/plugin.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { WorkflowType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { DB } from 'src/schema/index.js'; +import { PluginService } from 'src/services/plugin.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/search.service.spec.ts b/server/test/medium/specs/services/search.service.spec.ts index edc8910c7..6ba0d9903 100644 --- a/server/test/medium/specs/services/search.service.spec.ts +++ b/server/test/medium/specs/services/search.service.spec.ts @@ -1,18 +1,18 @@ import { Kysely } from 'kysely'; -import { SearchSuggestionType } from 'src/dtos/search.dto'; -import { AlbumUserRole, AssetOrder, AssetVisibility, SearchOrderField } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { SearchRepository } from 'src/repositories/search.repository'; -import { DB } from 'src/schema'; -import { SearchService } from 'src/services/search.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SearchSuggestionType } from 'src/dtos/search.dto.js'; +import { AlbumUserRole, AssetOrder, AssetVisibility, SearchOrderField } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { SearchRepository } from 'src/repositories/search.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SearchService } from 'src/services/search.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/shared-link.service.spec.ts b/server/test/medium/specs/services/shared-link.service.spec.ts index 347e2e950..165d3b2a9 100644 --- a/server/test/medium/specs/services/shared-link.service.spec.ts +++ b/server/test/medium/specs/services/shared-link.service.spec.ts @@ -1,17 +1,17 @@ import { Kysely } from 'kysely'; import { randomBytes } from 'node:crypto'; -import { SharedLinkType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { DB } from 'src/schema'; -import { SharedLinkService } from 'src/services/shared-link.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SharedLinkType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SharedLinkService } from 'src/services/shared-link.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/stack.service.spec.ts b/server/test/medium/specs/services/stack.service.spec.ts index 68c06465b..ba0b64c11 100644 --- a/server/test/medium/specs/services/stack.service.spec.ts +++ b/server/test/medium/specs/services/stack.service.spec.ts @@ -1,14 +1,14 @@ import { Kysely } from 'kysely'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { DB } from 'src/schema'; -import { StackService } from 'src/services/stack.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { DB } from 'src/schema/index.js'; +import { StackService } from 'src/services/stack.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/storage.service.spec.ts b/server/test/medium/specs/services/storage.service.spec.ts index 6c3fc487d..d7c78a9d0 100644 --- a/server/test/medium/specs/services/storage.service.spec.ts +++ b/server/test/medium/specs/services/storage.service.spec.ts @@ -1,15 +1,15 @@ import { Kysely } from 'kysely'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { DB } from 'src/schema'; -import { StorageService } from 'src/services/storage.service'; -import { newMediumService } from 'test/medium.factory'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { getKyselyDB } from 'test/utils'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { DB } from 'src/schema/index.js'; +import { StorageService } from 'src/services/storage.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/sync.service.spec.ts b/server/test/medium/specs/services/sync.service.spec.ts index c040d584b..6c4f753ea 100644 --- a/server/test/medium/specs/services/sync.service.spec.ts +++ b/server/test/medium/specs/services/sync.service.spec.ts @@ -1,14 +1,14 @@ import { schemaFromCode } from '@immich/sql-tools'; import { Kysely } from 'kysely'; import { DateTime } from 'luxon'; -import { AssetMetadataKey, UserMetadataKey } from 'src/enum'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { BaseSync, SyncRepository } from 'src/repositories/sync.repository'; -import { DB } from 'src/schema'; -import { SyncService } from 'src/services/sync.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetMetadataKey, UserMetadataKey } from 'src/enum.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { BaseSync, SyncRepository } from 'src/repositories/sync.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncService } from 'src/services/sync.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; import { v4 } from 'uuid'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/tag.service.spec.ts b/server/test/medium/specs/services/tag.service.spec.ts index 3ade80f4f..731664add 100644 --- a/server/test/medium/specs/services/tag.service.spec.ts +++ b/server/test/medium/specs/services/tag.service.spec.ts @@ -1,17 +1,17 @@ import { Kysely } from 'kysely'; -import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto'; -import { JobStatus } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { DB } from 'src/schema'; -import { TagService } from 'src/services/tag.service'; -import { upsertTags } from 'src/utils/tag'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { BulkIdErrorReason } from 'src/dtos/asset-ids.response.dto.js'; +import { JobStatus } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { DB } from 'src/schema/index.js'; +import { TagService } from 'src/services/tag.service.js'; +import { upsertTags } from 'src/utils/tag.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/timeline.service.spec.ts b/server/test/medium/specs/services/timeline.service.spec.ts index 032305c26..b6884a2a5 100644 --- a/server/test/medium/specs/services/timeline.service.spec.ts +++ b/server/test/medium/specs/services/timeline.service.spec.ts @@ -1,16 +1,16 @@ import { BadRequestException } from '@nestjs/common'; import { Kysely } from 'kysely'; -import { AssetVisibility, SharedLinkType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { DB } from 'src/schema'; -import { TimelineService } from 'src/services/timeline.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetVisibility, SharedLinkType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { DB } from 'src/schema/index.js'; +import { TimelineService } from 'src/services/timeline.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/user.service.spec.ts b/server/test/medium/specs/services/user.service.spec.ts index 311a5cb84..09b326833 100644 --- a/server/test/medium/specs/services/user.service.spec.ts +++ b/server/test/medium/specs/services/user.service.spec.ts @@ -1,20 +1,20 @@ import { Kysely } from 'kysely'; import { DateTime } from 'luxon'; -import { ImmichEnvironment, JobName, JobStatus, UserAvatarColor } from 'src/enum'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { UserService } from 'src/services/user.service'; -import { HumanReadableSize } from 'src/utils/bytes'; -import { mediumFactory, newMediumService } from 'test/medium.factory'; -import { factory, newUuid } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { ImmichEnvironment, JobName, JobStatus, UserAvatarColor } from 'src/enum.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { UserService } from 'src/services/user.service.js'; +import { HumanReadableSize } from 'src/utils/bytes.js'; +import { mediumFactory, newMediumService } from 'test/medium.factory.js'; +import { factory, newUuid } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; const userLicense = { licenseKey: 'IMCL-FF69-TUK1-RWZU-V9Q8-QGQS-S5GC-X4R2-UFK4', diff --git a/server/test/medium/specs/services/version.service.spec.ts b/server/test/medium/specs/services/version.service.spec.ts index 5492f9f75..19956d7bb 100644 --- a/server/test/medium/specs/services/version.service.spec.ts +++ b/server/test/medium/specs/services/version.service.spec.ts @@ -1,15 +1,15 @@ import { Kysely } from 'kysely'; -import { serverVersion } from 'src/constants'; -import { JobName } from 'src/enum'; -import { CronRepository } from 'src/repositories/cron.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { VersionHistoryRepository } from 'src/repositories/version-history.repository'; -import { DB } from 'src/schema'; -import { VersionService } from 'src/services/version.service'; -import { newMediumService } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { serverVersion } from 'src/constants.js'; +import { JobName } from 'src/enum.js'; +import { CronRepository } from 'src/repositories/cron.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { VersionHistoryRepository } from 'src/repositories/version-history.repository.js'; +import { DB } from 'src/schema/index.js'; +import { VersionService } from 'src/services/version.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/services/workflow.service.spec.ts b/server/test/medium/specs/services/workflow.service.spec.ts index b4b52be98..7793f55f1 100644 --- a/server/test/medium/specs/services/workflow.service.spec.ts +++ b/server/test/medium/specs/services/workflow.service.spec.ts @@ -1,15 +1,15 @@ import { WorkflowTrigger } from '@immich/plugin-sdk'; import { Kysely } from 'kysely'; -import { WorkflowType } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { WorkflowRepository } from 'src/repositories/workflow.repository'; -import { DB } from 'src/schema'; -import { WorkflowService } from 'src/services/workflow.service'; -import { newMediumService } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { WorkflowType } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { WorkflowRepository } from 'src/repositories/workflow.repository.js'; +import { DB } from 'src/schema/index.js'; +import { WorkflowService } from 'src/services/workflow.service.js'; +import { newMediumService } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-album-asset-exif.spec.ts b/server/test/medium/specs/sync/sync-album-asset-exif.spec.ts index 8e1529edb..9961588ef 100644 --- a/server/test/medium/specs/sync/sync-album-asset-exif.spec.ts +++ b/server/test/medium/specs/sync/sync-album-asset-exif.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; -import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DB } from 'src/schema'; -import { updateLockedColumns } from 'src/utils/database'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DB } from 'src/schema/index.js'; +import { updateLockedColumns } from 'src/utils/database.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-album-asset.spec.ts b/server/test/medium/specs/sync/sync-album-asset.spec.ts index ac2833d1a..782b16818 100644 --- a/server/test/medium/specs/sync/sync-album-asset.spec.ts +++ b/server/test/medium/specs/sync/sync-album-asset.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-album-to-asset.spec.ts b/server/test/medium/specs/sync/sync-album-to-asset.spec.ts index 0fd58c527..dc3e9250b 100644 --- a/server/test/medium/specs/sync/sync-album-to-asset.spec.ts +++ b/server/test/medium/specs/sync/sync-album-to-asset.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-album-user.spec.ts b/server/test/medium/specs/sync/sync-album-user.spec.ts index acd693f9f..b5c9948ad 100644 --- a/server/test/medium/specs/sync/sync-album-user.spec.ts +++ b/server/test/medium/specs/sync/sync-album-user.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-album.spec.ts b/server/test/medium/specs/sync/sync-album.spec.ts index 8fff7691b..12ecc0854 100644 --- a/server/test/medium/specs/sync/sync-album.spec.ts +++ b/server/test/medium/specs/sync/sync-album.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AlbumUserRole, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-asset-edit.spec.ts b/server/test/medium/specs/sync/sync-asset-edit.spec.ts index 43b2450b4..f916ab809 100644 --- a/server/test/medium/specs/sync/sync-asset-edit.spec.ts +++ b/server/test/medium/specs/sync/sync-asset-edit.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; -import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetEditAction, MirrorAxis } from 'src/dtos/editing.dto.js'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-asset-exif.spec.ts b/server/test/medium/specs/sync/sync-asset-exif.spec.ts index 9aae961b0..0cb1ccefa 100644 --- a/server/test/medium/specs/sync/sync-asset-exif.spec.ts +++ b/server/test/medium/specs/sync/sync-asset-exif.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-asset-face.spec.ts b/server/test/medium/specs/sync/sync-asset-face.spec.ts index 6e8e4d703..de43d9af9 100644 --- a/server/test/medium/specs/sync/sync-asset-face.spec.ts +++ b/server/test/medium/specs/sync/sync-asset-face.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-asset-metadata.spec.ts b/server/test/medium/specs/sync/sync-asset-metadata.spec.ts index 8ba963052..2526068ef 100644 --- a/server/test/medium/specs/sync/sync-asset-metadata.spec.ts +++ b/server/test/medium/specs/sync/sync-asset-metadata.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { AssetMetadataKey, SyncEntityType, SyncRequestType } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { AssetMetadataKey, SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-asset-ocr.spec.ts b/server/test/medium/specs/sync/sync-asset-ocr.spec.ts index 7d43bc6eb..e004c5d54 100644 --- a/server/test/medium/specs/sync/sync-asset-ocr.spec.ts +++ b/server/test/medium/specs/sync/sync-asset-ocr.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-asset.spec.ts b/server/test/medium/specs/sync/sync-asset.spec.ts index 8a81b34b2..4ded43372 100644 --- a/server/test/medium/specs/sync/sync-asset.spec.ts +++ b/server/test/medium/specs/sync/sync-asset.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-auth-user.spec.ts b/server/test/medium/specs/sync/sync-auth-user.spec.ts index 43411129d..255255eda 100644 --- a/server/test/medium/specs/sync/sync-auth-user.spec.ts +++ b/server/test/medium/specs/sync/sync-auth-user.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-complete.spec.ts b/server/test/medium/specs/sync/sync-complete.spec.ts index 95beb7b29..53dbb78ea 100644 --- a/server/test/medium/specs/sync/sync-complete.spec.ts +++ b/server/test/medium/specs/sync/sync-complete.spec.ts @@ -1,11 +1,11 @@ import { Kysely } from 'kysely'; import { DateTime } from 'luxon'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository'; -import { DB } from 'src/schema'; -import { toAck } from 'src/utils/sync'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository.js'; +import { DB } from 'src/schema/index.js'; +import { toAck } from 'src/utils/sync.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; import { v7 } from 'uuid'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-memory-asset.spec.ts b/server/test/medium/specs/sync/sync-memory-asset.spec.ts index f0cae0934..9397a291f 100644 --- a/server/test/medium/specs/sync/sync-memory-asset.spec.ts +++ b/server/test/medium/specs/sync/sync-memory-asset.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-memory.spec.ts b/server/test/medium/specs/sync/sync-memory.spec.ts index 1889f3962..d872d7f03 100644 --- a/server/test/medium/specs/sync/sync-memory.spec.ts +++ b/server/test/medium/specs/sync/sync-memory.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-partner-asset-exif.spec.ts b/server/test/medium/specs/sync/sync-partner-asset-exif.spec.ts index d533afadf..b8fdf4c20 100644 --- a/server/test/medium/specs/sync/sync-partner-asset-exif.spec.ts +++ b/server/test/medium/specs/sync/sync-partner-asset-exif.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-partner-asset.spec.ts b/server/test/medium/specs/sync/sync-partner-asset.spec.ts index f2c0de74e..0f01d99de 100644 --- a/server/test/medium/specs/sync/sync-partner-asset.spec.ts +++ b/server/test/medium/specs/sync/sync-partner-asset.spec.ts @@ -1,12 +1,12 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-partner-stack.spec.ts b/server/test/medium/specs/sync/sync-partner-stack.spec.ts index e1d841679..fc2ebef87 100644 --- a/server/test/medium/specs/sync/sync-partner-stack.spec.ts +++ b/server/test/medium/specs/sync/sync-partner-stack.spec.ts @@ -1,12 +1,12 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB, wait } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB, wait } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-partner.spec.ts b/server/test/medium/specs/sync/sync-partner.spec.ts index 19c386070..1badfb1f9 100644 --- a/server/test/medium/specs/sync/sync-partner.spec.ts +++ b/server/test/medium/specs/sync/sync-partner.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-person.spec.ts b/server/test/medium/specs/sync/sync-person.spec.ts index bb752344a..5a05f9e63 100644 --- a/server/test/medium/specs/sync/sync-person.spec.ts +++ b/server/test/medium/specs/sync/sync-person.spec.ts @@ -1,10 +1,10 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { factory } from 'test/small.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { factory } from 'test/small.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-reset.spec.ts b/server/test/medium/specs/sync/sync-reset.spec.ts index b99d8d7df..2df424145 100644 --- a/server/test/medium/specs/sync/sync-reset.spec.ts +++ b/server/test/medium/specs/sync/sync-reset.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { SessionRepository } from 'src/repositories/session.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { SessionRepository } from 'src/repositories/session.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-stack.spec.ts b/server/test/medium/specs/sync/sync-stack.spec.ts index d3304ded2..f4895ad9f 100644 --- a/server/test/medium/specs/sync/sync-stack.spec.ts +++ b/server/test/medium/specs/sync/sync-stack.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-types.spec.ts b/server/test/medium/specs/sync/sync-types.spec.ts index 24eadf70c..06a2e749e 100644 --- a/server/test/medium/specs/sync/sync-types.spec.ts +++ b/server/test/medium/specs/sync/sync-types.spec.ts @@ -1,5 +1,5 @@ -import { SyncRequestType } from 'src/enum'; -import { SYNC_TYPES_ORDER } from 'src/services/sync.service'; +import { SyncRequestType } from 'src/enum.js'; +import { SYNC_TYPES_ORDER } from 'src/services/sync.service.js'; describe('types', () => { it('should have all the types in the ordering variable', () => { diff --git a/server/test/medium/specs/sync/sync-user-metadata.spec.ts b/server/test/medium/specs/sync/sync-user-metadata.spec.ts index 1e75f8019..806f418bc 100644 --- a/server/test/medium/specs/sync/sync-user-metadata.spec.ts +++ b/server/test/medium/specs/sync/sync-user-metadata.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType, UserMetadataKey } from 'src/enum'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType, UserMetadataKey } from 'src/enum.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/sync/sync-user.spec.ts b/server/test/medium/specs/sync/sync-user.spec.ts index 7a69e7a41..65e41501c 100644 --- a/server/test/medium/specs/sync/sync-user.spec.ts +++ b/server/test/medium/specs/sync/sync-user.spec.ts @@ -1,9 +1,9 @@ import { Kysely } from 'kysely'; -import { SyncEntityType, SyncRequestType } from 'src/enum'; -import { UserRepository } from 'src/repositories/user.repository'; -import { DB } from 'src/schema'; -import { SyncTestContext } from 'test/medium.factory'; -import { getKyselyDB } from 'test/utils'; +import { SyncEntityType, SyncRequestType } from 'src/enum.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { DB } from 'src/schema/index.js'; +import { SyncTestContext } from 'test/medium.factory.js'; +import { getKyselyDB } from 'test/utils.js'; let defaultDatabase: Kysely; diff --git a/server/test/medium/specs/workflow/workflow-core-plugin.spec.ts b/server/test/medium/specs/workflow/workflow-core-plugin.spec.ts index dfb4868c0..0d4492eba 100644 --- a/server/test/medium/specs/workflow/workflow-core-plugin.spec.ts +++ b/server/test/medium/specs/workflow/workflow-core-plugin.spec.ts @@ -1,26 +1,26 @@ import { WorkflowStepConfig, WorkflowTrigger } from '@immich/plugin-sdk'; import { Kysely } from 'kysely'; import { readFileSync } from 'node:fs'; -import { PluginManifestDto } from 'src/dtos/plugin-manifest.dto'; -import { AssetType, AssetVisibility, LogLevel } from 'src/enum'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { WorkflowRepository } from 'src/repositories/workflow.repository'; -import { DB } from 'src/schema'; -import { WorkflowExecutionService } from 'src/services/workflow-execution.service'; -import { resolveMethod } from 'src/utils/workflow'; -import { MediumTestContext } from 'test/medium.factory'; -import { mockEnvData } from 'test/repositories/config.repository.mock'; -import { getKyselyDB } from 'test/utils'; +import { PluginManifestDto } from 'src/dtos/plugin-manifest.dto.js'; +import { AssetType, AssetVisibility, LogLevel } from 'src/enum.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { WorkflowRepository } from 'src/repositories/workflow.repository.js'; +import { DB } from 'src/schema/index.js'; +import { WorkflowExecutionService } from 'src/services/workflow-execution.service.js'; +import { resolveMethod } from 'src/utils/workflow.js'; +import { MediumTestContext } from 'test/medium.factory.js'; +import { mockEnvData } from 'test/repositories/config.repository.mock.js'; +import { getKyselyDB } from 'test/utils.js'; let isInitialized = false; diff --git a/server/test/repositories/access.repository.mock.ts b/server/test/repositories/access.repository.mock.ts index 90b9f64e0..59b9db2c8 100644 --- a/server/test/repositories/access.repository.mock.ts +++ b/server/test/repositories/access.repository.mock.ts @@ -1,5 +1,5 @@ -import { AccessRepository } from 'src/repositories/access.repository'; -import { RepositoryInterface } from 'src/types'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; type IAccessRepository = { [K in keyof AccessRepository]: RepositoryInterface }; diff --git a/server/test/repositories/asset.repository.mock.ts b/server/test/repositories/asset.repository.mock.ts index a56f7cea1..8d65728e2 100644 --- a/server/test/repositories/asset.repository.mock.ts +++ b/server/test/repositories/asset.repository.mock.ts @@ -1,5 +1,5 @@ -import { AssetRepository } from 'src/repositories/asset.repository'; -import { RepositoryInterface } from 'src/types'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; export const newAssetRepositoryMock = (): Mocked> => { diff --git a/server/test/repositories/config.repository.mock.ts b/server/test/repositories/config.repository.mock.ts index 76a4fe5ce..580c7a227 100644 --- a/server/test/repositories/config.repository.mock.ts +++ b/server/test/repositories/config.repository.mock.ts @@ -1,6 +1,6 @@ -import { DatabaseExtension, ImmichEnvironment, ImmichWorker, LogFormat } from 'src/enum'; -import { ConfigRepository, EnvData } from 'src/repositories/config.repository'; -import { RepositoryInterface } from 'src/types'; +import { DatabaseExtension, ImmichEnvironment, ImmichWorker, LogFormat } from 'src/enum.js'; +import { ConfigRepository, EnvData } from 'src/repositories/config.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; export const envData: EnvData = { diff --git a/server/test/repositories/crypto.repository.mock.ts b/server/test/repositories/crypto.repository.mock.ts index fb2b933d9..530320bcd 100644 --- a/server/test/repositories/crypto.repository.mock.ts +++ b/server/test/repositories/crypto.repository.mock.ts @@ -1,5 +1,5 @@ -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { RepositoryInterface } from 'src/types'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; export const newCryptoRepositoryMock = (): Mocked> => { diff --git a/server/test/repositories/job.repository.mock.ts b/server/test/repositories/job.repository.mock.ts index e9fb895b0..92208b2a9 100644 --- a/server/test/repositories/job.repository.mock.ts +++ b/server/test/repositories/job.repository.mock.ts @@ -1,5 +1,5 @@ -import { JobRepository } from 'src/repositories/job.repository'; -import { RepositoryInterface } from 'src/types'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; export const newJobRepositoryMock = (): Mocked> => { diff --git a/server/test/repositories/media.repository.mock.ts b/server/test/repositories/media.repository.mock.ts index a1fc55cc3..de62e7bf7 100644 --- a/server/test/repositories/media.repository.mock.ts +++ b/server/test/repositories/media.repository.mock.ts @@ -1,5 +1,5 @@ -import { MediaRepository } from 'src/repositories/media.repository'; -import { RepositoryInterface } from 'src/types'; +import { MediaRepository } from 'src/repositories/media.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; export const newMediaRepositoryMock = (): Mocked> => { diff --git a/server/test/repositories/metadata.repository.mock.ts b/server/test/repositories/metadata.repository.mock.ts index 854f13b84..02c23885c 100644 --- a/server/test/repositories/metadata.repository.mock.ts +++ b/server/test/repositories/metadata.repository.mock.ts @@ -1,5 +1,5 @@ -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { RepositoryInterface } from 'src/types'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; export const newMetadataRepositoryMock = (): Mocked> => { diff --git a/server/test/repositories/storage.repository.mock.ts b/server/test/repositories/storage.repository.mock.ts index f810793ce..657cb276f 100644 --- a/server/test/repositories/storage.repository.mock.ts +++ b/server/test/repositories/storage.repository.mock.ts @@ -1,7 +1,7 @@ import { ChokidarOptions } from 'chokidar'; -import { StorageCore } from 'src/cores/storage.core'; -import { StorageRepository, WatchEvents } from 'src/repositories/storage.repository'; -import { RepositoryInterface } from 'src/types'; +import { StorageCore } from 'src/cores/storage.core.js'; +import { StorageRepository, WatchEvents } from 'src/repositories/storage.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; interface MockWatcherOptions { diff --git a/server/test/repositories/system-metadata.repository.mock.ts b/server/test/repositories/system-metadata.repository.mock.ts index ab9e30057..36ea6d18b 100644 --- a/server/test/repositories/system-metadata.repository.mock.ts +++ b/server/test/repositories/system-metadata.repository.mock.ts @@ -1,6 +1,6 @@ -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { RepositoryInterface } from 'src/types'; -import { clearConfigCache } from 'src/utils/config'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; +import { clearConfigCache } from 'src/utils/config.js'; import { Mocked, vitest } from 'vitest'; export const newSystemMetadataRepositoryMock = (): Mocked> => { diff --git a/server/test/repositories/telemetry.repository.mock.ts b/server/test/repositories/telemetry.repository.mock.ts index c7442052d..94753b1fc 100644 --- a/server/test/repositories/telemetry.repository.mock.ts +++ b/server/test/repositories/telemetry.repository.mock.ts @@ -1,5 +1,5 @@ -import { TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { RepositoryInterface } from 'src/types'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import type { RepositoryInterface } from 'src/types.js'; import { Mocked, vitest } from 'vitest'; const newMetricGroupMock = () => { diff --git a/server/test/small.factory.ts b/server/test/small.factory.ts index 14f74d1a2..2f3b7a5de 100644 --- a/server/test/small.factory.ts +++ b/server/test/small.factory.ts @@ -1,7 +1,7 @@ -import { AuthApiKey, AuthSharedLink, AuthUser, Library, UserAdmin } from 'src/database'; -import { AuthDto } from 'src/dtos/auth.dto'; -import { QueueStatisticsDto } from 'src/dtos/queue.dto'; -import { Permission, UserStatus } from 'src/enum'; +import { AuthApiKey, AuthSharedLink, AuthUser, Library, UserAdmin } from 'src/database.js'; +import { AuthDto } from 'src/dtos/auth.dto.js'; +import { QueueStatisticsDto } from 'src/dtos/queue.dto.js'; +import { Permission, UserStatus } from 'src/enum.js'; import { v4, v7 } from 'uuid'; import { expect } from 'vitest'; diff --git a/server/test/utils.ts b/server/test/utils.ts index e273d72a3..bc59f682d 100644 --- a/server/test/utils.ts +++ b/server/test/utils.ts @@ -12,82 +12,82 @@ import { ZodSerializerInterceptor, ZodValidationPipe } from 'nestjs-zod'; import { ChildProcessWithoutNullStreams } from 'node:child_process'; import { Duplex, Readable, Writable } from 'node:stream'; import { PNG } from 'pngjs'; -import { UploadFieldName } from 'src/dtos/asset-media.dto'; -import { AssetUploadInterceptor } from 'src/middleware/asset-upload.interceptor'; -import { AuthGuard } from 'src/middleware/auth.guard'; -import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor'; -import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter'; -import { AccessRepository } from 'src/repositories/access.repository'; -import { ActivityRepository } from 'src/repositories/activity.repository'; -import { AlbumUserRepository } from 'src/repositories/album-user.repository'; -import { AlbumRepository } from 'src/repositories/album.repository'; -import { ApiKeyRepository } from 'src/repositories/api-key.repository'; -import { AppRepository } from 'src/repositories/app.repository'; -import { AssetEditRepository } from 'src/repositories/asset-edit.repository'; -import { AssetFileRepository } from 'src/repositories/asset-file.repository'; -import { AssetJobRepository } from 'src/repositories/asset-job.repository'; -import { AssetRepository } from 'src/repositories/asset.repository'; -import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository'; -import { ConfigRepository } from 'src/repositories/config.repository'; -import { CronRepository } from 'src/repositories/cron.repository'; -import { CryptoRepository } from 'src/repositories/crypto.repository'; -import { DatabaseRepository } from 'src/repositories/database.repository'; -import { DownloadRepository } from 'src/repositories/download.repository'; -import { DuplicateRepository } from 'src/repositories/duplicate.repository'; -import { EmailRepository } from 'src/repositories/email.repository'; -import { EventRepository } from 'src/repositories/event.repository'; -import { IntegrityRepository } from 'src/repositories/integrity.repository'; -import { JobRepository } from 'src/repositories/job.repository'; -import { LibraryRepository } from 'src/repositories/library.repository'; -import { LoggingRepository } from 'src/repositories/logging.repository'; -import { MachineLearningRepository } from 'src/repositories/machine-learning.repository'; -import { MapRepository } from 'src/repositories/map.repository'; -import { MediaRepository } from 'src/repositories/media.repository'; -import { MemoryRepository } from 'src/repositories/memory.repository'; -import { MetadataRepository } from 'src/repositories/metadata.repository'; -import { MoveRepository } from 'src/repositories/move.repository'; -import { NotificationRepository } from 'src/repositories/notification.repository'; -import { OAuthRepository } from 'src/repositories/oauth.repository'; -import { OcrRepository } from 'src/repositories/ocr.repository'; -import { PartnerRepository } from 'src/repositories/partner.repository'; -import { PersonRepository } from 'src/repositories/person.repository'; -import { PluginRepository } from 'src/repositories/plugin.repository'; -import { ProcessRepository } from 'src/repositories/process.repository'; -import { SearchRepository } from 'src/repositories/search.repository'; -import { ServerInfoRepository } from 'src/repositories/server-info.repository'; -import { SessionRepository } from 'src/repositories/session.repository'; -import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository'; -import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; -import { StackRepository } from 'src/repositories/stack.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; -import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository'; -import { SyncRepository } from 'src/repositories/sync.repository'; -import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; -import { TagRepository } from 'src/repositories/tag.repository'; -import { TelemetryRepository } from 'src/repositories/telemetry.repository'; -import { TrashRepository } from 'src/repositories/trash.repository'; -import { UserRepository } from 'src/repositories/user.repository'; -import { VersionHistoryRepository } from 'src/repositories/version-history.repository'; -import { VideoStreamRepository } from 'src/repositories/video-stream.repository'; -import { ViewRepository } from 'src/repositories/view-repository'; -import { WebsocketRepository } from 'src/repositories/websocket.repository'; -import { WorkflowRepository } from 'src/repositories/workflow.repository'; -import { DB } from 'src/schema'; -import { AuthService } from 'src/services/auth.service'; -import { BaseService } from 'src/services/base.service'; -import { RepositoryInterface } from 'src/types'; -import { getKyselyConfig } from 'src/utils/database'; -import { ClusterGroupFactory } from 'test/factories/cluster-group.factory'; -import { IAccessRepositoryMock, newAccessRepositoryMock } from 'test/repositories/access.repository.mock'; -import { newAssetRepositoryMock } from 'test/repositories/asset.repository.mock'; -import { newConfigRepositoryMock } from 'test/repositories/config.repository.mock'; -import { newCryptoRepositoryMock } from 'test/repositories/crypto.repository.mock'; -import { newJobRepositoryMock } from 'test/repositories/job.repository.mock'; -import { newMediaRepositoryMock } from 'test/repositories/media.repository.mock'; -import { newMetadataRepositoryMock } from 'test/repositories/metadata.repository.mock'; -import { newStorageRepositoryMock } from 'test/repositories/storage.repository.mock'; -import { newSystemMetadataRepositoryMock } from 'test/repositories/system-metadata.repository.mock'; -import { ITelemetryRepositoryMock, newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock'; +import { UploadFieldName } from 'src/dtos/asset-media.dto.js'; +import { AssetUploadInterceptor } from 'src/middleware/asset-upload.interceptor.js'; +import { AuthGuard } from 'src/middleware/auth.guard.js'; +import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor.js'; +import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter.js'; +import { AccessRepository } from 'src/repositories/access.repository.js'; +import { ActivityRepository } from 'src/repositories/activity.repository.js'; +import { AlbumUserRepository } from 'src/repositories/album-user.repository.js'; +import { AlbumRepository } from 'src/repositories/album.repository.js'; +import { ApiKeyRepository } from 'src/repositories/api-key.repository.js'; +import { AppRepository } from 'src/repositories/app.repository.js'; +import { AssetEditRepository } from 'src/repositories/asset-edit.repository.js'; +import { AssetFileRepository } from 'src/repositories/asset-file.repository.js'; +import { AssetJobRepository } from 'src/repositories/asset-job.repository.js'; +import { AssetRepository } from 'src/repositories/asset.repository.js'; +import { ClusterGroupRepository } from 'src/repositories/cluster-group.repository.js'; +import { ConfigRepository } from 'src/repositories/config.repository.js'; +import { CronRepository } from 'src/repositories/cron.repository.js'; +import { CryptoRepository } from 'src/repositories/crypto.repository.js'; +import { DatabaseRepository } from 'src/repositories/database.repository.js'; +import { DownloadRepository } from 'src/repositories/download.repository.js'; +import { DuplicateRepository } from 'src/repositories/duplicate.repository.js'; +import { EmailRepository } from 'src/repositories/email.repository.js'; +import { EventRepository } from 'src/repositories/event.repository.js'; +import { IntegrityRepository } from 'src/repositories/integrity.repository.js'; +import { JobRepository } from 'src/repositories/job.repository.js'; +import { LibraryRepository } from 'src/repositories/library.repository.js'; +import { LoggingRepository } from 'src/repositories/logging.repository.js'; +import { MachineLearningRepository } from 'src/repositories/machine-learning.repository.js'; +import { MapRepository } from 'src/repositories/map.repository.js'; +import { MediaRepository } from 'src/repositories/media.repository.js'; +import { MemoryRepository } from 'src/repositories/memory.repository.js'; +import { MetadataRepository } from 'src/repositories/metadata.repository.js'; +import { MoveRepository } from 'src/repositories/move.repository.js'; +import { NotificationRepository } from 'src/repositories/notification.repository.js'; +import { OAuthRepository } from 'src/repositories/oauth.repository.js'; +import { OcrRepository } from 'src/repositories/ocr.repository.js'; +import { PartnerRepository } from 'src/repositories/partner.repository.js'; +import { PersonRepository } from 'src/repositories/person.repository.js'; +import { PluginRepository } from 'src/repositories/plugin.repository.js'; +import { ProcessRepository } from 'src/repositories/process.repository.js'; +import { SearchRepository } from 'src/repositories/search.repository.js'; +import { ServerInfoRepository } from 'src/repositories/server-info.repository.js'; +import { SessionRepository } from 'src/repositories/session.repository.js'; +import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository.js'; +import { SharedLinkRepository } from 'src/repositories/shared-link.repository.js'; +import { StackRepository } from 'src/repositories/stack.repository.js'; +import { StorageRepository } from 'src/repositories/storage.repository.js'; +import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository.js'; +import { SyncRepository } from 'src/repositories/sync.repository.js'; +import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository.js'; +import { TagRepository } from 'src/repositories/tag.repository.js'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository.js'; +import { TrashRepository } from 'src/repositories/trash.repository.js'; +import { UserRepository } from 'src/repositories/user.repository.js'; +import { VersionHistoryRepository } from 'src/repositories/version-history.repository.js'; +import { VideoStreamRepository } from 'src/repositories/video-stream.repository.js'; +import { ViewRepository } from 'src/repositories/view-repository.js'; +import { WebsocketRepository } from 'src/repositories/websocket.repository.js'; +import { WorkflowRepository } from 'src/repositories/workflow.repository.js'; +import { DB } from 'src/schema/index.js'; +import { AuthService } from 'src/services/auth.service.js'; +import { BaseService } from 'src/services/base.service.js'; +import type { RepositoryInterface } from 'src/types.js'; +import { getKyselyConfig } from 'src/utils/database.js'; +import { ClusterGroupFactory } from 'test/factories/cluster-group.factory.js'; +import { IAccessRepositoryMock, newAccessRepositoryMock } from 'test/repositories/access.repository.mock.js'; +import { newAssetRepositoryMock } from 'test/repositories/asset.repository.mock.js'; +import { newConfigRepositoryMock } from 'test/repositories/config.repository.mock.js'; +import { newCryptoRepositoryMock } from 'test/repositories/crypto.repository.mock.js'; +import { newJobRepositoryMock } from 'test/repositories/job.repository.mock.js'; +import { newMediaRepositoryMock } from 'test/repositories/media.repository.mock.js'; +import { newMetadataRepositoryMock } from 'test/repositories/metadata.repository.mock.js'; +import { newStorageRepositoryMock } from 'test/repositories/storage.repository.mock.js'; +import { newSystemMetadataRepositoryMock } from 'test/repositories/system-metadata.repository.mock.js'; +import { ITelemetryRepositoryMock, newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock.js'; import { assert, Mock, Mocked, vitest } from 'vitest'; export type ControllerContext = { diff --git a/server/test/vitest.config.medium.mjs b/server/test/vitest.config.medium.mjs index 4c3647f1d..e30d11891 100644 --- a/server/test/vitest.config.medium.mjs +++ b/server/test/vitest.config.medium.mjs @@ -1,23 +1,20 @@ import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import swc from 'unplugin-swc'; -import tsconfigPaths from 'vite-tsconfig-paths'; import { defineConfig } from 'vitest/config'; const serverRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); export default defineConfig({ + resolve: { + tsconfigPaths: true, + }, test: { name: 'server:medium', root: serverRoot, globals: true, include: ['test/medium/**/*.spec.ts'], globalSetup: ['test/medium/globalSetup.ts'], - server: { - deps: { - fallbackCJS: true, - }, - }, }, - plugins: [swc.vite(), tsconfigPaths()], + plugins: [swc.vite()], }); diff --git a/server/test/vitest.config.mjs b/server/test/vitest.config.mjs index 1cecd62e9..8f2913b3c 100644 --- a/server/test/vitest.config.mjs +++ b/server/test/vitest.config.mjs @@ -1,12 +1,14 @@ import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import swc from 'unplugin-swc'; -import tsconfigPaths from 'vite-tsconfig-paths'; import { defineConfig } from 'vitest/config'; const serverRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); export default defineConfig({ + resolve: { + tsconfigPaths: true, + }, test: { name: 'server:unit', root: serverRoot, @@ -22,14 +24,9 @@ export default defineConfig({ 'src/services/index.ts', ], }, - server: { - deps: { - fallbackCJS: true, - }, - }, env: { TZ: 'UTC', }, }, - plugins: [swc.vite(), tsconfigPaths()], + plugins: [swc.vite()], }); diff --git a/server/tsconfig.json b/server/tsconfig.json index 18ad4305f..ef6375f50 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "module": "node20", + "module": "nodenext", "strict": true, "declaration": true, "removeComments": true, @@ -9,12 +9,13 @@ "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "target": "es2024", - "moduleResolution": "node16", + "moduleResolution": "nodenext", "lib": ["dom", "esnext"], "sourceMap": true, "outDir": "./dist", "incremental": true, "skipLibCheck": true, + "isolatedModules": true, "esModuleInterop": true, "preserveWatchOutput": true, "paths": {