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,611 @@
|
|
|
1
|
+
import cookieParser from 'cookie-parser';
|
|
2
|
+
import cors from 'cors';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
import helmet from 'helmet';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { ForbiddenError, NotFoundError, UnauthorizedError, ValidationError } from '../errors/http-errors.js';
|
|
7
|
+
import { ApplicationSettings } from './application-settings.js';
|
|
8
|
+
import { ConsoleLogger } from './console-logger.js';
|
|
9
|
+
import { ControllerRegistry } from './controller-registry.js';
|
|
10
|
+
import { errorHandlerMiddleware } from './error-handler-middleware.js';
|
|
11
|
+
import { PluginRegistry } from './plugin.js';
|
|
12
|
+
import { requestIdMiddleware } from './request-id-middleware.js';
|
|
13
|
+
import { ServiceContainer, } from './service-container.js';
|
|
14
|
+
/**
|
|
15
|
+
* Main application class for building Express-based web applications.
|
|
16
|
+
* Provides a structured framework with dependency injection, routing, plugins,
|
|
17
|
+
* middleware, and error handling.
|
|
18
|
+
*
|
|
19
|
+
* @remarks
|
|
20
|
+
* WebApplication manages the complete lifecycle of an Express application including:
|
|
21
|
+
* - Configuration management via ApplicationSettings
|
|
22
|
+
* - Dependency injection via ServiceContainer
|
|
23
|
+
* - Plugin system for extensibility
|
|
24
|
+
* - Controller-based routing
|
|
25
|
+
* - Built-in middleware (CORS, body parsing, request ID, error handling)
|
|
26
|
+
* - Graceful shutdown handling
|
|
27
|
+
*/
|
|
28
|
+
export class WebApplication {
|
|
29
|
+
settings;
|
|
30
|
+
expressApp;
|
|
31
|
+
server;
|
|
32
|
+
started;
|
|
33
|
+
serviceRegistry;
|
|
34
|
+
services;
|
|
35
|
+
plugins;
|
|
36
|
+
controllers;
|
|
37
|
+
logger;
|
|
38
|
+
lifecycleHooks;
|
|
39
|
+
signalHandlers;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new WebApplication instance.
|
|
42
|
+
*
|
|
43
|
+
* @param config - Optional application configuration
|
|
44
|
+
*/
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.settings = new ApplicationSettings(config);
|
|
47
|
+
this.expressApp = express();
|
|
48
|
+
this.started = false;
|
|
49
|
+
// Create service registry owned by this application instance
|
|
50
|
+
this.serviceRegistry = { definitions: {}, singletons: {} };
|
|
51
|
+
this.services = new ServiceContainer(this.serviceRegistry, this.getSettings());
|
|
52
|
+
this.plugins = new PluginRegistry();
|
|
53
|
+
this.controllers = new ControllerRegistry();
|
|
54
|
+
// Pass log level from settings to logger constructor
|
|
55
|
+
const logLevel = this.settings.get('LOG_LEVEL', 'ERROR');
|
|
56
|
+
this.logger = new ConsoleLogger('APP', logLevel);
|
|
57
|
+
// Initialize lifecycle hooks
|
|
58
|
+
this.lifecycleHooks = {
|
|
59
|
+
beforeStart: [],
|
|
60
|
+
afterStart: [],
|
|
61
|
+
beforeShutdown: [],
|
|
62
|
+
afterShutdown: [],
|
|
63
|
+
};
|
|
64
|
+
this.signalHandlers = [];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Registers a lifecycle hook.
|
|
68
|
+
*
|
|
69
|
+
* @param event - The lifecycle event to hook into
|
|
70
|
+
* @param hook - The hook function to execute
|
|
71
|
+
* @returns This application instance for method chaining
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* app
|
|
76
|
+
* .on('beforeStart', async () => {
|
|
77
|
+
* await initializeDatabase();
|
|
78
|
+
* })
|
|
79
|
+
* .on('afterStart', () => {
|
|
80
|
+
* console.log('Server is ready!');
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
on(event, hook) {
|
|
85
|
+
this.lifecycleHooks[event].push(hook);
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Runs all hooks registered for a specific lifecycle event.
|
|
90
|
+
*
|
|
91
|
+
* @param event - The lifecycle event to run hooks for
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
94
|
+
async runHooks(event) {
|
|
95
|
+
for (const hook of this.lifecycleHooks[event]) {
|
|
96
|
+
await hook();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Registers a service in the dependency injection container.
|
|
101
|
+
*
|
|
102
|
+
* @param service - Service definition to register
|
|
103
|
+
* @returns This application instance for method chaining
|
|
104
|
+
*/
|
|
105
|
+
registerService(service) {
|
|
106
|
+
this.services.registerService(service);
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Gets all application settings.
|
|
111
|
+
*
|
|
112
|
+
* @returns Application settings object
|
|
113
|
+
* @template T - Extended ApplicationSettings type
|
|
114
|
+
*/
|
|
115
|
+
getSettings() {
|
|
116
|
+
return this.settings.getAll();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Loads configuration from .env.js and .env.local.js files in the current working directory.
|
|
120
|
+
*
|
|
121
|
+
* @internal
|
|
122
|
+
*/
|
|
123
|
+
async loadConfiguration() {
|
|
124
|
+
const configFiles = [
|
|
125
|
+
path.join(process.cwd(), '.env.js'),
|
|
126
|
+
path.join(process.cwd(), '.env.local.js'),
|
|
127
|
+
];
|
|
128
|
+
for (const f of configFiles) {
|
|
129
|
+
await this.settings.loadFromFile(f);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Sets up core Express middleware including trust proxy, CORS, body parsers,
|
|
134
|
+
* request ID, and security headers.
|
|
135
|
+
*
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
138
|
+
async setupCoreMiddleware() {
|
|
139
|
+
// Trust proxy (required for nginx, load balancers)
|
|
140
|
+
// Enables proper IP detection, secure cookies, etc.
|
|
141
|
+
const { TRUST_PROXY = true, ENV_MODE, BODY_LIMIT = '10mb', CORS } = this.settings.getAll();
|
|
142
|
+
if (TRUST_PROXY) {
|
|
143
|
+
this.expressApp.set('trust proxy', 1);
|
|
144
|
+
await this.logger.info('Setting trust proxy to true');
|
|
145
|
+
}
|
|
146
|
+
this.expressApp.set('x-powered-by', false);
|
|
147
|
+
await this.logger.info(`Setting ENV to ${ENV_MODE}`);
|
|
148
|
+
this.expressApp.set('env', ENV_MODE);
|
|
149
|
+
// CORS middleware (if enabled)
|
|
150
|
+
if (CORS !== false && CORS !== undefined) {
|
|
151
|
+
const corsOptions = this.buildCorsOptions(CORS);
|
|
152
|
+
this.expressApp.use(cors(corsOptions));
|
|
153
|
+
await this.logger.info('CORS is enabled');
|
|
154
|
+
}
|
|
155
|
+
this.expressApp.use(cookieParser());
|
|
156
|
+
// Body parsers with configurable size limits
|
|
157
|
+
this.expressApp.use(express.json({ limit: BODY_LIMIT }));
|
|
158
|
+
this.expressApp.use(express.urlencoded({ extended: true, limit: BODY_LIMIT }));
|
|
159
|
+
await this.logger.info(`Request BODY_LIMIT is set to ${BODY_LIMIT}`);
|
|
160
|
+
this.expressApp.use(requestIdMiddleware());
|
|
161
|
+
// Request timing middleware - logs request duration after response completes
|
|
162
|
+
this.expressApp.use((req, res, next) => {
|
|
163
|
+
const start = Date.now();
|
|
164
|
+
// Log after response finishes
|
|
165
|
+
res.on('finish', () => {
|
|
166
|
+
const duration = Date.now() - start;
|
|
167
|
+
this.logger.info(`${req.method} ${req.originalUrl} ${res.statusCode} ${duration}ms`, {
|
|
168
|
+
method: req.method,
|
|
169
|
+
url: req.originalUrl,
|
|
170
|
+
statusCode: res.statusCode,
|
|
171
|
+
duration,
|
|
172
|
+
requestId: req.id,
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
next();
|
|
176
|
+
});
|
|
177
|
+
// Security headers via helmet (comprehensive, production-ready)
|
|
178
|
+
// Disable CSP and COEP to allow applications to configure them as needed
|
|
179
|
+
this.expressApp.use(helmet({
|
|
180
|
+
contentSecurityPolicy: false, // Let apps configure CSP themselves
|
|
181
|
+
crossOriginEmbedderPolicy: false, // May break APIs and embedded resources
|
|
182
|
+
}));
|
|
183
|
+
await this.logger.info('Security headers enabled via helmet');
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Builds CORS options for the cors package from WebAFX CORS configuration.
|
|
187
|
+
*
|
|
188
|
+
* @param config - CORS configuration (true for defaults or custom config object)
|
|
189
|
+
* @returns Options object compatible with the cors package
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
192
|
+
buildCorsOptions(config) {
|
|
193
|
+
if (config === true) {
|
|
194
|
+
// Sensible defaults: allow all origins with wildcard
|
|
195
|
+
return {
|
|
196
|
+
origin: '*', // Wildcard - returns '*' in Access-Control-Allow-Origin header
|
|
197
|
+
credentials: true,
|
|
198
|
+
optionsSuccessStatus: 204, // Respond with 204 for OPTIONS preflight
|
|
199
|
+
preflightContinue: false, // Let cors handle OPTIONS
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Map WebAFX CorsConfig to cors.CorsOptions
|
|
203
|
+
// Only include properties that are actually defined to avoid passing undefined to cors package
|
|
204
|
+
const corsOptions = {
|
|
205
|
+
optionsSuccessStatus: 204, // Respond with 204 for OPTIONS preflight
|
|
206
|
+
preflightContinue: false, // Let cors handle OPTIONS
|
|
207
|
+
};
|
|
208
|
+
// Handle origin configuration
|
|
209
|
+
if (config.origin !== undefined) {
|
|
210
|
+
// The cors package behavior with strings is to set them directly without validation
|
|
211
|
+
// We need to convert single strings to validation functions for proper origin checking
|
|
212
|
+
if (typeof config.origin === 'string') {
|
|
213
|
+
const allowedOrigin = config.origin;
|
|
214
|
+
corsOptions.origin = (requestOrigin, callback) => {
|
|
215
|
+
// Allow if request origin matches the configured origin
|
|
216
|
+
if (requestOrigin === allowedOrigin) {
|
|
217
|
+
callback(null, true);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
callback(null, false);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// Arrays and functions can be passed through directly
|
|
226
|
+
corsOptions.origin = config.origin;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// If no origin specified in config, default to wildcard (allow all)
|
|
231
|
+
corsOptions.origin = '*';
|
|
232
|
+
}
|
|
233
|
+
if (config.methods !== undefined) {
|
|
234
|
+
corsOptions.methods = config.methods;
|
|
235
|
+
}
|
|
236
|
+
if (config.allowedHeaders !== undefined) {
|
|
237
|
+
corsOptions.allowedHeaders = config.allowedHeaders;
|
|
238
|
+
}
|
|
239
|
+
if (config.exposedHeaders !== undefined) {
|
|
240
|
+
corsOptions.exposedHeaders = config.exposedHeaders;
|
|
241
|
+
}
|
|
242
|
+
if (config.credentials !== undefined) {
|
|
243
|
+
corsOptions.credentials = config.credentials;
|
|
244
|
+
}
|
|
245
|
+
if (config.maxAge !== undefined) {
|
|
246
|
+
corsOptions.maxAge = config.maxAge;
|
|
247
|
+
}
|
|
248
|
+
return corsOptions;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Sets up global error handling middleware.
|
|
252
|
+
*
|
|
253
|
+
* @internal
|
|
254
|
+
*/
|
|
255
|
+
setupErrorHandling() {
|
|
256
|
+
this.expressApp.use(errorHandlerMiddleware(async (req, err, data) => {
|
|
257
|
+
const logger = await req.services.get('logger', this.logger);
|
|
258
|
+
await logger.error(data.error, data);
|
|
259
|
+
}, !this.settings.isProduction()));
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Attaches the service container to each request.
|
|
263
|
+
*
|
|
264
|
+
* @internal
|
|
265
|
+
*/
|
|
266
|
+
setupServiceContainer() {
|
|
267
|
+
this.expressApp.use((req, res, next) => {
|
|
268
|
+
// Create per-request container with shared registry
|
|
269
|
+
req.services = new ServiceContainer(this.serviceRegistry, this.getSettings(), req, res, next);
|
|
270
|
+
next();
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Validates request data against a Zod schema.
|
|
275
|
+
*
|
|
276
|
+
* @param schema - Zod validation schema
|
|
277
|
+
* @param merged - Merged request data (params, query, body)
|
|
278
|
+
* @returns Validated data
|
|
279
|
+
* @throws {ValidationError} If validation fails
|
|
280
|
+
* @internal
|
|
281
|
+
*/
|
|
282
|
+
async validateRequest(schema, merged) {
|
|
283
|
+
try {
|
|
284
|
+
// Note: Zod schemas should be defined with .strip() if you want to remove unknown properties
|
|
285
|
+
// Calling strip() here has no effect on already-created schemas
|
|
286
|
+
return await schema.parseAsync(merged);
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
// Zod errors have 'issues' property, format them for the response
|
|
290
|
+
const zodError = error;
|
|
291
|
+
const formattedErrors = zodError.issues?.map(issue => ({
|
|
292
|
+
path: issue.path.join('.'),
|
|
293
|
+
message: issue.message,
|
|
294
|
+
code: issue.code,
|
|
295
|
+
})) || [];
|
|
296
|
+
await this.logger.debug(`[ERROR]`, formattedErrors);
|
|
297
|
+
throw new ValidationError('Validation failed', formattedErrors);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Wraps a route handler with authentication, authorization, and validation logic.
|
|
302
|
+
*
|
|
303
|
+
* @param controller - Controller instance
|
|
304
|
+
* @param route - Route definition
|
|
305
|
+
* @returns Express request handler
|
|
306
|
+
* @internal
|
|
307
|
+
*/
|
|
308
|
+
wrapRouteHandler(controller, route) {
|
|
309
|
+
return async (req, res, next) => {
|
|
310
|
+
try {
|
|
311
|
+
// 1. Check authentication - resolve user service if secure route
|
|
312
|
+
if (route.secure) {
|
|
313
|
+
const user = await req.services.get('user', undefined);
|
|
314
|
+
if (!user) {
|
|
315
|
+
throw new UnauthorizedError('Authentication required');
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// 2. Check authorization
|
|
319
|
+
if (route.authorize) {
|
|
320
|
+
const user = await req.services.get('user', undefined);
|
|
321
|
+
const authorized = await route.authorize(req, user);
|
|
322
|
+
if (!authorized) {
|
|
323
|
+
throw new ForbiddenError('Access denied');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Separate input sources for type-safe access
|
|
327
|
+
const requestInput = {
|
|
328
|
+
params: req.params || {},
|
|
329
|
+
query: req.query || {},
|
|
330
|
+
body: req.body || {},
|
|
331
|
+
};
|
|
332
|
+
// Merged parameters for validation (backward compatible)
|
|
333
|
+
let parameters = {
|
|
334
|
+
...requestInput.params,
|
|
335
|
+
...requestInput.query,
|
|
336
|
+
...requestInput.body,
|
|
337
|
+
};
|
|
338
|
+
// 3. Validate request
|
|
339
|
+
if (route.validation) {
|
|
340
|
+
parameters = await this.validateRequest(route.validation, parameters);
|
|
341
|
+
}
|
|
342
|
+
// Store both merged and separated input
|
|
343
|
+
req.services.set('request-params', parameters);
|
|
344
|
+
req.services.set('request-input', requestInput);
|
|
345
|
+
// 4. Call controller method
|
|
346
|
+
await route.handler.call(controller, req, res, next);
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
next(error);
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Registers all controllers and their routes with Express.
|
|
355
|
+
* Logs per-controller route count and a final total for clarity.
|
|
356
|
+
*
|
|
357
|
+
* @internal
|
|
358
|
+
*/
|
|
359
|
+
async setupControllers() {
|
|
360
|
+
const controllers = this.controllers.getAll();
|
|
361
|
+
let totalRouteCount = 0;
|
|
362
|
+
for (const { basePath, ControllerClass } of controllers) {
|
|
363
|
+
const router = express.Router();
|
|
364
|
+
// Create controller instance with settings and services
|
|
365
|
+
const controller = new ControllerClass(this.settings, this.services);
|
|
366
|
+
// Get routes from controller
|
|
367
|
+
const routes = controller.routes();
|
|
368
|
+
// Register each route
|
|
369
|
+
for (const route of routes) {
|
|
370
|
+
const handler = this.wrapRouteHandler(controller, route);
|
|
371
|
+
// Combine route-level middleware with the handler
|
|
372
|
+
const handlers = [
|
|
373
|
+
...(route.middleware || []),
|
|
374
|
+
handler,
|
|
375
|
+
];
|
|
376
|
+
// Type-safe route registration with middleware support
|
|
377
|
+
switch (route.method) {
|
|
378
|
+
case 'get':
|
|
379
|
+
router.get(route.path, ...handlers);
|
|
380
|
+
break;
|
|
381
|
+
case 'post':
|
|
382
|
+
router.post(route.path, ...handlers);
|
|
383
|
+
break;
|
|
384
|
+
case 'put':
|
|
385
|
+
router.put(route.path, ...handlers);
|
|
386
|
+
break;
|
|
387
|
+
case 'patch':
|
|
388
|
+
router.patch(route.path, ...handlers);
|
|
389
|
+
break;
|
|
390
|
+
case 'delete':
|
|
391
|
+
router.delete(route.path, ...handlers);
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
this.logger.debug(`Routing ${basePath}/${route.path} through ${route.method}->${ControllerClass.name}->${route.handler.name}`
|
|
395
|
+
.replace(/\/\//g, '/')
|
|
396
|
+
.replace(/\/\//g, '/'));
|
|
397
|
+
}
|
|
398
|
+
// Log per-controller route count for debugging
|
|
399
|
+
const controllerRouteCount = routes.length;
|
|
400
|
+
totalRouteCount += controllerRouteCount;
|
|
401
|
+
this.logger.info(`${controllerRouteCount} route${controllerRouteCount !== 1 ? 's' : ''} registered for ${ControllerClass.name}.`);
|
|
402
|
+
this.expressApp.use(basePath, router);
|
|
403
|
+
}
|
|
404
|
+
// Log total across all controllers
|
|
405
|
+
if (controllers.length > 0) {
|
|
406
|
+
this.logger.info(`Total: ${totalRouteCount} route${totalRouteCount !== 1 ? 's' : ''} registered.`);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Installs all registered plugins.
|
|
411
|
+
*
|
|
412
|
+
* @internal
|
|
413
|
+
*/
|
|
414
|
+
async setupPlugins() {
|
|
415
|
+
await this.plugins.install(this, this.expressApp);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Initializes the application by setting up middleware, plugins, controllers, and error handling.
|
|
419
|
+
*
|
|
420
|
+
* @internal
|
|
421
|
+
*/
|
|
422
|
+
async initialize() {
|
|
423
|
+
await this.loadConfiguration();
|
|
424
|
+
await this.runHooks('beforeStart');
|
|
425
|
+
await this.setupCoreMiddleware();
|
|
426
|
+
this.setupServiceContainer();
|
|
427
|
+
await this.setupPlugins();
|
|
428
|
+
await this.setupControllers();
|
|
429
|
+
this.setupHealth();
|
|
430
|
+
this.setup404Handler();
|
|
431
|
+
this.setupErrorHandling();
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Registers a plugin with the application.
|
|
435
|
+
*
|
|
436
|
+
* @param plugin - Plugin definition
|
|
437
|
+
* @returns This application instance for method chaining
|
|
438
|
+
*/
|
|
439
|
+
use(plugin) {
|
|
440
|
+
this.plugins.register(plugin);
|
|
441
|
+
return this;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Registers a controller with a base path.
|
|
445
|
+
*
|
|
446
|
+
* @param basePath - Base URL path for all controller routes
|
|
447
|
+
* @param ControllerClass - Controller class constructor
|
|
448
|
+
*/
|
|
449
|
+
registerController(basePath, ControllerClass) {
|
|
450
|
+
this.controllers.register(basePath, ControllerClass);
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Performs graceful shutdown of the application and all plugins.
|
|
454
|
+
* Disposes all singleton services before shutting down plugins.
|
|
455
|
+
*
|
|
456
|
+
* @internal
|
|
457
|
+
*/
|
|
458
|
+
async shutdown() {
|
|
459
|
+
if (this.started) {
|
|
460
|
+
this.started = false;
|
|
461
|
+
await this.runHooks('beforeShutdown');
|
|
462
|
+
// Dispose services before plugin shutdown
|
|
463
|
+
await this.services.disposeAll();
|
|
464
|
+
await this.plugins.shutdown();
|
|
465
|
+
await this.runHooks('afterShutdown');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Sets up the /health endpoint for health checks.
|
|
470
|
+
*
|
|
471
|
+
* @internal
|
|
472
|
+
*/
|
|
473
|
+
setupHealth() {
|
|
474
|
+
this.expressApp.get('/health', async (req, res) => {
|
|
475
|
+
const health = await this.plugins.health();
|
|
476
|
+
res.status(health ? 200 : 503).json({
|
|
477
|
+
health,
|
|
478
|
+
timestamp: Date.now(),
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Sets up 404 catch-all handler for unknown routes.
|
|
484
|
+
* Must be called after setupControllers() but before setupErrorHandling().
|
|
485
|
+
*
|
|
486
|
+
* @internal
|
|
487
|
+
*/
|
|
488
|
+
setup404Handler() {
|
|
489
|
+
this.expressApp.use((req, res, next) => {
|
|
490
|
+
next(new NotFoundError(`Cannot ${req.method} ${req.path}`));
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Access the underlying Express application instance.
|
|
495
|
+
* Use this for features not directly exposed by WebApplication,
|
|
496
|
+
* such as static file serving, view engines, or WebSocket integration.
|
|
497
|
+
*
|
|
498
|
+
* @returns The Express application instance
|
|
499
|
+
*
|
|
500
|
+
* @example
|
|
501
|
+
* ```typescript
|
|
502
|
+
* const app = new WebApplication();
|
|
503
|
+
* // Add static file serving
|
|
504
|
+
* app.express.use(express.static('public'));
|
|
505
|
+
* ```
|
|
506
|
+
*/
|
|
507
|
+
get express() {
|
|
508
|
+
return this.expressApp;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Sets up signal handlers (SIGTERM, SIGINT) for graceful shutdown.
|
|
512
|
+
*
|
|
513
|
+
* @param shutdown - The shutdown function to call when signal is received
|
|
514
|
+
* @internal
|
|
515
|
+
*/
|
|
516
|
+
setupSignalHandlers(shutdown) {
|
|
517
|
+
const createHandler = (signal) => {
|
|
518
|
+
const handler = () => {
|
|
519
|
+
shutdown();
|
|
520
|
+
};
|
|
521
|
+
process.on(signal, handler);
|
|
522
|
+
this.signalHandlers.push({ signal, handler });
|
|
523
|
+
};
|
|
524
|
+
createHandler('SIGTERM');
|
|
525
|
+
createHandler('SIGINT');
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Cleans up registered signal handlers.
|
|
529
|
+
* This prevents memory leaks and duplicate handler execution.
|
|
530
|
+
*
|
|
531
|
+
* @internal
|
|
532
|
+
*/
|
|
533
|
+
cleanupSignalHandlers() {
|
|
534
|
+
for (const { signal, handler } of this.signalHandlers) {
|
|
535
|
+
process.removeListener(signal, handler);
|
|
536
|
+
}
|
|
537
|
+
this.signalHandlers = [];
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Creates a shutdown function for graceful application termination.
|
|
541
|
+
*
|
|
542
|
+
* @param server - The HTTP server instance
|
|
543
|
+
* @param shutdownDelay - Maximum time to wait before forcing shutdown (milliseconds)
|
|
544
|
+
* @returns Shutdown function that performs graceful shutdown
|
|
545
|
+
* @internal
|
|
546
|
+
*/
|
|
547
|
+
createShutdownFn(server, shutdownDelay) {
|
|
548
|
+
let shuttingDown = false;
|
|
549
|
+
return async () => {
|
|
550
|
+
if (shuttingDown) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
shuttingDown = true;
|
|
554
|
+
await this.logger.info(`Shutting down gracefully (timeout: ${shutdownDelay / 1000}s)...`);
|
|
555
|
+
// Stop accepting new connections and wait for completion
|
|
556
|
+
await new Promise((resolve) => {
|
|
557
|
+
server.close(async () => {
|
|
558
|
+
await this.shutdown();
|
|
559
|
+
await this.logger.info('Shutdown complete.');
|
|
560
|
+
resolve();
|
|
561
|
+
});
|
|
562
|
+
// Force-close connections after timeout
|
|
563
|
+
setTimeout(() => {
|
|
564
|
+
server.closeIdleConnections();
|
|
565
|
+
server.closeAllConnections();
|
|
566
|
+
}, shutdownDelay);
|
|
567
|
+
});
|
|
568
|
+
// Clean up signal handlers to prevent duplicate calls
|
|
569
|
+
this.cleanupSignalHandlers();
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Starts the web server and begins listening for requests.
|
|
574
|
+
* Sets up graceful shutdown handlers for SIGTERM and SIGINT signals.
|
|
575
|
+
*
|
|
576
|
+
* @returns Promise that resolves to a shutdown function that performs graceful shutdown
|
|
577
|
+
* @throws {Error} If application is already started
|
|
578
|
+
*
|
|
579
|
+
* @example
|
|
580
|
+
* ```typescript
|
|
581
|
+
* const app = new WebApplication({ PORT: 3000 });
|
|
582
|
+
* const shutdown = await app.start();
|
|
583
|
+
*
|
|
584
|
+
* // Later, to shutdown:
|
|
585
|
+
* await shutdown();
|
|
586
|
+
* ```
|
|
587
|
+
*/
|
|
588
|
+
async start() {
|
|
589
|
+
if (this.started) {
|
|
590
|
+
throw new Error('Application already started');
|
|
591
|
+
}
|
|
592
|
+
const { PORT = 4000, SHUTDOWN_TIMEOUT = 7, ENV_MODE } = this.settings.getAll();
|
|
593
|
+
const shutdownDelay = this.settings.isProduction() ? SHUTDOWN_TIMEOUT * 1000 : 1000;
|
|
594
|
+
await this.initialize();
|
|
595
|
+
return new Promise((resolve, reject) => {
|
|
596
|
+
const server = this.expressApp.listen(PORT, async (err) => {
|
|
597
|
+
if (err) {
|
|
598
|
+
return reject(err);
|
|
599
|
+
}
|
|
600
|
+
this.server = server;
|
|
601
|
+
this.started = true;
|
|
602
|
+
await this.logger.info(`Server listening on http://localhost:${PORT} (${ENV_MODE})`);
|
|
603
|
+
await this.runHooks('afterStart');
|
|
604
|
+
const shutdown = this.createShutdownFn(server, shutdownDelay);
|
|
605
|
+
this.setupSignalHandlers(shutdown);
|
|
606
|
+
resolve(shutdown);
|
|
607
|
+
});
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=web-application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-application.js","sourceRoot":"","sources":["../../src/application/web-application.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAqE,MAAM,SAAS,CAAC;AAC5F,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7G,OAAO,EAAqB,mBAAmB,EAAc,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAY,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAoB,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,gBAAgB,GAGjB,MAAM,wBAAwB,CAAC;AAQhC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,cAAc;IACf,QAAQ,CAAsB;IAC9B,UAAU,CAAU;IACpB,MAAM,CAA0B;IAChC,OAAO,CAAU;IACjB,eAAe,CAAkB;IACjC,QAAQ,CAAmB;IAC3B,OAAO,CAAiB;IACxB,WAAW,CAAqB;IAChC,MAAM,CAAgB;IACtB,cAAc,CAKtB;IACQ,cAAc,CAAyD;IAEjF;;;;OAIG;IACH,YAAY,MAA0B;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,6DAA6D;QAC7D,IAAI,CAAC,eAAe,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC5C,qDAAqD;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAW,WAAW,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,6BAA6B;QAC7B,IAAI,CAAC,cAAc,GAAG;YACpB,WAAW,EAAE,EAAE;YACf,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;SAClB,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,EAAE,CAAC,KAAuC,EAAE,IAAmB;QAC7D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,QAAQ,CAAC,KAAuC;QAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,OAA0B;QACxC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAU,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,iBAAiB;QAC/B,MAAM,WAAW,GAAG;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;SAC1C,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,mBAAmB;QACjC,mDAAmD;QACnD,oDAAoD;QACpD,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3F,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAErC,+BAA+B;QAC/B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAEpC,6CAA6C;QAE7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QAErE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAE3C,6EAA6E;QAC7E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEzB,8BAA8B;YAC9B,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,IAAI,QAAQ,IAAI,EAAE;oBACnF,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,GAAG,EAAE,GAAG,CAAC,WAAW;oBACpB,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,QAAQ;oBACR,SAAS,EAAE,GAAG,CAAC,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,gEAAgE;QAChE,yEAAyE;QACzE,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,MAAM,CAAC;YACL,qBAAqB,EAAE,KAAK,EAAE,oCAAoC;YAClE,yBAAyB,EAAE,KAAK,EAAE,wCAAwC;SAC3E,CAAC,CACH,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACO,gBAAgB,CAAC,MAAyB;QAClD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,qDAAqD;YACrD,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE,+DAA+D;gBAC5E,WAAW,EAAE,IAAI;gBACjB,oBAAoB,EAAE,GAAG,EAAE,yCAAyC;gBACpE,iBAAiB,EAAE,KAAK,EAAE,0BAA0B;aACrD,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,+FAA+F;QAC/F,MAAM,WAAW,GAAqB;YACpC,oBAAoB,EAAE,GAAG,EAAE,yCAAyC;YACpE,iBAAiB,EAAE,KAAK,EAAE,0BAA0B;SACrD,CAAC;QAEF,8BAA8B;QAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,oFAAoF;YACpF,uFAAuF;YACvF,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;gBACpC,WAAW,CAAC,MAAM,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE;oBAC/C,wDAAwD;oBACxD,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;wBACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,sDAAsD;gBACtD,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACvC,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACxC,WAAW,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACrD,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACxC,WAAW,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACrD,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/C,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACO,kBAAkB;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,sBAAsB,CAAC,KAAK,EAAE,GAAY,EAAE,GAAU,EAAE,IAAyB,EAAE,EAAE;YACnF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAClC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACO,qBAAqB;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YACtE,oDAAoD;YACpD,GAAG,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9F,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,eAAe,CAC7B,MAAe,EACf,MAA+B;QAE/B,IAAI,CAAC;YACH,6FAA6F;YAC7F,gEAAgE;YAChE,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,kEAAkE;YAClE,MAAM,QAAQ,GAAG,KAEhB,CAAC;YACF,MAAM,eAAe,GACnB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACpD,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACO,gBAAgB,CAAC,UAAmB,EAAE,KAAsB;QACpE,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YAC/D,IAAI,CAAC;gBACH,iEAAiE;gBACjE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACvD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,MAAM,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;gBAED,yBAAyB;gBACzB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACvD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACpD,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,MAAM,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,YAAY,GAAG;oBACnB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;oBACxB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;oBACtB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;iBACrB,CAAC;gBAEF,yDAAyD;gBACzD,IAAI,UAAU,GAAG;oBACf,GAAG,YAAY,CAAC,MAAM;oBACtB,GAAG,YAAY,CAAC,KAAK;oBACrB,GAAG,YAAY,CAAC,IAAI;iBACrB,CAAC;gBAEF,sBAAsB;gBACtB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACxE,CAAC;gBAED,wCAAwC;gBACxC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;gBAC/C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gBAEhD,4BAA4B;gBAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,gBAAgB;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,WAAW,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAEhC,wDAAwD;YACxD,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAErE,6BAA6B;YAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAuB,CAAC;YAExD,sBAAsB;YACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAEzD,kDAAkD;gBAClD,MAAM,QAAQ,GAAqB;oBACjC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;oBAC3B,OAAO;iBACR,CAAC;gBAEF,uDAAuD;gBACvD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;oBACrB,KAAK,KAAK;wBACR,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;wBACpC,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;wBACrC,MAAM;oBACR,KAAK,KAAK;wBACR,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;wBACpC,MAAM;oBACR,KAAK,OAAO;wBACV,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;wBACtC,MAAM;oBACR,KAAK,QAAQ;wBACX,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;wBACvC,MAAM;gBACV,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,WAAW,QAAQ,IAAI,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;qBACxG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;qBACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CACzB,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3C,eAAe,IAAI,oBAAoB,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,oBAAoB,SAAS,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,mBAAmB,eAAe,CAAC,IAAI,GAAG,CAChH,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,mCAAmC;QACnC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,UAAU,eAAe,SAAS,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,YAAY;QAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,UAAU;QACxB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,MAAwB;QAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAChB,QAAgB,EAChB,eAAuF;QAEvF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,QAAQ;QACtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACtC,0CAA0C;YAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACO,WAAW;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAClC,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACO,eAAe;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,aAAa,CAAC,UAAU,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACO,mBAAmB,CAAC,QAA6B;QACzD,MAAM,aAAa,GAAG,CAAC,MAAsB,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACO,qBAAqB;QAC7B,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACO,gBAAgB,CAAC,MAAc,EAAE,aAAqB;QAC9D,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,OAAO,KAAK,IAAI,EAAE;YAChB,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,YAAY,GAAG,IAAI,CAAC;YAEpB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACpB,sCAAsC,aAAa,GAAG,IAAI,OAAO,CAClE,CAAC;YAEF,yDAAyD;YACzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;oBACtB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBAC7C,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,wCAAwC;gBACxC,UAAU,CAAC,GAAG,EAAE;oBACd,MAAM,CAAC,oBAAoB,EAAE,CAAC;oBAC9B,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC/B,CAAC,EAAE,aAAa,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,sDAAsD;YACtD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,gBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;gBAChE,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;gBAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAEpB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,KAAK,QAAQ,GAAG,CAAC,CAAC;gBACrF,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC9D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { StandardErrorResponse } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base API error class
|
|
4
|
+
* All custom errors should extend this class
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* throw new ApiError(400, 'INVALID_INPUT', 'Invalid user input', { field: 'email' });
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare class ApiError extends Error {
|
|
12
|
+
statusCode: number;
|
|
13
|
+
code: string;
|
|
14
|
+
details?: any | undefined;
|
|
15
|
+
constructor(statusCode: number, code: string, message: string, details?: any | undefined);
|
|
16
|
+
/**
|
|
17
|
+
* Convert error to standard JSON response format
|
|
18
|
+
*/
|
|
19
|
+
toJSON(): StandardErrorResponse;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=api-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-error.d.ts","sourceRoot":"","sources":["../../src/errors/api-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;GAQG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAExB,UAAU,EAAE,MAAM;IAClB,IAAI,EAAE,MAAM;IAEZ,OAAO,CAAC,EAAE,GAAG;gBAHb,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,GAAG,YAAA;IAOtB;;OAEG;IACH,MAAM,IAAI,qBAAqB;CAYhC"}
|