@bitrix24/b24jssdk 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-AI.md +6 -5
- package/README.md +2 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs +19 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
- package/dist/cjs/_virtual/protobuf.cjs +20 -0
- package/dist/cjs/_virtual/protobuf.cjs.map +1 -0
- package/dist/cjs/_virtual/protobuf2.cjs +14 -0
- package/dist/cjs/_virtual/protobuf2.cjs.map +1 -0
- package/dist/cjs/core/abstract-b24.cjs +357 -0
- package/dist/cjs/core/abstract-b24.cjs.map +1 -0
- package/dist/cjs/core/actions/abstract-action.cjs +26 -0
- package/dist/cjs/core/actions/abstract-action.cjs.map +1 -0
- package/dist/cjs/core/actions/abstract-batch.cjs +97 -0
- package/dist/cjs/core/actions/abstract-batch.cjs.map +1 -0
- package/dist/cjs/core/actions/manager.cjs +55 -0
- package/dist/cjs/core/actions/manager.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/batch-by-chunk.cjs +95 -0
- package/dist/cjs/core/actions/v2/batch-by-chunk.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/batch.cjs +128 -0
- package/dist/cjs/core/actions/v2/batch.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/call-list.cjs +144 -0
- package/dist/cjs/core/actions/v2/call-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/call.cjs +56 -0
- package/dist/cjs/core/actions/v2/call.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/fetch-list.cjs +145 -0
- package/dist/cjs/core/actions/v2/fetch-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v2/manager-v2.cjs +76 -0
- package/dist/cjs/core/actions/v2/manager-v2.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/_keyset-paginate.cjs +69 -0
- package/dist/cjs/core/actions/v3/_keyset-paginate.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/aggregate.cjs +96 -0
- package/dist/cjs/core/actions/v3/aggregate.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/batch-by-chunk.cjs +93 -0
- package/dist/cjs/core/actions/v3/batch-by-chunk.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/batch.cjs +122 -0
- package/dist/cjs/core/actions/v3/batch.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/call-list.cjs +126 -0
- package/dist/cjs/core/actions/v3/call-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/call-tail.cjs +118 -0
- package/dist/cjs/core/actions/v3/call-tail.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/call.cjs +51 -0
- package/dist/cjs/core/actions/v3/call.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/fetch-list.cjs +122 -0
- package/dist/cjs/core/actions/v3/fetch-list.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/fetch-tail.cjs +112 -0
- package/dist/cjs/core/actions/v3/fetch-tail.cjs.map +1 -0
- package/dist/cjs/core/actions/v3/manager-v3.cjs +100 -0
- package/dist/cjs/core/actions/v3/manager-v3.cjs.map +1 -0
- package/dist/cjs/core/http/abstract-http.cjs +641 -0
- package/dist/cjs/core/http/abstract-http.cjs.map +1 -0
- package/dist/cjs/core/http/ajax-error.cjs +113 -0
- package/dist/cjs/core/http/ajax-error.cjs.map +1 -0
- package/dist/cjs/core/http/ajax-result.cjs +219 -0
- package/dist/cjs/core/http/ajax-result.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/adaptive-delayer.cjs +137 -0
- package/dist/cjs/core/http/limiters/adaptive-delayer.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/manager.cjs +373 -0
- package/dist/cjs/core/http/limiters/manager.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/operating-limiter.cjs +173 -0
- package/dist/cjs/core/http/limiters/operating-limiter.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/params-factory.cjs +124 -0
- package/dist/cjs/core/http/limiters/params-factory.cjs.map +1 -0
- package/dist/cjs/core/http/limiters/rate-limiter.cjs +404 -0
- package/dist/cjs/core/http/limiters/rate-limiter.cjs.map +1 -0
- package/dist/cjs/core/http/redact.cjs +85 -0
- package/dist/cjs/core/http/redact.cjs.map +1 -0
- package/dist/cjs/core/http/v2.cjs +85 -0
- package/dist/cjs/core/http/v2.cjs.map +1 -0
- package/dist/cjs/core/http/v3.cjs +82 -0
- package/dist/cjs/core/http/v3.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/abstract-interaction-batch.cjs +71 -0
- package/dist/cjs/core/interaction/batch/abstract-interaction-batch.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/parse-row.cjs +69 -0
- package/dist/cjs/core/interaction/batch/parse-row.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/interface-strategy.cjs +87 -0
- package/dist/cjs/core/interaction/batch/processing/interface-strategy.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v2/abstract-processing.cjs +138 -0
- package/dist/cjs/core/interaction/batch/processing/v2/abstract-processing.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-array.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-array.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-object.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v2/as-object.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v3/abstract-processing.cjs +115 -0
- package/dist/cjs/core/interaction/batch/processing/v3/abstract-processing.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-array.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-array.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-object.cjs +34 -0
- package/dist/cjs/core/interaction/batch/processing/v3/as-object.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/v2.cjs +47 -0
- package/dist/cjs/core/interaction/batch/v2.cjs.map +1 -0
- package/dist/cjs/core/interaction/batch/v3.cjs +45 -0
- package/dist/cjs/core/interaction/batch/v3.cjs.map +1 -0
- package/dist/cjs/core/language/list.cjs +59 -0
- package/dist/cjs/core/language/list.cjs.map +1 -0
- package/dist/cjs/core/request-id-generator.cjs +44 -0
- package/dist/cjs/core/request-id-generator.cjs.map +1 -0
- package/dist/cjs/core/result.cjs +137 -0
- package/dist/cjs/core/result.cjs.map +1 -0
- package/dist/cjs/core/sdk-error.cjs +85 -0
- package/dist/cjs/core/sdk-error.cjs.map +1 -0
- package/dist/cjs/core/tools/abstract-tool.cjs +26 -0
- package/dist/cjs/core/tools/abstract-tool.cjs.map +1 -0
- package/dist/cjs/core/tools/healthcheck.cjs +50 -0
- package/dist/cjs/core/tools/healthcheck.cjs.map +1 -0
- package/dist/cjs/core/tools/manager.cjs +52 -0
- package/dist/cjs/core/tools/manager.cjs.map +1 -0
- package/dist/cjs/core/tools/ping.cjs +58 -0
- package/dist/cjs/core/tools/ping.cjs.map +1 -0
- package/dist/cjs/core/version-manager.cjs +57 -0
- package/dist/cjs/core/version-manager.cjs.map +1 -0
- package/dist/cjs/frame/auth.cjs +100 -0
- package/dist/cjs/frame/auth.cjs.map +1 -0
- package/dist/cjs/frame/b24.cjs +178 -0
- package/dist/cjs/frame/b24.cjs.map +1 -0
- package/dist/cjs/frame/dialog.cjs +120 -0
- package/dist/cjs/frame/dialog.cjs.map +1 -0
- package/dist/cjs/frame/frame.cjs +103 -0
- package/dist/cjs/frame/frame.cjs.map +1 -0
- package/dist/cjs/frame/message/commands.cjs +39 -0
- package/dist/cjs/frame/message/commands.cjs.map +1 -0
- package/dist/cjs/frame/message/controller.cjs +191 -0
- package/dist/cjs/frame/message/controller.cjs.map +1 -0
- package/dist/cjs/frame/options.cjs +108 -0
- package/dist/cjs/frame/options.cjs.map +1 -0
- package/dist/cjs/frame/parent.cjs +259 -0
- package/dist/cjs/frame/parent.cjs.map +1 -0
- package/dist/cjs/frame/placement.cjs +156 -0
- package/dist/cjs/frame/placement.cjs.map +1 -0
- package/dist/cjs/frame/slider.cjs +162 -0
- package/dist/cjs/frame/slider.cjs.map +1 -0
- package/dist/cjs/helper/abstract-helper.cjs +55 -0
- package/dist/cjs/helper/abstract-helper.cjs.map +1 -0
- package/dist/cjs/helper/app-manager.cjs +39 -0
- package/dist/cjs/helper/app-manager.cjs.map +1 -0
- package/dist/cjs/helper/currency-manager.cjs +215 -0
- package/dist/cjs/helper/currency-manager.cjs.map +1 -0
- package/dist/cjs/helper/helper-manager.cjs +397 -0
- package/dist/cjs/helper/helper-manager.cjs.map +1 -0
- package/dist/cjs/helper/license-manager.cjs +52 -0
- package/dist/cjs/helper/license-manager.cjs.map +1 -0
- package/dist/cjs/helper/options-manager.cjs +205 -0
- package/dist/cjs/helper/options-manager.cjs.map +1 -0
- package/dist/cjs/helper/payment-manager.cjs +35 -0
- package/dist/cjs/helper/payment-manager.cjs.map +1 -0
- package/dist/cjs/helper/profile-manager.cjs +35 -0
- package/dist/cjs/helper/profile-manager.cjs.map +1 -0
- package/dist/cjs/helper/use-b24-helper.cjs +85 -0
- package/dist/cjs/helper/use-b24-helper.cjs.map +1 -0
- package/dist/cjs/hook/auth.cjs +79 -0
- package/dist/cjs/hook/auth.cjs.map +1 -0
- package/dist/cjs/hook/b24.cjs +117 -0
- package/dist/cjs/hook/b24.cjs.map +1 -0
- package/dist/cjs/index.cjs +176 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +6415 -0
- package/dist/cjs/index.d.mts +6415 -0
- package/dist/cjs/index.d.ts +6415 -0
- package/dist/cjs/loader-b24frame.cjs +103 -0
- package/dist/cjs/loader-b24frame.cjs.map +1 -0
- package/dist/cjs/logger/abstract-logger.cjs +71 -0
- package/dist/cjs/logger/abstract-logger.cjs.map +1 -0
- package/dist/cjs/logger/browser.cjs +165 -0
- package/dist/cjs/logger/browser.cjs.map +1 -0
- package/dist/cjs/logger/formatter/abstract-formatter.cjs +36 -0
- package/dist/cjs/logger/formatter/abstract-formatter.cjs.map +1 -0
- package/dist/cjs/logger/formatter/json-formatter.cjs +36 -0
- package/dist/cjs/logger/formatter/json-formatter.cjs.map +1 -0
- package/dist/cjs/logger/formatter/line-formatter.cjs +43 -0
- package/dist/cjs/logger/formatter/line-formatter.cjs.map +1 -0
- package/dist/cjs/logger/formatter/telegram-formatter.cjs +105 -0
- package/dist/cjs/logger/formatter/telegram-formatter.cjs.map +1 -0
- package/dist/cjs/logger/handler/abstract-handler.cjs +41 -0
- package/dist/cjs/logger/handler/abstract-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/consola-adapter.cjs +64 -0
- package/dist/cjs/logger/handler/consola-adapter.cjs.map +1 -0
- package/dist/cjs/logger/handler/console-handler.cjs +100 -0
- package/dist/cjs/logger/handler/console-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/console-v2-handler.cjs +53 -0
- package/dist/cjs/logger/handler/console-v2-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/memory-handler.cjs +50 -0
- package/dist/cjs/logger/handler/memory-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/stream-handler.cjs +75 -0
- package/dist/cjs/logger/handler/stream-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/telegram-handler.cjs +159 -0
- package/dist/cjs/logger/handler/telegram-handler.cjs.map +1 -0
- package/dist/cjs/logger/handler/winston-adapter.cjs +59 -0
- package/dist/cjs/logger/handler/winston-adapter.cjs.map +1 -0
- package/dist/cjs/logger/logger-factory.cjs +69 -0
- package/dist/cjs/logger/logger-factory.cjs.map +1 -0
- package/dist/cjs/logger/logger.cjs +78 -0
- package/dist/cjs/logger/logger.cjs.map +1 -0
- package/dist/cjs/logger/null-logger.cjs +34 -0
- package/dist/cjs/logger/null-logger.cjs.map +1 -0
- package/dist/cjs/logger/processor/memory-usage-processor.cjs +22 -0
- package/dist/cjs/logger/processor/memory-usage-processor.cjs.map +1 -0
- package/dist/cjs/logger/processor/pid-processor.cjs +22 -0
- package/dist/cjs/logger/processor/pid-processor.cjs.map +1 -0
- package/dist/cjs/oauth/auth.cjs +214 -0
- package/dist/cjs/oauth/auth.cjs.map +1 -0
- package/dist/cjs/oauth/b24.cjs +119 -0
- package/dist/cjs/oauth/b24.cjs.map +1 -0
- package/dist/cjs/oauth/refresh-token-error.cjs +22 -0
- package/dist/cjs/oauth/refresh-token-error.cjs.map +1 -0
- package/dist/cjs/pullClient/abstract-connector.cjs +80 -0
- package/dist/cjs/pullClient/abstract-connector.cjs.map +1 -0
- package/dist/cjs/pullClient/channel-manager.cjs +91 -0
- package/dist/cjs/pullClient/channel-manager.cjs.map +1 -0
- package/dist/cjs/pullClient/client.cjs +2177 -0
- package/dist/cjs/pullClient/client.cjs.map +1 -0
- package/dist/cjs/pullClient/errors.cjs +34 -0
- package/dist/cjs/pullClient/errors.cjs.map +1 -0
- package/dist/cjs/pullClient/json-rpc.cjs +213 -0
- package/dist/cjs/pullClient/json-rpc.cjs.map +1 -0
- package/dist/cjs/pullClient/long-polling-connector.cjs +159 -0
- package/dist/cjs/pullClient/long-polling-connector.cjs.map +1 -0
- package/dist/cjs/pullClient/protobuf/index.cjs +22 -0
- package/dist/cjs/pullClient/protobuf/index.cjs.map +1 -0
- package/dist/cjs/pullClient/protobuf/model.cjs +1060 -0
- package/dist/cjs/pullClient/protobuf/model.cjs.map +1 -0
- package/dist/cjs/pullClient/protobuf/protobuf.cjs +4655 -0
- package/dist/cjs/pullClient/protobuf/protobuf.cjs.map +1 -0
- package/dist/cjs/pullClient/shared-config.cjs +135 -0
- package/dist/cjs/pullClient/shared-config.cjs.map +1 -0
- package/dist/cjs/pullClient/storage-manager.cjs +74 -0
- package/dist/cjs/pullClient/storage-manager.cjs.map +1 -0
- package/dist/cjs/pullClient/web-socket-connector.cjs +131 -0
- package/dist/cjs/pullClient/web-socket-connector.cjs.map +1 -0
- package/dist/cjs/tools/batch-ref-v3.cjs +54 -0
- package/dist/cjs/tools/batch-ref-v3.cjs.map +1 -0
- package/dist/cjs/tools/browser.cjs +156 -0
- package/dist/cjs/tools/browser.cjs.map +1 -0
- package/dist/cjs/tools/environment.cjs +32 -0
- package/dist/cjs/tools/environment.cjs.map +1 -0
- package/dist/cjs/tools/filter-v3.cjs +139 -0
- package/dist/cjs/tools/filter-v3.cjs.map +1 -0
- package/dist/cjs/tools/formatters/iban.cjs +307 -0
- package/dist/cjs/tools/formatters/iban.cjs.map +1 -0
- package/dist/cjs/tools/formatters/numbers.cjs +68 -0
- package/dist/cjs/tools/formatters/numbers.cjs.map +1 -0
- package/dist/cjs/tools/index.cjs +42 -0
- package/dist/cjs/tools/index.cjs.map +1 -0
- package/dist/cjs/tools/scroll-size.cjs +29 -0
- package/dist/cjs/tools/scroll-size.cjs.map +1 -0
- package/dist/cjs/tools/text.cjs +210 -0
- package/dist/cjs/tools/text.cjs.map +1 -0
- package/dist/cjs/tools/type.cjs +339 -0
- package/dist/cjs/tools/type.cjs.map +1 -0
- package/dist/cjs/tools/use-formatters.cjs +462 -0
- package/dist/cjs/tools/use-formatters.cjs.map +1 -0
- package/dist/cjs/tools/uuidv7.cjs +58 -0
- package/dist/cjs/tools/uuidv7.cjs.map +1 -0
- package/dist/cjs/types/b24-helper.cjs +62 -0
- package/dist/cjs/types/b24-helper.cjs.map +1 -0
- package/dist/cjs/types/b24.cjs +18 -0
- package/dist/cjs/types/b24.cjs.map +1 -0
- package/dist/cjs/types/bizproc/index.cjs +195 -0
- package/dist/cjs/types/bizproc/index.cjs.map +1 -0
- package/dist/cjs/types/catalog/index.cjs +39 -0
- package/dist/cjs/types/catalog/index.cjs.map +1 -0
- package/dist/cjs/types/common.cjs +33 -0
- package/dist/cjs/types/common.cjs.map +1 -0
- package/dist/cjs/types/crm/entity-type.cjs +62 -0
- package/dist/cjs/types/crm/entity-type.cjs.map +1 -0
- package/dist/cjs/types/crm/productrow.cjs +19 -0
- package/dist/cjs/types/crm/productrow.cjs.map +1 -0
- package/dist/cjs/types/logger.cjs +24 -0
- package/dist/cjs/types/logger.cjs.map +1 -0
- package/dist/cjs/types/pull.cjs +94 -0
- package/dist/cjs/types/pull.cjs.map +1 -0
- package/dist/esm/_virtual/_commonjsHelpers.mjs +1 -1
- package/dist/esm/_virtual/protobuf.mjs +1 -1
- package/dist/esm/_virtual/protobuf2.mjs +1 -1
- package/dist/esm/core/abstract-b24.mjs +1 -1
- package/dist/esm/core/actions/abstract-action.mjs +1 -1
- package/dist/esm/core/actions/abstract-batch.mjs +1 -1
- package/dist/esm/core/actions/manager.mjs +1 -1
- package/dist/esm/core/actions/v2/batch-by-chunk.mjs +1 -1
- package/dist/esm/core/actions/v2/batch.mjs +1 -1
- package/dist/esm/core/actions/v2/call-list.mjs +17 -10
- package/dist/esm/core/actions/v2/call-list.mjs.map +1 -1
- package/dist/esm/core/actions/v2/call.mjs +1 -15
- package/dist/esm/core/actions/v2/call.mjs.map +1 -1
- package/dist/esm/core/actions/v2/fetch-list.mjs +17 -10
- package/dist/esm/core/actions/v2/fetch-list.mjs.map +1 -1
- package/dist/esm/core/actions/v2/manager-v2.mjs +6 -6
- package/dist/esm/core/actions/v2/manager-v2.mjs.map +1 -1
- package/dist/esm/core/actions/v3/_keyset-paginate.mjs +66 -0
- package/dist/esm/core/actions/v3/_keyset-paginate.mjs.map +1 -0
- package/dist/esm/core/actions/v3/aggregate.mjs +94 -0
- package/dist/esm/core/actions/v3/aggregate.mjs.map +1 -0
- package/dist/esm/core/actions/v3/batch-by-chunk.mjs +1 -1
- package/dist/esm/core/actions/v3/batch.mjs +1 -10
- package/dist/esm/core/actions/v3/batch.mjs.map +1 -1
- package/dist/esm/core/actions/v3/call-list.mjs +40 -47
- package/dist/esm/core/actions/v3/call-list.mjs.map +1 -1
- package/dist/esm/core/actions/v3/call-tail.mjs +116 -0
- package/dist/esm/core/actions/v3/call-tail.mjs.map +1 -0
- package/dist/esm/core/actions/v3/call.mjs +1 -10
- package/dist/esm/core/actions/v3/call.mjs.map +1 -1
- package/dist/esm/core/actions/v3/fetch-list.mjs +34 -44
- package/dist/esm/core/actions/v3/fetch-list.mjs.map +1 -1
- package/dist/esm/core/actions/v3/fetch-tail.mjs +110 -0
- package/dist/esm/core/actions/v3/fetch-tail.mjs.map +1 -0
- package/dist/esm/core/actions/v3/manager-v3.mjs +30 -6
- package/dist/esm/core/actions/v3/manager-v3.mjs.map +1 -1
- package/dist/esm/core/http/abstract-http.mjs +96 -21
- package/dist/esm/core/http/abstract-http.mjs.map +1 -1
- package/dist/esm/core/http/ajax-error.mjs +1 -1
- package/dist/esm/core/http/ajax-result.mjs +9 -8
- package/dist/esm/core/http/ajax-result.mjs.map +1 -1
- package/dist/esm/core/http/limiters/adaptive-delayer.mjs +1 -1
- package/dist/esm/core/http/limiters/manager.mjs +2 -1
- package/dist/esm/core/http/limiters/manager.mjs.map +1 -1
- package/dist/esm/core/http/limiters/operating-limiter.mjs +1 -1
- package/dist/esm/core/http/limiters/params-factory.mjs +1 -1
- package/dist/esm/core/http/limiters/rate-limiter.mjs +1 -1
- package/dist/esm/core/http/redact.mjs +41 -13
- package/dist/esm/core/http/redact.mjs.map +1 -1
- package/dist/esm/core/http/v2.mjs +1 -18
- package/dist/esm/core/http/v2.mjs.map +1 -1
- package/dist/esm/core/http/v3.mjs +1 -15
- package/dist/esm/core/http/v3.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/abstract-interaction-batch.mjs +1 -1
- package/dist/esm/core/interaction/batch/parse-row.mjs +1 -1
- package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs +44 -1
- package/dist/esm/core/interaction/batch/processing/interface-strategy.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs +7 -6
- package/dist/esm/core/interaction/batch/processing/v2/abstract-processing.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs +3 -3
- package/dist/esm/core/interaction/batch/processing/v2/as-array.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v2/as-object.mjs +1 -1
- package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs +7 -19
- package/dist/esm/core/interaction/batch/processing/v3/abstract-processing.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs +3 -3
- package/dist/esm/core/interaction/batch/processing/v3/as-array.mjs.map +1 -1
- package/dist/esm/core/interaction/batch/processing/v3/as-object.mjs +1 -1
- package/dist/esm/core/interaction/batch/v2.mjs +1 -1
- package/dist/esm/core/interaction/batch/v3.mjs +1 -1
- package/dist/esm/core/language/list.mjs +1 -1
- package/dist/esm/core/request-id-generator.mjs +1 -1
- package/dist/esm/core/result.mjs +35 -1
- package/dist/esm/core/result.mjs.map +1 -1
- package/dist/esm/core/sdk-error.mjs +1 -1
- package/dist/esm/core/tools/abstract-tool.mjs +1 -1
- package/dist/esm/core/tools/healthcheck.mjs +1 -1
- package/dist/esm/core/tools/manager.mjs +3 -3
- package/dist/esm/core/tools/manager.mjs.map +1 -1
- package/dist/esm/core/tools/ping.mjs +1 -1
- package/dist/esm/core/version-manager.mjs +19 -80
- package/dist/esm/core/version-manager.mjs.map +1 -1
- package/dist/esm/frame/auth.mjs +1 -1
- package/dist/esm/frame/b24.mjs +8 -2
- package/dist/esm/frame/b24.mjs.map +1 -1
- package/dist/esm/frame/dialog.mjs +1 -1
- package/dist/esm/frame/frame.mjs +1 -1
- package/dist/esm/frame/message/commands.mjs +1 -1
- package/dist/esm/frame/message/controller.mjs +17 -6
- package/dist/esm/frame/message/controller.mjs.map +1 -1
- package/dist/esm/frame/options.mjs +1 -1
- package/dist/esm/frame/parent.mjs +6 -2
- package/dist/esm/frame/parent.mjs.map +1 -1
- package/dist/esm/frame/placement.mjs +1 -1
- package/dist/esm/frame/slider.mjs +5 -1
- package/dist/esm/frame/slider.mjs.map +1 -1
- package/dist/esm/helper/abstract-helper.mjs +1 -1
- package/dist/esm/helper/app-manager.mjs +1 -1
- package/dist/esm/helper/currency-manager.mjs +1 -1
- package/dist/esm/helper/helper-manager.mjs +1 -1
- package/dist/esm/helper/license-manager.mjs +1 -1
- package/dist/esm/helper/options-manager.mjs +1 -1
- package/dist/esm/helper/payment-manager.mjs +1 -1
- package/dist/esm/helper/profile-manager.mjs +1 -1
- package/dist/esm/helper/use-b24-helper.mjs +1 -1
- package/dist/esm/hook/auth.mjs +1 -1
- package/dist/esm/hook/b24.mjs +3 -3
- package/dist/esm/hook/b24.mjs.map +1 -1
- package/dist/esm/index.d.mts +501 -49
- package/dist/esm/index.d.ts +501 -49
- package/dist/esm/index.mjs +3 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/loader-b24frame.mjs +1 -1
- package/dist/esm/logger/abstract-logger.mjs +1 -1
- package/dist/esm/logger/browser.mjs +1 -1
- package/dist/esm/logger/formatter/abstract-formatter.mjs +1 -1
- package/dist/esm/logger/formatter/json-formatter.mjs +1 -1
- package/dist/esm/logger/formatter/line-formatter.mjs +1 -1
- package/dist/esm/logger/formatter/telegram-formatter.mjs +1 -1
- package/dist/esm/logger/handler/abstract-handler.mjs +1 -1
- package/dist/esm/logger/handler/consola-adapter.mjs +1 -1
- package/dist/esm/logger/handler/console-handler.mjs +1 -1
- package/dist/esm/logger/handler/console-v2-handler.mjs +1 -1
- package/dist/esm/logger/handler/memory-handler.mjs +1 -1
- package/dist/esm/logger/handler/stream-handler.mjs +1 -1
- package/dist/esm/logger/handler/telegram-handler.mjs +1 -1
- package/dist/esm/logger/handler/winston-adapter.mjs +1 -1
- package/dist/esm/logger/logger-factory.mjs +1 -1
- package/dist/esm/logger/logger.mjs +1 -1
- package/dist/esm/logger/null-logger.mjs +1 -1
- package/dist/esm/logger/processor/memory-usage-processor.mjs +1 -1
- package/dist/esm/logger/processor/pid-processor.mjs +1 -1
- package/dist/esm/oauth/auth.mjs +13 -16
- package/dist/esm/oauth/auth.mjs.map +1 -1
- package/dist/esm/oauth/b24.mjs +1 -1
- package/dist/esm/oauth/refresh-token-error.mjs +1 -1
- package/dist/esm/pullClient/abstract-connector.mjs +1 -1
- package/dist/esm/pullClient/channel-manager.mjs +1 -1
- package/dist/esm/pullClient/client.mjs +141 -30
- package/dist/esm/pullClient/client.mjs.map +1 -1
- package/dist/esm/pullClient/errors.mjs +1 -1
- package/dist/esm/pullClient/json-rpc.mjs +5 -4
- package/dist/esm/pullClient/json-rpc.mjs.map +1 -1
- package/dist/esm/pullClient/long-polling-connector.mjs +1 -1
- package/dist/esm/pullClient/protobuf/index.mjs +1 -1
- package/dist/esm/pullClient/protobuf/model.mjs +1 -1
- package/dist/esm/pullClient/protobuf/protobuf.mjs +1 -1
- package/dist/esm/pullClient/shared-config.mjs +1 -1
- package/dist/esm/pullClient/storage-manager.mjs +1 -1
- package/dist/esm/pullClient/web-socket-connector.mjs +1 -1
- package/dist/esm/tools/batch-ref-v3.mjs +52 -0
- package/dist/esm/tools/batch-ref-v3.mjs.map +1 -0
- package/dist/esm/tools/browser.mjs +1 -1
- package/dist/esm/tools/environment.mjs +1 -1
- package/dist/esm/tools/filter-v3.mjs +137 -0
- package/dist/esm/tools/filter-v3.mjs.map +1 -0
- package/dist/esm/tools/formatters/iban.mjs +1 -1
- package/dist/esm/tools/formatters/numbers.mjs +1 -1
- package/dist/esm/tools/index.mjs +1 -1
- package/dist/esm/tools/scroll-size.mjs +1 -1
- package/dist/esm/tools/text.mjs +1 -1
- package/dist/esm/tools/type.mjs +1 -1
- package/dist/esm/tools/use-formatters.mjs +1 -1
- package/dist/esm/tools/uuidv7.mjs +1 -1
- package/dist/esm/types/b24-helper.mjs +1 -1
- package/dist/esm/types/b24.mjs +1 -1
- package/dist/esm/types/bizproc/index.mjs +1 -1
- package/dist/esm/types/catalog/index.mjs +1 -1
- package/dist/esm/types/common.mjs +1 -1
- package/dist/esm/types/crm/entity-type.mjs +1 -1
- package/dist/esm/types/crm/productrow.mjs +1 -1
- package/dist/esm/types/logger.mjs +1 -1
- package/dist/esm/types/pull.mjs +1 -1
- package/dist/umd/index.js +1384 -680
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/index.min.js +26 -26
- package/dist/umd/index.min.js.map +1 -1
- package/dist/umd/package.json +3 -0
- package/package.json +12 -4
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const sdkError = require('../core/sdk-error.cjs');
|
|
12
|
+
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
const FILTER_V3_OPERATORS = ["=", "!=", ">", ">=", "<", "<=", "in", "between"];
|
|
16
|
+
function condition(field, operator, value) {
|
|
17
|
+
if (typeof field !== "string" || field.length === 0) {
|
|
18
|
+
throw new sdkError.SdkError({
|
|
19
|
+
code: "JSSDK_FILTER_V3_INVALID_FIELD",
|
|
20
|
+
description: `FilterV3: field name must be a non-empty string, got ${JSON.stringify(field)}.`,
|
|
21
|
+
status: 400
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (!FILTER_V3_OPERATORS.includes(operator)) {
|
|
25
|
+
throw new sdkError.SdkError({
|
|
26
|
+
code: "JSSDK_FILTER_V3_INVALID_OPERATOR",
|
|
27
|
+
description: `FilterV3: operator "${operator}" is not one of ${FILTER_V3_OPERATORS.join(" ")}.`,
|
|
28
|
+
status: 400
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return [field, operator, value];
|
|
32
|
+
}
|
|
33
|
+
__name(condition, "condition");
|
|
34
|
+
const FilterV3 = Object.freeze({
|
|
35
|
+
/** `field = value` */
|
|
36
|
+
eq(field, value) {
|
|
37
|
+
return condition(field, "=", value);
|
|
38
|
+
},
|
|
39
|
+
/** `field != value` */
|
|
40
|
+
ne(field, value) {
|
|
41
|
+
return condition(field, "!=", value);
|
|
42
|
+
},
|
|
43
|
+
/** `field > value` */
|
|
44
|
+
gt(field, value) {
|
|
45
|
+
return condition(field, ">", value);
|
|
46
|
+
},
|
|
47
|
+
/** `field >= value` */
|
|
48
|
+
ge(field, value) {
|
|
49
|
+
return condition(field, ">=", value);
|
|
50
|
+
},
|
|
51
|
+
/** `field < value` */
|
|
52
|
+
lt(field, value) {
|
|
53
|
+
return condition(field, "<", value);
|
|
54
|
+
},
|
|
55
|
+
/** `field <= value` */
|
|
56
|
+
le(field, value) {
|
|
57
|
+
return condition(field, "<=", value);
|
|
58
|
+
},
|
|
59
|
+
/** `field in [values]` — `values` must be a non-empty array. */
|
|
60
|
+
in(field, values) {
|
|
61
|
+
if (!Array.isArray(values) || values.length === 0) {
|
|
62
|
+
throw new sdkError.SdkError({
|
|
63
|
+
code: "JSSDK_FILTER_V3_INVALID_IN",
|
|
64
|
+
description: `FilterV3.in("${field}"): value must be a non-empty array.`,
|
|
65
|
+
status: 400
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return condition(field, "in", values);
|
|
69
|
+
},
|
|
70
|
+
/** `field between [from, to]` — inclusive range of exactly two defined operands. */
|
|
71
|
+
between(field, from, to) {
|
|
72
|
+
if (from === void 0 || from === null || to === void 0 || to === null) {
|
|
73
|
+
throw new sdkError.SdkError({
|
|
74
|
+
code: "JSSDK_FILTER_V3_INVALID_BETWEEN",
|
|
75
|
+
description: `FilterV3.between("${field}"): both range operands must be defined (got [${String(from)}, ${String(to)}]).`,
|
|
76
|
+
status: 400
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return condition(field, "between", [from, to]);
|
|
80
|
+
},
|
|
81
|
+
/** Combine nodes with AND (for nesting inside an OR; the top level is already AND). */
|
|
82
|
+
and(...conditions) {
|
|
83
|
+
return { logic: "and", conditions };
|
|
84
|
+
},
|
|
85
|
+
/** Combine nodes with OR. */
|
|
86
|
+
or(...conditions) {
|
|
87
|
+
return { logic: "or", conditions };
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Negate a condition or group (wraps it in a NOT). A bare condition is wrapped
|
|
91
|
+
* in a single-item AND group so the `negative` flag has somewhere to live.
|
|
92
|
+
* Returns a fresh group (the input's `conditions` array is copied, not shared).
|
|
93
|
+
*/
|
|
94
|
+
not(node) {
|
|
95
|
+
if (isGroup(node)) {
|
|
96
|
+
return { ...node, conditions: [...node.conditions], negative: true };
|
|
97
|
+
}
|
|
98
|
+
return { logic: "and", negative: true, conditions: [node] };
|
|
99
|
+
},
|
|
100
|
+
/**
|
|
101
|
+
* Assemble the top-level filter array (its elements are AND-joined) ready to
|
|
102
|
+
* pass as `params.filter`. Falsy nodes are skipped, so you can inline
|
|
103
|
+
* conditionals: `F.build(F.eq('a', 1), flag && F.gt('b', 2))`.
|
|
104
|
+
*
|
|
105
|
+
* Always wrap with `build` (or an array) even for a single condition —
|
|
106
|
+
* `params.filter` must be an array, so pass `build(F.eq('a', 1))`, not the bare
|
|
107
|
+
* `F.eq('a', 1)`. Each surviving node is shape-checked, so a forgotten spread
|
|
108
|
+
* (`build([F.eq(...)])`) or a hand-rolled malformed triple fails fast here
|
|
109
|
+
* instead of as an opaque server error.
|
|
110
|
+
*/
|
|
111
|
+
build(...nodes) {
|
|
112
|
+
const result = nodes.filter(Boolean);
|
|
113
|
+
for (const node of result) {
|
|
114
|
+
assertNode(node);
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
function isGroup(node) {
|
|
120
|
+
return !Array.isArray(node) && typeof node === "object" && node !== null && "conditions" in node;
|
|
121
|
+
}
|
|
122
|
+
__name(isGroup, "isGroup");
|
|
123
|
+
function assertNode(node) {
|
|
124
|
+
if (isGroup(node)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const ok = Array.isArray(node) && node.length === 3 && typeof node[0] === "string" && FILTER_V3_OPERATORS.includes(node[1]);
|
|
128
|
+
if (!ok) {
|
|
129
|
+
throw new sdkError.SdkError({
|
|
130
|
+
code: "JSSDK_FILTER_V3_INVALID_NODE",
|
|
131
|
+
description: `FilterV3.build: each node must be a [field, operator, value] condition or a group \u2014 got ${JSON.stringify(node)}. Did you forget to spread (build(...nodes)) or build a condition with FilterV3 helpers?`,
|
|
132
|
+
status: 400
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
__name(assertNode, "assertNode");
|
|
137
|
+
|
|
138
|
+
exports.FilterV3 = FilterV3;
|
|
139
|
+
//# sourceMappingURL=filter-v3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-v3.cjs","sources":["../../../src/tools/filter-v3.ts"],"sourcesContent":["import { SdkError } from '../core/sdk-error'\n\n/**\n * The eight — and only eight — comparison operators the Bitrix24 REST API v3\n * filter grammar accepts. Anything else is rejected server-side with\n * `UNKNOWNFILTEROPERATOREXCEPTION`.\n */\nexport type FilterV3Operator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'between'\n\nconst FILTER_V3_OPERATORS: readonly FilterV3Operator[] = ['=', '!=', '>', '>=', '<', '<=', 'in', 'between']\n\n/**\n * A single condition in short-form: `[field, operator, value]`.\n */\nexport type FilterV3Condition = [string, FilterV3Operator, unknown]\n\n/**\n * A logical group of conditions / nested groups. `logic` defaults to `'and'`;\n * `negative: true` wraps the whole group in a NOT.\n */\nexport interface FilterV3Group {\n logic?: 'and' | 'or'\n negative?: boolean\n conditions: FilterV3Node[]\n}\n\nexport type FilterV3Node = FilterV3Condition | FilterV3Group\n\nfunction condition(field: string, operator: FilterV3Operator, value: unknown): FilterV3Condition {\n if (typeof field !== 'string' || field.length === 0) {\n throw new SdkError({\n code: 'JSSDK_FILTER_V3_INVALID_FIELD',\n description: `FilterV3: field name must be a non-empty string, got ${JSON.stringify(field)}.`,\n status: 400\n })\n }\n if (!FILTER_V3_OPERATORS.includes(operator)) {\n throw new SdkError({\n code: 'JSSDK_FILTER_V3_INVALID_OPERATOR',\n description: `FilterV3: operator \"${operator}\" is not one of ${FILTER_V3_OPERATORS.join(' ')}.`,\n status: 400\n })\n }\n return [field, operator, value]\n}\n\n/**\n * Typed builder for Bitrix24 REST API **v3** filters (the array-of-triples\n * dialect with AND/OR/NOT groups — see the v3 reference §3). Produces exactly\n * the structures the server accepts, so a bad operator or a malformed\n * `in` / `between` value fails fast on the client instead of as a server 400.\n *\n * @example\n * import { FilterV3 as F } from '@bitrix24/b24jssdk'\n *\n * // status = NEW AND (id in [1,2] OR id > 100)\n * const filter = F.build(\n * F.eq('status', 'NEW'),\n * F.or(\n * F.in('id', [1, 2]),\n * F.gt('id', 100)\n * )\n * )\n * await b24.actions.v3.call.make({ method: 'tasks.task.list', params: { filter } })\n */\nexport const FilterV3 = Object.freeze({\n /** `field = value` */\n eq(field: string, value: unknown): FilterV3Condition {\n return condition(field, '=', value)\n },\n /** `field != value` */\n ne(field: string, value: unknown): FilterV3Condition {\n return condition(field, '!=', value)\n },\n /** `field > value` */\n gt(field: string, value: unknown): FilterV3Condition {\n return condition(field, '>', value)\n },\n /** `field >= value` */\n ge(field: string, value: unknown): FilterV3Condition {\n return condition(field, '>=', value)\n },\n /** `field < value` */\n lt(field: string, value: unknown): FilterV3Condition {\n return condition(field, '<', value)\n },\n /** `field <= value` */\n le(field: string, value: unknown): FilterV3Condition {\n return condition(field, '<=', value)\n },\n /** `field in [values]` — `values` must be a non-empty array. */\n in(field: string, values: unknown[]): FilterV3Condition {\n if (!Array.isArray(values) || values.length === 0) {\n throw new SdkError({\n code: 'JSSDK_FILTER_V3_INVALID_IN',\n description: `FilterV3.in(\"${field}\"): value must be a non-empty array.`,\n status: 400\n })\n }\n return condition(field, 'in', values)\n },\n /** `field between [from, to]` — inclusive range of exactly two defined operands. */\n between(field: string, from: unknown, to: unknown): FilterV3Condition {\n if (from === undefined || from === null || to === undefined || to === null) {\n throw new SdkError({\n code: 'JSSDK_FILTER_V3_INVALID_BETWEEN',\n description: `FilterV3.between(\"${field}\"): both range operands must be defined (got [${String(from)}, ${String(to)}]).`,\n status: 400\n })\n }\n return condition(field, 'between', [from, to])\n },\n\n /** Combine nodes with AND (for nesting inside an OR; the top level is already AND). */\n and(...conditions: FilterV3Node[]): FilterV3Group {\n return { logic: 'and', conditions }\n },\n /** Combine nodes with OR. */\n or(...conditions: FilterV3Node[]): FilterV3Group {\n return { logic: 'or', conditions }\n },\n /**\n * Negate a condition or group (wraps it in a NOT). A bare condition is wrapped\n * in a single-item AND group so the `negative` flag has somewhere to live.\n * Returns a fresh group (the input's `conditions` array is copied, not shared).\n */\n not(node: FilterV3Node): FilterV3Group {\n if (isGroup(node)) {\n return { ...node, conditions: [...node.conditions], negative: true }\n }\n return { logic: 'and', negative: true, conditions: [node] }\n },\n\n /**\n * Assemble the top-level filter array (its elements are AND-joined) ready to\n * pass as `params.filter`. Falsy nodes are skipped, so you can inline\n * conditionals: `F.build(F.eq('a', 1), flag && F.gt('b', 2))`.\n *\n * Always wrap with `build` (or an array) even for a single condition —\n * `params.filter` must be an array, so pass `build(F.eq('a', 1))`, not the bare\n * `F.eq('a', 1)`. Each surviving node is shape-checked, so a forgotten spread\n * (`build([F.eq(...)])`) or a hand-rolled malformed triple fails fast here\n * instead of as an opaque server error.\n */\n build(...nodes: Array<FilterV3Node | false | null | undefined>): FilterV3Node[] {\n const result = nodes.filter(Boolean) as FilterV3Node[]\n for (const node of result) {\n assertNode(node)\n }\n return result\n }\n})\n\nfunction isGroup(node: unknown): node is FilterV3Group {\n return !Array.isArray(node) && typeof node === 'object' && node !== null && 'conditions' in node\n}\n\nfunction assertNode(node: FilterV3Node): void {\n if (isGroup(node)) {\n return\n }\n const ok = Array.isArray(node)\n && node.length === 3\n && typeof node[0] === 'string'\n && FILTER_V3_OPERATORS.includes(node[1] as FilterV3Operator)\n if (!ok) {\n throw new SdkError({\n code: 'JSSDK_FILTER_V3_INVALID_NODE',\n description: `FilterV3.build: each node must be a [field, operator, value] condition or a group — got ${JSON.stringify(node)}. Did you forget to spread (build(...nodes)) or build a condition with FilterV3 helpers?`,\n status: 400\n })\n }\n}\n"],"names":["SdkError"],"mappings":"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"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const type = require('../type.cjs');
|
|
12
|
+
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
class IbanSpecification {
|
|
16
|
+
static {
|
|
17
|
+
__name(this, "IbanSpecification");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* the code of the country
|
|
21
|
+
*/
|
|
22
|
+
countryCode;
|
|
23
|
+
/**
|
|
24
|
+
* the length of the IBAN
|
|
25
|
+
*/
|
|
26
|
+
length;
|
|
27
|
+
/**
|
|
28
|
+
* the structure of the underlying BBAN (for validation and formatting)
|
|
29
|
+
*/
|
|
30
|
+
structure;
|
|
31
|
+
/**
|
|
32
|
+
* an example valid IBAN
|
|
33
|
+
*/
|
|
34
|
+
example;
|
|
35
|
+
_cachedRegex = null;
|
|
36
|
+
constructor(countryCode, length, structure, example) {
|
|
37
|
+
this.countryCode = countryCode;
|
|
38
|
+
this.length = length;
|
|
39
|
+
this.structure = structure;
|
|
40
|
+
this.example = example;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if the passed iban is valid, according to this specification.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} iban the iban to validate
|
|
46
|
+
* @returns {boolean} true if valid, false otherwise
|
|
47
|
+
*/
|
|
48
|
+
isValid(iban) {
|
|
49
|
+
return this.length === iban.length && this.countryCode === iban.slice(0, 2) && this._regex().test(iban.slice(4)) && this._iso7064Mod9710(this._iso13616Prepare(iban)) == 1;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert the passed IBAN to a country-specific BBAN.
|
|
53
|
+
*
|
|
54
|
+
* @param iban the IBAN to convert
|
|
55
|
+
* @param separator the separator to use between BBAN blocks
|
|
56
|
+
* @returns {string} the BBAN
|
|
57
|
+
*/
|
|
58
|
+
toBBAN(iban, separator) {
|
|
59
|
+
return (this._regex().exec(iban.slice(4) || "") || []).slice(1).join(separator);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convert the passed BBAN to an IBAN for this country specification.
|
|
63
|
+
* Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
|
|
64
|
+
* This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
|
|
65
|
+
*
|
|
66
|
+
* @param bban the BBAN to convert to IBAN
|
|
67
|
+
* @returns {string} the IBAN
|
|
68
|
+
*/
|
|
69
|
+
fromBBAN(bban) {
|
|
70
|
+
if (!this.isValidBBAN(bban)) {
|
|
71
|
+
throw new Error("Invalid BBAN");
|
|
72
|
+
}
|
|
73
|
+
const remainder = this._iso7064Mod9710(
|
|
74
|
+
this._iso13616Prepare(this.countryCode + "00" + bban)
|
|
75
|
+
);
|
|
76
|
+
const checkDigit = ("0" + (98 - remainder)).slice(-2);
|
|
77
|
+
return this.countryCode + checkDigit + bban;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check of the passed BBAN is valid.
|
|
81
|
+
* This function only checks the format of the BBAN (length and compliance with alphanumeric specifications) but does not
|
|
82
|
+
* verify the check digit.
|
|
83
|
+
*
|
|
84
|
+
* @param bban the BBAN to validate
|
|
85
|
+
* @returns {boolean} true if the passed bban is a valid BBAN, according to this specification, false otherwise
|
|
86
|
+
*/
|
|
87
|
+
isValidBBAN(bban) {
|
|
88
|
+
return this.length - 4 === bban.length && this._regex().test(bban);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Lazy-loaded regex (parse the structure and construct the regular expression the first time we need it for validation)
|
|
92
|
+
*/
|
|
93
|
+
_regex() {
|
|
94
|
+
if (null === this._cachedRegex) {
|
|
95
|
+
this._cachedRegex = this._parseStructure(this.structure);
|
|
96
|
+
}
|
|
97
|
+
return this._cachedRegex;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse the BBAN structure used to configure each IBAN Specification and returns a matching regular expression.
|
|
101
|
+
* A structure is composed of blocks of three characters (one letter and two digits).
|
|
102
|
+
* Each block represents
|
|
103
|
+
* a logical group in the typical representation of the BBAN.
|
|
104
|
+
* For each group, the letter indicates which characters
|
|
105
|
+
* are allowed in this group, and the following 2-digits number tells the length of the group.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} structure the structure to parse
|
|
108
|
+
* @returns {RegExp}
|
|
109
|
+
*/
|
|
110
|
+
_parseStructure(structure) {
|
|
111
|
+
const regex = (structure.match(/(.{3})/g) || []).map(
|
|
112
|
+
(block) => {
|
|
113
|
+
let format;
|
|
114
|
+
const pattern = block.slice(0, 1);
|
|
115
|
+
const repeats = Number.parseInt(block.slice(1), 10);
|
|
116
|
+
switch (pattern) {
|
|
117
|
+
case "A":
|
|
118
|
+
format = "0-9A-Za-z";
|
|
119
|
+
break;
|
|
120
|
+
case "B":
|
|
121
|
+
format = "0-9A-Z";
|
|
122
|
+
break;
|
|
123
|
+
case "C":
|
|
124
|
+
format = "A-Za-z";
|
|
125
|
+
break;
|
|
126
|
+
case "F":
|
|
127
|
+
format = "0-9";
|
|
128
|
+
break;
|
|
129
|
+
case "L":
|
|
130
|
+
format = "a-z";
|
|
131
|
+
break;
|
|
132
|
+
case "U":
|
|
133
|
+
format = "A-Z";
|
|
134
|
+
break;
|
|
135
|
+
case "W":
|
|
136
|
+
format = "0-9a-z";
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
return "([" + format + "]{" + repeats + "})";
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
return new RegExp("^" + regex.join("") + "$");
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
|
|
146
|
+
* numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
|
|
147
|
+
*
|
|
148
|
+
* @param {string} iban the IBAN
|
|
149
|
+
* @returns {string} the prepared IBAN
|
|
150
|
+
*/
|
|
151
|
+
_iso13616Prepare(iban) {
|
|
152
|
+
const A = "A".charCodeAt(0);
|
|
153
|
+
const Z = "Z".charCodeAt(0);
|
|
154
|
+
iban = iban.toUpperCase();
|
|
155
|
+
iban = iban.substring(4) + iban.substring(0, 4);
|
|
156
|
+
return iban.split("").map((n) => {
|
|
157
|
+
const code = n.charCodeAt(0);
|
|
158
|
+
if (code >= A && code <= Z) {
|
|
159
|
+
return (code - A + 10).toString();
|
|
160
|
+
} else {
|
|
161
|
+
return n;
|
|
162
|
+
}
|
|
163
|
+
}).join("");
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Calculates MOD 97 10 of the passed IBAN as specified in ISO7064.
|
|
167
|
+
*
|
|
168
|
+
* @param iban
|
|
169
|
+
* @returns {number} MOD
|
|
170
|
+
*/
|
|
171
|
+
_iso7064Mod9710(iban) {
|
|
172
|
+
let remainder = iban;
|
|
173
|
+
let block;
|
|
174
|
+
while (remainder.length > 2) {
|
|
175
|
+
block = remainder.slice(0, 9);
|
|
176
|
+
remainder = Number.parseInt(block, 10) % 97 + remainder.slice(block.length);
|
|
177
|
+
}
|
|
178
|
+
return Number.parseInt(remainder, 10) % 97;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
class FormatterIban {
|
|
182
|
+
static {
|
|
183
|
+
__name(this, "FormatterIban");
|
|
184
|
+
}
|
|
185
|
+
static isInternalConstructing = false;
|
|
186
|
+
static instance = null;
|
|
187
|
+
_countries;
|
|
188
|
+
// region Init ////
|
|
189
|
+
constructor() {
|
|
190
|
+
if (!FormatterIban.isInternalConstructing) {
|
|
191
|
+
throw new TypeError("FormatterIban is not constructable");
|
|
192
|
+
}
|
|
193
|
+
FormatterIban.isInternalConstructing = false;
|
|
194
|
+
this._countries = /* @__PURE__ */ new Map();
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* @return FormatterIban
|
|
198
|
+
*/
|
|
199
|
+
static getInstance() {
|
|
200
|
+
if (!FormatterIban.instance) {
|
|
201
|
+
FormatterIban.isInternalConstructing = true;
|
|
202
|
+
FormatterIban.instance = new FormatterIban();
|
|
203
|
+
}
|
|
204
|
+
return FormatterIban.instance;
|
|
205
|
+
}
|
|
206
|
+
addSpecification(IBAN) {
|
|
207
|
+
this._countries.set(IBAN.countryCode, IBAN);
|
|
208
|
+
}
|
|
209
|
+
// endregion ////
|
|
210
|
+
// region IBAN ////
|
|
211
|
+
/**
|
|
212
|
+
* Check if an IBAN is valid.
|
|
213
|
+
*
|
|
214
|
+
* @param {string} iban the IBAN to validate.
|
|
215
|
+
* @returns {boolean} true if the passed IBAN is valid, false otherwise
|
|
216
|
+
*/
|
|
217
|
+
isValid(iban) {
|
|
218
|
+
if (!type.Type.isString(iban)) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
iban = this.electronicFormat(iban);
|
|
222
|
+
const countryCode = iban.slice(0, 2);
|
|
223
|
+
if (!this._countries.has(countryCode)) {
|
|
224
|
+
throw new Error(`No country with code ${countryCode}`);
|
|
225
|
+
}
|
|
226
|
+
const countryStructure = this._countries.get(countryCode);
|
|
227
|
+
return !!countryStructure && countryStructure.isValid(iban);
|
|
228
|
+
}
|
|
229
|
+
printFormat(iban, separator) {
|
|
230
|
+
if (typeof separator == "undefined") {
|
|
231
|
+
separator = " ";
|
|
232
|
+
}
|
|
233
|
+
const EVERY_FOUR_CHARS = /(.{4})(?!$)/g;
|
|
234
|
+
return this.electronicFormat(iban).replace(
|
|
235
|
+
EVERY_FOUR_CHARS,
|
|
236
|
+
"$1" + separator
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
electronicFormat(iban) {
|
|
240
|
+
const NON_ALPHANUM = /[^a-z0-9]/gi;
|
|
241
|
+
return iban.replace(NON_ALPHANUM, "").toUpperCase();
|
|
242
|
+
}
|
|
243
|
+
// endregion ////
|
|
244
|
+
// region BBAN ////
|
|
245
|
+
/**
|
|
246
|
+
* Convert an IBAN to a BBAN.
|
|
247
|
+
*
|
|
248
|
+
* @param iban
|
|
249
|
+
* @param {string} [separator] the separator to use between the blocks of the BBAN, defaults to ' '
|
|
250
|
+
* @returns {string|*} Convert an IBAN to a BBAN.
|
|
251
|
+
*/
|
|
252
|
+
toBBAN(iban, separator) {
|
|
253
|
+
if (typeof separator == "undefined") {
|
|
254
|
+
separator = " ";
|
|
255
|
+
}
|
|
256
|
+
iban = this.electronicFormat(iban);
|
|
257
|
+
const countryCode = iban.slice(0, 2);
|
|
258
|
+
if (!this._countries.has(countryCode)) {
|
|
259
|
+
throw new Error(`No country with code ${countryCode}`);
|
|
260
|
+
}
|
|
261
|
+
const countryStructure = this._countries.get(countryCode);
|
|
262
|
+
if (!countryStructure) {
|
|
263
|
+
throw new Error(`No country with code ${countryCode}`);
|
|
264
|
+
}
|
|
265
|
+
return countryStructure.toBBAN(iban, separator);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Convert the passed BBAN to an IBAN for this country specification.
|
|
269
|
+
* Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
|
|
270
|
+
* This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
|
|
271
|
+
*
|
|
272
|
+
* @param countryCode the country of the BBAN
|
|
273
|
+
* @param bban the BBAN to convert to IBAN
|
|
274
|
+
* @returns {string} the IBAN
|
|
275
|
+
*/
|
|
276
|
+
fromBBAN(countryCode, bban) {
|
|
277
|
+
if (!this._countries.has(countryCode)) {
|
|
278
|
+
throw new Error(`No country with code ${countryCode}`);
|
|
279
|
+
}
|
|
280
|
+
const countryStructure = this._countries.get(countryCode);
|
|
281
|
+
if (!countryStructure) {
|
|
282
|
+
throw new Error(`No country with code ${countryCode}`);
|
|
283
|
+
}
|
|
284
|
+
return countryStructure.fromBBAN(this.electronicFormat(bban));
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Check the validity of the passed BBAN.
|
|
288
|
+
*
|
|
289
|
+
* @param countryCode the country of the BBAN
|
|
290
|
+
* @param bban the BBAN to check the validity of
|
|
291
|
+
*/
|
|
292
|
+
isValidBBAN(countryCode, bban) {
|
|
293
|
+
if (!type.Type.isString(bban)) {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
if (!this._countries.has(countryCode)) {
|
|
297
|
+
throw new Error(`No country with code ${countryCode}`);
|
|
298
|
+
}
|
|
299
|
+
const countryStructure = this._countries.get(countryCode);
|
|
300
|
+
return !!countryStructure && countryStructure.isValidBBAN(this.electronicFormat(bban));
|
|
301
|
+
}
|
|
302
|
+
// endregion ////
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
exports.FormatterIban = FormatterIban;
|
|
306
|
+
exports.IbanSpecification = IbanSpecification;
|
|
307
|
+
//# sourceMappingURL=iban.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iban.cjs","sources":["../../../../src/tools/formatters/iban.ts"],"sourcesContent":["import { Type } from './../type'\n\nexport class IbanSpecification {\n /**\n * the code of the country\n */\n readonly countryCode: string\n\n /**\n * the length of the IBAN\n */\n readonly length: number\n\n /**\n * the structure of the underlying BBAN (for validation and formatting)\n */\n readonly structure: string\n\n /**\n * an example valid IBAN\n */\n readonly example: string\n\n private _cachedRegex: null | RegExp = null\n\n constructor(\n countryCode: string,\n length: number,\n structure: string,\n example: string\n ) {\n this.countryCode = countryCode\n this.length = length\n this.structure = structure\n this.example = example\n }\n\n /**\n * Check if the passed iban is valid, according to this specification.\n *\n * @param {string} iban the iban to validate\n * @returns {boolean} true if valid, false otherwise\n */\n isValid(iban: string): boolean {\n return (\n this.length === iban.length\n && this.countryCode === iban.slice(0, 2)\n && this._regex().test(iban.slice(4))\n && this._iso7064Mod9710(this._iso13616Prepare(iban)) == 1\n )\n }\n\n /**\n * Convert the passed IBAN to a country-specific BBAN.\n *\n * @param iban the IBAN to convert\n * @param separator the separator to use between BBAN blocks\n * @returns {string} the BBAN\n */\n toBBAN(iban: string, separator: string): string {\n return (this._regex().exec(iban.slice(4) || '') || [])\n .slice(1)\n .join(separator)\n }\n\n /**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that <i>\"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\"</i>.\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @param bban the BBAN to convert to IBAN\n * @returns {string} the IBAN\n */\n fromBBAN(bban: string): string {\n if (!this.isValidBBAN(bban)) {\n throw new Error('Invalid BBAN')\n }\n\n const remainder = this._iso7064Mod9710(\n this._iso13616Prepare(this.countryCode + '00' + bban)\n )\n\n const checkDigit = ('0' + (98 - remainder)).slice(-2)\n\n return this.countryCode + checkDigit + bban\n }\n\n /**\n * Check of the passed BBAN is valid.\n * This function only checks the format of the BBAN (length and compliance with alphanumeric specifications) but does not\n * verify the check digit.\n *\n * @param bban the BBAN to validate\n * @returns {boolean} true if the passed bban is a valid BBAN, according to this specification, false otherwise\n */\n isValidBBAN(bban: string): boolean {\n return this.length - 4 === bban.length && this._regex().test(bban)\n }\n\n /**\n * Lazy-loaded regex (parse the structure and construct the regular expression the first time we need it for validation)\n */\n private _regex(): RegExp {\n if (null === this._cachedRegex) {\n this._cachedRegex = this._parseStructure(this.structure)\n }\n\n return this._cachedRegex\n }\n\n /**\n * Parse the BBAN structure used to configure each IBAN Specification and returns a matching regular expression.\n * A structure is composed of blocks of three characters (one letter and two digits).\n * Each block represents\n * a logical group in the typical representation of the BBAN.\n * For each group, the letter indicates which characters\n * are allowed in this group, and the following 2-digits number tells the length of the group.\n *\n * @param {string} structure the structure to parse\n * @returns {RegExp}\n */\n private _parseStructure(structure: string): RegExp {\n // split in blocks of 3 chars\n const regex = (structure.match(/(.{3})/g) || []).map(\n (block: string): string => {\n // parse each structure block (1-char + 2-digits)\n let format\n const pattern = block.slice(0, 1)\n const repeats = Number.parseInt(block.slice(1), 10)\n\n switch (pattern) {\n case 'A':\n format = '0-9A-Za-z'\n break\n case 'B':\n format = '0-9A-Z'\n break\n case 'C':\n format = 'A-Za-z'\n break\n case 'F':\n format = '0-9'\n break\n case 'L':\n format = 'a-z'\n break\n case 'U':\n format = 'A-Z'\n break\n case 'W':\n format = '0-9a-z'\n break\n }\n\n return '([' + format + ']{' + repeats + '})'\n }\n )\n\n return new RegExp('^' + regex.join('') + '$')\n }\n\n /**\n * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n *\n * @param {string} iban the IBAN\n * @returns {string} the prepared IBAN\n */\n private _iso13616Prepare(iban: string): string {\n const A = 'A'.charCodeAt(0)\n\n const Z = 'Z'.charCodeAt(0)\n\n iban = iban.toUpperCase()\n\n iban = iban.substring(4) + iban.substring(0, 4)\n return (\n iban\n .split('')\n .map((n: string): string => {\n const code = n.charCodeAt(0)\n if (code >= A && code <= Z) {\n // A = 10, B = 11, ... Z = 35\n return (code - A + 10).toString()\n } else {\n return n\n }\n })\n .join('')\n )\n }\n\n /**\n * Calculates MOD 97 10 of the passed IBAN as specified in ISO7064.\n *\n * @param iban\n * @returns {number} MOD\n */\n private _iso7064Mod9710(iban: string): number {\n let remainder = iban\n let block\n\n while (remainder.length > 2) {\n block = remainder.slice(0, 9)\n remainder\n = (Number.parseInt(block, 10) % 97) + remainder.slice(block.length)\n }\n\n return Number.parseInt(remainder, 10) % 97\n }\n}\n\nexport class FormatterIban {\n private static isInternalConstructing: boolean = false\n private static instance: FormatterIban | null = null\n\n private _countries: Map<string, IbanSpecification>\n\n // region Init ////\n private constructor() {\n if (!FormatterIban.isInternalConstructing) {\n throw new TypeError('FormatterIban is not constructable')\n }\n FormatterIban.isInternalConstructing = false\n\n this._countries = new Map()\n }\n\n /**\n * @return FormatterIban\n */\n static getInstance(): FormatterIban {\n if (!FormatterIban.instance) {\n FormatterIban.isInternalConstructing = true\n FormatterIban.instance = new FormatterIban()\n }\n\n return FormatterIban.instance\n }\n\n addSpecification(IBAN: IbanSpecification): void {\n this._countries.set(IBAN.countryCode, IBAN)\n }\n\n // endregion ////\n\n // region IBAN ////\n /**\n * Check if an IBAN is valid.\n *\n * @param {string} iban the IBAN to validate.\n * @returns {boolean} true if the passed IBAN is valid, false otherwise\n */\n isValid(iban: string): boolean {\n if (!Type.isString(iban)) {\n return false\n }\n\n iban = this.electronicFormat(iban)\n const countryCode = iban.slice(0, 2)\n\n if (!this._countries.has(countryCode)) {\n throw new Error(`No country with code ${countryCode}`)\n }\n\n const countryStructure = this._countries.get(countryCode)\n\n return !!countryStructure && countryStructure.isValid(iban)\n }\n\n printFormat(iban: string, separator?: string): string {\n if (typeof separator == 'undefined') {\n separator = ' '\n }\n\n const EVERY_FOUR_CHARS = /(.{4})(?!$)/g\n\n return this.electronicFormat(iban).replace(\n EVERY_FOUR_CHARS,\n '$1' + separator\n )\n }\n\n electronicFormat(iban: string): string {\n const NON_ALPHANUM = /[^a-z0-9]/gi\n\n return iban.replace(NON_ALPHANUM, '').toUpperCase()\n }\n\n // endregion ////\n\n // region BBAN ////\n /**\n * Convert an IBAN to a BBAN.\n *\n * @param iban\n * @param {string} [separator] the separator to use between the blocks of the BBAN, defaults to ' '\n * @returns {string|*} Convert an IBAN to a BBAN.\n */\n toBBAN(iban: string, separator?: string): string {\n if (typeof separator == 'undefined') {\n separator = ' '\n }\n\n iban = this.electronicFormat(iban)\n\n const countryCode = iban.slice(0, 2)\n if (!this._countries.has(countryCode)) {\n throw new Error(`No country with code ${countryCode}`)\n }\n\n const countryStructure = this._countries.get(countryCode)\n\n if (!countryStructure) {\n throw new Error(`No country with code ${countryCode}`)\n }\n\n return countryStructure.toBBAN(iban, separator)\n }\n\n /**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that <i>\"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\"</i>.\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @param countryCode the country of the BBAN\n * @param bban the BBAN to convert to IBAN\n * @returns {string} the IBAN\n */\n fromBBAN(countryCode: string, bban: string): string {\n if (!this._countries.has(countryCode)) {\n throw new Error(`No country with code ${countryCode}`)\n }\n\n const countryStructure = this._countries.get(countryCode)\n\n if (!countryStructure) {\n throw new Error(`No country with code ${countryCode}`)\n }\n\n return countryStructure.fromBBAN(this.electronicFormat(bban))\n }\n\n /**\n * Check the validity of the passed BBAN.\n *\n * @param countryCode the country of the BBAN\n * @param bban the BBAN to check the validity of\n */\n isValidBBAN(countryCode: string, bban: string): boolean {\n if (!Type.isString(bban)) {\n return false\n }\n\n if (!this._countries.has(countryCode)) {\n throw new Error(`No country with code ${countryCode}`)\n }\n\n const countryStructure = this._countries.get(countryCode)\n\n return (\n !!countryStructure\n && countryStructure.isValidBBAN(this.electronicFormat(bban))\n )\n }\n\n // endregion ////\n}\n"],"names":["Type"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
12
|
+
|
|
13
|
+
const type = require('../type.cjs');
|
|
14
|
+
|
|
15
|
+
var __defProp = Object.defineProperty;
|
|
16
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
17
|
+
class FormatterNumbers {
|
|
18
|
+
static {
|
|
19
|
+
__name(this, "FormatterNumbers");
|
|
20
|
+
}
|
|
21
|
+
static isInternalConstructing = false;
|
|
22
|
+
static instance = null;
|
|
23
|
+
_defLocale = null;
|
|
24
|
+
constructor() {
|
|
25
|
+
if (!FormatterNumbers.isInternalConstructing) {
|
|
26
|
+
throw new TypeError("FormatterNumber is not constructable");
|
|
27
|
+
}
|
|
28
|
+
FormatterNumbers.isInternalConstructing = false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @return FormatterNumbers
|
|
32
|
+
*/
|
|
33
|
+
static getInstance() {
|
|
34
|
+
if (!FormatterNumbers.instance) {
|
|
35
|
+
FormatterNumbers.isInternalConstructing = true;
|
|
36
|
+
FormatterNumbers.instance = new FormatterNumbers();
|
|
37
|
+
}
|
|
38
|
+
return FormatterNumbers.instance;
|
|
39
|
+
}
|
|
40
|
+
setDefLocale(locale) {
|
|
41
|
+
this._defLocale = locale;
|
|
42
|
+
}
|
|
43
|
+
format(value, locale) {
|
|
44
|
+
let formatter;
|
|
45
|
+
if (typeof locale === "undefined" || !type.Type.isStringFilled(locale)) {
|
|
46
|
+
locale = type.Type.isStringFilled(this._defLocale) ? this._defLocale || "en" : typeof navigator === "undefined" ? "en" : navigator?.language || "en";
|
|
47
|
+
}
|
|
48
|
+
if (Number.isInteger(value)) {
|
|
49
|
+
formatter = new Intl.NumberFormat(locale, {
|
|
50
|
+
minimumFractionDigits: 0,
|
|
51
|
+
maximumFractionDigits: 0
|
|
52
|
+
});
|
|
53
|
+
} else {
|
|
54
|
+
formatter = new Intl.NumberFormat(locale, {
|
|
55
|
+
minimumFractionDigits: 2,
|
|
56
|
+
maximumFractionDigits: 2
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
let result = formatter.format(value);
|
|
60
|
+
if (locale.includes("ru")) {
|
|
61
|
+
result = result.replace(",", ".");
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.default = FormatterNumbers;
|
|
68
|
+
//# sourceMappingURL=numbers.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.cjs","sources":["../../../../src/tools/formatters/numbers.ts"],"sourcesContent":["import { Type } from '../type'\n\nexport default class FormatterNumbers {\n private static isInternalConstructing: boolean = false\n private static instance: FormatterNumbers | null = null\n private _defLocale: null | string = null\n private constructor() {\n if (!FormatterNumbers.isInternalConstructing) {\n throw new TypeError('FormatterNumber is not constructable')\n }\n FormatterNumbers.isInternalConstructing = false\n }\n\n /**\n * @return FormatterNumbers\n */\n static getInstance(): FormatterNumbers {\n if (!FormatterNumbers.instance) {\n FormatterNumbers.isInternalConstructing = true\n FormatterNumbers.instance = new FormatterNumbers()\n }\n return FormatterNumbers.instance\n }\n\n setDefLocale(locale: string) {\n this._defLocale = locale\n }\n\n format(value: number, locale?: string): string {\n let formatter\n if (typeof locale === 'undefined' || !Type.isStringFilled(locale)) {\n locale = Type.isStringFilled(this._defLocale)\n ? this._defLocale || 'en'\n : (\n typeof navigator === 'undefined'\n ? 'en'\n : navigator?.language || 'en'\n )\n }\n\n if (Number.isInteger(value)) {\n formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n })\n } else {\n formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n })\n }\n\n let result = formatter.format(value)\n if (locale.includes('ru')) {\n result = result.replace(',', '.')\n }\n\n return result\n }\n}\n"],"names":["Type"],"mappings":";;;;;;;;;;;;;;;;AAEA,MAAqB,gBAAA,CAAiB;AAAA,EAFtC;AAEsC,IAAA,MAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AAAA;AAAA,EACpC,OAAe,sBAAA,GAAkC,KAAA;AAAA,EACjD,OAAe,QAAA,GAAoC,IAAA;AAAA,EAC3C,UAAA,GAA4B,IAAA;AAAA,EAC5B,WAAA,GAAc;AACpB,IAAA,IAAI,CAAC,iBAAiB,sBAAA,EAAwB;AAC5C,MAAA,MAAM,IAAI,UAAU,sCAAsC,CAAA;AAAA,IAC5D;AACA,IAAA,gBAAA,CAAiB,sBAAA,GAAyB,KAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAA,GAAgC;AACrC,IAAA,IAAI,CAAC,iBAAiB,QAAA,EAAU;AAC9B,MAAA,gBAAA,CAAiB,sBAAA,GAAyB,IAAA;AAC1C,MAAA,gBAAA,CAAiB,QAAA,GAAW,IAAI,gBAAA,EAAiB;AAAA,IACnD;AACA,IAAA,OAAO,gBAAA,CAAiB,QAAA;AAAA,EAC1B;AAAA,EAEA,aAAa,MAAA,EAAgB;AAC3B,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAAA,EACpB;AAAA,EAEA,MAAA,CAAO,OAAe,MAAA,EAAyB;AAC7C,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAACA,SAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAAG;AACjE,MAAA,MAAA,GAASA,SAAA,CAAK,cAAA,CAAe,IAAA,CAAK,UAAU,CAAA,GACxC,IAAA,CAAK,UAAA,IAAc,IAAA,GAEjB,OAAO,SAAA,KAAc,WAAA,GACjB,IAAA,GACA,WAAW,QAAA,IAAY,IAAA;AAAA,IAEnC;AAEA,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC3B,MAAA,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,QACxC,qBAAA,EAAuB,CAAA;AAAA,QACvB,qBAAA,EAAuB;AAAA,OACxB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,QACxC,qBAAA,EAAuB,CAAA;AAAA,QACvB,qBAAA,EAAuB;AAAA,OACxB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,GAAS,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACnC,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,MAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
function pick(data, keys) {
|
|
14
|
+
const result = {};
|
|
15
|
+
for (const key of keys) {
|
|
16
|
+
result[key] = data[key];
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
__name(pick, "pick");
|
|
21
|
+
function omit(data, keys) {
|
|
22
|
+
const result = { ...data };
|
|
23
|
+
for (const key of keys) {
|
|
24
|
+
delete result[key];
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
__name(omit, "omit");
|
|
29
|
+
function isArrayOfArray(item) {
|
|
30
|
+
return Array.isArray(item[0]);
|
|
31
|
+
}
|
|
32
|
+
__name(isArrayOfArray, "isArrayOfArray");
|
|
33
|
+
function getEnumValue(enumObj, value) {
|
|
34
|
+
return Object.values(enumObj).includes(value) ? value : void 0;
|
|
35
|
+
}
|
|
36
|
+
__name(getEnumValue, "getEnumValue");
|
|
37
|
+
|
|
38
|
+
exports.getEnumValue = getEnumValue;
|
|
39
|
+
exports.isArrayOfArray = isArrayOfArray;
|
|
40
|
+
exports.omit = omit;
|
|
41
|
+
exports.pick = pick;
|
|
42
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/tools/index.ts"],"sourcesContent":["/**\n * @todo add docs\n */\nexport function pick<Data extends object, Keys extends keyof Data>(data: Data, keys: Keys[]): Pick<Data, Keys> {\n const result = {} as Pick<Data, Keys>\n\n for (const key of keys) {\n result[key] = data[key]\n }\n\n return result\n}\n\n/**\n * @todo add docs\n */\nexport function omit<Data extends object, Keys extends keyof Data>(data: Data, keys: Keys[]): Omit<Data, Keys> {\n const result = { ...data }\n\n for (const key of keys) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete result[key]\n }\n\n return result as Omit<Data, Keys>\n}\n\n/**\n * @todo add docs\n */\nexport function isArrayOfArray<A>(item: A[] | A[][]): item is A[][] {\n return Array.isArray(item[0])\n}\n\n/**\n * @todo add docs\n *\n * @example\n * const result = getEnumValue(EnumBizprocDocumentType, 'CCrmDocumentSmartOrder')\n */\nexport function getEnumValue<T extends Record<string, string | number>>(\n enumObj: T,\n value: string | number\n): T[keyof T] | undefined {\n return (Object.values(enumObj) as (string | number)[]).includes(value)\n ? value as T[keyof T]\n : undefined\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAGO,SAAS,IAAA,CAAmD,MAAY,IAAA,EAAgC;AAC7G,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,MAAA;AACT;AARgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAaT,SAAS,IAAA,CAAmD,MAAY,IAAA,EAAgC;AAC7G,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AAEzB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AAEtB,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AAEA,EAAA,OAAO,MAAA;AACT;AATgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAcT,SAAS,eAAkB,IAAA,EAAkC;AAClE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAC9B;AAFgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAUT,SAAS,YAAA,CACd,SACA,KAAA,EACwB;AACxB,EAAA,OAAQ,OAAO,MAAA,CAAO,OAAO,EAA0B,QAAA,CAAS,KAAK,IACjE,KAAA,GACA,MAAA;AACN;AAPgB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @package @bitrix24/b24jssdk
|
|
3
|
+
* @version 2.0.0
|
|
4
|
+
* @copyright (c) 2026 Bitrix24
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @see https://github.com/bitrix24/b24jssdk
|
|
7
|
+
* @see https://bitrix24.github.io/b24jssdk/
|
|
8
|
+
*/
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
12
|
+
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
const useScrollSize = /* @__PURE__ */ __name(() => {
|
|
16
|
+
return {
|
|
17
|
+
scrollWidth: Math.max(
|
|
18
|
+
document.documentElement.scrollWidth,
|
|
19
|
+
document.documentElement.offsetWidth
|
|
20
|
+
),
|
|
21
|
+
scrollHeight: Math.max(
|
|
22
|
+
document.documentElement.scrollHeight,
|
|
23
|
+
document.documentElement.offsetHeight
|
|
24
|
+
)
|
|
25
|
+
};
|
|
26
|
+
}, "useScrollSize");
|
|
27
|
+
|
|
28
|
+
exports.default = useScrollSize;
|
|
29
|
+
//# sourceMappingURL=scroll-size.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-size.cjs","sources":["../../../src/tools/scroll-size.ts"],"sourcesContent":["/**\n * Returns scroll info\n */\nconst useScrollSize = (): { scrollWidth: number, scrollHeight: number } => {\n return {\n scrollWidth: Math.max(\n document.documentElement.scrollWidth,\n document.documentElement.offsetWidth\n ),\n scrollHeight: Math.max(\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n )\n }\n}\n\nexport default useScrollSize\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,MAAM,gCAAgB,MAAA,CAAA,MAAqD;AACzE,EAAA,OAAO;AAAA,IACL,aAAa,IAAA,CAAK,GAAA;AAAA,MAChB,SAAS,eAAA,CAAgB,WAAA;AAAA,MACzB,SAAS,eAAA,CAAgB;AAAA,KAC3B;AAAA,IACA,cAAc,IAAA,CAAK,GAAA;AAAA,MACjB,SAAS,eAAA,CAAgB,YAAA;AAAA,MACzB,SAAS,eAAA,CAAgB;AAAA;AAC3B,GACF;AACF,CAAA,EAXsB,eAAA;;;;"}
|