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,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions and constants for the @blendsdk/webafx-cache package.
|
|
3
|
+
*
|
|
4
|
+
* Defines configuration interfaces for all cache and pub/sub providers
|
|
5
|
+
* (Redis, In-Memory) and their environment-based factories. Constants
|
|
6
|
+
* provide sensible defaults for service naming, TTL, key formatting,
|
|
7
|
+
* and channel prefix handling.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Shared Redis connection configuration.
|
|
13
|
+
*
|
|
14
|
+
* Extracted as a common base so both cache and pub/sub Redis providers
|
|
15
|
+
* can share the same connection field definitions without duplication.
|
|
16
|
+
*
|
|
17
|
+
* When `url` is provided, it takes precedence over host/port/password/db.
|
|
18
|
+
*/
|
|
19
|
+
export interface RedisConnectionConfig {
|
|
20
|
+
/** Redis host. Default: 'localhost' */
|
|
21
|
+
host?: string;
|
|
22
|
+
/** Redis port. Default: 6379 */
|
|
23
|
+
port?: number;
|
|
24
|
+
/** Redis password (optional) */
|
|
25
|
+
password?: string;
|
|
26
|
+
/** Redis database index (0-15). Default: 0 */
|
|
27
|
+
db?: number;
|
|
28
|
+
/** Redis connection URL (overrides host/port/password/db if provided) */
|
|
29
|
+
url?: string;
|
|
30
|
+
/** Connection timeout in milliseconds. Default: 5000 */
|
|
31
|
+
connectTimeout?: number;
|
|
32
|
+
/** Maximum number of reconnection attempts. Default: 3 */
|
|
33
|
+
maxRetriesPerRequest?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Base configuration shared by all cache providers.
|
|
37
|
+
* Every provider requires at minimum a rootKey for namespace isolation.
|
|
38
|
+
*/
|
|
39
|
+
export interface CacheProviderConfig {
|
|
40
|
+
/** Root key prefix for all cache keys (e.g., 'MyApp') */
|
|
41
|
+
rootKey: string;
|
|
42
|
+
/**
|
|
43
|
+
* Service name for WebAFX service container registration.
|
|
44
|
+
* Defaults to 'cache'. Use different names for multi-cache scenarios.
|
|
45
|
+
*/
|
|
46
|
+
serviceName?: string;
|
|
47
|
+
/** Default TTL in seconds. 0 means no expiry. Default: 0 */
|
|
48
|
+
defaultTTL?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Redis-specific cache configuration.
|
|
52
|
+
*
|
|
53
|
+
* Extends base cache config with shared Redis connection options.
|
|
54
|
+
* This is a non-breaking refactor — the interface exposes the exact
|
|
55
|
+
* same fields as before, but Redis connection fields now come from
|
|
56
|
+
* the shared `RedisConnectionConfig` base.
|
|
57
|
+
*
|
|
58
|
+
* When `url` is provided, it takes precedence over host/port/password/db.
|
|
59
|
+
*/
|
|
60
|
+
export interface RedisCacheConfig extends CacheProviderConfig, RedisConnectionConfig {
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* In-memory specific configuration.
|
|
64
|
+
* Extends base config with memory management options.
|
|
65
|
+
*/
|
|
66
|
+
export interface MemoryCacheConfig extends CacheProviderConfig {
|
|
67
|
+
/** Cleanup interval for expired entries in milliseconds. Default: 60000 (1 min) */
|
|
68
|
+
cleanupIntervalMs?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Configuration for the createCache() environment-based factory.
|
|
72
|
+
* Determines which backend to create based on the 'type' field.
|
|
73
|
+
*
|
|
74
|
+
* Redis-specific fields are only used when type === 'redis'.
|
|
75
|
+
* Memory-specific fields are only used when type === 'memory'.
|
|
76
|
+
*/
|
|
77
|
+
export interface CacheFactoryConfig {
|
|
78
|
+
/** Cache backend type */
|
|
79
|
+
type: "redis" | "memory";
|
|
80
|
+
/** Root key prefix for all cache keys */
|
|
81
|
+
rootKey: string;
|
|
82
|
+
/** Service name for WebAFX service container. Default: 'cache' */
|
|
83
|
+
serviceName?: string;
|
|
84
|
+
/** Default TTL in seconds. Default: 0 */
|
|
85
|
+
defaultTTL?: number;
|
|
86
|
+
/** Redis host */
|
|
87
|
+
host?: string;
|
|
88
|
+
/** Redis port */
|
|
89
|
+
port?: number;
|
|
90
|
+
/** Redis password */
|
|
91
|
+
password?: string;
|
|
92
|
+
/** Redis database index */
|
|
93
|
+
db?: number;
|
|
94
|
+
/** Redis connection URL */
|
|
95
|
+
url?: string;
|
|
96
|
+
/** Cleanup interval in ms */
|
|
97
|
+
cleanupIntervalMs?: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Base configuration shared by all pub/sub providers.
|
|
101
|
+
*
|
|
102
|
+
* The `channelPrefix` provides namespace isolation — all channels are
|
|
103
|
+
* automatically prefixed so multiple applications can share the same
|
|
104
|
+
* Redis instance without channel name collisions.
|
|
105
|
+
*/
|
|
106
|
+
export interface PubSubProviderConfig {
|
|
107
|
+
/**
|
|
108
|
+
* Channel prefix for namespace isolation.
|
|
109
|
+
* Applied to all channels automatically.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* // prefix='MyApp' → channel 'order:new' becomes 'MyApp:order:new'
|
|
113
|
+
*/
|
|
114
|
+
channelPrefix?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Service name for WebAFX service container registration.
|
|
117
|
+
* Default: 'pubsub'. Use different names for multi-pubsub scenarios.
|
|
118
|
+
*/
|
|
119
|
+
serviceName?: string;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Redis-specific pub/sub configuration.
|
|
123
|
+
*
|
|
124
|
+
* Extends base pub/sub config with shared Redis connection options.
|
|
125
|
+
* The provider creates **two** ioredis connections internally:
|
|
126
|
+
* one for publishing and one for subscribing (Redis requires
|
|
127
|
+
* a dedicated connection once it enters subscriber mode).
|
|
128
|
+
*/
|
|
129
|
+
export interface RedisPubSubConfig extends PubSubProviderConfig, RedisConnectionConfig {
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* In-memory specific pub/sub configuration.
|
|
133
|
+
* No additional fields beyond the base config.
|
|
134
|
+
*/
|
|
135
|
+
export interface MemoryPubSubConfig extends PubSubProviderConfig {
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Configuration for the createPubSub() environment-based factory.
|
|
139
|
+
* Determines which backend to create based on the 'type' field.
|
|
140
|
+
*
|
|
141
|
+
* Redis-specific fields are only used when type === 'redis'.
|
|
142
|
+
*/
|
|
143
|
+
export interface PubSubFactoryConfig extends PubSubProviderConfig {
|
|
144
|
+
/** Pub/sub backend type */
|
|
145
|
+
type: "redis" | "memory";
|
|
146
|
+
/** Redis host */
|
|
147
|
+
host?: string;
|
|
148
|
+
/** Redis port */
|
|
149
|
+
port?: number;
|
|
150
|
+
/** Redis password */
|
|
151
|
+
password?: string;
|
|
152
|
+
/** Redis database index */
|
|
153
|
+
db?: number;
|
|
154
|
+
/** Redis connection URL */
|
|
155
|
+
url?: string;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Message envelope delivered to subscription handlers.
|
|
159
|
+
*
|
|
160
|
+
* Contains the deserialized payload and metadata about the channel
|
|
161
|
+
* and (for pattern subscriptions) the pattern that matched.
|
|
162
|
+
* The `channel` field always contains the user-facing name
|
|
163
|
+
* (prefix stripped), not the internal prefixed name.
|
|
164
|
+
*/
|
|
165
|
+
export interface PubSubMessage<T = unknown> {
|
|
166
|
+
/** The channel the message was published to (prefix stripped) */
|
|
167
|
+
channel: string;
|
|
168
|
+
/** The deserialized message payload */
|
|
169
|
+
data: T;
|
|
170
|
+
/** For pattern subscriptions: the pattern that matched (prefix stripped) */
|
|
171
|
+
pattern?: string;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Handler function for pub/sub messages.
|
|
175
|
+
*
|
|
176
|
+
* Can be synchronous or asynchronous. Errors thrown by handlers are
|
|
177
|
+
* caught and logged — they do not break other subscribers or crash
|
|
178
|
+
* the subscriber connection.
|
|
179
|
+
*/
|
|
180
|
+
export type MessageHandler<T = unknown> = (message: PubSubMessage<T>) => void | Promise<void>;
|
|
181
|
+
/**
|
|
182
|
+
* Subscription definition for declarative registration via plugin config.
|
|
183
|
+
*
|
|
184
|
+
* Exactly one of `channel` or `pattern` must be provided.
|
|
185
|
+
* - `channel` subscribes to an exact channel (SUBSCRIBE)
|
|
186
|
+
* - `pattern` subscribes to a glob pattern (PSUBSCRIBE)
|
|
187
|
+
*/
|
|
188
|
+
export interface SubscriptionDefinition<T = unknown> {
|
|
189
|
+
/** Exact channel name (mutually exclusive with `pattern`) */
|
|
190
|
+
channel?: string;
|
|
191
|
+
/** Channel pattern with glob wildcards (mutually exclusive with `channel`) */
|
|
192
|
+
pattern?: string;
|
|
193
|
+
/** Handler function invoked when a matching message arrives */
|
|
194
|
+
handler: MessageHandler<T>;
|
|
195
|
+
}
|
|
196
|
+
/** Default service name for cache when not specified */
|
|
197
|
+
export declare const DEFAULT_SERVICE_NAME = "cache";
|
|
198
|
+
/** Default TTL (0 = no expiry) */
|
|
199
|
+
export declare const DEFAULT_TTL = 0;
|
|
200
|
+
/** Key separator between rootKey and user-provided key */
|
|
201
|
+
export declare const KEY_SEPARATOR = ":";
|
|
202
|
+
/** Default service name for pub/sub when not specified */
|
|
203
|
+
export declare const DEFAULT_PUBSUB_SERVICE_NAME = "pubsub";
|
|
204
|
+
/** Channel prefix separator (same as key separator for consistency) */
|
|
205
|
+
export declare const CHANNEL_SEPARATOR = ":";
|
|
206
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions and constants for the @blendsdk/webafx-cache package.
|
|
3
|
+
*
|
|
4
|
+
* Defines configuration interfaces for all cache and pub/sub providers
|
|
5
|
+
* (Redis, In-Memory) and their environment-based factories. Constants
|
|
6
|
+
* provide sensible defaults for service naming, TTL, key formatting,
|
|
7
|
+
* and channel prefix handling.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Cache Constants
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/** Default service name for cache when not specified */
|
|
15
|
+
export const DEFAULT_SERVICE_NAME = "cache";
|
|
16
|
+
/** Default TTL (0 = no expiry) */
|
|
17
|
+
export const DEFAULT_TTL = 0;
|
|
18
|
+
/** Key separator between rootKey and user-provided key */
|
|
19
|
+
export const KEY_SEPARATOR = ":";
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Pub/Sub Constants
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/** Default service name for pub/sub when not specified */
|
|
24
|
+
export const DEFAULT_PUBSUB_SERVICE_NAME = "pubsub";
|
|
25
|
+
/** Channel prefix separator (same as key separator for consistency) */
|
|
26
|
+
export const CHANNEL_SEPARATOR = ":";
|
|
27
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqPH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,kCAAkC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAEpD,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PluginDefinition } from "../webafx/index.js";
|
|
2
|
+
import type { I18nPluginConfig } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Create a WebAFX PluginDefinition for i18n.
|
|
5
|
+
*
|
|
6
|
+
* This is the main entry point. It:
|
|
7
|
+
* 1. Loads translations from all configured sources at startup
|
|
8
|
+
* 2. Creates a Translator with the merged catalog
|
|
9
|
+
* 3. Registers the Translator as a singleton service
|
|
10
|
+
* 4. Registers a per-request "locale" service that resolves the request locale
|
|
11
|
+
* 5. Optionally subscribes to a pub/sub reload channel
|
|
12
|
+
*
|
|
13
|
+
* @param config - Plugin configuration
|
|
14
|
+
* @returns WebAFX PluginDefinition
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { createI18nPlugin, jsonFileSource } from "./index.js";
|
|
19
|
+
*
|
|
20
|
+
* app.use(createI18nPlugin({
|
|
21
|
+
* defaultLocale: "en",
|
|
22
|
+
* sources: [
|
|
23
|
+
* jsonFileSource({ paths: ["./translations/*.json"] }),
|
|
24
|
+
* ],
|
|
25
|
+
* }));
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function createI18nPlugin(config: I18nPluginConfig): PluginDefinition;
|
|
29
|
+
//# sourceMappingURL=i18n-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-plugin.d.ts","sourceRoot":"","sources":["../src/i18n-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,kBAAkB,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAYnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAwF3E"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Translator, mergeCatalogs } from "../i18n/index.js";
|
|
2
|
+
import { resolveLocale } from "./locale-resolver.js";
|
|
3
|
+
/** Default plugin priority */
|
|
4
|
+
const DEFAULT_PRIORITY = 40;
|
|
5
|
+
/** Default service names */
|
|
6
|
+
const DEFAULT_SERVICE_NAME = "i18n";
|
|
7
|
+
const DEFAULT_LOCALE_SERVICE_NAME = "locale";
|
|
8
|
+
const DEFAULT_PUBSUB_SERVICE_NAME = "pubsub";
|
|
9
|
+
const DEFAULT_COOKIE_NAME = "locale";
|
|
10
|
+
/**
|
|
11
|
+
* Create a WebAFX PluginDefinition for i18n.
|
|
12
|
+
*
|
|
13
|
+
* This is the main entry point. It:
|
|
14
|
+
* 1. Loads translations from all configured sources at startup
|
|
15
|
+
* 2. Creates a Translator with the merged catalog
|
|
16
|
+
* 3. Registers the Translator as a singleton service
|
|
17
|
+
* 4. Registers a per-request "locale" service that resolves the request locale
|
|
18
|
+
* 5. Optionally subscribes to a pub/sub reload channel
|
|
19
|
+
*
|
|
20
|
+
* @param config - Plugin configuration
|
|
21
|
+
* @returns WebAFX PluginDefinition
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* import { createI18nPlugin, jsonFileSource } from "./index.js";
|
|
26
|
+
*
|
|
27
|
+
* app.use(createI18nPlugin({
|
|
28
|
+
* defaultLocale: "en",
|
|
29
|
+
* sources: [
|
|
30
|
+
* jsonFileSource({ paths: ["./translations/*.json"] }),
|
|
31
|
+
* ],
|
|
32
|
+
* }));
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function createI18nPlugin(config) {
|
|
36
|
+
const serviceName = config.serviceName ?? DEFAULT_SERVICE_NAME;
|
|
37
|
+
const localeServiceName = config.localeServiceName ?? DEFAULT_LOCALE_SERVICE_NAME;
|
|
38
|
+
const defaultLocale = config.defaultLocale ?? "en";
|
|
39
|
+
const cookieName = config.localeCookieName ?? DEFAULT_COOKIE_NAME;
|
|
40
|
+
return {
|
|
41
|
+
name: serviceName,
|
|
42
|
+
priority: config.priority ?? DEFAULT_PRIORITY,
|
|
43
|
+
factory: async ({ app, logger }) => {
|
|
44
|
+
// --- Step 1: Load translations from all sources ---
|
|
45
|
+
const catalog = await loadAllSources(config.sources, logger);
|
|
46
|
+
// --- Step 2: Create Translator ---
|
|
47
|
+
const translator = new Translator({
|
|
48
|
+
defaultLocale,
|
|
49
|
+
catalog,
|
|
50
|
+
onMissingTranslation: config.onMissingTranslation,
|
|
51
|
+
});
|
|
52
|
+
await logger.info(`I18n plugin: loaded ${Object.keys(catalog).length} translation keys ` +
|
|
53
|
+
`from ${config.sources.length} source(s)`);
|
|
54
|
+
// --- Step 3: Register Translator as singleton service ---
|
|
55
|
+
app.registerService({
|
|
56
|
+
name: serviceName,
|
|
57
|
+
type: "singleton",
|
|
58
|
+
factory: () => translator,
|
|
59
|
+
});
|
|
60
|
+
// --- Step 4: Register per-request locale service ---
|
|
61
|
+
app.registerService({
|
|
62
|
+
name: localeServiceName,
|
|
63
|
+
type: "per-request",
|
|
64
|
+
factory: (_container, _settings, req, res) => {
|
|
65
|
+
const locale = resolveLocale(req, defaultLocale, cookieName);
|
|
66
|
+
// Persist locale in cookie (if configured)
|
|
67
|
+
if (cookieName) {
|
|
68
|
+
res.cookie(cookieName, locale, {
|
|
69
|
+
httpOnly: false,
|
|
70
|
+
sameSite: "lax",
|
|
71
|
+
maxAge: 365 * 24 * 60 * 60 * 1000, // 1 year
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return locale;
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
// --- Step 5: Optional pub/sub reload ---
|
|
78
|
+
if (config.reloadChannel) {
|
|
79
|
+
const pubsubName = config.pubsubServiceName ?? DEFAULT_PUBSUB_SERVICE_NAME;
|
|
80
|
+
try {
|
|
81
|
+
// Access service container via cast — services is protected on WebApplication
|
|
82
|
+
// but plugins are trusted framework code that need service resolution
|
|
83
|
+
const pubsub = await app.services.get(pubsubName);
|
|
84
|
+
if (pubsub && typeof pubsub.subscribe === "function") {
|
|
85
|
+
await pubsub.subscribe(config.reloadChannel, async () => {
|
|
86
|
+
await logger.info(`I18n reload triggered via pub/sub`);
|
|
87
|
+
await reloadSources(config.sources, translator, logger);
|
|
88
|
+
});
|
|
89
|
+
await logger.info(`I18n plugin: subscribed to reload channel "${config.reloadChannel}"`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
await logger.info(`I18n plugin: pub/sub service "${pubsubName}" not available — ` +
|
|
94
|
+
`reload channel "${config.reloadChannel}" will not be active`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
await logger.info(`I18n plugin "${serviceName}" initialized`);
|
|
98
|
+
// --- Return Plugin hooks ---
|
|
99
|
+
return {
|
|
100
|
+
health: async () => true,
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Load all translation sources and merge their catalogs.
|
|
107
|
+
*
|
|
108
|
+
* Sources are loaded in order. Later sources override earlier ones
|
|
109
|
+
* for the same key+locale pair.
|
|
110
|
+
*
|
|
111
|
+
* @param sources - Array of translation sources
|
|
112
|
+
* @param logger - Logger for progress messages
|
|
113
|
+
* @returns Merged translation catalog
|
|
114
|
+
*/
|
|
115
|
+
async function loadAllSources(sources, logger) {
|
|
116
|
+
const catalogs = [];
|
|
117
|
+
for (const source of sources) {
|
|
118
|
+
await logger.info(`I18n: loading from ${source.name}...`);
|
|
119
|
+
const catalog = await source.load();
|
|
120
|
+
await logger.info(`I18n: ${source.name} loaded ${Object.keys(catalog).length} keys`);
|
|
121
|
+
catalogs.push(catalog);
|
|
122
|
+
}
|
|
123
|
+
return mergeCatalogs(catalogs);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Reload all sources and atomically swap the translator's catalog.
|
|
127
|
+
*
|
|
128
|
+
* On failure, logs the error but keeps the old catalog (graceful degradation).
|
|
129
|
+
*
|
|
130
|
+
* @param sources - Array of translation sources
|
|
131
|
+
* @param translator - The Translator instance to update
|
|
132
|
+
* @param logger - Logger for progress messages
|
|
133
|
+
*/
|
|
134
|
+
async function reloadSources(sources, translator, logger) {
|
|
135
|
+
try {
|
|
136
|
+
const catalog = await loadAllSources(sources, logger);
|
|
137
|
+
translator.setCatalog(catalog);
|
|
138
|
+
await logger.info(`I18n: reload complete — ${Object.keys(catalog).length} keys loaded`);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
// Log the error but don't crash — keep the old catalog
|
|
142
|
+
await logger.error(`I18n: reload failed, keeping previous catalog: ${error instanceof Error ? error.message : String(error)}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=i18n-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-plugin.js","sourceRoot":"","sources":["../src/i18n-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { createI18nPlugin } from "./i18n-plugin.js";
|
|
2
|
+
export type { I18nPluginConfig } from "./types.js";
|
|
3
|
+
export { PostgreSQLSource, postgresqlSource } from "./postgresql-source.js";
|
|
4
|
+
export type { PostgreSQLSourceConfig } from "./postgresql-source.js";
|
|
5
|
+
export { resolveLocale, parseAcceptLanguage } from "./locale-resolver.js";
|
|
6
|
+
export { Translator, mergeCatalogs } from "../i18n/index.js";
|
|
7
|
+
export type { TranslationCatalog, TranslationEntry, TranslationValue, TranslationSource, TranslatorConfig, } from "../i18n/index.js";
|
|
8
|
+
export { JsonFileSource, jsonFileSource } from "../i18n/node.js";
|
|
9
|
+
export type { JsonFileSourceConfig } from "../i18n/node.js";
|
|
10
|
+
export { ContentFileSource, contentFileSource } from "../i18n/node.js";
|
|
11
|
+
export type { ContentFileSourceConfig } from "../i18n/node.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EACR,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Plugin
|
|
2
|
+
export { createI18nPlugin } from "./i18n-plugin.js";
|
|
3
|
+
// Sources
|
|
4
|
+
export { PostgreSQLSource, postgresqlSource } from "./postgresql-source.js";
|
|
5
|
+
// Locale resolver (exported for testing and custom use)
|
|
6
|
+
export { resolveLocale, parseAcceptLanguage } from "./locale-resolver.js";
|
|
7
|
+
// Re-export browser-safe i18n core for convenience
|
|
8
|
+
export { Translator, mergeCatalogs } from "../i18n/index.js";
|
|
9
|
+
// Re-export Node.js-only file sources from the /node subpath
|
|
10
|
+
export { JsonFileSource, jsonFileSource } from "../i18n/node.js";
|
|
11
|
+
export { ContentFileSource, contentFileSource } from "../i18n/node.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKpD,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG5E,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS3D,6DAA6D;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the locale for an incoming HTTP request.
|
|
4
|
+
*
|
|
5
|
+
* Resolution priority (first match wins):
|
|
6
|
+
* 1. Query parameter: `?locale=nl`
|
|
7
|
+
* 2. Accept-Language header: `Accept-Language: nl, en;q=0.8`
|
|
8
|
+
* 3. Cookie: `locale=nl` (cookie name configurable)
|
|
9
|
+
* 4. Default locale from config
|
|
10
|
+
*
|
|
11
|
+
* @param req - Express Request object
|
|
12
|
+
* @param defaultLocale - Fallback locale
|
|
13
|
+
* @param cookieName - Cookie name to check (false to skip)
|
|
14
|
+
* @returns The resolved locale string
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* resolveLocale(req, "en", "locale") // → "nl" (if ?locale=nl)
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveLocale(req: Request, defaultLocale: string, cookieName: string | false): string;
|
|
20
|
+
/**
|
|
21
|
+
* Parse the Accept-Language header and return the highest-priority locale.
|
|
22
|
+
*
|
|
23
|
+
* Handles formats like:
|
|
24
|
+
* - "nl" → "nl"
|
|
25
|
+
* - "nl, en;q=0.8" → "nl"
|
|
26
|
+
* - "en-US,en;q=0.9,nl;q=0.8" → "en_US" (normalized)
|
|
27
|
+
* - "*" → null (wildcard, use default)
|
|
28
|
+
*
|
|
29
|
+
* @param header - The Accept-Language header value
|
|
30
|
+
* @returns The best locale, or null if none can be determined
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseAcceptLanguage(header: string): string | null;
|
|
33
|
+
//# sourceMappingURL=locale-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-resolver.d.ts","sourceRoot":"","sources":["../src/locale-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CACzB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GAAG,KAAK,GAC3B,MAAM,CAuBR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBjE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the locale for an incoming HTTP request.
|
|
3
|
+
*
|
|
4
|
+
* Resolution priority (first match wins):
|
|
5
|
+
* 1. Query parameter: `?locale=nl`
|
|
6
|
+
* 2. Accept-Language header: `Accept-Language: nl, en;q=0.8`
|
|
7
|
+
* 3. Cookie: `locale=nl` (cookie name configurable)
|
|
8
|
+
* 4. Default locale from config
|
|
9
|
+
*
|
|
10
|
+
* @param req - Express Request object
|
|
11
|
+
* @param defaultLocale - Fallback locale
|
|
12
|
+
* @param cookieName - Cookie name to check (false to skip)
|
|
13
|
+
* @returns The resolved locale string
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* resolveLocale(req, "en", "locale") // → "nl" (if ?locale=nl)
|
|
17
|
+
*/
|
|
18
|
+
export function resolveLocale(req, defaultLocale, cookieName) {
|
|
19
|
+
// 1. Query parameter
|
|
20
|
+
const queryLocale = req.query?.locale;
|
|
21
|
+
if (typeof queryLocale === "string" && queryLocale.trim()) {
|
|
22
|
+
return queryLocale.trim();
|
|
23
|
+
}
|
|
24
|
+
// 2. Accept-Language header
|
|
25
|
+
const acceptLanguage = req.headers["accept-language"];
|
|
26
|
+
if (acceptLanguage) {
|
|
27
|
+
const parsed = parseAcceptLanguage(acceptLanguage);
|
|
28
|
+
if (parsed) {
|
|
29
|
+
return parsed;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// 3. Cookie
|
|
33
|
+
if (cookieName && req.cookies?.[cookieName]) {
|
|
34
|
+
return req.cookies[cookieName];
|
|
35
|
+
}
|
|
36
|
+
// 4. Default
|
|
37
|
+
return defaultLocale;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse the Accept-Language header and return the highest-priority locale.
|
|
41
|
+
*
|
|
42
|
+
* Handles formats like:
|
|
43
|
+
* - "nl" → "nl"
|
|
44
|
+
* - "nl, en;q=0.8" → "nl"
|
|
45
|
+
* - "en-US,en;q=0.9,nl;q=0.8" → "en_US" (normalized)
|
|
46
|
+
* - "*" → null (wildcard, use default)
|
|
47
|
+
*
|
|
48
|
+
* @param header - The Accept-Language header value
|
|
49
|
+
* @returns The best locale, or null if none can be determined
|
|
50
|
+
*/
|
|
51
|
+
export function parseAcceptLanguage(header) {
|
|
52
|
+
const entries = header
|
|
53
|
+
.split(",")
|
|
54
|
+
.map((entry) => {
|
|
55
|
+
const [locale, ...params] = entry.trim().split(";");
|
|
56
|
+
const qParam = params.find((p) => p.trim().startsWith("q="));
|
|
57
|
+
const quality = qParam ? parseFloat(qParam.trim().slice(2)) : 1.0;
|
|
58
|
+
return { locale: locale.trim(), quality };
|
|
59
|
+
})
|
|
60
|
+
.filter((e) => e.locale !== "*" && e.locale !== "" && e.quality > 0)
|
|
61
|
+
.sort((a, b) => b.quality - a.quality);
|
|
62
|
+
if (entries.length === 0)
|
|
63
|
+
return null;
|
|
64
|
+
// Normalize: "en-US" → "en_US"
|
|
65
|
+
return entries[0].locale.replace("-", "_");
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=locale-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-resolver.js","sourceRoot":"","sources":["../src/locale-resolver.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CACzB,GAAY,EACZ,aAAqB,EACrB,UAA0B;IAE1B,qBAAqB;IACrB,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;IACtC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACxD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,4BAA4B;IAC5B,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtD,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAED,YAAY;IACZ,IAAI,UAAU,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,aAAa;IACb,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAC9C,MAAM,OAAO,GAAG,MAAM;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACX,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAClE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;SACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,+BAA+B;IAC/B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC"}
|