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,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map log level names to numeric values for comparison.
|
|
3
|
+
* Lower numbers = higher priority (ERROR is highest).
|
|
4
|
+
*/
|
|
5
|
+
const LOG_LEVEL_MAP = {
|
|
6
|
+
ERROR: 1,
|
|
7
|
+
WARN: 2,
|
|
8
|
+
INFO: 3,
|
|
9
|
+
DEBUG: 4,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Console-based logger implementation.
|
|
13
|
+
* Provides structured logging with configurable log levels and prefixes.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* Log levels:
|
|
17
|
+
* - ERROR (1): Errors only
|
|
18
|
+
* - WARN (2): Errors and warnings
|
|
19
|
+
* - INFO (3): Errors, warnings, and info
|
|
20
|
+
* - DEBUG (4): All messages including debug
|
|
21
|
+
*
|
|
22
|
+
* DEBUG mode can also be enabled via DEBUG=true environment variable.
|
|
23
|
+
*/
|
|
24
|
+
export class ConsoleLogger {
|
|
25
|
+
prefix;
|
|
26
|
+
level;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new ConsoleLogger instance.
|
|
29
|
+
*
|
|
30
|
+
* @param prefix - Optional prefix for log messages (e.g., 'APP', 'Plugin:Auth')
|
|
31
|
+
* @param logLevel - Optional log level (defaults to process.env.LOG_LEVEL or 'ERROR')
|
|
32
|
+
*/
|
|
33
|
+
constructor(prefix, logLevel) {
|
|
34
|
+
this.prefix = prefix;
|
|
35
|
+
// Use provided log level, fall back to process.env.LOG_LEVEL, then default to ERROR
|
|
36
|
+
const levelFromEnv = (process.env.LOG_LEVEL || 'ERROR').toUpperCase();
|
|
37
|
+
this.level = LOG_LEVEL_MAP[logLevel || levelFromEnv] ?? 1;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Logs an error message.
|
|
41
|
+
*
|
|
42
|
+
* @param message - Error message
|
|
43
|
+
* @param data - Optional additional data to log
|
|
44
|
+
*/
|
|
45
|
+
async error(message, data) {
|
|
46
|
+
if (this.shouldLog(1)) {
|
|
47
|
+
console.error(this.message('ERROR', message, data));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Logs a warning message.
|
|
52
|
+
*
|
|
53
|
+
* @param message - Warning message
|
|
54
|
+
* @param data - Optional additional data to log
|
|
55
|
+
*/
|
|
56
|
+
async warn(message, data) {
|
|
57
|
+
if (this.shouldLog(2)) {
|
|
58
|
+
console.log(this.message('WARN', message, data));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Logs an informational message.
|
|
63
|
+
*
|
|
64
|
+
* @param message - Info message
|
|
65
|
+
* @param data - Optional additional data to log
|
|
66
|
+
*/
|
|
67
|
+
async info(message, data) {
|
|
68
|
+
if (this.shouldLog(3)) {
|
|
69
|
+
console.log(this.message('INFO', message, data));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Logs a debug message.
|
|
74
|
+
* Only logged if LOG_LEVEL >= 4 or DEBUG=true.
|
|
75
|
+
*
|
|
76
|
+
* @param message - Debug message
|
|
77
|
+
* @param data - Optional additional data to log
|
|
78
|
+
*/
|
|
79
|
+
async debug(message, data) {
|
|
80
|
+
if (this.shouldLog(4) || process.env.DEBUG === 'true') {
|
|
81
|
+
console.log(this.message('DEBUG', message, data));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Determines if a message at the given level should be logged.
|
|
86
|
+
*
|
|
87
|
+
* The configured level acts as a threshold: all messages at or below
|
|
88
|
+
* the configured level are logged. For example, if LOG_LEVEL=WARN (2),
|
|
89
|
+
* then ERROR (1) and WARN (2) are logged, but INFO (3) and DEBUG (4) are not.
|
|
90
|
+
*
|
|
91
|
+
* @param level - Log level of the message (1=ERROR, 2=WARN, 3=INFO, 4=DEBUG)
|
|
92
|
+
* @returns True if message should be logged
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
shouldLog(level) {
|
|
96
|
+
return level <= this.level;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Formats a log message with type, prefix, and optional data.
|
|
100
|
+
*
|
|
101
|
+
* @param type - Log type (ERROR, WARN, INFO, DEBUG)
|
|
102
|
+
* @param message - Log message
|
|
103
|
+
* @param data - Optional additional data
|
|
104
|
+
* @returns Formatted log message
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
message(type, message, data) {
|
|
108
|
+
return `[${type}${this.prefix ? `:${this.prefix.toUpperCase()}` : ''}]: ${message}${data ? ` - ${JSON.stringify(data)}` : ''}`;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=console-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../src/application/console-logger.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,aAAa,GAA6B;IAC9C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,aAAa;IACd,MAAM,CAAqB;IAC3B,KAAK,CAAS;IAExB;;;;;OAKG;IACH,YAAY,MAAe,EAAE,QAAmB;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,oFAAoF;QACpF,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,WAAW,EAAc,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,IAA0B;QACrD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,IAA0B;QACrD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACO,SAAS,CAAC,KAAa;QAC/B,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACO,OAAO,CAAC,IAAY,EAAE,OAAe,EAAE,IAA0B;QACzE,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjI,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ApplicationSettings } from './application-settings.js';
|
|
2
|
+
import { ServiceContainer } from './service-container.js';
|
|
3
|
+
/**
|
|
4
|
+
* Controller definition for registering controllers with WebApplication.
|
|
5
|
+
*/
|
|
6
|
+
export interface ControllerDefinition {
|
|
7
|
+
/** Base URL path for all controller routes */
|
|
8
|
+
basePath: string;
|
|
9
|
+
/** Controller class constructor */
|
|
10
|
+
ControllerClass: new (settings: ApplicationSettings, services: ServiceContainer) => any;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Registry for managing application controllers.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare class ControllerRegistry {
|
|
18
|
+
protected controllers: ControllerDefinition[];
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Gets all registered controllers.
|
|
22
|
+
*
|
|
23
|
+
* @returns Array of controller definitions
|
|
24
|
+
*/
|
|
25
|
+
getAll(): ControllerDefinition[];
|
|
26
|
+
/**
|
|
27
|
+
* Registers a controller with a base path.
|
|
28
|
+
*
|
|
29
|
+
* @param basePath - Base URL path for all controller routes
|
|
30
|
+
* @param ControllerClass - Controller class constructor
|
|
31
|
+
*/
|
|
32
|
+
register(basePath: string, ControllerClass: new (settings: ApplicationSettings, services: ServiceContainer) => any): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=controller-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-registry.d.ts","sourceRoot":"","sources":["../../src/application/controller-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,eAAe,EAAE,KAAK,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,KAAK,GAAG,CAAC;CACzF;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,SAAS,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAC;;IAK9C;;;;OAIG;IACH,MAAM;IAIN;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,KAAK,GAAG;CAMnH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry for managing application controllers.
|
|
3
|
+
*
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export class ControllerRegistry {
|
|
7
|
+
controllers;
|
|
8
|
+
constructor() {
|
|
9
|
+
this.controllers = [];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Gets all registered controllers.
|
|
13
|
+
*
|
|
14
|
+
* @returns Array of controller definitions
|
|
15
|
+
*/
|
|
16
|
+
getAll() {
|
|
17
|
+
return this.controllers;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Registers a controller with a base path.
|
|
21
|
+
*
|
|
22
|
+
* @param basePath - Base URL path for all controller routes
|
|
23
|
+
* @param ControllerClass - Controller class constructor
|
|
24
|
+
*/
|
|
25
|
+
register(basePath, ControllerClass) {
|
|
26
|
+
this.controllers.push({
|
|
27
|
+
basePath,
|
|
28
|
+
ControllerClass,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=controller-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-registry.js","sourceRoot":"","sources":["../../src/application/controller-registry.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACnB,WAAW,CAAyB;IAC9C;QACE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,QAAgB,EAAE,eAAuF;QAChH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,QAAQ;YACR,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ErrorRequestHandler, Request } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Error handler middleware options
|
|
4
|
+
*/
|
|
5
|
+
export type onErrorLog = (req: Request, error: Error, data: Record<any, string>) => Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Error handler middleware
|
|
8
|
+
* Formats errors and sends appropriate responses using StandardErrorResponse format
|
|
9
|
+
*
|
|
10
|
+
* @param logger - Logger function for error logging
|
|
11
|
+
* @param includeStack - Whether to include stack traces in responses
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* app.use(errorHandlerMiddleware(
|
|
16
|
+
* async (req, err, data) => logger.error(data.error, data),
|
|
17
|
+
* process.env.NODE_ENV === 'development'
|
|
18
|
+
* ));
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function errorHandlerMiddleware(logger: onErrorLog, includeStack: boolean): ErrorRequestHandler;
|
|
22
|
+
//# sourceMappingURL=error-handler-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler-middleware.d.ts","sourceRoot":"","sources":["../../src/application/error-handler-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAgB,OAAO,EAAY,MAAM,SAAS,CAAC;AAI/E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,OAAO,GACpB,mBAAmB,CAwDrB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ApiError } from '../errors/api-error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error handler middleware
|
|
4
|
+
* Formats errors and sends appropriate responses using StandardErrorResponse format
|
|
5
|
+
*
|
|
6
|
+
* @param logger - Logger function for error logging
|
|
7
|
+
* @param includeStack - Whether to include stack traces in responses
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* app.use(errorHandlerMiddleware(
|
|
12
|
+
* async (req, err, data) => logger.error(data.error, data),
|
|
13
|
+
* process.env.NODE_ENV === 'development'
|
|
14
|
+
* ));
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export function errorHandlerMiddleware(logger, includeStack) {
|
|
18
|
+
return (async (err, req, res, next) => {
|
|
19
|
+
// Handle ApiError
|
|
20
|
+
if (err instanceof ApiError) {
|
|
21
|
+
const response = {
|
|
22
|
+
success: false,
|
|
23
|
+
error: {
|
|
24
|
+
code: err.code,
|
|
25
|
+
message: err.message,
|
|
26
|
+
statusCode: err.statusCode,
|
|
27
|
+
timestamp: new Date().toISOString(),
|
|
28
|
+
requestId: req.id,
|
|
29
|
+
path: req.path,
|
|
30
|
+
...(err.details && { details: err.details }),
|
|
31
|
+
...(includeStack && { stack: err.stack }),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
// Wrap logger in try-catch to prevent logger failures from
|
|
35
|
+
// crashing error handling — the client must always get a response
|
|
36
|
+
try {
|
|
37
|
+
await logger(req, err, response.error);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Logger failed — silently continue to send the error response
|
|
41
|
+
}
|
|
42
|
+
return res.status(err.statusCode).json(response);
|
|
43
|
+
}
|
|
44
|
+
// Handle unknown errors
|
|
45
|
+
const statusCode = 500;
|
|
46
|
+
const message = includeStack ? err.message : 'Internal Server Error';
|
|
47
|
+
const response = {
|
|
48
|
+
success: false,
|
|
49
|
+
error: {
|
|
50
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
51
|
+
message,
|
|
52
|
+
statusCode,
|
|
53
|
+
timestamp: new Date().toISOString(),
|
|
54
|
+
requestId: req.id,
|
|
55
|
+
path: req.path,
|
|
56
|
+
...(includeStack && { stack: err.stack }),
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
// Wrap logger in try-catch to prevent logger failures from
|
|
60
|
+
// crashing error handling — the client must always get a response
|
|
61
|
+
try {
|
|
62
|
+
await logger(req, err, response.error);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Logger failed — silently continue to send the error response
|
|
66
|
+
}
|
|
67
|
+
res.status(statusCode).json(response);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=error-handler-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler-middleware.js","sourceRoot":"","sources":["../../src/application/error-handler-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAQlD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAkB,EAClB,YAAqB;IAErB,OAAO,CAAC,KAAK,EAAE,GAAU,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC5E,kBAAkB;QAClB,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAA0B;gBACtC,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,GAAG,CAAC,EAAE;oBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC5C,GAAG,CAAC,YAAY,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;iBAC1C;aACF,CAAC;YAEF,2DAA2D;YAC3D,kEAAkE;YAClE,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAY,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;YAED,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,GAAG,CAAC;QACvB,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAErE,MAAM,QAAQ,GAA0B;YACtC,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,uBAAuB;gBAC7B,OAAO;gBACP,UAAU;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,GAAG,CAAC,EAAE;gBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG,CAAC,YAAY,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;aAC1C;SACF,CAAC;QAEF,2DAA2D;QAC3D,kEAAkE;QAClE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAY,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAwB,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './application-settings.js';
|
|
2
|
+
export * from './base-controller.js';
|
|
3
|
+
export * from './console-logger.js';
|
|
4
|
+
export * from './plugin.js';
|
|
5
|
+
export * from './rate-limiter.js';
|
|
6
|
+
export * from './request-context.js';
|
|
7
|
+
export * from './route-builder.js';
|
|
8
|
+
export * from './service-container.js';
|
|
9
|
+
export * from './services.js';
|
|
10
|
+
export * from './structured-logger.js';
|
|
11
|
+
export * from './type.js';
|
|
12
|
+
export * from './web-application.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './application-settings.js';
|
|
2
|
+
export * from './base-controller.js';
|
|
3
|
+
export * from './console-logger.js';
|
|
4
|
+
export * from './plugin.js';
|
|
5
|
+
export * from './rate-limiter.js';
|
|
6
|
+
export * from './request-context.js';
|
|
7
|
+
export * from './route-builder.js';
|
|
8
|
+
export * from './service-container.js';
|
|
9
|
+
export * from './services.js';
|
|
10
|
+
export * from './structured-logger.js';
|
|
11
|
+
export * from './type.js';
|
|
12
|
+
export * from './web-application.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/application/logger.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/application/logger.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Express } from 'express';
|
|
2
|
+
import { ConsoleLogger } from './console-logger.js';
|
|
3
|
+
import { Logger } from './type.js';
|
|
4
|
+
import { WebApplication } from './web-application.js';
|
|
5
|
+
/**
|
|
6
|
+
* Plugin interface for extending WebApplication functionality.
|
|
7
|
+
* Plugins can provide health checks and cleanup on shutdown.
|
|
8
|
+
*/
|
|
9
|
+
export interface Plugin {
|
|
10
|
+
/** Optional health check function */
|
|
11
|
+
health?: () => Promise<boolean>;
|
|
12
|
+
/** Optional cleanup function called on application shutdown */
|
|
13
|
+
shutdown?: () => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Plugin definition for registering plugins with WebApplication.
|
|
17
|
+
*/
|
|
18
|
+
export interface PluginDefinition {
|
|
19
|
+
/** Unique plugin name */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Factory function that creates and initializes the plugin */
|
|
22
|
+
factory: (params: {
|
|
23
|
+
app: WebApplication;
|
|
24
|
+
express: Express;
|
|
25
|
+
logger: Logger;
|
|
26
|
+
}) => Promise<Plugin | void>;
|
|
27
|
+
/** Plugin priority. Lower numbers install first. Default: 100 */
|
|
28
|
+
priority?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Registry for managing application plugins.
|
|
32
|
+
* Handles plugin installation, health checks, and shutdown.
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export declare class PluginRegistry {
|
|
37
|
+
protected registry: Record<string, PluginDefinition>;
|
|
38
|
+
protected _shutdown: {
|
|
39
|
+
shutdown: () => Promise<void>;
|
|
40
|
+
name: string;
|
|
41
|
+
}[];
|
|
42
|
+
protected _health: {
|
|
43
|
+
health: () => Promise<boolean>;
|
|
44
|
+
name: string;
|
|
45
|
+
}[];
|
|
46
|
+
protected logger: ConsoleLogger;
|
|
47
|
+
constructor();
|
|
48
|
+
/**
|
|
49
|
+
* Installs all registered plugins.
|
|
50
|
+
* Plugins are installed in priority order (lower priority values first).
|
|
51
|
+
*
|
|
52
|
+
* @param app - WebApplication instance
|
|
53
|
+
* @param express - Express application instance
|
|
54
|
+
*/
|
|
55
|
+
install(app: WebApplication, express: Express): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Checks health status of all plugins.
|
|
58
|
+
*
|
|
59
|
+
* @returns True if all plugins are healthy, false otherwise
|
|
60
|
+
*/
|
|
61
|
+
health(): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Shuts down all plugins in order.
|
|
64
|
+
*/
|
|
65
|
+
shutdown(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Registers a plugin definition.
|
|
68
|
+
*
|
|
69
|
+
* @param def - Plugin definition to register
|
|
70
|
+
*/
|
|
71
|
+
register(def: PluginDefinition): void;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/application/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,CAAC,MAAM,EAAE;QAChB,GAAG,EAAE,cAAc,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACrD,SAAS,CAAC,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,SAAS,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAEtE,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;;IAQhC;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO;IA4BnD;;;;OAIG;IACG,MAAM;IAkBZ;;OAEG;IACG,QAAQ;IAOd;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,gBAAgB;CAG/B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ConsoleLogger } from './console-logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry for managing application plugins.
|
|
4
|
+
* Handles plugin installation, health checks, and shutdown.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export class PluginRegistry {
|
|
9
|
+
registry;
|
|
10
|
+
_shutdown;
|
|
11
|
+
_health;
|
|
12
|
+
logger;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.registry = {};
|
|
15
|
+
this._shutdown = [];
|
|
16
|
+
this._health = [];
|
|
17
|
+
this.logger = new ConsoleLogger('Plugins');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Installs all registered plugins.
|
|
21
|
+
* Plugins are installed in priority order (lower priority values first).
|
|
22
|
+
*
|
|
23
|
+
* @param app - WebApplication instance
|
|
24
|
+
* @param express - Express application instance
|
|
25
|
+
*/
|
|
26
|
+
async install(app, express) {
|
|
27
|
+
// Sort plugins by priority (lower numbers first)
|
|
28
|
+
const items = Object.values(this.registry).sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));
|
|
29
|
+
for (const item of items) {
|
|
30
|
+
const plugin = (await item.factory({
|
|
31
|
+
app,
|
|
32
|
+
express,
|
|
33
|
+
logger: new ConsoleLogger(`Plugin:${item.name}`),
|
|
34
|
+
}));
|
|
35
|
+
if (plugin?.shutdown) {
|
|
36
|
+
this._shutdown.push({
|
|
37
|
+
name: item.name,
|
|
38
|
+
shutdown: plugin.shutdown,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (plugin?.health) {
|
|
42
|
+
this._health.push({
|
|
43
|
+
name: item.name,
|
|
44
|
+
health: plugin.health,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
await this.logger.info(`Plugin ${item.name} installed.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Checks health status of all plugins.
|
|
52
|
+
*
|
|
53
|
+
* @returns True if all plugins are healthy, false otherwise
|
|
54
|
+
*/
|
|
55
|
+
async health() {
|
|
56
|
+
// If no health checks registered, consider system healthy
|
|
57
|
+
if (this._health.length === 0) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
let count = 0;
|
|
61
|
+
for (const item of this._health) {
|
|
62
|
+
const healthy = await item.health();
|
|
63
|
+
if (!healthy) {
|
|
64
|
+
await this.logger.debug(`${item.name} plugin is not healthy`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
count += 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return count === this._health.length;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Shuts down all plugins in order.
|
|
74
|
+
*/
|
|
75
|
+
async shutdown() {
|
|
76
|
+
for (const item of this._shutdown) {
|
|
77
|
+
await this.logger.info(`Shutting down ${item.name} plugin.`);
|
|
78
|
+
await item.shutdown();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Registers a plugin definition.
|
|
83
|
+
*
|
|
84
|
+
* @param def - Plugin definition to register
|
|
85
|
+
*/
|
|
86
|
+
register(def) {
|
|
87
|
+
this.registry[def.name] = def;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/application/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA+BpD;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACf,QAAQ,CAAmC;IAC3C,SAAS,CAAoD;IAC7D,OAAO,CAAqD;IAE5D,MAAM,CAAgB;IAChC;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,GAAmB,EAAE,OAAgB;QACjD,iDAAiD;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CACpD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC;gBACjC,GAAG;gBACH,OAAO;gBACP,MAAM,EAAE,IAAI,aAAa,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC;aACjD,CAAC,CAAW,CAAC;YACd,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,0DAA0D;QAC1D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,GAAqB;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NextFunction, Request, Response } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for rate limiting middleware.
|
|
4
|
+
*/
|
|
5
|
+
export interface RateLimitOptions {
|
|
6
|
+
/** Maximum requests per window. Default: 100 */
|
|
7
|
+
maxRequests?: number;
|
|
8
|
+
/** Window duration in milliseconds. Default: 60000 (1 minute) */
|
|
9
|
+
windowMs?: number;
|
|
10
|
+
/** Key extractor function. Default: uses IP address */
|
|
11
|
+
keyExtractor?: (req: Request) => string;
|
|
12
|
+
/** Optional message for rate limit errors */
|
|
13
|
+
message?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a rate limiting middleware.
|
|
17
|
+
* Uses in-memory storage — suitable for single-instance deployments.
|
|
18
|
+
* For multi-instance deployments, use a Redis-backed implementation via plugins.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Rate limiting configuration options
|
|
21
|
+
* @returns Express middleware function
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Global rate limiting
|
|
26
|
+
* app.express.use(rateLimitMiddleware({ maxRequests: 100, windowMs: 60000 }));
|
|
27
|
+
*
|
|
28
|
+
* // Per-route rate limiting
|
|
29
|
+
* this.route().get('/api/search')
|
|
30
|
+
* .middleware(rateLimitMiddleware({ maxRequests: 10, windowMs: 60000 }))
|
|
31
|
+
* .handle(this.search);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function rateLimitMiddleware(options?: RateLimitOptions): (req: Request, res: Response, next: NextFunction) => void;
|
|
35
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/application/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACxC,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,gBAAgB,IAyBpD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UAyBxD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { RateLimitError } from '../errors/http-errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a rate limiting middleware.
|
|
4
|
+
* Uses in-memory storage — suitable for single-instance deployments.
|
|
5
|
+
* For multi-instance deployments, use a Redis-backed implementation via plugins.
|
|
6
|
+
*
|
|
7
|
+
* @param options - Rate limiting configuration options
|
|
8
|
+
* @returns Express middleware function
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Global rate limiting
|
|
13
|
+
* app.express.use(rateLimitMiddleware({ maxRequests: 100, windowMs: 60000 }));
|
|
14
|
+
*
|
|
15
|
+
* // Per-route rate limiting
|
|
16
|
+
* this.route().get('/api/search')
|
|
17
|
+
* .middleware(rateLimitMiddleware({ maxRequests: 10, windowMs: 60000 }))
|
|
18
|
+
* .handle(this.search);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function rateLimitMiddleware(options) {
|
|
22
|
+
const { maxRequests = 100, windowMs = 60_000, keyExtractor = (req) => req.ip || 'unknown', message = 'Rate limit exceeded', } = options || {};
|
|
23
|
+
// In-memory storage: key -> { count, resetTime }
|
|
24
|
+
const hits = new Map();
|
|
25
|
+
// Periodic cleanup to prevent memory leaks
|
|
26
|
+
// Runs every windowMs to remove expired entries
|
|
27
|
+
const cleanup = setInterval(() => {
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
for (const [key, value] of hits) {
|
|
30
|
+
if (value.resetTime <= now) {
|
|
31
|
+
hits.delete(key);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}, windowMs);
|
|
35
|
+
// Prevent cleanup interval from keeping process alive
|
|
36
|
+
if (cleanup.unref)
|
|
37
|
+
cleanup.unref();
|
|
38
|
+
return (req, res, next) => {
|
|
39
|
+
const key = keyExtractor(req);
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
const record = hits.get(key);
|
|
42
|
+
// First request or window expired — create new record
|
|
43
|
+
if (!record || record.resetTime <= now) {
|
|
44
|
+
hits.set(key, { count: 1, resetTime: now + windowMs });
|
|
45
|
+
setRateLimitHeaders(res, maxRequests, maxRequests - 1, now + windowMs);
|
|
46
|
+
return next();
|
|
47
|
+
}
|
|
48
|
+
// Increment counter for existing window
|
|
49
|
+
record.count += 1;
|
|
50
|
+
// Rate limit exceeded
|
|
51
|
+
if (record.count > maxRequests) {
|
|
52
|
+
setRateLimitHeaders(res, maxRequests, 0, record.resetTime);
|
|
53
|
+
throw new RateLimitError(message);
|
|
54
|
+
}
|
|
55
|
+
// Within limit
|
|
56
|
+
setRateLimitHeaders(res, maxRequests, maxRequests - record.count, record.resetTime);
|
|
57
|
+
next();
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Sets standard rate limit headers on the response.
|
|
62
|
+
*
|
|
63
|
+
* @param res - Express response object
|
|
64
|
+
* @param limit - Maximum requests allowed
|
|
65
|
+
* @param remaining - Remaining requests in current window
|
|
66
|
+
* @param reset - Unix timestamp (seconds) when the window resets
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
function setRateLimitHeaders(res, limit, remaining, reset) {
|
|
70
|
+
res.setHeader('X-RateLimit-Limit', limit);
|
|
71
|
+
res.setHeader('X-RateLimit-Remaining', Math.max(0, remaining));
|
|
72
|
+
res.setHeader('X-RateLimit-Reset', Math.ceil(reset / 1000));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/application/rate-limiter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAgB1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,MAAM,EACJ,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,MAAM,EACjB,YAAY,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,SAAS,EACpD,OAAO,GAAG,qBAAqB,GAChC,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,iDAAiD;IACjD,MAAM,IAAI,GAAsD,IAAI,GAAG,EAAE,CAAC;IAE1E,2CAA2C;IAC3C,gDAAgD;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEb,sDAAsD;IACtD,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAEnC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,sDAAsD;QACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;YACvD,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;YACvE,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,wCAAwC;QACxC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAElB,sBAAsB;QACtB,IAAI,MAAM,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;YAC/B,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,eAAe;QACf,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,GAAa,EAAE,KAAa,EAAE,SAAiB,EAAE,KAAa;IACzF,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/D,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC"}
|