@opra/common 0.5.0 → 0.7.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/cjs/constants.js +1 -0
- package/cjs/exception/enums/issue-severity.enum.js +23 -0
- package/cjs/{types.js → exception/error-issue.js} +0 -0
- package/cjs/exception/http-errors/bad-request.error.js +22 -0
- package/cjs/exception/http-errors/failed-dependency.error.js +21 -0
- package/cjs/exception/http-errors/forbidden.error.js +23 -0
- package/cjs/exception/http-errors/internal-server.error.js +21 -0
- package/cjs/exception/http-errors/method-not-allowed.error.js +22 -0
- package/cjs/exception/http-errors/not-acceptable.error.js +22 -0
- package/cjs/exception/http-errors/not-found.error.js +25 -0
- package/cjs/exception/http-errors/unauthorized.error.js +22 -0
- package/cjs/exception/http-errors/unprocessable-entity.error.js +21 -0
- package/cjs/exception/index.js +18 -0
- package/cjs/exception/opra-exception.js +56 -0
- package/cjs/exception/resource-errors/resource-conflict.error.js +20 -0
- package/cjs/exception/resource-errors/resource-not-found.error.js +20 -0
- package/cjs/exception/wrap-exception.js +42 -0
- package/cjs/filter/antlr/OpraFilterLexer.js +386 -0
- package/cjs/filter/antlr/OpraFilterParser.js +2070 -0
- package/cjs/filter/antlr/OpraFilterVisitor.js +3 -0
- package/cjs/filter/ast/abstract/ast.js +10 -0
- package/cjs/filter/ast/abstract/expression.js +7 -0
- package/cjs/filter/ast/abstract/literal.js +14 -0
- package/cjs/filter/ast/abstract/term.js +7 -0
- package/cjs/filter/ast/expressions/arithmetic-expression.js +29 -0
- package/cjs/filter/ast/expressions/array-expression.js +15 -0
- package/cjs/filter/ast/expressions/comparison-expression.js +18 -0
- package/cjs/filter/ast/expressions/logical-expression.js +18 -0
- package/cjs/filter/ast/expressions/parentheses-expression.js +15 -0
- package/cjs/filter/ast/index.js +19 -0
- package/cjs/filter/ast/terms/boolean-literal.js +10 -0
- package/cjs/filter/ast/terms/date-literal.js +28 -0
- package/cjs/filter/ast/terms/external-constant.js +13 -0
- package/cjs/filter/ast/terms/null-literal.js +11 -0
- package/cjs/filter/ast/terms/number-literal.js +40 -0
- package/cjs/filter/ast/terms/qualified-identifier.js +10 -0
- package/cjs/filter/ast/terms/string-literal.js +14 -0
- package/cjs/filter/ast/terms/time-literal.js +33 -0
- package/cjs/filter/build.js +129 -0
- package/cjs/filter/error-listener.js +14 -0
- package/cjs/filter/errors.js +21 -0
- package/cjs/filter/filter-tree-visitor.js +113 -0
- package/cjs/filter/index.js +8 -0
- package/cjs/filter/parse.js +37 -0
- package/cjs/filter/utils.js +26 -0
- package/cjs/helpers/index.js +4 -0
- package/cjs/{classes → helpers}/responsive-map.js +1 -1
- package/cjs/{enums → http/enums}/http-headers.enum.js +9 -0
- package/cjs/{enums → http/enums}/http-status.enum.js +0 -0
- package/cjs/http/http-request.js +118 -0
- package/cjs/http/index.js +9 -0
- package/cjs/http/interfaces/client-http-headers.interface.js +2 -0
- package/cjs/http/interfaces/server-http-headers.interface.js +2 -0
- package/cjs/http/multipart/batch-multipart.js +155 -0
- package/cjs/http/multipart/http-request-content.js +16 -0
- package/cjs/http/multipart/http-response-content.js +14 -0
- package/cjs/http/multipart/index.js +4 -0
- package/cjs/http/utils/normalize-headers.js +28 -0
- package/cjs/i18n/i18n.js +175 -0
- package/cjs/i18n/index.js +10 -0
- package/cjs/i18n/string-utils.js +13 -0
- package/cjs/i18n/translate.js +15 -0
- package/cjs/index.js +12 -5
- package/cjs/schema/constants.js +11 -0
- package/cjs/schema/decorators/opr-collection-resource.decorator.js +23 -0
- package/cjs/schema/decorators/opr-complex-type.decorator.js +27 -0
- package/cjs/schema/decorators/opr-field.decorator.js +28 -0
- package/cjs/schema/decorators/opr-resolver.decorator.js +81 -0
- package/cjs/schema/decorators/opr-simple-type.decorator.js +18 -0
- package/cjs/schema/decorators/opr-singleton-resource.decorator.js +23 -0
- package/cjs/schema/implementation/data-type/builtin/any.type.js +9 -0
- package/cjs/schema/implementation/data-type/builtin/base64-binary.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/bigint.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/boolean.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/date-string.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/date.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/guid.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/integer.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/number.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/object.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin/string.type.js +15 -0
- package/cjs/schema/implementation/data-type/builtin-data-types.js +37 -0
- package/cjs/schema/implementation/data-type/complex-type.js +111 -0
- package/cjs/schema/implementation/data-type/data-type.js +36 -0
- package/cjs/schema/implementation/data-type/simple-type.js +21 -0
- package/cjs/schema/implementation/data-type/union-type.js +25 -0
- package/cjs/schema/implementation/document-builder.js +140 -0
- package/cjs/schema/implementation/opra-document.js +181 -0
- package/cjs/schema/implementation/query/collection-count-query.js +19 -0
- package/cjs/schema/implementation/query/collection-create-query.js +28 -0
- package/cjs/schema/implementation/query/collection-delete-many-query.js +19 -0
- package/cjs/schema/implementation/query/collection-delete-query.js +27 -0
- package/cjs/schema/implementation/query/collection-get-query.js +38 -0
- package/cjs/schema/implementation/query/collection-search-query.js +55 -0
- package/cjs/schema/implementation/query/collection-update-many-query.js +21 -0
- package/cjs/schema/implementation/query/collection-update-query.js +39 -0
- package/cjs/schema/implementation/query/field-get-query.js +45 -0
- package/cjs/schema/implementation/query/index.js +22 -0
- package/cjs/schema/implementation/query/singleton-get-query.js +27 -0
- package/cjs/schema/implementation/resource/collection-resource-info.js +58 -0
- package/cjs/schema/implementation/resource/container-resource-info.js +30 -0
- package/cjs/schema/implementation/resource/resource-info.js +39 -0
- package/cjs/schema/implementation/resource/singleton-resource-info.js +37 -0
- package/cjs/schema/implementation/schema-builder/extract-resource-metadata.util.js +84 -0
- package/cjs/schema/implementation/schema-builder/extract-type-metadata.util.js +94 -0
- package/cjs/schema/index.js +28 -0
- package/cjs/schema/interfaces/child-field-query.interface.js +2 -0
- package/cjs/schema/interfaces/data-type.metadata.js +2 -0
- package/cjs/schema/interfaces/resource-container.interface.js +2 -0
- package/cjs/schema/interfaces/resource.metadata.js +2 -0
- package/cjs/schema/opra-schema.definition.js +49 -0
- package/cjs/schema/type-helpers/extend-type.helper.js +65 -0
- package/cjs/schema/type-helpers/mixin-type.helper.js +46 -0
- package/cjs/schema/type-helpers/mixin.utils.js +32 -0
- package/cjs/schema/types.js +2 -0
- package/cjs/schema/utils/class.utils.js +8 -0
- package/cjs/schema/utils/clone-object.util.js +19 -0
- package/cjs/schema/utils/inspect.util.js +7 -0
- package/cjs/schema/utils/normalize-field-array.util.js +44 -0
- package/cjs/schema/utils/path-to-tree.util.js +26 -0
- package/cjs/schema/utils/string-compare.util.js +11 -0
- package/cjs/url/formats/boolean-format.js +25 -0
- package/cjs/url/formats/date-format.js +48 -0
- package/cjs/url/formats/filter-format.js +18 -0
- package/cjs/url/formats/format.js +6 -0
- package/cjs/url/formats/integer-format.js +20 -0
- package/cjs/url/formats/number-format.js +28 -0
- package/cjs/url/formats/string-format.js +28 -0
- package/cjs/url/index.js +8 -0
- package/cjs/url/opra-url-path-component.js +33 -0
- package/cjs/url/opra-url-path.js +128 -0
- package/cjs/url/opra-url-search-params.js +247 -0
- package/cjs/url/opra-url.js +299 -0
- package/cjs/url/utils/path-utils.js +86 -0
- package/cjs/utils/index.js +6 -0
- package/cjs/utils/is-url.js +8 -0
- package/cjs/utils/path-to-tree.js +28 -0
- package/cjs/utils/type-guards.js +46 -0
- package/esm/constants.d.ts +0 -0
- package/esm/constants.js +1 -0
- package/esm/exception/enums/issue-severity.enum.d.ts +13 -0
- package/esm/exception/enums/issue-severity.enum.js +20 -0
- package/esm/exception/error-issue.d.ts +9 -0
- package/esm/{types.js → exception/error-issue.js} +0 -0
- package/esm/exception/http-errors/bad-request.error.d.ts +10 -0
- package/esm/exception/http-errors/bad-request.error.js +18 -0
- package/esm/exception/http-errors/failed-dependency.error.d.ts +9 -0
- package/esm/exception/http-errors/failed-dependency.error.js +17 -0
- package/esm/exception/http-errors/forbidden.error.d.ts +11 -0
- package/esm/exception/http-errors/forbidden.error.js +19 -0
- package/esm/exception/http-errors/internal-server.error.d.ts +9 -0
- package/esm/exception/http-errors/internal-server.error.js +17 -0
- package/esm/exception/http-errors/method-not-allowed.error.d.ts +10 -0
- package/esm/exception/http-errors/method-not-allowed.error.js +18 -0
- package/esm/exception/http-errors/not-acceptable.error.d.ts +10 -0
- package/esm/exception/http-errors/not-acceptable.error.js +18 -0
- package/esm/exception/http-errors/not-found.error.d.ts +13 -0
- package/esm/exception/http-errors/not-found.error.js +21 -0
- package/esm/exception/http-errors/unauthorized.error.d.ts +10 -0
- package/esm/exception/http-errors/unauthorized.error.js +18 -0
- package/esm/exception/http-errors/unprocessable-entity.error.d.ts +9 -0
- package/esm/exception/http-errors/unprocessable-entity.error.js +17 -0
- package/esm/exception/index.d.ts +15 -0
- package/esm/exception/index.js +15 -0
- package/esm/exception/opra-exception.d.ts +15 -0
- package/esm/exception/opra-exception.js +52 -0
- package/esm/exception/resource-errors/resource-conflict.error.d.ts +5 -0
- package/esm/exception/resource-errors/resource-conflict.error.js +16 -0
- package/esm/exception/resource-errors/resource-not-found.error.d.ts +4 -0
- package/esm/exception/resource-errors/resource-not-found.error.js +16 -0
- package/esm/exception/wrap-exception.d.ts +2 -0
- package/esm/exception/wrap-exception.js +38 -0
- package/esm/filter/antlr/OpraFilterLexer.d.ts +78 -0
- package/esm/filter/antlr/OpraFilterLexer.js +381 -0
- package/esm/filter/antlr/OpraFilterParser.d.ts +365 -0
- package/esm/filter/antlr/OpraFilterParser.js +2022 -0
- package/esm/filter/antlr/OpraFilterVisitor.d.ts +290 -0
- package/esm/filter/antlr/OpraFilterVisitor.js +2 -0
- package/esm/filter/ast/abstract/ast.d.ts +5 -0
- package/esm/filter/ast/abstract/ast.js +6 -0
- package/esm/filter/ast/abstract/expression.d.ts +3 -0
- package/esm/filter/ast/abstract/expression.js +3 -0
- package/esm/filter/ast/abstract/literal.d.ts +6 -0
- package/esm/filter/ast/abstract/literal.js +10 -0
- package/esm/filter/ast/abstract/term.d.ts +3 -0
- package/esm/filter/ast/abstract/term.js +3 -0
- package/esm/filter/ast/expressions/arithmetic-expression.d.ts +13 -0
- package/esm/filter/ast/expressions/arithmetic-expression.js +24 -0
- package/esm/filter/ast/expressions/array-expression.d.ts +7 -0
- package/esm/filter/ast/expressions/array-expression.js +11 -0
- package/esm/filter/ast/expressions/comparison-expression.d.ts +10 -0
- package/esm/filter/ast/expressions/comparison-expression.js +14 -0
- package/esm/filter/ast/expressions/logical-expression.d.ts +8 -0
- package/esm/filter/ast/expressions/logical-expression.js +14 -0
- package/esm/filter/ast/expressions/parentheses-expression.d.ts +6 -0
- package/esm/filter/ast/expressions/parentheses-expression.js +11 -0
- package/esm/filter/ast/index.d.ts +16 -0
- package/esm/filter/ast/index.js +16 -0
- package/esm/filter/ast/terms/boolean-literal.d.ts +5 -0
- package/esm/filter/ast/terms/boolean-literal.js +6 -0
- package/esm/filter/ast/terms/date-literal.d.ts +6 -0
- package/esm/filter/ast/terms/date-literal.js +24 -0
- package/esm/filter/ast/terms/external-constant.d.ts +5 -0
- package/esm/filter/ast/terms/external-constant.js +9 -0
- package/esm/filter/ast/terms/null-literal.d.ts +5 -0
- package/esm/filter/ast/terms/null-literal.js +7 -0
- package/esm/filter/ast/terms/number-literal.d.ts +6 -0
- package/esm/filter/ast/terms/number-literal.js +36 -0
- package/esm/filter/ast/terms/qualified-identifier.d.ts +4 -0
- package/esm/filter/ast/terms/qualified-identifier.js +6 -0
- package/esm/filter/ast/terms/string-literal.d.ts +5 -0
- package/esm/filter/ast/terms/string-literal.js +10 -0
- package/esm/filter/ast/terms/time-literal.d.ts +6 -0
- package/esm/filter/ast/terms/time-literal.js +29 -0
- package/esm/filter/build.d.ts +31 -0
- package/esm/filter/build.js +105 -0
- package/esm/filter/error-listener.d.ts +8 -0
- package/esm/filter/error-listener.js +10 -0
- package/esm/filter/errors.d.ts +20 -0
- package/esm/filter/errors.js +15 -0
- package/esm/filter/filter-tree-visitor.d.ts +30 -0
- package/esm/filter/filter-tree-visitor.js +109 -0
- package/esm/filter/index.d.ts +5 -0
- package/esm/filter/index.js +5 -0
- package/esm/filter/parse.d.ts +2 -0
- package/esm/filter/parse.js +33 -0
- package/esm/filter/utils.d.ts +2 -0
- package/esm/filter/utils.js +21 -0
- package/esm/helpers/index.d.ts +1 -0
- package/esm/helpers/index.js +1 -0
- package/esm/{classes → helpers}/responsive-map.d.ts +0 -0
- package/esm/{classes → helpers}/responsive-map.js +1 -1
- package/esm/{enums → http/enums}/http-headers.enum.d.ts +9 -0
- package/esm/{enums → http/enums}/http-headers.enum.js +9 -0
- package/esm/{enums → http/enums}/http-status.enum.d.ts +0 -0
- package/esm/{enums → http/enums}/http-status.enum.js +0 -0
- package/esm/http/http-request.d.ts +34 -0
- package/esm/http/http-request.js +114 -0
- package/esm/http/index.d.ts +6 -0
- package/esm/http/index.js +6 -0
- package/esm/http/interfaces/client-http-headers.interface.d.ts +65 -0
- package/esm/http/interfaces/client-http-headers.interface.js +1 -0
- package/esm/http/interfaces/server-http-headers.interface.d.ts +1 -0
- package/esm/http/interfaces/server-http-headers.interface.js +1 -0
- package/esm/http/multipart/batch-multipart.d.ts +30 -0
- package/esm/http/multipart/batch-multipart.js +150 -0
- package/esm/http/multipart/http-request-content.d.ts +8 -0
- package/esm/http/multipart/http-request-content.js +12 -0
- package/esm/http/multipart/http-response-content.d.ts +7 -0
- package/esm/http/multipart/http-response-content.js +10 -0
- package/esm/http/multipart/index.d.ts +1 -0
- package/esm/http/multipart/index.js +1 -0
- package/esm/http/utils/normalize-headers.d.ts +1 -0
- package/esm/http/utils/normalize-headers.js +24 -0
- package/esm/i18n/i18n.d.ts +28 -0
- package/esm/i18n/i18n.js +170 -0
- package/esm/i18n/index.d.ts +5 -0
- package/esm/i18n/index.js +6 -0
- package/esm/i18n/string-utils.d.ts +2 -0
- package/esm/i18n/string-utils.js +8 -0
- package/esm/i18n/translate.d.ts +4 -0
- package/esm/i18n/translate.js +11 -0
- package/esm/index.d.ts +10 -5
- package/esm/index.js +10 -5
- package/esm/schema/constants.d.ts +8 -0
- package/esm/schema/constants.js +8 -0
- package/esm/schema/decorators/opr-collection-resource.decorator.d.ts +8 -0
- package/esm/schema/decorators/opr-collection-resource.decorator.js +19 -0
- package/esm/schema/decorators/opr-complex-type.decorator.d.ts +6 -0
- package/esm/schema/decorators/opr-complex-type.decorator.js +23 -0
- package/esm/schema/decorators/opr-field.decorator.d.ts +3 -0
- package/esm/schema/decorators/opr-field.decorator.js +24 -0
- package/esm/schema/decorators/opr-resolver.decorator.d.ts +8 -0
- package/esm/schema/decorators/opr-resolver.decorator.js +71 -0
- package/esm/schema/decorators/opr-simple-type.decorator.d.ts +6 -0
- package/esm/schema/decorators/opr-simple-type.decorator.js +14 -0
- package/esm/schema/decorators/opr-singleton-resource.decorator.d.ts +8 -0
- package/esm/schema/decorators/opr-singleton-resource.decorator.js +19 -0
- package/esm/schema/implementation/data-type/builtin/any.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/any.type.js +6 -0
- package/esm/schema/implementation/data-type/builtin/base64-binary.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/base64-binary.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/bigint.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/bigint.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/boolean.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/boolean.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/date-string.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/date-string.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/date.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/date.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/guid.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/guid.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/integer.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/integer.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/number.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/number.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/object.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/object.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin/string.type.d.ts +2 -0
- package/esm/schema/implementation/data-type/builtin/string.type.js +12 -0
- package/esm/schema/implementation/data-type/builtin-data-types.d.ts +4 -0
- package/esm/schema/implementation/data-type/builtin-data-types.js +34 -0
- package/esm/schema/implementation/data-type/complex-type.d.ts +29 -0
- package/esm/schema/implementation/data-type/complex-type.js +107 -0
- package/esm/schema/implementation/data-type/data-type.d.ts +16 -0
- package/esm/schema/implementation/data-type/data-type.js +32 -0
- package/esm/schema/implementation/data-type/simple-type.d.ts +12 -0
- package/esm/schema/implementation/data-type/simple-type.js +17 -0
- package/esm/schema/implementation/data-type/union-type.d.ts +16 -0
- package/esm/schema/implementation/data-type/union-type.js +21 -0
- package/esm/schema/implementation/document-builder.d.ts +16 -0
- package/esm/schema/implementation/document-builder.js +135 -0
- package/esm/schema/implementation/opra-document.d.ts +44 -0
- package/esm/schema/implementation/opra-document.js +177 -0
- package/esm/schema/implementation/query/collection-count-query.d.ts +14 -0
- package/esm/schema/implementation/query/collection-count-query.js +15 -0
- package/esm/schema/implementation/query/collection-create-query.d.ts +18 -0
- package/esm/schema/implementation/query/collection-create-query.js +24 -0
- package/esm/schema/implementation/query/collection-delete-many-query.d.ts +14 -0
- package/esm/schema/implementation/query/collection-delete-many-query.js +15 -0
- package/esm/schema/implementation/query/collection-delete-query.d.ts +10 -0
- package/esm/schema/implementation/query/collection-delete-query.js +23 -0
- package/esm/schema/implementation/query/collection-get-query.d.ts +21 -0
- package/esm/schema/implementation/query/collection-get-query.js +34 -0
- package/esm/schema/implementation/query/collection-search-query.d.ts +30 -0
- package/esm/schema/implementation/query/collection-search-query.js +51 -0
- package/esm/schema/implementation/query/collection-update-many-query.d.ts +15 -0
- package/esm/schema/implementation/query/collection-update-many-query.js +17 -0
- package/esm/schema/implementation/query/collection-update-query.d.ts +19 -0
- package/esm/schema/implementation/query/collection-update-query.js +35 -0
- package/esm/schema/implementation/query/field-get-query.d.ts +30 -0
- package/esm/schema/implementation/query/field-get-query.js +41 -0
- package/esm/schema/implementation/query/index.d.ts +27 -0
- package/esm/schema/implementation/query/index.js +17 -0
- package/esm/schema/implementation/query/singleton-get-query.d.ts +20 -0
- package/esm/schema/implementation/query/singleton-get-query.js +23 -0
- package/esm/schema/implementation/resource/collection-resource-info.d.ts +19 -0
- package/esm/schema/implementation/resource/collection-resource-info.js +54 -0
- package/esm/schema/implementation/resource/container-resource-info.d.ts +13 -0
- package/esm/schema/implementation/resource/container-resource-info.js +26 -0
- package/esm/schema/implementation/resource/resource-info.d.ts +17 -0
- package/esm/schema/implementation/resource/resource-info.js +35 -0
- package/esm/schema/implementation/resource/singleton-resource-info.d.ts +14 -0
- package/esm/schema/implementation/resource/singleton-resource-info.js +33 -0
- package/esm/schema/implementation/schema-builder/extract-resource-metadata.util.d.ts +3 -0
- package/esm/schema/implementation/schema-builder/extract-resource-metadata.util.js +80 -0
- package/esm/schema/implementation/schema-builder/extract-type-metadata.util.d.ts +4 -0
- package/esm/schema/implementation/schema-builder/extract-type-metadata.util.js +89 -0
- package/esm/schema/index.d.ts +25 -0
- package/esm/schema/index.js +25 -0
- package/esm/schema/interfaces/child-field-query.interface.d.ts +4 -0
- package/esm/schema/interfaces/child-field-query.interface.js +1 -0
- package/esm/schema/interfaces/data-type.metadata.d.ts +18 -0
- package/esm/schema/interfaces/data-type.metadata.js +1 -0
- package/esm/schema/interfaces/resource-container.interface.d.ts +8 -0
- package/esm/schema/interfaces/resource-container.interface.js +1 -0
- package/esm/schema/interfaces/resource.metadata.d.ts +18 -0
- package/esm/schema/interfaces/resource.metadata.js +1 -0
- package/esm/schema/opra-schema.definition.d.ts +178 -0
- package/esm/schema/opra-schema.definition.js +46 -0
- package/esm/schema/type-helpers/extend-type.helper.d.ts +3 -0
- package/esm/schema/type-helpers/extend-type.helper.js +59 -0
- package/esm/schema/type-helpers/mixin-type.helper.d.ts +2 -0
- package/esm/schema/type-helpers/mixin-type.helper.js +41 -0
- package/esm/schema/type-helpers/mixin.utils.d.ts +3 -0
- package/esm/schema/type-helpers/mixin.utils.js +27 -0
- package/esm/{types.d.ts → schema/types.d.ts} +8 -1
- package/esm/schema/types.js +1 -0
- package/esm/schema/utils/class.utils.d.ts +2 -0
- package/esm/schema/utils/class.utils.js +4 -0
- package/esm/schema/utils/clone-object.util.d.ts +1 -0
- package/esm/schema/utils/clone-object.util.js +14 -0
- package/esm/schema/utils/inspect.util.d.ts +4 -0
- package/esm/schema/utils/inspect.util.js +4 -0
- package/esm/schema/utils/normalize-field-array.util.d.ts +3 -0
- package/esm/schema/utils/normalize-field-array.util.js +40 -0
- package/esm/schema/utils/path-to-tree.util.d.ts +4 -0
- package/esm/schema/utils/path-to-tree.util.js +22 -0
- package/esm/schema/utils/string-compare.util.d.ts +1 -0
- package/esm/schema/utils/string-compare.util.js +7 -0
- package/esm/url/formats/boolean-format.d.ts +5 -0
- package/esm/url/formats/boolean-format.js +21 -0
- package/esm/url/formats/date-format.d.ts +16 -0
- package/esm/url/formats/date-format.js +44 -0
- package/esm/url/formats/filter-format.d.ts +6 -0
- package/esm/url/formats/filter-format.js +14 -0
- package/esm/url/formats/format.d.ts +4 -0
- package/esm/url/formats/format.js +2 -0
- package/esm/url/formats/integer-format.d.ts +9 -0
- package/esm/url/formats/integer-format.js +16 -0
- package/esm/url/formats/number-format.d.ts +12 -0
- package/esm/url/formats/number-format.js +24 -0
- package/esm/url/formats/string-format.d.ts +14 -0
- package/esm/url/formats/string-format.js +24 -0
- package/esm/url/index.d.ts +5 -0
- package/esm/url/index.js +5 -0
- package/esm/url/opra-url-path-component.d.ts +15 -0
- package/esm/url/opra-url-path-component.js +29 -0
- package/esm/url/opra-url-path.d.ts +30 -0
- package/esm/url/opra-url-path.js +124 -0
- package/esm/url/opra-url-search-params.d.ts +46 -0
- package/esm/url/opra-url-search-params.js +243 -0
- package/esm/url/opra-url.d.ts +79 -0
- package/esm/url/opra-url.js +295 -0
- package/esm/url/utils/path-utils.d.ts +8 -0
- package/esm/url/utils/path-utils.js +78 -0
- package/esm/utils/index.d.ts +3 -0
- package/esm/utils/index.js +3 -0
- package/esm/utils/is-url.d.ts +1 -0
- package/esm/utils/is-url.js +4 -0
- package/esm/utils/path-to-tree.d.ts +4 -0
- package/esm/utils/path-to-tree.js +24 -0
- package/esm/utils/type-guards.d.ts +9 -0
- package/esm/utils/type-guards.js +37 -0
- package/package.json +30 -10
- package/umd/opra-common.umd.min.js +1 -0
- package/cjs/classes/headers-map.js +0 -18
- package/esm/classes/headers-map.d.ts +0 -5
- package/esm/classes/headers-map.js +0 -14
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as Optionals from '@opra/optionals';
|
|
2
|
+
import { DATATYPE_METADATA, MAPPED_TYPE_METADATA } from '../constants.js';
|
|
3
|
+
import { applyMixins, inheritPropertyInitializers } from './mixin.utils.js';
|
|
4
|
+
export function PickType(classRef, keys) {
|
|
5
|
+
return ExtendType(classRef, classRef, { pickKeys: keys });
|
|
6
|
+
}
|
|
7
|
+
export function OmitType(classRef, keys) {
|
|
8
|
+
return ExtendType(classRef, classRef, { omitKeys: keys });
|
|
9
|
+
}
|
|
10
|
+
function ExtendType(classRef, orgClassRef, options) {
|
|
11
|
+
const pickKeys = options.pickKeys && options.pickKeys.map(x => String(x).toLowerCase());
|
|
12
|
+
const omitKeys = options.omitKeys && options.omitKeys.map(x => String(x).toLowerCase());
|
|
13
|
+
const isInheritedPredicate = (propertyName) => {
|
|
14
|
+
if (omitKeys && omitKeys.includes(propertyName.toLowerCase()))
|
|
15
|
+
return false;
|
|
16
|
+
if (pickKeys)
|
|
17
|
+
return pickKeys.includes(propertyName.toLowerCase());
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
// const isRequiredPredicate = (propertyName: string): boolean | undefined => {
|
|
21
|
+
// if (options.requiredKeys && options.requiredKeys.includes(propertyName as RequiredKey))
|
|
22
|
+
// return true;
|
|
23
|
+
// if (options.partialKeys && options.partialKeys.includes(propertyName as PartialKey))
|
|
24
|
+
// return false;
|
|
25
|
+
// return;
|
|
26
|
+
// };
|
|
27
|
+
class MappedClass {
|
|
28
|
+
constructor() {
|
|
29
|
+
inheritPropertyInitializers(this, classRef, isInheritedPredicate);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
applyMixins(MappedClass, classRef);
|
|
33
|
+
const mappedTypeMetadata = [];
|
|
34
|
+
const m = Reflect.getOwnMetadata(DATATYPE_METADATA, classRef);
|
|
35
|
+
if (m) {
|
|
36
|
+
if (!(m.kind === 'ComplexType'))
|
|
37
|
+
throw new TypeError(`Class "${classRef}" is not a ComplexType`);
|
|
38
|
+
const meta = {
|
|
39
|
+
type: classRef
|
|
40
|
+
};
|
|
41
|
+
if (options.pickKeys)
|
|
42
|
+
meta.pick = options.pickKeys;
|
|
43
|
+
if (options.omitKeys)
|
|
44
|
+
meta.omit = options.omitKeys;
|
|
45
|
+
mappedTypeMetadata.push(meta);
|
|
46
|
+
}
|
|
47
|
+
else
|
|
48
|
+
throw new TypeError(`Class "${classRef}" doesn't have datatype metadata information`);
|
|
49
|
+
if (Optionals.SqbConnect) {
|
|
50
|
+
const { Entity, EntityMetadata } = Optionals.SqbConnect;
|
|
51
|
+
const srcMeta = Entity.getMetadata(classRef);
|
|
52
|
+
if (srcMeta) {
|
|
53
|
+
const trgMeta = EntityMetadata.define(MappedClass);
|
|
54
|
+
EntityMetadata.mixin(trgMeta, srcMeta, k => isInheritedPredicate(k));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
Reflect.defineMetadata(MAPPED_TYPE_METADATA, mappedTypeMetadata, MappedClass);
|
|
58
|
+
return MappedClass;
|
|
59
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { Class } from 'ts-gems';
|
|
2
|
+
export declare function MixinType<A1 extends any[], I1, S1, A2 extends any[], I2, S2, A3 extends any[], I3, S3, A4 extends any[], I4, S4>(c1: Class<A1, I1, S1>, c2: Class<A2, I2, S2>, c3?: Class<A3, I3, S3>, c4?: Class<A4, I4, S4>): Class<any[], I1 & I2 & I3 & I4, S1 & S2 & S3 & S4>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as Optionals from '@opra/optionals';
|
|
2
|
+
import { DATATYPE_METADATA, MAPPED_TYPE_METADATA } from '../constants.js';
|
|
3
|
+
import { applyMixins, inheritPropertyInitializers } from './mixin.utils.js';
|
|
4
|
+
export function MixinType(c1, c2, c3, c4) {
|
|
5
|
+
const clasRefs = [...arguments].filter(x => !!x);
|
|
6
|
+
if (!clasRefs.length)
|
|
7
|
+
throw new TypeError('You must provide base classeses');
|
|
8
|
+
if (clasRefs.length === 1)
|
|
9
|
+
return clasRefs[0];
|
|
10
|
+
class MappedClass {
|
|
11
|
+
constructor() {
|
|
12
|
+
for (const c of clasRefs)
|
|
13
|
+
inheritPropertyInitializers(this, c);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const mappedTypeMetadata = [];
|
|
17
|
+
for (const c of clasRefs) {
|
|
18
|
+
const m = Reflect.getOwnMetadata(DATATYPE_METADATA, c);
|
|
19
|
+
if (m) {
|
|
20
|
+
if (!(m.kind === 'ComplexType'))
|
|
21
|
+
throw new TypeError(`Class "${c}" is not a ComplexType`);
|
|
22
|
+
mappedTypeMetadata.push({
|
|
23
|
+
type: c
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
else if (Reflect.hasMetadata(MAPPED_TYPE_METADATA, c)) {
|
|
27
|
+
const mtm = Reflect.getMetadata(MAPPED_TYPE_METADATA, c);
|
|
28
|
+
if (mtm)
|
|
29
|
+
mappedTypeMetadata.push(...mtm);
|
|
30
|
+
}
|
|
31
|
+
else
|
|
32
|
+
throw new TypeError(`Class "${c}" doesn't have datatype metadata information`);
|
|
33
|
+
applyMixins(MappedClass, c);
|
|
34
|
+
}
|
|
35
|
+
if (Optionals.SqbConnect) {
|
|
36
|
+
const { Entity } = Optionals.SqbConnect;
|
|
37
|
+
Entity.mixin(MappedClass, ...clasRefs);
|
|
38
|
+
}
|
|
39
|
+
Reflect.defineMetadata(MAPPED_TYPE_METADATA, mappedTypeMetadata, MappedClass);
|
|
40
|
+
return MappedClass;
|
|
41
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Type } from 'ts-gems';
|
|
2
|
+
export declare function applyMixins(derivedCtor: any, baseCtor: any, filter?: (k: string) => boolean): void;
|
|
3
|
+
export declare function inheritPropertyInitializers(target: Record<string, any>, sourceClass: Type, isPropertyInherited?: (key: string) => boolean): void;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function applyMixins(derivedCtor, baseCtor, filter) {
|
|
2
|
+
for (const k of Object.getOwnPropertyNames(baseCtor.prototype)) {
|
|
3
|
+
if ((k === 'constructor' || k === '__proto__' || k === 'toJSON' || k === 'toString') ||
|
|
4
|
+
filter && !filter(k))
|
|
5
|
+
continue;
|
|
6
|
+
Object.defineProperty(derivedCtor.prototype, k, Object.getOwnPropertyDescriptor(baseCtor.prototype, k) ||
|
|
7
|
+
Object.create(null));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function inheritPropertyInitializers(target, sourceClass,
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
12
|
+
isPropertyInherited = (key) => true) {
|
|
13
|
+
try {
|
|
14
|
+
const tempInstance = new sourceClass();
|
|
15
|
+
const propertyNames = Object.getOwnPropertyNames(tempInstance);
|
|
16
|
+
propertyNames
|
|
17
|
+
.filter((propertyName) => typeof tempInstance[propertyName] !== 'undefined' &&
|
|
18
|
+
typeof target[propertyName] === 'undefined')
|
|
19
|
+
.filter((propertyName) => isPropertyInherited(propertyName))
|
|
20
|
+
.forEach((propertyName) => {
|
|
21
|
+
target[propertyName] = tempInstance[propertyName];
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
//
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import { Builtin, DeepPickWritable } from 'ts-gems';
|
|
1
|
+
import { Builtin, DeepPickWritable, Type } from 'ts-gems';
|
|
2
2
|
export declare type PartialInput<T> = DeepNullablePartial<DeepPickWritable<T>>;
|
|
3
3
|
export declare type PartialOutput<T> = DeepNullablePartial<T>;
|
|
4
4
|
declare type DeepNullablePartial<T> = T extends Builtin ? T : T extends Promise<infer U> ? Promise<DeepNullablePartial<U>> : T extends (infer U)[] ? DeepNullablePartial<U>[] : {
|
|
5
5
|
[P in keyof T]?: DeepNullablePartial<Exclude<T[P], undefined>> | null;
|
|
6
6
|
};
|
|
7
|
+
export declare type Thunk<T> = T | (() => T);
|
|
8
|
+
export declare type ThunkAsync<T> = T | Promise<T> | (() => T) | (() => Promise<T>);
|
|
9
|
+
export declare type TypeThunk<T = any> = Thunk<Type<T>>;
|
|
10
|
+
export declare type TypeThunkAsync<T = any> = ThunkAsync<Type<T>>;
|
|
11
|
+
export declare type Named<T> = T & {
|
|
12
|
+
name: string;
|
|
13
|
+
};
|
|
7
14
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cloneObject<T extends {}>(obj: T, jsonOnly?: boolean): T;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import isPlainObject from 'putil-isplainobject';
|
|
2
|
+
import merge from 'putil-merge';
|
|
3
|
+
export function cloneObject(obj, jsonOnly) {
|
|
4
|
+
return merge({}, obj, {
|
|
5
|
+
deep: true,
|
|
6
|
+
clone: true,
|
|
7
|
+
filter: (source, key) => {
|
|
8
|
+
const v = source[key];
|
|
9
|
+
return v != null &&
|
|
10
|
+
!jsonOnly || (typeof v !== 'function' &&
|
|
11
|
+
(typeof v !== 'object' || isPlainObject(v) || Array.isArray(v)));
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ComplexType } from '../implementation/data-type/complex-type.js';
|
|
2
|
+
import type { OpraDocument } from '../implementation/opra-document.js';
|
|
3
|
+
export declare function normalizeFieldArray(document: OpraDocument, dataType: ComplexType | undefined, fields: string[], parentPath?: string): string[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ComplexType } from '../implementation/data-type/complex-type.js';
|
|
2
|
+
import { pathToTree } from './path-to-tree.util.js';
|
|
3
|
+
export function normalizeFieldArray(document, dataType, fields, parentPath = '') {
|
|
4
|
+
const fieldsTree = pathToTree(fields) || {};
|
|
5
|
+
return _normalizeFieldsList([], document, dataType, fieldsTree, '', parentPath, {
|
|
6
|
+
additionalFields: true
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function _normalizeFieldsList(target, document, dataType, node, parentPath = '', actualPath = '', options) {
|
|
10
|
+
let curPath = '';
|
|
11
|
+
for (const k of Object.keys(node)) {
|
|
12
|
+
const nodeVal = node[k];
|
|
13
|
+
const prop = dataType?.fields.get(k);
|
|
14
|
+
if (!prop) {
|
|
15
|
+
curPath = parentPath ? parentPath + '.' + k : k;
|
|
16
|
+
if (!options?.additionalFields || (dataType && !dataType.additionalFields))
|
|
17
|
+
throw new TypeError(`Unknown field "${curPath}"`);
|
|
18
|
+
if (typeof nodeVal === 'object')
|
|
19
|
+
_normalizeFieldsList(target, document, undefined, nodeVal, curPath, actualPath, options);
|
|
20
|
+
else
|
|
21
|
+
target.push(curPath);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
curPath = parentPath ? parentPath + '.' + prop.name : prop.name;
|
|
25
|
+
const propType = document.getDataType(prop.type || 'string');
|
|
26
|
+
if (typeof nodeVal === 'object') {
|
|
27
|
+
if (!(propType && propType instanceof ComplexType))
|
|
28
|
+
throw new TypeError(`"${(actualPath ? actualPath + '.' + curPath : curPath)}" is not a complex type and has no sub fields`);
|
|
29
|
+
if (target.findIndex(x => x === parentPath) >= 0)
|
|
30
|
+
continue;
|
|
31
|
+
target = _normalizeFieldsList(target, document, propType, nodeVal, curPath, actualPath, options);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (target.findIndex(x => x.startsWith(curPath + '.')) >= 0) {
|
|
35
|
+
target = target.filter(x => !x.startsWith(curPath + '.'));
|
|
36
|
+
}
|
|
37
|
+
target.push(curPath);
|
|
38
|
+
}
|
|
39
|
+
return target;
|
|
40
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const dotPattern = /^([^.]+)\.(.*)$/;
|
|
2
|
+
export function pathToTree(arr) {
|
|
3
|
+
if (!arr.length)
|
|
4
|
+
return;
|
|
5
|
+
return _stringPathToObjectTree(arr, {});
|
|
6
|
+
}
|
|
7
|
+
function _stringPathToObjectTree(arr, target) {
|
|
8
|
+
for (const k of arr) {
|
|
9
|
+
const m = dotPattern.exec(k);
|
|
10
|
+
if (m) {
|
|
11
|
+
const key = m[1];
|
|
12
|
+
if (target[key] === true)
|
|
13
|
+
continue;
|
|
14
|
+
const sub = target[key] = typeof target[key] === 'object' ? target[key] : {};
|
|
15
|
+
_stringPathToObjectTree([m[2]], sub);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
target[k] = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return target;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function stringCompare(a: string, b: string): number;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Format } from './format.js';
|
|
2
|
+
const trueValues = ['true', 't', 'yes', 'y', '1'];
|
|
3
|
+
const falseValues = ['false', 'f', 'no', 'n', '0'];
|
|
4
|
+
export class BooleanFormat extends Format {
|
|
5
|
+
parse(value) {
|
|
6
|
+
if (value === '')
|
|
7
|
+
return true;
|
|
8
|
+
// noinspection SuspiciousTypeOfGuard
|
|
9
|
+
if (typeof value === 'boolean')
|
|
10
|
+
return value;
|
|
11
|
+
if (trueValues.includes(value.toLowerCase()))
|
|
12
|
+
return true;
|
|
13
|
+
if (falseValues.includes(value.toLowerCase()))
|
|
14
|
+
return false;
|
|
15
|
+
throw new TypeError(`"${value}" is not a valid boolean`);
|
|
16
|
+
}
|
|
17
|
+
stringify(value) {
|
|
18
|
+
return typeof value === 'boolean' ?
|
|
19
|
+
(value ? 'true' : 'false') : '';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Format } from './format.js';
|
|
2
|
+
export interface DateFormatOptions {
|
|
3
|
+
time?: boolean;
|
|
4
|
+
timeZone?: boolean;
|
|
5
|
+
min?: string;
|
|
6
|
+
max?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class DateFormat extends Format {
|
|
9
|
+
time: boolean;
|
|
10
|
+
timeZone: boolean;
|
|
11
|
+
min?: string;
|
|
12
|
+
max?: string;
|
|
13
|
+
constructor(options?: DateFormatOptions);
|
|
14
|
+
parse(value: string): string;
|
|
15
|
+
stringify(value: any): string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import { Format } from './format.js';
|
|
3
|
+
// noinspection RegExpUnnecessaryNonCapturingGroup
|
|
4
|
+
const DATE_FORMAT_PATTERN = /^(\d{4})(?:-?(0[1-9]|1[012])(?:-?([123]0|[012][1-9]|31))?)?(?:[T ]?([01][0-9]|2[0-3]):?([0-5][0-9]):?([0-5][0-9])?(?:\.(\d+))?(?:(Z)|(?:([+-])([01]?[0-9]|2[0-3]):?([0-5][0-9])?))?)?$/;
|
|
5
|
+
export class DateFormat extends Format {
|
|
6
|
+
time;
|
|
7
|
+
timeZone;
|
|
8
|
+
min;
|
|
9
|
+
max;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super();
|
|
12
|
+
this.max = options?.max ? coerceToDateString(options.max) : undefined;
|
|
13
|
+
this.min = options?.min ? coerceToDateString(options.min) : undefined;
|
|
14
|
+
this.time = options?.time ?? true;
|
|
15
|
+
this.timeZone = options?.timeZone ?? true;
|
|
16
|
+
}
|
|
17
|
+
parse(value) {
|
|
18
|
+
const v = coerceToDateString(value, this.time, this.timeZone);
|
|
19
|
+
if (this.min != null && v < this.min)
|
|
20
|
+
throw new TypeError(`Value must be ${this.min} or greater.`);
|
|
21
|
+
if (this.max != null && v > this.max)
|
|
22
|
+
throw new TypeError(`Value must be ${this.max} or less.`);
|
|
23
|
+
return v;
|
|
24
|
+
}
|
|
25
|
+
stringify(value) {
|
|
26
|
+
return coerceToDateString(value, this.time, this.timeZone);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function coerceToDateString(value, time, timeZone) {
|
|
30
|
+
if (value === '' || value == null)
|
|
31
|
+
return '';
|
|
32
|
+
const m = value.match(DATE_FORMAT_PATTERN);
|
|
33
|
+
if (!m)
|
|
34
|
+
throw new TypeError(`"${value}" is not a valid date.`);
|
|
35
|
+
let v = m[1] + '-' + (m[2] || '01') + '-' + (m[3] || '01');
|
|
36
|
+
if (time) {
|
|
37
|
+
v += 'T' + (m[4] || '00') + ':' + (m[5] || '00') + ':' + (m[6] || '00') +
|
|
38
|
+
(m[7] ? '.' + m[7] : '');
|
|
39
|
+
if (timeZone)
|
|
40
|
+
v += m[8] ? 'Z' :
|
|
41
|
+
(m[9] ? (m[9] + (m[10] || '00') + ':' + (m[11] || '00')) : '');
|
|
42
|
+
}
|
|
43
|
+
return v;
|
|
44
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Expression } from '../../filter/ast/index.js';
|
|
2
|
+
import { parseFilter } from '../../filter/parse.js';
|
|
3
|
+
import { Format } from './format.js';
|
|
4
|
+
export class FilterFormat extends Format {
|
|
5
|
+
parse(value) {
|
|
6
|
+
if (value instanceof Expression)
|
|
7
|
+
return value;
|
|
8
|
+
return parseFilter(value);
|
|
9
|
+
}
|
|
10
|
+
stringify(value) {
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
return value ? '' + value : '';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NumberFormat, NumberFormatOptions } from './number-format.js';
|
|
2
|
+
export interface IntegerFormatOptions extends NumberFormatOptions {
|
|
3
|
+
enum?: number[];
|
|
4
|
+
}
|
|
5
|
+
export declare class IntegerFormat extends NumberFormat {
|
|
6
|
+
enum?: number[];
|
|
7
|
+
constructor(options?: IntegerFormatOptions);
|
|
8
|
+
parse(value: string): number;
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NumberFormat } from './number-format.js';
|
|
2
|
+
export class IntegerFormat extends NumberFormat {
|
|
3
|
+
enum;
|
|
4
|
+
constructor(options) {
|
|
5
|
+
super(options);
|
|
6
|
+
this.enum = options?.enum;
|
|
7
|
+
}
|
|
8
|
+
parse(value) {
|
|
9
|
+
const v = super.parse(value);
|
|
10
|
+
if (!Number.isInteger(v))
|
|
11
|
+
throw new TypeError(`"${value}" is not a valid integer`);
|
|
12
|
+
if (this.enum && !this.enum.includes(v))
|
|
13
|
+
throw new TypeError(`"${value}" is not one of allowed enum values (${this.enum}).`);
|
|
14
|
+
return v;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Format } from './format.js';
|
|
2
|
+
export interface NumberFormatOptions {
|
|
3
|
+
max?: number;
|
|
4
|
+
min?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class NumberFormat extends Format {
|
|
7
|
+
max?: number;
|
|
8
|
+
min?: number;
|
|
9
|
+
constructor(options?: NumberFormatOptions);
|
|
10
|
+
parse(value: string): number;
|
|
11
|
+
stringify(value: any): string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Format } from './format.js';
|
|
2
|
+
export class NumberFormat extends Format {
|
|
3
|
+
max;
|
|
4
|
+
min;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super();
|
|
7
|
+
this.max = options?.max;
|
|
8
|
+
this.min = options?.min;
|
|
9
|
+
}
|
|
10
|
+
parse(value) {
|
|
11
|
+
// noinspection SuspiciousTypeOfGuard
|
|
12
|
+
const v = typeof value === 'number' ? value : parseFloat(value);
|
|
13
|
+
if (isNaN(v))
|
|
14
|
+
throw new TypeError(`"${value}" is not a valid number`);
|
|
15
|
+
if (this.min != null && v < this.min)
|
|
16
|
+
throw new TypeError(`Value must be ${this.min} or greater.`);
|
|
17
|
+
if (this.max != null && v > this.max)
|
|
18
|
+
throw new TypeError(`Value must be ${this.max} or less.`);
|
|
19
|
+
return v;
|
|
20
|
+
}
|
|
21
|
+
stringify(value) {
|
|
22
|
+
return typeof value === 'number' ? '' + value : '';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Format } from './format.js';
|
|
2
|
+
export interface StringFormatOptions {
|
|
3
|
+
maxLength?: number;
|
|
4
|
+
minLength?: number;
|
|
5
|
+
enum?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class StringFormat extends Format {
|
|
8
|
+
maxLength?: number;
|
|
9
|
+
minLength?: number;
|
|
10
|
+
enum?: string[];
|
|
11
|
+
constructor(options?: StringFormatOptions);
|
|
12
|
+
parse(value: string): string;
|
|
13
|
+
stringify(value: any): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Format } from './format.js';
|
|
2
|
+
export class StringFormat extends Format {
|
|
3
|
+
maxLength;
|
|
4
|
+
minLength;
|
|
5
|
+
enum;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super();
|
|
8
|
+
this.maxLength = options?.maxLength;
|
|
9
|
+
this.minLength = options?.minLength;
|
|
10
|
+
this.enum = options?.enum;
|
|
11
|
+
}
|
|
12
|
+
parse(value) {
|
|
13
|
+
if (this.minLength != null && value.length < this.minLength)
|
|
14
|
+
throw new TypeError(`Value must be at least ${this.minLength} character${this.minLength > 1 ? 's' : ''} long.`);
|
|
15
|
+
if (this.maxLength != null && value.length > this.maxLength)
|
|
16
|
+
throw new TypeError(`Value can be up to ${this.maxLength} character${this.maxLength > 1 ? 's' : ''} long.`);
|
|
17
|
+
if (this.enum && !this.enum.includes(value))
|
|
18
|
+
throw new TypeError(`"${value}" is not one of allowed enum values (${this.enum}).`);
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
stringify(value) {
|
|
22
|
+
return value == null ? '' : '' + value;
|
|
23
|
+
}
|
|
24
|
+
}
|
package/esm/url/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare const nodeInspectCustom: unique symbol;
|
|
2
|
+
export declare type OpraURLPathComponentInit = {
|
|
3
|
+
resource: string;
|
|
4
|
+
key?: any;
|
|
5
|
+
typeCast?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class OpraURLPathComponent {
|
|
8
|
+
resource: string;
|
|
9
|
+
key?: any;
|
|
10
|
+
typeCast?: string;
|
|
11
|
+
constructor(init: OpraURLPathComponentInit);
|
|
12
|
+
toString(): string;
|
|
13
|
+
[nodeInspectCustom](): any;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { encodePathComponent } from './utils/path-utils.js';
|
|
2
|
+
const nodeInspectCustom = Symbol.for('nodejs.util.inspect.custom');
|
|
3
|
+
export class OpraURLPathComponent {
|
|
4
|
+
resource;
|
|
5
|
+
key;
|
|
6
|
+
typeCast;
|
|
7
|
+
constructor(init) {
|
|
8
|
+
this.resource = init.resource;
|
|
9
|
+
this.key = init.key;
|
|
10
|
+
this.typeCast = init.typeCast;
|
|
11
|
+
}
|
|
12
|
+
toString() {
|
|
13
|
+
const obj = encodePathComponent(this.resource, this.key, this.typeCast);
|
|
14
|
+
if (obj)
|
|
15
|
+
Object.setPrototypeOf(obj, OpraURLPathComponent.prototype);
|
|
16
|
+
return obj;
|
|
17
|
+
}
|
|
18
|
+
/* istanbul ignore next */
|
|
19
|
+
[nodeInspectCustom]() {
|
|
20
|
+
const out = {
|
|
21
|
+
resource: this.resource,
|
|
22
|
+
};
|
|
23
|
+
if (this.key != null)
|
|
24
|
+
out.key = this.key;
|
|
25
|
+
if (this.typeCast != null)
|
|
26
|
+
out.typeCast = this.typeCast;
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { OpraURLPathComponent, OpraURLPathComponentInit } from './opra-url-path-component.js';
|
|
4
|
+
declare const nodeInspectCustom: unique symbol;
|
|
5
|
+
export declare class OpraURLPath extends EventEmitter {
|
|
6
|
+
private _entries;
|
|
7
|
+
constructor(...components: (OpraURLPathComponent | OpraURLPathComponentInit)[]);
|
|
8
|
+
constructor(init?: string | OpraURLPath | URL | OpraURLPathComponent | OpraURLPathComponentInit);
|
|
9
|
+
get size(): number;
|
|
10
|
+
add(component: OpraURLPathComponent | {
|
|
11
|
+
resource: string;
|
|
12
|
+
key?: any;
|
|
13
|
+
typeCast?: string;
|
|
14
|
+
}): void;
|
|
15
|
+
add(name: string, key?: any, typeCast?: string): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
get(index: number): OpraURLPathComponent;
|
|
18
|
+
join(pathString: string): this;
|
|
19
|
+
entries(): IterableIterator<[OpraURLPathComponent, number]>;
|
|
20
|
+
values(): IterableIterator<OpraURLPathComponent>;
|
|
21
|
+
forEach(callback: (name: string, key: any, _this: this) => void): void;
|
|
22
|
+
getResource(index: number): string | undefined;
|
|
23
|
+
getKey(index: number): any;
|
|
24
|
+
toString(): string;
|
|
25
|
+
[Symbol.iterator](): IterableIterator<[OpraURLPathComponent, number]>;
|
|
26
|
+
[nodeInspectCustom](): OpraURLPathComponent[];
|
|
27
|
+
protected _add(component: any, key?: any, typeCast?: string): void;
|
|
28
|
+
protected _parse(v: string): void;
|
|
29
|
+
}
|
|
30
|
+
export {};
|