From afbfd42cd40472782f4d14af4cd251ade59bbe17 Mon Sep 17 00:00:00 2001 From: Wonwoo Choi Date: Sun, 24 Mar 2024 13:52:56 +0900 Subject: [PATCH 1/5] =?UTF-8?q?ES=20Modules=20=EB=B0=A9=EC=8B=9D=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootstrap/bootstrap_host.ts | 6 +++--- bootstrap/rebuild_group_cache.ts | 4 ++-- package.json | 1 + src/api/email.ts | 4 ++-- src/api/handlers/emails.ts | 12 ++++++------ src/api/handlers/groups.ts | 6 +++--- src/api/handlers/login.ts | 8 ++++---- src/api/handlers/nss.ts | 4 ++-- src/api/handlers/shells.ts | 2 +- src/api/handlers/users.ts | 12 ++++++------ src/api/router.ts | 25 +++++++++++++------------ src/api/server.ts | 12 ++++++------ src/config.ts | 1 - src/index.ts | 8 ++++---- src/model/email_addresses.ts | 4 ++-- src/model/groups.ts | 6 +++--- src/model/hosts.ts | 6 +++--- src/model/model.ts | 20 ++++++++++---------- src/model/oauth.ts | 5 ++--- src/model/permissions.ts | 8 ++++---- src/model/shells.ts | 2 +- src/model/users.ts | 6 +++--- src/oidc/account.ts | 1 - src/oidc/adapter.ts | 7 +++---- src/oidc/configuration.ts | 9 ++++----- src/oidc/redis.ts | 3 +-- src/oidc/routes.ts | 8 +++----- test/_setup.ts | 6 +++--- test/_test_utils.ts | 4 ++-- test/api/email.test.ts | 2 +- test/api/groups.test.ts | 6 +++--- test/api/login.test.ts | 4 ++-- test/api/nss.test.ts | 4 ++-- test/api/shells.test.ts | 2 +- test/api/users.test.ts | 2 +- test/model/email_addresses.test.ts | 4 ++-- test/model/groups.test.ts | 8 ++++---- test/model/hosts.test.ts | 4 ++-- test/model/model.test.ts | 4 ++-- test/model/permissions.test.ts | 6 +++--- test/model/shells.test.ts | 2 +- test/model/users.test.ts | 12 ++++++++---- tsconfig.json | 13 +++++++------ 43 files changed, 136 insertions(+), 137 deletions(-) diff --git a/bootstrap/bootstrap_host.ts b/bootstrap/bootstrap_host.ts index 9b5d265..1e91a68 100644 --- a/bootstrap/bootstrap_host.ts +++ b/bootstrap/bootstrap_host.ts @@ -1,9 +1,9 @@ import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import Config from '../src/config'; -import Model from '../src/model/model'; +import Config from '../src/config.js'; +import Model from '../src/model/model.js'; -import { HARDWARE_LAB, LOUNGE, PRACTICE_SERVER, SOFTWARE_LAB } from './hosts_info'; +import { HARDWARE_LAB, LOUNGE, PRACTICE_SERVER, SOFTWARE_LAB } from './hosts_info.js'; const config: Config = JSON.parse(fs.readFileSync('config.json', { encoding: 'utf-8' })); diff --git a/bootstrap/rebuild_group_cache.ts b/bootstrap/rebuild_group_cache.ts index 7b953d6..262af12 100644 --- a/bootstrap/rebuild_group_cache.ts +++ b/bootstrap/rebuild_group_cache.ts @@ -1,7 +1,7 @@ import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import Config from '../src/config'; -import Model from '../src/model/model'; +import Config from '../src/config.js'; +import Model from '../src/model/model.js'; const config: Config = JSON.parse(fs.readFileSync('config.json', { encoding: 'utf-8' })); diff --git a/package.json b/package.json index 04242ad..a2d998b 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "bugs": { "url": "https://github.com/bacchus-snu/id/issues" }, + "type": "module", "dependencies": { "@koa/cors": "^5.0.0", "@phc/format": "^1.0.0", diff --git a/src/api/email.ts b/src/api/email.ts index 4309023..7dd6f7c 100644 --- a/src/api/email.ts +++ b/src/api/email.ts @@ -1,7 +1,7 @@ import * as Bunyan from 'bunyan'; import * as nodemailer from 'nodemailer'; -import Config from '../config'; -import { InvalidEmailError, ResendLimitExeededError } from '../model/errors'; +import Config from '../config.js'; +import { InvalidEmailError, ResendLimitExeededError } from '../model/errors.js'; export interface EmailOption { address: string; diff --git a/src/api/handlers/emails.ts b/src/api/handlers/emails.ts index 4b8838c..7bb2e6e 100644 --- a/src/api/handlers/emails.ts +++ b/src/api/handlers/emails.ts @@ -1,11 +1,11 @@ import { IMiddleware } from 'koa-router'; import z from 'zod'; -import Config from '../../config'; -import { EmailAddress } from '../../model/email_addresses'; -import { EmailInUseError, InvalidEmailError, ResendLimitExeededError } from '../../model/errors'; -import Model from '../../model/model'; -import { sendEmail } from '../email'; -import emailVerificationTemplate from '../templates/verification_email_template'; +import Config from '../../config.js'; +import { EmailAddress } from '../../model/email_addresses.js'; +import { EmailInUseError, InvalidEmailError, ResendLimitExeededError } from '../../model/errors.js'; +import Model from '../../model/model.js'; +import { sendEmail } from '../email.js'; +import emailVerificationTemplate from '../templates/verification_email_template.js'; export function sendVerificationEmail(model: Model, config: Config): IMiddleware { const bodySchema = z.object({ diff --git a/src/api/handlers/groups.ts b/src/api/handlers/groups.ts index dbef10f..4453f14 100644 --- a/src/api/handlers/groups.ts +++ b/src/api/handlers/groups.ts @@ -1,8 +1,8 @@ import { IMiddleware } from 'koa-router'; import z from 'zod'; -import { BadParameterError } from '../../model/errors'; -import Model from '../../model/model'; -import { User } from '../../model/users'; +import { BadParameterError } from '../../model/errors.js'; +import Model from '../../model/model.js'; +import { User } from '../../model/users.js'; export function listGroups(model: Model): IMiddleware { return async (ctx, next) => { diff --git a/src/api/handlers/login.ts b/src/api/handlers/login.ts index 74d00e6..ff93335 100644 --- a/src/api/handlers/login.ts +++ b/src/api/handlers/login.ts @@ -1,10 +1,10 @@ import { IMiddleware } from 'koa-router'; import z from 'zod'; -import Config from '../../config'; -import { AuthorizationError, ControllableError, NoSuchEntryError } from '../../model/errors'; -import Model from '../../model/model'; -import { SignatureError, verifyPubkeyReq } from '../pubkey'; +import Config from '../../config.js'; +import { AuthorizationError, ControllableError, NoSuchEntryError } from '../../model/errors.js'; +import Model from '../../model/model.js'; +import { SignatureError, verifyPubkeyReq } from '../pubkey.js'; const loginBodySchema = z.object({ username: z.string(), diff --git a/src/api/handlers/nss.ts b/src/api/handlers/nss.ts index 1c5a37d..05c7e68 100644 --- a/src/api/handlers/nss.ts +++ b/src/api/handlers/nss.ts @@ -1,7 +1,7 @@ import { IMiddleware } from 'koa-router'; -import { NoSuchEntryError } from '../../model/errors'; -import Model from '../../model/model'; +import { NoSuchEntryError } from '../../model/errors.js'; +import Model from '../../model/model.js'; export function getPasswd(model: Model): IMiddleware { return async (ctx, next) => { diff --git a/src/api/handlers/shells.ts b/src/api/handlers/shells.ts index f0da55c..b4c434e 100644 --- a/src/api/handlers/shells.ts +++ b/src/api/handlers/shells.ts @@ -1,5 +1,5 @@ import { IMiddleware } from 'koa-router'; -import Model from '../../model/model'; +import Model from '../../model/model.js'; export function getShells(model: Model): IMiddleware { return async (ctx, next) => { diff --git a/src/api/handlers/users.ts b/src/api/handlers/users.ts index 5396060..bf375b9 100644 --- a/src/api/handlers/users.ts +++ b/src/api/handlers/users.ts @@ -2,12 +2,12 @@ import { createPublicKey } from 'crypto'; import { jwtVerify } from 'jose'; import { IMiddleware } from 'koa-router'; import z from 'zod'; -import Config from '../../config'; -import { EmailAddress } from '../../model/email_addresses'; -import { InvalidEmailError, ResendLimitExeededError, UserExistsError } from '../../model/errors'; -import Model from '../../model/model'; -import { sendEmail } from '../email'; -import changePasswordTemplate from '../templates/change_password_email_template'; +import Config from '../../config.js'; +import { EmailAddress } from '../../model/email_addresses.js'; +import { InvalidEmailError, ResendLimitExeededError, UserExistsError } from '../../model/errors.js'; +import Model from '../../model/model.js'; +import { sendEmail } from '../email.js'; +import changePasswordTemplate from '../templates/change_password_email_template.js'; export function createUser(model: Model, config: Config): IMiddleware { const bodySchema = z.object({ diff --git a/src/api/router.ts b/src/api/router.ts index 13de5b5..44752c8 100644 --- a/src/api/router.ts +++ b/src/api/router.ts @@ -1,9 +1,12 @@ import bodyParser from 'koa-bodyparser'; import Router from 'koa-router'; -import Config from '../config'; -import Model from '../model/model'; -import createOIDCRouter from '../oidc/routes'; -import { checkVerificationEmailToken, sendVerificationEmail } from './handlers/emails'; +import type OIDCProvider from 'oidc-provider'; +import type { Configuration as OIDCConfiguration } from 'oidc-provider'; + +import Config from '../config.js'; +import Model from '../model/model.js'; +import createOIDCRouter from '../oidc/routes.js'; +import { checkVerificationEmailToken, sendVerificationEmail } from './handlers/emails.js'; import { acceptGroup, applyGroup, @@ -12,10 +15,10 @@ import { listMembers, listPending, rejectGroup, -} from './handlers/groups'; -import { checkLogin, login, loginLegacy, loginPAM, logout } from './handlers/login'; -import { getGroup, getPasswd } from './handlers/nss'; -import { getShells } from './handlers/shells'; +} from './handlers/groups.js'; +import { checkLogin, login, loginLegacy, loginPAM, logout } from './handlers/login.js'; +import { getGroup, getPasswd } from './handlers/nss.js'; +import { getShells } from './handlers/shells.js'; import { changePassword, checkChangePasswordEmailToken, @@ -23,10 +26,8 @@ import { getUserEmails, getUserInfo, sendChangePasswordEmail, -} from './handlers/users'; -import { changeUserShell, getUserShell } from './handlers/users'; -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 -import type OIDCProvider, { Configuration as OIDCConfiguration } from 'oidc-provider'; +} from './handlers/users.js'; +import { changeUserShell, getUserShell } from './handlers/users.js'; export function createRouter( model: Model, diff --git a/src/api/server.ts b/src/api/server.ts index 35f5bd2..bdb6b44 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -3,15 +3,15 @@ import * as Bunyan from 'bunyan'; import * as crypto from 'crypto'; import Koa from 'koa'; import mount from 'koa-mount'; +import OIDCProvider from 'oidc-provider'; -import Config from '../config'; -import Model from '../model/model'; -import createOIDCConfig from '../oidc/configuration'; -import { createRouter } from './router'; +import Config from '../config.js'; +import Model from '../model/model.js'; +import createOIDCConfig from '../oidc/configuration.js'; +import { createRouter } from './router.js'; -const createServer = async (config: Config, log: Bunyan, inputModel?: Model) => { +const createServer = (config: Config, log: Bunyan, inputModel?: Model) => { const model = inputModel ?? new Model(config, log); - const OIDCProvider = (await import('oidc-provider')).default; const oidcConfig = createOIDCConfig(model, config.oidc); const oidcProvider = new OIDCProvider(config.oidc.issuer, oidcConfig); diff --git a/src/config.ts b/src/config.ts index 0a3afdb..b2676f2 100644 --- a/src/config.ts +++ b/src/config.ts @@ -2,7 +2,6 @@ * Configuration. */ -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 import type { ClientMetadata, JWKS } from 'oidc-provider'; /** diff --git a/src/index.ts b/src/index.ts index fe63948..9129476 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import createAPIServer from './api/server'; -import Config from './config'; +import createAPIServer from './api/server.js'; +import Config from './config.js'; const config: Config = JSON.parse(fs.readFileSync('config.json', { encoding: 'utf-8' })); @@ -10,8 +10,8 @@ const log = bunyan.createLogger({ level: config.logLevel, }); -async function run() { - const apiServer = await createAPIServer(config, log); +function run() { + const apiServer = createAPIServer(config, log); apiServer.listen(config.api.listenPort, config.api.listenHost); } diff --git a/src/model/email_addresses.ts b/src/model/email_addresses.ts index 834c351..7728ef6 100644 --- a/src/model/email_addresses.ts +++ b/src/model/email_addresses.ts @@ -1,7 +1,7 @@ import * as crypto from 'crypto'; import moment from 'moment'; -import { ExpiredTokenError, NoSuchEntryError } from './errors'; -import Transaction from './transaction'; +import { ExpiredTokenError, NoSuchEntryError } from './errors.js'; +import Transaction from './transaction.js'; interface EmailAddressRow { address_local: string; diff --git a/src/model/groups.ts b/src/model/groups.ts index c3cd4f4..19a9df1 100644 --- a/src/model/groups.ts +++ b/src/model/groups.ts @@ -1,6 +1,6 @@ -import { NoSuchEntryError } from './errors'; -import Transaction from './transaction'; -import { Translation } from './translation'; +import { NoSuchEntryError } from './errors.js'; +import Transaction from './transaction.js'; +import { Translation } from './translation.js'; interface GroupRow { idx: number; diff --git a/src/model/hosts.ts b/src/model/hosts.ts index 9cb6703..56bd908 100644 --- a/src/model/hosts.ts +++ b/src/model/hosts.ts @@ -1,6 +1,6 @@ -import { AuthorizationError, NoSuchEntryError } from './errors'; -import Model from './model'; -import Transaction from './transaction'; +import { AuthorizationError, NoSuchEntryError } from './errors.js'; +import Model from './model.js'; +import Transaction from './transaction.js'; interface HostRow { idx: number; diff --git a/src/model/model.ts b/src/model/model.ts index 34a9fa4..b4fae2c 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -1,15 +1,15 @@ import * as Bunyan from 'bunyan'; import * as pg from 'pg'; -import Config from '../config'; -import EmailAddresses from './email_addresses'; -import { ControllableError } from './errors'; -import Groups from './groups'; -import Hosts from './hosts'; -import OAuth from './oauth'; -import Permissions from './permissions'; -import Shells from './shells'; -import Transaction from './transaction'; -import Users from './users'; +import Config from '../config.js'; +import EmailAddresses from './email_addresses.js'; +import { ControllableError } from './errors.js'; +import Groups from './groups.js'; +import Hosts from './hosts.js'; +import OAuth from './oauth.js'; +import Permissions from './permissions.js'; +import Shells from './shells.js'; +import Transaction from './transaction.js'; +import Users from './users.js'; const PSQL_SERIALIZATION_FAILURE = '40001'; const PSQL_DEADLOCK_DETECTED = '40P01'; diff --git a/src/model/oauth.ts b/src/model/oauth.ts index 058079f..3c98df3 100644 --- a/src/model/oauth.ts +++ b/src/model/oauth.ts @@ -1,8 +1,7 @@ -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 import type { AllClientMetadata } from 'oidc-provider'; -import { NoSuchEntryError } from './errors'; -import Transaction from './transaction'; +import { NoSuchEntryError } from './errors.js'; +import Transaction from './transaction.js'; export default class OAuth { public async getClientById(tr: Transaction, id: string): Promise { diff --git a/src/model/permissions.ts b/src/model/permissions.ts index 511dafd..897b8f2 100644 --- a/src/model/permissions.ts +++ b/src/model/permissions.ts @@ -1,7 +1,7 @@ -import { NoSuchEntryError } from './errors'; -import Model from './model'; -import Transaction from './transaction'; -import { Translation } from './translation'; +import { NoSuchEntryError } from './errors.js'; +import Model from './model.js'; +import Transaction from './transaction.js'; +import { Translation } from './translation.js'; export default class Permissions { constructor(private readonly model: Model) { diff --git a/src/model/shells.ts b/src/model/shells.ts index f93e378..1063b0f 100644 --- a/src/model/shells.ts +++ b/src/model/shells.ts @@ -1,4 +1,4 @@ -import Transaction from './transaction'; +import Transaction from './transaction.js'; export default class Shells { constructor() { diff --git a/src/model/users.ts b/src/model/users.ts index 7a1a8ff..dda6917 100644 --- a/src/model/users.ts +++ b/src/model/users.ts @@ -8,9 +8,9 @@ import { ExpiredTokenError, NoSuchEntryError, NotActivatedError, -} from './errors'; -import Model from './model'; -import Transaction from './transaction'; +} from './errors.js'; +import Model from './model.js'; +import Transaction from './transaction.js'; // see language enum in schema.sql export type Language = 'ko' | 'en'; diff --git a/src/oidc/account.ts b/src/oidc/account.ts index 5ca3622..bf1e407 100644 --- a/src/oidc/account.ts +++ b/src/oidc/account.ts @@ -1,4 +1,3 @@ -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 import type { Account } from 'oidc-provider'; class OIDCAccount implements Account { diff --git a/src/oidc/adapter.ts b/src/oidc/adapter.ts index a195a13..653c35d 100644 --- a/src/oidc/adapter.ts +++ b/src/oidc/adapter.ts @@ -1,9 +1,8 @@ -import Redis from 'ioredis'; -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 +import { Redis } from 'ioredis'; import type { Adapter, AdapterPayload } from 'oidc-provider'; -import { NoSuchEntryError } from '../model/errors'; -import Model from '../model/model'; +import { NoSuchEntryError } from '../model/errors.js'; +import Model from '../model/model.js'; const grantable = new Set([ 'AccessToken', diff --git a/src/oidc/configuration.ts b/src/oidc/configuration.ts index 0175ed0..7ddcfe0 100644 --- a/src/oidc/configuration.ts +++ b/src/oidc/configuration.ts @@ -1,9 +1,8 @@ -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 import type { Configuration } from 'oidc-provider'; -import Config from '../config'; -import type Model from '../model/model'; -import OIDCAccount from './account'; -import AdapterFactory from './adapter'; +import Config from '../config.js'; +import type Model from '../model/model.js'; +import OIDCAccount from './account.js'; +import AdapterFactory from './adapter.js'; const claims = { openid: ['sub', 'username', 'groups'], diff --git a/src/oidc/redis.ts b/src/oidc/redis.ts index cad4143..60cbf7f 100644 --- a/src/oidc/redis.ts +++ b/src/oidc/redis.ts @@ -1,5 +1,4 @@ -import Redis from 'ioredis'; -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 +import { Redis } from 'ioredis'; import type { Adapter, AdapterPayload } from 'oidc-provider'; const grantable = new Set([ diff --git a/src/oidc/routes.ts b/src/oidc/routes.ts index e98cbe4..41522d0 100644 --- a/src/oidc/routes.ts +++ b/src/oidc/routes.ts @@ -1,11 +1,11 @@ import { strict as assert } from 'node:assert'; import Router from 'koa-router'; -// @ts-expect-error: https://github.com/microsoft/TypeScript/issues/49721 import type OIDCProvider from 'oidc-provider'; +import { errors as oidcErrors } from 'oidc-provider'; import * as z from 'zod'; -import Model from '../model/model'; +import Model from '../model/model.js'; const loginSchema = z.object({ username: z.string().nonempty(), @@ -24,13 +24,11 @@ export default (model: Model, provider: OIDCProvider) => { const router = new Router(); router.use(async (ctx, next) => { - const { errors } = await import('oidc-provider'); - ctx.set('cache-control', 'no-store'); try { await next(); } catch (err) { - if (err instanceof errors.SessionNotFound) { + if (err instanceof oidcErrors.SessionNotFound) { ctx.status = err.status; const { message: error, error_description: desc } = err; ctx.body = { error, desc }; diff --git a/test/_setup.ts b/test/_setup.ts index 0f51e27..15c4498 100644 --- a/test/_setup.ts +++ b/test/_setup.ts @@ -2,9 +2,9 @@ import test from 'ava'; import Logger, * as bunyan from 'bunyan'; import * as fs from 'fs'; import { Server } from 'node:http'; -import createAPIServer from '../src/api/server'; -import Config from '../src/config'; -import Model from '../src/model/model'; +import createAPIServer from '../src/api/server.js'; +import Config from '../src/config.js'; +import Model from '../src/model/model.js'; export let config: Config; export let log: Logger; diff --git a/test/_test_utils.ts b/test/_test_utils.ts index 019133c..b4a57f6 100644 --- a/test/_test_utils.ts +++ b/test/_test_utils.ts @@ -1,8 +1,8 @@ import { Server } from 'node:http'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; -import Model from '../src/model/model'; -import Transaction from '../src/model/transaction'; +import Model from '../src/model/model.js'; +import Transaction from '../src/model/transaction.js'; export async function createEmailAddress(tr: Transaction, model: Model): Promise { return await model.emailAddresses.create(tr, uuid(), uuid()); diff --git a/test/api/email.test.ts b/test/api/email.test.ts index d2529a2..de73802 100644 --- a/test/api/email.test.ts +++ b/test/api/email.test.ts @@ -2,7 +2,7 @@ import test from 'ava'; import * as nodemailer from 'nodemailer'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; -import { app, config, model } from '../_setup'; +import { app, config, model } from '../_setup.js'; test.skip('email configuration is correct', async t => { const emailOption = { diff --git a/test/api/groups.test.ts b/test/api/groups.test.ts index 7c63286..f036aa5 100644 --- a/test/api/groups.test.ts +++ b/test/api/groups.test.ts @@ -1,9 +1,9 @@ import test from 'ava'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; -import { GroupUserInfo } from '../../src/model/groups'; -import { app, model } from '../_setup'; -import { createGroup, createGroupRelation, createUser } from '../_test_utils'; +import { GroupUserInfo } from '../../src/model/groups.js'; +import { app, model } from '../_setup.js'; +import { createGroup, createGroupRelation, createUser } from '../_test_utils.js'; test('group listing', async t => { const username = uuid(); diff --git a/test/api/login.test.ts b/test/api/login.test.ts index 386915f..6c6cda2 100644 --- a/test/api/login.test.ts +++ b/test/api/login.test.ts @@ -3,8 +3,8 @@ import moment from 'moment'; import * as request from 'supertest'; import tweetnacl from 'tweetnacl'; import { v4 as uuid } from 'uuid'; -import { app, config, model } from '../_setup'; -import { createAgentForwardedFor } from '../_test_utils'; +import { app, config, model } from '../_setup.js'; +import { createAgentForwardedFor } from '../_test_utils.js'; test('test login with credential', async t => { let username = ''; diff --git a/test/api/nss.test.ts b/test/api/nss.test.ts index 33a2a09..82ecc56 100644 --- a/test/api/nss.test.ts +++ b/test/api/nss.test.ts @@ -1,6 +1,6 @@ import test from 'ava'; -import { app, config, model } from '../_setup'; -import { createAgentForwardedFor, createUser } from '../_test_utils'; +import { app, config, model } from '../_setup.js'; +import { createAgentForwardedFor, createUser } from '../_test_utils.js'; test('fetch passwd entries', async t => { const agent = createAgentForwardedFor(app, '10.0.2.0'); diff --git a/test/api/shells.test.ts b/test/api/shells.test.ts index a5475db..6bfddac 100644 --- a/test/api/shells.test.ts +++ b/test/api/shells.test.ts @@ -1,7 +1,7 @@ import test from 'ava'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; -import { app, model } from '../_setup'; +import { app, model } from '../_setup.js'; test('test getShells', async t => { const newShell = uuid(); diff --git a/test/api/users.test.ts b/test/api/users.test.ts index 11075f7..0e5099d 100644 --- a/test/api/users.test.ts +++ b/test/api/users.test.ts @@ -2,7 +2,7 @@ import test, { ExecutionContext } from 'ava'; import * as crypto from 'crypto'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; -import { app, config, model } from '../_setup'; +import { app, config, model } from '../_setup.js'; test('create user step by step', async t => { const agent = request.agent(app); diff --git a/test/model/email_addresses.test.ts b/test/model/email_addresses.test.ts index 8ff6477..9aca077 100644 --- a/test/model/email_addresses.test.ts +++ b/test/model/email_addresses.test.ts @@ -3,8 +3,8 @@ import test from 'ava'; import moment from 'moment'; import { v4 as uuid } from 'uuid'; -import { model } from '../_setup'; -import { createEmailAddress, createUser } from '../_test_utils'; +import { model } from '../_setup.js'; +import { createEmailAddress, createUser } from '../_test_utils.js'; test('create extra email', async t => { await model.pgDo(async tr => { diff --git a/test/model/groups.test.ts b/test/model/groups.test.ts index 0ae9f2d..d77d7e8 100644 --- a/test/model/groups.test.ts +++ b/test/model/groups.test.ts @@ -1,11 +1,11 @@ import test from 'ava'; -import { NoSuchEntryError } from '../../src/model/errors'; -import { Translation } from '../../src/model/translation'; +import { NoSuchEntryError } from '../../src/model/errors.js'; +import { Translation } from '../../src/model/translation.js'; import { v4 as uuid } from 'uuid'; -import { model } from '../_setup'; -import { createGroup, createGroupRelation, createUser } from '../_test_utils'; +import { model } from '../_setup.js'; +import { createGroup, createGroupRelation, createUser } from '../_test_utils.js'; const name: Translation = { ko: '도지', diff --git a/test/model/hosts.test.ts b/test/model/hosts.test.ts index 229a930..2178abb 100644 --- a/test/model/hosts.test.ts +++ b/test/model/hosts.test.ts @@ -4,8 +4,8 @@ import { v4 as uuid } from 'uuid'; import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import Config from '../../src/config'; -import Model from '../../src/model/model'; +import Config from '../../src/config.js'; +import Model from '../../src/model/model.js'; const config: Config = JSON.parse(fs.readFileSync('config.test.json', { encoding: 'utf-8' })); diff --git a/test/model/model.test.ts b/test/model/model.test.ts index f502322..5319953 100644 --- a/test/model/model.test.ts +++ b/test/model/model.test.ts @@ -1,6 +1,6 @@ import test from 'ava'; -import { model } from '../_setup'; -import { delay } from '../_test_utils'; +import { model } from '../_setup.js'; +import { delay } from '../_test_utils.js'; test('resolve deadlock', async t => { const transactionStages: Array = [0, 0]; diff --git a/test/model/permissions.test.ts b/test/model/permissions.test.ts index d9420b2..508b201 100644 --- a/test/model/permissions.test.ts +++ b/test/model/permissions.test.ts @@ -1,9 +1,9 @@ import test from 'ava'; -import { Translation } from '../../src/model/translation'; +import { Translation } from '../../src/model/translation.js'; -import { model } from '../_setup'; -import { createGroup, createGroupRelation, createPermission, createUser } from '../_test_utils'; +import { model } from '../_setup.js'; +import { createGroup, createGroupRelation, createPermission, createUser } from '../_test_utils.js'; const name: Translation = { ko: '도지', diff --git a/test/model/shells.test.ts b/test/model/shells.test.ts index ca92032..052d545 100644 --- a/test/model/shells.test.ts +++ b/test/model/shells.test.ts @@ -1,6 +1,6 @@ import test from 'ava'; import { v4 as uuid } from 'uuid'; -import { model } from '../_setup'; +import { model } from '../_setup.js'; test('get, add, and remove shells', async t => { const newShell = uuid(); diff --git a/test/model/users.test.ts b/test/model/users.test.ts index bdd0a7e..3fcf0b0 100644 --- a/test/model/users.test.ts +++ b/test/model/users.test.ts @@ -3,10 +3,14 @@ import test from 'ava'; import * as phc from '@phc/format'; import moment from 'moment'; import { v4 as uuid } from 'uuid'; -import { AuthenticationError, NoSuchEntryError, NotActivatedError } from '../../src/model/errors'; - -import { model } from '../_setup'; -import { createGroup, createUser } from '../_test_utils'; +import { + AuthenticationError, + NoSuchEntryError, + NotActivatedError, +} from '../../src/model/errors.js'; + +import { model } from '../_setup.js'; +import { createGroup, createUser } from '../_test_utils.js'; test('create and delete user', async t => { await model.pgDo(async tr => { diff --git a/tsconfig.json b/tsconfig.json index cd82808..cef8d4c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,21 @@ { "compilerOptions": { "outDir": "dist", - "target": "es6", + "target": "ES2020", "lib": [ - "es2018", - "dom" + "ES2020", + "DOM" ], - "module": "node16", - "moduleResolution": "node16", + "module": "NodeNext", + "moduleResolution": "NodeNext", "strict": true, "noUnusedLocals": false, "noUnusedParameters": false, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "downlevelIteration": true, "esModuleInterop": true, + "isolatedModules": true, + "importsNotUsedAsValues": "remove", "typeRoots": [ "./node_modules/@types", "./typings" From 9c568420012a055320395e31855dc67478ddaf33 Mon Sep 17 00:00:00 2001 From: Wonwoo Choi Date: Sun, 24 Mar 2024 13:59:49 +0900 Subject: [PATCH 2/5] verbatimModuleSyntax: true --- bootstrap/bootstrap_host.ts | 2 +- bootstrap/rebuild_group_cache.ts | 2 +- src/api/email.ts | 2 +- src/api/handlers/emails.ts | 6 +++--- src/api/handlers/groups.ts | 4 ++-- src/api/handlers/login.ts | 4 ++-- src/api/handlers/nss.ts | 2 +- src/api/handlers/shells.ts | 2 +- src/api/handlers/users.ts | 6 +++--- src/api/pubkey.ts | 4 ++-- src/api/router.ts | 2 +- src/api/server.ts | 2 +- src/index.ts | 2 +- src/model/groups.ts | 2 +- src/model/model.ts | 2 +- src/model/permissions.ts | 2 +- src/oidc/configuration.ts | 2 +- test/_setup.ts | 2 +- test/api/groups.test.ts | 2 +- test/api/users.test.ts | 3 ++- test/model/groups.test.ts | 2 +- test/model/hosts.test.ts | 2 +- test/model/permissions.test.ts | 2 +- tsconfig.json | 2 +- 24 files changed, 32 insertions(+), 31 deletions(-) diff --git a/bootstrap/bootstrap_host.ts b/bootstrap/bootstrap_host.ts index 1e91a68..5b0fd30 100644 --- a/bootstrap/bootstrap_host.ts +++ b/bootstrap/bootstrap_host.ts @@ -1,6 +1,6 @@ import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import Config from '../src/config.js'; +import type Config from '../src/config.js'; import Model from '../src/model/model.js'; import { HARDWARE_LAB, LOUNGE, PRACTICE_SERVER, SOFTWARE_LAB } from './hosts_info.js'; diff --git a/bootstrap/rebuild_group_cache.ts b/bootstrap/rebuild_group_cache.ts index 262af12..b59f0b2 100644 --- a/bootstrap/rebuild_group_cache.ts +++ b/bootstrap/rebuild_group_cache.ts @@ -1,6 +1,6 @@ import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import Config from '../src/config.js'; +import type Config from '../src/config.js'; import Model from '../src/model/model.js'; const config: Config = JSON.parse(fs.readFileSync('config.json', { encoding: 'utf-8' })); diff --git a/src/api/email.ts b/src/api/email.ts index 7dd6f7c..b75d3b2 100644 --- a/src/api/email.ts +++ b/src/api/email.ts @@ -1,6 +1,6 @@ import * as Bunyan from 'bunyan'; import * as nodemailer from 'nodemailer'; -import Config from '../config.js'; +import type Config from '../config.js'; import { InvalidEmailError, ResendLimitExeededError } from '../model/errors.js'; export interface EmailOption { diff --git a/src/api/handlers/emails.ts b/src/api/handlers/emails.ts index 7bb2e6e..6456746 100644 --- a/src/api/handlers/emails.ts +++ b/src/api/handlers/emails.ts @@ -1,7 +1,7 @@ -import { IMiddleware } from 'koa-router'; +import type { IMiddleware } from 'koa-router'; import z from 'zod'; -import Config from '../../config.js'; -import { EmailAddress } from '../../model/email_addresses.js'; +import type Config from '../../config.js'; +import type { EmailAddress } from '../../model/email_addresses.js'; import { EmailInUseError, InvalidEmailError, ResendLimitExeededError } from '../../model/errors.js'; import Model from '../../model/model.js'; import { sendEmail } from '../email.js'; diff --git a/src/api/handlers/groups.ts b/src/api/handlers/groups.ts index 4453f14..9886b17 100644 --- a/src/api/handlers/groups.ts +++ b/src/api/handlers/groups.ts @@ -1,8 +1,8 @@ -import { IMiddleware } from 'koa-router'; +import type { IMiddleware } from 'koa-router'; import z from 'zod'; import { BadParameterError } from '../../model/errors.js'; import Model from '../../model/model.js'; -import { User } from '../../model/users.js'; +import type { User } from '../../model/users.js'; export function listGroups(model: Model): IMiddleware { return async (ctx, next) => { diff --git a/src/api/handlers/login.ts b/src/api/handlers/login.ts index ff93335..ec23c38 100644 --- a/src/api/handlers/login.ts +++ b/src/api/handlers/login.ts @@ -1,7 +1,7 @@ -import { IMiddleware } from 'koa-router'; +import type { IMiddleware } from 'koa-router'; import z from 'zod'; -import Config from '../../config.js'; +import type Config from '../../config.js'; import { AuthorizationError, ControllableError, NoSuchEntryError } from '../../model/errors.js'; import Model from '../../model/model.js'; import { SignatureError, verifyPubkeyReq } from '../pubkey.js'; diff --git a/src/api/handlers/nss.ts b/src/api/handlers/nss.ts index 05c7e68..db9b66c 100644 --- a/src/api/handlers/nss.ts +++ b/src/api/handlers/nss.ts @@ -1,4 +1,4 @@ -import { IMiddleware } from 'koa-router'; +import type { IMiddleware } from 'koa-router'; import { NoSuchEntryError } from '../../model/errors.js'; import Model from '../../model/model.js'; diff --git a/src/api/handlers/shells.ts b/src/api/handlers/shells.ts index b4c434e..d80d767 100644 --- a/src/api/handlers/shells.ts +++ b/src/api/handlers/shells.ts @@ -1,4 +1,4 @@ -import { IMiddleware } from 'koa-router'; +import type { IMiddleware } from 'koa-router'; import Model from '../../model/model.js'; export function getShells(model: Model): IMiddleware { diff --git a/src/api/handlers/users.ts b/src/api/handlers/users.ts index bf375b9..530ad71 100644 --- a/src/api/handlers/users.ts +++ b/src/api/handlers/users.ts @@ -1,9 +1,9 @@ import { createPublicKey } from 'crypto'; import { jwtVerify } from 'jose'; -import { IMiddleware } from 'koa-router'; +import type { IMiddleware } from 'koa-router'; import z from 'zod'; -import Config from '../../config.js'; -import { EmailAddress } from '../../model/email_addresses.js'; +import type Config from '../../config.js'; +import type { EmailAddress } from '../../model/email_addresses.js'; import { InvalidEmailError, ResendLimitExeededError, UserExistsError } from '../../model/errors.js'; import Model from '../../model/model.js'; import { sendEmail } from '../email.js'; diff --git a/src/api/pubkey.ts b/src/api/pubkey.ts index fb3c745..5440725 100644 --- a/src/api/pubkey.ts +++ b/src/api/pubkey.ts @@ -1,5 +1,5 @@ -import { Context } from 'koa'; -import * as tweetnacl from 'tweetnacl'; +import type { Context } from 'koa'; +import tweetnacl from 'tweetnacl'; export class SignatureError extends Error { constructor() { diff --git a/src/api/router.ts b/src/api/router.ts index 44752c8..3b9c168 100644 --- a/src/api/router.ts +++ b/src/api/router.ts @@ -3,7 +3,7 @@ import Router from 'koa-router'; import type OIDCProvider from 'oidc-provider'; import type { Configuration as OIDCConfiguration } from 'oidc-provider'; -import Config from '../config.js'; +import type Config from '../config.js'; import Model from '../model/model.js'; import createOIDCRouter from '../oidc/routes.js'; import { checkVerificationEmailToken, sendVerificationEmail } from './handlers/emails.js'; diff --git a/src/api/server.ts b/src/api/server.ts index bdb6b44..1e504a5 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -5,7 +5,7 @@ import Koa from 'koa'; import mount from 'koa-mount'; import OIDCProvider from 'oidc-provider'; -import Config from '../config.js'; +import type Config from '../config.js'; import Model from '../model/model.js'; import createOIDCConfig from '../oidc/configuration.js'; import { createRouter } from './router.js'; diff --git a/src/index.ts b/src/index.ts index 9129476..a4cd279 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import * as bunyan from 'bunyan'; import * as fs from 'fs'; import createAPIServer from './api/server.js'; -import Config from './config.js'; +import type Config from './config.js'; const config: Config = JSON.parse(fs.readFileSync('config.json', { encoding: 'utf-8' })); diff --git a/src/model/groups.ts b/src/model/groups.ts index 19a9df1..26babc5 100644 --- a/src/model/groups.ts +++ b/src/model/groups.ts @@ -1,6 +1,6 @@ import { NoSuchEntryError } from './errors.js'; import Transaction from './transaction.js'; -import { Translation } from './translation.js'; +import type { Translation } from './translation.js'; interface GroupRow { idx: number; diff --git a/src/model/model.ts b/src/model/model.ts index b4fae2c..f7676b6 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -1,6 +1,6 @@ import * as Bunyan from 'bunyan'; import * as pg from 'pg'; -import Config from '../config.js'; +import type Config from '../config.js'; import EmailAddresses from './email_addresses.js'; import { ControllableError } from './errors.js'; import Groups from './groups.js'; diff --git a/src/model/permissions.ts b/src/model/permissions.ts index 897b8f2..1eb127e 100644 --- a/src/model/permissions.ts +++ b/src/model/permissions.ts @@ -1,7 +1,7 @@ import { NoSuchEntryError } from './errors.js'; import Model from './model.js'; import Transaction from './transaction.js'; -import { Translation } from './translation.js'; +import type { Translation } from './translation.js'; export default class Permissions { constructor(private readonly model: Model) { diff --git a/src/oidc/configuration.ts b/src/oidc/configuration.ts index 7ddcfe0..29f8c00 100644 --- a/src/oidc/configuration.ts +++ b/src/oidc/configuration.ts @@ -1,5 +1,5 @@ import type { Configuration } from 'oidc-provider'; -import Config from '../config.js'; +import type Config from '../config.js'; import type Model from '../model/model.js'; import OIDCAccount from './account.js'; import AdapterFactory from './adapter.js'; diff --git a/test/_setup.ts b/test/_setup.ts index 15c4498..c2ea7e1 100644 --- a/test/_setup.ts +++ b/test/_setup.ts @@ -3,7 +3,7 @@ import Logger, * as bunyan from 'bunyan'; import * as fs from 'fs'; import { Server } from 'node:http'; import createAPIServer from '../src/api/server.js'; -import Config from '../src/config.js'; +import type Config from '../src/config.js'; import Model from '../src/model/model.js'; export let config: Config; diff --git a/test/api/groups.test.ts b/test/api/groups.test.ts index f036aa5..612d268 100644 --- a/test/api/groups.test.ts +++ b/test/api/groups.test.ts @@ -1,7 +1,7 @@ import test from 'ava'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; -import { GroupUserInfo } from '../../src/model/groups.js'; +import type { GroupUserInfo } from '../../src/model/groups.js'; import { app, model } from '../_setup.js'; import { createGroup, createGroupRelation, createUser } from '../_test_utils.js'; diff --git a/test/api/users.test.ts b/test/api/users.test.ts index 0e5099d..396a298 100644 --- a/test/api/users.test.ts +++ b/test/api/users.test.ts @@ -1,4 +1,5 @@ -import test, { ExecutionContext } from 'ava'; +import test from 'ava'; +import type { ExecutionContext } from 'ava'; import * as crypto from 'crypto'; import * as request from 'supertest'; import { v4 as uuid } from 'uuid'; diff --git a/test/model/groups.test.ts b/test/model/groups.test.ts index d77d7e8..91c3d48 100644 --- a/test/model/groups.test.ts +++ b/test/model/groups.test.ts @@ -1,7 +1,7 @@ import test from 'ava'; import { NoSuchEntryError } from '../../src/model/errors.js'; -import { Translation } from '../../src/model/translation.js'; +import type { Translation } from '../../src/model/translation.js'; import { v4 as uuid } from 'uuid'; import { model } from '../_setup.js'; diff --git a/test/model/hosts.test.ts b/test/model/hosts.test.ts index 2178abb..b92ba8a 100644 --- a/test/model/hosts.test.ts +++ b/test/model/hosts.test.ts @@ -4,7 +4,7 @@ import { v4 as uuid } from 'uuid'; import * as bunyan from 'bunyan'; import * as fs from 'fs'; -import Config from '../../src/config.js'; +import type Config from '../../src/config.js'; import Model from '../../src/model/model.js'; const config: Config = JSON.parse(fs.readFileSync('config.test.json', { encoding: 'utf-8' })); diff --git a/test/model/permissions.test.ts b/test/model/permissions.test.ts index 508b201..19992b3 100644 --- a/test/model/permissions.test.ts +++ b/test/model/permissions.test.ts @@ -1,6 +1,6 @@ import test from 'ava'; -import { Translation } from '../../src/model/translation.js'; +import type { Translation } from '../../src/model/translation.js'; import { model } from '../_setup.js'; import { createGroup, createGroupRelation, createPermission, createUser } from '../_test_utils.js'; diff --git a/tsconfig.json b/tsconfig.json index cef8d4c..1ef9b80 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "noFallthroughCasesInSwitch": true, "esModuleInterop": true, "isolatedModules": true, - "importsNotUsedAsValues": "remove", + "verbatimModuleSyntax": true, "typeRoots": [ "./node_modules/@types", "./typings" From aaff8632c3e5969da083c93c3e60039c6c3643b0 Mon Sep 17 00:00:00 2001 From: Wonwoo Choi Date: Sun, 24 Mar 2024 14:01:24 +0900 Subject: [PATCH 3/5] =?UTF-8?q?eslintrc=EB=A5=BC=20cjs=EB=A1=9C=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js => .eslintrc.cjs | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .eslintrc.js => .eslintrc.cjs (100%) diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 100% rename from .eslintrc.js rename to .eslintrc.cjs From f84e22e9708de37df0775ec227155bcd0a1906e4 Mon Sep 17 00:00:00 2001 From: Wonwoo Choi Date: Sun, 24 Mar 2024 14:21:58 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=EB=A6=B0=ED=84=B0=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.cjs | 14 ----------- .yarnrc.yml | 5 ++++ eslint.config.mjs | 16 +++++++++++++ package.json | 7 +++--- yarn.lock | 60 ++++++++++++++++++++++++++++++++++++++++------- 5 files changed, 76 insertions(+), 26 deletions(-) delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.mjs diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 93cd714..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - root: true, - env: { - node: true, - }, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], - rules: { - 'no-sequences': 'error', - 'no-constant-condition': ['error', { checkLoops: false }], - '@typescript-eslint/array-type': ['error', { default: 'generic' }], - }, -}; diff --git a/.yarnrc.yml b/.yarnrc.yml index e65419a..f986aa3 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1 +1,6 @@ +packageExtensions: + typescript-eslint@7.3.1: + dependencies: + "@typescript-eslint/utils": 7.3.1 + yarnPath: .yarn/releases/yarn-4.1.1.cjs diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..3b42f2f --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,16 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + rules: { + 'no-sequences': 'error', + 'no-constant-condition': ['error', { checkLoops: false }], + '@typescript-eslint/array-type': ['error', { default: 'generic' }], + }, + }, +); diff --git a/package.json b/package.json index a2d998b..e546fa5 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,9 @@ "zod": "^3.22.4" }, "devDependencies": { + "@eslint/js": "^8.57.0", "@types/bunyan": "^1.8.11", + "@types/eslint__js": "^8", "@types/koa": "^2.15.0", "@types/koa-bodyparser": "^4.3.12", "@types/koa-mount": "^4.0.5", @@ -53,13 +55,12 @@ "@types/pg": "^8.11.4", "@types/supertest": "^6.0.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.3.1", "ava": "^6.1.2", "dprint": "^0.45.0", "eslint": "^8.57.0", "supertest": "^6.3.4", - "typescript": "^5.4.3" + "typescript": "^5.4.3", + "typescript-eslint": "7.3.1" }, "packageManager": "yarn@4.1.1" } diff --git a/yarn.lock b/yarn.lock index 422a1a2..68b5076 100644 --- a/yarn.lock +++ b/yarn.lock @@ -96,7 +96,7 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": +"@eslint/js@npm:8.57.0, @eslint/js@npm:^8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 @@ -343,6 +343,32 @@ __metadata: languageName: node linkType: hard +"@types/eslint@npm:*": + version: 8.56.6 + resolution: "@types/eslint@npm:8.56.6" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/52124f0868b14f21b4c8c21cb3c6065e0671df3f64c0bb3d37efe12e41b3434f478461f5ba0dabf368cd927ddc9b36d5592e7f61b939463576ab69c3bf8f3b12 + languageName: node + linkType: hard + +"@types/eslint__js@npm:^8": + version: 8.42.3 + resolution: "@types/eslint__js@npm:8.42.3" + dependencies: + "@types/eslint": "npm:*" + checksum: 10c0/ccc5180b92155929a089ffb03ed62625216dcd5e46dd3197c6f82370ce8b52c7cb9df66c06b0a3017995409e023bc9eafe5a3f009e391960eacefaa1b62d9a56 + languageName: node + linkType: hard + +"@types/estree@npm:*": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:^4.17.33": version: 4.17.35 resolution: "@types/express-serve-static-core@npm:4.17.35" @@ -388,10 +414,10 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.12": - version: 7.0.12 - resolution: "@types/json-schema@npm:7.0.12" - checksum: 10c0/2c39946ae321fe42d085c61a85872a81bbee70f9b2054ad344e8811dfc478fdbaf1ebf5f2989bb87c895ba2dfc3b1dcba85db11e467bbcdc023708814207791c +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db languageName: node linkType: hard @@ -593,7 +619,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^7.3.1": +"@typescript-eslint/eslint-plugin@npm:7.3.1": version: 7.3.1 resolution: "@typescript-eslint/eslint-plugin@npm:7.3.1" dependencies: @@ -618,7 +644,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^7.3.1": +"@typescript-eslint/parser@npm:7.3.1": version: 7.3.1 resolution: "@typescript-eslint/parser@npm:7.3.1" dependencies: @@ -1031,9 +1057,11 @@ __metadata: version: 0.0.0-use.local resolution: "bacchus-id@workspace:." dependencies: + "@eslint/js": "npm:^8.57.0" "@koa/cors": "npm:^5.0.0" "@phc/format": "npm:^1.0.0" "@types/bunyan": "npm:^1.8.11" + "@types/eslint__js": "npm:^8" "@types/koa": "npm:^2.15.0" "@types/koa-bodyparser": "npm:^4.3.12" "@types/koa-mount": "npm:^4.0.5" @@ -1045,8 +1073,6 @@ __metadata: "@types/pg": "npm:^8.11.4" "@types/supertest": "npm:^6.0.2" "@types/uuid": "npm:^9.0.8" - "@typescript-eslint/eslint-plugin": "npm:^7.3.1" - "@typescript-eslint/parser": "npm:^7.3.1" argon2: "npm:^0.40.1" ava: "npm:^6.1.2" bunyan: "npm:^1.8.15" @@ -1065,6 +1091,7 @@ __metadata: supertest: "npm:^6.3.4" tweetnacl: "npm:^1.0.3" typescript: "npm:^5.4.3" + typescript-eslint: "npm:7.3.1" uuid: "npm:^9.0.1" zod: "npm:^3.22.4" languageName: unknown @@ -4434,6 +4461,21 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:7.3.1": + version: 7.3.1 + resolution: "typescript-eslint@npm:7.3.1" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:7.3.1" + "@typescript-eslint/parser": "npm:7.3.1" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/7d5b8e476d09f98d432197409cbdc22f133d5c66930c11ef1aae6b73f92467e415ba36a420510c16ce531b523d1150be076015ee51e8acf126a8be8b34c16d0c + languageName: node + linkType: hard + "typescript@npm:^5.4.3": version: 5.4.3 resolution: "typescript@npm:5.4.3" From 0a49f38d31eceefc6185d99a71ab96e90a39f1c7 Mon Sep 17 00:00:00 2001 From: Wonwoo Choi Date: Sun, 24 Mar 2024 14:23:13 +0900 Subject: [PATCH 5/5] =?UTF-8?q?pg.Pool=20=ED=95=B4=EA=B2=B0=20=EC=8B=9C?= =?UTF-8?q?=EB=8F=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/model.ts b/src/model/model.ts index f7676b6..9dc874b 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -1,5 +1,5 @@ import * as Bunyan from 'bunyan'; -import * as pg from 'pg'; +import pg from 'pg'; import type Config from '../config.js'; import EmailAddresses from './email_addresses.js'; import { ControllableError } from './errors.js';