@warlock.js/notifications 4.16.0 → 5.0.1
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/CHANGELOG.md +6 -0
- package/cjs/channel_api-CH3DxhRU.cjs +7463 -0
- package/cjs/channel_api-CH3DxhRU.cjs.map +1 -0
- package/cjs/chunk-fl3r8ClO.cjs +41 -0
- package/cjs/index.cjs +1 -1
- package/cjs/index.cjs.map +1 -1
- package/cjs/rabbitmq-driver-CJtyxjUQ.cjs +3 -0
- package/cjs/src-Cus6pYPC.cjs +10981 -0
- package/cjs/src-Cus6pYPC.cjs.map +1 -0
- package/esm/_virtual/_rolldown/runtime.mjs +32 -0
- package/esm/herald/src/communicators/broker-registry.mjs +204 -0
- package/esm/herald/src/communicators/broker-registry.mjs.map +1 -0
- package/esm/herald/src/communicators/broker.mjs +110 -0
- package/esm/herald/src/communicators/broker.mjs.map +1 -0
- package/esm/herald/src/communicators/index.mjs +4 -0
- package/esm/herald/src/decorators/consumable.mjs +36 -0
- package/esm/herald/src/decorators/consumable.mjs.map +1 -0
- package/esm/herald/src/decorators/index.mjs +3 -0
- package/esm/herald/src/drivers/index.mjs +5 -0
- package/esm/herald/src/drivers/rabbitmq/index.mjs +4 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs +403 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs.map +1 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs +303 -0
- package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs.map +1 -0
- package/esm/herald/src/index.mjs +16 -0
- package/esm/herald/src/message-managers/event-consumer.mjs +76 -0
- package/esm/herald/src/message-managers/event-consumer.mjs.map +1 -0
- package/esm/herald/src/message-managers/event-message.mjs +85 -0
- package/esm/herald/src/message-managers/event-message.mjs.map +1 -0
- package/esm/herald/src/message-managers/index.mjs +4 -0
- package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs +42 -0
- package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs.map +1 -0
- package/esm/herald/src/use-case-broadcast.mjs +30 -0
- package/esm/herald/src/use-case-broadcast.mjs.map +1 -0
- package/esm/herald/src/utils/connect-to-broker.mjs +168 -0
- package/esm/herald/src/utils/connect-to-broker.mjs.map +1 -0
- package/esm/herald/src/utils/index.mjs +3 -0
- package/esm/in-app/in-app.d.mts +3 -3
- package/esm/in-app/in-app.d.mts.map +1 -1
- package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs +6 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/bool.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/color.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/date.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/float.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/id.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/int.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/nanoid.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/pick.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/random.mjs +16 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/sample.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/string.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/token.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/uuid.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/Random/weighted.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/async/retry.mjs +3 -0
- package/esm/node_modules/@mongez/reinforcements/esm/index.mjs +24 -0
- package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs +82 -0
- package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs +17 -0
- package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs +13 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs +18 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs +17 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs +30 -0
- package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs +19 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs +18 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs +14 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs +18 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs +22 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs +17 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs +21 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs +21 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs +20 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs +15 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs +25 -0
- package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs +11 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs +100 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs.map +1 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs +27 -0
- package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs.map +1 -0
- package/esm/node_modules/@mongez/supportive-is/esm/index.mjs +353 -0
- package/esm/node_modules/@mongez/supportive-is/esm/index.mjs.map +1 -0
- package/esm/node_modules/amqplib/channel_api.mjs +28 -0
- package/esm/node_modules/amqplib/channel_api.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/api_args.mjs +241 -0
- package/esm/node_modules/amqplib/lib/api_args.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/bitset.mjs +130 -0
- package/esm/node_modules/amqplib/lib/bitset.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/channel.mjs +302 -0
- package/esm/node_modules/amqplib/lib/channel.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/channel_model.mjs +206 -0
- package/esm/node_modules/amqplib/lib/channel_model.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/codec.mjs +273 -0
- package/esm/node_modules/amqplib/lib/codec.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/connect.mjs +143 -0
- package/esm/node_modules/amqplib/lib/connect.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/connection.mjs +416 -0
- package/esm/node_modules/amqplib/lib/connection.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/credentials.mjs +50 -0
- package/esm/node_modules/amqplib/lib/credentials.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/defs.mjs +4600 -0
- package/esm/node_modules/amqplib/lib/defs.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/error.mjs +29 -0
- package/esm/node_modules/amqplib/lib/error.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/format.mjs +28 -0
- package/esm/node_modules/amqplib/lib/format.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/frame.mjs +130 -0
- package/esm/node_modules/amqplib/lib/frame.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/heartbeat.mjs +40 -0
- package/esm/node_modules/amqplib/lib/heartbeat.mjs.map +1 -0
- package/esm/node_modules/amqplib/lib/mux.mjs +86 -0
- package/esm/node_modules/amqplib/lib/mux.mjs.map +1 -0
- package/esm/node_modules/amqplib/package.mjs +41 -0
- package/esm/node_modules/amqplib/package.mjs.map +1 -0
- package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs +360 -0
- package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs.map +1 -0
- package/esm/node_modules/dayjs/dayjs.min.mjs +305 -0
- package/esm/node_modules/dayjs/dayjs.min.mjs.map +1 -0
- package/esm/node_modules/querystringify/index.mjs +80 -0
- package/esm/node_modules/querystringify/index.mjs.map +1 -0
- package/esm/node_modules/requires-port/index.mjs +35 -0
- package/esm/node_modules/requires-port/index.mjs.map +1 -0
- package/esm/node_modules/url-parse/index.mjs +388 -0
- package/esm/node_modules/url-parse/index.mjs.map +1 -0
- package/esm/queue/load-herald.mjs +1 -1
- package/esm/seal/src/config.mjs +15 -0
- package/esm/seal/src/config.mjs.map +1 -0
- package/esm/seal/src/factory/index.mjs +4 -0
- package/esm/seal/src/factory/validate.mjs +34 -0
- package/esm/seal/src/factory/validate.mjs.map +1 -0
- package/esm/seal/src/factory/validators.mjs +132 -0
- package/esm/seal/src/factory/validators.mjs.map +1 -0
- package/esm/seal/src/helpers/date-helpers.mjs +24 -0
- package/esm/seal/src/helpers/date-helpers.mjs.map +1 -0
- package/esm/seal/src/helpers/get-field-value.mjs +46 -0
- package/esm/seal/src/helpers/get-field-value.mjs.map +1 -0
- package/esm/seal/src/helpers/index.mjs +6 -0
- package/esm/seal/src/helpers/is-empty-value.mjs +10 -0
- package/esm/seal/src/helpers/is-empty-value.mjs.map +1 -0
- package/esm/seal/src/helpers/path-helpers.mjs +12 -0
- package/esm/seal/src/helpers/path-helpers.mjs.map +1 -0
- package/esm/seal/src/helpers/validation-helpers.mjs +72 -0
- package/esm/seal/src/helpers/validation-helpers.mjs.map +1 -0
- package/esm/seal/src/index.mjs +87 -0
- package/esm/seal/src/mutators/array-mutators.mjs +32 -0
- package/esm/seal/src/mutators/array-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/date-mutators.mjs +94 -0
- package/esm/seal/src/mutators/date-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/index.mjs +8 -0
- package/esm/seal/src/mutators/number-mutators.mjs +52 -0
- package/esm/seal/src/mutators/number-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/object-mutators.mjs +30 -0
- package/esm/seal/src/mutators/object-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/scalar-mutators.mjs +9 -0
- package/esm/seal/src/mutators/scalar-mutators.mjs.map +1 -0
- package/esm/seal/src/mutators/string-mutators.mjs +186 -0
- package/esm/seal/src/mutators/string-mutators.mjs.map +1 -0
- package/esm/seal/src/rules/array/array-rules.mjs +41 -0
- package/esm/seal/src/rules/array/array-rules.mjs.map +1 -0
- package/esm/seal/src/rules/array/index.mjs +3 -0
- package/esm/seal/src/rules/color/color-rules.mjs +104 -0
- package/esm/seal/src/rules/color/color-rules.mjs.map +1 -0
- package/esm/seal/src/rules/color/index.mjs +3 -0
- package/esm/seal/src/rules/common/enum.mjs +77 -0
- package/esm/seal/src/rules/common/enum.mjs.map +1 -0
- package/esm/seal/src/rules/common/equals-field-rules.mjs +42 -0
- package/esm/seal/src/rules/common/equals-field-rules.mjs.map +1 -0
- package/esm/seal/src/rules/common/index.mjs +8 -0
- package/esm/seal/src/rules/common/instanceof.mjs +23 -0
- package/esm/seal/src/rules/common/instanceof.mjs.map +1 -0
- package/esm/seal/src/rules/common/literal.mjs +31 -0
- package/esm/seal/src/rules/common/literal.mjs.map +1 -0
- package/esm/seal/src/rules/common/type-rules.mjs +97 -0
- package/esm/seal/src/rules/common/type-rules.mjs.map +1 -0
- package/esm/seal/src/rules/common/unknown-key.mjs +25 -0
- package/esm/seal/src/rules/common/unknown-key.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs +116 -0
- package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/index.mjs +12 -0
- package/esm/seal/src/rules/conditional/present-if-rules.mjs +97 -0
- package/esm/seal/src/rules/conditional/present-if-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/present-unless-rules.mjs +30 -0
- package/esm/seal/src/rules/conditional/present-unless-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/present-with-rules.mjs +76 -0
- package/esm/seal/src/rules/conditional/present-with-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/present-without-rules.mjs +76 -0
- package/esm/seal/src/rules/conditional/present-without-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-if-rules.mjs +204 -0
- package/esm/seal/src/rules/conditional/required-if-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-unless-rules.mjs +31 -0
- package/esm/seal/src/rules/conditional/required-unless-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-when-rule.mjs +32 -0
- package/esm/seal/src/rules/conditional/required-when-rule.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-with-rules.mjs +67 -0
- package/esm/seal/src/rules/conditional/required-with-rules.mjs.map +1 -0
- package/esm/seal/src/rules/conditional/required-without-rules.mjs +67 -0
- package/esm/seal/src/rules/conditional/required-without-rules.mjs.map +1 -0
- package/esm/seal/src/rules/core/equal.mjs +22 -0
- package/esm/seal/src/rules/core/equal.mjs.map +1 -0
- package/esm/seal/src/rules/core/forbidden.mjs +20 -0
- package/esm/seal/src/rules/core/forbidden.mjs.map +1 -0
- package/esm/seal/src/rules/core/index.mjs +7 -0
- package/esm/seal/src/rules/core/required.mjs +36 -0
- package/esm/seal/src/rules/core/required.mjs.map +1 -0
- package/esm/seal/src/rules/core/union.mjs +30 -0
- package/esm/seal/src/rules/core/union.mjs.map +1 -0
- package/esm/seal/src/rules/core/when.mjs +37 -0
- package/esm/seal/src/rules/core/when.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-comparison-rules.mjs +78 -0
- package/esm/seal/src/rules/date/date-comparison-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-day-rules.mjs +49 -0
- package/esm/seal/src/rules/date/date-day-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-field-comparison-rules.mjs +82 -0
- package/esm/seal/src/rules/date/date-field-comparison-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-period-rules.mjs +399 -0
- package/esm/seal/src/rules/date/date-period-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-relative-rules.mjs +55 -0
- package/esm/seal/src/rules/date/date-relative-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date-special-rules.mjs +58 -0
- package/esm/seal/src/rules/date/date-special-rules.mjs.map +1 -0
- package/esm/seal/src/rules/date/date.mjs +235 -0
- package/esm/seal/src/rules/date/date.mjs.map +1 -0
- package/esm/seal/src/rules/date/index.mjs +9 -0
- package/esm/seal/src/rules/file/dimensions.mjs +3 -0
- package/esm/seal/src/rules/file/file-size.mjs +3 -0
- package/esm/seal/src/rules/file/index.mjs +4 -0
- package/esm/seal/src/rules/index.mjs +54 -0
- package/esm/seal/src/rules/length/index.mjs +3 -0
- package/esm/seal/src/rules/length/length-rules.mjs +98 -0
- package/esm/seal/src/rules/length/length-rules.mjs.map +1 -0
- package/esm/seal/src/rules/number/index.mjs +3 -0
- package/esm/seal/src/rules/number/number-rules.mjs +197 -0
- package/esm/seal/src/rules/number/number-rules.mjs.map +1 -0
- package/esm/seal/src/rules/scalar/accepted-rule.mjs +116 -0
- package/esm/seal/src/rules/scalar/accepted-rule.mjs.map +1 -0
- package/esm/seal/src/rules/scalar/declined-rule.mjs +116 -0
- package/esm/seal/src/rules/scalar/declined-rule.mjs.map +1 -0
- package/esm/seal/src/rules/scalar/index.mjs +4 -0
- package/esm/seal/src/rules/string/alpha.mjs +41 -0
- package/esm/seal/src/rules/string/alpha.mjs.map +1 -0
- package/esm/seal/src/rules/string/credit-card.mjs +32 -0
- package/esm/seal/src/rules/string/credit-card.mjs.map +1 -0
- package/esm/seal/src/rules/string/email.mjs +20 -0
- package/esm/seal/src/rules/string/email.mjs.map +1 -0
- package/esm/seal/src/rules/string/id-formats.mjs +104 -0
- package/esm/seal/src/rules/string/id-formats.mjs.map +1 -0
- package/esm/seal/src/rules/string/index.mjs +13 -0
- package/esm/seal/src/rules/string/ip.mjs +66 -0
- package/esm/seal/src/rules/string/ip.mjs.map +1 -0
- package/esm/seal/src/rules/string/matches.mjs +4 -0
- package/esm/seal/src/rules/string/pattern.mjs +20 -0
- package/esm/seal/src/rules/string/pattern.mjs.map +1 -0
- package/esm/seal/src/rules/string/string-comparison.mjs +56 -0
- package/esm/seal/src/rules/string/string-comparison.mjs.map +1 -0
- package/esm/seal/src/rules/string/strong-password-rule.mjs +31 -0
- package/esm/seal/src/rules/string/strong-password-rule.mjs.map +1 -0
- package/esm/seal/src/rules/string/url.mjs +23 -0
- package/esm/seal/src/rules/string/url.mjs.map +1 -0
- package/esm/seal/src/rules/string/without-whitespace.mjs +19 -0
- package/esm/seal/src/rules/string/without-whitespace.mjs.map +1 -0
- package/esm/seal/src/standard-schema/json-schema.mjs +81 -0
- package/esm/seal/src/standard-schema/json-schema.mjs.map +1 -0
- package/esm/seal/src/standard-schema/map-result.mjs +26 -0
- package/esm/seal/src/standard-schema/map-result.mjs.map +1 -0
- package/esm/seal/src/types/date-types.mjs +17 -0
- package/esm/seal/src/types/date-types.mjs.map +1 -0
- package/esm/seal/src/validators/any-validator.mjs +38 -0
- package/esm/seal/src/validators/any-validator.mjs.map +1 -0
- package/esm/seal/src/validators/array-validator.mjs +177 -0
- package/esm/seal/src/validators/array-validator.mjs.map +1 -0
- package/esm/seal/src/validators/base-validator.mjs +691 -0
- package/esm/seal/src/validators/base-validator.mjs.map +1 -0
- package/esm/seal/src/validators/boolean-validator.mjs +126 -0
- package/esm/seal/src/validators/boolean-validator.mjs.map +1 -0
- package/esm/seal/src/validators/computed-validator.mjs +118 -0
- package/esm/seal/src/validators/computed-validator.mjs.map +1 -0
- package/esm/seal/src/validators/date-validator.mjs +639 -0
- package/esm/seal/src/validators/date-validator.mjs.map +1 -0
- package/esm/seal/src/validators/discriminated-union-validator.mjs +129 -0
- package/esm/seal/src/validators/discriminated-union-validator.mjs.map +1 -0
- package/esm/seal/src/validators/float-validator.mjs +18 -0
- package/esm/seal/src/validators/float-validator.mjs.map +1 -0
- package/esm/seal/src/validators/index.mjs +28 -0
- package/esm/seal/src/validators/instanceof-validator.mjs +64 -0
- package/esm/seal/src/validators/instanceof-validator.mjs.map +1 -0
- package/esm/seal/src/validators/int-validator.mjs +30 -0
- package/esm/seal/src/validators/int-validator.mjs.map +1 -0
- package/esm/seal/src/validators/lazy-validator.mjs +87 -0
- package/esm/seal/src/validators/lazy-validator.mjs.map +1 -0
- package/esm/seal/src/validators/literal-validator.mjs +71 -0
- package/esm/seal/src/validators/literal-validator.mjs.map +1 -0
- package/esm/seal/src/validators/managed-validator.mjs +39 -0
- package/esm/seal/src/validators/managed-validator.mjs.map +1 -0
- package/esm/seal/src/validators/methods/equality-conditional-methods.mjs +129 -0
- package/esm/seal/src/validators/methods/equality-conditional-methods.mjs.map +1 -0
- package/esm/seal/src/validators/methods/forbidden-methods.mjs +131 -0
- package/esm/seal/src/validators/methods/forbidden-methods.mjs.map +1 -0
- package/esm/seal/src/validators/methods/present-methods.mjs +235 -0
- package/esm/seal/src/validators/methods/present-methods.mjs.map +1 -0
- package/esm/seal/src/validators/methods/required-methods.mjs +347 -0
- package/esm/seal/src/validators/methods/required-methods.mjs.map +1 -0
- package/esm/seal/src/validators/number-validator.mjs +310 -0
- package/esm/seal/src/validators/number-validator.mjs.map +1 -0
- package/esm/seal/src/validators/numeric-validator.mjs +27 -0
- package/esm/seal/src/validators/numeric-validator.mjs.map +1 -0
- package/esm/seal/src/validators/object-validator.mjs +442 -0
- package/esm/seal/src/validators/object-validator.mjs.map +1 -0
- package/esm/seal/src/validators/primitive-validator.mjs +89 -0
- package/esm/seal/src/validators/primitive-validator.mjs.map +1 -0
- package/esm/seal/src/validators/record-validator.mjs +112 -0
- package/esm/seal/src/validators/record-validator.mjs.map +1 -0
- package/esm/seal/src/validators/scalar-validator.mjs +172 -0
- package/esm/seal/src/validators/scalar-validator.mjs.map +1 -0
- package/esm/seal/src/validators/string-validator.mjs +459 -0
- package/esm/seal/src/validators/string-validator.mjs.map +1 -0
- package/esm/seal/src/validators/tuple-validator.mjs +134 -0
- package/esm/seal/src/validators/tuple-validator.mjs.map +1 -0
- package/esm/seal/src/validators/union-validator.mjs +66 -0
- package/esm/seal/src/validators/union-validator.mjs.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { capitalize } from "../../../node_modules/@mongez/reinforcements/esm/string/capitalize.mjs";
|
|
2
|
+
import { trim } from "../../../node_modules/@mongez/reinforcements/esm/string/trim.mjs";
|
|
3
|
+
import { ltrim } from "../../../node_modules/@mongez/reinforcements/esm/string/ltrim.mjs";
|
|
4
|
+
import { readMoreChars } from "../../../node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs";
|
|
5
|
+
import { rtrim } from "../../../node_modules/@mongez/reinforcements/esm/string/rtrim.mjs";
|
|
6
|
+
import { toCamelCase } from "../../../node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs";
|
|
7
|
+
import { toSnakeCase } from "../../../node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs";
|
|
8
|
+
import { toKebabCase } from "../../../node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs";
|
|
9
|
+
import { toStudlyCase } from "../../../node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs";
|
|
10
|
+
import "../../../node_modules/@mongez/reinforcements/esm/index.mjs";
|
|
11
|
+
|
|
12
|
+
//#region ../seal/src/mutators/string-mutators.ts
|
|
13
|
+
/** Convert string to lowercase */
|
|
14
|
+
const lowercaseMutator = async (value) => {
|
|
15
|
+
return value?.toString().toLowerCase();
|
|
16
|
+
};
|
|
17
|
+
/** Convert string to uppercase */
|
|
18
|
+
const uppercaseMutator = async (value) => {
|
|
19
|
+
return value?.toString().toUpperCase();
|
|
20
|
+
};
|
|
21
|
+
/** Capitalize only the first letter of the string */
|
|
22
|
+
const capitalizeMutator = async (value) => {
|
|
23
|
+
const str = value?.toString();
|
|
24
|
+
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
25
|
+
};
|
|
26
|
+
/** Capitalize the first letter of each word (Title Case) */
|
|
27
|
+
const titleCaseMutator = async (value) => {
|
|
28
|
+
return capitalize(value?.toString());
|
|
29
|
+
};
|
|
30
|
+
/** Convert value to string */
|
|
31
|
+
const stringifyMutator = async (value) => {
|
|
32
|
+
if (!value && value !== 0) return "";
|
|
33
|
+
if (typeof value === "string") return value;
|
|
34
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
35
|
+
};
|
|
36
|
+
/** Trim whitespace */
|
|
37
|
+
const trimMutator = async (value, context) => {
|
|
38
|
+
return trim(value?.toString(), context?.options?.needle ?? " ");
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Strip HTML tags with a naive `<...>` regex.
|
|
42
|
+
*
|
|
43
|
+
* This is a **tag stripper, not an XSS sanitizer**: it is not a parser, so
|
|
44
|
+
* malformed/nested markup, attribute payloads, or content re-introduced
|
|
45
|
+
* later in a pipeline can defeat it. Do not rely on this alone to make
|
|
46
|
+
* untrusted rich text safe to render — use a real parser-based sanitizer
|
|
47
|
+
* (e.g. DOMPurify / sanitize-html) for that.
|
|
48
|
+
*/
|
|
49
|
+
const stripTagsMutator = async (value) => {
|
|
50
|
+
return value?.toString().replace(/<[^>]*>?/gm, "");
|
|
51
|
+
};
|
|
52
|
+
/** HTML escape */
|
|
53
|
+
const htmlEscapeMutator = async (value) => {
|
|
54
|
+
return value?.toString().replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
55
|
+
};
|
|
56
|
+
/** Remove special characters */
|
|
57
|
+
const removeSpecialCharactersMutator = async (value) => {
|
|
58
|
+
return value?.toString().replace(/[^a-zA-Z0-9]/g, "");
|
|
59
|
+
};
|
|
60
|
+
/** URL decode */
|
|
61
|
+
const urlDecodeMutator = async (value) => {
|
|
62
|
+
return decodeURIComponent(value);
|
|
63
|
+
};
|
|
64
|
+
/** URL encode */
|
|
65
|
+
const urlEncodeMutator = async (value) => {
|
|
66
|
+
return encodeURIComponent(value);
|
|
67
|
+
};
|
|
68
|
+
/** Convert to camelCase */
|
|
69
|
+
const camelCaseMutator = async (value) => {
|
|
70
|
+
return toCamelCase(value?.toString());
|
|
71
|
+
};
|
|
72
|
+
/** Convert to PascalCase */
|
|
73
|
+
const pascalCaseMutator = async (value) => {
|
|
74
|
+
return toStudlyCase(value?.toString());
|
|
75
|
+
};
|
|
76
|
+
/** Convert to snake_case */
|
|
77
|
+
const snakeCaseMutator = async (value) => {
|
|
78
|
+
return toSnakeCase(value?.toString());
|
|
79
|
+
};
|
|
80
|
+
/** Convert to kebab-case */
|
|
81
|
+
const kebabCaseMutator = async (value) => {
|
|
82
|
+
return toKebabCase(value?.toString());
|
|
83
|
+
};
|
|
84
|
+
/** Convert to URL-friendly slug */
|
|
85
|
+
const slugMutator = async (value) => {
|
|
86
|
+
return value?.toString().toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_]+/g, "-").replace(/--+/g, "-").replace(/^-+|-+$/g, "");
|
|
87
|
+
};
|
|
88
|
+
/** Trim from the left/start */
|
|
89
|
+
const ltrimMutator = async (value, context) => {
|
|
90
|
+
return ltrim(value?.toString(), context?.options?.needle ?? " ");
|
|
91
|
+
};
|
|
92
|
+
/** Trim from the right/end */
|
|
93
|
+
const rtrimMutator = async (value, context) => {
|
|
94
|
+
return rtrim(value?.toString(), context?.options?.needle ?? " ");
|
|
95
|
+
};
|
|
96
|
+
/** Base64 encode */
|
|
97
|
+
const base64EncodeMutator = async (value) => {
|
|
98
|
+
return Buffer.from(value?.toString()).toString("base64");
|
|
99
|
+
};
|
|
100
|
+
/** Base64 decode */
|
|
101
|
+
const base64DecodeMutator = async (value) => {
|
|
102
|
+
return Buffer.from(value?.toString(), "base64").toString("utf-8");
|
|
103
|
+
};
|
|
104
|
+
/** Replace substring or pattern */
|
|
105
|
+
const replaceMutator = async (value, context) => {
|
|
106
|
+
const { search, replace } = context?.options;
|
|
107
|
+
if (!search) return value?.toString();
|
|
108
|
+
return value?.toString().replace(search, replace ?? "");
|
|
109
|
+
};
|
|
110
|
+
/** Replace all occurrences of substring or pattern */
|
|
111
|
+
const replaceAllMutator = async (value, context) => {
|
|
112
|
+
const { search, replace } = context?.options;
|
|
113
|
+
if (!search) return value?.toString();
|
|
114
|
+
const searchValue = typeof search === "string" ? new RegExp(search, "g") : search;
|
|
115
|
+
return value?.toString().replace(searchValue, replace ?? "");
|
|
116
|
+
};
|
|
117
|
+
/** Append/suffix text to the end */
|
|
118
|
+
const appendMutator = async (value, context) => {
|
|
119
|
+
const suffix = context?.options?.suffix ?? "";
|
|
120
|
+
return value?.toString() + suffix;
|
|
121
|
+
};
|
|
122
|
+
/** Prepend/prefix text to the beginning */
|
|
123
|
+
const prependMutator = async (value, context) => {
|
|
124
|
+
return (context?.options?.prefix ?? "") + value?.toString();
|
|
125
|
+
};
|
|
126
|
+
/** Reverse the string */
|
|
127
|
+
const reverseMutator = async (value) => {
|
|
128
|
+
return value?.toString().split("").reverse().join("");
|
|
129
|
+
};
|
|
130
|
+
/** Truncate to a maximum length */
|
|
131
|
+
const truncateMutator = async (value, context) => {
|
|
132
|
+
const str = value?.toString();
|
|
133
|
+
return readMoreChars(str, context?.options?.maxLength ?? 100, context?.options?.suffix ?? "...");
|
|
134
|
+
};
|
|
135
|
+
/** Trim multiple whitespace into single space */
|
|
136
|
+
const trimMultipleWhitespaceMutator = async (value) => {
|
|
137
|
+
return value?.toString().replace(/\s+/g, " ");
|
|
138
|
+
};
|
|
139
|
+
/** Pad string from the start to reach target length */
|
|
140
|
+
const padStartMutator = async (value, context) => {
|
|
141
|
+
const length = context?.options?.length ?? 0;
|
|
142
|
+
const char = context?.options?.char ?? " ";
|
|
143
|
+
return value?.toString().padStart(length, char);
|
|
144
|
+
};
|
|
145
|
+
/** Pad string from the end to reach target length */
|
|
146
|
+
const padEndMutator = async (value, context) => {
|
|
147
|
+
const length = context?.options?.length ?? 0;
|
|
148
|
+
const char = context?.options?.char ?? " ";
|
|
149
|
+
return value?.toString().padEnd(length, char);
|
|
150
|
+
};
|
|
151
|
+
/** Repeat string N times */
|
|
152
|
+
const repeatMutator = async (value, context) => {
|
|
153
|
+
const count = context?.options?.count ?? 1;
|
|
154
|
+
return value?.toString()?.repeat(count);
|
|
155
|
+
};
|
|
156
|
+
/** Mask part of string */
|
|
157
|
+
const maskMutator = async (value, context) => {
|
|
158
|
+
const str = value?.toString();
|
|
159
|
+
const maskChar = context?.options?.char ?? "*";
|
|
160
|
+
const start = context?.options?.start ?? 0;
|
|
161
|
+
const end = context?.options?.end ?? str?.length;
|
|
162
|
+
const visibleStart = str?.substring(0, start);
|
|
163
|
+
const visibleEnd = str?.substring(end);
|
|
164
|
+
const maskedLength = end - start;
|
|
165
|
+
return visibleStart + maskChar.repeat(maskedLength) + visibleEnd;
|
|
166
|
+
};
|
|
167
|
+
/** Unescape HTML entities */
|
|
168
|
+
const unescapeHtmlMutator = async (value) => {
|
|
169
|
+
return value?.toString().replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"").replace(/'/g, "'");
|
|
170
|
+
};
|
|
171
|
+
/** Keep only alphabetic characters */
|
|
172
|
+
const alphaOnlyMutator = async (value) => {
|
|
173
|
+
return value.toString().replace(/[^a-zA-Z]/g, "");
|
|
174
|
+
};
|
|
175
|
+
/** Keep only alphanumeric characters */
|
|
176
|
+
const alphanumericOnlyMutator = async (value) => {
|
|
177
|
+
return value.toString().replace(/[^a-zA-Z0-9]/g, "");
|
|
178
|
+
};
|
|
179
|
+
/** Remove all numeric characters */
|
|
180
|
+
const removeNumbersMutator = async (value) => {
|
|
181
|
+
return value.toString().replace(/[0-9]/g, "");
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
export { alphaOnlyMutator, alphanumericOnlyMutator, appendMutator, base64DecodeMutator, base64EncodeMutator, camelCaseMutator, capitalizeMutator, htmlEscapeMutator, kebabCaseMutator, lowercaseMutator, ltrimMutator, maskMutator, padEndMutator, padStartMutator, pascalCaseMutator, prependMutator, removeNumbersMutator, removeSpecialCharactersMutator, repeatMutator, replaceAllMutator, replaceMutator, reverseMutator, rtrimMutator, slugMutator, snakeCaseMutator, stringifyMutator, stripTagsMutator, titleCaseMutator, trimMultipleWhitespaceMutator, trimMutator, truncateMutator, unescapeHtmlMutator, uppercaseMutator, urlDecodeMutator, urlEncodeMutator };
|
|
186
|
+
//# sourceMappingURL=string-mutators.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-mutators.mjs","names":[],"sources":["../../../../../../../../../seal/src/mutators/string-mutators.ts"],"sourcesContent":["import {\r\n capitalize,\r\n ltrim,\r\n readMoreChars,\r\n rtrim,\r\n toCamelCase,\r\n toKebabCase,\r\n toSnakeCase,\r\n toStudlyCase,\r\n trim,\r\n} from \"@mongez/reinforcements\";\r\nimport type { Mutator } from \"../types\";\r\n\r\n/** Convert string to lowercase */\r\nexport const lowercaseMutator: Mutator = async (value) => {\r\n return value?.toString().toLowerCase();\r\n};\r\n\r\n/** Convert string to uppercase */\r\nexport const uppercaseMutator: Mutator = async (value) => {\r\n return value?.toString().toUpperCase();\r\n};\r\n\r\n/** Capitalize only the first letter of the string */\r\nexport const capitalizeMutator: Mutator = async (value) => {\r\n const str = value?.toString();\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\r\n};\r\n\r\n/** Capitalize the first letter of each word (Title Case) */\r\nexport const titleCaseMutator: Mutator = async (value) => {\r\n return capitalize(value?.toString());\r\n};\r\n\r\n/** Convert value to string */\r\nexport const stringifyMutator: Mutator = async (value) => {\r\n if (!value && value !== 0) return \"\";\r\n // only convert numbers, boolean and strings\r\n\r\n // Handle strings (pass through)\r\n if (typeof value === \"string\") return value;\r\n\r\n // Handle scalar types (number, boolean)\r\n if (typeof value === \"number\" || typeof value === \"boolean\") {\r\n return String(value);\r\n }\r\n};\r\n\r\n/** Trim whitespace */\r\nexport const trimMutator: Mutator = async (value, context) => {\r\n return trim(value?.toString(), context?.options?.needle ?? \" \");\r\n};\r\n\r\n/**\r\n * Strip HTML tags with a naive `<...>` regex.\r\n *\r\n * This is a **tag stripper, not an XSS sanitizer**: it is not a parser, so\r\n * malformed/nested markup, attribute payloads, or content re-introduced\r\n * later in a pipeline can defeat it. Do not rely on this alone to make\r\n * untrusted rich text safe to render — use a real parser-based sanitizer\r\n * (e.g. DOMPurify / sanitize-html) for that.\r\n */\r\nexport const stripTagsMutator: Mutator = async (value) => {\r\n return value?.toString().replace(/<[^>]*>?/gm, \"\");\r\n};\r\n\r\n/**\r\n * @deprecated Renamed to {@link stripTagsMutator} — the old name implied\r\n * XSS safety this tag-stripping regex does not provide. Kept as an alias\r\n * for backward compatibility; switch to `stripTagsMutator`.\r\n */\r\nexport const safeHtmlMutator: Mutator = stripTagsMutator;\r\n\r\n/** HTML escape */\r\nexport const htmlEscapeMutator: Mutator = async (value) => {\r\n return value\r\n ?.toString()\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\r\n};\r\n\r\n/** Remove special characters */\r\nexport const removeSpecialCharactersMutator: Mutator = async (value) => {\r\n return value?.toString().replace(/[^a-zA-Z0-9]/g, \"\");\r\n};\r\n\r\n/** URL decode */\r\nexport const urlDecodeMutator: Mutator = async (value) => {\r\n return decodeURIComponent(value);\r\n};\r\n\r\n/** URL encode */\r\nexport const urlEncodeMutator: Mutator = async (value) => {\r\n return encodeURIComponent(value);\r\n};\r\n\r\n/** Convert to camelCase */\r\nexport const camelCaseMutator: Mutator = async (value) => {\r\n return toCamelCase(value?.toString());\r\n};\r\n\r\n/** Convert to PascalCase */\r\nexport const pascalCaseMutator: Mutator = async (value) => {\r\n return toStudlyCase(value?.toString());\r\n};\r\n\r\n/** Convert to snake_case */\r\nexport const snakeCaseMutator: Mutator = async (value) => {\r\n return toSnakeCase(value?.toString());\r\n};\r\n\r\n/** Convert to kebab-case */\r\nexport const kebabCaseMutator: Mutator = async (value) => {\r\n return toKebabCase(value?.toString());\r\n};\r\n\r\n/** Convert to URL-friendly slug */\r\nexport const slugMutator: Mutator = async (value) => {\r\n return value\r\n ?.toString()\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, \"\")\r\n .replace(/[\\s_]+/g, \"-\")\r\n .replace(/--+/g, \"-\")\r\n .replace(/^-+|-+$/g, \"\");\r\n};\r\n\r\n/** Trim from the left/start */\r\nexport const ltrimMutator: Mutator = async (value, context) => {\r\n return ltrim(value?.toString(), context?.options?.needle ?? \" \");\r\n};\r\n\r\n/** Trim from the right/end */\r\nexport const rtrimMutator: Mutator = async (value, context) => {\r\n return rtrim(value?.toString(), context?.options?.needle ?? \" \");\r\n};\r\n\r\n/** Base64 encode */\r\nexport const base64EncodeMutator: Mutator = async (value) => {\r\n return Buffer.from(value?.toString()).toString(\"base64\");\r\n};\r\n\r\n/** Base64 decode */\r\nexport const base64DecodeMutator: Mutator = async (value) => {\r\n return Buffer.from(value?.toString(), \"base64\").toString(\"utf-8\");\r\n};\r\n\r\n/** Replace substring or pattern */\r\nexport const replaceMutator: Mutator = async (value, context) => {\r\n const { search, replace } = context?.options;\r\n if (!search) return value?.toString();\r\n return value?.toString().replace(search, replace ?? \"\");\r\n};\r\n\r\n/** Replace all occurrences of substring or pattern */\r\nexport const replaceAllMutator: Mutator = async (value, context) => {\r\n const { search, replace } = context?.options;\r\n if (!search) return value?.toString();\r\n const searchValue = typeof search === \"string\" ? new RegExp(search, \"g\") : search;\r\n return value?.toString().replace(searchValue, replace ?? \"\");\r\n};\r\n\r\n/** Append/suffix text to the end */\r\nexport const appendMutator: Mutator = async (value, context) => {\r\n const suffix = context?.options?.suffix ?? \"\";\r\n return value?.toString() + suffix;\r\n};\r\n\r\n/** Prepend/prefix text to the beginning */\r\nexport const prependMutator: Mutator = async (value, context) => {\r\n const prefix = context?.options?.prefix ?? \"\";\r\n return prefix + value?.toString();\r\n};\r\n\r\n/** Reverse the string */\r\nexport const reverseMutator: Mutator = async (value) => {\r\n return value?.toString().split(\"\").reverse().join(\"\");\r\n};\r\n\r\n/** Truncate to a maximum length */\r\nexport const truncateMutator: Mutator = async (value, context) => {\r\n const str = value?.toString();\r\n const maxLength = context?.options?.maxLength ?? 100;\r\n const suffix = context?.options?.suffix ?? \"...\";\r\n return readMoreChars(str, maxLength, suffix);\r\n};\r\n\r\n/** Trim multiple whitespace into single space */\r\nexport const trimMultipleWhitespaceMutator: Mutator = async (value) => {\r\n return value?.toString().replace(/\\s+/g, \" \");\r\n};\r\n\r\n/** Pad string from the start to reach target length */\r\nexport const padStartMutator: Mutator = async (value, context) => {\r\n const length = context?.options?.length ?? 0;\r\n const char = context?.options?.char ?? \" \";\r\n return value?.toString().padStart(length, char);\r\n};\r\n\r\n/** Pad string from the end to reach target length */\r\nexport const padEndMutator: Mutator = async (value, context) => {\r\n const length = context?.options?.length ?? 0;\r\n const char = context?.options?.char ?? \" \";\r\n return value?.toString().padEnd(length, char);\r\n};\r\n\r\n/** Repeat string N times */\r\nexport const repeatMutator: Mutator = async (value, context) => {\r\n const count = context?.options?.count ?? 1;\r\n return value?.toString()?.repeat(count);\r\n};\r\n\r\n/** Mask part of string */\r\nexport const maskMutator: Mutator = async (value, context) => {\r\n const str = value?.toString();\r\n const maskChar = context?.options?.char ?? \"*\";\r\n const start = context?.options?.start ?? 0;\r\n const end = context?.options?.end ?? str?.length;\r\n const visibleStart = str?.substring(0, start);\r\n const visibleEnd = str?.substring(end);\r\n const maskedLength = end - start;\r\n return visibleStart + maskChar.repeat(maskedLength) + visibleEnd;\r\n};\r\n\r\n/** Unescape HTML entities */\r\nexport const unescapeHtmlMutator: Mutator = async (value) => {\r\n return value\r\n ?.toString()\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\");\r\n};\r\n\r\n/** Keep only alphabetic characters */\r\nexport const alphaOnlyMutator: Mutator = async (value) => {\r\n return value.toString().replace(/[^a-zA-Z]/g, \"\");\r\n};\r\n\r\n/** Keep only alphanumeric characters */\r\nexport const alphanumericOnlyMutator: Mutator = async (value) => {\r\n return value.toString().replace(/[^a-zA-Z0-9]/g, \"\");\r\n};\r\n\r\n/** Remove all numeric characters */\r\nexport const removeNumbersMutator: Mutator = async (value) => {\r\n return value.toString().replace(/[0-9]/g, \"\");\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { VALID_RULE, invalidRule } from "../../helpers/validation-helpers.mjs";
|
|
2
|
+
import "../../helpers/index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../seal/src/rules/array/array-rules.ts
|
|
5
|
+
/**
|
|
6
|
+
* Unique array rule - array must contain unique values
|
|
7
|
+
*/
|
|
8
|
+
const uniqueArrayRule = {
|
|
9
|
+
name: "uniqueArray",
|
|
10
|
+
description: "The array must contain unique values",
|
|
11
|
+
defaultErrorMessage: "The :input must contain unique values",
|
|
12
|
+
async validate(value, context) {
|
|
13
|
+
if (new Set(value).size === value.length) return VALID_RULE;
|
|
14
|
+
return invalidRule(this, context);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Sorted array rule - array must be sorted
|
|
19
|
+
*/
|
|
20
|
+
const sortedArrayRule = {
|
|
21
|
+
name: "sortedArray",
|
|
22
|
+
description: "The array must be sorted",
|
|
23
|
+
defaultErrorMessage: "The :input must be sorted",
|
|
24
|
+
async validate(value, context) {
|
|
25
|
+
if (!Array.isArray(value) || value.length <= 1) return VALID_RULE;
|
|
26
|
+
const direction = this.context.options.direction ?? "asc";
|
|
27
|
+
this.context.translatableParams.direction = direction;
|
|
28
|
+
for (let i = 0; i < value.length - 1; i++) {
|
|
29
|
+
const current = value[i];
|
|
30
|
+
const next = value[i + 1];
|
|
31
|
+
if (direction === "asc") {
|
|
32
|
+
if (current > next) return invalidRule(this, context);
|
|
33
|
+
} else if (current < next) return invalidRule(this, context);
|
|
34
|
+
}
|
|
35
|
+
return VALID_RULE;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { sortedArrayRule, uniqueArrayRule };
|
|
41
|
+
//# sourceMappingURL=array-rules.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-rules.mjs","names":[],"sources":["../../../../../../../../../../seal/src/rules/array/array-rules.ts"],"sourcesContent":["import { invalidRule, VALID_RULE } from \"../../helpers\";\r\nimport type { SchemaRule } from \"../../types\";\r\n\r\n/**\r\n * Unique array rule - array must contain unique values\r\n */\r\nexport const uniqueArrayRule: SchemaRule = {\r\n name: \"uniqueArray\",\r\n description: \"The array must contain unique values\",\r\n defaultErrorMessage: \"The :input must contain unique values\",\r\n async validate(value: any, context) {\r\n const uniqueValues = new Set(value);\r\n\r\n if (uniqueValues.size === value.length) {\r\n return VALID_RULE;\r\n }\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * Sorted array rule - array must be sorted\r\n */\r\nexport const sortedArrayRule: SchemaRule<{\r\n direction?: \"asc\" | \"desc\";\r\n}> = {\r\n name: \"sortedArray\",\r\n description: \"The array must be sorted\",\r\n defaultErrorMessage: \"The :input must be sorted\",\r\n async validate(value: any[], context) {\r\n if (!Array.isArray(value) || value.length <= 1) {\r\n return VALID_RULE;\r\n }\r\n\r\n const direction = this.context.options.direction ?? \"asc\";\r\n this.context.translatableParams.direction = direction;\r\n\r\n for (let i = 0; i < value.length - 1; i++) {\r\n const current = value[i];\r\n const next = value[i + 1];\r\n\r\n if (direction === \"asc\") {\r\n if (current > next) {\r\n return invalidRule(this, context);\r\n }\r\n } else {\r\n if (current < next) {\r\n return invalidRule(this, context);\r\n }\r\n }\r\n }\r\n\r\n return VALID_RULE;\r\n },\r\n};\r\n"],"mappings":";;;;;;;AAMA,MAAa,kBAA8B;CACzC,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAGlC,IAAI,IAFqB,IAAI,KAEd,CAAC,CAAC,SAAS,MAAM,QAC9B,OAAO;EAGT,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,kBAER;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAc,SAAS;EACpC,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,UAAU,GAC3C,OAAO;EAGT,MAAM,YAAY,KAAK,QAAQ,QAAQ,aAAa;EACpD,KAAK,QAAQ,mBAAmB,YAAY;EAE5C,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;GACzC,MAAM,UAAU,MAAM;GACtB,MAAM,OAAO,MAAM,IAAI;GAEvB,IAAI,cAAc,OAChB;QAAI,UAAU,MACZ,OAAO,YAAY,MAAM,OAAO;GAClC,OAEA,IAAI,UAAU,MACZ,OAAO,YAAY,MAAM,OAAO;EAGtC;EAEA,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { VALID_RULE, invalidRule } from "../../helpers/validation-helpers.mjs";
|
|
2
|
+
import "../../helpers/index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../seal/src/rules/color/color-rules.ts
|
|
5
|
+
/**
|
|
6
|
+
* Color validation regex patterns
|
|
7
|
+
*/
|
|
8
|
+
const colorValidationRegex = {
|
|
9
|
+
hex: /^#([0-9a-f]{3}){1,2}$/i,
|
|
10
|
+
rgb: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
|
|
11
|
+
rgba: /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(0?\.\d+|1)\)$/,
|
|
12
|
+
hsl: /^hsl\((\d{1,3}),\s*(\d{1,3})%?,\s*(\d{1,3})%?\)$/
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Generic color rule - validates any color format
|
|
16
|
+
*/
|
|
17
|
+
const colorRule = {
|
|
18
|
+
name: "color",
|
|
19
|
+
defaultErrorMessage: "The :input must be a valid color",
|
|
20
|
+
async validate(value, context) {
|
|
21
|
+
if (colorValidationRegex.hex.test(value) || colorValidationRegex.rgb.test(value) || colorValidationRegex.rgba.test(value) || colorValidationRegex.hsl.test(value)) return VALID_RULE;
|
|
22
|
+
return invalidRule(this, context);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Hex color rule
|
|
27
|
+
*/
|
|
28
|
+
const hexColorRule = {
|
|
29
|
+
name: "hexColor",
|
|
30
|
+
defaultErrorMessage: "The :input must be a valid hex color",
|
|
31
|
+
async validate(value, context) {
|
|
32
|
+
if (colorValidationRegex.hex.test(value)) return VALID_RULE;
|
|
33
|
+
return invalidRule(this, context);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* RGB color rule
|
|
38
|
+
*/
|
|
39
|
+
const rgbColorRule = {
|
|
40
|
+
name: "rgbColor",
|
|
41
|
+
defaultErrorMessage: "The :input must be a valid RGB color",
|
|
42
|
+
async validate(value, context) {
|
|
43
|
+
if (colorValidationRegex.rgb.test(value)) return VALID_RULE;
|
|
44
|
+
return invalidRule(this, context);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* RGBA color rule
|
|
49
|
+
*/
|
|
50
|
+
const rgbaColorRule = {
|
|
51
|
+
name: "rgbaColor",
|
|
52
|
+
defaultErrorMessage: "The :input must be a valid RGBA color",
|
|
53
|
+
async validate(value, context) {
|
|
54
|
+
if (colorValidationRegex.rgba.test(value)) return VALID_RULE;
|
|
55
|
+
return invalidRule(this, context);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* HSL color rule
|
|
60
|
+
*/
|
|
61
|
+
const hslColorRule = {
|
|
62
|
+
name: "hslColor",
|
|
63
|
+
defaultErrorMessage: "The :input must be a valid HSL color",
|
|
64
|
+
async validate(value, context) {
|
|
65
|
+
if (colorValidationRegex.hsl.test(value)) return VALID_RULE;
|
|
66
|
+
return invalidRule(this, context);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Light color rule
|
|
71
|
+
*/
|
|
72
|
+
const lightColorRule = {
|
|
73
|
+
name: "lightColor",
|
|
74
|
+
defaultErrorMessage: "The :input must be a light color",
|
|
75
|
+
async validate(value, context) {
|
|
76
|
+
if (!colorValidationRegex.hex.test(value)) return invalidRule(this, context);
|
|
77
|
+
const hex = value.replace("#", "");
|
|
78
|
+
const r = parseInt(hex.substring(0, 2), 16);
|
|
79
|
+
const g = parseInt(hex.substring(2, 4), 16);
|
|
80
|
+
const b = parseInt(hex.substring(4, 6), 16);
|
|
81
|
+
if ((r * 299 + g * 587 + b * 114) / 1e3 > 155) return VALID_RULE;
|
|
82
|
+
return invalidRule(this, context);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Dark color rule
|
|
87
|
+
*/
|
|
88
|
+
const darkColorRule = {
|
|
89
|
+
name: "darkColor",
|
|
90
|
+
defaultErrorMessage: "The :input must be a dark color",
|
|
91
|
+
async validate(value, context) {
|
|
92
|
+
if (!colorValidationRegex.hex.test(value)) return invalidRule(this, context);
|
|
93
|
+
const hex = value.replace("#", "");
|
|
94
|
+
const r = parseInt(hex.substring(0, 2), 16);
|
|
95
|
+
const g = parseInt(hex.substring(2, 4), 16);
|
|
96
|
+
const b = parseInt(hex.substring(4, 6), 16);
|
|
97
|
+
if ((r * 299 + g * 587 + b * 114) / 1e3 <= 155) return VALID_RULE;
|
|
98
|
+
return invalidRule(this, context);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
export { colorRule, darkColorRule, hexColorRule, hslColorRule, lightColorRule, rgbColorRule, rgbaColorRule };
|
|
104
|
+
//# sourceMappingURL=color-rules.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-rules.mjs","names":[],"sources":["../../../../../../../../../../seal/src/rules/color/color-rules.ts"],"sourcesContent":["import { invalidRule, VALID_RULE } from \"../../helpers\";\r\nimport type { SchemaRule } from \"../../types\";\r\n\r\n/**\r\n * Color validation regex patterns\r\n */\r\nconst colorValidationRegex = {\r\n hex: /^#([0-9a-f]{3}){1,2}$/i,\r\n rgb: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\r\n rgba: /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*(0?\\.\\d+|1)\\)$/,\r\n hsl: /^hsl\\((\\d{1,3}),\\s*(\\d{1,3})%?,\\s*(\\d{1,3})%?\\)$/,\r\n};\r\n\r\n/**\r\n * Generic color rule - validates any color format\r\n */\r\nexport const colorRule: SchemaRule = {\r\n name: \"color\",\r\n defaultErrorMessage: \"The :input must be a valid color\",\r\n async validate(value: any, context) {\r\n const isValidColor =\r\n colorValidationRegex.hex.test(value) ||\r\n colorValidationRegex.rgb.test(value) ||\r\n colorValidationRegex.rgba.test(value) ||\r\n colorValidationRegex.hsl.test(value);\r\n\r\n if (isValidColor) {\r\n return VALID_RULE;\r\n }\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * Hex color rule\r\n */\r\nexport const hexColorRule: SchemaRule = {\r\n name: \"hexColor\",\r\n defaultErrorMessage: \"The :input must be a valid hex color\",\r\n async validate(value: any, context) {\r\n if (colorValidationRegex.hex.test(value)) {\r\n return VALID_RULE;\r\n }\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * RGB color rule\r\n */\r\nexport const rgbColorRule: SchemaRule = {\r\n name: \"rgbColor\",\r\n defaultErrorMessage: \"The :input must be a valid RGB color\",\r\n async validate(value: any, context) {\r\n if (colorValidationRegex.rgb.test(value)) {\r\n return VALID_RULE;\r\n }\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * RGBA color rule\r\n */\r\nexport const rgbaColorRule: SchemaRule = {\r\n name: \"rgbaColor\",\r\n defaultErrorMessage: \"The :input must be a valid RGBA color\",\r\n async validate(value: any, context) {\r\n if (colorValidationRegex.rgba.test(value)) {\r\n return VALID_RULE;\r\n }\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * HSL color rule\r\n */\r\nexport const hslColorRule: SchemaRule = {\r\n name: \"hslColor\",\r\n defaultErrorMessage: \"The :input must be a valid HSL color\",\r\n async validate(value: any, context) {\r\n if (colorValidationRegex.hsl.test(value)) {\r\n return VALID_RULE;\r\n }\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * Light color rule\r\n */\r\nexport const lightColorRule: SchemaRule = {\r\n name: \"lightColor\",\r\n defaultErrorMessage: \"The :input must be a light color\",\r\n async validate(value: any, context) {\r\n if (!colorValidationRegex.hex.test(value)) {\r\n return invalidRule(this, context);\r\n }\r\n\r\n const hex = value.replace(\"#\", \"\");\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n if (brightness > 155) {\r\n return VALID_RULE;\r\n }\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * Dark color rule\r\n */\r\nexport const darkColorRule: SchemaRule = {\r\n name: \"darkColor\",\r\n defaultErrorMessage: \"The :input must be a dark color\",\r\n async validate(value: any, context) {\r\n if (!colorValidationRegex.hex.test(value)) {\r\n return invalidRule(this, context);\r\n }\r\n\r\n const hex = value.replace(\"#\", \"\");\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n if (brightness <= 155) {\r\n return VALID_RULE;\r\n }\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n"],"mappings":";;;;;;;AAMA,MAAM,uBAAuB;CAC3B,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;AACP;;;;AAKA,MAAa,YAAwB;CACnC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAOlC,IALE,qBAAqB,IAAI,KAAK,KAAK,KACnC,qBAAqB,IAAI,KAAK,KAAK,KACnC,qBAAqB,KAAK,KAAK,KAAK,KACpC,qBAAqB,IAAI,KAAK,KAAK,GAGnC,OAAO;EAGT,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,eAA2B;CACtC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,qBAAqB,IAAI,KAAK,KAAK,GACrC,OAAO;EAET,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,eAA2B;CACtC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,qBAAqB,IAAI,KAAK,KAAK,GACrC,OAAO;EAET,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,gBAA4B;CACvC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,qBAAqB,KAAK,KAAK,KAAK,GACtC,OAAO;EAET,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,eAA2B;CACtC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,qBAAqB,IAAI,KAAK,KAAK,GACrC,OAAO;EAET,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,iBAA6B;CACxC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,CAAC,qBAAqB,IAAI,KAAK,KAAK,GACtC,OAAO,YAAY,MAAM,OAAO;EAGlC,MAAM,MAAM,MAAM,QAAQ,KAAK,EAAE;EACjC,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;EAC1C,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;EAC1C,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;EAG1C,KAFoB,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAElC,KACf,OAAO;EAGT,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,gBAA4B;CACvC,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,CAAC,qBAAqB,IAAI,KAAK,KAAK,GACtC,OAAO,YAAY,MAAM,OAAO;EAGlC,MAAM,MAAM,MAAM,QAAQ,KAAK,EAAE;EACjC,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;EAC1C,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;EAC1C,MAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;EAG1C,KAFoB,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,OAEjC,KAChB,OAAO;EAGT,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { VALID_RULE, invalidRule, resolveTranslation } from "../../helpers/validation-helpers.mjs";
|
|
2
|
+
import "../../helpers/index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../seal/src/rules/common/enum.ts
|
|
5
|
+
/**
|
|
6
|
+
* Enum rule - value must be one of the enum values
|
|
7
|
+
*/
|
|
8
|
+
const enumRule = {
|
|
9
|
+
name: "enum",
|
|
10
|
+
defaultErrorMessage: "The :input must be one of the following values: :enum",
|
|
11
|
+
async validate(value, context) {
|
|
12
|
+
const enumValues = this.context.options.enum;
|
|
13
|
+
if (enumValues.includes(value)) return VALID_RULE;
|
|
14
|
+
this.context.translationParams.enum = enumValues.map((v) => resolveTranslation({
|
|
15
|
+
key: String(v),
|
|
16
|
+
rawValue: String(v),
|
|
17
|
+
rule: this,
|
|
18
|
+
context
|
|
19
|
+
})).join(", ");
|
|
20
|
+
return invalidRule(this, context);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* In rule - value must be in the given array
|
|
25
|
+
*/
|
|
26
|
+
const inRule = {
|
|
27
|
+
name: "in",
|
|
28
|
+
defaultErrorMessage: "The :input must be one of the following values: :values",
|
|
29
|
+
async validate(value, context) {
|
|
30
|
+
if (this.context.options.values.includes(value)) return VALID_RULE;
|
|
31
|
+
this.context.translationParams.values = this.context.options.values.map((v) => resolveTranslation({
|
|
32
|
+
key: String(v),
|
|
33
|
+
rawValue: String(v),
|
|
34
|
+
rule: this,
|
|
35
|
+
context
|
|
36
|
+
})).join(", ");
|
|
37
|
+
return invalidRule(this, context);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Allowed values rule - value must be one of allowed values
|
|
42
|
+
*/
|
|
43
|
+
const allowedValuesRule = {
|
|
44
|
+
name: "allowedValues",
|
|
45
|
+
defaultErrorMessage: "The :input must be one of the allowed values",
|
|
46
|
+
async validate(value, context) {
|
|
47
|
+
if (this.context.options.allowedValues.includes(value)) return VALID_RULE;
|
|
48
|
+
this.context.translationParams.allowedValues = this.context.options.allowedValues.map((v) => resolveTranslation({
|
|
49
|
+
key: String(v),
|
|
50
|
+
rawValue: String(v),
|
|
51
|
+
rule: this,
|
|
52
|
+
context
|
|
53
|
+
})).join(", ");
|
|
54
|
+
return invalidRule(this, context);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Not allowed values rule - value must not be in forbidden list
|
|
59
|
+
*/
|
|
60
|
+
const notAllowedValuesRule = {
|
|
61
|
+
name: "notAllowedValues",
|
|
62
|
+
defaultErrorMessage: "The :input contains a forbidden value",
|
|
63
|
+
async validate(value, context) {
|
|
64
|
+
if (!this.context.options.notAllowedValues.includes(value)) return VALID_RULE;
|
|
65
|
+
this.context.translationParams.notAllowedValues = this.context.options.notAllowedValues.map((v) => resolveTranslation({
|
|
66
|
+
key: String(v),
|
|
67
|
+
rawValue: String(v),
|
|
68
|
+
rule: this,
|
|
69
|
+
context
|
|
70
|
+
})).join(", ");
|
|
71
|
+
return invalidRule(this, context);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
//#endregion
|
|
76
|
+
export { allowedValuesRule, enumRule, inRule, notAllowedValuesRule };
|
|
77
|
+
//# sourceMappingURL=enum.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.mjs","names":[],"sources":["../../../../../../../../../../seal/src/rules/common/enum.ts"],"sourcesContent":["import { invalidRule, resolveTranslation, VALID_RULE } from \"../../helpers\";\r\nimport type { SchemaRule } from \"../../types\";\r\n\r\n/**\r\n * Enum rule - value must be one of the enum values\r\n */\r\nexport const enumRule: SchemaRule<{ enum: any }> = {\r\n name: \"enum\",\r\n defaultErrorMessage: \"The :input must be one of the following values: :enum\",\r\n async validate(value: any, context) {\r\n const enumValues = this.context.options.enum;\r\n\r\n if (enumValues.includes(value)) {\r\n return VALID_RULE;\r\n }\r\n\r\n // Translate each enum value individually, then join into a display string\r\n this.context.translationParams.enum = enumValues\r\n .map((v: any) =>\r\n resolveTranslation({ key: String(v), rawValue: String(v), rule: this, context }),\r\n )\r\n .join(\", \");\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * In rule - value must be in the given array\r\n */\r\nexport const inRule: SchemaRule<{ values: any[] }> = {\r\n name: \"in\",\r\n defaultErrorMessage: \"The :input must be one of the following values: :values\",\r\n async validate(value: any, context) {\r\n if (this.context.options.values.includes(value)) {\r\n return VALID_RULE;\r\n }\r\n\r\n // Translate each value individually, then join\r\n this.context.translationParams.values = this.context.options.values\r\n .map((v: any) =>\r\n resolveTranslation({ key: String(v), rawValue: String(v), rule: this, context }),\r\n )\r\n .join(\", \");\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * Allowed values rule - value must be one of allowed values\r\n */\r\nexport const allowedValuesRule: SchemaRule<{ allowedValues: any[] }> = {\r\n name: \"allowedValues\",\r\n defaultErrorMessage: \"The :input must be one of the allowed values\",\r\n async validate(value: any, context) {\r\n if (this.context.options.allowedValues.includes(value)) {\r\n return VALID_RULE;\r\n }\r\n\r\n // Translate each value individually, then join\r\n this.context.translationParams.allowedValues = this.context.options.allowedValues\r\n .map((v: any) =>\r\n resolveTranslation({ key: String(v), rawValue: String(v), rule: this, context }),\r\n )\r\n .join(\", \");\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n\r\n/**\r\n * Not allowed values rule - value must not be in forbidden list\r\n */\r\nexport const notAllowedValuesRule: SchemaRule<{ notAllowedValues: any[] }> = {\r\n name: \"notAllowedValues\",\r\n defaultErrorMessage: \"The :input contains a forbidden value\",\r\n async validate(value: any, context) {\r\n if (!this.context.options.notAllowedValues.includes(value)) {\r\n return VALID_RULE;\r\n }\r\n\r\n // Translate each value individually, then join\r\n this.context.translationParams.notAllowedValues = this.context.options.notAllowedValues\r\n .map((v: any) =>\r\n resolveTranslation({ key: String(v), rawValue: String(v), rule: this, context }),\r\n )\r\n .join(\", \");\r\n\r\n return invalidRule(this, context);\r\n },\r\n};\r\n"],"mappings":";;;;;;;AAMA,MAAa,WAAsC;CACjD,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,MAAM,aAAa,KAAK,QAAQ,QAAQ;EAExC,IAAI,WAAW,SAAS,KAAK,GAC3B,OAAO;EAIT,KAAK,QAAQ,kBAAkB,OAAO,WACnC,KAAK,MACJ,mBAAmB;GAAE,KAAK,OAAO,CAAC;GAAG,UAAU,OAAO,CAAC;GAAG,MAAM;GAAM;EAAQ,CAAC,CACjF,CAAC,CACA,KAAK,IAAI;EAEZ,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,SAAwC;CACnD,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,KAAK,QAAQ,QAAQ,OAAO,SAAS,KAAK,GAC5C,OAAO;EAIT,KAAK,QAAQ,kBAAkB,SAAS,KAAK,QAAQ,QAAQ,OAC1D,KAAK,MACJ,mBAAmB;GAAE,KAAK,OAAO,CAAC;GAAG,UAAU,OAAO,CAAC;GAAG,MAAM;GAAM;EAAQ,CAAC,CACjF,CAAC,CACA,KAAK,IAAI;EAEZ,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,oBAA0D;CACrE,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,KAAK,QAAQ,QAAQ,cAAc,SAAS,KAAK,GACnD,OAAO;EAIT,KAAK,QAAQ,kBAAkB,gBAAgB,KAAK,QAAQ,QAAQ,cACjE,KAAK,MACJ,mBAAmB;GAAE,KAAK,OAAO,CAAC;GAAG,UAAU,OAAO,CAAC;GAAG,MAAM;GAAM;EAAQ,CAAC,CACjF,CAAC,CACA,KAAK,IAAI;EAEZ,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,uBAAgE;CAC3E,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,CAAC,KAAK,QAAQ,QAAQ,iBAAiB,SAAS,KAAK,GACvD,OAAO;EAIT,KAAK,QAAQ,kBAAkB,mBAAmB,KAAK,QAAQ,QAAQ,iBACpE,KAAK,MACJ,mBAAmB;GAAE,KAAK,OAAO,CAAC;GAAG,UAAU,OAAO,CAAC;GAAG,MAAM;GAAM;EAAQ,CAAC,CACjF,CAAC,CACA,KAAK,IAAI;EAEZ,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getFieldValue } from "../../helpers/get-field-value.mjs";
|
|
2
|
+
import { VALID_RULE, invalidRule } from "../../helpers/validation-helpers.mjs";
|
|
3
|
+
import "../../helpers/index.mjs";
|
|
4
|
+
|
|
5
|
+
//#region ../seal/src/rules/common/equals-field-rules.ts
|
|
6
|
+
/**
|
|
7
|
+
* Equals field rule - value must equal another field's value
|
|
8
|
+
* Supports both global and sibling scope
|
|
9
|
+
*/
|
|
10
|
+
const equalsFieldRule = {
|
|
11
|
+
name: "equalsField",
|
|
12
|
+
description: "The value must equal another field's value",
|
|
13
|
+
sortOrder: -1,
|
|
14
|
+
requiresValue: true,
|
|
15
|
+
defaultErrorMessage: "The :input must match the :field field",
|
|
16
|
+
async validate(value, context) {
|
|
17
|
+
if (value !== getFieldValue(this, context)) {
|
|
18
|
+
this.context.translatableParams.field = this.context.options.field;
|
|
19
|
+
return invalidRule(this, context);
|
|
20
|
+
}
|
|
21
|
+
return VALID_RULE;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Not equals field rule - value must NOT equal another field's value
|
|
26
|
+
* Supports both global and sibling scope
|
|
27
|
+
*/
|
|
28
|
+
const notEqualsFieldRule = {
|
|
29
|
+
name: "notEqualsField",
|
|
30
|
+
description: "The value must NOT equal another field's value",
|
|
31
|
+
sortOrder: -1,
|
|
32
|
+
requiresValue: true,
|
|
33
|
+
defaultErrorMessage: "The :input must not match the :field field",
|
|
34
|
+
async validate(value, context) {
|
|
35
|
+
if (value === getFieldValue(this, context)) return invalidRule(this, context);
|
|
36
|
+
return VALID_RULE;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
export { equalsFieldRule, notEqualsFieldRule };
|
|
42
|
+
//# sourceMappingURL=equals-field-rules.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals-field-rules.mjs","names":[],"sources":["../../../../../../../../../../seal/src/rules/common/equals-field-rules.ts"],"sourcesContent":["import { getFieldValue, invalidRule, VALID_RULE } from \"../../helpers\";\r\nimport type { SchemaRule } from \"../../types\";\r\n\r\n/**\r\n * Equals field rule - value must equal another field's value\r\n * Supports both global and sibling scope\r\n */\r\nexport const equalsFieldRule: SchemaRule<{\r\n field: string;\r\n scope?: \"global\" | \"sibling\";\r\n}> = {\r\n name: \"equalsField\",\r\n description: \"The value must equal another field's value\",\r\n sortOrder: -1,\r\n requiresValue: true,\r\n defaultErrorMessage: \"The :input must match the :field field\",\r\n async validate(value: any, context) {\r\n const fieldValue = getFieldValue(this, context);\r\n\r\n // Value must equal the other field's value\r\n if (value !== fieldValue) {\r\n this.context.translatableParams.field = this.context.options.field;\r\n return invalidRule(this, context);\r\n }\r\n\r\n return VALID_RULE;\r\n },\r\n};\r\n\r\n/**\r\n * Not equals field rule - value must NOT equal another field's value\r\n * Supports both global and sibling scope\r\n */\r\nexport const notEqualsFieldRule: SchemaRule<{\r\n field: string;\r\n scope?: \"global\" | \"sibling\";\r\n}> = {\r\n name: \"notEqualsField\",\r\n description: \"The value must NOT equal another field's value\",\r\n sortOrder: -1,\r\n requiresValue: true,\r\n defaultErrorMessage: \"The :input must not match the :field field\",\r\n async validate(value: any, context) {\r\n const fieldValue = getFieldValue(this, context);\r\n\r\n // Value must NOT equal the other field's value\r\n if (value === fieldValue) {\r\n return invalidRule(this, context);\r\n }\r\n\r\n return VALID_RULE;\r\n },\r\n};\r\n"],"mappings":";;;;;;;;;AAOA,MAAa,kBAGR;CACH,MAAM;CACN,aAAa;CACb,WAAW;CACX,eAAe;CACf,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAIlC,IAAI,UAHe,cAAc,MAAM,OAGhB,GAAG;GACxB,KAAK,QAAQ,mBAAmB,QAAQ,KAAK,QAAQ,QAAQ;GAC7D,OAAO,YAAY,MAAM,OAAO;EAClC;EAEA,OAAO;CACT;AACF;;;;;AAMA,MAAa,qBAGR;CACH,MAAM;CACN,aAAa;CACb,WAAW;CACX,eAAe;CACf,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAIlC,IAAI,UAHe,cAAc,MAAM,OAGhB,GACrB,OAAO,YAAY,MAAM,OAAO;EAGlC,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { allowedValuesRule, enumRule, inRule, notAllowedValuesRule } from "./enum.mjs";
|
|
2
|
+
import { equalsFieldRule, notEqualsFieldRule } from "./equals-field-rules.mjs";
|
|
3
|
+
import { instanceofRule } from "./instanceof.mjs";
|
|
4
|
+
import { literalRule } from "./literal.mjs";
|
|
5
|
+
import { arrayRule, booleanRule, floatRule, intRule, numberRule, objectRule, plainObjectRule, stringRule } from "./type-rules.mjs";
|
|
6
|
+
import { unknownKeyRule } from "./unknown-key.mjs";
|
|
7
|
+
|
|
8
|
+
export { };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { VALID_RULE, invalidRule } from "../../helpers/validation-helpers.mjs";
|
|
2
|
+
import "../../helpers/index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../seal/src/rules/common/instanceof.ts
|
|
5
|
+
/**
|
|
6
|
+
* InstanceOf rule - value must be an instance of the given constructor.
|
|
7
|
+
*
|
|
8
|
+
* Uses the `instanceof` operator at runtime. Useful for class instances
|
|
9
|
+
* not representable in JSON Schema (File, Buffer, custom domain classes).
|
|
10
|
+
*/
|
|
11
|
+
const instanceofRule = {
|
|
12
|
+
name: "instanceof",
|
|
13
|
+
defaultErrorMessage: "The :input must be an instance of :name",
|
|
14
|
+
async validate(value, context) {
|
|
15
|
+
if (value instanceof this.context.options.ctor) return VALID_RULE;
|
|
16
|
+
this.context.translationParams.name = this.context.options.name;
|
|
17
|
+
return invalidRule(this, context);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { instanceofRule };
|
|
23
|
+
//# sourceMappingURL=instanceof.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instanceof.mjs","names":[],"sources":["../../../../../../../../../../seal/src/rules/common/instanceof.ts"],"sourcesContent":["import { invalidRule, VALID_RULE } from \"../../helpers\";\nimport type { SchemaRule } from \"../../types\";\n\n/**\n * InstanceOf rule - value must be an instance of the given constructor.\n *\n * Uses the `instanceof` operator at runtime. Useful for class instances\n * not representable in JSON Schema (File, Buffer, custom domain classes).\n */\nexport const instanceofRule: SchemaRule<{ ctor: new (...args: any[]) => any; name: string }> = {\n name: \"instanceof\",\n defaultErrorMessage: \"The :input must be an instance of :name\",\n async validate(value: any, context) {\n if (value instanceof this.context.options.ctor) {\n return VALID_RULE;\n }\n\n this.context.translationParams.name = this.context.options.name;\n\n return invalidRule(this, context);\n },\n};\n"],"mappings":";;;;;;;;;;AASA,MAAa,iBAAkF;CAC7F,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAClC,IAAI,iBAAiB,KAAK,QAAQ,QAAQ,MACxC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { VALID_RULE, invalidRule, resolveTranslation } from "../../helpers/validation-helpers.mjs";
|
|
2
|
+
import "../../helpers/index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../seal/src/rules/common/literal.ts
|
|
5
|
+
/**
|
|
6
|
+
* Literal rule - value must be strictly equal to one of the literal values.
|
|
7
|
+
*
|
|
8
|
+
* Uses === (referential / strict equality), so distinguishes 1 from "1",
|
|
9
|
+
* true from "true", etc. Mirrors `v.string().oneOf([...])` but at the
|
|
10
|
+
* literal type level (TypeScript narrows to the union of literals).
|
|
11
|
+
*/
|
|
12
|
+
const literalRule = {
|
|
13
|
+
name: "literal",
|
|
14
|
+
requiresValue: false,
|
|
15
|
+
defaultErrorMessage: "The :input must be one of the following values: :values",
|
|
16
|
+
async validate(value, context) {
|
|
17
|
+
if (value === void 0) return VALID_RULE;
|
|
18
|
+
if (this.context.options.values.includes(value)) return VALID_RULE;
|
|
19
|
+
this.context.translationParams.values = this.context.options.values.map((v) => resolveTranslation({
|
|
20
|
+
key: String(v),
|
|
21
|
+
rawValue: String(v),
|
|
22
|
+
rule: this,
|
|
23
|
+
context
|
|
24
|
+
})).join(", ");
|
|
25
|
+
return invalidRule(this, context);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { literalRule };
|
|
31
|
+
//# sourceMappingURL=literal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.mjs","names":[],"sources":["../../../../../../../../../../seal/src/rules/common/literal.ts"],"sourcesContent":["import { invalidRule, resolveTranslation, VALID_RULE } from \"../../helpers\";\nimport type { SchemaRule } from \"../../types\";\n\n/**\n * Literal rule - value must be strictly equal to one of the literal values.\n *\n * Uses === (referential / strict equality), so distinguishes 1 from \"1\",\n * true from \"true\", etc. Mirrors `v.string().oneOf([...])` but at the\n * literal type level (TypeScript narrows to the union of literals).\n */\nexport const literalRule: SchemaRule<{ values: readonly (string | number | boolean)[] }> = {\n name: \"literal\",\n // Runs even on \"empty\" values. A literal set is an exact-match whitelist, so\n // there is no value it cannot safely be asked about — and `\"\"` is one of the\n // values callers most want to pin (`alt=\"\"` for a decorative image). Left at\n // the default, the empty string would skip this check entirely, which made\n // `v.literal(\"\").optional()` accept `\"\"`, `null` AND a missing key alike.\n requiresValue: false,\n defaultErrorMessage: \"The :input must be one of the following values: :values\",\n async validate(value: any, context) {\n // Absence is the required/present rule's question, not this one. Without\n // this, `requiresValue: false` above would make the literal check fire on a\n // missing key and defeat `.optional()`, which works by removing that rule.\n if (value === undefined) {\n return VALID_RULE;\n }\n\n if (this.context.options.values.includes(value)) {\n return VALID_RULE;\n }\n\n this.context.translationParams.values = this.context.options.values\n .map(v =>\n resolveTranslation({ key: String(v), rawValue: String(v), rule: this, context }),\n )\n .join(\", \");\n\n return invalidRule(this, context);\n },\n};\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,cAA8E;CACzF,MAAM;CAMN,eAAe;CACf,qBAAqB;CACrB,MAAM,SAAS,OAAY,SAAS;EAIlC,IAAI,UAAU,QACZ,OAAO;EAGT,IAAI,KAAK,QAAQ,QAAQ,OAAO,SAAS,KAAK,GAC5C,OAAO;EAGT,KAAK,QAAQ,kBAAkB,SAAS,KAAK,QAAQ,QAAQ,OAC1D,KAAI,MACH,mBAAmB;GAAE,KAAK,OAAO,CAAC;GAAG,UAAU,OAAO,CAAC;GAAG,MAAM;GAAM;EAAQ,CAAC,CACjF,CAAC,CACA,KAAK,IAAI;EAEZ,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
|