alp-node 10.0.0 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -365,6 +365,7 @@ class AlpNodeApp extends Koa {
365
365
  try {
366
366
  const server = await alpListen(
367
367
  this.config,
368
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
368
369
  this.callback(),
369
370
  this.certPath
370
371
  );
@@ -1 +1 @@
1
- {"version":3,"file":"AlpNodeApp-node.mjs","sources":["../src/errors.ts","../src/language.ts","../src/listen.ts","../src/params/ParamValidationResult.ts","../src/params/ParamValid.ts","../src/params/ParamValueValidator.ts","../src/params/ParamValueStringValidator.ts","../src/params/ParamValueFromContext.ts","../src/params/index.ts","../src/translate/load.ts","../src/translate/index.ts","../src/AlpNodeApp.ts"],"sourcesContent":["import { STATUS_CODES } from \"node:http\";\nimport ErrorHtmlRenderer from \"error-html\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Context } from \"./AlpNodeApp\";\nimport type { HtmlError } from \"./types\";\n\nconst logger = new Logger(\"alp:errors\");\nconst errorHtmlRenderer = new ErrorHtmlRenderer({\n appPath: `${process.cwd()}/`,\n});\n\nexport default async function alpNodeErrors(\n ctx: Context,\n next: () => Promise<void> | void,\n): Promise<void> {\n try {\n await next();\n } catch (error: unknown) {\n // eslint-disable-next-line no-ex-assign\n if (!error) error = new Error(\"Unknown error\");\n // eslint-disable-next-line no-ex-assign\n if (typeof error === \"string\") error = new Error(error);\n\n ctx.status = (error as HtmlError).status || 500;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n logger.error(error as any);\n\n switch (ctx.request.accepts(\"html\", \"text\", \"json\")) {\n case \"json\":\n ctx.type = \"application/json\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = { error: (error as Error).message };\n } else {\n ctx.body = { error: STATUS_CODES[ctx.status] };\n }\n\n break;\n\n case \"html\":\n ctx.type = \"text/html\";\n if (process.env.NODE_ENV !== \"production\") {\n ctx.body = errorHtmlRenderer.render(error as Error);\n } else if ((error as HtmlError).expose) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n\n case \"text\":\n case false:\n default:\n ctx.type = \"text/plain\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n }\n }\n}\n","import type { Context } from \"koa\";\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp } from \"./AlpNodeApp\";\n\nexport interface AlpLanguageContext {\n readonly firstAcceptedLanguage: string;\n readonly language: string;\n}\nexport default function alpLanguage(app: AlpNodeApp): void {\n const config = app.context.config;\n const availableLanguages: string[] = config.get(\"availableLanguages\");\n if (!availableLanguages) {\n throw new Error('Missing config \"availableLanguages\"');\n }\n\n defineLazyProperty(\n app.context,\n \"language\",\n function language(this: Context): string {\n return (\n this.acceptsLanguages(availableLanguages) ||\n availableLanguages[0] ||\n \"en\"\n );\n },\n );\n\n defineLazyProperty(\n app.context,\n \"firstAcceptedLanguage\",\n function firstAcceptedLanguage(this: Context): string {\n return this.acceptsLanguages()[0] || availableLanguages[0] || \"en\";\n },\n );\n}\n","import { chmodSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { createServer as createServerHttp } from \"node:http\";\nimport type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport { createServer as createServerHttps } from \"node:https\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Config } from \"./config\";\n\nconst logger = new Logger(\"alp:listen\");\n\ntype RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\nconst createServer = (\n callback: RequestListener,\n socketPath?: string,\n tls?: boolean,\n dirname = \"\",\n // eslint-disable-next-line @typescript-eslint/max-params\n): Server => {\n const createHttpServer =\n !socketPath && tls ? createServerHttps : createServerHttp;\n\n if (!tls) {\n return (createHttpServer as typeof createServerHttps)(callback);\n }\n\n const options = {\n key: readFileSync(`${dirname}/server.key`),\n cert: readFileSync(`${dirname}/server.crt`),\n };\n\n return (createHttpServer as typeof createServerHttps)(options, callback);\n};\n\nexport default function alpListen(\n config: Config,\n callback: RequestListener,\n dirname?: string,\n): Promise<Server> {\n return new Promise((resolve) => {\n const socketPath = config.get<string>(\"socketPath\");\n const port = config.get<number>(\"port\");\n const hostname = config.get<string>(\"hostname\");\n const tls = config.get<boolean>(\"tls\");\n\n logger.info(\"Creating server\", socketPath ? { socketPath } : { port });\n const server = createServer(callback, socketPath, tls, dirname);\n\n if (socketPath) {\n try {\n unlinkSync(socketPath);\n } catch {}\n\n server.listen(socketPath, () => {\n if (socketPath) {\n chmodSync(socketPath, \"777\");\n }\n\n logger.info(\"Server listening\", { socketPath });\n resolve(server);\n });\n } else {\n server.listen(port, hostname, () => {\n logger.info(\"Server listening\", { port });\n resolve(server);\n });\n }\n });\n}\n","export type Errors = Record<string, any>;\n\nexport class ParamValidationResult {\n _errors?: Errors;\n\n _error(name: string, key: string, value: unknown): void {\n if (!this._errors) {\n this._errors = {};\n }\n\n this._errors[name] = { error: key, value };\n }\n\n getErrors(): Errors | undefined {\n return this._errors;\n }\n\n hasErrors(): boolean {\n return this._errors !== undefined;\n }\n\n isValid(): boolean {\n return this._errors === undefined;\n }\n\n // string(name: string): ParamValueStringValidator {\n // return new ParamValueStringValidator(this, name, this.context.param(name));\n // }\n /* int(name, position) {\n return new ParamValueIntValidator(this, name, this.context.param(name, position));\n }\n model(modelName, name) {\n name = name || S.string.lcFirst(modelName);\n console.log('paramvalidator model', modelName, M[modelName]);\n let data = this.context.getOrPostParam(name);\n return new ParamValueModelValidator(this, name, !data ? null : new M[modelName](data));\n } */\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValid extends ParamValidationResult {\n context: Context;\n\n constructor(context: Context) {\n super();\n this.context = context;\n }\n\n override _error(): void {\n this.context.throw(400, \"Invalid params\", { validator: this });\n }\n}\n","import type { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValueValidator<T> {\n readonly validationResult: ParamValidationResult;\n\n readonly name: string;\n\n readonly value: T;\n\n constructor(validationResult: ParamValidationResult, name: string, value: T) {\n this.validationResult = validationResult;\n this.name = name;\n this.value = value;\n }\n\n isValid(): boolean {\n return this.validationResult.isValid();\n }\n\n _error(key: string): void {\n this.validationResult._error(this.name, key, this.value);\n }\n}\n","import ParamValueValidator from \"./ParamValueValidator\";\n\nexport default class ParamValueStringValidator<\n T extends string = string,\n> extends ParamValueValidator<T | null | undefined> {\n notEmpty(): ParamValueValidator<T> {\n if (this.value == null || this.value.trim() === \"\") {\n this._error(\"notEmpty\");\n }\n\n return this as ParamValueValidator<T>;\n }\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport type { ParamValidationResult } from \"./ParamValidationResult\";\nimport ParamValueStringValidator from \"./ParamValueStringValidator\";\n\nexport class ParamValueFromContext {\n readonly validationResult: ParamValidationResult;\n\n readonly context: Context;\n\n constructor(context: Context, validationResult: ParamValidationResult) {\n this.validationResult = validationResult;\n this.context = context;\n }\n\n namedParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.namedRouteParam(name),\n );\n }\n\n otherParam(position: number): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n String(position),\n this.context.otherRouteParam(position),\n );\n }\n\n queryParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.queryParam(name),\n );\n }\n\n // bodyParam: <T>(name: string): ParamValueValidator<string | undefined> {\n\n // }\n}\n","import { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport ParamValid from \"./ParamValid\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\nimport { ParamValueFromContext } from \"./ParamValueFromContext\";\n\nexport interface AlpParamsContext {\n params: ParamValueFromContext;\n validParams: ParamValueFromContext;\n namedRouteParam: (name: string) => string | undefined;\n otherRouteParam: (position: number) => string | undefined;\n /** @deprecated use namedRouteParam */\n namedParam: never;\n /** @deprecated use otherRouteParam */\n otherParam: never;\n queryParam: (name: string) => string | undefined;\n bodyParam: <T>(name: string) => T | undefined;\n}\n\nexport interface AlpParamsRequest {\n searchParams: URLSearchParams;\n}\n\nexport default function alpParams(app: AlpNodeApp): void {\n Object.assign(app.context, {\n namedRouteParam(this: Context, name: string): string | undefined {\n const namedParams = this.route.namedParams;\n return namedParams?.get(name);\n },\n\n queryParam(this: Context, name: string): string | undefined {\n const searchParams = this.request.searchParams;\n return searchParams.get(name) ?? undefined;\n },\n\n bodyParam<T>(this: Context, name: string): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (this.body as any)[name];\n },\n });\n\n defineLazyProperty(\n app.request,\n \"searchParams\",\n function searchParams(this: Context[\"request\"]): URLSearchParams {\n return new URLSearchParams(this.search);\n },\n );\n\n defineLazyProperty(\n app.context,\n \"params\",\n function params(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValidationResult());\n },\n );\n\n defineLazyProperty(\n app.context,\n \"validParams\",\n function validParams(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValid(this));\n },\n );\n}\n","import IntlMessageFormatDefault from \"intl-messageformat\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst IntlMessageFormat: typeof IntlMessageFormatDefault =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (IntlMessageFormatDefault as any).default || IntlMessageFormatDefault;\n\nexport type Translations = Readonly<Record<string, IntlMessageFormatDefault>>;\n\nexport default function load(\n translations: Readonly<Record<string, unknown>>,\n language: string,\n): Translations {\n const result: Record<string, IntlMessageFormatDefault> = {};\n\n (function loadMap(record: Record<string, unknown>, prefix: string) {\n Object.entries(record).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n loadMap(value as Record<string, unknown>, `${prefix}${key}.`);\n return;\n }\n\n result[`${prefix}${key}`] = new IntlMessageFormat(\n value as string,\n language,\n );\n });\n })(translations, \"\");\n\n return result;\n}\n","import { Logger } from \"nightingale-logger\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport type { Translations } from \"./load\";\nimport load from \"./load\";\n\nconst logger = new Logger(\"alp:translate\");\n\ntype Args = Record<string, any>;\n\nexport interface TranslateBaseContext {\n t: (id: string, args: Args) => string;\n}\nexport interface TranslateContext {\n readonly language: string;\n}\n\nexport default function alpTranslate(\n dirname: string,\n): (app: AlpNodeApp) => void {\n dirname = dirname.replace(/\\/*$/, \"/\");\n return (app: AlpNodeApp) => {\n const appTranslations = new Map<string, Translations>();\n\n Object.assign(app.context, {\n t(this: Context, id: string, args: Args): string {\n const msg = appTranslations.get(this.language)?.[id];\n if (!msg) {\n logger.warn(\"invalid msg\", { language: this.language, id });\n return id;\n }\n\n return msg.format(args) as string;\n },\n });\n\n const config = app.config;\n\n config.get<string[]>(\"availableLanguages\").forEach((language) => {\n const translations = app.loadConfigSync(dirname + language);\n appTranslations.set(language, load(translations, language));\n });\n\n return appTranslations;\n };\n}\n","import type {\n IncomingMessage,\n RequestListener,\n Server,\n ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport Koa from \"koa\";\nimport type { DefaultContext, DefaultState, ParameterizedContext } from \"koa\";\nimport compress from \"koa-compress\";\nimport serve from \"koa-static\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Router } from \"router-segments\";\nimport type { Config } from \"./config\";\nimport errors from \"./errors\";\nimport type { AlpLanguageContext } from \"./language\";\nimport language from \"./language\";\nimport _listen from \"./listen\";\nimport type { AlpParamsContext, AlpParamsRequest } from \"./params/index\";\nimport params from \"./params/index\";\nimport type {\n AlpRouteRef,\n RouterContext as AlpRouterContext,\n UrlGenerator,\n} from \"./router\";\nimport type { TranslateBaseContext, TranslateContext } from \"./translate/index\";\nimport translate from \"./translate/index\";\nimport type {\n Context as AlpContext,\n ContextSanitizedState,\n ContextState,\n NodeApplication,\n NodeConfig,\n} from \"./types\";\n\nconst logger = new Logger(\"alp\");\n\nexport interface AlpNodeAppOptions {\n appDirname: string;\n packageDirname: string;\n config: Config & NodeConfig;\n certPath?: string;\n publicPath?: string;\n}\n\ndeclare module \"koa\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface DefaultState extends ContextState {}\n\n interface DefaultContext\n extends AlpContext,\n AlpParamsContext,\n AlpRouterContext,\n AlpLanguageContext,\n TranslateContext {}\n\n interface BaseContext extends AlpContext, TranslateBaseContext {\n urlGenerator: UrlGenerator;\n redirectTo: <P extends Record<string, unknown>>(\n to: string,\n params?: P,\n ) => void;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface BaseRequest extends AlpParamsRequest {}\n}\n\nexport class AlpNodeApp\n extends Koa<DefaultState, DefaultContext>\n implements NodeApplication\n{\n dirname: string;\n\n certPath: string;\n\n publicPath: string;\n\n config: Config & NodeConfig;\n\n _server?: Server;\n\n router?: Router<any, AlpRouteRef>;\n\n /**\n * @param {Object} [options]\n * @param {string} [options.certPath] directory of the ssl certificates\n * @param {string} [options.publicPath] directory of public files\n */\n constructor({\n appDirname,\n packageDirname,\n config,\n certPath,\n publicPath,\n }: AlpNodeAppOptions) {\n super();\n\n this.dirname = path.normalize(appDirname);\n this.certPath = certPath || `${packageDirname}/config/cert`;\n this.publicPath = publicPath || `${packageDirname}/public/`;\n\n this.config = config;\n this.context.config = this.config;\n\n params(this);\n language(this);\n translate(\"locales\")(this);\n\n this.use(compress());\n }\n\n existsConfigSync(name: string): ReturnType<Config[\"existsConfigSync\"]> {\n return this.config.existsConfigSync(name);\n }\n\n loadConfigSync(name: string): ReturnType<Config[\"loadConfigSync\"]> {\n return this.config.loadConfigSync(name);\n }\n\n override createContext<StateT = DefaultState>(\n req: IncomingMessage,\n res: ServerResponse,\n ): ParameterizedContext<StateT> {\n const ctx = super.createContext<StateT>(req, res);\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ctx.sanitizedState = {} as ContextSanitizedState;\n return ctx;\n }\n\n servePublic(): void {\n this.use(serve(this.publicPath)); // static files\n }\n\n catchErrors(): void {\n this.use(errors);\n }\n\n override listen(): never {\n throw new Error(\"Use start instead\");\n }\n\n /**\n * Close server and emit close event\n */\n close(): void {\n if (this._server) {\n this._server.close();\n this.emit(\"close\");\n }\n }\n\n async start(fn: () => Promise<void> | void): Promise<Server> {\n await fn();\n try {\n const server = await _listen(\n this.config,\n this.callback() as RequestListener,\n this.certPath,\n );\n this._server = server;\n logger.success(\"started\");\n if (process.send) process.send(\"ready\");\n return server;\n } catch (error: unknown) {\n logger.error(\"start fail\", { err: error });\n throw error;\n }\n }\n}\n\nexport type { Context } from \"koa\";\n\nexport { type NodeApplication } from \"./types\";\n"],"names":["logger","createServerHttps","createServerHttp","params","language","translate","errors","_listen"],"mappings":"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"}
1
+ {"version":3,"file":"AlpNodeApp-node.mjs","sources":["../src/errors.ts","../src/language.ts","../src/listen.ts","../src/params/ParamValidationResult.ts","../src/params/ParamValid.ts","../src/params/ParamValueValidator.ts","../src/params/ParamValueStringValidator.ts","../src/params/ParamValueFromContext.ts","../src/params/index.ts","../src/translate/load.ts","../src/translate/index.ts","../src/AlpNodeApp.ts"],"sourcesContent":["import { STATUS_CODES } from \"node:http\";\nimport ErrorHtmlRenderer from \"error-html\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { Context } from \"./AlpNodeApp\";\nimport type { HtmlError } from \"./types\";\n\nconst logger = new Logger(\"alp:errors\");\nconst errorHtmlRenderer = new ErrorHtmlRenderer({\n appPath: `${process.cwd()}/`,\n});\n\nexport default async function alpNodeErrors(\n ctx: Context,\n next: () => Promise<void> | void,\n): Promise<void> {\n try {\n await next();\n } catch (error: unknown) {\n // eslint-disable-next-line no-ex-assign\n if (!error) error = new Error(\"Unknown error\");\n // eslint-disable-next-line no-ex-assign\n if (typeof error === \"string\") error = new Error(error);\n\n ctx.status = (error as HtmlError).status || 500;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n logger.error(error as any);\n\n switch (ctx.request.accepts(\"html\", \"text\", \"json\")) {\n case \"json\":\n ctx.type = \"application/json\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = { error: (error as Error).message };\n } else {\n ctx.body = { error: STATUS_CODES[ctx.status] };\n }\n\n break;\n\n case \"html\":\n ctx.type = \"text/html\";\n if (process.env.NODE_ENV !== \"production\") {\n ctx.body = errorHtmlRenderer.render(error as Error);\n } else if ((error as HtmlError).expose) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n\n case \"text\":\n case false:\n default:\n ctx.type = \"text/plain\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n }\n }\n}\n","import type { Context } from \"koa\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp } from \"./AlpNodeApp\";\n\nexport interface AlpLanguageContext {\n readonly firstAcceptedLanguage: string;\n readonly language: string;\n}\nexport default function alpLanguage(app: AlpNodeApp): void {\n const config = app.context.config;\n const availableLanguages: string[] = config.get(\"availableLanguages\");\n if (!availableLanguages) {\n throw new Error('Missing config \"availableLanguages\"');\n }\n\n defineLazyProperty(\n app.context,\n \"language\",\n function language(this: Context): string {\n return (\n this.acceptsLanguages(availableLanguages) ||\n availableLanguages[0] ||\n \"en\"\n );\n },\n );\n\n defineLazyProperty(\n app.context,\n \"firstAcceptedLanguage\",\n function firstAcceptedLanguage(this: Context): string {\n return this.acceptsLanguages()[0] || availableLanguages[0] || \"en\";\n },\n );\n}\n","import { chmodSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { createServer as createServerHttp } from \"node:http\";\nimport type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport { createServer as createServerHttps } from \"node:https\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { Config } from \"./config\";\n\nconst logger = new Logger(\"alp:listen\");\n\ntype RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\nconst createServer = (\n callback: RequestListener,\n socketPath?: string,\n tls?: boolean,\n dirname = \"\",\n // eslint-disable-next-line @typescript-eslint/max-params\n): Server => {\n const createHttpServer =\n !socketPath && tls ? createServerHttps : createServerHttp;\n\n if (!tls) {\n return (createHttpServer as typeof createServerHttps)(callback);\n }\n\n const options = {\n key: readFileSync(`${dirname}/server.key`),\n cert: readFileSync(`${dirname}/server.crt`),\n };\n\n return (createHttpServer as typeof createServerHttps)(options, callback);\n};\n\nexport default function alpListen(\n config: Config,\n callback: RequestListener,\n dirname?: string,\n): Promise<Server> {\n return new Promise((resolve) => {\n const socketPath = config.get<string>(\"socketPath\");\n const port = config.get<number>(\"port\");\n const hostname = config.get<string>(\"hostname\");\n const tls = config.get<boolean>(\"tls\");\n\n logger.info(\"Creating server\", socketPath ? { socketPath } : { port });\n const server = createServer(callback, socketPath, tls, dirname);\n\n if (socketPath) {\n try {\n unlinkSync(socketPath);\n } catch {}\n\n server.listen(socketPath, () => {\n if (socketPath) {\n chmodSync(socketPath, \"777\");\n }\n\n logger.info(\"Server listening\", { socketPath });\n resolve(server);\n });\n } else {\n server.listen(port, hostname, () => {\n logger.info(\"Server listening\", { port });\n resolve(server);\n });\n }\n });\n}\n","export type Errors = Record<string, any>;\n\nexport class ParamValidationResult {\n _errors?: Errors;\n\n _error(name: string, key: string, value: unknown): void {\n if (!this._errors) {\n this._errors = {};\n }\n\n this._errors[name] = { error: key, value };\n }\n\n getErrors(): Errors | undefined {\n return this._errors;\n }\n\n hasErrors(): boolean {\n return this._errors !== undefined;\n }\n\n isValid(): boolean {\n return this._errors === undefined;\n }\n\n // string(name: string): ParamValueStringValidator {\n // return new ParamValueStringValidator(this, name, this.context.param(name));\n // }\n /* int(name, position) {\n return new ParamValueIntValidator(this, name, this.context.param(name, position));\n }\n model(modelName, name) {\n name = name || S.string.lcFirst(modelName);\n console.log('paramvalidator model', modelName, M[modelName]);\n let data = this.context.getOrPostParam(name);\n return new ParamValueModelValidator(this, name, !data ? null : new M[modelName](data));\n } */\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValid extends ParamValidationResult {\n context: Context;\n\n constructor(context: Context) {\n super();\n this.context = context;\n }\n\n override _error(): void {\n this.context.throw(400, \"Invalid params\", { validator: this });\n }\n}\n","import type { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValueValidator<T> {\n readonly validationResult: ParamValidationResult;\n\n readonly name: string;\n\n readonly value: T;\n\n constructor(validationResult: ParamValidationResult, name: string, value: T) {\n this.validationResult = validationResult;\n this.name = name;\n this.value = value;\n }\n\n isValid(): boolean {\n return this.validationResult.isValid();\n }\n\n _error(key: string): void {\n this.validationResult._error(this.name, key, this.value);\n }\n}\n","import ParamValueValidator from \"./ParamValueValidator\";\n\nexport default class ParamValueStringValidator<\n T extends string = string,\n> extends ParamValueValidator<T | null | undefined> {\n notEmpty(): ParamValueValidator<T> {\n if (this.value == null || this.value.trim() === \"\") {\n this._error(\"notEmpty\");\n }\n\n return this as ParamValueValidator<T>;\n }\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport type { ParamValidationResult } from \"./ParamValidationResult\";\nimport ParamValueStringValidator from \"./ParamValueStringValidator\";\n\nexport class ParamValueFromContext {\n readonly validationResult: ParamValidationResult;\n\n readonly context: Context;\n\n constructor(context: Context, validationResult: ParamValidationResult) {\n this.validationResult = validationResult;\n this.context = context;\n }\n\n namedParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.namedRouteParam(name),\n );\n }\n\n otherParam(position: number): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n String(position),\n this.context.otherRouteParam(position),\n );\n }\n\n queryParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.queryParam(name),\n );\n }\n\n // bodyParam: <T>(name: string): ParamValueValidator<string | undefined> {\n\n // }\n}\n","// eslint-disable-next-line import-x/no-unresolved\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport ParamValid from \"./ParamValid\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\nimport { ParamValueFromContext } from \"./ParamValueFromContext\";\n\nexport interface AlpParamsContext {\n params: ParamValueFromContext;\n validParams: ParamValueFromContext;\n namedRouteParam: (name: string) => string | undefined;\n otherRouteParam: (position: number) => string | undefined;\n /** @deprecated use namedRouteParam */\n namedParam: never;\n /** @deprecated use otherRouteParam */\n otherParam: never;\n queryParam: (name: string) => string | undefined;\n bodyParam: <T>(name: string) => T | undefined;\n}\n\nexport interface AlpParamsRequest {\n searchParams: URLSearchParams;\n}\n\nexport default function alpParams(app: AlpNodeApp): void {\n Object.assign(app.context, {\n namedRouteParam(this: Context, name: string): string | undefined {\n const namedParams = this.route.namedParams;\n return namedParams?.get(name);\n },\n\n queryParam(this: Context, name: string): string | undefined {\n const searchParams = this.request.searchParams;\n return searchParams.get(name) ?? undefined;\n },\n\n bodyParam<T>(this: Context, name: string): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (this.body as any)[name];\n },\n });\n\n defineLazyProperty(\n app.request,\n \"searchParams\",\n function searchParams(this: Context[\"request\"]): URLSearchParams {\n return new URLSearchParams(this.search);\n },\n );\n\n defineLazyProperty(\n app.context,\n \"params\",\n function params(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValidationResult());\n },\n );\n\n defineLazyProperty(\n app.context,\n \"validParams\",\n function validParams(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValid(this));\n },\n );\n}\n","import IntlMessageFormatDefault from \"intl-messageformat\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst IntlMessageFormat: typeof IntlMessageFormatDefault =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (IntlMessageFormatDefault as any).default || IntlMessageFormatDefault;\n\nexport type Translations = Readonly<Record<string, IntlMessageFormatDefault>>;\n\nexport default function load(\n translations: Readonly<Record<string, unknown>>,\n language: string,\n): Translations {\n const result: Record<string, IntlMessageFormatDefault> = {};\n\n (function loadMap(record: Record<string, unknown>, prefix: string) {\n Object.entries(record).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n loadMap(value as Record<string, unknown>, `${prefix}${key}.`);\n return;\n }\n\n result[`${prefix}${key}`] = new IntlMessageFormat(\n value as string,\n language,\n );\n });\n })(translations, \"\");\n\n return result;\n}\n","// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport type { Translations } from \"./load\";\nimport load from \"./load\";\n\nconst logger = new Logger(\"alp:translate\");\n\ntype Args = Record<string, any>;\n\nexport interface TranslateBaseContext {\n t: (id: string, args: Args) => string;\n}\nexport interface TranslateContext {\n readonly language: string;\n}\n\nexport default function alpTranslate(\n dirname: string,\n): (app: AlpNodeApp) => void {\n dirname = dirname.replace(/\\/*$/, \"/\");\n return (app: AlpNodeApp) => {\n const appTranslations = new Map<string, Translations>();\n\n Object.assign(app.context, {\n t(this: Context, id: string, args: Args): string {\n const msg = appTranslations.get(this.language)?.[id];\n if (!msg) {\n logger.warn(\"invalid msg\", { language: this.language, id });\n return id;\n }\n\n return msg.format(args) as string;\n },\n });\n\n const config = app.config;\n\n config.get<string[]>(\"availableLanguages\").forEach((language) => {\n const translations = app.loadConfigSync(dirname + language);\n appTranslations.set(language, load(translations, language));\n });\n\n return appTranslations;\n };\n}\n","import type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport Koa from \"koa\";\nimport type { DefaultContext, DefaultState, ParameterizedContext } from \"koa\";\nimport compress from \"koa-compress\";\nimport serve from \"koa-static\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { Router } from \"router-segments\";\nimport type { Config } from \"./config\";\nimport errors from \"./errors\";\nimport type { AlpLanguageContext } from \"./language\";\nimport language from \"./language\";\nimport _listen from \"./listen\";\nimport type { AlpParamsContext, AlpParamsRequest } from \"./params/index\";\nimport params from \"./params/index\";\nimport type {\n AlpRouteRef,\n RouterContext as AlpRouterContext,\n UrlGenerator,\n} from \"./router\";\nimport type { TranslateBaseContext, TranslateContext } from \"./translate/index\";\nimport translate from \"./translate/index\";\nimport type {\n Context as AlpContext,\n ContextState,\n NodeApplication,\n NodeConfig,\n} from \"./types\";\n\nconst logger = new Logger(\"alp\");\n\nexport interface AlpNodeAppOptions {\n appDirname: string;\n packageDirname: string;\n config: Config & NodeConfig;\n certPath?: string;\n publicPath?: string;\n}\n\ndeclare module \"koa\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface DefaultState extends ContextState {}\n\n interface DefaultContext\n extends\n AlpContext,\n AlpParamsContext,\n AlpRouterContext,\n AlpLanguageContext,\n TranslateContext {}\n\n interface BaseContext extends AlpContext, TranslateBaseContext {\n urlGenerator: UrlGenerator;\n redirectTo: <P extends Record<string, unknown>>(\n to: string,\n params?: P,\n ) => void;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface BaseRequest extends AlpParamsRequest {}\n}\n\nexport class AlpNodeApp\n extends Koa<DefaultState, DefaultContext>\n implements NodeApplication\n{\n dirname: string;\n\n certPath: string;\n\n publicPath: string;\n\n config: Config & NodeConfig;\n\n _server?: Server;\n\n router?: Router<any, AlpRouteRef>;\n\n /**\n * @param {Object} [options]\n * @param {string} [options.certPath] directory of the ssl certificates\n * @param {string} [options.publicPath] directory of public files\n */\n constructor({\n appDirname,\n packageDirname,\n config,\n certPath,\n publicPath,\n }: AlpNodeAppOptions) {\n super();\n\n this.dirname = path.normalize(appDirname);\n this.certPath = certPath || `${packageDirname}/config/cert`;\n this.publicPath = publicPath || `${packageDirname}/public/`;\n\n this.config = config;\n this.context.config = this.config;\n\n params(this);\n language(this);\n translate(\"locales\")(this);\n\n this.use(compress());\n }\n\n existsConfigSync(name: string): ReturnType<Config[\"existsConfigSync\"]> {\n return this.config.existsConfigSync(name);\n }\n\n loadConfigSync(name: string): ReturnType<Config[\"loadConfigSync\"]> {\n return this.config.loadConfigSync(name);\n }\n\n override createContext<StateT = DefaultState>(\n req: IncomingMessage,\n res: ServerResponse,\n ): ParameterizedContext<StateT> {\n const ctx = super.createContext<StateT>(req, res);\n ctx.sanitizedState = {};\n return ctx;\n }\n\n servePublic(): void {\n this.use(serve(this.publicPath)); // static files\n }\n\n catchErrors(): void {\n this.use(errors);\n }\n\n override listen(): never {\n throw new Error(\"Use start instead\");\n }\n\n /**\n * Close server and emit close event\n */\n close(): void {\n if (this._server) {\n this._server.close();\n this.emit(\"close\");\n }\n }\n\n async start(fn: () => Promise<void> | void): Promise<Server> {\n await fn();\n try {\n const server = await _listen(\n this.config,\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.callback(),\n this.certPath,\n );\n this._server = server;\n logger.success(\"started\");\n if (process.send) process.send(\"ready\");\n return server;\n } catch (error: unknown) {\n logger.error(\"start fail\", { err: error });\n throw error;\n }\n }\n}\n\nexport type { Context } from \"koa\";\n\nexport { type NodeApplication } from \"./types\";\n"],"names":["logger","createServerHttps","createServerHttp","params","language","translate","errors","_listen"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlpNodeApp.d.ts","sourceRoot":"","sources":["../../src/AlpNodeApp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AlpNodeApp.d.ts","sourceRoot":"","sources":["../../src/AlpNodeApp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQ5C,wBAA8B,aAAa,CACzC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC/B,OAAO,CAAC,IAAI,CAAC,CAuDf"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQ5C,wBAA8B,aAAa,CACzC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC/B,OAAO,CAAC,IAAI,CAAC,CAuDf"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,YAAY,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,eAAO,MAAM,UAAU,QAAwB,CAAC;AAQhD,eAAO,MAAM,cAAc,QAA4B,CAAC;AAIxD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAEtB,CAAC;AAO7B,eAAO,MAAM,MAAM,uCAAqD,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,iBAAiB,EACjB,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAC3C,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,UAAU;gBAC7B,OAAO,CAAC,EAAE,UAAU;CAQjC;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EACL,OAAO,IAAI,MAAM,EACjB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,YAAY,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,eAAO,MAAM,UAAU,QAAwB,CAAC;AAMhD,eAAO,MAAM,cAAc,QAA4B,CAAC;AAIxD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAEtB,CAAC;AAO7B,eAAO,MAAM,MAAM,uCAAqD,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,iBAAiB,EACjB,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAC3C,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,UAAU;gBAC7B,OAAO,CAAC,EAAE,UAAU;CAQjC;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EACL,OAAO,IAAI,MAAM,EACjB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/language.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AACD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CA0BzD"}
1
+ {"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/language.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AACD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CA0BzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../src/listen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;AAwB3E,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
1
+ {"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../src/listen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;AAwB3E,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/params/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,WAAW,EAAE,qBAAqB,CAAC;IACnC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACtD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,sCAAsC;IACtC,UAAU,EAAE,KAAK,CAAC;IAClB,sCAAsC;IACtC,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAyCvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/params/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,WAAW,EAAE,qBAAqB,CAAC;IACnC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACtD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,sCAAsC;IACtC,UAAU,EAAE,KAAK,CAAC;IAClB,sCAAsC;IACtC,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAyCvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,aAAa,EACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,UAAU,IAAI,MAAM,CACxD,OAAO,EACP,WAAW,CACZ,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjE,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;CACrC;AACD,eAAO,MAAM,sBAAsB,GACjC,OAAO,SAAS,UAAU,OACvB,aAAa,CAAC,OAAO,EAAE,WAAW,CACM,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACvE,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,CAAC,KACP,MAAM,CAAC;AAEZ,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAO,SAAS,MAAM,EACtD,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GACnC,UAAU,CAgCZ"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,aAAa,EACd,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,UAAU,IAAI,MAAM,CACxD,OAAO,EACP,WAAW,CACZ,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjE,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;CACrC;AACD,eAAO,MAAM,sBAAsB,GACjC,OAAO,SAAS,UAAU,OACvB,aAAa,CAAC,OAAO,EAAE,WAAW,CACM,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACvE,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,CAAC,KACP,MAAM,CAAC;AAEZ,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAO,SAAS,MAAM,EACtD,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GACnC,UAAU,CAgCZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/translate/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,eAAe,CAAC;AAMzD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;CACvC;AACD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CA0B3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/translate/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,eAAe,CAAC;AAMzD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,oBAAoB;IACnC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;CACvC;AACD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CA0B3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhD,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAGD,MAAM,WAAW,YAAY;CAAG;AAGhC,MAAM,WAAW,qBAAqB;CAAG;AAEzC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAQ,SAAQ,WAAW;IAC1C,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,qBAAqB;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;CACnD;AAED,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC3D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,aAAa,EAAE,MAAM,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eACf,SAAQ,WAAW,EACjB,yBAAyB;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;CACnD;AAED,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhD,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAGD,MAAM,WAAW,YAAY;CAAG;AAGhC,MAAM,WAAW,qBAAqB;CAAG;AAEzC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAQ,SAAQ,WAAW;IAC1C,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,qBAAqB;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;CACnD;AAED,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC3D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,aAAa,EAAE,MAAM,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eACf,SAAQ,WAAW,EAAE,yBAAyB;IAC9C,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;CACnD;AAED,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;CACf"}
@@ -368,6 +368,7 @@ class AlpNodeApp extends Koa {
368
368
  try {
369
369
  const server = await alpListen(
370
370
  this.config,
371
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
371
372
  this.callback(),
372
373
  this.certPath
373
374
  );
@@ -490,9 +491,7 @@ const logger = new Logger("alp");
490
491
  const appDirname = path.resolve("build");
491
492
  const packagePath = path.resolve("package.json");
492
493
  if (!packagePath) {
493
- throw new Error(
494
- `Could not find package.json: "${String(packagePath)}"`
495
- );
494
+ throw new Error(`Could not find package.json: "${packagePath}"`);
496
495
  }
497
496
  const packageDirname = path.dirname(packagePath);
498
497
  logger.debug("init", { appDirname, packageDirname });
@@ -1 +1 @@
1
- {"version":3,"file":"index-node.mjs","sources":["../src/errors.ts","../src/language.ts","../src/listen.ts","../src/params/ParamValidationResult.ts","../src/params/ParamValid.ts","../src/params/ParamValueValidator.ts","../src/params/ParamValueStringValidator.ts","../src/params/ParamValueFromContext.ts","../src/params/index.ts","../src/translate/load.ts","../src/translate/index.ts","../src/AlpNodeApp.ts","../src/config.ts","../src/router.ts","../src/index.ts"],"sourcesContent":["import { STATUS_CODES } from \"node:http\";\nimport ErrorHtmlRenderer from \"error-html\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Context } from \"./AlpNodeApp\";\nimport type { HtmlError } from \"./types\";\n\nconst logger = new Logger(\"alp:errors\");\nconst errorHtmlRenderer = new ErrorHtmlRenderer({\n appPath: `${process.cwd()}/`,\n});\n\nexport default async function alpNodeErrors(\n ctx: Context,\n next: () => Promise<void> | void,\n): Promise<void> {\n try {\n await next();\n } catch (error: unknown) {\n // eslint-disable-next-line no-ex-assign\n if (!error) error = new Error(\"Unknown error\");\n // eslint-disable-next-line no-ex-assign\n if (typeof error === \"string\") error = new Error(error);\n\n ctx.status = (error as HtmlError).status || 500;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n logger.error(error as any);\n\n switch (ctx.request.accepts(\"html\", \"text\", \"json\")) {\n case \"json\":\n ctx.type = \"application/json\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = { error: (error as Error).message };\n } else {\n ctx.body = { error: STATUS_CODES[ctx.status] };\n }\n\n break;\n\n case \"html\":\n ctx.type = \"text/html\";\n if (process.env.NODE_ENV !== \"production\") {\n ctx.body = errorHtmlRenderer.render(error as Error);\n } else if ((error as HtmlError).expose) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n\n case \"text\":\n case false:\n default:\n ctx.type = \"text/plain\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n }\n }\n}\n","import type { Context } from \"koa\";\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp } from \"./AlpNodeApp\";\n\nexport interface AlpLanguageContext {\n readonly firstAcceptedLanguage: string;\n readonly language: string;\n}\nexport default function alpLanguage(app: AlpNodeApp): void {\n const config = app.context.config;\n const availableLanguages: string[] = config.get(\"availableLanguages\");\n if (!availableLanguages) {\n throw new Error('Missing config \"availableLanguages\"');\n }\n\n defineLazyProperty(\n app.context,\n \"language\",\n function language(this: Context): string {\n return (\n this.acceptsLanguages(availableLanguages) ||\n availableLanguages[0] ||\n \"en\"\n );\n },\n );\n\n defineLazyProperty(\n app.context,\n \"firstAcceptedLanguage\",\n function firstAcceptedLanguage(this: Context): string {\n return this.acceptsLanguages()[0] || availableLanguages[0] || \"en\";\n },\n );\n}\n","import { chmodSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { createServer as createServerHttp } from \"node:http\";\nimport type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport { createServer as createServerHttps } from \"node:https\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Config } from \"./config\";\n\nconst logger = new Logger(\"alp:listen\");\n\ntype RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\nconst createServer = (\n callback: RequestListener,\n socketPath?: string,\n tls?: boolean,\n dirname = \"\",\n // eslint-disable-next-line @typescript-eslint/max-params\n): Server => {\n const createHttpServer =\n !socketPath && tls ? createServerHttps : createServerHttp;\n\n if (!tls) {\n return (createHttpServer as typeof createServerHttps)(callback);\n }\n\n const options = {\n key: readFileSync(`${dirname}/server.key`),\n cert: readFileSync(`${dirname}/server.crt`),\n };\n\n return (createHttpServer as typeof createServerHttps)(options, callback);\n};\n\nexport default function alpListen(\n config: Config,\n callback: RequestListener,\n dirname?: string,\n): Promise<Server> {\n return new Promise((resolve) => {\n const socketPath = config.get<string>(\"socketPath\");\n const port = config.get<number>(\"port\");\n const hostname = config.get<string>(\"hostname\");\n const tls = config.get<boolean>(\"tls\");\n\n logger.info(\"Creating server\", socketPath ? { socketPath } : { port });\n const server = createServer(callback, socketPath, tls, dirname);\n\n if (socketPath) {\n try {\n unlinkSync(socketPath);\n } catch {}\n\n server.listen(socketPath, () => {\n if (socketPath) {\n chmodSync(socketPath, \"777\");\n }\n\n logger.info(\"Server listening\", { socketPath });\n resolve(server);\n });\n } else {\n server.listen(port, hostname, () => {\n logger.info(\"Server listening\", { port });\n resolve(server);\n });\n }\n });\n}\n","export type Errors = Record<string, any>;\n\nexport class ParamValidationResult {\n _errors?: Errors;\n\n _error(name: string, key: string, value: unknown): void {\n if (!this._errors) {\n this._errors = {};\n }\n\n this._errors[name] = { error: key, value };\n }\n\n getErrors(): Errors | undefined {\n return this._errors;\n }\n\n hasErrors(): boolean {\n return this._errors !== undefined;\n }\n\n isValid(): boolean {\n return this._errors === undefined;\n }\n\n // string(name: string): ParamValueStringValidator {\n // return new ParamValueStringValidator(this, name, this.context.param(name));\n // }\n /* int(name, position) {\n return new ParamValueIntValidator(this, name, this.context.param(name, position));\n }\n model(modelName, name) {\n name = name || S.string.lcFirst(modelName);\n console.log('paramvalidator model', modelName, M[modelName]);\n let data = this.context.getOrPostParam(name);\n return new ParamValueModelValidator(this, name, !data ? null : new M[modelName](data));\n } */\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValid extends ParamValidationResult {\n context: Context;\n\n constructor(context: Context) {\n super();\n this.context = context;\n }\n\n override _error(): void {\n this.context.throw(400, \"Invalid params\", { validator: this });\n }\n}\n","import type { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValueValidator<T> {\n readonly validationResult: ParamValidationResult;\n\n readonly name: string;\n\n readonly value: T;\n\n constructor(validationResult: ParamValidationResult, name: string, value: T) {\n this.validationResult = validationResult;\n this.name = name;\n this.value = value;\n }\n\n isValid(): boolean {\n return this.validationResult.isValid();\n }\n\n _error(key: string): void {\n this.validationResult._error(this.name, key, this.value);\n }\n}\n","import ParamValueValidator from \"./ParamValueValidator\";\n\nexport default class ParamValueStringValidator<\n T extends string = string,\n> extends ParamValueValidator<T | null | undefined> {\n notEmpty(): ParamValueValidator<T> {\n if (this.value == null || this.value.trim() === \"\") {\n this._error(\"notEmpty\");\n }\n\n return this as ParamValueValidator<T>;\n }\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport type { ParamValidationResult } from \"./ParamValidationResult\";\nimport ParamValueStringValidator from \"./ParamValueStringValidator\";\n\nexport class ParamValueFromContext {\n readonly validationResult: ParamValidationResult;\n\n readonly context: Context;\n\n constructor(context: Context, validationResult: ParamValidationResult) {\n this.validationResult = validationResult;\n this.context = context;\n }\n\n namedParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.namedRouteParam(name),\n );\n }\n\n otherParam(position: number): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n String(position),\n this.context.otherRouteParam(position),\n );\n }\n\n queryParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.queryParam(name),\n );\n }\n\n // bodyParam: <T>(name: string): ParamValueValidator<string | undefined> {\n\n // }\n}\n","import { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport ParamValid from \"./ParamValid\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\nimport { ParamValueFromContext } from \"./ParamValueFromContext\";\n\nexport interface AlpParamsContext {\n params: ParamValueFromContext;\n validParams: ParamValueFromContext;\n namedRouteParam: (name: string) => string | undefined;\n otherRouteParam: (position: number) => string | undefined;\n /** @deprecated use namedRouteParam */\n namedParam: never;\n /** @deprecated use otherRouteParam */\n otherParam: never;\n queryParam: (name: string) => string | undefined;\n bodyParam: <T>(name: string) => T | undefined;\n}\n\nexport interface AlpParamsRequest {\n searchParams: URLSearchParams;\n}\n\nexport default function alpParams(app: AlpNodeApp): void {\n Object.assign(app.context, {\n namedRouteParam(this: Context, name: string): string | undefined {\n const namedParams = this.route.namedParams;\n return namedParams?.get(name);\n },\n\n queryParam(this: Context, name: string): string | undefined {\n const searchParams = this.request.searchParams;\n return searchParams.get(name) ?? undefined;\n },\n\n bodyParam<T>(this: Context, name: string): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (this.body as any)[name];\n },\n });\n\n defineLazyProperty(\n app.request,\n \"searchParams\",\n function searchParams(this: Context[\"request\"]): URLSearchParams {\n return new URLSearchParams(this.search);\n },\n );\n\n defineLazyProperty(\n app.context,\n \"params\",\n function params(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValidationResult());\n },\n );\n\n defineLazyProperty(\n app.context,\n \"validParams\",\n function validParams(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValid(this));\n },\n );\n}\n","import IntlMessageFormatDefault from \"intl-messageformat\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst IntlMessageFormat: typeof IntlMessageFormatDefault =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (IntlMessageFormatDefault as any).default || IntlMessageFormatDefault;\n\nexport type Translations = Readonly<Record<string, IntlMessageFormatDefault>>;\n\nexport default function load(\n translations: Readonly<Record<string, unknown>>,\n language: string,\n): Translations {\n const result: Record<string, IntlMessageFormatDefault> = {};\n\n (function loadMap(record: Record<string, unknown>, prefix: string) {\n Object.entries(record).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n loadMap(value as Record<string, unknown>, `${prefix}${key}.`);\n return;\n }\n\n result[`${prefix}${key}`] = new IntlMessageFormat(\n value as string,\n language,\n );\n });\n })(translations, \"\");\n\n return result;\n}\n","import { Logger } from \"nightingale-logger\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport type { Translations } from \"./load\";\nimport load from \"./load\";\n\nconst logger = new Logger(\"alp:translate\");\n\ntype Args = Record<string, any>;\n\nexport interface TranslateBaseContext {\n t: (id: string, args: Args) => string;\n}\nexport interface TranslateContext {\n readonly language: string;\n}\n\nexport default function alpTranslate(\n dirname: string,\n): (app: AlpNodeApp) => void {\n dirname = dirname.replace(/\\/*$/, \"/\");\n return (app: AlpNodeApp) => {\n const appTranslations = new Map<string, Translations>();\n\n Object.assign(app.context, {\n t(this: Context, id: string, args: Args): string {\n const msg = appTranslations.get(this.language)?.[id];\n if (!msg) {\n logger.warn(\"invalid msg\", { language: this.language, id });\n return id;\n }\n\n return msg.format(args) as string;\n },\n });\n\n const config = app.config;\n\n config.get<string[]>(\"availableLanguages\").forEach((language) => {\n const translations = app.loadConfigSync(dirname + language);\n appTranslations.set(language, load(translations, language));\n });\n\n return appTranslations;\n };\n}\n","import type {\n IncomingMessage,\n RequestListener,\n Server,\n ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport Koa from \"koa\";\nimport type { DefaultContext, DefaultState, ParameterizedContext } from \"koa\";\nimport compress from \"koa-compress\";\nimport serve from \"koa-static\";\nimport { Logger } from \"nightingale-logger\";\nimport type { Router } from \"router-segments\";\nimport type { Config } from \"./config\";\nimport errors from \"./errors\";\nimport type { AlpLanguageContext } from \"./language\";\nimport language from \"./language\";\nimport _listen from \"./listen\";\nimport type { AlpParamsContext, AlpParamsRequest } from \"./params/index\";\nimport params from \"./params/index\";\nimport type {\n AlpRouteRef,\n RouterContext as AlpRouterContext,\n UrlGenerator,\n} from \"./router\";\nimport type { TranslateBaseContext, TranslateContext } from \"./translate/index\";\nimport translate from \"./translate/index\";\nimport type {\n Context as AlpContext,\n ContextSanitizedState,\n ContextState,\n NodeApplication,\n NodeConfig,\n} from \"./types\";\n\nconst logger = new Logger(\"alp\");\n\nexport interface AlpNodeAppOptions {\n appDirname: string;\n packageDirname: string;\n config: Config & NodeConfig;\n certPath?: string;\n publicPath?: string;\n}\n\ndeclare module \"koa\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface DefaultState extends ContextState {}\n\n interface DefaultContext\n extends AlpContext,\n AlpParamsContext,\n AlpRouterContext,\n AlpLanguageContext,\n TranslateContext {}\n\n interface BaseContext extends AlpContext, TranslateBaseContext {\n urlGenerator: UrlGenerator;\n redirectTo: <P extends Record<string, unknown>>(\n to: string,\n params?: P,\n ) => void;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface BaseRequest extends AlpParamsRequest {}\n}\n\nexport class AlpNodeApp\n extends Koa<DefaultState, DefaultContext>\n implements NodeApplication\n{\n dirname: string;\n\n certPath: string;\n\n publicPath: string;\n\n config: Config & NodeConfig;\n\n _server?: Server;\n\n router?: Router<any, AlpRouteRef>;\n\n /**\n * @param {Object} [options]\n * @param {string} [options.certPath] directory of the ssl certificates\n * @param {string} [options.publicPath] directory of public files\n */\n constructor({\n appDirname,\n packageDirname,\n config,\n certPath,\n publicPath,\n }: AlpNodeAppOptions) {\n super();\n\n this.dirname = path.normalize(appDirname);\n this.certPath = certPath || `${packageDirname}/config/cert`;\n this.publicPath = publicPath || `${packageDirname}/public/`;\n\n this.config = config;\n this.context.config = this.config;\n\n params(this);\n language(this);\n translate(\"locales\")(this);\n\n this.use(compress());\n }\n\n existsConfigSync(name: string): ReturnType<Config[\"existsConfigSync\"]> {\n return this.config.existsConfigSync(name);\n }\n\n loadConfigSync(name: string): ReturnType<Config[\"loadConfigSync\"]> {\n return this.config.loadConfigSync(name);\n }\n\n override createContext<StateT = DefaultState>(\n req: IncomingMessage,\n res: ServerResponse,\n ): ParameterizedContext<StateT> {\n const ctx = super.createContext<StateT>(req, res);\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ctx.sanitizedState = {} as ContextSanitizedState;\n return ctx;\n }\n\n servePublic(): void {\n this.use(serve(this.publicPath)); // static files\n }\n\n catchErrors(): void {\n this.use(errors);\n }\n\n override listen(): never {\n throw new Error(\"Use start instead\");\n }\n\n /**\n * Close server and emit close event\n */\n close(): void {\n if (this._server) {\n this._server.close();\n this.emit(\"close\");\n }\n }\n\n async start(fn: () => Promise<void> | void): Promise<Server> {\n await fn();\n try {\n const server = await _listen(\n this.config,\n this.callback() as RequestListener,\n this.certPath,\n );\n this._server = server;\n logger.success(\"started\");\n if (process.send) process.send(\"ready\");\n return server;\n } catch (error: unknown) {\n logger.error(\"start fail\", { err: error });\n throw error;\n }\n }\n}\n\nexport type { Context } from \"koa\";\n\nexport { type NodeApplication } from \"./types\";\n","import { existsSync, readFileSync } from \"node:fs\";\nimport deepFreeze from \"deep-freeze-es6\";\nimport minimist from \"minimist\";\nimport type { NodeConfig, PackageConfig } from \"./types\";\n\nconst argv = minimist(process.argv.slice(2));\n\nfunction _existsConfigSync(dirname: string, name: string): boolean {\n return existsSync(`${dirname}${name}.json`);\n}\n\nfunction _loadConfigSync(\n dirname: string,\n name: string,\n): Record<string, unknown> {\n const content = readFileSync(`${dirname}${name}.json`, \"utf8\");\n return JSON.parse(content) as Record<string, unknown>;\n}\n\nexport interface ConfigOptions {\n argv?: string[];\n packageConfig?: PackageConfig;\n version?: string;\n}\n\nexport class Config {\n packageConfig?: PackageConfig;\n\n private _record: Record<string, unknown>;\n\n private readonly _dirname: string;\n\n constructor(dirname: string, options?: ConfigOptions) {\n this._record = {};\n this._dirname = dirname.replace(/\\/*$/, \"/\");\n if (options) {\n this.loadSync(options);\n }\n }\n\n loadSync(options: ConfigOptions = {}): Config & NodeConfig {\n const env = process.env.CONFIG_ENV || process.env.NODE_ENV || \"development\";\n const { argv: argvOverrides = [], packageConfig, version } = options;\n this.packageConfig = packageConfig;\n\n const config = _loadConfigSync(this._dirname, \"common\");\n for (const [key, value] of Object.entries(\n _loadConfigSync(this._dirname, env),\n )) {\n config[key] = value;\n }\n\n if (this.existsConfigSync(\"local\")) {\n for (const [key, value] of Object.entries(\n _loadConfigSync(this._dirname, \"local\"),\n )) {\n config[key] = value;\n }\n }\n\n if (config.version) {\n throw new Error('Cannot have \"version\", in config.');\n }\n\n config.version = String(version || argv.version || packageConfig?.version);\n\n const socketPath: string | undefined = (argv.socket ||\n argv[\"socket-path\"] ||\n argv.socketPath) as string | undefined;\n if (socketPath) {\n config.socketPath = socketPath;\n } else if (argv.port) {\n config.port = argv.port;\n delete config.socketPath;\n } else if (process.env.PORT) {\n config.port = Number(process.env.PORT);\n delete config.socketPath;\n }\n\n argvOverrides.forEach((key) => {\n const splitted = key.split(\".\");\n const value =\n splitted.length > 0 &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return,unicorn/no-array-reduce\n splitted.reduce((config, partialKey) => config[partialKey], argv);\n if (value !== undefined) {\n const last = splitted.pop()!;\n const v =\n splitted.length === 0\n ? config\n : // eslint-disable-next-line unicorn/no-array-reduce\n splitted.reduce(\n (config, partialKey) =>\n config[partialKey] as Record<string, unknown>,\n config,\n );\n v[last] = value;\n }\n });\n\n this._record = deepFreeze(config);\n return this as unknown as Config & NodeConfig;\n }\n\n get<T>(key: string): Readonly<T> {\n return this._record[key] as T;\n }\n\n existsConfigSync(name: string): boolean {\n return _existsConfigSync(this._dirname, name);\n }\n\n loadConfigSync(name: string): Readonly<Record<string, unknown>> {\n return _loadConfigSync(this._dirname, name);\n }\n}\n","import type {\n LocaleType,\n RouteMatch,\n Router,\n RouterBuilder,\n} from \"router-segments\";\nimport { createRouterBuilder } from \"router-segments\";\nimport type { AlpNodeApp, Context } from \"./AlpNodeApp\";\n\nexport type AlpRouter<Locales extends LocaleType> = Router<\n Locales,\n AlpRouteRef\n>;\nexport type AlpRouteRef = (ctx: Context) => Promise<void> | void;\ntype ReturnType = (app: AlpNodeApp) => AlpRouteRef;\n\nexport interface RouterContext {\n route: RouteMatch<any, AlpRouteRef>;\n}\nexport const createAlpRouterBuilder = <\n Locales extends LocaleType,\n>(): RouterBuilder<Locales, AlpRouteRef> =>\n createRouterBuilder<Locales, AlpRouteRef>();\n\nexport type UrlGenerator = <P extends Record<string, unknown> | undefined>(\n routeKey: string,\n params?: P,\n) => string;\n\nexport default function alpRouter<Locales extends string>(\n router: Router<Locales, AlpRouteRef>,\n): ReturnType {\n return (app: AlpNodeApp) => {\n app.router = router;\n\n app.context.urlGenerator = function urlGenerator<\n P extends Record<string, unknown> | undefined,\n >(this: Context, routeKey: string, params?: P): string {\n return router.toLocalizedPath(this.language as Locales, routeKey, params);\n };\n\n app.context.redirectTo = function redirectTo<\n P extends Record<string, unknown> | undefined,\n >(this: Context, to: string, params?: P): void {\n this.redirect(\n router.toLocalizedPath(this.language as Locales, to, params),\n );\n };\n\n return async (ctx: Context): Promise<void> => {\n // eslint-disable-next-line unicorn/no-array-method-this-argument\n const routeMatch = router.find(ctx.request.path, ctx.language as Locales);\n\n if (!routeMatch) {\n ctx.status = 404;\n throw new Error(`Route not found: ${ctx.request.path}`);\n }\n\n ctx.route = routeMatch;\n\n await routeMatch.ref(ctx);\n };\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Logger } from \"nightingale-logger\";\nimport type { AlpNodeAppOptions } from \"./AlpNodeApp\";\nimport { AlpNodeApp } from \"./AlpNodeApp\";\nimport { Config } from \"./config\";\n\nexport type {\n BaseContext,\n NodeApplication,\n NodeConfig,\n ContextState,\n ContextSanitizedState,\n} from \"./types\";\nexport type { Context } from \"./AlpNodeApp\";\n\nconst logger = new Logger(\"alp\");\n\nexport const appDirname = path.resolve(\"build\");\n\nconst packagePath = path.resolve(\"package.json\");\nif (!packagePath) {\n throw new Error(\n `Could not find package.json: \"${String(packagePath as unknown)}\"`,\n );\n}\nexport const packageDirname = path.dirname(packagePath);\n\nlogger.debug(\"init\", { appDirname, packageDirname });\n\nexport const packageConfig: Record<string, unknown> = JSON.parse(\n readFileSync(packagePath, \"utf8\"),\n) as Record<string, unknown>;\n\nconst buildedConfigPath = `${appDirname}/build/config/`;\nconst configPath = existsSync(buildedConfigPath)\n ? buildedConfigPath\n : `${appDirname}/config/`;\n\nexport const config = new Config(configPath).loadSync({ packageConfig });\n\nexport type AppOptions = Omit<\n AlpNodeAppOptions,\n \"appDirname\" | \"config\" | \"packageDirname\"\n>;\n\nexport default class App extends AlpNodeApp {\n constructor(options?: AppOptions) {\n super({\n ...options,\n appDirname,\n packageDirname,\n config,\n });\n }\n}\n\nexport { Config } from \"./config\";\n\nexport {\n default as router,\n createAlpRouterBuilder,\n type AlpRouteRef,\n type AlpRouter,\n} from \"./router\";\n"],"names":["logger","createServerHttps","createServerHttp","params","language","translate","errors","_listen","config"],"mappings":"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"}
1
+ {"version":3,"file":"index-node.mjs","sources":["../src/errors.ts","../src/language.ts","../src/listen.ts","../src/params/ParamValidationResult.ts","../src/params/ParamValid.ts","../src/params/ParamValueValidator.ts","../src/params/ParamValueStringValidator.ts","../src/params/ParamValueFromContext.ts","../src/params/index.ts","../src/translate/load.ts","../src/translate/index.ts","../src/AlpNodeApp.ts","../src/config.ts","../src/router.ts","../src/index.ts"],"sourcesContent":["import { STATUS_CODES } from \"node:http\";\nimport ErrorHtmlRenderer from \"error-html\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { Context } from \"./AlpNodeApp\";\nimport type { HtmlError } from \"./types\";\n\nconst logger = new Logger(\"alp:errors\");\nconst errorHtmlRenderer = new ErrorHtmlRenderer({\n appPath: `${process.cwd()}/`,\n});\n\nexport default async function alpNodeErrors(\n ctx: Context,\n next: () => Promise<void> | void,\n): Promise<void> {\n try {\n await next();\n } catch (error: unknown) {\n // eslint-disable-next-line no-ex-assign\n if (!error) error = new Error(\"Unknown error\");\n // eslint-disable-next-line no-ex-assign\n if (typeof error === \"string\") error = new Error(error);\n\n ctx.status = (error as HtmlError).status || 500;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n logger.error(error as any);\n\n switch (ctx.request.accepts(\"html\", \"text\", \"json\")) {\n case \"json\":\n ctx.type = \"application/json\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = { error: (error as Error).message };\n } else {\n ctx.body = { error: STATUS_CODES[ctx.status] };\n }\n\n break;\n\n case \"html\":\n ctx.type = \"text/html\";\n if (process.env.NODE_ENV !== \"production\") {\n ctx.body = errorHtmlRenderer.render(error as Error);\n } else if ((error as HtmlError).expose) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n\n case \"text\":\n case false:\n default:\n ctx.type = \"text/plain\";\n if (\n process.env.NODE_ENV !== \"production\" ||\n (error as HtmlError).expose\n ) {\n ctx.body = (error as Error).message;\n } else {\n throw error;\n }\n\n break;\n }\n }\n}\n","import type { Context } from \"koa\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp } from \"./AlpNodeApp\";\n\nexport interface AlpLanguageContext {\n readonly firstAcceptedLanguage: string;\n readonly language: string;\n}\nexport default function alpLanguage(app: AlpNodeApp): void {\n const config = app.context.config;\n const availableLanguages: string[] = config.get(\"availableLanguages\");\n if (!availableLanguages) {\n throw new Error('Missing config \"availableLanguages\"');\n }\n\n defineLazyProperty(\n app.context,\n \"language\",\n function language(this: Context): string {\n return (\n this.acceptsLanguages(availableLanguages) ||\n availableLanguages[0] ||\n \"en\"\n );\n },\n );\n\n defineLazyProperty(\n app.context,\n \"firstAcceptedLanguage\",\n function firstAcceptedLanguage(this: Context): string {\n return this.acceptsLanguages()[0] || availableLanguages[0] || \"en\";\n },\n );\n}\n","import { chmodSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { createServer as createServerHttp } from \"node:http\";\nimport type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport { createServer as createServerHttps } from \"node:https\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { Config } from \"./config\";\n\nconst logger = new Logger(\"alp:listen\");\n\ntype RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\nconst createServer = (\n callback: RequestListener,\n socketPath?: string,\n tls?: boolean,\n dirname = \"\",\n // eslint-disable-next-line @typescript-eslint/max-params\n): Server => {\n const createHttpServer =\n !socketPath && tls ? createServerHttps : createServerHttp;\n\n if (!tls) {\n return (createHttpServer as typeof createServerHttps)(callback);\n }\n\n const options = {\n key: readFileSync(`${dirname}/server.key`),\n cert: readFileSync(`${dirname}/server.crt`),\n };\n\n return (createHttpServer as typeof createServerHttps)(options, callback);\n};\n\nexport default function alpListen(\n config: Config,\n callback: RequestListener,\n dirname?: string,\n): Promise<Server> {\n return new Promise((resolve) => {\n const socketPath = config.get<string>(\"socketPath\");\n const port = config.get<number>(\"port\");\n const hostname = config.get<string>(\"hostname\");\n const tls = config.get<boolean>(\"tls\");\n\n logger.info(\"Creating server\", socketPath ? { socketPath } : { port });\n const server = createServer(callback, socketPath, tls, dirname);\n\n if (socketPath) {\n try {\n unlinkSync(socketPath);\n } catch {}\n\n server.listen(socketPath, () => {\n if (socketPath) {\n chmodSync(socketPath, \"777\");\n }\n\n logger.info(\"Server listening\", { socketPath });\n resolve(server);\n });\n } else {\n server.listen(port, hostname, () => {\n logger.info(\"Server listening\", { port });\n resolve(server);\n });\n }\n });\n}\n","export type Errors = Record<string, any>;\n\nexport class ParamValidationResult {\n _errors?: Errors;\n\n _error(name: string, key: string, value: unknown): void {\n if (!this._errors) {\n this._errors = {};\n }\n\n this._errors[name] = { error: key, value };\n }\n\n getErrors(): Errors | undefined {\n return this._errors;\n }\n\n hasErrors(): boolean {\n return this._errors !== undefined;\n }\n\n isValid(): boolean {\n return this._errors === undefined;\n }\n\n // string(name: string): ParamValueStringValidator {\n // return new ParamValueStringValidator(this, name, this.context.param(name));\n // }\n /* int(name, position) {\n return new ParamValueIntValidator(this, name, this.context.param(name, position));\n }\n model(modelName, name) {\n name = name || S.string.lcFirst(modelName);\n console.log('paramvalidator model', modelName, M[modelName]);\n let data = this.context.getOrPostParam(name);\n return new ParamValueModelValidator(this, name, !data ? null : new M[modelName](data));\n } */\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValid extends ParamValidationResult {\n context: Context;\n\n constructor(context: Context) {\n super();\n this.context = context;\n }\n\n override _error(): void {\n this.context.throw(400, \"Invalid params\", { validator: this });\n }\n}\n","import type { ParamValidationResult } from \"./ParamValidationResult\";\n\nexport default class ParamValueValidator<T> {\n readonly validationResult: ParamValidationResult;\n\n readonly name: string;\n\n readonly value: T;\n\n constructor(validationResult: ParamValidationResult, name: string, value: T) {\n this.validationResult = validationResult;\n this.name = name;\n this.value = value;\n }\n\n isValid(): boolean {\n return this.validationResult.isValid();\n }\n\n _error(key: string): void {\n this.validationResult._error(this.name, key, this.value);\n }\n}\n","import ParamValueValidator from \"./ParamValueValidator\";\n\nexport default class ParamValueStringValidator<\n T extends string = string,\n> extends ParamValueValidator<T | null | undefined> {\n notEmpty(): ParamValueValidator<T> {\n if (this.value == null || this.value.trim() === \"\") {\n this._error(\"notEmpty\");\n }\n\n return this as ParamValueValidator<T>;\n }\n}\n","import type { Context } from \"../AlpNodeApp\";\nimport type { ParamValidationResult } from \"./ParamValidationResult\";\nimport ParamValueStringValidator from \"./ParamValueStringValidator\";\n\nexport class ParamValueFromContext {\n readonly validationResult: ParamValidationResult;\n\n readonly context: Context;\n\n constructor(context: Context, validationResult: ParamValidationResult) {\n this.validationResult = validationResult;\n this.context = context;\n }\n\n namedParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.namedRouteParam(name),\n );\n }\n\n otherParam(position: number): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n String(position),\n this.context.otherRouteParam(position),\n );\n }\n\n queryParam(name: string): ParamValueStringValidator {\n return new ParamValueStringValidator(\n this.validationResult,\n name,\n this.context.queryParam(name),\n );\n }\n\n // bodyParam: <T>(name: string): ParamValueValidator<string | undefined> {\n\n // }\n}\n","// eslint-disable-next-line import-x/no-unresolved\nimport { defineLazyProperty } from \"object-properties\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport ParamValid from \"./ParamValid\";\nimport { ParamValidationResult } from \"./ParamValidationResult\";\nimport { ParamValueFromContext } from \"./ParamValueFromContext\";\n\nexport interface AlpParamsContext {\n params: ParamValueFromContext;\n validParams: ParamValueFromContext;\n namedRouteParam: (name: string) => string | undefined;\n otherRouteParam: (position: number) => string | undefined;\n /** @deprecated use namedRouteParam */\n namedParam: never;\n /** @deprecated use otherRouteParam */\n otherParam: never;\n queryParam: (name: string) => string | undefined;\n bodyParam: <T>(name: string) => T | undefined;\n}\n\nexport interface AlpParamsRequest {\n searchParams: URLSearchParams;\n}\n\nexport default function alpParams(app: AlpNodeApp): void {\n Object.assign(app.context, {\n namedRouteParam(this: Context, name: string): string | undefined {\n const namedParams = this.route.namedParams;\n return namedParams?.get(name);\n },\n\n queryParam(this: Context, name: string): string | undefined {\n const searchParams = this.request.searchParams;\n return searchParams.get(name) ?? undefined;\n },\n\n bodyParam<T>(this: Context, name: string): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (this.body as any)[name];\n },\n });\n\n defineLazyProperty(\n app.request,\n \"searchParams\",\n function searchParams(this: Context[\"request\"]): URLSearchParams {\n return new URLSearchParams(this.search);\n },\n );\n\n defineLazyProperty(\n app.context,\n \"params\",\n function params(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValidationResult());\n },\n );\n\n defineLazyProperty(\n app.context,\n \"validParams\",\n function validParams(this: Context): ParamValueFromContext {\n return new ParamValueFromContext(this, new ParamValid(this));\n },\n );\n}\n","import IntlMessageFormatDefault from \"intl-messageformat\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst IntlMessageFormat: typeof IntlMessageFormatDefault =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (IntlMessageFormatDefault as any).default || IntlMessageFormatDefault;\n\nexport type Translations = Readonly<Record<string, IntlMessageFormatDefault>>;\n\nexport default function load(\n translations: Readonly<Record<string, unknown>>,\n language: string,\n): Translations {\n const result: Record<string, IntlMessageFormatDefault> = {};\n\n (function loadMap(record: Record<string, unknown>, prefix: string) {\n Object.entries(record).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n loadMap(value as Record<string, unknown>, `${prefix}${key}.`);\n return;\n }\n\n result[`${prefix}${key}`] = new IntlMessageFormat(\n value as string,\n language,\n );\n });\n })(translations, \"\");\n\n return result;\n}\n","// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { AlpNodeApp, Context } from \"../AlpNodeApp\";\nimport type { Translations } from \"./load\";\nimport load from \"./load\";\n\nconst logger = new Logger(\"alp:translate\");\n\ntype Args = Record<string, any>;\n\nexport interface TranslateBaseContext {\n t: (id: string, args: Args) => string;\n}\nexport interface TranslateContext {\n readonly language: string;\n}\n\nexport default function alpTranslate(\n dirname: string,\n): (app: AlpNodeApp) => void {\n dirname = dirname.replace(/\\/*$/, \"/\");\n return (app: AlpNodeApp) => {\n const appTranslations = new Map<string, Translations>();\n\n Object.assign(app.context, {\n t(this: Context, id: string, args: Args): string {\n const msg = appTranslations.get(this.language)?.[id];\n if (!msg) {\n logger.warn(\"invalid msg\", { language: this.language, id });\n return id;\n }\n\n return msg.format(args) as string;\n },\n });\n\n const config = app.config;\n\n config.get<string[]>(\"availableLanguages\").forEach((language) => {\n const translations = app.loadConfigSync(dirname + language);\n appTranslations.set(language, load(translations, language));\n });\n\n return appTranslations;\n };\n}\n","import type { IncomingMessage, Server, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport Koa from \"koa\";\nimport type { DefaultContext, DefaultState, ParameterizedContext } from \"koa\";\nimport compress from \"koa-compress\";\nimport serve from \"koa-static\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { Router } from \"router-segments\";\nimport type { Config } from \"./config\";\nimport errors from \"./errors\";\nimport type { AlpLanguageContext } from \"./language\";\nimport language from \"./language\";\nimport _listen from \"./listen\";\nimport type { AlpParamsContext, AlpParamsRequest } from \"./params/index\";\nimport params from \"./params/index\";\nimport type {\n AlpRouteRef,\n RouterContext as AlpRouterContext,\n UrlGenerator,\n} from \"./router\";\nimport type { TranslateBaseContext, TranslateContext } from \"./translate/index\";\nimport translate from \"./translate/index\";\nimport type {\n Context as AlpContext,\n ContextState,\n NodeApplication,\n NodeConfig,\n} from \"./types\";\n\nconst logger = new Logger(\"alp\");\n\nexport interface AlpNodeAppOptions {\n appDirname: string;\n packageDirname: string;\n config: Config & NodeConfig;\n certPath?: string;\n publicPath?: string;\n}\n\ndeclare module \"koa\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface DefaultState extends ContextState {}\n\n interface DefaultContext\n extends\n AlpContext,\n AlpParamsContext,\n AlpRouterContext,\n AlpLanguageContext,\n TranslateContext {}\n\n interface BaseContext extends AlpContext, TranslateBaseContext {\n urlGenerator: UrlGenerator;\n redirectTo: <P extends Record<string, unknown>>(\n to: string,\n params?: P,\n ) => void;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface BaseRequest extends AlpParamsRequest {}\n}\n\nexport class AlpNodeApp\n extends Koa<DefaultState, DefaultContext>\n implements NodeApplication\n{\n dirname: string;\n\n certPath: string;\n\n publicPath: string;\n\n config: Config & NodeConfig;\n\n _server?: Server;\n\n router?: Router<any, AlpRouteRef>;\n\n /**\n * @param {Object} [options]\n * @param {string} [options.certPath] directory of the ssl certificates\n * @param {string} [options.publicPath] directory of public files\n */\n constructor({\n appDirname,\n packageDirname,\n config,\n certPath,\n publicPath,\n }: AlpNodeAppOptions) {\n super();\n\n this.dirname = path.normalize(appDirname);\n this.certPath = certPath || `${packageDirname}/config/cert`;\n this.publicPath = publicPath || `${packageDirname}/public/`;\n\n this.config = config;\n this.context.config = this.config;\n\n params(this);\n language(this);\n translate(\"locales\")(this);\n\n this.use(compress());\n }\n\n existsConfigSync(name: string): ReturnType<Config[\"existsConfigSync\"]> {\n return this.config.existsConfigSync(name);\n }\n\n loadConfigSync(name: string): ReturnType<Config[\"loadConfigSync\"]> {\n return this.config.loadConfigSync(name);\n }\n\n override createContext<StateT = DefaultState>(\n req: IncomingMessage,\n res: ServerResponse,\n ): ParameterizedContext<StateT> {\n const ctx = super.createContext<StateT>(req, res);\n ctx.sanitizedState = {};\n return ctx;\n }\n\n servePublic(): void {\n this.use(serve(this.publicPath)); // static files\n }\n\n catchErrors(): void {\n this.use(errors);\n }\n\n override listen(): never {\n throw new Error(\"Use start instead\");\n }\n\n /**\n * Close server and emit close event\n */\n close(): void {\n if (this._server) {\n this._server.close();\n this.emit(\"close\");\n }\n }\n\n async start(fn: () => Promise<void> | void): Promise<Server> {\n await fn();\n try {\n const server = await _listen(\n this.config,\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.callback(),\n this.certPath,\n );\n this._server = server;\n logger.success(\"started\");\n if (process.send) process.send(\"ready\");\n return server;\n } catch (error: unknown) {\n logger.error(\"start fail\", { err: error });\n throw error;\n }\n }\n}\n\nexport type { Context } from \"koa\";\n\nexport { type NodeApplication } from \"./types\";\n","import { existsSync, readFileSync } from \"node:fs\";\nimport deepFreeze from \"deep-freeze-es6\";\nimport minimist from \"minimist\";\nimport type { NodeConfig, PackageConfig } from \"./types\";\n\nconst argv = minimist(process.argv.slice(2));\n\nfunction _existsConfigSync(dirname: string, name: string): boolean {\n return existsSync(`${dirname}${name}.json`);\n}\n\nfunction _loadConfigSync(\n dirname: string,\n name: string,\n): Record<string, unknown> {\n const content = readFileSync(`${dirname}${name}.json`, \"utf8\");\n return JSON.parse(content) as Record<string, unknown>;\n}\n\nexport interface ConfigOptions {\n argv?: string[];\n packageConfig?: PackageConfig;\n version?: string;\n}\n\nexport class Config {\n packageConfig?: PackageConfig;\n\n private _record: Record<string, unknown>;\n\n private readonly _dirname: string;\n\n constructor(dirname: string, options?: ConfigOptions) {\n this._record = {};\n this._dirname = dirname.replace(/\\/*$/, \"/\");\n if (options) {\n this.loadSync(options);\n }\n }\n\n loadSync(options: ConfigOptions = {}): Config & NodeConfig {\n const env = process.env.CONFIG_ENV || process.env.NODE_ENV || \"development\";\n const { argv: argvOverrides = [], packageConfig, version } = options;\n this.packageConfig = packageConfig;\n\n const config = _loadConfigSync(this._dirname, \"common\");\n for (const [key, value] of Object.entries(\n _loadConfigSync(this._dirname, env),\n )) {\n config[key] = value;\n }\n\n if (this.existsConfigSync(\"local\")) {\n for (const [key, value] of Object.entries(\n _loadConfigSync(this._dirname, \"local\"),\n )) {\n config[key] = value;\n }\n }\n\n if (config.version) {\n throw new Error('Cannot have \"version\", in config.');\n }\n\n config.version = String(version || argv.version || packageConfig?.version);\n\n const socketPath: string | undefined = (argv.socket ||\n argv[\"socket-path\"] ||\n argv.socketPath) as string | undefined;\n if (socketPath) {\n config.socketPath = socketPath;\n } else if (argv.port) {\n config.port = argv.port;\n delete config.socketPath;\n } else if (process.env.PORT) {\n config.port = Number(process.env.PORT);\n delete config.socketPath;\n }\n\n argvOverrides.forEach((key) => {\n const splitted = key.split(\".\");\n const value =\n splitted.length > 0 &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return,unicorn/no-array-reduce\n splitted.reduce((config, partialKey) => config[partialKey], argv);\n if (value !== undefined) {\n const last = splitted.pop()!;\n const v =\n splitted.length === 0\n ? config\n : // eslint-disable-next-line unicorn/no-array-reduce\n splitted.reduce(\n (config, partialKey) =>\n config[partialKey] as Record<string, unknown>,\n config,\n );\n v[last] = value;\n }\n });\n\n this._record = deepFreeze(config);\n return this as unknown as Config & NodeConfig;\n }\n\n get<T>(key: string): Readonly<T> {\n return this._record[key] as T;\n }\n\n existsConfigSync(name: string): boolean {\n return _existsConfigSync(this._dirname, name);\n }\n\n loadConfigSync(name: string): Readonly<Record<string, unknown>> {\n return _loadConfigSync(this._dirname, name);\n }\n}\n","import type {\n LocaleType,\n RouteMatch,\n Router,\n RouterBuilder,\n} from \"router-segments\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { createRouterBuilder } from \"router-segments\";\nimport type { AlpNodeApp, Context } from \"./AlpNodeApp\";\n\nexport type AlpRouter<Locales extends LocaleType> = Router<\n Locales,\n AlpRouteRef\n>;\nexport type AlpRouteRef = (ctx: Context) => Promise<void> | void;\ntype ReturnType = (app: AlpNodeApp) => AlpRouteRef;\n\nexport interface RouterContext {\n route: RouteMatch<any, AlpRouteRef>;\n}\nexport const createAlpRouterBuilder = <\n Locales extends LocaleType,\n>(): RouterBuilder<Locales, AlpRouteRef> =>\n createRouterBuilder<Locales, AlpRouteRef>();\n\nexport type UrlGenerator = <P extends Record<string, unknown> | undefined>(\n routeKey: string,\n params?: P,\n) => string;\n\nexport default function alpRouter<Locales extends string>(\n router: Router<Locales, AlpRouteRef>,\n): ReturnType {\n return (app: AlpNodeApp) => {\n app.router = router;\n\n app.context.urlGenerator = function urlGenerator<\n P extends Record<string, unknown> | undefined,\n >(this: Context, routeKey: string, params?: P): string {\n return router.toLocalizedPath(this.language as Locales, routeKey, params);\n };\n\n app.context.redirectTo = function redirectTo<\n P extends Record<string, unknown> | undefined,\n >(this: Context, to: string, params?: P): void {\n this.redirect(\n router.toLocalizedPath(this.language as Locales, to, params),\n );\n };\n\n return async (ctx: Context): Promise<void> => {\n // eslint-disable-next-line unicorn/no-array-method-this-argument\n const routeMatch = router.find(ctx.request.path, ctx.language as Locales);\n\n if (!routeMatch) {\n ctx.status = 404;\n throw new Error(`Route not found: ${ctx.request.path}`);\n }\n\n ctx.route = routeMatch;\n\n await routeMatch.ref(ctx);\n };\n };\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n// eslint-disable-next-line import-x/no-unresolved\nimport { Logger } from \"nightingale-logger\";\nimport type { AlpNodeAppOptions } from \"./AlpNodeApp\";\nimport { AlpNodeApp } from \"./AlpNodeApp\";\nimport { Config } from \"./config\";\n\nexport type {\n BaseContext,\n NodeApplication,\n NodeConfig,\n ContextState,\n ContextSanitizedState,\n} from \"./types\";\nexport type { Context } from \"./AlpNodeApp\";\n\nconst logger = new Logger(\"alp\");\n\nexport const appDirname = path.resolve(\"build\");\n\nconst packagePath = path.resolve(\"package.json\");\nif (!packagePath) {\n throw new Error(`Could not find package.json: \"${packagePath}\"`);\n}\nexport const packageDirname = path.dirname(packagePath);\n\nlogger.debug(\"init\", { appDirname, packageDirname });\n\nexport const packageConfig: Record<string, unknown> = JSON.parse(\n readFileSync(packagePath, \"utf8\"),\n) as Record<string, unknown>;\n\nconst buildedConfigPath = `${appDirname}/build/config/`;\nconst configPath = existsSync(buildedConfigPath)\n ? buildedConfigPath\n : `${appDirname}/config/`;\n\nexport const config = new Config(configPath).loadSync({ packageConfig });\n\nexport type AppOptions = Omit<\n AlpNodeAppOptions,\n \"appDirname\" | \"config\" | \"packageDirname\"\n>;\n\nexport default class App extends AlpNodeApp {\n constructor(options?: AppOptions) {\n super({\n ...options,\n appDirname,\n packageDirname,\n config,\n });\n }\n}\n\nexport { Config } from \"./config\";\n\nexport {\n default as router,\n createAlpRouterBuilder,\n type AlpRouteRef,\n type AlpRouter,\n} from \"./router\";\n"],"names":["logger","createServerHttps","createServerHttp","params","language","translate","errors","_listen","config"],"mappings":"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"}
package/package.json CHANGED
@@ -1,29 +1,30 @@
1
1
  {
2
2
  "name": "alp-node",
3
- "version": "10.0.0",
3
+ "version": "10.1.0",
4
4
  "description": "framework based on koa 2",
5
5
  "keywords": [
6
- "springbokjs",
7
6
  "alp",
8
7
  "framework",
9
8
  "koa",
10
- "node5"
9
+ "node5",
10
+ "springbokjs"
11
11
  ],
12
- "author": "Christophe Hurpeau <christophe@hurpeau.com> (http://christophe.hurpeau.com/)",
12
+ "homepage": "https://github.com/christophehurpeau/alp",
13
+ "bugs": {
14
+ "url": "https://github.com/christophehurpeau/alp/issues"
15
+ },
13
16
  "license": "ISC",
17
+ "author": "Christophe Hurpeau <christophe@hurpeau.com> (http://christophe.hurpeau.com/)",
14
18
  "repository": {
15
19
  "type": "git",
16
20
  "url": "https://github.com/christophehurpeau/alp.git",
17
21
  "directory": "packages/alp-node"
18
22
  },
19
- "homepage": "https://github.com/christophehurpeau/alp",
20
- "bugs": {
21
- "url": "https://github.com/alpjs/alp-node/issues"
22
- },
23
+ "files": [
24
+ "src",
25
+ "dist"
26
+ ],
23
27
  "type": "module",
24
- "engines": {
25
- "node": ">=22.18.0"
26
- },
27
28
  "sideEffects": false,
28
29
  "main": "./dist/index-node.mjs",
29
30
  "types": "./dist/definitions/index.d.ts",
@@ -49,18 +50,36 @@
49
50
  }
50
51
  }
51
52
  },
52
- "files": [
53
- "src",
54
- "dist"
55
- ],
56
- "scripts": {
57
- "build": "yarn clean:build && rollup --config rollup.config.mjs && yarn run build:definitions",
58
- "build:definitions": "tsc -p tsconfig.json",
59
- "clean": "yarn clean:build",
60
- "clean:build": "pob-esbuild-clean-out dist",
61
- "lint": "yarn run lint:eslint",
62
- "lint:eslint": "yarn ../.. run eslint --quiet packages/alp-node",
63
- "watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
53
+ "dependencies": {
54
+ "@types/koa": "^3.0.3",
55
+ "@types/node": ">=22.0.0",
56
+ "deep-freeze-es6": "^5.0.0",
57
+ "error-html": "^0.3.5",
58
+ "intl-messageformat": "^10.7.18",
59
+ "koa": "^3.2.1",
60
+ "koa-compress": "^5.2.1",
61
+ "koa-static": "^5.0.0",
62
+ "minimist": "^1.2.8",
63
+ "nightingale-logger": "^18.2.0",
64
+ "object-properties": "^10.0.0"
65
+ },
66
+ "devDependencies": {
67
+ "@pob/rollup-esbuild": "9.1.1",
68
+ "@types/koa-compress": "4.0.7",
69
+ "@types/koa-static": "4.0.4",
70
+ "@types/minimist": "1.2.5",
71
+ "typescript": "6.0.3"
72
+ },
73
+ "peerDependencies": {
74
+ "router-segments": "^11.0.0 || ^12.0.0"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "router-segments": {
78
+ "optional": true
79
+ }
80
+ },
81
+ "engines": {
82
+ "node": ">=22.18.0"
64
83
  },
65
84
  "pob": {
66
85
  "bundler": "rollup-esbuild",
@@ -77,33 +96,14 @@
77
96
  ],
78
97
  "typescript": true
79
98
  },
80
- "prettier": "@pob/root/prettier-config",
81
- "peerDependencies": {
82
- "router-segments": "^11.0.0 || ^12.0.0"
83
- },
84
- "peerDependenciesMeta": {
85
- "router-segments": {
86
- "optional": true
87
- }
88
- },
89
- "dependencies": {
90
- "@types/koa": "^3.0.0",
91
- "@types/node": ">=22.0.0",
92
- "deep-freeze-es6": "^4.0.1",
93
- "error-html": "^0.3.5",
94
- "intl-messageformat": "^10.0.0",
95
- "koa": "^3.0.1",
96
- "koa-compress": "^5.1.1",
97
- "koa-static": "^5.0.0",
98
- "minimist": "^1.2.8",
99
- "nightingale-logger": "^16.0.0",
100
- "object-properties": "^9.0.1"
101
- },
102
- "devDependencies": {
103
- "@pob/rollup-esbuild": "7.3.2",
104
- "@types/koa-compress": "4.0.7",
105
- "@types/koa-static": "4.0.4",
106
- "@types/minimist": "1.2.5",
107
- "typescript": "5.9.3"
99
+ "scripts": {
100
+ "build": "yarn run clean:build && rollup --config rollup.config.mjs && yarn run build:definitions",
101
+ "build:definitions": "tsc -p tsconfig.json",
102
+ "clean": "yarn clean:build",
103
+ "clean:build": "pob-esbuild-clean-out dist",
104
+ "lint": "yarn run lint:eslint",
105
+ "lint:eslint": "yarn '../..' run eslint --quiet 'packages/alp-node'",
106
+ "tsc": "tsc",
107
+ "watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
108
108
  }
109
109
  }