feat: add example

This commit is contained in:
2026-08-01 09:31:08 +03:00
parent 15805e28df
commit 26b59686a5
434 changed files with 34975 additions and 4995 deletions

View File

@@ -0,0 +1,21 @@
import type { {{name.pascalCase}}ErrorCode } from '../types/{{name.kebabCase}}-error-code.type'
/**
* Доменная ошибка бизнес-модуля {{name.pascalCase}}.
*
* UI/i18n-слой должен использовать `code`, а не `message`, для выбора пользовательского текста.
*/
export class {{name.pascalCase}}BusinessError extends Error {
/** Код доменной ошибки для UI/i18n-слоя. */
readonly code: {{name.pascalCase}}ErrorCode
/** Исходная ошибка нижележащей runtime-зависимости. */
readonly cause: unknown
constructor(code: {{name.pascalCase}}ErrorCode, cause: unknown) {
super(code)
this.name = '{{name.pascalCase}}BusinessError'
this.code = code
this.cause = cause
}
}

View File

@@ -0,0 +1,6 @@
export { {{name.camelCase}}Factory } from './{{name.kebabCase}}.factory'
export type { {{name.pascalCase}}Api } from './types/{{name.kebabCase}}-api.type'
export type { {{name.pascalCase}}Deps } from './types/{{name.kebabCase}}-deps.type'
export type { {{name.pascalCase}}Error } from './types/{{name.kebabCase}}-error.type'
export type { {{name.pascalCase}}ErrorCode } from './types/{{name.kebabCase}}-error-code.type'
export type { {{name.pascalCase}}Factory } from './types/{{name.kebabCase}}-factory.type'

View File

@@ -0,0 +1,4 @@
/**
* Публичный API бизнес-модуля {{name.pascalCase}}.
*/
export type {{name.pascalCase}}Api = object

View File

@@ -0,0 +1,4 @@
/**
* Runtime-зависимости бизнес-модуля {{name.pascalCase}}.
*/
export type {{name.pascalCase}}Deps = object

View File

@@ -0,0 +1,12 @@
/**
* Коды доменных ошибок бизнес-модуля {{name.pascalCase}}.
*/
export const {{name.screamingSnakeCase}}_ERROR_CODES = {
/** Базовая доменная ошибка бизнес-модуля {{name.pascalCase}}. */
UNKNOWN: '{{name.screamingSnakeCase}}_UNKNOWN'
} as const
/**
* Код доменной ошибки бизнес-модуля {{name.pascalCase}}.
*/
export type {{name.pascalCase}}ErrorCode = (typeof {{name.screamingSnakeCase}}_ERROR_CODES)[keyof typeof {{name.screamingSnakeCase}}_ERROR_CODES]

View File

@@ -0,0 +1,15 @@
import type { {{name.pascalCase}}ErrorCode } from './{{name.kebabCase}}-error-code.type'
/**
* Публичный структурный контракт доменной ошибки {{name.pascalCase}}.
*/
export type {{name.pascalCase}}Error = {
/** Исходная ошибка нижележащей runtime-зависимости. */
cause: unknown
/** Код доменной ошибки для UI/i18n-слоя. */
code: {{name.pascalCase}}ErrorCode
/** Сообщение ошибки, не используемое как UI-контракт. */
message: string
/** Имя доменной ошибки для диагностики. */
name: string
}

View File

@@ -0,0 +1,7 @@
import type { {{name.pascalCase}}Api } from './{{name.kebabCase}}-api.type'
import type { {{name.pascalCase}}Deps } from './{{name.kebabCase}}-deps.type'
/**
* Фабрика публичного API бизнес-модуля {{name.pascalCase}}.
*/
export type {{name.pascalCase}}Factory = (deps: {{name.pascalCase}}Deps) => {{name.pascalCase}}Api

View File

@@ -0,0 +1,8 @@
import type { {{name.pascalCase}}Factory } from './types/{{name.kebabCase}}-factory.type'
/**
* Создаёт публичный API бизнес-модуля {{name.pascalCase}}.
*/
export const {{name.camelCase}}Factory: {{name.pascalCase}}Factory = (_deps) => {
return {}
}