blendsdk 5.33.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.
- package/README.md +125 -0
- package/dist/cmdline/cmdline.d.ts +144 -0
- package/dist/cmdline/cmdline.d.ts.map +1 -0
- package/dist/cmdline/cmdline.js +683 -0
- package/dist/cmdline/cmdline.js.map +1 -0
- package/dist/cmdline/errors.d.ts +105 -0
- package/dist/cmdline/errors.d.ts.map +1 -0
- package/dist/cmdline/errors.js +153 -0
- package/dist/cmdline/errors.js.map +1 -0
- package/dist/cmdline/index.d.ts +5 -0
- package/dist/cmdline/index.d.ts.map +1 -0
- package/dist/cmdline/index.js +5 -0
- package/dist/cmdline/index.js.map +1 -0
- package/dist/cmdline/types.d.ts +260 -0
- package/dist/cmdline/types.d.ts.map +1 -0
- package/dist/cmdline/types.js +9 -0
- package/dist/cmdline/types.js.map +1 -0
- package/dist/cmdline/validators.d.ts +28 -0
- package/dist/cmdline/validators.d.ts.map +1 -0
- package/dist/cmdline/validators.js +211 -0
- package/dist/cmdline/validators.js.map +1 -0
- package/dist/codegen/database/index.d.ts +3 -0
- package/dist/codegen/database/index.d.ts.map +1 -0
- package/dist/codegen/database/index.js +3 -0
- package/dist/codegen/database/index.js.map +1 -0
- package/dist/codegen/database/introspect/index.d.ts +3 -0
- package/dist/codegen/database/introspect/index.d.ts.map +1 -0
- package/dist/codegen/database/introspect/index.js +3 -0
- package/dist/codegen/database/introspect/index.js.map +1 -0
- package/dist/codegen/database/introspect/introspect-query.d.ts +2 -0
- package/dist/codegen/database/introspect/introspect-query.d.ts.map +1 -0
- package/dist/codegen/database/introspect/introspect-query.js +416 -0
- package/dist/codegen/database/introspect/introspect-query.js.map +1 -0
- package/dist/codegen/database/introspect/introspect-types.d.ts +45 -0
- package/dist/codegen/database/introspect/introspect-types.d.ts.map +1 -0
- package/dist/codegen/database/introspect/introspect-types.js +2 -0
- package/dist/codegen/database/introspect/introspect-types.js.map +1 -0
- package/dist/codegen/database/introspect/introspect.d.ts +21 -0
- package/dist/codegen/database/introspect/introspect.d.ts.map +1 -0
- package/dist/codegen/database/introspect/introspect.js +223 -0
- package/dist/codegen/database/introspect/introspect.js.map +1 -0
- package/dist/codegen/database/schema/check-constraint.d.ts +8 -0
- package/dist/codegen/database/schema/check-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/check-constraint.js +12 -0
- package/dist/codegen/database/schema/check-constraint.js.map +1 -0
- package/dist/codegen/database/schema/column-schema.d.ts +7 -0
- package/dist/codegen/database/schema/column-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/column-schema.js +9 -0
- package/dist/codegen/database/schema/column-schema.js.map +1 -0
- package/dist/codegen/database/schema/constraint-base.d.ts +13 -0
- package/dist/codegen/database/schema/constraint-base.d.ts.map +1 -0
- package/dist/codegen/database/schema/constraint-base.js +32 -0
- package/dist/codegen/database/schema/constraint-base.js.map +1 -0
- package/dist/codegen/database/schema/database-schema.d.ts +19 -0
- package/dist/codegen/database/schema/database-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/database-schema.js +48 -0
- package/dist/codegen/database/schema/database-schema.js.map +1 -0
- package/dist/codegen/database/schema/dataobject-schema.d.ts +9 -0
- package/dist/codegen/database/schema/dataobject-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/dataobject-schema.js +18 -0
- package/dist/codegen/database/schema/dataobject-schema.js.map +1 -0
- package/dist/codegen/database/schema/fkey-constraints.d.ts +21 -0
- package/dist/codegen/database/schema/fkey-constraints.d.ts.map +1 -0
- package/dist/codegen/database/schema/fkey-constraints.js +58 -0
- package/dist/codegen/database/schema/fkey-constraints.js.map +1 -0
- package/dist/codegen/database/schema/index-constraint.d.ts +34 -0
- package/dist/codegen/database/schema/index-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/index-constraint.js +79 -0
- package/dist/codegen/database/schema/index-constraint.js.map +1 -0
- package/dist/codegen/database/schema/index.d.ts +5 -0
- package/dist/codegen/database/schema/index.d.ts.map +1 -0
- package/dist/codegen/database/schema/index.js +5 -0
- package/dist/codegen/database/schema/index.js.map +1 -0
- package/dist/codegen/database/schema/primarykey-constraint.d.ts +4 -0
- package/dist/codegen/database/schema/primarykey-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/primarykey-constraint.js +4 -0
- package/dist/codegen/database/schema/primarykey-constraint.js.map +1 -0
- package/dist/codegen/database/schema/relation-schema.d.ts +16 -0
- package/dist/codegen/database/schema/relation-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/relation-schema.js +32 -0
- package/dist/codegen/database/schema/relation-schema.js.map +1 -0
- package/dist/codegen/database/schema/table-column-schema.d.ts +59 -0
- package/dist/codegen/database/schema/table-column-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/table-column-schema.js +137 -0
- package/dist/codegen/database/schema/table-column-schema.js.map +1 -0
- package/dist/codegen/database/schema/table-schema.d.ts +48 -0
- package/dist/codegen/database/schema/table-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/table-schema.js +219 -0
- package/dist/codegen/database/schema/table-schema.js.map +1 -0
- package/dist/codegen/database/schema/types.d.ts +13 -0
- package/dist/codegen/database/schema/types.d.ts.map +1 -0
- package/dist/codegen/database/schema/types.js +175 -0
- package/dist/codegen/database/schema/types.js.map +1 -0
- package/dist/codegen/database/schema/unique-constraint.d.ts +4 -0
- package/dist/codegen/database/schema/unique-constraint.d.ts.map +1 -0
- package/dist/codegen/database/schema/unique-constraint.js +4 -0
- package/dist/codegen/database/schema/unique-constraint.js.map +1 -0
- package/dist/codegen/database/schema/view-schema.d.ts +14 -0
- package/dist/codegen/database/schema/view-schema.d.ts.map +1 -0
- package/dist/codegen/database/schema/view-schema.js +32 -0
- package/dist/codegen/database/schema/view-schema.js.map +1 -0
- package/dist/codegen/generator/ctype-generator.d.ts +5 -0
- package/dist/codegen/generator/ctype-generator.d.ts.map +1 -0
- package/dist/codegen/generator/ctype-generator.js +26 -0
- package/dist/codegen/generator/ctype-generator.js.map +1 -0
- package/dist/codegen/generator/generator.d.ts +17 -0
- package/dist/codegen/generator/generator.d.ts.map +1 -0
- package/dist/codegen/generator/generator.js +57 -0
- package/dist/codegen/generator/generator.js.map +1 -0
- package/dist/codegen/generator/index.d.ts +8 -0
- package/dist/codegen/generator/index.d.ts.map +1 -0
- package/dist/codegen/generator/index.js +8 -0
- package/dist/codegen/generator/index.js.map +1 -0
- package/dist/codegen/generator/openapi-generator.d.ts +239 -0
- package/dist/codegen/generator/openapi-generator.d.ts.map +1 -0
- package/dist/codegen/generator/openapi-generator.js +434 -0
- package/dist/codegen/generator/openapi-generator.js.map +1 -0
- package/dist/codegen/generator/openapi-types.d.ts +263 -0
- package/dist/codegen/generator/openapi-types.d.ts.map +1 -0
- package/dist/codegen/generator/openapi-types.js +11 -0
- package/dist/codegen/generator/openapi-types.js.map +1 -0
- package/dist/codegen/generator/postgres-schema-generator.d.ts +48 -0
- package/dist/codegen/generator/postgres-schema-generator.d.ts.map +1 -0
- package/dist/codegen/generator/postgres-schema-generator.js +339 -0
- package/dist/codegen/generator/postgres-schema-generator.js.map +1 -0
- package/dist/codegen/generator/type-generator.d.ts +113 -0
- package/dist/codegen/generator/type-generator.d.ts.map +1 -0
- package/dist/codegen/generator/type-generator.js +249 -0
- package/dist/codegen/generator/type-generator.js.map +1 -0
- package/dist/codegen/generator/zod-generator.d.ts +15 -0
- package/dist/codegen/generator/zod-generator.d.ts.map +1 -0
- package/dist/codegen/generator/zod-generator.js +86 -0
- package/dist/codegen/generator/zod-generator.js.map +1 -0
- package/dist/codegen/generator/zod-to-openapi.d.ts +69 -0
- package/dist/codegen/generator/zod-to-openapi.d.ts.map +1 -0
- package/dist/codegen/generator/zod-to-openapi.js +480 -0
- package/dist/codegen/generator/zod-to-openapi.js.map +1 -0
- package/dist/codegen/index.d.ts +4 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +4 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/schema/any-schema.d.ts +6 -0
- package/dist/codegen/schema/any-schema.d.ts.map +1 -0
- package/dist/codegen/schema/any-schema.js +12 -0
- package/dist/codegen/schema/any-schema.js.map +1 -0
- package/dist/codegen/schema/boolean-schema.d.ts +6 -0
- package/dist/codegen/schema/boolean-schema.d.ts.map +1 -0
- package/dist/codegen/schema/boolean-schema.js +12 -0
- package/dist/codegen/schema/boolean-schema.js.map +1 -0
- package/dist/codegen/schema/date-schema.d.ts +6 -0
- package/dist/codegen/schema/date-schema.d.ts.map +1 -0
- package/dist/codegen/schema/date-schema.js +12 -0
- package/dist/codegen/schema/date-schema.js.map +1 -0
- package/dist/codegen/schema/index.d.ts +10 -0
- package/dist/codegen/schema/index.d.ts.map +1 -0
- package/dist/codegen/schema/index.js +10 -0
- package/dist/codegen/schema/index.js.map +1 -0
- package/dist/codegen/schema/object-schema.d.ts +10 -0
- package/dist/codegen/schema/object-schema.d.ts.map +1 -0
- package/dist/codegen/schema/object-schema.js +21 -0
- package/dist/codegen/schema/object-schema.js.map +1 -0
- package/dist/codegen/schema/primitive-schema.d.ts +20 -0
- package/dist/codegen/schema/primitive-schema.d.ts.map +1 -0
- package/dist/codegen/schema/primitive-schema.js +48 -0
- package/dist/codegen/schema/primitive-schema.js.map +1 -0
- package/dist/codegen/schema/ref-schema.d.ts +6 -0
- package/dist/codegen/schema/ref-schema.d.ts.map +1 -0
- package/dist/codegen/schema/ref-schema.js +11 -0
- package/dist/codegen/schema/ref-schema.js.map +1 -0
- package/dist/codegen/schema/schema-container.d.ts +14 -0
- package/dist/codegen/schema/schema-container.d.ts.map +1 -0
- package/dist/codegen/schema/schema-container.js +38 -0
- package/dist/codegen/schema/schema-container.js.map +1 -0
- package/dist/codegen/schema/schema-object.d.ts +42 -0
- package/dist/codegen/schema/schema-object.d.ts.map +1 -0
- package/dist/codegen/schema/schema-object.js +90 -0
- package/dist/codegen/schema/schema-object.js.map +1 -0
- package/dist/codegen/schema/schema-scope.d.ts +23 -0
- package/dist/codegen/schema/schema-scope.d.ts.map +1 -0
- package/dist/codegen/schema/schema-scope.js +67 -0
- package/dist/codegen/schema/schema-scope.js.map +1 -0
- package/dist/codegen/schema/utils.d.ts +17 -0
- package/dist/codegen/schema/utils.d.ts.map +1 -0
- package/dist/codegen/schema/utils.js +47 -0
- package/dist/codegen/schema/utils.js.map +1 -0
- package/dist/dbcore/crud-statement.d.ts +67 -0
- package/dist/dbcore/crud-statement.d.ts.map +1 -0
- package/dist/dbcore/crud-statement.js +75 -0
- package/dist/dbcore/crud-statement.js.map +1 -0
- package/dist/dbcore/database.d.ts +272 -0
- package/dist/dbcore/database.d.ts.map +1 -0
- package/dist/dbcore/database.js +53 -0
- package/dist/dbcore/database.js.map +1 -0
- package/dist/dbcore/dataservice-base.d.ts +18 -0
- package/dist/dbcore/dataservice-base.d.ts.map +1 -0
- package/dist/dbcore/dataservice-base.js +19 -0
- package/dist/dbcore/dataservice-base.js.map +1 -0
- package/dist/dbcore/delete-statement.d.ts +29 -0
- package/dist/dbcore/delete-statement.d.ts.map +1 -0
- package/dist/dbcore/delete-statement.js +30 -0
- package/dist/dbcore/delete-statement.js.map +1 -0
- package/dist/dbcore/filterable-statement.d.ts +126 -0
- package/dist/dbcore/filterable-statement.d.ts.map +1 -0
- package/dist/dbcore/filterable-statement.js +178 -0
- package/dist/dbcore/filterable-statement.js.map +1 -0
- package/dist/dbcore/from-statement.d.ts +120 -0
- package/dist/dbcore/from-statement.d.ts.map +1 -0
- package/dist/dbcore/from-statement.js +150 -0
- package/dist/dbcore/from-statement.js.map +1 -0
- package/dist/dbcore/index.d.ts +21 -0
- package/dist/dbcore/index.d.ts.map +1 -0
- package/dist/dbcore/index.js +21 -0
- package/dist/dbcore/index.js.map +1 -0
- package/dist/dbcore/insert-statement.d.ts +48 -0
- package/dist/dbcore/insert-statement.d.ts.map +1 -0
- package/dist/dbcore/insert-statement.js +52 -0
- package/dist/dbcore/insert-statement.js.map +1 -0
- package/dist/dbcore/query-dataservice.d.ts +144 -0
- package/dist/dbcore/query-dataservice.d.ts.map +1 -0
- package/dist/dbcore/query-dataservice.js +144 -0
- package/dist/dbcore/query-dataservice.js.map +1 -0
- package/dist/dbcore/statement.d.ts +133 -0
- package/dist/dbcore/statement.d.ts.map +1 -0
- package/dist/dbcore/statement.js +138 -0
- package/dist/dbcore/statement.js.map +1 -0
- package/dist/dbcore/update-statement.d.ts +48 -0
- package/dist/dbcore/update-statement.d.ts.map +1 -0
- package/dist/dbcore/update-statement.js +52 -0
- package/dist/dbcore/update-statement.js.map +1 -0
- package/dist/expression/builders/comparison-builder.d.ts +47 -0
- package/dist/expression/builders/comparison-builder.d.ts.map +1 -0
- package/dist/expression/builders/comparison-builder.js +197 -0
- package/dist/expression/builders/comparison-builder.js.map +1 -0
- package/dist/expression/builders/query-builder.d.ts +80 -0
- package/dist/expression/builders/query-builder.d.ts.map +1 -0
- package/dist/expression/builders/query-builder.js +229 -0
- package/dist/expression/builders/query-builder.js.map +1 -0
- package/dist/expression/compiler/postgresql-compiler.d.ts +56 -0
- package/dist/expression/compiler/postgresql-compiler.d.ts.map +1 -0
- package/dist/expression/compiler/postgresql-compiler.js +217 -0
- package/dist/expression/compiler/postgresql-compiler.js.map +1 -0
- package/dist/expression/core/ast-node.d.ts +47 -0
- package/dist/expression/core/ast-node.d.ts.map +1 -0
- package/dist/expression/core/ast-node.js +154 -0
- package/dist/expression/core/ast-node.js.map +1 -0
- package/dist/expression/core/parameter-manager.d.ts +84 -0
- package/dist/expression/core/parameter-manager.d.ts.map +1 -0
- package/dist/expression/core/parameter-manager.js +164 -0
- package/dist/expression/core/parameter-manager.js.map +1 -0
- package/dist/expression/core/query-builder-interfaces.d.ts +188 -0
- package/dist/expression/core/query-builder-interfaces.d.ts.map +1 -0
- package/dist/expression/core/query-builder-interfaces.js +6 -0
- package/dist/expression/core/query-builder-interfaces.js.map +1 -0
- package/dist/expression/core/types.d.ts +239 -0
- package/dist/expression/core/types.d.ts.map +1 -0
- package/dist/expression/core/types.js +121 -0
- package/dist/expression/core/types.js.map +1 -0
- package/dist/expression/index.d.ts +11 -0
- package/dist/expression/index.d.ts.map +1 -0
- package/dist/expression/index.js +11 -0
- package/dist/expression/index.js.map +1 -0
- package/dist/i18n/content-file-source.d.ts +109 -0
- package/dist/i18n/content-file-source.d.ts.map +1 -0
- package/dist/i18n/content-file-source.js +218 -0
- package/dist/i18n/content-file-source.js.map +1 -0
- package/dist/i18n/index.d.ts +19 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +21 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/json-file-source.d.ts +96 -0
- package/dist/i18n/json-file-source.d.ts.map +1 -0
- package/dist/i18n/json-file-source.js +258 -0
- package/dist/i18n/json-file-source.js.map +1 -0
- package/dist/i18n/merge-catalogs.d.ts +20 -0
- package/dist/i18n/merge-catalogs.d.ts.map +1 -0
- package/dist/i18n/merge-catalogs.js +34 -0
- package/dist/i18n/merge-catalogs.js.map +1 -0
- package/dist/i18n/node.d.ts +20 -0
- package/dist/i18n/node.d.ts.map +1 -0
- package/dist/i18n/node.js +19 -0
- package/dist/i18n/node.js.map +1 -0
- package/dist/i18n/translation-source.d.ts +35 -0
- package/dist/i18n/translation-source.d.ts.map +1 -0
- package/dist/i18n/translation-source.js +2 -0
- package/dist/i18n/translation-source.js.map +1 -0
- package/dist/i18n/translator.d.ts +162 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/i18n/translator.js +259 -0
- package/dist/i18n/translator.js.map +1 -0
- package/dist/i18n/types.d.ts +80 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +2 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/postgresql/database.d.ts +204 -0
- package/dist/postgresql/database.d.ts.map +1 -0
- package/dist/postgresql/database.js +321 -0
- package/dist/postgresql/database.js.map +1 -0
- package/dist/postgresql/delete-statement.d.ts +36 -0
- package/dist/postgresql/delete-statement.d.ts.map +1 -0
- package/dist/postgresql/delete-statement.js +54 -0
- package/dist/postgresql/delete-statement.js.map +1 -0
- package/dist/postgresql/index.d.ts +12 -0
- package/dist/postgresql/index.d.ts.map +1 -0
- package/dist/postgresql/index.js +12 -0
- package/dist/postgresql/index.js.map +1 -0
- package/dist/postgresql/insert-statement.d.ts +34 -0
- package/dist/postgresql/insert-statement.d.ts.map +1 -0
- package/dist/postgresql/insert-statement.js +48 -0
- package/dist/postgresql/insert-statement.js.map +1 -0
- package/dist/postgresql/update-statement.d.ts +38 -0
- package/dist/postgresql/update-statement.d.ts.map +1 -0
- package/dist/postgresql/update-statement.js +75 -0
- package/dist/postgresql/update-statement.js.map +1 -0
- package/dist/stdlib/formatString.d.ts +52 -0
- package/dist/stdlib/formatString.d.ts.map +1 -0
- package/dist/stdlib/formatString.js +118 -0
- package/dist/stdlib/formatString.js.map +1 -0
- package/dist/stdlib/index.d.ts +8 -0
- package/dist/stdlib/index.d.ts.map +1 -0
- package/dist/stdlib/index.js +8 -0
- package/dist/stdlib/index.js.map +1 -0
- package/dist/stdlib/isBoolean.d.ts +15 -0
- package/dist/stdlib/isBoolean.d.ts.map +1 -0
- package/dist/stdlib/isBoolean.js +17 -0
- package/dist/stdlib/isBoolean.js.map +1 -0
- package/dist/stdlib/isNullOrUndef.d.ts +24 -0
- package/dist/stdlib/isNullOrUndef.d.ts.map +1 -0
- package/dist/stdlib/isNullOrUndef.js +28 -0
- package/dist/stdlib/isNullOrUndef.js.map +1 -0
- package/dist/stdlib/isNumeric.d.ts +20 -0
- package/dist/stdlib/isNumeric.d.ts.map +1 -0
- package/dist/stdlib/isNumeric.js +39 -0
- package/dist/stdlib/isNumeric.js.map +1 -0
- package/dist/stdlib/isString.d.ts +15 -0
- package/dist/stdlib/isString.d.ts.map +1 -0
- package/dist/stdlib/isString.js +17 -0
- package/dist/stdlib/isString.js.map +1 -0
- package/dist/stdlib/isTemplateString.d.ts +18 -0
- package/dist/stdlib/isTemplateString.d.ts.map +1 -0
- package/dist/stdlib/isTemplateString.js +38 -0
- package/dist/stdlib/isTemplateString.js.map +1 -0
- package/dist/stdlib/wrapInArray.d.ts +14 -0
- package/dist/stdlib/wrapInArray.d.ts.map +1 -0
- package/dist/stdlib/wrapInArray.js +17 -0
- package/dist/stdlib/wrapInArray.js.map +1 -0
- package/dist/webafx/application/application-settings.d.ts +129 -0
- package/dist/webafx/application/application-settings.d.ts.map +1 -0
- package/dist/webafx/application/application-settings.js +162 -0
- package/dist/webafx/application/application-settings.js.map +1 -0
- package/dist/webafx/application/base-controller.d.ts +128 -0
- package/dist/webafx/application/base-controller.d.ts.map +1 -0
- package/dist/webafx/application/base-controller.js +122 -0
- package/dist/webafx/application/base-controller.js.map +1 -0
- package/dist/webafx/application/console-logger.d.ts +81 -0
- package/dist/webafx/application/console-logger.d.ts.map +1 -0
- package/dist/webafx/application/console-logger.js +111 -0
- package/dist/webafx/application/console-logger.js.map +1 -0
- package/dist/webafx/application/controller-registry.d.ts +34 -0
- package/dist/webafx/application/controller-registry.d.ts.map +1 -0
- package/dist/webafx/application/controller-registry.js +32 -0
- package/dist/webafx/application/controller-registry.js.map +1 -0
- package/dist/webafx/application/error-handler-middleware.d.ts +22 -0
- package/dist/webafx/application/error-handler-middleware.d.ts.map +1 -0
- package/dist/webafx/application/error-handler-middleware.js +70 -0
- package/dist/webafx/application/error-handler-middleware.js.map +1 -0
- package/dist/webafx/application/index.d.ts +13 -0
- package/dist/webafx/application/index.d.ts.map +1 -0
- package/dist/webafx/application/index.js +13 -0
- package/dist/webafx/application/index.js.map +1 -0
- package/dist/webafx/application/logger.d.ts +2 -0
- package/dist/webafx/application/logger.d.ts.map +1 -0
- package/dist/webafx/application/logger.js +2 -0
- package/dist/webafx/application/logger.js.map +1 -0
- package/dist/webafx/application/plugin.d.ts +73 -0
- package/dist/webafx/application/plugin.d.ts.map +1 -0
- package/dist/webafx/application/plugin.js +90 -0
- package/dist/webafx/application/plugin.js.map +1 -0
- package/dist/webafx/application/rate-limiter.d.ts +35 -0
- package/dist/webafx/application/rate-limiter.d.ts.map +1 -0
- package/dist/webafx/application/rate-limiter.js +74 -0
- package/dist/webafx/application/rate-limiter.js.map +1 -0
- package/dist/webafx/application/request-context.d.ts +62 -0
- package/dist/webafx/application/request-context.d.ts.map +1 -0
- package/dist/webafx/application/request-context.js +54 -0
- package/dist/webafx/application/request-context.js.map +1 -0
- package/dist/webafx/application/request-id-middleware.d.ts +30 -0
- package/dist/webafx/application/request-id-middleware.d.ts.map +1 -0
- package/dist/webafx/application/request-id-middleware.js +57 -0
- package/dist/webafx/application/request-id-middleware.js.map +1 -0
- package/dist/webafx/application/route-builder.d.ts +231 -0
- package/dist/webafx/application/route-builder.d.ts.map +1 -0
- package/dist/webafx/application/route-builder.js +182 -0
- package/dist/webafx/application/route-builder.js.map +1 -0
- package/dist/webafx/application/service-container.d.ts +144 -0
- package/dist/webafx/application/service-container.d.ts.map +1 -0
- package/dist/webafx/application/service-container.js +192 -0
- package/dist/webafx/application/service-container.js.map +1 -0
- package/dist/webafx/application/services.d.ts +27 -0
- package/dist/webafx/application/services.d.ts.map +1 -0
- package/dist/webafx/application/services.js +33 -0
- package/dist/webafx/application/services.js.map +1 -0
- package/dist/webafx/application/structured-logger.d.ts +99 -0
- package/dist/webafx/application/structured-logger.d.ts.map +1 -0
- package/dist/webafx/application/structured-logger.js +132 -0
- package/dist/webafx/application/structured-logger.js.map +1 -0
- package/dist/webafx/application/type.d.ts +29 -0
- package/dist/webafx/application/type.d.ts.map +1 -0
- package/dist/webafx/application/type.js +2 -0
- package/dist/webafx/application/type.js.map +1 -0
- package/dist/webafx/application/web-application.d.ts +257 -0
- package/dist/webafx/application/web-application.d.ts.map +1 -0
- package/dist/webafx/application/web-application.js +611 -0
- package/dist/webafx/application/web-application.js.map +1 -0
- package/dist/webafx/errors/api-error.d.ts +21 -0
- package/dist/webafx/errors/api-error.d.ts.map +1 -0
- package/dist/webafx/errors/api-error.js +38 -0
- package/dist/webafx/errors/api-error.js.map +1 -0
- package/dist/webafx/errors/http-errors.d.ts +56 -0
- package/dist/webafx/errors/http-errors.d.ts.map +1 -0
- package/dist/webafx/errors/http-errors.js +74 -0
- package/dist/webafx/errors/http-errors.js.map +1 -0
- package/dist/webafx/errors/index.d.ts +4 -0
- package/dist/webafx/errors/index.d.ts.map +1 -0
- package/dist/webafx/errors/index.js +4 -0
- package/dist/webafx/errors/index.js.map +1 -0
- package/dist/webafx/errors/types.d.ts +42 -0
- package/dist/webafx/errors/types.d.ts.map +1 -0
- package/dist/webafx/errors/types.js +2 -0
- package/dist/webafx/errors/types.js.map +1 -0
- package/dist/webafx/index.d.ts +3 -0
- package/dist/webafx/index.d.ts.map +1 -0
- package/dist/webafx/index.js +3 -0
- package/dist/webafx/index.js.map +1 -0
- package/dist/webafx-auth/abstract-auth-provider.d.ts +178 -0
- package/dist/webafx-auth/abstract-auth-provider.d.ts.map +1 -0
- package/dist/webafx-auth/abstract-auth-provider.js +240 -0
- package/dist/webafx-auth/abstract-auth-provider.js.map +1 -0
- package/dist/webafx-auth/index.d.ts +27 -0
- package/dist/webafx-auth/index.d.ts.map +1 -0
- package/dist/webafx-auth/index.js +32 -0
- package/dist/webafx-auth/index.js.map +1 -0
- package/dist/webafx-auth/jwt-auth-provider.d.ts +100 -0
- package/dist/webafx-auth/jwt-auth-provider.d.ts.map +1 -0
- package/dist/webafx-auth/jwt-auth-provider.js +154 -0
- package/dist/webafx-auth/jwt-auth-provider.js.map +1 -0
- package/dist/webafx-auth/memory-auth-provider.d.ts +100 -0
- package/dist/webafx-auth/memory-auth-provider.d.ts.map +1 -0
- package/dist/webafx-auth/memory-auth-provider.js +122 -0
- package/dist/webafx-auth/memory-auth-provider.js.map +1 -0
- package/dist/webafx-auth/types.d.ts +333 -0
- package/dist/webafx-auth/types.d.ts.map +1 -0
- package/dist/webafx-auth/types.js +24 -0
- package/dist/webafx-auth/types.js.map +1 -0
- package/dist/webafx-cache/abstract-cache-provider.d.ts +185 -0
- package/dist/webafx-cache/abstract-cache-provider.d.ts.map +1 -0
- package/dist/webafx-cache/abstract-cache-provider.js +133 -0
- package/dist/webafx-cache/abstract-cache-provider.js.map +1 -0
- package/dist/webafx-cache/abstract-pubsub-provider.d.ts +170 -0
- package/dist/webafx-cache/abstract-pubsub-provider.d.ts.map +1 -0
- package/dist/webafx-cache/abstract-pubsub-provider.js +132 -0
- package/dist/webafx-cache/abstract-pubsub-provider.js.map +1 -0
- package/dist/webafx-cache/cache-plugin.d.ts +114 -0
- package/dist/webafx-cache/cache-plugin.d.ts.map +1 -0
- package/dist/webafx-cache/cache-plugin.js +176 -0
- package/dist/webafx-cache/cache-plugin.js.map +1 -0
- package/dist/webafx-cache/index.d.ts +33 -0
- package/dist/webafx-cache/index.d.ts.map +1 -0
- package/dist/webafx-cache/index.js +44 -0
- package/dist/webafx-cache/index.js.map +1 -0
- package/dist/webafx-cache/memory-cache-provider.d.ts +99 -0
- package/dist/webafx-cache/memory-cache-provider.d.ts.map +1 -0
- package/dist/webafx-cache/memory-cache-provider.js +251 -0
- package/dist/webafx-cache/memory-cache-provider.js.map +1 -0
- package/dist/webafx-cache/memory-pubsub-provider.d.ts +124 -0
- package/dist/webafx-cache/memory-pubsub-provider.d.ts.map +1 -0
- package/dist/webafx-cache/memory-pubsub-provider.js +195 -0
- package/dist/webafx-cache/memory-pubsub-provider.js.map +1 -0
- package/dist/webafx-cache/pubsub-plugin.d.ts +128 -0
- package/dist/webafx-cache/pubsub-plugin.d.ts.map +1 -0
- package/dist/webafx-cache/pubsub-plugin.js +182 -0
- package/dist/webafx-cache/pubsub-plugin.js.map +1 -0
- package/dist/webafx-cache/redis-cache-provider.d.ts +81 -0
- package/dist/webafx-cache/redis-cache-provider.d.ts.map +1 -0
- package/dist/webafx-cache/redis-cache-provider.js +209 -0
- package/dist/webafx-cache/redis-cache-provider.js.map +1 -0
- package/dist/webafx-cache/redis-pubsub-provider.d.ts +164 -0
- package/dist/webafx-cache/redis-pubsub-provider.d.ts.map +1 -0
- package/dist/webafx-cache/redis-pubsub-provider.js +329 -0
- package/dist/webafx-cache/redis-pubsub-provider.js.map +1 -0
- package/dist/webafx-cache/types.d.ts +206 -0
- package/dist/webafx-cache/types.d.ts.map +1 -0
- package/dist/webafx-cache/types.js +27 -0
- package/dist/webafx-cache/types.js.map +1 -0
- package/dist/webafx-i18n/i18n-plugin.d.ts +29 -0
- package/dist/webafx-i18n/i18n-plugin.d.ts.map +1 -0
- package/dist/webafx-i18n/i18n-plugin.js +145 -0
- package/dist/webafx-i18n/i18n-plugin.js.map +1 -0
- package/dist/webafx-i18n/index.d.ts +12 -0
- package/dist/webafx-i18n/index.d.ts.map +1 -0
- package/dist/webafx-i18n/index.js +12 -0
- package/dist/webafx-i18n/index.js.map +1 -0
- package/dist/webafx-i18n/locale-resolver.d.ts +33 -0
- package/dist/webafx-i18n/locale-resolver.d.ts.map +1 -0
- package/dist/webafx-i18n/locale-resolver.js +67 -0
- package/dist/webafx-i18n/locale-resolver.js.map +1 -0
- package/dist/webafx-i18n/postgresql-source.d.ts +101 -0
- package/dist/webafx-i18n/postgresql-source.d.ts.map +1 -0
- package/dist/webafx-i18n/postgresql-source.js +101 -0
- package/dist/webafx-i18n/postgresql-source.js.map +1 -0
- package/dist/webafx-i18n/types.d.ts +70 -0
- package/dist/webafx-i18n/types.d.ts.map +1 -0
- package/dist/webafx-i18n/types.js +2 -0
- package/dist/webafx-i18n/types.js.map +1 -0
- package/dist/webafx-mailer/abstract-mail-provider.d.ts +55 -0
- package/dist/webafx-mailer/abstract-mail-provider.d.ts.map +1 -0
- package/dist/webafx-mailer/abstract-mail-provider.js +37 -0
- package/dist/webafx-mailer/abstract-mail-provider.js.map +1 -0
- package/dist/webafx-mailer/index.d.ts +24 -0
- package/dist/webafx-mailer/index.d.ts.map +1 -0
- package/dist/webafx-mailer/index.js +34 -0
- package/dist/webafx-mailer/index.js.map +1 -0
- package/dist/webafx-mailer/mail-plugin.d.ts +98 -0
- package/dist/webafx-mailer/mail-plugin.d.ts.map +1 -0
- package/dist/webafx-mailer/mail-plugin.js +155 -0
- package/dist/webafx-mailer/mail-plugin.js.map +1 -0
- package/dist/webafx-mailer/memory-mail-provider.d.ts +85 -0
- package/dist/webafx-mailer/memory-mail-provider.d.ts.map +1 -0
- package/dist/webafx-mailer/memory-mail-provider.js +111 -0
- package/dist/webafx-mailer/memory-mail-provider.js.map +1 -0
- package/dist/webafx-mailer/smtp-mail-provider.d.ts +65 -0
- package/dist/webafx-mailer/smtp-mail-provider.d.ts.map +1 -0
- package/dist/webafx-mailer/smtp-mail-provider.js +113 -0
- package/dist/webafx-mailer/smtp-mail-provider.js.map +1 -0
- package/dist/webafx-mailer/types.d.ts +136 -0
- package/dist/webafx-mailer/types.d.ts.map +1 -0
- package/dist/webafx-mailer/types.js +13 -0
- package/dist/webafx-mailer/types.js.map +1 -0
- package/package.json +159 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ConsoleLogger } from './console-logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* CORS configuration options
|
|
4
|
+
*/
|
|
5
|
+
export interface CorsConfig {
|
|
6
|
+
/** Allowed origins (string, array, or callback function) */
|
|
7
|
+
origin?: string | string[] | ((origin: string | undefined, callback: (err: Error | null, allowed: boolean) => void) => void);
|
|
8
|
+
/** Allowed HTTP methods */
|
|
9
|
+
methods?: string[];
|
|
10
|
+
/** Allowed headers */
|
|
11
|
+
allowedHeaders?: string[];
|
|
12
|
+
/** Exposed headers */
|
|
13
|
+
exposedHeaders?: string[];
|
|
14
|
+
/** Allow credentials */
|
|
15
|
+
credentials?: boolean;
|
|
16
|
+
/** Max age for preflight cache */
|
|
17
|
+
maxAge?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Application configuration interface.
|
|
21
|
+
* Defines standard configuration properties with type safety.
|
|
22
|
+
*/
|
|
23
|
+
export interface ApplicationConfig {
|
|
24
|
+
/** Enable debug mode */
|
|
25
|
+
DEBUG?: boolean;
|
|
26
|
+
/** Environment mode: production, development, or test */
|
|
27
|
+
ENV_MODE?: 'production' | 'development' | 'test';
|
|
28
|
+
/** Log levels */
|
|
29
|
+
LOG_LEVEL?: 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';
|
|
30
|
+
/** Server port number */
|
|
31
|
+
PORT?: number;
|
|
32
|
+
/** Trust proxy headers (for nginx, load balancers) */
|
|
33
|
+
TRUST_PROXY?: boolean;
|
|
34
|
+
/** Request body size limit */
|
|
35
|
+
BODY_LIMIT?: string;
|
|
36
|
+
/** Graceful shutdown timeout in seconds */
|
|
37
|
+
SHUTDOWN_TIMEOUT?: number;
|
|
38
|
+
/** CORS configuration (false to disable, true for defaults, or custom config) */
|
|
39
|
+
CORS?: boolean | CorsConfig;
|
|
40
|
+
/** Allow additional custom properties */
|
|
41
|
+
[key: string]: string | number | boolean | undefined | any;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Manages application configuration settings.
|
|
45
|
+
* Supports loading configuration from JavaScript files and provides
|
|
46
|
+
* type-safe access to configuration values.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const settings = new ApplicationSettings({ PORT: 3000 });
|
|
51
|
+
* settings.loadFromFile('.env.js');
|
|
52
|
+
* const port = settings.get<number>('PORT', 4000);
|
|
53
|
+
* const isProduction = settings.isProduction();
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare class ApplicationSettings {
|
|
57
|
+
protected config: ApplicationConfig;
|
|
58
|
+
protected logger: ConsoleLogger;
|
|
59
|
+
/**
|
|
60
|
+
* Creates a new ApplicationSettings instance.
|
|
61
|
+
* Defaults ENV_MODE to 'production' for secure-by-default behavior.
|
|
62
|
+
* This ensures stack traces are never exposed if config loading fails.
|
|
63
|
+
*
|
|
64
|
+
* @param config - Initial configuration object
|
|
65
|
+
* @param logger - Optional logger instance for configuration loading messages
|
|
66
|
+
* @throws {Error} If provided configuration fails validation
|
|
67
|
+
*/
|
|
68
|
+
constructor(config?: ApplicationConfig, logger?: ConsoleLogger);
|
|
69
|
+
/**
|
|
70
|
+
* Loads configuration from a JavaScript file using dynamic import.
|
|
71
|
+
* The file should export either a default object or a config object.
|
|
72
|
+
* Silently returns if file doesn't exist.
|
|
73
|
+
*
|
|
74
|
+
* @param jsPath - Path to the JavaScript configuration file
|
|
75
|
+
* @throws {Error} If the file exists but cannot be loaded or parsed
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* await settings.loadFromFile('.env.local.js');
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
loadFromFile(jsPath: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Validates the current configuration against the Zod schema.
|
|
85
|
+
*
|
|
86
|
+
* @throws {Error} If configuration validation fails
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
protected validateConfig(): void;
|
|
90
|
+
/**
|
|
91
|
+
* Returns all configuration settings as a shallow copy.
|
|
92
|
+
* This prevents direct mutations to the internal config object while
|
|
93
|
+
* maintaining good performance. Note that nested objects are still
|
|
94
|
+
* referenced, not cloned.
|
|
95
|
+
*
|
|
96
|
+
* @returns A shallow copy of the configuration object
|
|
97
|
+
* @template T - Extended configuration type
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const config = settings.getAll();
|
|
102
|
+
* config.PORT = 5000; // Safe - doesn't affect internal config
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
getAll<T extends ApplicationConfig>(): T;
|
|
106
|
+
/**
|
|
107
|
+
* Gets a configuration value by key with optional default.
|
|
108
|
+
*
|
|
109
|
+
* @param key - Configuration key
|
|
110
|
+
* @param defaultValue - Default value if key is not set
|
|
111
|
+
* @returns The configuration value or default
|
|
112
|
+
* @template T - Expected value type
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const port = settings.get<number>('PORT', 4000);
|
|
117
|
+
* const debug = settings.get<boolean>('DEBUG', false);
|
|
118
|
+
* const envMode = settings.get<string>('ENV_MODE', 'production');
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
get<T = any>(key: keyof ApplicationConfig, defaultValue?: T): T;
|
|
122
|
+
/**
|
|
123
|
+
* Checks if the application is running in production mode.
|
|
124
|
+
*
|
|
125
|
+
* @returns true if ENV_MODE is 'production', false otherwise
|
|
126
|
+
*/
|
|
127
|
+
isProduction(): boolean;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=application-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-settings.d.ts","sourceRoot":"","sources":["../../src/application/application-settings.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBpD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;IAC7H,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC;IACjD,iBAAiB;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5B,yCAAyC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;CAC5D;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAmB;IAC9B,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAEhC;;;;;;;;OAQG;gBACS,MAAM,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,aAAa;IAa9D;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CjD;;;;;OAKG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAUhC;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,CAAC,SAAS,iBAAiB,KAAK,CAAC;IAIxC;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,iBAAiB,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;IAK/D;;;;OAIG;IACH,YAAY,IAAI,OAAO;CAGxB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { pathToFileURL } from 'url';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { ConsoleLogger } from './console-logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Zod schema for validating application configuration.
|
|
8
|
+
* Validates common configuration properties while allowing custom properties via .passthrough().
|
|
9
|
+
*/
|
|
10
|
+
const configSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
PORT: z.number().int().min(0).max(65535).optional(),
|
|
13
|
+
ENV_MODE: z.enum(['production', 'development', 'test']).optional(),
|
|
14
|
+
LOG_LEVEL: z.enum(['ERROR', 'WARN', 'INFO', 'DEBUG']).optional(),
|
|
15
|
+
DEBUG: z.boolean().optional(),
|
|
16
|
+
TRUST_PROXY: z.boolean().optional(),
|
|
17
|
+
BODY_LIMIT: z.string().optional(),
|
|
18
|
+
SHUTDOWN_TIMEOUT: z.number().min(0).max(300).optional(),
|
|
19
|
+
CORS: z.union([z.boolean(), z.object({}).passthrough()]).optional(),
|
|
20
|
+
})
|
|
21
|
+
.passthrough(); // Allow additional custom properties
|
|
22
|
+
/**
|
|
23
|
+
* Manages application configuration settings.
|
|
24
|
+
* Supports loading configuration from JavaScript files and provides
|
|
25
|
+
* type-safe access to configuration values.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const settings = new ApplicationSettings({ PORT: 3000 });
|
|
30
|
+
* settings.loadFromFile('.env.js');
|
|
31
|
+
* const port = settings.get<number>('PORT', 4000);
|
|
32
|
+
* const isProduction = settings.isProduction();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class ApplicationSettings {
|
|
36
|
+
config;
|
|
37
|
+
logger;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new ApplicationSettings instance.
|
|
40
|
+
* Defaults ENV_MODE to 'production' for secure-by-default behavior.
|
|
41
|
+
* This ensures stack traces are never exposed if config loading fails.
|
|
42
|
+
*
|
|
43
|
+
* @param config - Initial configuration object
|
|
44
|
+
* @param logger - Optional logger instance for configuration loading messages
|
|
45
|
+
* @throws {Error} If provided configuration fails validation
|
|
46
|
+
*/
|
|
47
|
+
constructor(config, logger) {
|
|
48
|
+
this.logger = logger || new ConsoleLogger('Settings');
|
|
49
|
+
this.config = {
|
|
50
|
+
ENV_MODE: 'production',
|
|
51
|
+
...(config || {}),
|
|
52
|
+
};
|
|
53
|
+
// Validate initial configuration if provided
|
|
54
|
+
if (config) {
|
|
55
|
+
this.validateConfig();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Loads configuration from a JavaScript file using dynamic import.
|
|
60
|
+
* The file should export either a default object or a config object.
|
|
61
|
+
* Silently returns if file doesn't exist.
|
|
62
|
+
*
|
|
63
|
+
* @param jsPath - Path to the JavaScript configuration file
|
|
64
|
+
* @throws {Error} If the file exists but cannot be loaded or parsed
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* await settings.loadFromFile('.env.local.js');
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
async loadFromFile(jsPath) {
|
|
72
|
+
if (!jsPath) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const resolvedPath = path.resolve(jsPath);
|
|
76
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// Use dynamic import for ESM compatibility
|
|
81
|
+
const fileUrl = pathToFileURL(resolvedPath).href;
|
|
82
|
+
const module = await import(fileUrl);
|
|
83
|
+
const config = (module?.default || module?.config || {});
|
|
84
|
+
Object.entries(config).forEach(([key, value]) => {
|
|
85
|
+
this.config[key] = value;
|
|
86
|
+
});
|
|
87
|
+
this.logger.info(`${path.parse(resolvedPath).base} loaded`);
|
|
88
|
+
// Normalize ENV_MODE (only read from config, don't mutate process.env)
|
|
89
|
+
this.config.ENV_MODE = this.config.ENV_MODE || 'production';
|
|
90
|
+
// Normalize LOG_LEVEL
|
|
91
|
+
let { DEBUG, LOG_LEVEL, ENV_MODE } = this.config;
|
|
92
|
+
this.config.LOG_LEVEL =
|
|
93
|
+
LOG_LEVEL ?? (DEBUG === true ? 'DEBUG' : ENV_MODE !== 'production' ? 'DEBUG' : 'ERROR');
|
|
94
|
+
// Config is now the single source of truth - no process.env mutation
|
|
95
|
+
// Validate configuration after loading
|
|
96
|
+
this.validateConfig();
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.logger.error(`Failed to load configuration from ${resolvedPath}`, error);
|
|
100
|
+
throw new Error(`Configuration file error: ${resolvedPath}`, { cause: error });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validates the current configuration against the Zod schema.
|
|
105
|
+
*
|
|
106
|
+
* @throws {Error} If configuration validation fails
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
validateConfig() {
|
|
110
|
+
const result = configSchema.safeParse(this.config);
|
|
111
|
+
if (!result.success) {
|
|
112
|
+
const errors = result.error.issues.map(issue => ` - ${issue.path.join('.')}: ${issue.message}`);
|
|
113
|
+
throw new Error(`Configuration validation failed:\n${errors.join('\n')}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Returns all configuration settings as a shallow copy.
|
|
118
|
+
* This prevents direct mutations to the internal config object while
|
|
119
|
+
* maintaining good performance. Note that nested objects are still
|
|
120
|
+
* referenced, not cloned.
|
|
121
|
+
*
|
|
122
|
+
* @returns A shallow copy of the configuration object
|
|
123
|
+
* @template T - Extended configuration type
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const config = settings.getAll();
|
|
128
|
+
* config.PORT = 5000; // Safe - doesn't affect internal config
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
getAll() {
|
|
132
|
+
return { ...this.config };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Gets a configuration value by key with optional default.
|
|
136
|
+
*
|
|
137
|
+
* @param key - Configuration key
|
|
138
|
+
* @param defaultValue - Default value if key is not set
|
|
139
|
+
* @returns The configuration value or default
|
|
140
|
+
* @template T - Expected value type
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* const port = settings.get<number>('PORT', 4000);
|
|
145
|
+
* const debug = settings.get<boolean>('DEBUG', false);
|
|
146
|
+
* const envMode = settings.get<string>('ENV_MODE', 'production');
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
get(key, defaultValue) {
|
|
150
|
+
const value = this.config[key];
|
|
151
|
+
return (value !== undefined ? value : defaultValue);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Checks if the application is running in production mode.
|
|
155
|
+
*
|
|
156
|
+
* @returns true if ENV_MODE is 'production', false otherwise
|
|
157
|
+
*/
|
|
158
|
+
isProduction() {
|
|
159
|
+
return this.config.ENV_MODE === 'production';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=application-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-settings.js","sourceRoot":"","sources":["../../src/application/application-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Response } from 'express';
|
|
2
|
+
import { ApplicationSettings } from './application-settings.js';
|
|
3
|
+
import { RouteBuilder, RouteDefinition } from './route-builder.js';
|
|
4
|
+
import { ServiceContainer } from './service-container.js';
|
|
5
|
+
/**
|
|
6
|
+
* Standard success response envelope
|
|
7
|
+
*/
|
|
8
|
+
export interface StandardSuccessResponse<T = unknown> {
|
|
9
|
+
success: true;
|
|
10
|
+
data: T;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Paginated response envelope
|
|
14
|
+
*/
|
|
15
|
+
export interface PaginatedResponse<T = unknown> {
|
|
16
|
+
success: true;
|
|
17
|
+
data: T[];
|
|
18
|
+
pagination: {
|
|
19
|
+
total: number;
|
|
20
|
+
page: number;
|
|
21
|
+
limit: number;
|
|
22
|
+
pages: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Base class for all application controllers.
|
|
27
|
+
* Provides route building utilities, response helpers, and access to application settings.
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* Controllers should extend this class and implement the routes() method
|
|
31
|
+
* to define their HTTP endpoints. Use the route() and authenticated() helper
|
|
32
|
+
* methods to build route definitions with a fluent API.
|
|
33
|
+
*
|
|
34
|
+
* Response helpers (ok, created, paginated, noContent) provide consistent
|
|
35
|
+
* response formats across the application.
|
|
36
|
+
*/
|
|
37
|
+
export declare abstract class BaseController {
|
|
38
|
+
protected settings: ApplicationSettings;
|
|
39
|
+
protected services: ServiceContainer;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new controller instance.
|
|
42
|
+
*
|
|
43
|
+
* @param settings - Application settings passed from WebApplication
|
|
44
|
+
* @param services - Service container for dependency injection
|
|
45
|
+
*/
|
|
46
|
+
constructor(settings: ApplicationSettings, services: ServiceContainer);
|
|
47
|
+
/**
|
|
48
|
+
* Defines the routes for this controller.
|
|
49
|
+
* Must be implemented by subclasses.
|
|
50
|
+
*
|
|
51
|
+
* @returns Array of route definitions
|
|
52
|
+
*/
|
|
53
|
+
abstract routes(): RouteDefinition[];
|
|
54
|
+
/**
|
|
55
|
+
* Creates a new route builder for defining routes.
|
|
56
|
+
*
|
|
57
|
+
* @returns A new RouteBuilder instance
|
|
58
|
+
*/
|
|
59
|
+
protected route(): RouteBuilder;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new route builder with authentication required.
|
|
62
|
+
* Shorthand for route().secure().
|
|
63
|
+
*
|
|
64
|
+
* @returns A new RouteBuilder instance with secure flag set
|
|
65
|
+
*/
|
|
66
|
+
protected authenticated(): RouteBuilder;
|
|
67
|
+
/**
|
|
68
|
+
* Send a successful 200 OK response with data.
|
|
69
|
+
*
|
|
70
|
+
* @param res - Express response object
|
|
71
|
+
* @param data - Data to send in the response
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* this.ok(res, { user: { id: 1, name: 'John' } });
|
|
76
|
+
* // Response: { success: true, data: { user: { id: 1, name: 'John' } } }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
protected ok<T>(res: Response, data: T): void;
|
|
80
|
+
/**
|
|
81
|
+
* Send a 201 Created response with data.
|
|
82
|
+
*
|
|
83
|
+
* @param res - Express response object
|
|
84
|
+
* @param data - Data to send in the response
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* this.created(res, { id: 123, name: 'New Item' });
|
|
89
|
+
* // Response: { success: true, data: { id: 123, name: 'New Item' } }
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
protected created<T>(res: Response, data: T): void;
|
|
93
|
+
/**
|
|
94
|
+
* Send a paginated response with metadata.
|
|
95
|
+
*
|
|
96
|
+
* @param res - Express response object
|
|
97
|
+
* @param data - Array of items for the current page
|
|
98
|
+
* @param total - Total number of items across all pages
|
|
99
|
+
* @param page - Current page number (1-indexed)
|
|
100
|
+
* @param limit - Number of items per page
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* this.paginated(res, users, 150, 2, 50);
|
|
105
|
+
* // Response: {
|
|
106
|
+
* // success: true,
|
|
107
|
+
* // data: [...],
|
|
108
|
+
* // pagination: { total: 150, page: 2, limit: 50, pages: 3 }
|
|
109
|
+
* // }
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
protected paginated<T>(res: Response, data: T[], total: number, page: number, limit: number): void;
|
|
113
|
+
/**
|
|
114
|
+
* Send a 204 No Content response.
|
|
115
|
+
* Typically used for successful DELETE operations or updates with no return value.
|
|
116
|
+
*
|
|
117
|
+
* @param res - Express response object
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* // DELETE /users/123
|
|
122
|
+
* await userService.delete(id);
|
|
123
|
+
* this.noContent(res);
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
protected noContent(res: Response): void;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=base-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-controller.d.ts","sourceRoot":"","sources":["../../src/application/base-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,cAAc;IAQhC,SAAS,CAAC,QAAQ,EAAE,mBAAmB;IACvC,SAAS,CAAC,QAAQ,EAAE,gBAAgB;IARtC;;;;;OAKG;gBAES,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,gBAAgB;IAGtC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,IAAI,eAAe,EAAE;IAEpC;;;;OAIG;IACH,SAAS,CAAC,KAAK,IAAI,YAAY;IAI/B;;;;;OAKG;IACH,SAAS,CAAC,aAAa,IAAI,YAAY;IAIvC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAI7C;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAIlD;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,SAAS,CAAC,CAAC,EACnB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,IAAI;IAaP;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;CAGzC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { RouteBuilder } from './route-builder.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for all application controllers.
|
|
4
|
+
* Provides route building utilities, response helpers, and access to application settings.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Controllers should extend this class and implement the routes() method
|
|
8
|
+
* to define their HTTP endpoints. Use the route() and authenticated() helper
|
|
9
|
+
* methods to build route definitions with a fluent API.
|
|
10
|
+
*
|
|
11
|
+
* Response helpers (ok, created, paginated, noContent) provide consistent
|
|
12
|
+
* response formats across the application.
|
|
13
|
+
*/
|
|
14
|
+
export class BaseController {
|
|
15
|
+
settings;
|
|
16
|
+
services;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new controller instance.
|
|
19
|
+
*
|
|
20
|
+
* @param settings - Application settings passed from WebApplication
|
|
21
|
+
* @param services - Service container for dependency injection
|
|
22
|
+
*/
|
|
23
|
+
constructor(settings, services) {
|
|
24
|
+
this.settings = settings;
|
|
25
|
+
this.services = services;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new route builder for defining routes.
|
|
29
|
+
*
|
|
30
|
+
* @returns A new RouteBuilder instance
|
|
31
|
+
*/
|
|
32
|
+
route() {
|
|
33
|
+
return new RouteBuilder();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new route builder with authentication required.
|
|
37
|
+
* Shorthand for route().secure().
|
|
38
|
+
*
|
|
39
|
+
* @returns A new RouteBuilder instance with secure flag set
|
|
40
|
+
*/
|
|
41
|
+
authenticated() {
|
|
42
|
+
return this.route().secure();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Send a successful 200 OK response with data.
|
|
46
|
+
*
|
|
47
|
+
* @param res - Express response object
|
|
48
|
+
* @param data - Data to send in the response
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* this.ok(res, { user: { id: 1, name: 'John' } });
|
|
53
|
+
* // Response: { success: true, data: { user: { id: 1, name: 'John' } } }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
ok(res, data) {
|
|
57
|
+
res.json({ success: true, data });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Send a 201 Created response with data.
|
|
61
|
+
*
|
|
62
|
+
* @param res - Express response object
|
|
63
|
+
* @param data - Data to send in the response
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* this.created(res, { id: 123, name: 'New Item' });
|
|
68
|
+
* // Response: { success: true, data: { id: 123, name: 'New Item' } }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
created(res, data) {
|
|
72
|
+
res.status(201).json({ success: true, data });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Send a paginated response with metadata.
|
|
76
|
+
*
|
|
77
|
+
* @param res - Express response object
|
|
78
|
+
* @param data - Array of items for the current page
|
|
79
|
+
* @param total - Total number of items across all pages
|
|
80
|
+
* @param page - Current page number (1-indexed)
|
|
81
|
+
* @param limit - Number of items per page
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* this.paginated(res, users, 150, 2, 50);
|
|
86
|
+
* // Response: {
|
|
87
|
+
* // success: true,
|
|
88
|
+
* // data: [...],
|
|
89
|
+
* // pagination: { total: 150, page: 2, limit: 50, pages: 3 }
|
|
90
|
+
* // }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
paginated(res, data, total, page, limit) {
|
|
94
|
+
res.json({
|
|
95
|
+
success: true,
|
|
96
|
+
data,
|
|
97
|
+
pagination: {
|
|
98
|
+
total,
|
|
99
|
+
page,
|
|
100
|
+
limit,
|
|
101
|
+
pages: Math.ceil(total / limit),
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Send a 204 No Content response.
|
|
107
|
+
* Typically used for successful DELETE operations or updates with no return value.
|
|
108
|
+
*
|
|
109
|
+
* @param res - Express response object
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* // DELETE /users/123
|
|
114
|
+
* await userService.delete(id);
|
|
115
|
+
* this.noContent(res);
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
noContent(res) {
|
|
119
|
+
res.status(204).end();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=base-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-controller.js","sourceRoot":"","sources":["../../src/application/base-controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAyBnE;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,cAAc;IAQtB;IACA;IARZ;;;;;OAKG;IACH,YACY,QAA6B,EAC7B,QAA0B;QAD1B,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,aAAQ,GAAR,QAAQ,CAAkB;IACnC,CAAC;IAUJ;;;;OAIG;IACO,KAAK;QACb,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACO,aAAa;QACrB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;OAWG;IACO,EAAE,CAAI,GAAa,EAAE,IAAO;QACpC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAgC,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;;;;;;OAWG;IACO,OAAO,CAAI,GAAa,EAAE,IAAO;QACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAgC,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACO,SAAS,CACjB,GAAa,EACb,IAAS,EACT,KAAa,EACb,IAAY,EACZ,KAAa;QAEb,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,UAAU,EAAE;gBACV,KAAK;gBACL,IAAI;gBACJ,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aAChC;SACsB,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,SAAS,CAAC,GAAa;QAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Logger } from './type.js';
|
|
2
|
+
/**
|
|
3
|
+
* Log level enumeration for structured logging.
|
|
4
|
+
*/
|
|
5
|
+
export type LogLevel = 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';
|
|
6
|
+
/**
|
|
7
|
+
* Console-based logger implementation.
|
|
8
|
+
* Provides structured logging with configurable log levels and prefixes.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* Log levels:
|
|
12
|
+
* - ERROR (1): Errors only
|
|
13
|
+
* - WARN (2): Errors and warnings
|
|
14
|
+
* - INFO (3): Errors, warnings, and info
|
|
15
|
+
* - DEBUG (4): All messages including debug
|
|
16
|
+
*
|
|
17
|
+
* DEBUG mode can also be enabled via DEBUG=true environment variable.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ConsoleLogger implements Logger {
|
|
20
|
+
protected prefix: string | undefined;
|
|
21
|
+
protected level: number;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new ConsoleLogger instance.
|
|
24
|
+
*
|
|
25
|
+
* @param prefix - Optional prefix for log messages (e.g., 'APP', 'Plugin:Auth')
|
|
26
|
+
* @param logLevel - Optional log level (defaults to process.env.LOG_LEVEL or 'ERROR')
|
|
27
|
+
*/
|
|
28
|
+
constructor(prefix?: string, logLevel?: LogLevel);
|
|
29
|
+
/**
|
|
30
|
+
* Logs an error message.
|
|
31
|
+
*
|
|
32
|
+
* @param message - Error message
|
|
33
|
+
* @param data - Optional additional data to log
|
|
34
|
+
*/
|
|
35
|
+
error(message: string, data?: Record<string, any>): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Logs a warning message.
|
|
38
|
+
*
|
|
39
|
+
* @param message - Warning message
|
|
40
|
+
* @param data - Optional additional data to log
|
|
41
|
+
*/
|
|
42
|
+
warn(message: string, data?: Record<string, any>): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Logs an informational message.
|
|
45
|
+
*
|
|
46
|
+
* @param message - Info message
|
|
47
|
+
* @param data - Optional additional data to log
|
|
48
|
+
*/
|
|
49
|
+
info(message: string, data?: Record<string, any>): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Logs a debug message.
|
|
52
|
+
* Only logged if LOG_LEVEL >= 4 or DEBUG=true.
|
|
53
|
+
*
|
|
54
|
+
* @param message - Debug message
|
|
55
|
+
* @param data - Optional additional data to log
|
|
56
|
+
*/
|
|
57
|
+
debug(message: string, data?: Record<string, any>): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Determines if a message at the given level should be logged.
|
|
60
|
+
*
|
|
61
|
+
* The configured level acts as a threshold: all messages at or below
|
|
62
|
+
* the configured level are logged. For example, if LOG_LEVEL=WARN (2),
|
|
63
|
+
* then ERROR (1) and WARN (2) are logged, but INFO (3) and DEBUG (4) are not.
|
|
64
|
+
*
|
|
65
|
+
* @param level - Log level of the message (1=ERROR, 2=WARN, 3=INFO, 4=DEBUG)
|
|
66
|
+
* @returns True if message should be logged
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
protected shouldLog(level: number): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Formats a log message with type, prefix, and optional data.
|
|
72
|
+
*
|
|
73
|
+
* @param type - Log type (ERROR, WARN, INFO, DEBUG)
|
|
74
|
+
* @param message - Log message
|
|
75
|
+
* @param data - Optional additional data
|
|
76
|
+
* @returns Formatted log message
|
|
77
|
+
* @internal
|
|
78
|
+
*/
|
|
79
|
+
protected message(type: string, message: string, data?: Record<string, any>): string;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=console-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../src/application/console-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAa3D;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAOhD;;;;;OAKG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMvD;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMtD;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMtD;;;;;;OAMG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMvD;;;;;;;;;;OAUG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;;;;OAQG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAG5E"}
|