diff --git a/.copyrightconfig b/.copyrightconfig new file mode 100644 index 000000000..a4fe0e9cf --- /dev/null +++ b/.copyrightconfig @@ -0,0 +1,14 @@ +# COPYRIGHT VALIDATION CONFIG +# --------------------------------- +# Required start year (keep fixed; end year auto-updates in check output) +startyear: 2015 + +# Optional exclusions list (comma-separated). Leave commented if none. +# Rules: +# - Relative paths (no leading ./) +# - Simple * wildcard only (no recursive **) +# - Use sparingly (third_party, generated, binary assets) +# - Dotfiles already skipped automatically +# Enable by removing the leading '# ' from the next line and editing values. +# filesexcluded: third_party/*, docs/generated/*.md, assets/*.png, scripts/temp_*.py, vendor/lib.js +filesexcluded: .github/*, README.md, Jenkinsfile, test-app/*, *.md, docker-compose.yaml, test-complete-app-mlDeploy/*, *.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..09aeb926e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[*.{json,yml,yaml}] +indent_size = 2 + +[*.{js,ts}] +indent_size = 2 + +[*.java] +indent_size = 4 diff --git a/.env b/.env new file mode 100644 index 000000000..f62ebfcd7 --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +# Latest 12 nightly release: +MARKLOGIC_IMAGE=ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-12 + +# Latest MarkLogic release: +# MARKLOGIC_IMAGE="progressofficial/marklogic-db:latest" + +MARKLOGIC_LOGS_VOLUME=./docker/marklogic/logs diff --git a/.github/workflows/pr-workflow.yaml b/.github/workflows/pr-workflow.yaml index f2a31ab99..9165227c1 100644 --- a/.github/workflows/pr-workflow.yaml +++ b/.github/workflows/pr-workflow.yaml @@ -1,4 +1,4 @@ -name: 🏷️ JIRA ID Validator +name: PR Workflow on: # Using pull_request_target instead of pull_request to handle PRs from forks @@ -14,3 +14,10 @@ jobs: with: # Pass the PR title from the event context pr-title: ${{ github.event.pull_request.title }} + copyright-validation: + name: © Validate Copyright Headers + uses: marklogic/pr-workflows/.github/workflows/copyright-check.yml@main + permissions: + contents: read + pull-requests: write + issues: write diff --git a/.gitignore b/.gitignore index 190c5e445..5598f2966 100644 --- a/.gitignore +++ b/.gitignore @@ -7,11 +7,15 @@ tmp .settings .vscode .DS_Store +.gradle + +docker test-app/build test-app/.gradle test-app/gradle-local.properties test-app/docker test-app/containerLogs - test-complete-app/build -test-complete-app/.gradle \ No newline at end of file +test-complete-app/.gradle +test-complete-app-mlDeploy/build +test-complete-app-mlDeploy/.gradle \ No newline at end of file diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 032b05365..000000000 --- a/.jshintrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "esversion": 6, - "node": true, - "curly": true, - "eqeqeq": true, - "eqnull": true, - "noarg": true, - "nonew": true, - "undef": true, - "unused": true -} diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/CHANGELOG.md b/CHANGELOG.md index 140b08a4f..f16562419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## 4.0.0 + +This major release does not impact any client functionality, but rather raises the minimum required version of Node.js +to 22 or higher. It also updates all dependencies to their latest version and removes unnecessary dependencies that +were included in previous releases. + ## 3.7.1 #### Bug Fix - https://github.com/marklogic/node-client-api/issues/961 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0665d992b..82d9dfcf1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ please see the README file. To run any of the steps below, first verify that you have the following available; [sdkman](https://sdkman.io/) is recommended for installing and maintaining versions of Java: -* Java 8.x +* Java 17.x You will also need to clone this repository locally and open a CLI in the root directory of the cloned project. @@ -21,7 +21,6 @@ instance available for testing. If you are able to use Docker, run the following: - cd test-app docker-compose up -d --build This will create a container with the MarkLogic service. The MarkLogic service will take a minute or two to initialize. @@ -31,7 +30,9 @@ username and password are in the docker-compose.yaml file in the /test-app direc Once the container is finished initializing, you need to deploy the test application to the MarkLogic service. While still in the test-app directory run the following gradle command. + cd test-app ./gradlew -i mlDeploy + ./gradlew -i -Penv=e2e mlLoadData mlLoadModules Once the deploy has completed successfully, use "cd .." to return to the root directory of the project. @@ -53,3 +54,110 @@ contained in either the "it" function or the "describe" function, respectively. or mocha test-basic -timeout 0 -g 'test bindParam with qualifier' + +There are also tests in the `test-complete` folder. The setup for these is more complicated and can +be found in the `Jenkinsfile` file in this repository in the `runE2ETests` function. + +## Generating documentation + +After installing the project dependencies, you can build the reference documentation locally from the root +directory of the marklogic package: + + npm run doc + +The documentation is generated in the `./doc` gitignored directory. The documentation can also be +accessed online at . + +## Explanation of overrides in package.json + +Each override is being documented here so we have some ability in the future to remove an override as needed. +These explanations have been copied from a Copilot analysis. + +braces: "3.0.3" +- Purpose: Fixes ReDoS vulnerability in brace expansion +- Affects: mocha, gulp, and test infrastructure +- Why needed: Older braces versions vulnerable to regex attacks +- CVE/Issue: CVE-2024-4068 - ReDoS vulnerability + +brace-expansion: "2.0.2" +- Purpose: Fixes ReDoS in brace expansion patterns +- Affects: minimatch → brace-expansion +- Why needed: Prevents regex denial of service attacks +- CVE/Issue: Related to minimatch vulnerabilities + +glob: "10.3.11" +- Purpose: Fixes ReDoS and security issues in file globbing +- Affects: mocha, gulp-mocha build tooling +- Why needed: Older glob versions have pattern matching vulnerabilities +- CVE/Issue: Multiple vulnerabilities in older glob versions + +glob-parent: "6.0.2" +- Purpose: Fixes ReDoS in path parsing +- Affects: Transitive dependency through glob +- Why needed: Older versions vulnerable to regex attacks +- CVE/Issue: CVE-2020-28469 - ReDoS vulnerability + +minimatch: "5.1.0" +- Purpose: Fixes ReDoS (Regular Expression Denial of Service) vulnerability +- Affects: mocha, gulp-mocha, and other build tools +- Why needed: Older minimatch versions have catastrophic backtracking vulnerability +- CVE/Issue: CVE-2022-3517 - ReDoS vulnerability + +semver: "7.5.3" +- Purpose: Fixes ReDoS in version parsing +- Affects: Multiple packages across dependency tree +- Why needed: Older semver versions have regex vulnerabilities +- CVE/Issue: CVE-2022-25883 - ReDoS vulnerability + +tar-fs: "2.1.4" +- Purpose: Fixes directory traversal vulnerability +- Affects: kerberos → prebuild-install → tar-fs +- Why needed: Older tar-fs allows extracting files outside intended directory +- CVE/Issue: CVE-2024-28861 - Path traversal + +The following are related to this npm supply chain attack - https://orca.security/resources/blog/qix-npm-attack/ . + +ansi-styles: "4.3.0" +- Purpose: Protect against supply chain attack variants +- Affects: chalk → ansi-styles, eslint toolchain + +ansi-regex: "5.0.1" +- Purpose: Protect against supply chain attack variants +- Affects: strip-ansi → ansi-regex + +chalk: "4.1.2" +- Purpose: Avoid compromised chalk 5.6.1, maintain ESLint compatibility +- Affects: eslint, mocha, gulp-mocha +- Why needed: Chalk 5.6.1 was compromised in supply chain attack. ESLint 9.x requires chalk 4.x (incompatible with chalk 5.x API) + +color-convert: "3.1.0" +- Purpose: Protect against supply chain attack variants +- Affects: ansi-styles → color-convert + +color-name: "2.0.0" +- Purpose: Protect against supply chain attack variants +- Affects: color-convert → color-name + +cross-spawn: "7.0.6" +- Purpose: Protect against supply chain attack variants +- Affects: eslint → cross-spawn + +debug: "4.3.6" +- Purpose: Protect against supply chain attack variants +- Affects: eslint, mocha, multiple packages + +supports-color: "7.2.0" +- Purpose: Protect against supply chain attack variants +- Affects: mocha, chalk + +strip-ansi: "6.0.0" +- Purpose: Protect against supply chain attack variants +- Affects: mocha, cliui in test infrastructure + +wrap-ansi: "6.2.0" +- Purpose: Protect against supply chain attack variants +- Affects: mocha → cliui → wrap-ansi + +Also, we are using @fastify/busboy because it has a forked copy of dicer that apparently does not +have the same high security vulnerability that the 0.3.1 release of dicer has. + diff --git a/Jenkinsfile b/Jenkinsfile index 490cc3960..45939b372 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,159 +1,209 @@ @Library('shared-libraries') _ -def runTests(String type,String version){ - copyRPM type,version - setUpML '$WORKSPACE/xdmp/src/Mark*.rpm' - sh ''' - export JAVA_HOME=$JAVA_HOME_DIR - export GRADLE_USER_HOME=$WORKSPACE/$GRADLE_DIR - export PATH=$JAVA_HOME/bin:$GRADLE_USER_HOME:${NODE_HOME_DIR}/bin:$PATH - cd node-client-api - node --version - npm --version - npm ci - cd test-app - ./gradlew -i mlDeploy -g $PWD - cd .. - rm -rf $WORKSPACE/*.xml || true - ./node_modules/.bin/mocha --timeout 10000 -R xunit test-basic/ --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/test-basic-reports.xml -g \'logging|archivePath\' --invert || true - ./node_modules/.bin/gulp setupProxyTests || true - ./node_modules/.bin/mocha --timeout 10000 -R xunit test-basic-proxy/lib/**/*.js --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/test-basic-proxy-reports.xml -g \'logging|archivePath\' --invert || true - ''' +def runTests() { + sh label: 'deploy-test-app-and-run-tests', script: ''' + export JAVA_HOME=$JAVA_HOME_DIR + export GRADLE_USER_HOME=$WORKSPACE/$GRADLE_DIR + export PATH=$JAVA_HOME/bin:${NODE_HOME_DIR}/bin:$PATH + cd node-client-api + node --version + npm --version + npm ci + + cd test-app + ./gradlew -i mlWaitTillReady + sleep 3 + ./gradlew -i mlWaitTillReady + ./gradlew -i mlTestConnections + ./gradlew -i mlDeploy + ./gradlew -i -Penv=e2e mlLoadData mlLoadModules + cd .. + rm -rf $WORKSPACE/*.xml || true + ./node_modules/.bin/mocha --timeout 10000 -R xunit test-basic/ --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/test-basic-reports.xml || true + ./node_modules/.bin/gulp setupProxyTests || true + ./node_modules/.bin/mocha --timeout 10000 -R xunit test-basic-proxy/lib/**/*.js --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/test-basic-proxy-reports.xml || true + ''' + junit '**/*.xml' } -def runAuditReport(){ - sh ''' - export PATH=${NODE_HOME_DIR}/bin:$PATH - cd node-client-api - npm ci - rm -rf $WORKSPACE/npm-audit-report.json || true - npm audit -json || true > $WORKSPACE/npm-audit-report.json - ''' + +def runDockerCompose(String markLogicDockerImage) { + cleanupDocker() + sh label: 'run-docker-compose', script: '''#!/bin/bash + echo "Removing any running MarkLogic server and clean up MarkLogic data directory" + sudo /usr/local/sbin/mladmin remove + docker-compose down -v || true + sudo /usr/local/sbin/mladmin cleandata + cd node-client-api + echo "Running docker compose with MarkLogic image: ''' + markLogicDockerImage + '''" + MARKLOGIC_LOGS_VOLUME=/tmp MARKLOGIC_IMAGE=''' + markLogicDockerImage + ''' docker-compose up -d --build + ''' } -def runE2ETests(String type,String version){ - copyRPM type,version - setUpML '$WORKSPACE/xdmp/src/Mark*.rpm' - sh ''' - export PATH=${NODE_HOME_DIR}/bin:$PATH - cd node-client-api - node --version - npm --version - npm ci - node etc/test-setup-qa.js - # Adding sleep for the setups to complete before running test-complete - sleep 10 - node etc/test-setup-dmsdk-qa.js - sleep 10 - node config-optic/setupqa.js - sleep 30 - cd test-complete-app - ./gradlew -i mlDeploy -g $PWD - cd .. - ./node_modules/.bin/mocha --no-parallel -R xunit --timeout 60000 test-complete/ --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/test-complete-results.xml || true - cd test-complete-proxy - npm install gulp-cli - gulp loadToModulesDB - gulp generateFnClasses - gulp copyFnClasses - # Adding sleep for the gulp commands to complete. - sleep 30 - cp *.js ../test-complete/ - cp -R ml-modules/ ../test-complete - cd ../test-complete - ../node_modules/.bin/mocha -R xunit --timeout 60000 nodejs-ds-setup-docs.js - ../node_modules/.bin/mocha -R xunit --timeout 60000 "nodejs-ds-required-params.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-required-params-results.xml || true - ../node_modules/.bin/mocha -R xunit --timeout 60000 "nodejs-ds-error-map.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-multipleWorker-results.xml || true - ../node_modules/.bin/mocha -R xunit --timeout 60000 -R xunit "nodejs-ds-multipleWorker.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-multipleWorker-results.xml || true - ../node_modules/.bin/mocha -R xunit --timeout 60000 -R xunit "nodejs-ds-transactions.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-transactions-results.js.xml || true - ../node_modules/.bin/mocha -R xunit --timeout 60000 -R xunit "nodejs-ds-dynamic.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-dynamic-results.xml || true +def teardownAfterTests() { + updateWorkspacePermissions() + sh label: 'teardown-docker', script: '''#!/bin/bash + cd node-client-api + docker-compose down -v || true ''' - junit '**/*.xml' + cleanupDocker() +} +def runAuditReport() { + sh label: 'run-audit-report', script: ''' + export PATH=${NODE_HOME_DIR}/bin:$PATH + cd node-client-api + npm ci + rm -rf $WORKSPACE/npm-audit-report.json || true + npm audit --audit-level=low --json > $WORKSPACE/npm-audit-report.json + ''' } -pipeline{ - agent none - triggers{ - parameterizedCron(env.BRANCH_NAME == "develop" ? "00 02 * * * % regressions=true" : "") - } - parameters{ - booleanParam(name: 'regressions', defaultValue: false, description: 'indicator if build is for regressions') - } - options { - checkoutToSubdirectory 'node-client-api' - buildDiscarder logRotator(artifactDaysToKeepStr: '7', artifactNumToKeepStr: '', daysToKeepStr: '7', numToKeepStr: '10') + +// For now, only failing on errors. See eslint.config.js for the lint configuration. +def runLint() { + sh label: 'run-lint', script: ''' + export PATH=${NODE_HOME_DIR}/bin:$PATH + cd node-client-api + npm ci + npm run lint -- --quiet + ''' +} + +def runE2ETests() { + sh label: 'run-e2e-tests', script: ''' + export PATH=${NODE_HOME_DIR}/bin:$PATH + cd node-client-api + node --version + npm --version + npm ci + + echo "Running test-complete tests" + ./node_modules/.bin/mocha --no-parallel -R xunit --timeout 60000 test-complete/ --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/test-complete-results.xml || true + echo "Done with test-complete tests" + + cd test-complete-proxy + npm install gulp-cli + gulp loadToModulesDB + gulp generateFnClasses + gulp copyFnClasses + cp *.js ../test-complete/ + cp -R ml-modules/ ../test-complete + cd ../test-complete + ../node_modules/.bin/mocha -R xunit --timeout 20000 nodejs-ds-setup-docs.js + ../node_modules/.bin/mocha -R xunit --timeout 20000 "nodejs-ds-required-params.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-required-params-results.xml || true + ../node_modules/.bin/mocha -R xunit --timeout 20000 "nodejs-ds-error-map.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-multipleWorker-results.xml || true + ../node_modules/.bin/mocha -R xunit --timeout 20000 "nodejs-ds-multipleWorker.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-multipleWorker-results.xml || true + ../node_modules/.bin/mocha -R xunit --timeout 20000 "nodejs-ds-transactions.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-transactions-results.js.xml || true + ../node_modules/.bin/mocha -R xunit --timeout 20000 "nodejs-ds-dynamic.js" --reporter mocha-junit-reporter --reporter-options mochaFile=$WORKSPACE/ds-dynamic-results.xml || true + ''' + junit '**/*.xml' +} + +pipeline { + agent none + + triggers { + parameterizedCron(env.BRANCH_NAME == "develop" ? "00 02 * * * % regressions=true" : "") + } + + parameters { + booleanParam(name: 'regressions', defaultValue: false, description: 'indicator if build is for regressions') + } + + options { + checkoutToSubdirectory 'node-client-api' + buildDiscarder logRotator(artifactDaysToKeepStr: '7', artifactNumToKeepStr: '', daysToKeepStr: '7', numToKeepStr: '10') + } + + environment { + NODE_HOME_DIR = "/users/ml/builder/nodeJs/node-v22.20.0-linux-x64" + DMC_USER = credentials('MLBUILD_USER') + DMC_PASSWORD = credentials('MLBUILD_PASSWORD') + GRADLE_DIR = ".gradle" + JAVA_HOME_DIR = "/home/builder/java/jdk-17.0.2" + } + + stages { + + stage('pull-request-tests') { + agent { label 'nodeclientpool' } + steps { + runAuditReport() + runLint() + runDockerCompose('ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-12') + runTests() + runE2ETests() + } + post { + always { + teardownAfterTests() + } } - environment{ - NODE_HOME_DIR= "/home/builder/nodeJs/node-v18.14.0-linux-x64" - DMC_USER = credentials('MLBUILD_USER') - DMC_PASSWORD = credentials('MLBUILD_PASSWORD') - GRADLE_DIR=".gradle" - JAVA_HOME_DIR="/home/builder/java/openjdk-1.8.0-262" } - stages{ - stage('runtests-11.3.1'){ - agent {label 'nodeclientpool'} - steps{ - runAuditReport() - runTests('Release','11.3.1') - runE2ETests('Release','11.3.1') + + stage('regressions') { + parallel { + + stage('runtests-11-nightly') { + when { + allOf { + branch 'develop' + expression { return params.regressions } + } + } + agent { label 'nodeclientpool' } + steps { + runDockerCompose('ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-11') + runTests() + runE2ETests() + } + post { + always { + teardownAfterTests() } + } } - stage('regressions'){ - parallel{ - stage('runtests-11-nightly'){ - when{ - allOf{ - branch 'develop' - expression {return params.regressions} - } - } - agent {label 'nodeclientpool'} - steps{ - runTests('Latest','11') - runE2ETests('Latest','11') - } - } - stage('runtests-12-nightly'){ - when{ - allOf{ - branch 'develop' - expression {return params.regressions} - } - } - agent {label 'nodeclientpool'} - steps{ - runTests('Latest','12.0') - runE2ETests('Latest','12.0') - } - } - stage('runtests-10-nightly'){ - when{ - allOf{ - branch 'develop' - expression {return params.regressions} - } - } - agent {label 'nodeclientpool'} - steps{ - runTests('Latest','10.0') - runE2ETests('Latest','10.0') - } - } - stage('runtests-10.0-10.2'){ - when{ - allOf{ - branch 'develop' - expression {return params.regressions} - } - } - agent {label 'nodeclientpool'} - steps{ - runTests('Release','10.0-10.2') - runE2ETests('Release','10.0-10.2') - } - } + + stage('runtests-12-nightly') { + when { + allOf { + branch 'develop' + expression { return params.regressions } + } + } + agent { label 'nodeclientpool' } + steps { + runDockerCompose('ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-12') + runTests() + runE2ETests() + } + post { + always { + teardownAfterTests() + } + } + } + + stage('runtests-10-nightly') { + when { + allOf { + branch 'develop' + expression { return params.regressions } + } + } + agent { label 'nodeclientpool' } + steps { + runDockerCompose('ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-10') + runTests() + runE2ETests() + } + post { + always { + teardownAfterTests() } + } } + } } -} \ No newline at end of file + } +} diff --git a/NOTICE.txt b/NOTICE.txt index ad7950a32..370f6d29f 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,340 +1,277 @@ -MarkLogic® Node Client API - -Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. - -This project is licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - -To the extent required by the applicable open-source license, a complete machine-readable copy of the source code corresponding to such code is available upon request. This offer is valid to anyone in receipt of this information and shall expire three years following the date of the final distribution of this product version by Progress Software Corporation. To obtain such source code, send an email to Legal-thirdpartyreview@progress.com. Please specify the product and version for which you are requesting source code. - -The following software may be included in this project (last updated January 28, 2025): - -------------------------------------------------------------------------- -MarkLogic® Node Client API -Third-Party Notices - -This document provides notices information for the third-party components used by MarkLogic® Node Client API. - -Third Party Components - - @fastify/busboy 1.2.1 (MIT) - big-integer 1.6.52 (Public Domain) - concat-stream 2.0.0 (MIT) - deepcopy 2.1.0 (MIT) - duplexify 4.1.3 (MIT) - eslint 8.57.1 (MIT) - form-data 4.0.1 (MIT) - json-text-sequence 1.0.1 (MIT) - Kerberos 2.2.1 (Apache-2.0) - multipart-stream 2.0.1 (MIT) - qs 6.14.0 (BSD-3-Clause) - through2 4.0.2 (MIT) - vinyl 3.0.0 (MIT) - www-authenticate 0.6.3 (MIT) - -Common Licenses - Apache License 2.0 (Apache-2.0) - -************************************************************ -Third-Party Components -************************************************************ - - The following is a list of the third-party components used by MarkLogic® Node Client API. - -@fastify/busboy 1.2.1 (MIT) - -https://www.npmjs.com/package/@fastify/busboy - -Copyright Brian White. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -big-integer 1.6.52 (Public Domain) - -https://www.npmjs.com/package/big-integer - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. - -In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to - -************************************************************ - -concat-stream 2.0.0 (MIT) - -https://www.npmjs.com/package/concat-stream - -The MIT License - -Copyright (c) 2013 Max Ogden - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -deepcopy 2.1.0 (MIT) - -https://www.npmjs.com/package/deepcopy - -The MIT LICENSE) - -Copyright (c) 2013 sasa+1 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -duplexify 4.1.3 (MIT) - -https://www.npmjs.com/package/duplexify - -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -eslint 8.57.1 (MIT) - -Copyright OpenJS Foundation and other contributors, - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -form-data 4.0.1 (MIT) - -https://www.npmjs.com/package/form-data - -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -json-text-sequence 1.0.1 (MIT) - -https://www.npmjs.com/package/json-text-sequence - -The MIT License (MIT) - -Copyright (c) 2014 Joe Hildebrand - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -Kerberos 2.2.1 (Apache-2.0) - -https://www.npmjs.com/package/kerberos - -For the full text of the Apache-2.0 license, see Apache License 2.0 (Apache-2.0) - -************************************************************ - -multipart-stream 2.0.1 (MIT) - -https://www.npmjs.com/package/multipart-stream - -The MIT License (MIT) - -Copyright (c) 2014 Hendrik Cech - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -qs 6.14.0 (BSD-3-Clause) - -https://www.npmjs.com/package/qs - -BSD 3-Clause License - -Copyright (c) 2014, Nathan LaFreniere and other contributors All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -************************************************************ - -through2 4.0.2 (MIT) - -https://www.npmjs.com/package/through2 - -The MIT License (MIT) - -Copyright (c) Rod Vagg (the "Original Author") and additional contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -Vinyl 3.0.0 (MIT) - -https://www.npmjs.com/package/vinyl - - -The MIT License (MIT) - -Copyright (c) 2013, 2016-2022 Blaine Bublitz and Eric Schoffstall - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -www-authenticate 0.6.3 (MIT) - -https://www.npmjs.com/package/www-authenticate - -Copyright (c) 2013 Randy McLaughlin - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -************************************************************ - -This section shows the text of common third-party licenses used by MarkLogic® Node Client API: - -Apache License 2.0 (Apache-2.0) -https://spdx.org/licenses/Apache-2.0.html - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -==================== - +Progress® MarkLogic® Node Client API + +Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. + +This project is licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +To the extent required by the applicable open-source license, a complete machine-readable copy of the source code corresponding to such code is available upon request. This offer is valid to anyone in receipt of this information and shall expire three years following the date of the final distribution of this product version by Progress Software Corporation. To obtain such source code, send an email to Legal-thirdpartyreview@progress.com. Please specify the product and version for which you are requesting source code. + +The following software may be included in this project (last updated October 29, 2025): + +------------------------------------------------------------------------- + +Progress® MarkLogic® Node Client API + +Third-Party Notices + +This document provides notices information for the third-party components used by Progress® MarkLogic® Node Client API. + +Third Party Components + + @fastify/busboy 3.2.0 (MIT) + big-integer 1.6.52 (Public Domain) + concat-stream 2.0.0 (MIT) + duplexify 4.1.3 (MIT) + form-data 4.0.4 (MIT) + json-text-sequence 4.0.2 (MIT) + multipart-stream 2.0.1 (MIT) + qs 6.14.0 (BSD-3-Clause) + through2 4.0.2 (MIT) + + +Common Licenses + + Apache License 2.0 (Apache-2.0) + +************************************************************ + +Third-Party Components + + The following is a list of the third-party components used by Progress® MarkLogic® Node Client API. + +************************************************************ + +@fastify/busboy 3.2.0 (MIT) + +https://www.npmjs.com/package/@fastify/busboy + +MIT License + +Copyright Brian White. All rights reserved. +Copyright (c) 2021-present The Fastify team + +The Fastify team members are listed at https://github.com/fastify/fastify#team. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +big-integer 1.6.52 (Public Domain) + +https://www.npmjs.com/package/big-integer + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + +In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + +************************************************************ + +concat-stream 2.0.0 (MIT) + +https://www.npmjs.com/package/concat-stream + +The MIT License + +Copyright (c) 2013 Max Ogden + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +duplexify 4.1.3 (MIT) + +https://www.npmjs.com/package/duplexify + +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +form-data 4.0.4 (MIT) + +https://www.npmjs.com/package/form-data + +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +json-text-sequence 4.0.2 (MIT) + +https://www.npmjs.com/package/json-text-sequence + +The MIT License (MIT) + +Copyright (c) 2014 Joe Hildebrand + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +multipart-stream 2.0.1 (MIT) + +https://www.npmjs.com/package/multipart-stream + +The MIT License (MIT) + +Copyright (c) 2014 Hendrik Cech + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +qs 6.14.0 (BSD-3-Clause) + +https://www.npmjs.com/package/qs + +BSD 3-Clause License + +Copyright (c) 2014, Nathan LaFreniere and other contributors All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +************************************************************ + +through2 4.0.2 (MIT) + +https://www.npmjs.com/package/through2 + +The MIT License (MIT) + +Copyright (c) Rod Vagg (the "Original Author") and additional contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************ + +This section shows the text of common third-party licenses used by Progress® MarkLogic® Node Client API: + +Apache License 2.0 (Apache-2.0) +https://spdx.org/licenses/Apache-2.0.html + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +==================== diff --git a/README.md b/README.md index 12349a65b..b604670fd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ -# MarkLogic Node.js Client API +# Progress® MarkLogic® Node Client API -The MarkLogic Node.js Client API provides access to the MarkLogic database -from Node.js applications. +The Progress® MarkLogic® Node Client API provides access to the MarkLogic database from Node.js applications. ## Features @@ -18,6 +17,19 @@ from Node.js applications. * Generate query based views, redaction on rows * Data Movement SDK - move large amounts of data into, out of, or within a MarkLogic cluster +## System Requirements + +The Node Client 4.0.0 release requires Node.js 22 or higher. Testing has verified that the client will +run successfully on Node 20, but we recommend 22 or higher based on +[the Node.js release roadmap](https://nodejs.org/en/about/previous-releases), as Node 20 enters +end-of-life in April 2026 while Node 22 is supported through April 2027. + +For Node Client 3.x releases, Node.js 16 or higher is required. + +The Node Client depends on the [MarkLogic REST API](https://docs.progress.com/bundle/marklogic-server-develop-rest-api-12/page/topics/intro.html) +for connecting to MarkLogic. The Node Client supports major versions 10, 11, and 12 of MarkLogic, though some features require +a certain version of MarkLogic due to the underlying REST API support being added in that version of MarkLogic. + ## Getting Started You can install the marklogic package as a dependency for your Node.js project @@ -51,10 +63,10 @@ const db = marklogic.createDatabaseClient({ enableGzippedResponses: true }); -// For MarkLogic Cloud +// For Progress Data Cloud const db = marklogic.createDatabaseClient({ apiKey: 'changeme', - host: 'example.beta.marklogic.com', + host: 'example.dev.progress.cloud', authType: 'cloud', // basePath is optional. basePath: '/marklogic/test', @@ -98,20 +110,9 @@ in the online resources. To run the examples, follow the instructions here: examples/1readme.txt -### Generating Documentation Locally - -After installing the project dependencies (including the [gulp](http://gulpjs.com/) -build system), you can build the reference documentation locally from the root -directory of the marklogic package: - - npm run doc - -The documentation is generated in a doc subdirectory. The documentation can also be -accessed online [here](https://docs.marklogic.com/jsdoc/index.html). - ## Support -The MarkLogic Node.js Client API is maintained by MarkLogic Engineering. +The Progress® MarkLogic® Node Client API is maintained by MarkLogic Engineering. It is designed for use in production applications with MarkLogic Server. Everyone is encouraged to file bug reports, feature requests, and pull requests through GitHub. This input is critical and will be carefully diff --git a/checkNodeVersion.js b/checkNodeVersion.js deleted file mode 100644 index d8029d258..000000000 --- a/checkNodeVersion.js +++ /dev/null @@ -1,14 +0,0 @@ -const result = process.versions; -if (result && result.node) { - const nodeVersion = parseFloat(result.node).toFixed(2); - if (nodeVersion >= 16.14) { - console.log('-------******* Good to Go with your Node Version: ' + result.node + ' *******-------'); - } else { - console.log('-------******* Package installation(npm install) or Project startup command(npm start) failed due to Node Version, Please install and use Node Version >=16.14 *******-------'); - console.log('-------******* Your current Node Version is: ' + result.node + ' *******-------'); - process.exit(1); - } -} else { - console.log('-------******* Something went wrong while checking Node version *******-------'); - process.exit(1); -} \ No newline at end of file diff --git a/config-optic/connectdef.js b/config-optic/connectdef.js index fcda29ec3..ac5c38859 100644 --- a/config-optic/connectdef.js +++ b/config-optic/connectdef.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/config-optic/databaseconfig.sjs b/config-optic/databaseconfig.sjs deleted file mode 100755 index 1648cc211..000000000 --- a/config-optic/databaseconfig.sjs +++ /dev/null @@ -1,36 +0,0 @@ -var admin = require("/MarkLogic/admin.xqy"); -var config = admin.getConfiguration(); -var dbid = xdmp.database("nodeOpticFunctionalTest"); -var modDbId = xdmp.database("nodeOpticFunctionalTestModules"); - -var cityIndex = admin.databaseRangeElementIndex("string", "", "city", "http://marklogic.com/collation/", fn.false()); -var popularityIndex = admin.databaseRangeElementIndex("int", "", "popularity", "", fn.false()); -var distanceIndex = admin.databaseRangeElementIndex("double", "", "distance", "", fn.false()); -var dateIndex = admin.databaseRangeElementIndex("date", "", "date", "", fn.false()); -var cityLexicon = admin.databaseElementWordLexicon("", "city", "http://marklogic.com/collation/"); -var geoIndex = admin.databaseGeospatialElementIndex("", "latLonPoint", "wgs84", fn.false()); -var idIndex = admin.databaseRangeElementIndex("int", "", "id", "", fn.false()); - -var cityNameIndex = admin.databaseRangeElementIndex("string", "", "cityName", "http://marklogic.com/collation/", fn.false()); -var cityTeamIndex = admin.databaseRangeElementIndex("string", "", "cityTeam", "http://marklogic.com/collation/", fn.false()); -var cityPopulationIndex = admin.databaseRangeElementIndex("long", "", "cityPopulation", "", fn.false()); - -config = admin.databaseAddRangeElementIndex(config, dbid, cityIndex); -config = admin.databaseAddRangeElementIndex(config, dbid, popularityIndex); -config = admin.databaseAddRangeElementIndex(config, dbid, distanceIndex); -config = admin.databaseAddRangeElementIndex(config, dbid, dateIndex); -config = admin.databaseAddRangeElementIndex(config, dbid, idIndex); - -config = admin.databaseAddRangeElementIndex(config, dbid, cityNameIndex); -config = admin.databaseAddRangeElementIndex(config, dbid, cityTeamIndex); -config = admin.databaseAddRangeElementIndex(config, dbid, cityPopulationIndex); - -config = admin.databaseAddElementWordLexicon(config, dbid, cityLexicon); -config = admin.databaseAddGeospatialElementIndex(config, dbid, geoIndex); -config = admin.databaseSetTripleIndex(config, dbid, fn.true()); -config = admin.databaseSetCollectionLexicon(config, dbid, fn.true()); -config = admin.databaseSetUriLexicon(config, dbid, fn.true()); - -config = admin.databaseSetSchemaDatabase(config, dbid, modDbId); - -admin.saveConfiguration(config); diff --git a/config-optic/loaddata.js b/config-optic/loaddata.js deleted file mode 100755 index 51f165806..000000000 --- a/config-optic/loaddata.js +++ /dev/null @@ -1,173 +0,0 @@ -'use strict'; - -var fs = require('fs'); - -var moduleFiles = [ - { - uri:'/optic/view/test/masterDetail.tdex', - collections:['http://marklogic.com/xdmp/tde'], - contentType:'application/vnd.marklogic-tde+xml', - content:fs.createReadStream('./config-optic/qa-data/masterDetail.tdex') - }, - { - uri:'/optic/view/test/masterDetail2.tdej', - collections:['http://marklogic.com/xdmp/tde'], - contentType:'application/vnd.marklogic-tde+json', - content:fs.createReadStream('./config-optic/qa-data/masterDetail2.tdej') - }, - { - uri:'/optic/view/test/masterDetail3.tdej', - collections:['http://marklogic.com/xdmp/tde'], - contentType:'application/vnd.marklogic-tde+json', - content:fs.createReadStream('./config-optic/qa-data/masterDetail3.tdej') - }, - { - uri:'/optic/view/test/masterDetail4.tdej', - collections:['http://marklogic.com/xdmp/tde'], - contentType:'application/vnd.marklogic-tde+json', - content:fs.createReadStream('./config-optic/qa-data/masterDetail4.tdej') - }, - { - uri:'/optic/test/mapperReducer.sjs', - contentType:'application/vnd.marklogic-javascript', - content:fs.createReadStream('./config-optic/qa-data/mapperReducer.sjs') - } -]; - -var dataFiles = [ - { - uri:'/optic/view/test/masterDetail.xml', - collections:['/optic/view/test'], - content:fs.createReadStream('./config-optic/qa-data/masterDetail.xml') - },{ - uri:'/optic/view/test/masterDetail2.json', - collections:['/optic/view/test'], - content:fs.createReadStream('./config-optic/qa-data/masterDetail2.json') - },{ - uri:'/optic/view/test/masterDetail3.json', - collections:['/optic/view/test'], - content:fs.createReadStream('./config-optic/qa-data/masterDetail3.json') - },{ - uri:'/optic/view/test/masterDetail4.json', - collections:['/optic/view/test'], - content:fs.createReadStream('./config-optic/qa-data/masterDetail4.json') - },{ - uri:'/optic/view/test/masterDetail5.json', - collections:['/optic/view/test'], - content:fs.createReadStream('./config-optic/qa-data/masterDetail5.json') - },{ - uri:'/optic/triple/test/playerTripleSet.xml', - collections:['/optic/player/triple/test'], - content:fs.createReadStream('./config-optic/qa-data/playerTripleSet.xml') - },{ - uri:'/optic/triple/test/teamTripleSet.xml', - collections:['/optic/team/triple/test'], - content:fs.createReadStream('./config-optic/qa-data/teamTripleSet.xml') - },{ - uri:'/optic/triple/test/duplicatePlayerTripleSet.xml', - collections:['/optic/player/triple/test'], - content:fs.createReadStream('./config-optic/qa-data/playerTripleSet.xml') - },{ - uri:'/optic/triple/test/duplicateTeamTripleSet.xml', - collections:['/optic/team/triple/test'], - content:fs.createReadStream('./config-optic/qa-data/teamTripleSet.xml') - },{ - uri:'/optic/triple/test/otherPlayerTripleSet.xml', - collections:['/optic/other/player/triple/test'], - content:fs.createReadStream('./config-optic/qa-data/otherPlayerTripleSet.xml') - },{ - uri:'/optic/lexicon/test/doc1.json', - collections:['/optic/lexicon/test', '/other/coll1', '/other/coll2'], - content:fs.createReadStream('./config-optic/qa-data/doc1.json') - },{ - uri:'/optic/lexicon/test/doc2.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/doc2.json') - },{ - uri:'/optic/lexicon/test/doc3.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/doc3.json') - },{ - uri:'/optic/lexicon/test/doc4.xml', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/doc4.xml') - },{ - uri:'/optic/lexicon/test/doc5.xml', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/doc5.xml') - },{ - uri:'/optic/lexicon/test/city1.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/city1.json') - },{ - uri:'/optic/lexicon/test/city2.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/city2.json') - },{ - uri:'/optic/lexicon/test/city3.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/city3.json') - },{ - uri:'/optic/lexicon/test/city4.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/city4.json') - },{ - uri:'/optic/lexicon/test/city5.json', - collections:['/optic/lexicon/test'], - content:fs.createReadStream('./config-optic/qa-data/city5.json') - },{ - uri:'/optic/plan/test/planViews.json', - collections:['/optic/plan/test'], - content:fs.createReadStream('./config-optic/qa-data/planViews.json') - },{ - uri:'/optic/plan/test/planLexicons.json', - collections:['/optic/plan/test'], - content:fs.createReadStream('./config-optic/qa-data/planLexicons.json') - },{ - uri:'/optic/plan/test/planTriples.json', - collections:['/optic/plan/test'], - content:fs.createReadStream('./config-optic/qa-data/planTriples.json') - },{ - uri:'/optic/sparql/test/dedupdoc1.xml', - collections:['/optic/plan/test'], - content:fs.createReadStream('./config-optic/qa-data/dedupdoc1.xml') - }]; - -var graphFiles1 = [ - { - uri: '/optic/sparql/test/people.ttl', - contentType: 'text/turtle', - data: fs.createReadStream('./config-optic/qa-data/people.ttl') - } -]; - -var graphFiles2 = [ - { - uri: '/optic/sparql/test/companies.ttl', - contentType: 'text/turtle', - data: fs.createReadStream('./config-optic/qa-data/companies_100.ttl') - } -]; - -function writeDocuments(db) { - return db.documents.write(dataFiles); -} - -function writeDocumentsToMod(db) { - return db.documents.write(moduleFiles); -} - -function writeGraphs1(db) { - return db.graphs.write(graphFiles1); -} - -function writeGraphs2(db) { - return db.graphs.write(graphFiles2); -} - -module.exports = { - writeDocuments: writeDocuments, - writeDocumentsToMod: writeDocumentsToMod, - writeGraphs1: writeGraphs1, - writeGraphs2: writeGraphs2 -}; diff --git a/config-optic/loadtde.xqy b/config-optic/loadtde.xqy deleted file mode 100644 index 7ad2bc38c..000000000 --- a/config-optic/loadtde.xqy +++ /dev/null @@ -1,54 +0,0 @@ -xquery version "1.0-ml"; - -let $evalStr := -' -xquery version "1.0-ml"; -xdmp:document-insert("/optic/view/test/masterDetail.tde", - , -(xdmp:permission("rest-evaluator", "update")), -"http://marklogic.com/xdmp/tde", -() -)' - -return -xdmp:eval( - $evalStr, - (), - - {xdmp:database("nodeOpticFunctionalTestModules")} - -); diff --git a/config-optic/myload.js b/config-optic/myload.js deleted file mode 100644 index 37b0df038..000000000 --- a/config-optic/myload.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var util = require('util'); - -var fs = require('fs'); - -var marklogic = require('marklogic'); -var testlib = require('./testlib.js'); - -var clientConnectdef = require('./connectdef.js'); -var testName = clientConnectdef.name; -var planServerdef = clientConnectdef.plan; - -var testLoad = require('./loaddata.js'); -var testUser = require('./userconfig.js'); - -var db = marklogic.createDatabaseClient({ - host: planServerdef.host, - port: planServerdef.port, - user: 'admin', - password: 'admin', - authType: planServerdef.authType -}); - -testLoad.writeDocuments(db); diff --git a/config-optic/qa-data/dedupdoc1.xml b/config-optic/qa-data/dedupdoc1.xml deleted file mode 100644 index 5cde4807b..000000000 --- a/config-optic/qa-data/dedupdoc1.xml +++ /dev/null @@ -1,15 +0,0 @@ - - world - - - http://marklogicsparql.com/id#5555 - http://marklogicsparql.com/addressbook#firstName - Jim - - - http://marklogicsparql.com/id#5555 - http://marklogicsparql.com/addressbook#firstName - Jim - - - \ No newline at end of file diff --git a/config-optic/setupqa.js b/config-optic/setupqa.js deleted file mode 100755 index 464fa7ddd..000000000 --- a/config-optic/setupqa.js +++ /dev/null @@ -1,113 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -'use strict'; - -var util = require('../node_modules/core-util-is/lib/util.js'); - -var fs = require('fs'); -var valcheck = require('core-util-is'); - -var marklogic = require('../lib/marklogic.js'); -var testlib = require('./testlib.js'); - -var clientConnectdef = require('./connectdef.js'); -var testName = clientConnectdef.name; -var planServerdef = clientConnectdef.plan; - -var testLoad = require('./loaddata.js'); -var testUser = require('./userconfig.js'); - -var db = marklogic.createDatabaseClient({ - host: planServerdef.host, - port: planServerdef.port, - user: 'admin', - password: 'admin', - authType: planServerdef.authType -}); -var dbMod = marklogic.createDatabaseClient({ - database: testName+'Modules', - host: planServerdef.host, - port: planServerdef.port, - user: 'admin', - password: 'admin', - authType: planServerdef.authType -}); -var manager = testlib.createManager(marklogic.createDatabaseClient({ - host: planServerdef.host, - port: 8002, - user: 'admin', - password: 'admin', - authType: planServerdef.authType - })); - -console.log('checking for '+testName); -var check = manager.get({ - endpoint: '/v1/rest-apis/'+testName - }).result(); -check.then(function(response) { - if (response.statusCode !== 404) { - return check; - } - - console.log('creating database and REST server for '+testName); - return manager.post({ - endpoint: '/v1/rest-apis', - body: { - 'rest-api': { - name: testName, - group: 'Default', - database: testName, - 'modules-database': testName+'Modules', - port: planServerdef.port - } - } - }).result(); - }) -.then(function(response){ - console.log('setting up rest eval role'); - return testUser.addRestEvalRole(manager).result(); -}) -.then(function(response){ - console.log('setting up rest reader user'); - return testUser.addRestReaderUser(manager).result(); -}) -.then(function(response){ - console.log('setting up tde template on module database'); - return testLoad.writeDocumentsToMod(dbMod).result(); -}) -.then(function(response){ - console.log('setting up sample documents'); - return testLoad.writeDocuments(db).result(); -}) -.then(function(response){ - console.log('setting up graphs1'); - return testLoad.writeGraphs1(db).result(); -}) -.then(function(response){ - console.log('setting up graphs2'); - return testLoad.writeGraphs2(db).result(); -}) -.then(function(response){ - console.log('setting up database setup file'); - return db.config.extlibs.write({ - path:'/ext/optic/test/databaseconfig.sjs', contentType:'application/javascript', source:fs.createReadStream('./config-optic/databaseconfig.sjs') - }).result(); -}) -.then(function(response) { - console.log('setting up database configuration'); - var dbEval = marklogic.createDatabaseClient({ - host: planServerdef.host, - port: planServerdef.port, - user: 'rest-evaluator', - password: 'x', - authType: planServerdef.authType - }); - return dbEval.invoke('/ext/optic/test/databaseconfig.sjs').result(); -}) -.then(function(response){ - console.log('setup done'); - }) -.catch(function(error){ - console.log(error); - }); diff --git a/config-optic/teardown.js b/config-optic/teardown.js deleted file mode 100644 index f1f050207..000000000 --- a/config-optic/teardown.js +++ /dev/null @@ -1,95 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -'use strict'; - -var util = require('../node_modules/core-util-is/lib/util.js'); - -var fs = require('fs'); -var valcheck = require('core-util-is'); - -var marklogic = require('../lib/marklogic.js'); -var testlib = require('./testlib.js'); - -var clientConnectdef = require('./connectdef.js'); -var testName = clientConnectdef.name; -var planServerdef = clientConnectdef.plan; - -var modDb = marklogic.createDatabaseClient({ - database: testName+'Modules', - host: planServerdef.host, - port: planServerdef.port, - user: 'admin', - password: 'admin', - authType: planServerdef.authType -}); -var manager = testlib.createManager(marklogic.createDatabaseClient({ - host: planServerdef.host, - port: 8002, - user: 'admin', - password: 'admin', - authType: planServerdef.authType - })); - -console.log('checking for '+testName); -manager.get({ - endpoint: '/v1/rest-apis/'+testName - }) -.result(function(response) { - if (response.statusCode === 404) { - console.log(testName+' not found - nothing to delete'); - } else { - console.log('removing database and REST server for '+testName); - manager.put({ - endpoint: '/manage/v2/databases/'+testName+'/properties', - params: { - format: 'json' - }, - body: { - 'schema-database': 'Schemas' - }, - hasResponse: true - }).result() - .then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/'+testName, - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }) - .then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/'+testName+'Modules', - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }) - .then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/users/rest-reader-optic' - }).result(); - }) - .then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/roles/rest-evaluator' - }).result(); - }) - .then(function(response) { - return manager.remove({ - endpoint: '/v1/rest-apis/'+testName, - accept: 'application/json', - params: {include: ['content', 'modules']} - }).result(); - }) - .then(function(response) { - console.log('teardown succeeded - restart the server'); - }) - .catch(function(error) { - console.log('failed to tear down '+testName+' server:\n'+ - JSON.stringify(error, null, 2)); - }); - } -}); - diff --git a/config-optic/testlib.js b/config-optic/testlib.js deleted file mode 100644 index 9e055670a..000000000 --- a/config-optic/testlib.js +++ /dev/null @@ -1,186 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -'use strict'; -var valcheck = require('../node_modules/core-util-is/lib/util.js'); - -var mlutil = require('../lib/mlutil.js'); -var Operation = require('../lib/operation.js'); -var requester = require('../lib/requester.js'); - -//CAUTION: the functions in this module are not part of the supported API and -//may change or may be removed at any time. - -function responseOutputTransform(headers, data) { - /*jshint validthis:true */ - var operation = this; - - var response = { - statusCode: operation.responseStatusCode, - headers: headers - }; - if (!valcheck.isNullOrUndefined(data)) { - response.data = data; - } - - return response; -} - -function Manager(adminClient) { - if (!(this instanceof Manager)) { - return new Manager(adminClient); - } - this.client = adminClient; -} - -// TODO: configure acceptable errors -Manager.prototype.get = function manageGet(paramsObj) { - var endpoint = paramsObj.endpoint; - var params = paramsObj.params; - var headers = paramsObj.headers; - var hasResponse = paramsObj.hasResponse; - - var path = makePath(endpoint, params); - - var requestOptions = mlutil.copyProperties(this.client.connectionParams); - requestOptions.method = 'GET'; - requestOptions.headers = valcheck.isNullOrUndefined(headers) ? { - 'Accept': 'application/json' - } : headers; - requestOptions.path = path; - - var operation = new Operation( - 'GET '+path, this.client, requestOptions, 'empty', - ((hasResponse === 'false') ? 'empty' : 'single') - ); - operation.validStatusCodes = [200, 201, 204, 404]; - operation.outputTransform = responseOutputTransform; - - return requester.startRequest(operation); -}; -Manager.prototype.post = function managePost(paramsObj) { - var endpoint = paramsObj.endpoint; - var params = paramsObj.params; - var headers = paramsObj.headers; - var body = paramsObj.body; - var hasResponse = paramsObj.hasResponse; - - var path = makePath(endpoint, params); - - var requestOptions = mlutil.copyProperties(this.client.connectionParams); - requestOptions.method = 'POST'; - requestOptions.headers = valcheck.isNullOrUndefined(headers) ? { - 'Content-Type': 'application/json', - 'Accept': 'application/json' - } : headers; - requestOptions.path = path; - - var hasBody = !valcheck.isNullOrUndefined(body); - - var operation = new Operation( - 'POST '+path, - this.client, - requestOptions, - hasBody ? 'single' : 'empty', - ((hasResponse === 'false') ? 'empty' : 'single') - ); - operation.outputTransform = responseOutputTransform; - if (hasBody) { - operation.requestBody = body; - } - - return requester.startRequest(operation); -}; -Manager.prototype.put = function managePut(paramsObj) { - var endpoint = paramsObj.endpoint; - var params = paramsObj.params; - var headers = paramsObj.headers; - var body = paramsObj.body; - var hasResponse = paramsObj.hasResponse; - - var path = makePath(endpoint, params); - - var requestOptions = mlutil.copyProperties(this.client.connectionParams); - requestOptions.method = 'PUT'; - requestOptions.headers = valcheck.isNullOrUndefined(headers) ? { - 'Content-Type': 'application/json' - } : headers; - requestOptions.path = path; - - var hasBody = !valcheck.isNullOrUndefined(body); - - var operation = new Operation( - 'PUT '+path, - this.client, - requestOptions, - hasBody ? 'single' : 'empty', - ((hasResponse === 'true') ? 'single' : 'empty') - ); - operation.outputTransform = responseOutputTransform; - if (hasBody) { - operation.requestBody = body; - } - - return requester.startRequest(operation); -}; -Manager.prototype.remove = function manageRemove(paramsObj) { - var endpoint = paramsObj.endpoint; - var params = paramsObj.params; - var headers = paramsObj.headers; - var hasResponse = paramsObj.hasResponse; - - var path = makePath(endpoint, params); - - var requestOptions = mlutil.copyProperties(this.client.connectionParams); - requestOptions.method = 'DELETE'; - requestOptions.headers = valcheck.isNullOrUndefined(headers) ? { - 'Accept': 'application/json' - } : headers; - requestOptions.path = path; - - var operation = new Operation( - 'DELETE '+path, - this.client, - requestOptions, - 'empty', - ((hasResponse === 'true') ? 'single' : 'empty') - ); - operation.outputTransform = responseOutputTransform; - - return requester.startRequest(operation); -}; - -function makePath(endpoint, params) { - var path = encodeURI(endpoint); - if (!valcheck.isNullOrUndefined(params)) { - var paramKeys = Object.keys(params); - var sep = '?'; - for (var i=0; i < paramKeys.length; i++) { - var paramKey = paramKeys[i]; - var value = params[paramKey]; - if (valcheck.isArray(value)) { - for (var j=0; j < value.length; j++) { - path += sep+paramKey+'='+encodeURIComponent(value[j]); - if (i === 0 && j === 0) { - sep = '&'; - } - } - } else { - path += sep+paramKey+'='+encodeURIComponent(value); - if (i === 0) { - sep = '&'; - } - } - } - } - - return path; -} - -function createManager(adminClient) { - return new Manager(adminClient); -}; - -module.exports = { - createManager: createManager -}; diff --git a/config-optic/userconfig.js b/config-optic/userconfig.js deleted file mode 100755 index 91674a2bf..000000000 --- a/config-optic/userconfig.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -function addRestEvalRole(manager) { - return manager.post({ - endpoint: '/manage/v2/roles', - body: { - 'role-name': 'rest-evaluator', - description: 'REST writer who can eval, invoke, or set a dynamic databases', - role: [ - 'rest-writer' - ], - privilege: [ - { - 'privilege-name': 'xdmp-eval', - action: 'http://marklogic.com/xdmp/privileges/xdmp-eval', - kind: 'execute' - }, - { - 'privilege-name': 'xdmp-eval-in', - action: 'http://marklogic.com/xdmp/privileges/xdmp-eval-in', - kind: 'execute' - }, - { - 'privilege-name': 'xdmp-invoke', - action: 'http://marklogic.com/xdmp/privileges/xdmp-invoke', - kind: 'execute' - }, - { - 'privilege-name': 'xdbc-eval', - action: 'http://marklogic.com/xdmp/privileges/xdbc-eval', - kind: 'execute' - }, - { - 'privilege-name': 'xdbc-eval-in', - action: 'http://marklogic.com/xdmp/privileges/xdbc-eval-in', - kind: 'execute' - }, - { - 'privilege-name': 'xdbc-invoke', - action: 'http://marklogic.com/xdmp/privileges/xdbc-invoke', - kind: 'execute' - }, - { - 'privilege-name': 'any-uri', - action: 'http://marklogic.com/xdmp/privileges/any-uri', - kind: 'execute' - }, - { - 'privilege-name': 'admin-module-read', - action: 'http://marklogic.com/xdmp/privileges/admin-module-read', - kind: 'execute' - }, - { - 'privilege-name': 'admin-module-write', - action: 'http://marklogic.com/xdmp/privileges/admin-module-write', - kind: 'execute' - }, - { - 'privilege-name': 'unprotected-collections', - action: 'http://marklogic.com/xdmp/privileges/unprotected-collections', - kind: 'execute' - } - ] - } - }); -} - -function addRestEvalUser(manager) { - return manager.post({ - endpoint: '/manage/v2/users', - body: { - 'user-name': 'rest-evaluator', - password: 'x', - description: 'rest-evaluator user', - role: [ - 'rest-evaluator' - ] - } - }); -} - -function addRestReaderUser(manager) { - return manager.post({ - endpoint: '/manage/v2/users', - body: { - 'user-name': 'rest-reader-optic', - password: 'x', - description: 'rest-reader user', - role: [ - 'rest-reader' - ] - } - }); -} - -module.exports = { - addRestEvalRole: addRestEvalRole, - addRestEvalUser: addRestEvalUser, - addRestReaderUser: addRestReaderUser -}; diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 000000000..c40c010d3 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,22 @@ +name: docker-tests-node-client + +services: + + marklogic: + image: "${MARKLOGIC_IMAGE}" + platform: linux/amd64 + # The NET_RAW capability allows a process to create raw sockets. Polaris does not like that. + # This setting removes the NET_RAW capability from the container. + cap_drop: + - NET_RAW + environment: + - INSTALL_CONVERTERS=true + - MARKLOGIC_INIT=true + - MARKLOGIC_ADMIN_USERNAME=admin + - MARKLOGIC_ADMIN_PASSWORD=admin + volumes: + - ${MARKLOGIC_LOGS_VOLUME}:/var/opt/MarkLogic/Logs + ports: + - 8000-8017:8000-8017 + - 8024-8029:8024-8029 + - 8079:8079 diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..a1ba8f265 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ + +// ESLint 9+ flat config +const globals = require("globals"); + +module.exports = [ + { + // Base configuration for all JS files + files: ["**/*.js"], + languageOptions: { + ecmaVersion: 2022, + sourceType: "commonjs", // Node.js uses CommonJS + globals: { + ...globals.commonjs, + ...globals.node, + ...globals.browser, // Add browser globals like setTimeout + structuredClone: "readonly", + // Legacy globals from old config + Atomics: "readonly", + SharedArrayBuffer: "readonly" + } + }, + rules: { + // Spacing and formatting + "indent": "off", // TODO: Fix indentation in separate PR + "linebreak-style": ["error", "unix"], + "quotes": ["error", "single"], + "semi": ["error", "always"], + + // Modern best practices + "eqeqeq": "warn", // TODO: Fix == vs === issues in follow-up PR + "curly": ["error", "all"], // Require braces for all control structures + "no-unused-vars": "warn", // TODO: Fix unused variables in follow-up PR + "no-undef": "error", + + // ES6+ modernization - GO TIME! 🚀 + "prefer-const": "error", // Use const for variables never reassigned + "no-var": "warn", // TODO: Fix remaining var declarations in follow-up PR + + // Spacing rules (disabled for initial setup - TODO: Fix in separate PR) + "arrow-spacing": "off", + "space-before-blocks": "off", + "space-before-function-paren": "off", + "space-in-parens": "off", + "object-curly-spacing": "off", + "keyword-spacing": "off", + "comma-spacing": "off", + "key-spacing": "off", + "space-infix-ops": "off", + + // Style rules (disabled for initial setup - TODO: Fix in separate PR) + "array-bracket-spacing": "off", + "block-spacing": "off", + "brace-style": "off", + "func-call-spacing": "off", + "no-trailing-spaces": "off", + + // Disable console errors for this project + "no-console": "off", + + // Bracket notation preference + "dot-notation": "error" + } + }, + { + // Ignore patterns + ignores: [ + "**/data/*.js", + "node_modules/**", + "coverage/**" + ] + } +]; diff --git a/etc/data/Publisher-1.xml b/etc/data/Publisher-1.xml deleted file mode 100644 index f1fe51c55..000000000 --- a/etc/data/Publisher-1.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - 123 - 5717905 -
- - 5678 - - 118 - 49 - - 1970 - 12 - 07 - - - - - The Influence of Calcium on Cholesterol in Human Serum - - - - Doe - John - - - Smith - Jane - - -
-
diff --git a/etc/data/Publisher-2.xml b/etc/data/Publisher-2.xml deleted file mode 100644 index e20d5d345..000000000 --- a/etc/data/Publisher-2.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - 456 - 5717905 -
- - 1234 - - 120 - 49 - - 1968 - 12 - 07 - - - - - The Influence of Magnesium on Cholesterol in Human Serum - - - - Doe - John - - - Smith - Jane - - -
-
diff --git a/etc/data/articleCitation.json b/etc/data/articleCitation.json deleted file mode 100644 index 288e83913..000000000 --- a/etc/data/articleCitation.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "template": { - "context": "/Citation/Article", - "rows": [ - { - "schemaName": "Medical", - "viewName": "Publications", - "columns": [ - { - "name": "ID", - "scalarType": "long", - "val": "../ID" - }, - { - "name": "ISSN", - "scalarType": "string", - "val": "Journal/ISSN" - }, - { - "name": "Volume", - "scalarType": "string", - "val": "Journal/JournalIssue/Volume" - }, - { - "name": "Date", - "scalarType": "date", - "val":"Journal/JournalIssue/PubDate/Year||'-'||Journal/JournalIssue/PubDate/Month||'-'||Journal/JournalIssue/PubDate/Day" - } - ] - } - ] - } -} diff --git a/etc/data/employees.tdej b/etc/data/employees.tdej deleted file mode 100644 index 1f9d77730..000000000 --- a/etc/data/employees.tdej +++ /dev/null @@ -1,28 +0,0 @@ -{ - "template":{ - "context":"/Employee", - "rows":[ - { - "schemaName":"company", - "viewName":"employees", - "columns":[ - { - "name":"EmployeeID", - "scalarType":"int", - "val":"ID" - }, - { - "name":"FirstName", - "scalarType":"string", - "val":"FirstName" - }, - { - "name":"LastName", - "scalarType":"string", - "val":"LastName" - } - ] - } - ] - } -} diff --git a/etc/data/masterDetail.tdex b/etc/data/masterDetail.tdex deleted file mode 100644 index 2e593c9fc..000000000 --- a/etc/data/masterDetail.tdex +++ /dev/null @@ -1,37 +0,0 @@ - - - diff --git a/etc/data/masterDetail.xml b/etc/data/masterDetail.xml deleted file mode 100644 index cd217d2a4..000000000 --- a/etc/data/masterDetail.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 1Master 12015-12-01 - 2Master 22015-12-02 - - - 1Detail 1110.01blue - 2Detail 2220.02blue - 3Detail 3130.03blue - 4Detail 4240.04green - 5Detail 5150.05green - 6Detail 6260.06green - - diff --git a/etc/data/musician.tdex b/etc/data/musician.tdex deleted file mode 100644 index 4e2c2390a..000000000 --- a/etc/data/musician.tdex +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/etc/data/rowPostProcessors.sjs b/etc/data/rowPostProcessors.sjs deleted file mode 100644 index 3fcd473f5..000000000 --- a/etc/data/rowPostProcessors.sjs +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2020 MarkLogic Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -function arrayMapper(row) { - const result = row.concat(); - result.push((typeof result[0] === 'string') ? 'seconds' : - fn.floor(fn.secondsFromDateTime(fn.currentDateTime())) - ); - return result; -} -function arrayReducer(previous, row) { - const val = (previous === void 0) ? 0 : previous + row[0]; - return val; -} -function secondsMapper(row) { - row.seconds = new Date().getSeconds(); - return row; -} -function fibReducer(previous, row) { - const i = Array.isArray(previous) ? previous.length : 0; - - row.i = i; - - switch(i) { - case 0: - row.fib = 0; - break; - case 1: - row.fib = 1; - break; - default: - row.fib = previous[i - 2].fib + previous[i - 1].fib; - break; - } - - if (i === 0) { - previous = [row]; - } else { - previous.push(row); - } - - return previous; -} - -module.exports = { - arrayMapper: arrayMapper, - arrayReducer: arrayReducer, - secondsMapper: secondsMapper, - fibReducer: fibReducer -}; diff --git a/etc/data/transformDoc-test-two-params.mjs b/etc/data/transformDoc-test-two-params.mjs deleted file mode 100644 index 2361a8442..000000000 --- a/etc/data/transformDoc-test-two-params.mjs +++ /dev/null @@ -1,5 +0,0 @@ -const result = {"hello": "world", - "Patch1": external.patch1, - "Patch2": external.patch2, - "theDoc": external.doc} -result diff --git a/etc/data/transformDoc-test.mjs b/etc/data/transformDoc-test.mjs deleted file mode 100644 index 86d20bd63..000000000 --- a/etc/data/transformDoc-test.mjs +++ /dev/null @@ -1,6 +0,0 @@ -const result = { - "hello": "world", - "yourParam": external.myParam, - "theDoc": external.doc -} -result diff --git a/etc/data/transformDoc-test.xslt b/etc/data/transformDoc-test.xslt deleted file mode 100644 index bded83354..000000000 --- a/etc/data/transformDoc-test.xslt +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - world - - - - diff --git a/etc/data/tripleSets.xml b/etc/data/tripleSets.xml deleted file mode 100644 index f298b476a..000000000 --- a/etc/data/tripleSets.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - /datastore/id#A - http://purl.org/dc/terms/title - The A datastore - - /datastore/id#A - http://purl.org/dc/terms/type - http://purl.org/dc/dcmitype/Dataset - - /datastore/id#A - http://purl.org/dc/terms/description - Describing A - - /datastore/id#A - http://purl.org/dc/terms/alternative - The Awesome datastore - - /datastore/id#B - http://purl.org/dc/terms/title - The B datastore - - /datastore/id#B - http://purl.org/dc/terms/type - http://purl.org/dc/dcmitype/Dataset - - /datastore/id#B - http://purl.org/dc/terms/description - Describing B - - /datastore/id#B - http://purl.org/dc/terms/modified - 2015-12-14 - - /master/id#1 - http://purl.org/dc/terms/identifier - 1 - - /master/id#1 - http://purl.org/dc/terms/source - /datastore/id#A - - /master/id#1 - http://purl.org/dc/terms/description - First description - - /master/id#2 - http://purl.org/dc/terms/identifier - 2 - - /master/id#2 - http://purl.org/dc/terms/source - /datastore/id#B - - /master/id#2 - http://purl.org/dc/terms/description - Second description - - - diff --git a/etc/data/unnestView.tdej b/etc/data/unnestView.tdej deleted file mode 100644 index 4d45bfc8a..000000000 --- a/etc/data/unnestView.tdej +++ /dev/null @@ -1,27 +0,0 @@ -{ - "template": { - "context": "office", - "rows": [ - { - "schemaName": "unnestSchema", - "viewName": "unnestView", - "columns": [ - { - "name": "department", - "scalarType": "string", - "val": "department", - "nullable": true, - "invalidValues": "ignore" - }, - { - "name": "teamMembers", - "scalarType": "string", - "val": "teamMembers", - "nullable": true, - "invalidValues": "ignore" - } - ] - } - ] - } -} \ No newline at end of file diff --git a/etc/data/validateDoc-test.json b/etc/data/validateDoc-test.json deleted file mode 100644 index dc66b8443..000000000 --- a/etc/data/validateDoc-test.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "language": "zxx", - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "count": { "type":"integer", "minimum":0 }, - "items": { "type":"array", "items": {"type":"string", "minLength":1 } } - } -} \ No newline at end of file diff --git a/etc/data/validateDoc-test.sch b/etc/data/validateDoc-test.sch deleted file mode 100644 index 1ac06d7b3..000000000 --- a/etc/data/validateDoc-test.sch +++ /dev/null @@ -1,36 +0,0 @@ - -user-validation - - - - - - - - - user element must have an id attribute - - user element must have 5 child elements: name, gender, - age, score and result - - score element must have a total attribute - score element must have two child elements - - - - - - total score must be a sum of test-1 and test-2 scores - - - if the score is greater than 30 then the result will be - 'pass' else 'fail' - - - - -the score does not match with the result - - \ No newline at end of file diff --git a/etc/data/validateDoc-test.sch-validator.xsl b/etc/data/validateDoc-test.sch-validator.xsl deleted file mode 100644 index 360ca1b3b..000000000 --- a/etc/data/validateDoc-test.sch-validator.xsl +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - /[]/@ - - - /[]/@ - - - - - - - . - - U - U - U.n - U.__ - - - - - - - structuralstructuralco-occurenceco-occurence - - user-validation - - - - - - - - user element must have an id attribute - - - - - - - user element must have 5 child elements: name, gender, - age, score and result - - - - - - - score element must have a total attribute - - - - - - score element must have two child elements - - - - - - - - - - - - total score must be a sum of test-1 and test-2 scores - - - - - - - - if the score is greater than 30 then the result will be - 'pass' else 'fail' - - the score does not match with the result - - - - diff --git a/etc/test-config-qa-ssl.js b/etc/test-config-qa-ssl.js index e3d88aa02..ff65507c3 100644 --- a/etc/test-config-qa-ssl.js +++ b/etc/test-config-qa-ssl.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var testHost = 'localhost'; diff --git a/etc/test-config-qa.js b/etc/test-config-qa.js index a32ebfb6d..e4aaa1409 100644 --- a/etc/test-config-qa.js +++ b/etc/test-config-qa.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var testHost = 'localhost'; diff --git a/etc/test-config.js b/etc/test-config.js index 193dc0365..3ceda5f28 100644 --- a/etc/test-config.js +++ b/etc/test-config.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ let testHost = 'localhost'; diff --git a/etc/test-lib.js b/etc/test-lib.js index 5f09262b3..78ebfd7ac 100644 --- a/etc/test-lib.js +++ b/etc/test-lib.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; var valcheck = require('core-util-is'); diff --git a/etc/test-setup-dmsdk-qa.js b/etc/test-setup-dmsdk-qa.js deleted file mode 100644 index ad4e8c2c6..000000000 --- a/etc/test-setup-dmsdk-qa.js +++ /dev/null @@ -1,410 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var valcheck = require('core-util-is'); - -var marklogic = require('../lib/marklogic.js'); - -//var promptForAdmin = require('./test-setup-prompt.js'); -var setupUsers = require('./test-setup-users.js'); - -var testlib = require('./test-lib.js'); -var testconfig = require('./test-config-qa.js'); - -//promptForAdmin(createManager); -createManager('admin', 'admin'); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setup(manager); -} -function createAxis(manager, name) { - return manager.post({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/temporal/axes', - body: { - 'axis-name': name+'Time', - 'axis-start': { - 'element-reference': { - 'namespace-uri': '', - 'localname': name+'StartTime', - 'scalar-type': 'dateTime' - } - }, - 'axis-end': { - 'element-reference': { - 'namespace-uri': '', - 'localname': name+'EndTime', - 'scalar-type': 'dateTime' - } - } - } - }).result(); -} -function setup(manager) { - console.log('checking for '+testconfig.dmsdktestServerName); - manager.get({ - endpoint: '/v1/rest-apis/'+testconfig.dmsdktestServerName - }). - result(function(response) { - if (response.statusCode === 404) { - console.log('creating database and REST server for '+testconfig.dmsdktestServerName); - manager.post({ - endpoint: '/v1/rest-apis', - body: { - 'rest-api': { - name: testconfig.dmsdktestServerName, - group: 'Default', - database: testconfig.dmsdktestServerName, - 'modules-database': testconfig.dmsdktestServerName+'-modules', - port: testconfig.dmsdkrestPort - } - } - }). - result(function(response) { - if (response.statusCode === 201) { - console.log('getting default indexes for '+testconfig.dmsdktestServerName); - manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/properties' - }).result(). - then(function(response) { - var indexName = null; - var indexType = null; - var indexdef = null; - var i = null; - - var elementWordLexicon = response.data['element-word-lexicon']; - var lexiconTest = { - defaultWordKey: true, - taggedWordKey: true, - otherKey: true - }; - - var lexers = []; - if (valcheck.isNullOrUndefined(elementWordLexicon)) { - elementWordLexicon = []; - lexers = Object.keys(lexiconTest); - } else { - elementWordLexicon.forEach(function(index){ - indexName = index.localname; - if (!valcheck.isUndefined(lexiconTest[indexName])) { - lexiconTest[indexName] = false; - } - }); - lexers = Object.keys(lexiconTest).filter(function(indexName){ - return (lexiconTest[indexName] !== false); - }); - } - - for (i=0; i < lexers.length; i++) { - indexName = lexers[i]; - indexdef = { - collation: 'http://marklogic.com/collation/', - 'namespace-uri': '', - localname: indexName, - }; - elementWordLexicon.push(indexdef); - } - - var rangeElementIndex = response.data['range-element-index']; - - var rangeTest = { - rangeKey1: 'string', - rangeKey2: 'string', - rangeKey3: 'int', - rangeKey4: 'int', - systemStartTime: 'dateTime', - systemEndTime: 'dateTime', - validStartTime: 'dateTime', - validEndTime: 'dateTime', - popularity: 'int', - amt: 'double', - score: 'double', - rate: 'int', - datetime: 'dateTime' - }; - var rangers = []; - if (valcheck.isNullOrUndefined(rangeElementIndex)) { - rangeElementIndex = []; - rangers = Object.keys(rangeTest); - } else { - rangeElementIndex.forEach(function(index){ - indexName = index.localname; - if (!valcheck.isUndefined(rangeTest[indexName])) { - rangeTest[indexName] = false; - } - }); - rangers = Object.keys(rangeTest).filter(function(indexName){ - return (rangeTest[indexName] !== false); - }); - } - - for (i=0; i < rangers.length; i++) { - indexName = rangers[i]; - indexType = rangeTest[indexName]; - indexdef = { - 'scalar-type': indexType, - collation: (indexType === 'string') ? - 'http://marklogic.com/collation/' : '', - 'namespace-uri': '', - localname: indexName, - 'range-value-positions': false, - 'invalid-values': 'ignore' - }; - rangeElementIndex.push(indexdef); - } - var body = { - 'collection-lexicon': true, - 'triple-index': true, - 'schema-database': testconfig.dmsdktestServerName+'-modules', - 'merge-timestamp': -6000000000, - 'range-path-index': [ - { - 'scalar-type': 'decimal', - 'path-expression': 'price/amt', - collation: '', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-path-index': [ - { - 'path-expression': 'gElemChildParent/gElemChildPoint', - 'coordinate-system': 'wgs84', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-index' : [ - { - 'namespace-uri': '', - localname: 'gElemPoint', - 'coordinate-system': 'wgs84', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - }, - { - 'namespace-uri': '', - localname: 'gElemPointWgs84Double', - 'coordinate-system': 'wgs84/double', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-child-index': [ - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemChildParent', - 'namespace-uri': '', - localname: 'gElemChildPoint', - 'coordinate-system': 'wgs84', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - }, - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemChildParentEtrs89Double', - 'namespace-uri': '', - localname: 'gElemChildPointEtrs89Double', - 'coordinate-system': 'etrs89/double', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-pair-index': [ - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemPair', - 'latitude-namespace-uri': '', - 'latitude-localname': 'latitude', - 'longitude-namespace-uri': '', - 'longitude-localname': 'longitude', - 'coordinate-system': 'wgs84', - 'range-value-positions': false, - 'invalid-values': 'reject' - }, - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemPairRawDouble', - 'latitude-namespace-uri': '', - 'latitude-localname': 'latitudeRawDouble', - 'longitude-namespace-uri': '', - 'longitude-localname': 'longitudeRawDouble', - 'coordinate-system': 'raw/double', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-attribute-pair-index': [ - { - 'parent-namespace-uri': '', - 'parent-localname': 'gAttrPair', - 'latitude-namespace-uri': '', - 'latitude-localname': 'latitude', - 'longitude-namespace-uri': '', - 'longitude-localname': 'longitude', - 'coordinate-system': 'wgs84', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-region-path-index': [ - { - 'path-expression': '/root/item/point', - 'coordinate-system': 'wgs84', - 'geohash-precision': 1, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/linestring', - 'coordinate-system': 'wgs84/double', - 'geohash-precision': 2, - 'invalid-values': 'ignore' - }, - { - 'path-expression': '/root/item/circle', - 'coordinate-system': 'wgs84/double', - 'geohash-precision': 1, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/circle', - 'coordinate-system': 'wgs84', - 'geohash-precision': 1, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/box', - 'coordinate-system': 'wgs84/double', - 'geohash-precision': 2, - 'invalid-values': 'ignore' - }, - { - 'path-expression': '/root/item/polygon', - 'coordinate-system': 'wgs84', - 'geohash-precision': 3, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/complex-polygon', - 'coordinate-system': 'wgs84', - 'geohash-precision': 1, - 'invalid-values': 'ignore' - } - ] - }; - if (valcheck.isArray(elementWordLexicon) && elementWordLexicon.length > 0) { - body['element-word-lexicon'] = elementWordLexicon; - } - if (valcheck.isArray(rangeElementIndex) && rangeElementIndex.length > 0) { - body['range-element-index'] = rangeElementIndex; - } - - console.log('adding custom indexes for '+testconfig.dmsdktestServerName); - return manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/properties', - params: { - format: 'json' - }, - body: body, - hasResponse: true - }).result(); - }). - then(function(response) { - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/temporal/axes/systemTime' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - return createAxis(manager, 'system'); - }). - then(function(response) { - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/temporal/axes/validTime' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - return createAxis(manager, 'valid'); - }). - then(function(response) { - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+ - '/temporal/collections/temporalCollection' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - return manager.post({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/temporal/collections', - body: { - 'collection-name': 'temporalCollection', - 'system-axis': 'systemTime', - 'valid-axis': 'validTime', - 'option': ['updates-safe'] - } - }).result(); - }). - then(function(response) { - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+ - '/temporal/collections/temporalCollectionLsqt' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - return manager.post({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+ - '/temporal/collections', - body: { - 'collection-name': 'temporalCollectionLsqt', - 'system-axis': 'systemTime', - 'valid-axis': 'validTime', - 'option': ['updates-safe'] - } - }).result(); - }). - then(function(response) { - return manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/temporal/collections/lsqt/properties?collection=temporalCollectionLsqt', - body: { - "lsqt-enabled": true, - "automation": { - "enabled": true - } - } - }).result(); - }). - then(function(response) { - console.log(testconfig.dmsdktestServerName+' setup succeeded'); - }); - } else { - console.log(testconfig.dmsdktestServerName+' setup failed with HTTP status: '+response.statusCode); - console.log(response.data); - } - }); - } else { - console.log(testconfig.dmsdktestServerName+' test server is available on port '+ - JSON.parse(response.data).port); - } - }); -} diff --git a/etc/test-setup-prompt.js b/etc/test-setup-prompt.js index f6fe5ffbe..9158b9081 100644 --- a/etc/test-setup-prompt.js +++ b/etc/test-setup-prompt.js @@ -1,108 +1,11 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var read = require("read"); -var mlutil = require('../lib/mlutil.js'); - -function adminUserPrompt() { - var self = this; - if (self.user === null) { - read({ - prompt: 'admin user (default=admin): ' - }, - mlutil.callbackOn(self, adminUserCallback) - ); - } else { - self.passwordPrompt(); - } -} -function adminUserCallback(error, result) { - if (error) { - console.log(error); - process.exit(1); - } - this.user = (result === '') ? 'admin' : result; - this.passwordPrompt(); -} -function adminPasswordPrompt() { - var self = this; - if (self.password === null) { - read({ - prompt: (self.user === 'admin') ? - 'admin password (default=admin): ' : 'admin password: ', - silent: true, - replace: '*', - edit: false - }, - mlutil.callbackOn(self, adminPasswordCallback) - ); - } else { - self.finish(); - } -} -function adminPasswordCallback(error, result) { - if (error) { - console.log(error); - process.exit(1); - } - if (result === '') { - if (this.user === 'admin') { - this.password = 'admin'; - } else { - console.log('no admin password specified, so cannot setup'); - process.exit(1); - } - } else { - this.password = result; - } - this.finish(); -} -function adminFinish() { - this.done(this.user, this.password); -} - -function AdminPrompter(done) { - this.done = done; - this.user = null; - this.password = null; -} -AdminPrompter.prototype.userPrompt = adminUserPrompt; -AdminPrompter.prototype.userCallback = adminUserCallback; -AdminPrompter.prototype.passwordPrompt = adminPasswordPrompt; -AdminPrompter.prototype.passwordCallback = adminPasswordCallback; -AdminPrompter.prototype.finish = adminFinish; function promptForAdmin(done) { - var prompter = new AdminPrompter(done); - - var argvLen = process.argv.length; - if (argvLen >= 4) { - var argvMax = argvLen - 1; - for (var argvI=2; argvI < argvMax; argvI++) { - var argvVal = process.argv[argvI]; - if (argvVal === '-u') { - argvVal = process.argv[argvI + 1]; - var argvSep = argvVal.indexOf(':'); - if (argvSep < 0) { - prompter.user = argvVal; - break; - } - if (argvSep > 0) { - prompter.user = argvVal.substring(0, argvSep); - } - if (argvSep < (argvVal.length - 1)) { - prompter.password = argvVal.substring(argvSep + 1); - } - break; - } else if (argvVal === '-h') { - console.log('usage: '+process.argv[1]+' [-u adminUser:adminPassword]'); - console.log('without -u, prompts for admin user and/or admin password'); - process.exit(); - } - }; - } - - prompter.userPrompt(); + // Always use admin/admin - no prompting needed + console.log('Using default admin credentials (admin/admin)'); + done('admin', 'admin'); } module.exports = promptForAdmin; diff --git a/etc/test-setup-qa.js b/etc/test-setup-qa.js deleted file mode 100644 index 34c28184e..000000000 --- a/etc/test-setup-qa.js +++ /dev/null @@ -1,410 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var valcheck = require('core-util-is'); - -var marklogic = require('../lib/marklogic.js'); - -//var promptForAdmin = require('./test-setup-prompt.js'); -var setupUsers = require('./test-setup-users.js'); - -var testlib = require('./test-lib.js'); -var testconfig = require('./test-config-qa.js'); - -//promptForAdmin(createManager); -createManager('admin', 'admin'); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setupUsers(manager, setup); -} -function createAxis(manager, name) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/temporal/axes', - body: { - 'axis-name': name + 'Time', - 'axis-start': { - 'element-reference': { - 'namespace-uri': '', - 'localname': name + 'StartTime', - 'scalar-type': 'dateTime' - } - }, - 'axis-end': { - 'element-reference': { - 'namespace-uri': '', - 'localname': name + 'EndTime', - 'scalar-type': 'dateTime' - } - } - } - }).result(); -} -function setup(manager) { - console.log('checking for ' + testconfig.testServerName); - manager.get({ - endpoint: '/v1/rest-apis/' + testconfig.testServerName - }). - result(function (response) { - if (response.statusCode === 404) { - console.log('creating database and REST server for ' + testconfig.testServerName); - manager.post({ - endpoint: '/v1/rest-apis', - body: { - 'rest-api': { - name: testconfig.testServerName, - group: 'Default', - database: testconfig.testServerName, - 'modules-database': testconfig.testServerName + '-modules', - port: testconfig.restPort - } - } - }). - result(function (response) { - if (response.statusCode === 201) { - console.log('getting default indexes for ' + testconfig.testServerName); - manager.get({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/properties' - }).result(). - then(function (response) { - var indexName = null; - var indexType = null; - var indexdef = null; - var i = null; - - var elementWordLexicon = response.data['element-word-lexicon']; - var lexiconTest = { - defaultWordKey: true, - taggedWordKey: true, - otherKey: true - }; - - var lexers = []; - if (valcheck.isNullOrUndefined(elementWordLexicon)) { - elementWordLexicon = []; - lexers = Object.keys(lexiconTest); - } else { - elementWordLexicon.forEach(function (index) { - indexName = index.localname; - if (!valcheck.isUndefined(lexiconTest[indexName])) { - lexiconTest[indexName] = false; - } - }); - lexers = Object.keys(lexiconTest).filter(function (indexName) { - return (lexiconTest[indexName] !== false); - }); - } - - for (i = 0; i < lexers.length; i++) { - indexName = lexers[i]; - indexdef = { - collation: 'http://marklogic.com/collation/', - 'namespace-uri': '', - localname: indexName, - }; - elementWordLexicon.push(indexdef); - } - - var rangeElementIndex = response.data['range-element-index']; - - var rangeTest = { - rangeKey1: 'string', - rangeKey2: 'string', - rangeKey3: 'int', - rangeKey4: 'int', - systemStartTime: 'dateTime', - systemEndTime: 'dateTime', - validStartTime: 'dateTime', - validEndTime: 'dateTime', - popularity: 'int', - amt: 'double', - score: 'double', - rate: 'int', - datetime: 'dateTime' - }; - var rangers = []; - if (valcheck.isNullOrUndefined(rangeElementIndex)) { - rangeElementIndex = []; - rangers = Object.keys(rangeTest); - } else { - rangeElementIndex.forEach(function (index) { - indexName = index.localname; - if (!valcheck.isUndefined(rangeTest[indexName])) { - rangeTest[indexName] = false; - } - }); - rangers = Object.keys(rangeTest).filter(function (indexName) { - return (rangeTest[indexName] !== false); - }); - } - - for (i = 0; i < rangers.length; i++) { - indexName = rangers[i]; - indexType = rangeTest[indexName]; - indexdef = { - 'scalar-type': indexType, - collation: (indexType === 'string') ? - 'http://marklogic.com/collation/' : '', - 'namespace-uri': '', - localname: indexName, - 'range-value-positions': false, - 'invalid-values': 'ignore' - }; - rangeElementIndex.push(indexdef); - } - var body = { - 'collection-lexicon': true, - 'triple-index': true, - 'schema-database': testconfig.testServerName + '-modules', - 'stemmed-searches': 'basic', - 'range-path-index': [ - { - 'scalar-type': 'decimal', - 'path-expression': 'price/amt', - collation: '', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-path-index': [ - { - 'path-expression': 'gElemChildParent/gElemChildPoint', - 'coordinate-system': 'wgs84', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-index': [ - { - 'namespace-uri': '', - localname: 'gElemPoint', - 'coordinate-system': 'wgs84', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - }, - { - 'namespace-uri': '', - localname: 'gElemPointWgs84Double', - 'coordinate-system': 'wgs84/double', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-child-index': [ - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemChildParent', - 'namespace-uri': '', - localname: 'gElemChildPoint', - 'coordinate-system': 'wgs84', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - }, - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemChildParentEtrs89Double', - 'namespace-uri': '', - localname: 'gElemChildPointEtrs89Double', - 'coordinate-system': 'etrs89/double', - 'point-format': 'point', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-pair-index': [ - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemPair', - 'latitude-namespace-uri': '', - 'latitude-localname': 'latitude', - 'longitude-namespace-uri': '', - 'longitude-localname': 'longitude', - 'coordinate-system': 'wgs84', - 'range-value-positions': false, - 'invalid-values': 'reject' - }, - { - 'parent-namespace-uri': '', - 'parent-localname': 'gElemPairRawDouble', - 'latitude-namespace-uri': '', - 'latitude-localname': 'latitudeRawDouble', - 'longitude-namespace-uri': '', - 'longitude-localname': 'longitudeRawDouble', - 'coordinate-system': 'raw/double', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-element-attribute-pair-index': [ - { - 'parent-namespace-uri': '', - 'parent-localname': 'gAttrPair', - 'latitude-namespace-uri': '', - 'latitude-localname': 'latitude', - 'longitude-namespace-uri': '', - 'longitude-localname': 'longitude', - 'coordinate-system': 'wgs84', - 'range-value-positions': false, - 'invalid-values': 'reject' - } - ], - 'geospatial-region-path-index': [ - { - 'path-expression': '/root/item/point', - 'coordinate-system': 'wgs84', - 'geohash-precision': 1, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/linestring', - 'coordinate-system': 'wgs84/double', - 'geohash-precision': 2, - 'invalid-values': 'ignore' - }, - { - 'path-expression': '/root/item/circle', - 'coordinate-system': 'wgs84/double', - 'geohash-precision': 1, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/circle', - 'coordinate-system': 'wgs84', - 'geohash-precision': 1, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/box', - 'coordinate-system': 'wgs84/double', - 'geohash-precision': 2, - 'invalid-values': 'ignore' - }, - { - 'path-expression': '/root/item/polygon', - 'coordinate-system': 'wgs84', - 'geohash-precision': 3, - 'invalid-values': 'reject' - }, - { - 'path-expression': '/root/item/complex-polygon', - 'coordinate-system': 'wgs84', - 'geohash-precision': 1, - 'invalid-values': 'ignore' - } - ] - }; - if (valcheck.isArray(elementWordLexicon) && elementWordLexicon.length > 0) { - body['element-word-lexicon'] = elementWordLexicon; - } - if (valcheck.isArray(rangeElementIndex) && rangeElementIndex.length > 0) { - body['range-element-index'] = rangeElementIndex; - } - - console.log('adding custom indexes for ' + testconfig.testServerName); - return manager.put({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/properties', - params: { - format: 'json' - }, - body: body, - hasResponse: true - }).result(); - }). - then(function (response) { - return manager.get({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/temporal/axes/systemTime' - }).result(); - }). - then(function (response) { - if (response.statusCode < 400) { - return this; - } - return createAxis(manager, 'system'); - }). - then(function (response) { - return manager.get({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/temporal/axes/validTime' - }).result(); - }). - then(function (response) { - if (response.statusCode < 400) { - return this; - } - return createAxis(manager, 'valid'); - }). - then(function (response) { - return manager.get({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + - '/temporal/collections/temporalCollection' - }).result(); - }). - then(function (response) { - if (response.statusCode < 400) { - return this; - } - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/temporal/collections', - body: { - 'collection-name': 'temporalCollection', - 'system-axis': 'systemTime', - 'valid-axis': 'validTime', - 'option': ['updates-safe'] - } - }).result(); - }). - then(function (response) { - return manager.get({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + - '/temporal/collections/temporalCollectionLsqt' - }).result(); - }). - then(function (response) { - if (response.statusCode < 400) { - return this; - } - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + - '/temporal/collections', - body: { - 'collection-name': 'temporalCollectionLsqt', - 'system-axis': 'systemTime', - 'valid-axis': 'validTime', - 'option': ['updates-safe'] - } - }).result(); - }). - then(function (response) { - return manager.put({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName + '/temporal/collections/lsqt/properties?collection=temporalCollectionLsqt', - body: { - 'lsqt-enabled': true, - 'automation': { - 'enabled': true - } - } - }).result(); - }). - then(function (response) { - console.log(testconfig.testServerName + ' setup succeeded'); - }); - } else { - console.log(testconfig.testServerName + ' setup failed with HTTP status: ' + response.statusCode); - console.log(response.data); - } - }); - } else { - console.log(testconfig.testServerName + ' test server is available on port ' + - JSON.parse(response.data).port); - } - }); -} diff --git a/etc/test-setup-users.js b/etc/test-setup-users.js index 5f14f1e97..87d8c7fd7 100644 --- a/etc/test-setup-users.js +++ b/etc/test-setup-users.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var valcheck = require('core-util-is'); diff --git a/etc/test-setup.js b/etc/test-setup.js deleted file mode 100644 index 6885b2104..000000000 --- a/etc/test-setup.js +++ /dev/null @@ -1,626 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -const fs = require('fs'); -const valcheck = require('core-util-is'); -const marklogic = require('../lib/marklogic.js'); - -const promptForAdmin = require('./test-setup-prompt.js'); -const setupUsers = require('./test-setup-users.js'); - -const testlib = require('./test-lib.js'); -const testconfig = require('./test-config.js'); - -const moduleFiles = [ - { - uri:'/optic/test/masterDetail.tdex', - collections:['http://marklogic.com/xdmp/tde'], - contentType:'application/vnd.marklogic-tde+xml', - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'update']} - ], - content:fs.createReadStream('./etc/data/masterDetail.tdex') - },{ - uri:'/optic/test/musician.tdex', - collections:['http://marklogic.com/xdmp/tde'], - contentType:'application/vnd.marklogic-tde+xml', - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'update']} - ], - content:fs.createReadStream('./etc/data/musician.tdex') - },{ - uri:'/etc/optic/rowPostProcessors.sjs', - contentType:'application/vnd.marklogic-javascript', - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/rowPostProcessors.sjs') - },{ - uri:'/etc/optic/employees.tdej', - contentType:'application/json', - collections:['http://marklogic.com/xdmp/tde'], - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/employees.tdej') - }, { uri:'/etc/optic/unnestView.tdej', - contentType:'application/json', - collections:['http://marklogic.com/xdmp/tde'], - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/unnestView.tdej') - }, { uri:'/etc/articleCitation.json', - contentType:'application/json', - collections:['http://marklogic.com/xdmp/tde'], - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/articleCitation.json') - },{ uri:'/validation/validateDoc-test.json', - contentType:'application/json', - collections:['http://marklogic.com/xdmp/tde'], - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/validateDoc-test.json') - }, { uri:'/validateDoc-test.sch', - contentType:'application/vnd.marklogic-tde+xml', - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/validateDoc-test.sch') - },{ uri:'/validateDoc-test.sch-validator.xsl', - contentType:'application/vnd.marklogic-tde+xml', - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/validateDoc-test.sch-validator.xsl') - }, { - uri:'/optic/test/transformDoc-test.mjs', - contentType:'application/vnd.marklogic-javascript', - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/transformDoc-test.mjs') - }, - { - uri:'/optic/test/transformDoc-test.xslt', - contentType:'application/vnd.marklogic-tde+xml', - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/transformDoc-test.xslt') - }, - { - uri:'/optic/test/transformDoc-test-two-params.mjs', - contentType:'application/vnd.marklogic-tde+xml', - permissions: [ - {'role-name':'app-user', capabilities:['read', 'execute']}, - {'role-name':'app-builder', capabilities:['read', 'execute']}, - {'role-name':testconfig.restReaderConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restWriterConnection.user, capabilities:['read', 'execute', 'update']}, - {'role-name':testconfig.restAdminConnection.user, capabilities:['read', 'execute', 'update']} - ], - content:fs.createReadStream('./etc/data/transformDoc-test-two-params.mjs') - } -]; - -const dataFiles = [ - { - uri:'/optic/test/masterDetail.xml', - collections:['/optic/test', '/schemas/inventory'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:fs.createReadStream('./etc/data/masterDetail.xml') - },{ - uri:'/optic/test/tripleSets.xml', - collections:['/optic/test', '/graphs/inventory'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:fs.createReadStream('./etc/data/tripleSets.xml') - },{ - uri:'/optic/test/queryDoc1.json', - collections:['/optic/test', '/optic/test1'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{srchFood:'apples', srchNumber:2, srchLevel:20, srchCity:'Cairo', - srchPoint: '15.25, 15.25', - srchContainer:{srchColA:'common', srchColB:'outlier', srchColC:'common'}} - },{ - uri:'/optic/test/queryDoc2.json', - collections:['/optic/test', '/optic/test2'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{srchFood:'banannas', srchNumber:3, srchLevel:30, srchCity:'Antioch', - srchPoint: '25.25, 25.25', - srchContainer:{srchColA:'common', srchColB:'common', srchColC:'outlier'}} - },{ - uri:'/optic/test/queryDoc3.json', - collections:['/optic/test', '/optic/test3'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{srchFood:'citron', srchNumber:1, srchLevel:10, srchCity:'Bonn', - srchPoint: '35.25, 35.25', - srchContainer:{srchColA:'outlier', srchColB:'common', srchColC:'common'}} - },{ - uri:'/optic/test/musician1.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{musician:{lastName:'Armstrong', firstName:'Louis', dob:'1901-08-04', instrument:['trumpet', 'vocal']}} - },{ - uri:'/optic/test/albums1.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{style:['dixieland'], albums:[ - {triple:{subject:'/optic/test/albums1_1', predicate:'/optic/test/albumName', object:'Hot Fives'}}, - {triple:{subject:'/optic/test/albums1_1', predicate:'/optic/test/musicianUri', object:'/optic/test/musician1.json'}}, - {triple:{subject:'/optic/test/albums1_2', predicate:'/optic/test/albumName', object:'Porgy and Bess'}}, - {triple:{subject:'/optic/test/albums1_2', predicate:'/optic/test/musicianUri', object:'/optic/test/musician1.json'}} - ]} - },{ - uri:'/optic/test/musician2.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{musician:{lastName:'Byron', firstName:'Don', dob:'1958-11-08', instrument:['clarinet', 'saxophone']}} - },{ - uri:'/optic/test/albums2.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{style:['avantgarde'], albums:[ - {triple:{subject:'/optic/test/albums2_1', predicate:'/optic/test/albumName', object:'Four Thoughts on Marvin Gaye'}}, - {triple:{subject:'/optic/test/albums2_1', predicate:'/optic/test/musicianUri', object:'/optic/test/musician2.json'}}, - {triple:{subject:'/optic/test/albums2_2', predicate:'/optic/test/albumName', object:'A Ballad For Many'}}, - {triple:{subject:'/optic/test/albums2_2', predicate:'/optic/test/musicianUri', object:'/optic/test/musician2.json'}} - ]} - },{ - uri:'/optic/test/musician3.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{musician:{lastName:'Coltrane', firstName:'John', dob:'1926-09-23', instrument:['saxophone']}} - },{ - uri:'/optic/test/albums3.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{style:['avantgarde'], albums:[ - {triple:{subject:'/optic/test/albums3_1', predicate:'/optic/test/albumName', object:'Impressions'}}, - {triple:{subject:'/optic/test/albums3_1', predicate:'/optic/test/musicianUri', object:'/optic/test/musician3.json'}}, - {triple:{subject:'/optic/test/albums3_2', predicate:'/optic/test/albumName', object:'Crescent'}}, - {triple:{subject:'/optic/test/albums3_2', predicate:'/optic/test/musicianUri', object:'/optic/test/musician3.json'}} - ]} - },{ - uri:'/optic/test/musician4.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{musician:{lastName:'Davis', firstName:'Miles', dob:'1926-05-26', instrument:['trumpet']}} - },{ - uri:'/optic/test/albums4.json', - collections:['/optic/test', '/optic/music'], - permissions: [ - {'role-name':'app-user', capabilities:['read']}, - {'role-name':'app-builder', capabilities:['read', 'update']} - ], - content:{style:['modal'], albums:[ - {triple:{subject:'/optic/test/albums4_1', predicate:'/optic/test/albumName', object:'Kind of Blue'}}, - {triple:{subject:'/optic/test/albums4_1', predicate:'/optic/test/musicianUri', object:'/optic/test/musician4.json'}}, - {triple:{subject:'/optic/test/albums4_2', predicate:'/optic/test/albumName', object:'In a Silent Way'}}, - {triple:{subject:'/optic/test/albums4_2', predicate:'/optic/test/musicianUri', object:'/optic/test/musician4.json'}} - ]} - },{ - uri:'/graphQL-Publisher_1.xml', - collections:['/graphQL'], - permissions: [ - {'role-name':'rest-reader', capabilities:['read']}, - {'role-name':'rest-writer', capabilities:['read', 'update']} - ], - content:fs.createReadStream('./etc/data/Publisher-1.xml') - },{ - uri:'/graphQL-Publisher_2.xml', - collections:['/graphQL'], - permissions: [ - {'role-name':'rest-reader', capabilities:['read']}, - {'role-name':'rest-writer', capabilities:['read', 'update']} - ], - content:fs.createReadStream('./etc/data/Publisher-2.xml') - }]; - -promptForAdmin(createManager); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - const manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - const manager = testlib.createManager(manageClient); - - setupUsers(manager, setup); -} -function createAxis(manager, name) { - return manager.post({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/axes', - body: { - 'axis-name': name+'Time', - 'axis-start': { - 'element-reference': { - 'namespace-uri': '', - 'localname': name+'StartTime', - 'scalar-type': 'dateTime' - } - }, - 'axis-end': { - 'element-reference': { - 'namespace-uri': '', - 'localname': name+'EndTime', - 'scalar-type': 'dateTime' - } - } - } - }).result(); -} -function setup(manager) { - console.log('checking for '+testconfig.testServerName); - manager.get({ - endpoint: '/v1/rest-apis/'+testconfig.testServerName - }). - result(function(response) { - if (response.statusCode === 404) { - console.log('creating database and REST server for '+testconfig.testServerName); - manager.post({ - endpoint: '/v1/rest-apis', - body: { - 'rest-api': { - name: testconfig.testServerName, - group: 'Default', - database: testconfig.testServerName, - 'modules-database': testconfig.testServerName+'-modules', - port: testconfig.restPort - } - } - }). - result(function(response) { - if (response.statusCode === 201) { - console.log('getting default indexes for '+testconfig.testServerName); - manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/properties' - }).result(). - then(function(response) { - let indexName = null; - let indexType = null; - let indexdef = null; - let i = null; - - const lexiconTest = { - defaultWordKey: true, - taggedWordKey: true - }; - let elementWordLexicon = response.data['element-word-lexicon']; - let lexers = []; - if (valcheck.isNullOrUndefined(elementWordLexicon)) { - elementWordLexicon = []; - lexers = Object.keys(lexiconTest); - } else { - elementWordLexicon.forEach(function(index){ - indexName = index.localname; - if (!valcheck.isUndefined(lexiconTest[indexName])) { - lexiconTest[indexName] = false; - } - }); - lexers = Object.keys(lexiconTest).filter(function(indexName){ - return (lexiconTest[indexName] !== false); - }); - } - - for (i=0; i < lexers.length; i++) { - indexName = lexers[i]; - indexdef = { - collation: 'http://marklogic.com/collation/', - 'namespace-uri': '', - localname: indexName, - }; - elementWordLexicon.push(indexdef); - } - - const rangeTest = { - rangeKey1: 'string', - rangeKey2: 'string', - rangeKey3: 'int', - rangeKey4: 'int', - rangeKey5: 'int', - srchCity: 'string', - srchLevel: 'int', - srchNumber: 'int', - systemStartTime: 'dateTime', - systemEndTime: 'dateTime', - validStartTime: 'dateTime', - validEndTime: 'dateTime' - }; - let rangeElementIndex = response.data['range-element-index']; - let rangers = []; - if (valcheck.isNullOrUndefined(rangeElementIndex)) { - rangeElementIndex = []; - rangers = Object.keys(rangeTest); - } else { - rangeElementIndex.forEach(function(index){ - indexName = index.localname; - if (!valcheck.isUndefined(rangeTest[indexName])) { - rangeTest[indexName] = false; - } - }); - rangers = Object.keys(rangeTest).filter(function(indexName){ - return (rangeTest[indexName] !== false); - }); - } - - for (i=0; i < rangers.length; i++) { - indexName = rangers[i]; - indexType = rangeTest[indexName]; - indexdef = { - 'scalar-type': indexType, - collation: (indexType === 'string') ? - 'http://marklogic.com/collation/' : '', - 'namespace-uri': '', - localname: indexName, - 'range-value-positions': false, - 'invalid-values': 'ignore' - }; - rangeElementIndex.push(indexdef); - } - - const pointGeospatialIndex = { - 'namespace-uri': '', - localname: 'point', - 'coordinate-system': 'wgs84', - 'range-value-positions': false, - 'point-format': 'point', - 'invalid-values': 'ignore' - }; - let geospatialElementIndex = response.data['geospatial-element-index']; - - if (valcheck.isNullOrUndefined(geospatialElementIndex)) { - geospatialElementIndex = [pointGeospatialIndex]; - } else if (geospatialElementIndex.some( - makeIndexTester(pointGeospatialIndex.localname) - )) { - geospatialElementIndex = null; - } else { - geospatialElementIndex.push(pointGeospatialIndex); - } - - const body = { - 'collection-lexicon': true, - 'uri-lexicon': true, - 'triple-index': true, - 'schema-database': testconfig.testServerName+'-modules', - }; - - if (valcheck.isArray(elementWordLexicon) && elementWordLexicon.length > 0) { - body['element-word-lexicon'] = elementWordLexicon; - } - if (valcheck.isArray(rangeElementIndex) && rangeElementIndex.length > 0) { - body['range-element-index'] = rangeElementIndex; - } - if (valcheck.isArray(geospatialElementIndex) && - geospatialElementIndex.length > 0) { - body['geospatial-element-index'] = geospatialElementIndex; - } - - console.log('adding custom indexes for '+testconfig.testServerName); - return manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/properties', - params: { - format: 'json' - }, - body: body, - hasResponse: true - }).result(); - }). - then(function(response) { - console.log('checking system temporal axis'); - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/axes/systemTime' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - console.log('creating system temporal axis'); - return createAxis(manager, 'system'); - }). - then(function(response) { - console.log('checking valid temporal axis'); - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/axes/validTime' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - console.log('creating valid temporal axis'); - return createAxis(manager, 'valid'); - }). - then(function(response) { - console.log('checking temporal collection'); - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+ - '/temporal/collections/temporalCollection' - }).result(); - }). - then(function(response) { - if (response.statusCode < 400) { - return this; - } - console.log('creating temporal collection'); - return manager.post({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/collections', - body: { - 'collection-name': 'temporalCollection', - 'system-axis': 'systemTime', - 'valid-axis': 'validTime', - option: ['updates-admin-override'] - } - }).result(); - }). - then(function(response) { - return manager.get({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+ - '/temporal/collections/lsqt/properties?collection=temporalCollection' - }).result(); - }). - then(function(response) { - // 2017-10-24: Commenting out, LSQT enablement required for LSQT testing - // if (response.statusCode < 400) { - // return this; - // } - console.log('configuring LSQT'); - return manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+ - '/temporal/collections/lsqt/properties?collection=temporalCollection', - body: { - 'lsqt-enabled': true, - automation: { - enabled: false - } - } - }).result(); - }). - then(function(response){ - console.log('setting up modules database resources'); - const modDb = marklogic.createDatabaseClient({ - database: testconfig.testServerName+'-modules', - host: testconfig.manageAdminConnection.host, - port: testconfig.manageAdminConnection.port, - user: testconfig.manageAdminConnection.user, - password: testconfig.manageAdminConnection.password, - authType: testconfig.manageAdminConnection.authType - }); - return modDb.documents.write(moduleFiles).result(); - }). -/* TODO: advance LSQT after creating documents - then(function(response) { - const evalConnection = { - host: testconfig.testHost, - port: testconfig.restPort, - user: testconfig.manageAdminConnection.user, - password: testconfig.manageAdminConnection.password, - authType: testconfig.restAuthType - }; - const evalClient = marklogic.createDatabaseClient(evalConnection); - return evalClient.xqueryEval( - 'xquery version "1.0-ml"; '+ - 'import module namespace temporal = "http://marklogic.com/xdmp/temporal" '+ - ' at "/MarkLogic/temporal.xqy"; '+ - 'temporal:advance-lsqt("temporalCollection")' - ).result(); - }). - */ - then(function(response){ - console.log('setting up sample documents'); - const db = marklogic.createDatabaseClient({ - host: testconfig.restWriterConnection.host, - port: testconfig.restWriterConnection.port, - user: testconfig.restWriterConnection.user, - password: testconfig.restWriterConnection.password, - authType: testconfig.restWriterConnection.authType - }); - return db.documents.write(dataFiles).result(); - }). - then(function(response) { - console.log(testconfig.testServerName+' setup succeeded'); - }). - catch(function(err) { - console.log('failed to set up '+testconfig.testServerName+' server:\n'+ - JSON.stringify(err, null, 2)); - process.exit(1); - }); - } else { - console.log(testconfig.testServerName+' setup failed with HTTP status: '+response.statusCode); - console.log(response.data); - process.exit(1); - } - }); - } else { - console.log(testconfig.testServerName+' test server is available on port '+ - JSON.parse(response.data).port); - } - }); -} - -function makeIndexTester(testLocalname) { - return function indexTester(index) { - return (index.localname === testLocalname); - }; -} diff --git a/etc/test-teardown-dmsdk-qa.js b/etc/test-teardown-dmsdk-qa.js deleted file mode 100644 index c4aaf5f98..000000000 --- a/etc/test-teardown-dmsdk-qa.js +++ /dev/null @@ -1,76 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var marklogic = require('../lib/marklogic.js'); - -var testlib = require('./test-lib.js'); -//var promptForAdmin = require('./test-setup-prompt.js'); -var testconfig = require('./test-config-qa.js'); - -//promptForAdmin(createManager); -createManager('admin', 'admin'); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setup(manager); -} -function setup(manager) { - console.log('checking for '+testconfig.dmsdktestServerName); - manager.get({ - endpoint: '/v1/rest-apis/'+testconfig.dmsdktestServerName - }). - result(function(response) { - if (response.statusCode === 404) { - console.log(testconfig.dmsdktestServerName+' not found - nothing to delete'); - } else { - console.log('removing database and REST server for '+testconfig.dmsdktestServerName); - manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/properties', - params: { - format: 'json' - }, - body: { - 'schema-database': 'Schemas' - }, - hasResponse: true - }).result(). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.dmsdktestServerName, - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.dmsdktestServerName+'-modules', - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - then(setTimeout(function(response) { - return manager.remove({ - endpoint: '/v1/rest-apis/'+testconfig.dmsdktestServerName, - accept: 'application/json', - params: {include: ['content', 'modules']} - }).result(); - }, 10000)). - then(setTimeout(function(response) { - console.log('teardown succeeded - restart the server'); - }, - function(error) { - console.log('failed to tear down '+testconfig.dmsdktestServerName+' server:\n'+ - JSON.stringify(error)); - }, 10000)); - } - }); -} - diff --git a/etc/test-teardown-nodeOpticFunctionalTest.js b/etc/test-teardown-nodeOpticFunctionalTest.js deleted file mode 100644 index c4aaf5f98..000000000 --- a/etc/test-teardown-nodeOpticFunctionalTest.js +++ /dev/null @@ -1,76 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var marklogic = require('../lib/marklogic.js'); - -var testlib = require('./test-lib.js'); -//var promptForAdmin = require('./test-setup-prompt.js'); -var testconfig = require('./test-config-qa.js'); - -//promptForAdmin(createManager); -createManager('admin', 'admin'); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setup(manager); -} -function setup(manager) { - console.log('checking for '+testconfig.dmsdktestServerName); - manager.get({ - endpoint: '/v1/rest-apis/'+testconfig.dmsdktestServerName - }). - result(function(response) { - if (response.statusCode === 404) { - console.log(testconfig.dmsdktestServerName+' not found - nothing to delete'); - } else { - console.log('removing database and REST server for '+testconfig.dmsdktestServerName); - manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.dmsdktestServerName+'/properties', - params: { - format: 'json' - }, - body: { - 'schema-database': 'Schemas' - }, - hasResponse: true - }).result(). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.dmsdktestServerName, - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.dmsdktestServerName+'-modules', - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - then(setTimeout(function(response) { - return manager.remove({ - endpoint: '/v1/rest-apis/'+testconfig.dmsdktestServerName, - accept: 'application/json', - params: {include: ['content', 'modules']} - }).result(); - }, 10000)). - then(setTimeout(function(response) { - console.log('teardown succeeded - restart the server'); - }, - function(error) { - console.log('failed to tear down '+testconfig.dmsdktestServerName+' server:\n'+ - JSON.stringify(error)); - }, 10000)); - } - }); -} - diff --git a/etc/test-teardown-qa.js b/etc/test-teardown-qa.js deleted file mode 100644 index d70094ab6..000000000 --- a/etc/test-teardown-qa.js +++ /dev/null @@ -1,131 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var marklogic = require('../lib/marklogic.js'); - -var testlib = require('./test-lib.js'); -//var promptForAdmin = require('./test-setup-prompt.js'); -var testconfig = require('./test-config-qa.js'); - -//promptForAdmin(createManager); -createManager('admin', 'admin'); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setup(manager); -} -function setup(manager) { - console.log('checking for '+testconfig.testServerName); - manager.get({ - endpoint: '/v1/rest-apis/'+testconfig.testServerName - }). - result(function(response) { - if (response.statusCode === 404) { - console.log(testconfig.testServerName+' not found - nothing to delete'); - } else { - console.log('removing database and REST server for '+testconfig.testServerName); - manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/properties', - params: { - format: 'json' - }, - body: { - 'schema-database': 'Schemas' - }, - hasResponse: true - }).result(). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName, - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName+'-modules', - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - /*then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/collections?collection=temporalCollection' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/collections?collection=temporalCollectionLsqt' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/axes/systemTime' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/temporal/axes/validTime' - }).result(); - }).*/ - then(setTimeout(function(response) { - return manager.remove({ - endpoint: '/manage/v2/users/rest-evaluator' - }).result(); - }, 3000)). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/users/rest-admin' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/users/rest-writer' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/users/rest-reader' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/users/rest-temporal-writer' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/roles/rest-evaluator' - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/manage/v2/roles/rest-temporal-writer' - }).result(); - }). - then(setTimeout(function(response) { - return manager.remove({ - endpoint: '/v1/rest-apis/'+testconfig.testServerName, - accept: 'application/json', - params: {include: ['content', 'modules']} - }).result(); - }, 10000)). - then(setTimeout(function(response) { - console.log('teardown succeeded - restart the server'); - }, - function(error) { - console.log('failed to tear down '+testconfig.testServerName+' server:\n'+ - JSON.stringify(error)); - }, 10000)); - } - }); -} - diff --git a/etc/test-teardown.js b/etc/test-teardown.js deleted file mode 100644 index 4b1445f6b..000000000 --- a/etc/test-teardown.js +++ /dev/null @@ -1,73 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var marklogic = require('../lib/marklogic.js'); - -var testlib = require('./test-lib.js'); -var promptForAdmin = require('./test-setup-prompt.js'); -var testconfig = require('./test-config.js'); - -promptForAdmin(createManager); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setup(manager); -} -function setup(manager) { - console.log('checking for '+testconfig.testServerName); - manager.get({ - endpoint: '/v1/rest-apis/'+testconfig.testServerName - }). - result(function(response) { - if (response.statusCode === 404) { - console.log(testconfig.testServerName+' not found - nothing to delete'); - } else { - console.log('removing database and REST server for '+testconfig.testServerName); - manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName, - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(). - then(function(response) { - return manager.post({ - endpoint: '/manage/v2/databases/' + testconfig.testServerName+'-modules', - contentType: 'application/json', - accept: 'application/json', - body: {'operation': 'clear-database'} - }).result(); - }). - then(function(response) { - return manager.put({ - endpoint: '/manage/v2/databases/'+testconfig.testServerName+'/properties', - params: { - format: 'json' - }, - body: {'schema-database': 'Schemas'}, - hasResponse: true - }).result(); - }). - then(function(response) { - return manager.remove({ - endpoint: '/v1/rest-apis/'+testconfig.testServerName, - accept: 'application/json', - params: {include: ['content', 'modules']} - }).result(); - }). - then(function(response) { - console.log('teardown succeeded - restart the server'); - }, - function(error) { - console.log('failed to tear down '+testconfig.testServerName+' server:\n'+ - JSON.stringify(error, null, 2)); - }); - } - }); -} - diff --git a/etc/users-setup.js b/etc/users-setup.js deleted file mode 100644 index 9102836be..000000000 --- a/etc/users-setup.js +++ /dev/null @@ -1,25 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var valcheck = require('core-util-is'); - -var marklogic = require('../lib/marklogic.js'); - -var promptForAdmin = require('./test-setup-prompt.js'); -var setupUsers = require('./test-setup-users.js'); - -var testlib = require('./test-lib.js'); -var testconfig = require('./test-config.js'); - -promptForAdmin(createManager); - -function createManager(adminUser, adminPassword) { - testconfig.manageAdminConnection.user = adminUser; - testconfig.manageAdminConnection.password = adminPassword; - - var manageClient = - marklogic.createDatabaseClient(testconfig.manageAdminConnection); - var manager = testlib.createManager(manageClient); - - setupUsers(manager); -} diff --git a/examples/all.js b/examples/all.js index d9a8c768c..0c9f86852 100644 --- a/examples/all.js +++ b/examples/all.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var fs = require('fs'); @@ -29,6 +29,7 @@ fs.readdir('./examples', function(err, filenames) { 'all.js': true, 'before-load.js': true, 'example-util.js': true, + 'progress-cloud-connection.js': true, 'setup.js': true }; diff --git a/examples/before-load.js b/examples/before-load.js index 2c572c274..5c9bd248e 100644 --- a/examples/before-load.js +++ b/examples/before-load.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var fs = require('fs'); diff --git a/examples/example-util.js b/examples/example-util.js index 29744d05c..8f496c43a 100644 --- a/examples/example-util.js +++ b/examples/example-util.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var fs = require('fs'); diff --git a/examples/optimistic-locking.js b/examples/optimistic-locking.js index 5488e9cda..cd740fc0c 100644 --- a/examples/optimistic-locking.js +++ b/examples/optimistic-locking.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/patch-document.js b/examples/patch-document.js index 4a04be58f..2fe02c7e3 100644 --- a/examples/patch-document.js +++ b/examples/patch-document.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/probe-document.js b/examples/probe-document.js index bec3b807b..da7abc952 100644 --- a/examples/probe-document.js +++ b/examples/probe-document.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/progress-cloud-connection.js b/examples/progress-cloud-connection.js index 11931ca61..702792b9b 100644 --- a/examples/progress-cloud-connection.js +++ b/examples/progress-cloud-connection.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ /* This file provides an example for the users to help them connect to Progress cloud using the apiKey and host diff --git a/examples/query-builder.js b/examples/query-builder.js index 0e01af252..2fb363868 100644 --- a/examples/query-builder.js +++ b/examples/query-builder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/query-by-example.js b/examples/query-by-example.js index 65f627905..fa4bc70c3 100644 --- a/examples/query-by-example.js +++ b/examples/query-by-example.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/query-extract.js b/examples/query-extract.js index eab1ca97b..803c70bcf 100644 --- a/examples/query-extract.js +++ b/examples/query-extract.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/query-parser.js b/examples/query-parser.js index 255b2b66e..5a5bd112f 100644 --- a/examples/query-parser.js +++ b/examples/query-parser.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/queryAll-documents.js b/examples/queryAll-documents.js index a4b2be89a..1653e4089 100644 --- a/examples/queryAll-documents.js +++ b/examples/queryAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ let exutil = require('./example-util.js'); diff --git a/examples/queryAll-rows.js b/examples/queryAll-rows.js index bca00f36f..6a1275c7f 100644 --- a/examples/queryAll-rows.js +++ b/examples/queryAll-rows.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/queryToReadAll-documents.js b/examples/queryToReadAll-documents.js index 59d9352c5..64ca8cc41 100644 --- a/examples/queryToReadAll-documents.js +++ b/examples/queryToReadAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/queryToRemoveAll-documents.js b/examples/queryToRemoveAll-documents.js index af732cace..960e29e62 100644 --- a/examples/queryToRemoveAll-documents.js +++ b/examples/queryToRemoveAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/queryToTransformAll-documents.js b/examples/queryToTransformAll-documents.js index 51daf3191..3df43f00f 100644 --- a/examples/queryToTransformAll-documents.js +++ b/examples/queryToTransformAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/read-documents.js b/examples/read-documents.js index 3f2f3f3a9..380a1e6e1 100644 --- a/examples/read-documents.js +++ b/examples/read-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/read-metadata.js b/examples/read-metadata.js index 663f40ddf..203b739b6 100644 --- a/examples/read-metadata.js +++ b/examples/read-metadata.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/read-rows.js b/examples/read-rows.js index 6ff3c4e4b..0f6b36664 100644 --- a/examples/read-rows.js +++ b/examples/read-rows.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/read-stream.js b/examples/read-stream.js index 31c98a873..9b9fba12d 100644 --- a/examples/read-stream.js +++ b/examples/read-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/readAll-documents.js b/examples/readAll-documents.js index 38dc5b7fb..011c8ac82 100644 --- a/examples/readAll-documents.js +++ b/examples/readAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ let exutil = require('./example-util.js'); diff --git a/examples/removeAllUris-documents.js b/examples/removeAllUris-documents.js index 7889ee660..2e7283515 100644 --- a/examples/removeAllUris-documents.js +++ b/examples/removeAllUris-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/setup.js b/examples/setup.js index 41666eda8..2102a83b7 100644 --- a/examples/setup.js +++ b/examples/setup.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var fs = require('fs'); diff --git a/examples/transform-on-client.js b/examples/transform-on-client.js index 22f935b05..97acc00a3 100644 --- a/examples/transform-on-client.js +++ b/examples/transform-on-client.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/transformAll-documents.js b/examples/transformAll-documents.js index 41308825d..b5750b7e5 100644 --- a/examples/transformAll-documents.js +++ b/examples/transformAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/unnest-function.js b/examples/unnest-function.js index 913abddb8..c6e6dd69e 100644 --- a/examples/unnest-function.js +++ b/examples/unnest-function.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const exutil = require('./example-util.js'); diff --git a/examples/write-remove.js b/examples/write-remove.js index 841e3d520..079b5cf2b 100644 --- a/examples/write-remove.js +++ b/examples/write-remove.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var exutil = require('./example-util.js'); diff --git a/examples/write-stream.js b/examples/write-stream.js index 933f1e6bf..956b9893d 100644 --- a/examples/write-stream.js +++ b/examples/write-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var fs = require('fs'); diff --git a/examples/writeAll-documents.js b/examples/writeAll-documents.js index 7a390c04b..4529f1d6a 100644 --- a/examples/writeAll-documents.js +++ b/examples/writeAll-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ let exutil = require('./example-util.js'); diff --git a/gulpfile.js b/gulpfile.js index 5c354cfd5..34360297c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,11 +1,10 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const path = require('path'); const gulp = require('gulp'); -const jshint = require('gulp-jshint'); +const eslint = require('gulp-eslint-new'); const mocha = require('gulp-mocha'); -const jsdoc = require('gulp-jsdoc3'); const { parallel, series } = gulp; @@ -17,9 +16,10 @@ const basicloader = require('./lib/basic-loader.js'); const streamToArray = require("stream-to-array"); function lint() { - return gulp.src('lib/*') - .pipe(jshint({lookup:true})) - .pipe(jshint.reporter('default')); + return gulp.src('lib/*.js') + .pipe(eslint({ overrideConfigFile: 'eslint.config.js' })) + .pipe(eslint.format()) + .pipe(eslint.failAfterError()); } function test() { @@ -32,14 +32,6 @@ function test() { })); } -function doc() { - // TODO: clear the directory first - maybe by following this recipe: - // https://github.com/gulpjs/gulp/blob/master/docs/recipes/delete-files-folder.md - const config = require('./jsdoc.json'); - return gulp.src(['./lib/*.js', 'README.md']) - .pipe(jsdoc(config)); -} - let testModulesClient = null; function getTestModulesClient() { if (testModulesClient === null) { @@ -183,7 +175,6 @@ function runProxyTests() { })); } -exports.doc = doc; exports.lint = lint; exports.loadProxyTests = series(parallel(loadProxyTestInspector, loadProxyTestData, loadProxyTestCases), updateMjsFiles); exports.generateProxyTests = parallel(positiveProxyTests, negativeProxyTests, generatedProxyTests); diff --git a/jsdoc.json b/jsdoc.json index 96d49b06c..471fbccab 100644 --- a/jsdoc.json +++ b/jsdoc.json @@ -5,8 +5,8 @@ }, "templates": { "theme": "marklogic", - "systemName": "MarkLogic Node.js Client API", - "copyright": "Copyright (c) 2020 MarkLogic Corporation", + "systemName": "Progress® MarkLogic® Node Client API", + "copyright": "Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.", "navType": "vertical", "inverseNav": true, "includeDate": false, diff --git a/lib/basic-loader.js b/lib/basic-loader.js index e652bf7ad..5dc8092c7 100644 --- a/lib/basic-loader.js +++ b/lib/basic-loader.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -33,7 +33,7 @@ function loadFile(callback, options) { const documentDescriptor = options.documentDescriptor; if (documentDescriptor === void 0 || documentDescriptor == null) { - throw new Error(`loadFile requires fileDescriptor option`); + throw new Error('loadFile requires fileDescriptor option'); } fs.readFile(filePath, 'utf8', (err, data) => { @@ -52,7 +52,7 @@ function loadFileStream(options) { const documentMetadata = options.documentMetadata; if (documentMetadata === void 0 || documentMetadata == null) { - throw new Error(`loadFileStream requires documentMetadata option`); + throw new Error('loadFileStream requires documentMetadata option'); } let uriPrefix = options.uriPrefix; diff --git a/lib/ctsquery-builder.js b/lib/ctsquery-builder.js index 22c42279a..583f614a9 100644 --- a/lib/ctsquery-builder.js +++ b/lib/ctsquery-builder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/lib/documents.js b/lib/documents.js index b7df7538d..ebe1ec2ba 100644 --- a/lib/documents.js +++ b/lib/documents.js @@ -1,14 +1,14 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); -var qb = require('./query-builder.js').lib; -var pathModule = require('path'); -var fs = require('fs'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); +const qb = require('./query-builder.js').lib; +const pathModule = require('path'); +const fs = require('fs'); const stream = require('stream'); const bldrbase = require('./plan-builder-base.js'); const duplexify = require('duplexify'); @@ -16,7 +16,7 @@ const duplexify = require('duplexify'); /** @ignore */ function addDocumentUri(documents, document) { if (document != null) { - var uri = document.uri; + const uri = document.uri; if ((typeof uri === 'string' || uri instanceof String) && uri.length > 0) { documents.push(uri); } @@ -35,36 +35,36 @@ function getDocumentUris(documents) { function compareDocuments(firstDoc, secondDoc) { const hasFirstDoc = (firstDoc !== null); const hasSecondDoc = (secondDoc !== null); - if (!hasFirstDoc && !hasSecondDoc) return 0; - if (!hasFirstDoc && hasSecondDoc) return -1; - if (hasFirstDoc && !hasSecondDoc) return 1; + if (!hasFirstDoc && !hasSecondDoc) {return 0;} + if (!hasFirstDoc && hasSecondDoc) {return -1;} + if (hasFirstDoc && !hasSecondDoc) {return 1;} const firstUri = firstDoc.uri; const secondUri = secondDoc.uri; const hasFirstUri = ((typeof firstUri === 'string' || firstUri instanceof String) && firstUri.length > 0); const hasSecondUri = ((typeof secondUri === 'string' || secondUri instanceof String) && secondUri.length > 0); - if (!hasFirstUri && !hasSecondUri) return 0; - if (!hasFirstUri && hasSecondUri) return -1; - if (hasFirstUri && !hasSecondUri) return 1; - if (firstUri < secondUri) return -1; - if (firstUri > secondUri) return 1; + if (!hasFirstUri && !hasSecondUri) {return 0;} + if (!hasFirstUri && hasSecondUri) {return -1;} + if (hasFirstUri && !hasSecondUri) {return 1;} + if (firstUri < secondUri) {return -1;} + if (firstUri > secondUri) {return 1;} return 0; } /** @ignore */ function uriErrorTransform(message) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var uri = operation.uri; + const uri = operation.uri; return (uri == null) ? message : (message+' (on '+uri+')'); } /** @ignore */ function uriListErrorTransform(message) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var uris = operation.uris; + const uris = operation.uris; return ((!Array.isArray(uris)) || uris.length === 0) ? message : (message+' (on '+uris.join(', ')+')'); } @@ -89,15 +89,15 @@ function Documents(client) { /** @ignore */ function probeOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var statusCode = operation.responseStatusCode; - var exists = (statusCode === 200) ? true : false; + const statusCode = operation.responseStatusCode; + const exists = (statusCode === 200) ? true : false; if (operation.contentOnly === true) { return exists; } - var output = exists ? operation.responseHeaders : {}; + const output = exists ? operation.responseHeaders : {}; output.uri = operation.uri; output.exists = exists; @@ -106,9 +106,9 @@ function probeOutputTransform(/*headers, data*/) { function protectOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var output = { + const output = { uri: operation.uri, temporalCollection: operation.temporalCollection, level: operation.level @@ -119,9 +119,9 @@ function protectOutputTransform(/*headers, data*/) { function wipeOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var output = { + const output = { uri: operation.uri, temporalCollection: operation.temporalCollection, wiped: true @@ -133,7 +133,7 @@ function wipeOutputTransform(/*headers, data*/) { function advanceLsqtOutputTransform(headers) { /*jshint validthis:true */ - var output = { + const output = { lsqt: headers.lsqt }; @@ -227,11 +227,11 @@ function probeDocumentsImpl(contentOnly, args) { throw new Error('must supply uri for document check()'); } - var params = (args.length === 1 && typeof args[0] !== 'string' && !(args[0] instanceof String)) ? args[0] : null; + const params = (args.length === 1 && typeof args[0] !== 'string' && !(args[0] instanceof String)) ? args[0] : null; - var uri = null; - var txid = null; - var path = '/v1/documents?format=json'; + let uri = null; + let txid = null; + let path = '/v1/documents?format=json'; // params as list if (params === null) { uri = args[0]; @@ -257,7 +257,7 @@ function probeDocumentsImpl(contentOnly, args) { const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'HEAD'); mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'probe document', this.client, requestOptions, 'empty', 'empty' ); operation.uri = uri; @@ -296,19 +296,19 @@ function probeDocumentsImpl(contentOnly, args) { */ Documents.prototype.protect = function protectDocument() { /*jshint validthis:true */ - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; - var uri = null; - var tempColl = null; - var duration = null; - var expireTime = null; - var level = 'noDelete'; - var archivePath = null; + let uri = null; + let tempColl = null; + let duration = null; + let expireTime = null; + let level = 'noDelete'; + let archivePath = null; // Params as single object if (argLen === 1) { - var obj = args[0]; + const obj = args[0]; if (obj.uri === void 0) { throw new Error('must specify uri'); } else { @@ -346,7 +346,7 @@ Documents.prototype.protect = function protectDocument() { } else { expireTime = args[2]; } - var levels = ['noWipe', 'noDelete', 'noUpdate']; + const levels = ['noWipe', 'noDelete', 'noUpdate']; if (levels.indexOf(args[3]) !== -1) { level = args[3]; } else { @@ -365,7 +365,7 @@ Documents.prototype.protect = function protectDocument() { } } - var path = '/v1/documents/protection?uri=' + encodeURIComponent(uri); + let path = '/v1/documents/protection?uri=' + encodeURIComponent(uri); path += '&temporal-collection=' + encodeURIComponent(tempColl); if (duration !== null) { path += '&duration=' + encodeURIComponent(duration); @@ -379,7 +379,7 @@ Documents.prototype.protect = function protectDocument() { const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'POST'); - var operation = new Operation( + const operation = new Operation( 'protect document', this.client, requestOptions, 'empty', 'empty' ); operation.uri = uri; @@ -411,15 +411,15 @@ Documents.prototype.protect = function protectDocument() { */ Documents.prototype.wipe = function wipeDocument() { /*jshint validthis:true */ - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; - var uri = null; - var tempColl = null; + let uri = null; + let tempColl = null; // Params as single object if (argLen === 1) { - var obj = args[0]; + const obj = args[0]; if (obj.uri === void 0) { throw new Error('must specify uri'); } else { @@ -440,13 +440,13 @@ Documents.prototype.wipe = function wipeDocument() { tempColl = args[1]; } - var path = '/v1/documents?uri=' + encodeURIComponent(uri); + let path = '/v1/documents?uri=' + encodeURIComponent(uri); path += '&temporal-collection=' + encodeURIComponent(tempColl); path += '&result=wiped'; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'DELETE'); - var operation = new Operation( + const operation = new Operation( 'wipe document', this.client, requestOptions, 'empty', 'empty' ); operation.uri = uri; @@ -471,10 +471,10 @@ Documents.prototype.wipe = function wipeDocument() { */ Documents.prototype.advanceLsqt = function temporalAdvanceLsqt() { /*jshint validthis:true */ - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); - var tempColl = null; - var lag = null; + let tempColl = null; + let lag = null; // Positional case if (typeof args[0] === 'string' || args[0] instanceof String) { @@ -489,7 +489,7 @@ Documents.prototype.advanceLsqt = function temporalAdvanceLsqt() { } // Object case else { - var obj = args[0]; + const obj = args[0]; if (obj.temporalCollection === void 0) { throw new Error('must specify temporalCollection'); } else { @@ -504,7 +504,7 @@ Documents.prototype.advanceLsqt = function temporalAdvanceLsqt() { } } - var path = '/v1/temporal/collections/' + encodeURIComponent(tempColl); + let path = '/v1/temporal/collections/' + encodeURIComponent(tempColl); path += '?result=advance-lsqt'; if (lag !== null) { path += '&lag=' + encodeURIComponent(lag); @@ -512,7 +512,7 @@ Documents.prototype.advanceLsqt = function temporalAdvanceLsqt() { const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'POST'); - var operation = new Operation( + const operation = new Operation( 'advance LSQT', this.client, requestOptions, 'empty', 'empty' ); // operation.temporalCollection = tempColl; @@ -526,14 +526,14 @@ Documents.prototype.advanceLsqt = function temporalAdvanceLsqt() { /** @ignore */ function readStatusValidator(statusCode) { return (statusCode < 400 || statusCode === 404) ? - null : "response with invalid "+statusCode+" status"; + null : 'response with invalid '+statusCode+' status'; } /** @ignore */ function singleReadOutputTransform(headers, data) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var hasData = (data != null); + const hasData = (data != null); if (hasData && (data.errorResponse != null) && data.errorResponse.statusCode === 404 @@ -541,15 +541,15 @@ function singleReadOutputTransform(headers, data) { return []; } - var content = hasData ? data : null; + const content = hasData ? data : null; if (operation.contentOnly === true) { return [content]; } - var categories = operation.categories; + const categories = operation.categories; - var document = (categories.length === 1 && categories[0] === 'content') ? + const document = (categories.length === 1 && categories[0] === 'content') ? {content: content} : collectMetadata(content); if(operation.uris){ @@ -557,21 +557,21 @@ function singleReadOutputTransform(headers, data) { } document.category = categories; - var format = headers.format; + const format = headers.format; if (typeof format === 'string' || format instanceof String) { document.format = format; if (format !== 'json') { - var contentLength = headers.contentLength; + const contentLength = headers.contentLength; if (contentLength != null) { document.contentLength = contentLength; } } } - var headerList = ['contentType', 'versionId']; - var headerKey = null; - var headerValue = null; - var i = 0; + const headerList = ['contentType', 'versionId']; + let headerKey = null; + let headerValue = null; + let i = 0; for (i = 0; i < headerList.length; i++) { headerKey = headerList[i]; headerValue = headers[headerKey]; @@ -625,15 +625,15 @@ function readDocumentsImpl(contentOnly, args) { throw new Error('must specify at least one document to read'); } - var uris = null; - var categories = null; - var txid = null; - var transform = null; - var contentType = null; - var range = null; - var timestamp = null; + let uris = null; + let categories = null; + let txid = null; + let transform = null; + let contentType = null; + let range = null; + let timestamp = null; - var arg = args[0]; + const arg = args[0]; if (Array.isArray(arg)) { uris = arg; } else if (typeof arg === 'string' || arg instanceof String) { @@ -661,7 +661,7 @@ function readDocumentsImpl(contentOnly, args) { } if (categories != null) { - var i = 0; + let i = 0; for (i = 0; i < categories.length; i++) { if(categories[i] === 'rawContent'){ if(categories.length>1) { @@ -675,7 +675,7 @@ function readDocumentsImpl(contentOnly, args) { } } - var path = '/v1/documents?format=json&uri='+ + let path = '/v1/documents?format=json&uri='+ uris.map(encodeURIComponent).join('&uri='); path += '&category=' + categories.join('&category='); if (txid != null) { @@ -691,7 +691,7 @@ function readDocumentsImpl(contentOnly, args) { } } - var isSinglePayload = ( + const isSinglePayload = ( uris.length === 1 && ( (categories.length === 1 && categories[0] === 'content') || categories.indexOf('content') === -1 @@ -703,7 +703,7 @@ function readDocumentsImpl(contentOnly, args) { Accept: 'multipart/mixed; boundary='+mlutil.multipartBoundary }; } else { - var hasContentType = false; + let hasContentType = false; if (contentType != null) { if (typeof contentType === 'string' || contentType instanceof String) { hasContentType = true; @@ -716,7 +716,7 @@ function readDocumentsImpl(contentOnly, args) { if (!Array.isArray(range)) { throw new Error('byte range parameter for reading binary document is not an array: '+range); } - var bytes = null; + let bytes = null; switch (range.length) { case 0: throw new Error('no start length for byte range parameter for reading binary document'); @@ -762,7 +762,7 @@ function readDocumentsImpl(contentOnly, args) { } mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'read documents', this.client, requestOptions, 'empty', (isSinglePayload ? 'single' : 'multipart') ); @@ -815,8 +815,8 @@ Documents.prototype.createWriteStream = function createWriteStream(document) { throw new Error('must write to stream to supply document content'); } - var categories = document.categories; - var hasCategories = Array.isArray(categories) && categories.length > 0; + let categories = document.categories; + const hasCategories = Array.isArray(categories) && categories.length > 0; if (!hasCategories && (typeof categories === 'string' || categories instanceof String)) { categories = [categories]; } @@ -830,16 +830,16 @@ Documents.prototype.createWriteStream = function createWriteStream(document) { /** @ignore */ function writeStreamImpl(document, categories) { /*jshint validthis:true */ - var endpoint = '/v1/documents'; + let endpoint = '/v1/documents'; - var txid = getTxid(document); + const txid = getTxid(document); - var writeParams = addWriteParams(document, categories, txid); + const writeParams = addWriteParams(document, categories, txid); if (writeParams.length > 0) { endpoint += writeParams; } - var multipartBoundary = mlutil.multipartBoundary; + const multipartBoundary = mlutil.multipartBoundary; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), endpoint, 'POST'); requestOptions.headers = { 'Content-Type': 'multipart/mixed; boundary='+multipartBoundary, @@ -847,14 +847,14 @@ function writeStreamImpl(document, categories) { }; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'write document stream', this.client, requestOptions, 'chunkedMultipart', 'single' ); operation.isReplayable = false; operation.uri = document.uri; // TODO: treat as chunked single document if no properties - var requestPartList = []; + const requestPartList = []; addDocumentParts(operation, requestPartList, document, true); operation.requestDocument = requestPartList; @@ -867,14 +867,14 @@ function writeStreamImpl(document, categories) { /** @ignore */ function singleWriteOutputTransform(headers, data) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var uri = operation.uri; + let uri = operation.uri; if (uri == null) { - var location = headers.location; + const location = headers.location; if (location != null) { - var startsWith = '/v1/documents?uri='; + const startsWith = '/v1/documents?uri='; if (location.length > startsWith.length && location.substr(0, startsWith.length) === startsWith) { uri = location.substr(startsWith.length); @@ -886,21 +886,21 @@ function singleWriteOutputTransform(headers, data) { return [uri]; } - var document = {uri: uri}; + const document = {uri: uri}; - var categories = operation.categories; + const categories = operation.categories; if (categories == null) { document.categories = categories; } - var contentType = (data == null) ? null : data['mime-type']; + const contentType = (data == null) ? null : data['mime-type']; if (contentType == null) { document.contentType = contentType; } - var wrapper = {documents: [document]}; + const wrapper = {documents: [document]}; - var systemTime = headers.systemTime; + const systemTime = headers.systemTime; if (systemTime != null) { wrapper.systemTime = systemTime; } @@ -911,7 +911,7 @@ function singleWriteOutputTransform(headers, data) { function writeListOutputTransform(headers, data) { // var operation = this; - var systemTime = headers.systemTime; + const systemTime = headers.systemTime; if (systemTime == null) { return data; } @@ -968,10 +968,10 @@ function writeDocumentsImpl(contentOnly, args) { throw new Error('must provide uris for document write()'); } - var arg = args[0]; + const arg = args[0]; - var documents = arg.documents; - var params = (documents == null) ? null : arg; + let documents = arg.documents; + const params = (documents == null) ? null : arg; if (params !== null) { if (!Array.isArray(documents)) { documents = [documents]; @@ -982,24 +982,24 @@ function writeDocumentsImpl(contentOnly, args) { documents = args; } - var isSingleDoc = (documents.length === 1); + const isSingleDoc = (documents.length === 1); - var document = isSingleDoc ? documents[0] : null; - var hasDocument = (document != null); - var hasContent = hasDocument && (document.content != null); + const document = isSingleDoc ? documents[0] : null; + const hasDocument = (document != null); + const hasContent = hasDocument && (document.content != null); - var requestParams = + const requestParams = (params !== null) ? params : (hasDocument) ? document : null; - var categories = (requestParams == null) ? null : requestParams.categories; + let categories = (requestParams == null) ? null : requestParams.categories; if (typeof categories === 'string' || categories instanceof String) { categories = [categories]; } if (categories != null) { - for (var i = 0; i < categories.length; i++) { + for (let i = 0; i < categories.length; i++) { categories[i] = categories[i] === 'metadataValues' ? 'metadata-values' : categories[i]; } } @@ -1017,19 +1017,19 @@ function writeDocumentsImpl(contentOnly, args) { /** @ignore */ function writeMetadata(document, categories) { /*jshint validthis:true */ - var uri = document.uri; + const uri = document.uri; - var endpoint = '/v1/documents?uri='+encodeURIComponent(uri); + let endpoint = '/v1/documents?uri='+encodeURIComponent(uri); if (!Array.isArray(categories)) { categories = []; } - var hasCategories = (categories.length > 0); + let hasCategories = (categories.length > 0); if (!hasCategories) { - var categoryCheck = ['collections', 'permissions', 'quality', 'properties', 'metadataValues']; - var category = null; - var i = 0; + const categoryCheck = ['collections', 'permissions', 'quality', 'properties', 'metadataValues']; + let category = null; + let i = 0; for (i = 0; i < categoryCheck.length; i++) { category = categoryCheck[i]; if (document[category] != null) { @@ -1046,12 +1046,12 @@ function writeMetadata(document, categories) { endpoint += '&category='+categories.join('&category='); } - var txid = mlutil.convertTransaction(document.txid); + const txid = mlutil.convertTransaction(document.txid); if (txid != null) { endpoint += '&txid='+mlutil.getTxidParam(txid); } - var requestHeaders = { + const requestHeaders = { 'Accept': 'application/json', 'Content-Type': 'application/json' }; @@ -1060,7 +1060,7 @@ function writeMetadata(document, categories) { requestOptions.headers = requestHeaders; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'write single metadata', this.client, requestOptions, 'single', 'empty' ); operation.uri = uri; @@ -1075,32 +1075,32 @@ function writeMetadata(document, categories) { /** @ignore */ function writeContent(contentOnly, document, requestParams, categories, requestType) { /*jshint validthis:true */ - var content = document.content; - var hasContent = (content != null); + const content = document.content; + const hasContent = (content != null); - var endpoint = '/v1/documents'; + let endpoint = '/v1/documents'; - var sep = '?'; + let sep = '?'; - var txid = getTxid(requestParams); + const txid = getTxid(requestParams); - var writeParams = addWriteParams(requestParams, categories, txid); + const writeParams = addWriteParams(requestParams, categories, txid); if (writeParams.length > 0) { endpoint += writeParams; sep = '&'; } - var uri = document.uri; - var hasUri = (uri != null); + const uri = document.uri; + const hasUri = (uri != null); if (hasUri) { endpoint += sep+'uri='+encodeURIComponent(uri); if (sep === '?') { sep = '&'; } } - var i = 0; + let i = 0; - var collections = document.collections; + const collections = document.collections; if (collections != null) { if (Array.isArray(collections)) { for (i=0; i < collections.length; i++) { @@ -1113,12 +1113,12 @@ function writeContent(contentOnly, document, requestParams, categories, requestT } } - var permissions = document.permissions; + const permissions = document.permissions; if (permissions != null) { - var permission = null; - var roleName = null; - var capabilities = null; - var j = 0; + let permission = null; + let roleName = null; + let capabilities = null; + let j = 0; if (Array.isArray(permissions)) { for (i=0; i < permissions.length; i++) { permission = permissions[i]; @@ -1149,28 +1149,28 @@ function writeContent(contentOnly, document, requestParams, categories, requestT } } - var quality = document.quality; + const quality = document.quality; if (quality != null) { endpoint += sep+'quality='+quality; if (sep === '?') { sep = '&'; } } - var metadataValues = document.metadataValues; - for (var key in metadataValues) { + const metadataValues = document.metadataValues; + for (const key in metadataValues) { endpoint += sep+'value:'+key+'='+encodeURIComponent(metadataValues[key]); } - var temporalDocument = document.temporalDocument; + const temporalDocument = document.temporalDocument; if (temporalDocument != null) { endpoint += sep+'temporal-document='+temporalDocument; if (sep === '?') { sep = '&'; } } - var requestHeaders = { + const requestHeaders = { 'Accept': 'application/json' }; - var writeConfig = addWriteConfig(document, hasUri, content, requestHeaders, sep); + const writeConfig = addWriteConfig(document, hasUri, content, requestHeaders, sep); if (writeConfig.length > 0) { endpoint += writeConfig; if (sep === '?') { sep = '&'; } @@ -1179,7 +1179,7 @@ function writeContent(contentOnly, document, requestParams, categories, requestT const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), endpoint, hasUri ? 'PUT' : 'POST'); requestOptions.headers = requestHeaders; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'write single document', this.client, requestOptions, requestType, 'empty' ); if (hasUri) { @@ -1205,18 +1205,18 @@ function writeDocumentList(contentOnly, documents, requestParams, categories) { documents = documents.sort(compareDocuments); } - var endpoint = '/v1/documents'; + let endpoint = '/v1/documents'; - var txid = getTxid(requestParams); + const txid = getTxid(requestParams); - var writeParams = addWriteParams(requestParams, categories, txid); + const writeParams = addWriteParams(requestParams, categories, txid); if (writeParams.length > 0) { endpoint += writeParams; } - var multipartBoundary = mlutil.multipartBoundary; + const multipartBoundary = mlutil.multipartBoundary; - var requestHeaders = { + const requestHeaders = { 'Accept': 'application/json', 'Content-Type': 'multipart/mixed; boundary='+multipartBoundary }; @@ -1225,7 +1225,7 @@ function writeDocumentList(contentOnly, documents, requestParams, categories) { requestOptions.headers = requestHeaders; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'write document list', this.client, requestOptions, 'multipart', 'single' ); operation.uris = getDocumentUris(documents); @@ -1235,8 +1235,8 @@ function writeDocumentList(contentOnly, documents, requestParams, categories) { operation.multipartBoundary = multipartBoundary; - var requestPartList = []; - for (var i=0; i < documents.length; i++) { + const requestPartList = []; + for (let i=0; i < documents.length; i++) { addDocumentParts(operation, requestPartList, documents[i], false); } operation.requestPartList = requestPartList; @@ -1256,9 +1256,9 @@ function getTxid(requestParams) { } /** @ignore */ function addWriteParams(requestParams, categories, txidRaw) { - var writeParams = ''; - var txid = mlutil.convertTransaction(txidRaw); - var sep = '?'; + let writeParams = ''; + const txid = mlutil.convertTransaction(txidRaw); + let sep = '?'; if (requestParams != null) { if (Array.isArray(categories) && categories.length > 0) { writeParams += sep+'category='+categories.join('&category='); @@ -1268,21 +1268,21 @@ function addWriteParams(requestParams, categories, txidRaw) { writeParams += sep+'txid='+mlutil.getTxidParam(txid); if (sep !== '&') { sep = '&'; } } - var transform = mlutil.endpointTransform(requestParams.transform); + const transform = mlutil.endpointTransform(requestParams.transform); if (transform != null) { writeParams += sep+transform; if (sep !== '&') { sep = '&'; } } - var forestName = requestParams.forestName; + const forestName = requestParams.forestName; if (forestName != null) { writeParams += sep+'forest-name='+encodeURIComponent(forestName); if (sep !== '&') { sep = '&'; } } - var temporalCollection = requestParams.temporalCollection; + const temporalCollection = requestParams.temporalCollection; if (temporalCollection != null) { writeParams += sep+'temporal-collection='+encodeURIComponent(temporalCollection); if (sep !== '&') { sep = '&'; } - var systemTime = requestParams.systemTime; + const systemTime = requestParams.systemTime; if (typeof systemTime === 'string' || systemTime instanceof String) { writeParams += '&system-time='+encodeURIComponent(systemTime); } else if (Object.prototype.toString.call(systemTime) === '[object Date]') { @@ -1295,16 +1295,16 @@ function addWriteParams(requestParams, categories, txidRaw) { } /** @ignore */ function addWriteConfig(document, hasUri, content, headers, sep) { - var writeConfig = ''; + let writeConfig = ''; - var isBody = (sep !== '; '); + const isBody = (sep !== '; '); if (!hasUri) { - var extension = document.extension; + const extension = document.extension; if (extension != null) { writeConfig += sep+'extension='+extension; if (isBody && sep === '?') { sep = '&'; } - var directory = document.directory; + const directory = document.directory; if (directory != null) { writeConfig += sep+'directory='+ (isBody ? encodeURIComponent(directory) : directory); @@ -1312,7 +1312,7 @@ function addWriteConfig(document, hasUri, content, headers, sep) { } } - var versionId = document.versionId; + const versionId = document.versionId; if (versionId != null) { if (isBody) { headers['If-Match'] = versionId; @@ -1321,10 +1321,10 @@ function addWriteConfig(document, hasUri, content, headers, sep) { } } - var contentType = document.contentType; - var hasContentType = (contentType != null); - var format = document.format; - var hasFormat = (format != null); + let contentType = document.contentType; + let hasContentType = (contentType != null); + let format = document.format; + let hasFormat = (format != null); if (hasContentType) { if (!hasFormat) { @@ -1399,10 +1399,10 @@ function addWriteConfig(document, hasUri, content, headers, sep) { } /** @ignore */ function addDocumentParts(operation, partList, document, isContentOptional) { - var uri = document.uri; - var hasUri = (uri != null); + const uri = document.uri; + const hasUri = (uri != null); - var disposition = ''; + let disposition = ''; if (hasUri) { disposition = 'attachment; filename="'+uri+'"'; if (document.temporalDocument != null) { @@ -1412,7 +1412,7 @@ function addDocumentParts(operation, partList, document, isContentOptional) { disposition = 'inline'; } - var metadata = collectMetadata(document); + const metadata = collectMetadata(document); if (metadata != null) { partList.push({ headers:{ @@ -1423,13 +1423,13 @@ function addDocumentParts(operation, partList, document, isContentOptional) { }); } - var content = document.content; - var hasContent = (content != null); + const content = document.content; + const hasContent = (content != null); if (hasContent || isContentOptional) { - var headers = {}; - var part = {headers: headers}; + const headers = {}; + const part = {headers: headers}; - var writeConfig = addWriteConfig(document, hasUri, content, headers, '; '); + const writeConfig = addWriteConfig(document, hasUri, content, headers, '; '); if (writeConfig.length > 0) { disposition += writeConfig; } @@ -1446,11 +1446,11 @@ function addDocumentParts(operation, partList, document, isContentOptional) { /** @ignore */ function collectMetadata(document) { - var metadata = null; + let metadata = null; // TODO: create array wrapper for collections, capabilities - var metadataCategories = ['collections', 'permissions', 'quality', 'properties', 'metadataValues']; - for (var i = 0; i < metadataCategories.length; i++) { - var category = metadataCategories[i]; + const metadataCategories = ['collections', 'permissions', 'quality', 'properties', 'metadataValues']; + for (let i = 0; i < metadataCategories.length; i++) { + const category = metadataCategories[i]; if (document !== null) { if (document[category] != null) { if (metadata === null) { @@ -1466,18 +1466,18 @@ function collectMetadata(document) { /** @ignore */ function removeOutputTransform(headers/*, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; if (operation.contentOnly === true) { return operation.uris; } - var wrapper = { + const wrapper = { uris: operation.uris, removed: true }; - var systemTime = headers.systemTime; + const systemTime = headers.systemTime; if (systemTime != null) { wrapper.systemTime = systemTime; } @@ -1524,13 +1524,13 @@ function removeDocumentImpl(contentOnly, args) { throw new Error('must provide uris for document remove()'); } - var uris = null; - var txid = null; - var temporalCollection = null; - var systemTime = null; - var versionId = null; + let uris = null; + let txid = null; + let temporalCollection = null; + let systemTime = null; + let versionId = null; - var arg = args[0]; + const arg = args[0]; if (Array.isArray(arg)) { uris = arg; } else if (typeof arg === 'string' || arg instanceof String) { @@ -1550,7 +1550,7 @@ function removeDocumentImpl(contentOnly, args) { versionId = arg.versionId; } - var path = '/v1/documents?uri='+ + let path = '/v1/documents?uri='+ uris.map(encodeURIComponent).join('&uri='); if (txid != null) { path += '&txid='+mlutil.getTxidParam(txid); @@ -1572,7 +1572,7 @@ function removeDocumentImpl(contentOnly, args) { } mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'remove document', this.client, requestOptions, 'empty', 'empty' ); operation.uris = uris; @@ -1586,22 +1586,22 @@ function removeDocumentImpl(contentOnly, args) { function removeAllOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; if (operation.contentOnly === true) { return operation.collection; } - var output = { + const output = { exists: false }; - var collection = operation.collection; + const collection = operation.collection; if (collection != null) { output.collection = collection; } - var directory = operation.directory; + const directory = operation.directory; if (directory != null) { output.directory = directory; } @@ -1637,18 +1637,18 @@ function removeAllDocumentsImpl(contentOnly, params) { throw new Error('No parameters specifying directory or collection to delete'); } - var deleteAll = (params.all === true); + const deleteAll = (params.all === true); - var collection = params.collection; - var hasCollection = (collection != null); + const collection = params.collection; + const hasCollection = (collection != null); - var directory = params.directory; - var hasDirectory = (directory != null); + const directory = params.directory; + const hasDirectory = (directory != null); - var txid = mlutil.convertTransaction(params.txid); + const txid = mlutil.convertTransaction(params.txid); - var endpoint = '/v1/search'; - var sep = '?'; + let endpoint = '/v1/search'; + let sep = '?'; if (hasCollection || hasDirectory) { if (deleteAll) { @@ -1680,7 +1680,7 @@ function removeAllDocumentsImpl(contentOnly, params) { const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), endpoint, 'DELETE'); mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'remove all documents', this.client, requestOptions, 'empty', 'empty' ); if (hasCollection) { @@ -1752,47 +1752,47 @@ Documents.prototype.query = function queryDocuments(builtQuery, timestamp, resul }; function queryDocumentsImpl(collectionParam, contentOnly, builtQuery, timestamp, resultEstimateCallback) { /*jshint validthis:true */ - var wrapper = qb.makeSearchBody(builtQuery); - - var categories = wrapper.categories; - var optionsName = wrapper.optionsName; - var pageStart = wrapper.pageStart; - var pageLength = wrapper.pageLength; - var txid = mlutil.convertTransaction(wrapper.txid); - var transform = wrapper.transform; - var view = wrapper.view; - var searchBody = wrapper.searchBody; - - var returnDocuments = (pageLength !== 0); + const wrapper = qb.makeSearchBody(builtQuery); + + const categories = wrapper.categories; + const optionsName = wrapper.optionsName; + const pageStart = wrapper.pageStart; + const pageLength = wrapper.pageLength; + const txid = mlutil.convertTransaction(wrapper.txid); + const transform = wrapper.transform; + const view = wrapper.view; + const searchBody = wrapper.searchBody; + + let returnDocuments = (pageLength !== 0); if (!returnDocuments && builtQuery.queryType !== 'qbe') { - var searchOptions = searchBody.search.options; + const searchOptions = searchBody.search.options; if (searchOptions !== void 0) { - var transformResults = searchOptions['transform-results']; + const transformResults = searchOptions['transform-results']; if (transformResults !== null && transformResults !== void 0 && transformResults.apply !== 'empty-snippet') { throw new Error('cannot snippet with page length of zero'); } - var extractResults = searchOptions['extract-document-data']; + const extractResults = searchOptions['extract-document-data']; if (extractResults !== null && extractResults !== void 0) { throw new Error('cannot extract document data with page length of zero'); } } } - var requestPartList = null; + let requestPartList = null; - var isMultipart = false; + let isMultipart = false; - var endpoint = null; + let endpoint = null; if (builtQuery.queryFormat === void 0) { endpoint = '/v1/search?format=json'; } else if (builtQuery.queryType === 'qbe') { - var qbeQuery = searchBody.search.$query; + const qbeQuery = searchBody.search.$query; if (typeof qbeQuery === 'string' || qbeQuery instanceof String) { - var options = searchBody.search.options; - var part = { + const options = searchBody.search.options; + const part = { headers: {'Content-Type': 'application/xml'}, content: qbeQuery }; @@ -1811,7 +1811,7 @@ function queryDocumentsImpl(collectionParam, contentOnly, builtQuery, timestamp, endpoint = '/v1/search?format='+builtQuery.queryFormat; } - var multipartBoundary = + const multipartBoundary = (isMultipart || returnDocuments) ? mlutil.multipartBoundary : null; if (categories != null) { @@ -1867,7 +1867,7 @@ function queryDocumentsImpl(collectionParam, contentOnly, builtQuery, timestamp, }; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'query documents', this.client, requestOptions, (isMultipart ? 'multipart' : 'single'), (returnDocuments ? 'multipart' : 'single') @@ -1897,7 +1897,7 @@ function queryDocumentsImpl(collectionParam, contentOnly, builtQuery, timestamp, /** @ignore */ function patchOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; return { uri: operation.uri @@ -1940,26 +1940,26 @@ function patchOutputTransform(/*headers, data*/) { * a {@link documents#patchResult} success callback. */ Documents.prototype.patch = function patchDocuments() { - var argLen = arguments.length; + const argLen = arguments.length; - var arg = arguments[0]; + let arg = arguments[0]; - var params = (argLen === 1) ? arg : null; + const params = (argLen === 1) ? arg : null; // TODO: allow for raw JSON or XML patch - var uri = null; - var documentOperations = null; - var categories = null; - var temporalCollection = null; - var temporalDocument = null; - var sourceDocument = null; - var txid = null; - var versionId = null; - var pathlang = null; - var format = null; - var isRawPatch = false; - var i = 0; + let uri = null; + let documentOperations = null; + let categories = null; + let temporalCollection = null; + let temporalDocument = null; + let sourceDocument = null; + let txid = null; + let versionId = null; + let pathlang = null; + let format = null; + let isRawPatch = false; + let i = 0; if (params !== null) { uri = params.uri; arg = params.operations; @@ -2022,7 +2022,7 @@ Documents.prototype.patch = function patchDocuments() { } } - var endpoint = '/v1/documents?uri='+encodeURIComponent(uri); + let endpoint = '/v1/documents?uri='+encodeURIComponent(uri); if (categories != null) { if (!Array.isArray(categories)) { categories = [categories]; @@ -2048,7 +2048,7 @@ Documents.prototype.patch = function patchDocuments() { endpoint += '&txid=' + mlutil.getTxidParam(txid); } - var patchBody = isRawPatch ? documentOperations : {patch: documentOperations}; + const patchBody = isRawPatch ? documentOperations : {patch: documentOperations}; if (!isRawPatch && (pathlang != null)) { patchBody.pathlang = pathlang; } @@ -2065,7 +2065,7 @@ Documents.prototype.patch = function patchDocuments() { } mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'patch document', this.client, requestOptions, 'single', 'single' ); operation.uri = uri; @@ -2099,16 +2099,16 @@ Documents.prototype.patch = function patchDocuments() { * strings. */ Documents.prototype.suggest = function suggestDocuments() { - var argLen = arguments.length; + const argLen = arguments.length; if (argLen < 1) { throw new Error('no partial query text or query with bindings'); } - var params = null; - var partial = null; - var query = null; - var bindings = null; - var limit = null; + let params = null; + let partial = null; + let query = null; + let bindings = null; + let limit = null; switch (argLen) { case 1: params = arguments[0]; @@ -2135,10 +2135,10 @@ Documents.prototype.suggest = function suggestDocuments() { throw new Error('no query with bindings for document suggestion'); } - var wrapper = qb.makeSearchBody(query); + const wrapper = qb.makeSearchBody(query); - var searchBody = wrapper.searchBody; - var search = searchBody.search; + const searchBody = wrapper.searchBody; + const search = searchBody.search; if (search == null) { throw new Error('cannot get document suggestions for empty search'); } @@ -2146,35 +2146,35 @@ Documents.prototype.suggest = function suggestDocuments() { throw new Error('cannot get document suggestions for Query By Example (QBE)'); } - var searchOptions = search.options; + let searchOptions = search.options; if (searchOptions == null) { searchOptions = {}; search.options = searchOptions; } - var searchConstraints = searchOptions.constraint; + const searchConstraints = searchOptions.constraint; - var hasBindings = (bindings != null); + const hasBindings = (bindings != null); - var suggestConstraints = hasBindings ? bindings.constraint : null; - var sources = copyConstraints(suggestConstraints, searchConstraints); + const suggestConstraints = hasBindings ? bindings.constraint : null; + const sources = copyConstraints(suggestConstraints, searchConstraints); if (sources.length > 0) { searchOptions['suggestion-source'] = sources; } - var term = hasBindings ? bindings.term : null; + let term = hasBindings ? bindings.term : null; if (term == null) { term = searchOptions.term; } - var termDefault = null; + let termDefault = null; if (term != null) { - termDefault = term['default']; + termDefault = term.default; if (termDefault != null) { searchOptions['default-suggestion-source'] = termDefault; } } - var endpoint = '/v1/suggest?partial-q='+encodeURIComponent(partial); + let endpoint = '/v1/suggest?partial-q='+encodeURIComponent(partial); if (limit != null) { endpoint += '&limit=' + limit; } @@ -2186,7 +2186,7 @@ Documents.prototype.suggest = function suggestDocuments() { }; mlutil.addTxidHeaders(requestOptions, wrapper.txid); - var operation = new Operation( + const operation = new Operation( 'search suggest', this.client, requestOptions, 'single', 'single' ); operation.input = partial; @@ -2225,19 +2225,19 @@ Documents.prototype.writeAll = function writeAllDocuments(stream,options) { }; function writeAllDocumentsImpl(inputStream,jobOptions) { - let path = '/v1/internal/forestinfo'; - let connectionParams = this.client.getConnectionParams(); + const path = '/v1/internal/forestinfo'; + const connectionParams = this.client.getConnectionParams(); const requestOptions = mlutil.newRequestOptions(connectionParams, path, 'GET'); requestOptions.headers = { 'Accept': 'application/json', }; - let operation = new Operation( + const operation = new Operation( 'read forestInfo', this.client, requestOptions, 'empty', 'single' ); - let jobState = { + const jobState = { docInstance : this, stream: inputStream, requesterCount: 0, @@ -2477,20 +2477,20 @@ function queryAllDocumentsImpl(query, jobOptions) { throw new Error('Query needs to be a cts query.'); } - let path = '/v1/internal/forestinfo'; + const path = '/v1/internal/forestinfo'; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'POST'); - let wrapper = {ctsast: bldrbase.exportArg(query.whereClause)}; + const wrapper = {ctsast: bldrbase.exportArg(query.whereClause)}; requestOptions.headers = { 'Accept': 'application/json', 'Content-Type': 'application/json' }; - let operation = new Operation( + const operation = new Operation( 'read forestInfo', this.client, requestOptions, 'single', 'single' ); operation.requestBody = mlutil.marshal(wrapper, operation); - let jobState = { + const jobState = { docInstance : this, jobOptions: (jobOptions)? mlutil.copyProperties(jobOptions):{}, urisReadSoFar: 0, @@ -2542,7 +2542,7 @@ function queryAllDocumentsImpl(query, jobOptions) { function onQueryUrisRequest(output) { const jobState = this; const pageLength = (jobState.jobOptions.batchSize * jobState.jobOptions.queryBatchMultiple); - let endpoint = '/v1/internal/uris?filtered=false&start=1&pageLength='+pageLength; + const endpoint = '/v1/internal/uris?filtered=false&start=1&pageLength='+pageLength; jobState.query = output.query; jobState.forests = output.forests; jobState.requesterCount = output.forests.length; @@ -2574,8 +2574,8 @@ function spinForestRequests(jobState, initialization){ } function onDocUrisCollected(output) { - let jobValues= this; - let jobState = jobValues.jobState; + const jobValues= this; + const jobState = jobValues.jobState; if(output) { const uriArr = output.uriArr; @@ -2586,7 +2586,7 @@ function onDocUrisCollected(output) { const writeSize = jobState.jobOptions.batchSize; let i=0; while(i 0) { overrides = {}; for (i=0; i < bindLen; i++) { @@ -3237,7 +3237,7 @@ function copyConstraints(suggestConstraints, searchConstraints) { copy = null; } - var isCopyKey = null; + let isCopyKey = null; if (Array.isArray(searchConstraints)) { isCopyKey = { collection: true, @@ -3319,18 +3319,18 @@ Documents.prototype.transformAll = function transformAllDocuments(stream, option }; function transformAllDocumentsImpl(inputStream, jobOptions){ - let path = '/v1/internal/forestinfo'; + const path = '/v1/internal/forestinfo'; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'GET'); requestOptions.headers = { 'Accept': 'application/json', }; - let operation = new Operation( + const operation = new Operation( 'read forestInfo', this.client, requestOptions, 'empty', 'single' ); - let jobState = { + const jobState = { docInstance : this, requesterCount: 0, docsTransformedSuccessfully:0, @@ -3416,7 +3416,7 @@ function onTransformAllInit(output) { '&transform='+jobState.jobOptions.transform[0]; if(jobState.jobOptions.transform.length >1){ const transformParams = jobState.jobOptions.transform[1]; - for(let paramName of Object.keys(transformParams)){ + for(const paramName of Object.keys(transformParams)){ const paramValue = transformParams[paramName]; endpoint+= '&'+encodeURIComponent('trans:'+paramName)+'='+encodeURIComponent(paramValue); } @@ -3494,7 +3494,7 @@ function onTransformAllDocs(jobState, writerId) { function transformDocs(jobState, transformBatchArray, writerId){ - let operation = new Operation( + const operation = new Operation( 'transform docs', jobState.docInstance.client, jobState.requestOptions, 'single', 'single' ); operation.validStatusCodes = [200, 201]; @@ -3639,8 +3639,8 @@ Documents.prototype.queryToTransformAll = function queryToTransformAllDocuments( }; function queryToTransformAllDocumentsImpl(query, jobOptions){ - let queryAllJobOptions = {}; - let transformAllJobOptions = {}; + const queryAllJobOptions = {}; + const transformAllJobOptions = {}; if(!jobOptions){ jobOptions = {}; @@ -3687,7 +3687,7 @@ function queryToTransformAllDocumentsImpl(query, jobOptions){ queryAllJobOptions.queryToOptions = transformAllJobOptions; const docInstance = this; - let queryAllStream = queryAllDocumentsImpl.call(docInstance, query, queryAllJobOptions); + const queryAllStream = queryAllDocumentsImpl.call(docInstance, query, queryAllJobOptions); let pipelined = false; queryAllStream.on('data', function(item){ @@ -3731,18 +3731,18 @@ Documents.prototype.removeAllUris = function removeAllUrisDocuments(stream, opti }; function removeAllUrisDocumentsImpl(inputStream, jobOptions){ - let path = '/v1/internal/forestinfo'; + const path = '/v1/internal/forestinfo'; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'GET'); requestOptions.headers = { 'Accept': 'application/json', }; - let operation = new Operation( + const operation = new Operation( 'read forestInfo', this.client, requestOptions, 'empty', 'single' ); - let jobState = { + const jobState = { docInstance : this, requesterCount: 0, docsRemovedSuccessfully:0, @@ -4003,8 +4003,8 @@ Documents.prototype.queryToRemoveAll = function queryToRemoveAllDocuments(query, }; function queryToRemoveAllDocumentsImpl(query, jobOptions){ - let queryAllJobOptions = {}; - let removeAllJobOptions = {}; + const queryAllJobOptions = {}; + const removeAllJobOptions = {}; if(!jobOptions){ jobOptions = {}; @@ -4046,7 +4046,7 @@ function queryToRemoveAllDocumentsImpl(query, jobOptions){ queryAllJobOptions.queryToOptions = removeAllJobOptions; const docInstance = this; - let queryAllStream = queryAllDocumentsImpl.call(docInstance, query, queryAllJobOptions); + const queryAllStream = queryAllDocumentsImpl.call(docInstance, query, queryAllJobOptions); let pipelined = false; queryAllStream.on('data', function(item){ diff --git a/lib/endpoint-proxy.js b/lib/endpoint-proxy.js index 22f57fbf2..949e05125 100644 --- a/lib/endpoint-proxy.js +++ b/lib/endpoint-proxy.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -394,7 +394,7 @@ function expandDataDeclaration(id, dataDeclaration) { function expandParamDeclaration(paramDeclaration) { const paramName = paramDeclaration.name; if (paramName === void 0 || paramName === null) { - throw new Error(`missing parameter name`); + throw new Error('missing parameter name'); } expandDataDeclaration('${paramName} parameter', paramDeclaration); @@ -471,7 +471,7 @@ function expandReturnDeclaration(returnDeclaration) { function expandFunctionDeclaration(functionDeclaration) { const functionName = functionDeclaration.functionName; if (functionName === void 0 || functionName === null) { - throw new Error(`missing function name`); + throw new Error('missing function name'); } let paramsKind = 'empty'; @@ -566,7 +566,7 @@ function expandFunctionDeclaration(functionDeclaration) { } function expandEndpointDeclaration(endpointDeclaration) { const moduleExtension = endpointDeclaration.moduleExtension; - if (typeof moduleExtension !== "string" || moduleExtension.length === 0) { + if (typeof moduleExtension !== 'string' || moduleExtension.length === 0) { throw new Error('invalid module extension configuration: ' + moduleExtension); } else if (!moduleExtension.startsWith('.')) { endpointDeclaration.moduleExtension = '.' + moduleExtension; diff --git a/lib/endpointDeclarationValidator.js b/lib/endpointDeclarationValidator.js index c9ea815a1..a34a325bd 100644 --- a/lib/endpointDeclarationValidator.js +++ b/lib/endpointDeclarationValidator.js @@ -1,81 +1,81 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const Ajv = require('ajv'); const endpointDeclarationSchema = -{"$schema": "http://json-schema.org/draft-07/schema#", - "title": "MarkLogic Endpoint Function Declaration", - "$comment": "SIMPLIFIED TO THE STABLE DECLARATIONS USED FOR CODE GENERATION", - "type": "object", - "definitions": { - "desc": { - "type":"string", "description":"Documentation about the property" +{'$schema': 'http://json-schema.org/draft-07/schema#', + 'title': 'MarkLogic Endpoint Function Declaration', + '$comment': 'SIMPLIFIED TO THE STABLE DECLARATIONS USED FOR CODE GENERATION', + 'type': 'object', + 'definitions': { + 'desc': { + 'type':'string', 'description':'Documentation about the property' }, - "datatype": { - "type":"string", "description":"The type of the value", - "enum":[ - "boolean", "date", "dateTime", "dayTimeDuration", "decimal", "double", "float", - "int", "long", "string", "time", "unsignedInt", "unsignedLong", - "array", "object", - "binaryDocument", "jsonDocument", "textDocument", "xmlDocument", - "session" + 'datatype': { + 'type':'string', 'description':'The type of the value', + 'enum':[ + 'boolean', 'date', 'dateTime', 'dayTimeDuration', 'decimal', 'double', 'float', + 'int', 'long', 'string', 'time', 'unsignedInt', 'unsignedLong', + 'array', 'object', + 'binaryDocument', 'jsonDocument', 'textDocument', 'xmlDocument', + 'session' ] }, - "nullable": { - "type":"boolean", "description":"Whether a null value is allowed", - "default":false + 'nullable': { + 'type':'boolean', 'description':'Whether a null value is allowed', + 'default':false }, - "multiple": { - "type":"boolean", "description":"Whether multiple values are allowed", - "default":false + 'multiple': { + 'type':'boolean', 'description':'Whether multiple values are allowed', + 'default':false } // "$comment": "SIMPLIFIED BY DELETING doubleMeter, doubleLiteral, ulMeter, AND unsignedLongLiteral" }, - "propertyNames": { + 'propertyNames': { // "$comment": "MODIFIED TO ALLOW FOR PROPERTIES DELETED DURING SIMPLIFICATION OR ADDED IN LATER RELEASES", - "pattern": "^\\$?[A-Za-z_][\\w.-]*$" + 'pattern': '^\\$?[A-Za-z_][\\w.-]*$' }, - "properties": { - "functionName": { - "type":"string", "description":"The name of a database function provided by a service declared by service.json" + 'properties': { + 'functionName': { + 'type':'string', 'description':'The name of a database function provided by a service declared by service.json' }, - "endpoint": { - "type":"string", "description":"The full path name of a standalone bulk IO endpoint" + 'endpoint': { + 'type':'string', 'description':'The full path name of a standalone bulk IO endpoint' }, - "desc": {"$ref":"#/definitions/desc"}, - "params": { - "type":"array", "description":"The parameters of the function", - "items": { - "type":"object", - "required": ["name", "datatype"], - "propertyNames": { - "pattern": "^(\\$[A-Za-z_][\\w.-]*|name|desc|datatype|nullable|multiple)$" + 'desc': {'$ref':'#/definitions/desc'}, + 'params': { + 'type':'array', 'description':'The parameters of the function', + 'items': { + 'type':'object', + 'required': ['name', 'datatype'], + 'propertyNames': { + 'pattern': '^(\\$[A-Za-z_][\\w.-]*|name|desc|datatype|nullable|multiple)$' }, - "properties": { - "name": { - "type":"string", "description":"The name of the function parameter" + 'properties': { + 'name': { + 'type':'string', 'description':'The name of the function parameter' }, - "desc": {"$ref":"#/definitions/desc"}, - "datatype": {"$ref":"#/definitions/datatype"}, - "nullable": {"$ref":"#/definitions/nullable"}, - "multiple": {"$ref":"#/definitions/multiple"} + 'desc': {'$ref':'#/definitions/desc'}, + 'datatype': {'$ref':'#/definitions/datatype'}, + 'nullable': {'$ref':'#/definitions/nullable'}, + 'multiple': {'$ref':'#/definitions/multiple'} } } }, - "return": { - "type":"object", "description":"The return value of the function", - "required": ["datatype"], - "propertyNames": { - "pattern": "^(\\$[A-Za-z_][\\w.-]*|desc|datatype|nullable|multiple)$" + 'return': { + 'type':'object', 'description':'The return value of the function', + 'required': ['datatype'], + 'propertyNames': { + 'pattern': '^(\\$[A-Za-z_][\\w.-]*|desc|datatype|nullable|multiple)$' }, - "properties": { - "desc": {"$ref":"#/definitions/desc"}, - "datatype": {"$ref":"#/definitions/datatype"}, - "nullable": {"$ref":"#/definitions/nullable"}, - "multiple": {"$ref":"#/definitions/multiple"} + 'properties': { + 'desc': {'$ref':'#/definitions/desc'}, + 'datatype': {'$ref':'#/definitions/datatype'}, + 'nullable': {'$ref':'#/definitions/nullable'}, + 'multiple': {'$ref':'#/definitions/multiple'} } } // "$comment": "SIMPLIFIED BY DELETING errorDetail AND monitoring" diff --git a/lib/extlibs.js b/lib/extlibs.js index 95a86c854..656fe487b 100644 --- a/lib/extlibs.js +++ b/lib/extlibs.js @@ -1,17 +1,17 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** @ignore */ function pathErrorTransform(message) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var path = operation.path; + const path = operation.path; return (path == null) ? message : (message+' (on '+path+' extension library)'); } @@ -26,7 +26,7 @@ function pathErrorTransform(message) { /** @ignore */ function emptyOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; return { path: operation.path @@ -54,7 +54,7 @@ ExtLibs.prototype.read = function readExtensionLibrary(path) { throw new Error('must specify path when reading the extension library resource'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.path = encodeURI( (path.substr(0,5) === '/ext/') ? ('/v1'+path) : @@ -62,7 +62,7 @@ ExtLibs.prototype.read = function readExtensionLibrary(path) { ('/v1/ext/'+path) ); - var operation = new Operation( + const operation = new Operation( 'read extension library', this.client, requestOptions, 'empty', 'single' ); operation.path = path; @@ -82,20 +82,20 @@ ExtLibs.prototype.read = function readExtensionLibrary(path) { * @param {object|string} source - the library resource */ ExtLibs.prototype.write = function writeExtensionLibrary() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { throw new Error('no arguments for writing an extension library'); } - var path = null; - var permissions = null; - var contentType = null; - var source = null; - var i = 0; - var arg = null; + let path = null; + let permissions = null; + let contentType = null; + let source = null; + let i = 0; + let arg = null; - var params = null; + let params = null; if (argLen === 1) { params = args[0]; path = params.path; @@ -103,7 +103,7 @@ ExtLibs.prototype.write = function writeExtensionLibrary() { contentType = params.contentType; source = params.source; } else { - var argMax = Math.min(argLen,4); + const argMax = Math.min(argLen,4); for (;i < argMax; i++) { arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { @@ -127,15 +127,15 @@ ExtLibs.prototype.write = function writeExtensionLibrary() { throw new Error('must specify the path, content type, and source when writing a extension library'); } - var endpoint = + let endpoint = (path.substr(0,5) === '/ext/') ? ('/v1'+path) : (path.substr(0,1) === '/') ? ('/v1/ext'+path) : ('/v1/ext/'+path); if (Array.isArray(permissions)) { - var role = null; - var capabilities = null; - var j=null; + let role = null; + let capabilities = null; + let j=null; for (i=0; i < permissions.length; i++) { arg = permissions[i]; role = arg['role-name']; @@ -149,14 +149,14 @@ ExtLibs.prototype.write = function writeExtensionLibrary() { } } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'PUT'; requestOptions.headers = { 'Content-Type': contentType }; requestOptions.path = encodeURI(endpoint); - var operation = new Operation( + const operation = new Operation( 'write extension library', this.client, requestOptions, 'single', 'empty' ); operation.path = path; @@ -178,7 +178,7 @@ ExtLibs.prototype.remove = function removeExtensionLibrary(path) { throw new Error('must specify path when deleting the extension library resource'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'DELETE'; requestOptions.path = encodeURI( (path.substr(0,5) === '/ext/') ? ('/v1'+path) : @@ -186,7 +186,7 @@ ExtLibs.prototype.remove = function removeExtensionLibrary(path) { ('/v1/ext/'+path) ); - var operation = new Operation( + const operation = new Operation( 'remove extension library', this.client, requestOptions, 'empty', 'empty' ); operation.path = path; @@ -207,7 +207,7 @@ ExtLibs.prototype.remove = function removeExtensionLibrary(path) { * in the directory */ ExtLibs.prototype.list = function listExtensionLibraries(directory) { - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.headers = { 'Accept': 'application/json' @@ -222,8 +222,8 @@ ExtLibs.prototype.list = function listExtensionLibraries(directory) { requestOptions.path = encodeURI(directory+'/'); } } else { - var hasInitialSlash = (directory.substr(0,1) === '/'); - var hasTrailingSlash = (directory.substr(-1,1) === '/'); + const hasInitialSlash = (directory.substr(0,1) === '/'); + const hasTrailingSlash = (directory.substr(-1,1) === '/'); if (hasInitialSlash && hasTrailingSlash) { requestOptions.path = encodeURI('/v1/ext' + directory); } else if (hasTrailingSlash) { @@ -235,7 +235,7 @@ ExtLibs.prototype.list = function listExtensionLibraries(directory) { } } - var operation = new Operation( + const operation = new Operation( 'list extension libraries', this.client, requestOptions, 'empty', 'single' ); diff --git a/lib/graphs.js b/lib/graphs.js index b60895883..b64660e33 100644 --- a/lib/graphs.js +++ b/lib/graphs.js @@ -1,17 +1,17 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); +const requester = require('./requester.js'); var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); -var qb = require('./query-builder.js'); +const Operation = require('./operation.js'); +const qb = require('./query-builder.js'); var mlutil = require('./mlutil.js'); function uriErrorTransform(message) { /*jshint validthis:true */ - var operation = this; + const operation = this; switch(operation.graphType) { case 'default': return message+' (on default graph)'; @@ -19,7 +19,7 @@ function uriErrorTransform(message) { case 'managed': return message+' (on managed graphs)'; } - var uri = operation.uri; + const uri = operation.uri; if (typeof uri === 'string' || uri instanceof String) { return message+' (on graph '+uri+')'; } @@ -28,12 +28,12 @@ function uriErrorTransform(message) { } function checkOutputTransform(headers, data) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var statusCode = operation.responseStatusCode; - var exists = (statusCode === 200) ? true : false; + const statusCode = operation.responseStatusCode; + const exists = (statusCode === 200) ? true : false; - var output = exists ? operation.responseHeaders : {}; + const output = exists ? operation.responseHeaders : {}; output.exists = exists; return identifyOutput.call(operation, data, output); @@ -44,9 +44,9 @@ function emptyOutputTransform(headers, data) { } function identifyOutput(data, output) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var graphType = operation.graphType; + const graphType = operation.graphType; switch(graphType) { case 'named': output.defaultGraph = false; @@ -71,7 +71,7 @@ function identifyOutput(data, output) { } function listOutputTransform(headers, data) { /*jshint validthis:true */ - var operation = this; + const operation = this; if (data == null) { return data; @@ -123,19 +123,19 @@ function Graphs(client) { * that receives the triples for the graph in the requested format */ Graphs.prototype.read = function readGraph() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { throw new Error('must specify the content type when reading a graph'); } - var contentType = null; - var uri = null; - var category = null; - var txid = null; - var timestamp = null; + let contentType = null; + let uri = null; + let category = null; + let txid = null; + let timestamp = null; - var testArg = args[0]; + const testArg = args[0]; if (typeof testArg === 'string' || testArg instanceof String) { if (argLen > 1) { uri = testArg; @@ -144,7 +144,7 @@ Graphs.prototype.read = function readGraph() { contentType = testArg; } } else { - var params = testArg; + const params = testArg; contentType = params.contentType; uri = params.uri; category = params.category; @@ -155,7 +155,7 @@ Graphs.prototype.read = function readGraph() { } } - var endpoint = (uri == null) ? + let endpoint = (uri == null) ? '/v1/graphs?default' : ('/v1/graphs?graph='+encodeURIComponent(uri)); if (category !== null && category !== void 0) { if (typeof category === 'string' || category instanceof String) { @@ -178,7 +178,7 @@ Graphs.prototype.read = function readGraph() { 'Accept': contentType }; - var operation = new Operation( + const operation = new Operation( 'read graph', this.client, requestOptions, 'empty', 'single' ); if (uri === null) { @@ -270,7 +270,7 @@ Graphs.prototype.createMergeStream = function createGraphMergeStream() { /** @ignore */ function changeGraph(action, isStreaming, args) { /*jshint validthis:true */ - var argLen = args.length; + const argLen = args.length; if (argLen === 0) { throw new Error( isStreaming ? @@ -279,16 +279,16 @@ function changeGraph(action, isStreaming, args) { ); } - var uri = null; - var contentType = null; - var repair = false; - var permissions = null; - var data = null; - var txid = null; + let uri = null; + let contentType = null; + let repair = false; + let permissions = null; + let data = null; + let txid = null; if (argLen > 1 || (typeof args[0] === 'string' || args[0] instanceof String)) { - var arg = null; - var i = argLen - 1; + let arg = null; + let i = argLen - 1; for (; i >= 0; i--) { arg = args[i]; if (typeof arg === 'boolean') { @@ -312,14 +312,14 @@ function changeGraph(action, isStreaming, args) { throw new Error('unknown positional parameter for graphs write: '+arg); } } else { - var params = args[0]; + const params = args[0]; contentType = params.contentType; uri = params.uri; repair = params.repair || false; permissions = params.permissions; data = params.data; txid = mlutil.convertTransaction(params.txid); - var noContentType = (contentType == null); + const noContentType = (contentType == null); if (isStreaming) { if (noContentType) { throw new Error('named parameters must specify the content type for '+action); @@ -331,7 +331,7 @@ function changeGraph(action, isStreaming, args) { } } - var graphType = null; + let graphType = null; if (uri === null || uri === void 0) { graphType = 'default'; } else if (uri instanceof InlineGraphUrisDef) { @@ -340,9 +340,9 @@ function changeGraph(action, isStreaming, args) { graphType = 'named'; } - var sep = '?'; + let sep = '?'; - var endpoint = null; + let endpoint = null; switch(graphType) { case 'named': endpoint = '/v1/graphs?graph='+encodeURIComponent(uri); sep = '&'; break; case 'default': endpoint = '/v1/graphs?default'; sep = '&'; break; @@ -359,7 +359,7 @@ function changeGraph(action, isStreaming, args) { if (sep === '?') { sep = '&'; } } - var permissionsParams = makePermissionsParams(permissions, sep); + const permissionsParams = makePermissionsParams(permissions, sep); if (permissionsParams !== null) { endpoint += permissionsParams; if (sep === '?') { sep = '&'; } @@ -370,7 +370,7 @@ function changeGraph(action, isStreaming, args) { 'Content-Type': contentType }; - var operation = new Operation( + const operation = new Operation( action+' graph', this.client, requestOptions, (isStreaming ? 'chunked' : 'single'), 'empty' ); operation.graphType = graphType; @@ -400,7 +400,7 @@ function changeGraph(action, isStreaming, args) { * called when the triples are removed */ Graphs.prototype.remove = function removeGraph() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); return applyGraph.call(this, 'remove', args); }; @@ -416,15 +416,15 @@ Graphs.prototype.remove = function removeGraph() { * that receives an object with an exists boolean for the graph */ Graphs.prototype.probe = function probeGraph() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); return applyGraph.call(this, 'probe', args); }; /** @ignore */ function applyGraph(action, args) { /*jshint validthis:true */ - var uri = null; - var txid = null; + let uri = null; + let txid = null; switch(args.length) { case 0: break; @@ -444,9 +444,9 @@ function applyGraph(action, args) { break; } - var endpoint = null; - var graphType = null; - var sep = null; + let endpoint = null; + let graphType = null; + let sep = null; if (uri === null || uri === void 0) { endpoint = '/v1/graphs?default'; graphType = 'default'; @@ -471,7 +471,7 @@ function applyGraph(action, args) { const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), endpoint, ((action === 'remove') ? 'DELETE' : 'HEAD')); - var operation = new Operation( + const operation = new Operation( action+' graph', this.client, requestOptions, 'empty', 'empty' ); operation.graphType = graphType; @@ -504,14 +504,14 @@ function applyGraph(action, args) { * on the server */ Graphs.prototype.list = function listGraphs() { - var argLen = arguments.length; + const argLen = arguments.length; - var contentType = null; - var txid = null; - var timestamp = null; + let contentType = null; + let txid = null; + let timestamp = null; if (argLen > 0) { - var arg = null; - var i = argLen - 1; + let arg = null; + let i = argLen - 1; for (; i >= 0; i--) { arg = arguments[i]; if (typeof arg === 'string' || arg instanceof String) { @@ -536,10 +536,10 @@ Graphs.prototype.list = function listGraphs() { } } - var noContentType = (contentType === null || contentType === void 0); + const noContentType = (contentType === null || contentType === void 0); - var endpoint = '/v1/graphs'; - var sep = '?'; + let endpoint = '/v1/graphs'; + let sep = '?'; if (txid !== null && txid !== void 0) { endpoint += sep+'txid='+mlutil.getTxidParam(txid); @@ -560,7 +560,7 @@ Graphs.prototype.list = function listGraphs() { }; } - var operation = new Operation( + const operation = new Operation( 'list graphs', this.client, requestOptions, 'empty', 'single' ); if (!noContentType) { @@ -611,34 +611,34 @@ Graphs.prototype.list = function listGraphs() { * that receives the query response */ Graphs.prototype.sparql = function queryGraphSPARQL() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { throw new Error('must specify content type and query for SPARQL query on graphs'); } - var defaultGraphs = null; - var namedGraphs = null; - var acceptType = null; - var query = null; + let defaultGraphs = null; + let namedGraphs = null; + let acceptType = null; + let query = null; - var docQuery = null; - var begin = null; - var end = null; - var base = null; - var txid = null; - var rulesets = null; - var defaultRulesets = null; - var optimizeLevel = null; - var bindings = null; - var timestamp = null; + let docQuery = null; + let begin = null; + let end = null; + let base = null; + let txid = null; + let rulesets = null; + let defaultRulesets = null; + let optimizeLevel = null; + let bindings = null; + let timestamp = null; // TODO: collection, directory? // Single configuration object if (argLen === 1) { - var params = args[0]; + const params = args[0]; acceptType = params.contentType; defaultGraphs = params.defaultGraphs; namedGraphs = params.namedGraphs; @@ -667,10 +667,10 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { query = args[argLen - 1]; } - var endpoint = '/v1/graphs/sparql'; - var sep = '?'; + let endpoint = '/v1/graphs/sparql'; + let sep = '?'; - var hasDefaultGraphs = (defaultGraphs !== null && defaultGraphs !== void 0); + let hasDefaultGraphs = (defaultGraphs !== null && defaultGraphs !== void 0); if (hasDefaultGraphs) { defaultGraphs = mlutil.asArray(defaultGraphs); if (defaultGraphs.length > 0) { @@ -681,7 +681,7 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { } } - var hasNamedGraphs = (namedGraphs !== null && namedGraphs !== void 0); + let hasNamedGraphs = (namedGraphs !== null && namedGraphs !== void 0); if (hasNamedGraphs) { namedGraphs = mlutil.asArray(namedGraphs); if (namedGraphs.length > 0) { @@ -692,7 +692,7 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { } } - var hasBegin = (begin !== null && begin !== void 0); + const hasBegin = (begin !== null && begin !== void 0); if (hasBegin) { if (begin >= 0) { endpoint += sep+'start='+(begin + 1); @@ -717,7 +717,7 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { } } - var commonParams = makeCommonSPARQLParams( + const commonParams = makeCommonSPARQLParams( base, txid, rulesets, defaultRulesets, optimizeLevel, bindings, sep ); if (commonParams !== null) { @@ -725,14 +725,14 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { if (sep === '?') { sep = '&'; } } - var contentType = null; - var queryBody = null; + let contentType = null; + let queryBody = null; if (docQuery === null || docQuery === void 0) { contentType = 'application/sparql-query'; queryBody = query; } else { contentType = 'application/json'; - var builtQuery = + const builtQuery = (docQuery instanceof qb.lib.QueryBuilder || docQuery.search !== void 0) ? docQuery : qb.builder.where(docQuery); if (builtQuery.queryType === 'qbe') { @@ -750,7 +750,7 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { 'Accept': acceptType }; - var operation = new Operation( + const operation = new Operation( 'SPARQL graph query', this.client, requestOptions, 'single', 'single' ); if (hasDefaultGraphs) { @@ -795,25 +795,25 @@ Graphs.prototype.sparql = function queryGraphSPARQL() { * called when the triples are updated */ Graphs.prototype.sparqlUpdate = function updateGraphSPARQL() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { throw new Error('must specify data for SPARQL update on graphs'); } - var permissions = null; - var usingDefaultGraphs = null; - var usingNamedGraphs = null; - var base = null; - var txid = null; - var rulesets = null; - var defaultRulesets = null; - var optimizeLevel = null; - var bindings = null; + let permissions = null; + let usingDefaultGraphs = null; + let usingNamedGraphs = null; + let base = null; + let txid = null; + let rulesets = null; + let defaultRulesets = null; + let optimizeLevel = null; + let bindings = null; - var arg = args[0]; - var data = (argLen === 1) ? arg.data : null; + const arg = args[0]; + let data = (argLen === 1) ? arg.data : null; if (data !== null && data !== void 0) { permissions = arg.permissions; usingDefaultGraphs = arg.usingDefaultGraphs; @@ -831,10 +831,10 @@ Graphs.prototype.sparqlUpdate = function updateGraphSPARQL() { data = args[0]; } - var endpoint = '/v1/graphs/sparql'; - var sep = '?'; + let endpoint = '/v1/graphs/sparql'; + let sep = '?'; - var hasUsingDefaultGraphs = (usingDefaultGraphs !== null && usingDefaultGraphs !== void 0); + let hasUsingDefaultGraphs = (usingDefaultGraphs !== null && usingDefaultGraphs !== void 0); if (hasUsingDefaultGraphs) { usingDefaultGraphs = mlutil.asArray(usingDefaultGraphs); if (usingDefaultGraphs.length > 0) { @@ -845,7 +845,7 @@ Graphs.prototype.sparqlUpdate = function updateGraphSPARQL() { } } - var hasUsingNamedGraphs = (usingNamedGraphs !== null && usingNamedGraphs !== void 0); + let hasUsingNamedGraphs = (usingNamedGraphs !== null && usingNamedGraphs !== void 0); if (hasUsingNamedGraphs) { usingNamedGraphs = mlutil.asArray(usingNamedGraphs); if (usingNamedGraphs.length > 0) { @@ -856,13 +856,13 @@ Graphs.prototype.sparqlUpdate = function updateGraphSPARQL() { } } - var permissionsParams = makePermissionsParams(permissions, sep); + const permissionsParams = makePermissionsParams(permissions, sep); if (permissionsParams !== null) { endpoint += permissionsParams; if (sep === '?') { sep = '&'; } } - var commonParams = makeCommonSPARQLParams( + const commonParams = makeCommonSPARQLParams( base, txid, rulesets, defaultRulesets, optimizeLevel, bindings, sep ); if (commonParams !== null) { @@ -875,7 +875,7 @@ Graphs.prototype.sparqlUpdate = function updateGraphSPARQL() { 'Content-Type': 'application/sparql-update' }; - var operation = new Operation( + const operation = new Operation( 'SPARQL graph update', this.client, requestOptions, 'single', 'empty' ); @@ -895,15 +895,15 @@ function makePermissionsParams(permissions, sep) { return null; } - var endpoint = ''; + let endpoint = ''; - var permLen = permissions.length; - var permdef = null; - var roleName = null; - var capabilities = null; - var capLen = 0; - var j = 0; - for (var i = 0; i < permLen; i++) { + const permLen = permissions.length; + let permdef = null; + let roleName = null; + let capabilities = null; + let capLen = 0; + let j = 0; + for (let i = 0; i < permLen; i++) { permdef = permissions[i]; roleName = permdef['role-name']; capabilities = permdef.capabilities; @@ -919,8 +919,8 @@ function makePermissionsParams(permissions, sep) { function makeCommonSPARQLParams( base, txidRaw, rulesets, defaultRulesets, optimizeLevel, bindings, sep ) { - var endpoint = ''; - var txid = mlutil.convertTransaction(txidRaw); + let endpoint = ''; + const txid = mlutil.convertTransaction(txidRaw); if (base !== null && base !== void 0) { endpoint += sep+'base='+encodeURIComponent(base); if (sep === '?') { sep = '&'; } @@ -949,9 +949,9 @@ function makeCommonSPARQLParams( } function encodeParamValues(name, values) { if (Array.isArray(values)) { - var result = null; - var max = values.length; - for (var i=0; i < max; i++) { + let result = null; + const max = values.length; + for (let i=0; i < max; i++) { if (i === 0) { result = encodeURIComponent(name)+'='+encodeURIComponent(values[i]); } else { diff --git a/lib/internal.js b/lib/internal.js index 883b0fdfe..bcfbeeff5 100644 --- a/lib/internal.js +++ b/lib/internal.js @@ -1,11 +1,11 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -const Operation = require("./operation"); -const requester = require("./requester.js"); -const mlutil = require("./mlutil"); +const Operation = require('./operation'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil'); class InternalClass { constructor(clientObject) { this.clientObject = clientObject; @@ -14,18 +14,18 @@ class InternalClass { if(!path){ throw new Error('Path is needed to send request.'); } - let requestOptions = mlutil.newRequestOptions(this.clientObject.getConnectionParams(), path); + const requestOptions = mlutil.newRequestOptions(this.clientObject.getConnectionParams(), path); if (requestOptionsCallback) { requestOptionsCallback(requestOptions); } - const operation = new Operation("", this.clientObject, requestOptions, "single", "single"); + const operation = new Operation('', this.clientObject, requestOptions, 'single', 'single'); if (operationCallback) { operationCallback(operation); } if (!operation.validStatusCodes) { operation.validStatusCodes = [200, 201, 204, 404]; } - + return requester.startRequest(operation); } } diff --git a/lib/marklogic.js b/lib/marklogic.js index 1090ebafb..be579a34d 100644 --- a/lib/marklogic.js +++ b/lib/marklogic.js @@ -1,35 +1,35 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var http = require('http'); -var https = require('https'); - -var mlutil = require('./mlutil.js'); -var mllog = require('./mllog.js'); - -var documents = require('./documents.js'); -var Graphs = require('./graphs.js'); -var Rows = require('./rows.js'); -var Values = require('./values.js'); -var ExtLibs = require('./extlibs.js'); -var RESTServerProperties = require('./rest-server-properties.js'); -var Transactions = require('./transactions.js'); -var Transforms = require('./transforms.js'); -var ResourcesConfig = require('./resources-config.js'); -var ResourcesExec = require('./resources-exec.js'); -var serverExec = require('./server-exec.js'); - -var queryBuilder = require('./query-builder.js'); -var patchBuilder = require('./patch-builder.js'); -var valuesBuilder = require('./values-builder.js'); -var planBuilder = require('./plan-builder.js'); -var ctsQueryBuilder = require('./ctsquery-builder'); -var Operation = require('./operation.js'); -var requester = require('./requester.js'); -let internal = require('./internal.js'); - -const proxy = require("./endpoint-proxy.js"); +const http = require('http'); +const https = require('https'); + +const mlutil = require('./mlutil.js'); +const mllog = require('./mllog.js'); + +const documents = require('./documents.js'); +const Graphs = require('./graphs.js'); +const Rows = require('./rows.js'); +const Values = require('./values.js'); +const ExtLibs = require('./extlibs.js'); +const RESTServerProperties = require('./rest-server-properties.js'); +const Transactions = require('./transactions.js'); +const Transforms = require('./transforms.js'); +const ResourcesConfig = require('./resources-config.js'); +const ResourcesExec = require('./resources-exec.js'); +const serverExec = require('./server-exec.js'); + +const queryBuilder = require('./query-builder.js'); +const patchBuilder = require('./patch-builder.js'); +const valuesBuilder = require('./values-builder.js'); +const planBuilder = require('./plan-builder.js'); +const ctsQueryBuilder = require('./ctsquery-builder'); +const Operation = require('./operation.js'); +const requester = require('./requester.js'); +const internal = require('./internal.js'); + +const proxy = require('./endpoint-proxy.js'); const dns = require('dns'); /** @@ -181,9 +181,9 @@ ExtlibsWrapper.prototype.remove = function removeExtlibsWrapper() { ); }; ExtlibsWrapper.prototype.write = function writeExtlibsWrapper() { - var args = expandExtlibsWrapper.call(this, 'writing', mlutil.asArray.apply(null, arguments)); - var module = args[0]; - var ext = mlutil.extension(module); + const args = expandExtlibsWrapper.call(this, 'writing', mlutil.asArray.apply(null, arguments)); + const module = args[0]; + const ext = mlutil.extension(module); if (ext === null) { throw new Error(module+' module for '+this.name+' library must have an extension of .mjs, .sjs, or .xqy'); } @@ -205,7 +205,7 @@ ExtlibsWrapper.prototype.write = function writeExtlibsWrapper() { }; function expandExtlibsWrapper(action, args) { /*jshint validthis:true */ - var module = (args.length > 0) ? args[0] : null; + const module = (args.length > 0) ? args[0] : null; if (typeof module !== 'string' && !(module instanceof String)) { throw new Error('no module name for '+action+' '+this.name+' library'); } @@ -321,7 +321,7 @@ function MarkLogicClient(connectionParams) { */ this.values = new Values(this); - var configExtlibs = new ExtLibs(this); + const configExtlibs = new ExtLibs(this); /** * Provides access to namespaces that configure the REST server for the client. @@ -381,7 +381,7 @@ MarkLogicClient.prototype.getConnectionParams = function getConnectionParams() { */ MarkLogicClient.prototype.checkConnection = function checkConnection() { const requestOptions = mlutil.newRequestOptions(this.connectionParams, '/v1/ping', 'HEAD'); - var operation = new Operation( + const operation = new Operation( 'test operation', this, requestOptions, 'empty', 'empty' ); operation.statusCodeValidator = function testStatusCodes(statusCode, response){ @@ -391,7 +391,7 @@ MarkLogicClient.prototype.checkConnection = function checkConnection() { return null; }; operation.outputTransform = function addOutputTransform() { - var content = null; + let content = null; if(this.responseStatusCode <300) { content = {connected: true}; } else { @@ -426,24 +426,24 @@ MarkLogicClient.prototype.invoke = serverExec.serverInvoke; * a success callback receiving an array of uri strings for the created documents. */ MarkLogicClient.prototype.createCollection = function createCollection() { - var argLen = arguments.length; + const argLen = arguments.length; if (argLen < 2) { throw new Error('must specify both a collection and content objects for document create'); } - var collection = arguments[0]; + const collection = arguments[0]; if (typeof collection !== 'string' && !(collection instanceof String)) { throw new Error('must specify at least one collection for document create'); } - var contentArray = arguments[1]; - var i = 0; + let contentArray = arguments[1]; + let i = 0; if (!Array.isArray(contentArray)) { i = 1; contentArray = arguments; } - var documentList = []; + const documentList = []; for (; i < contentArray.length; i++) { documentList.push({ collections: collection, @@ -567,25 +567,25 @@ MarkLogicClient.prototype.removeCollection = function removeCollectionClient(col * a success callback receiving an array of uri strings for the written documents. */ MarkLogicClient.prototype.writeCollection = function writeClient() { - var argLen = arguments.length; + const argLen = arguments.length; if (argLen < 2) { throw new Error('must specify both a collection and mapping object for quick document write'); } - var collection = arguments[0]; + const collection = arguments[0]; if (typeof collection !== 'string' && !(collection instanceof String)) { throw new Error('must specify at least one collection for quick document write'); } - var map = arguments[1]; - var uris = Object.keys(map); + const map = arguments[1]; + const uris = Object.keys(map); if (uris.length === 0) { throw new Error('must map at least one document uri to content for quick document write'); } - var documentList = []; - var uri = null; - var i = 0; + const documentList = []; + let uri = null; + let i = 0; for (; i < uris.length; i++) { uri = uris[i]; documentList.push({ @@ -616,14 +616,14 @@ MarkLogicClient.prototype.release = function releaseMarkLogicClient() { * must be provided as true for Bunyan (but not for Winston); defaults to false */ MarkLogicClient.prototype.setLogger = function setClientLogger() { - var argLen = arguments.length; + const argLen = arguments.length; if (argLen < 1) { throw new Error('must provide a logger as the first argument'); } - var arg = arguments[0]; + const arg = arguments[0]; if (typeof arg === 'string' || arg instanceof String) { - var logger = (argLen === 1) ? this.getLogger() : null; + const logger = (argLen === 1) ? this.getLogger() : null; if (logger instanceof mllog.ConsoleLogger) { logger.setLevel(arg); } else { @@ -639,7 +639,7 @@ MarkLogicClient.prototype.setLogger = function setClientLogger() { /** @ignore */ MarkLogicClient.prototype.getLogger = function getClientLogger() { - var logger = this.logger; + let logger = this.logger; if (logger == null) { logger = new mllog.ConsoleLogger(); @@ -663,7 +663,7 @@ MarkLogicClient.prototype.getLogger = function getClientLogger() { * @returns {Timestamp} - a Timestamp object. */ MarkLogicClient.prototype.createTimestamp = function databaseCreateTimestamp(value) { - let ts = new mlutil.Timestamp(value ? value : null); + const ts = new mlutil.Timestamp(value ? value : null); return ts; }; @@ -711,20 +711,20 @@ MarkLogicClient.prototype.endpointCaller =function endpointCaller(endpointDeclar }; function initClient(client, inputParams) { - var connectionParams = {}; - var isSSL = (inputParams.ssl == null) ? false : inputParams.ssl; + const connectionParams = {}; + let isSSL = (inputParams.ssl == null) ? false : inputParams.ssl; if(inputParams.authType && inputParams.authType.toString().toLowerCase() === 'cloud' && !isSSL){ isSSL = true; } - var keys = ['host', 'port', 'database', 'user', 'password', 'authType', 'token', 'basePath','apiKey','accessTokenDuration', + const keys = ['host', 'port', 'database', 'user', 'password', 'authType', 'token', 'basePath','apiKey','accessTokenDuration', 'enableGzippedResponses', 'oauthToken']; if(isSSL) { keys.push('ca', 'cert', 'ciphers', 'clientCertEngine', 'crl', 'dhparam', 'ecdhCurve', 'honorCipherOrder', 'key', 'passphrase', 'pfx', 'rejectUnauthorized', 'secureOptions', 'secureProtocol', 'servername', 'sessionIdContext', 'highWaterMark'); } - for (var i=0; i < keys.length; i++) { - var key = keys[i]; - var value = inputParams[key]; + for (let i=0; i < keys.length; i++) { + const key = keys[i]; + const value = inputParams[key]; if (value != null) { connectionParams[key] = value; } else if (key === 'host') { @@ -771,8 +771,8 @@ function initClient(client, inputParams) { connectionParams.user+':'+connectionParams.password; } - var noAgent = (inputParams.agent == null); - var agentOptions = noAgent ? { + const noAgent = (inputParams.agent == null); + const agentOptions = noAgent ? { keepAlive: true } : null; if (isSSL) { @@ -799,7 +799,7 @@ function initClient(client, inputParams) { client.internal = new internal.InternalClass(client); } function releaseClient(client) { - var agent = client.connectionParams.agent; + const agent = client.connectionParams.agent; if (agent == null){ return; } diff --git a/lib/mllog.js b/lib/mllog.js index 317c020a2..6e0133565 100644 --- a/lib/mllog.js +++ b/lib/mllog.js @@ -1,8 +1,8 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var util = require('util'); +const util = require('util'); diff --git a/lib/mlutil.js b/lib/mlutil.js index 3184a3458..e5b453bee 100644 --- a/lib/mlutil.js +++ b/lib/mlutil.js @@ -1,14 +1,14 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var util = require("util"); +const util = require('util'); -var multipartBoundary = 'MLBOUND_' + Date.UTC(2014,12,31); +const multipartBoundary = 'MLBOUND_' + Date.UTC(2014,12,31); // Normalize arguments by returning them as an array. function asArray() { - var argLen = arguments.length; + const argLen = arguments.length; switch(argLen) { // No arguments returns an empty array case 0: @@ -24,22 +24,22 @@ function asArray() { // List of arguments returns an array with arguments as elements default: var args = new Array(argLen); - for(var i=0; i < argLen; ++i) { + for(let i=0; i < argLen; ++i) { args[i] = arguments[i]; } return args; } } function copyProperties(source, target, srcKeys) { - var dest = (arguments.length > 1) ? target : {}; - var isNamed = Array.isArray(srcKeys); - var keys = isNamed ? srcKeys : Object.keys(source); + const dest = (arguments.length > 1) ? target : {}; + const isNamed = Array.isArray(srcKeys); + const keys = isNamed ? srcKeys : Object.keys(source); // for...in not currently optimized by v8 - var keyLen = keys.length; - for (var i=0; i < keyLen; i++) { - var key = keys[i]; - var val = source[key]; + const keyLen = keys.length; + for (let i=0; i < keyLen; i++) { + const key = keys[i]; + const val = source[key]; if (!isNamed || (val !== void 0 && val !== null)) { dest[key] = val; } @@ -64,7 +64,7 @@ function appendItem(object, key, value) { return; } - var array = object[key]; + const array = object[key]; if (array === void 0) { object[key] = [value]; } else { @@ -86,8 +86,8 @@ function MarkLogicError(firstArg, secondArg) { return new MarkLogicError(firstArg, secondArg); } - var name = null; - var message = null; + let name = null; + let message = null; if (firstArg == null) { message = 'unknown error'; } else if (secondArg == null) { @@ -108,8 +108,8 @@ function MarkLogicError(firstArg, secondArg) { util.inherits(MarkLogicError, Error); function callbackOn(object, method) { - var self = object; - var func = method; + const self = object; + const func = method; return function callBackMethod() { return func.apply(self, arguments); }; @@ -127,8 +127,8 @@ function endpointTransform(transform) { var endpointParam = 'transform='+encodeURIComponent(transform[0]); var transformParams = transform[1]; var transformKeys = Object.keys(transformParams); - for (var i=0; i < transformKeys.length; i++) { - var transformKey = transformKeys[i]; + for (let i=0; i < transformKeys.length; i++) { + const transformKey = transformKeys[i]; endpointParam += '&trans:'+encodeURIComponent(transformKey)+'='+ encodeURIComponent(transformParams[transformKey]); } @@ -142,7 +142,7 @@ function endpointTransform(transform) { function newRequestOptions(connectionParams, endpoint, method) { const requestOptions = copyProperties(connectionParams); - let database = connectionParams.database; + const database = connectionParams.database; if(connectionParams.basePath) { const basePath = connectionParams.basePath.toString(); let fixedBasePath = (connectionParams.host.toString().endsWith('/') && basePath.startsWith('/')) ? basePath.substring(1):basePath; @@ -166,14 +166,14 @@ function newRequestOptions(connectionParams, endpoint, method) { } function extension(filename) { - var extStart = filename.lastIndexOf('.') + 1; + const extStart = filename.lastIndexOf('.') + 1; if (extStart === 0 || extStart === filename.length) { return null; } return filename.substring(extStart); } function rootname(filename) { - var extStart = filename.lastIndexOf('.'); + const extStart = filename.lastIndexOf('.'); if (extStart === 0 || extStart === filename.length) { return null; } @@ -187,7 +187,7 @@ function identify(arg, withValues) { if (arg === null) { return 'null'; } - var typed = typeof arg; + const typed = typeof arg; switch(typed) { case 'boolean' : return withValues ? typed+' '+arg : typed; case 'function' : return typed; @@ -296,7 +296,7 @@ function Transaction(id, cookies) { this.txid = id; if (Array.isArray(cookies) && cookies.length > 0) { - for (var i=0; i < cookies.length; i++) { + for (let i=0; i < cookies.length; i++) { cookies[i] = cookies[i].replace(/;\s*expires\s*=[^;]+(;|$)/i, '$1'); } this.cookies = cookies; @@ -329,9 +329,9 @@ function getTxidParam(txid, action) { } function addTxidHeaders(requestOptions, txid) { if (txid instanceof Transaction) { - var cookies = txid.cookies; + const cookies = txid.cookies; if (cookies != null) { - var headers = requestOptions.headers; + const headers = requestOptions.headers; if (headers != null) { headers.cookie = cookies; } else { @@ -358,22 +358,22 @@ function Timestamp(value) { } // Slice mode can be 'array' or 'legacy' -var sliceMode = 'array'; +let sliceMode = 'array'; function setSliceMode(mode) { sliceMode = mode; } function makeSliceClause(variant, args) { - var argLen = args.length; + const argLen = args.length; - var sliceClause = {}; + const sliceClause = {}; - var firstArg = null; - var secondArg = null; + let firstArg = null; + let secondArg = null; - var argMax = Math.min(argLen, ((variant === 'query') ? 5 : 3)); - var arg = null; - for (var i=0; i < argMax; i++) { + const argMax = Math.min(argLen, ((variant === 'query') ? 5 : 3)); + let arg = null; + for (let i=0; i < argMax; i++) { arg = args[i]; if (typeof arg === 'number' || arg instanceof Number) { switch(i) { @@ -410,7 +410,7 @@ function makeSliceClause(variant, args) { } if (firstArg !== null && secondArg !== 0) { - var pageStart = (sliceMode === 'legacy') ? firstArg : firstArg + 1; + const pageStart = (sliceMode === 'legacy') ? firstArg : firstArg + 1; if (pageStart === 0 && secondArg === null) { sliceClause['page-length'] = 0; } else { diff --git a/lib/operation.js b/lib/operation.js index b2e1c3246..9f4392022 100644 --- a/lib/operation.js +++ b/lib/operation.js @@ -1,9 +1,9 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var mlutil = require('./mlutil.js'); +const mlutil = require('./mlutil.js'); function Operation(name, client, options, requestType, responseType) { if (!(this instanceof Operation)) { @@ -48,11 +48,11 @@ Operation.prototype.STREAM_MODES_CHUNKED_OBJECT_SEQUENCE = Operation.prototype.emptyHeaderData = function emptyHeaderData( response ) { - var operation = this; + const operation = this; - var outputTransform = operation.outputTransform; + const outputTransform = operation.outputTransform; if (outputTransform != null) { - var responseHeaders = operation.responseHeaders; + let responseHeaders = operation.responseHeaders; if (responseHeaders == null) { operation.copyResponseHeaders(response); responseHeaders = operation.responseHeaders; @@ -66,16 +66,16 @@ Operation.prototype.emptyHeaderData = function emptyHeaderData( return null; }; Operation.prototype.collectBodyObject = function collectBodyObject(data) { - var operation = this; + const operation = this; - var outputTransform = operation.outputTransform; - var hasOutputTransform = (outputTransform != null); + const outputTransform = operation.outputTransform; + const hasOutputTransform = (outputTransform != null); - var headers = operation.responseHeaders; + const headers = operation.responseHeaders; - var bodyObject = mlutil.unmarshal(headers.format, data); + let bodyObject = mlutil.unmarshal(headers.format, data); if (bodyObject !== null) { - var subdata = operation.subdata; + const subdata = operation.subdata; if (Array.isArray(subdata)) { bodyObject = projectData(bodyObject, subdata, 0); } @@ -98,25 +98,25 @@ Operation.prototype.collectBodyObject = function collectBodyObject(data) { Operation.prototype.makeObject = function makeObject( data, rawHeaderQueue ) { - var operation = this; + const operation = this; - var outputTransform = operation.outputTransform; - var partObject = null; + const outputTransform = operation.outputTransform; + let partObject = null; // Get corresponding multipart header for part - var partRawHeaders = rawHeaderQueue.pollFirst(); - var partHeaders = parsePartHeaders(partRawHeaders); - var partUri = partHeaders.uri; + const partRawHeaders = rawHeaderQueue.pollFirst(); + const partHeaders = parsePartHeaders(partRawHeaders); + const partUri = partHeaders.uri; - var isInline = (partUri == null && !partHeaders.kind); - var isMetadata = ( + const isInline = (partUri == null && !partHeaders.kind); + const isMetadata = ( !isInline && (partHeaders.category != null) && partHeaders.category !== 'content' ); // Convert buffer data to object - var partData = mlutil.unmarshal(partHeaders.format, data); + const partData = mlutil.unmarshal(partHeaders.format, data); // Inline case if (isInline) { @@ -135,7 +135,7 @@ Operation.prototype.makeObject = function makeObject( else if (isMetadata) { operation.logger.debug('parsed metadata for %s', partUri); if (this.nextMetadataBuffer !== null) { - var metadataHeaders = this.nextMetadataBuffer[0]; + const metadataHeaders = this.nextMetadataBuffer[0]; mlutil.copyProperties(this.nextMetadataBuffer[1], metadataHeaders); partObject = metadataHeaders; } @@ -156,7 +156,7 @@ Operation.prototype.makeObject = function makeObject( if (partObject !== null) { // Subdata processing (poor man's XPath) - var subdata = operation.subdata; + const subdata = operation.subdata; if (Array.isArray(subdata)) { partObject = projectData(partObject, subdata, 0); } @@ -171,16 +171,16 @@ Operation.prototype.makeObject = function makeObject( return partObject; }; Operation.prototype.dispatchError = function dispatchError(error) { - var operation = this; + const operation = this; - var input = + const input = (error == null) ? operation.makeError('unknown error') : (typeof error === 'string' || error instanceof String) ? operation.makeError(error) : error; - var outputStream = operation.outputStream; + const outputStream = operation.outputStream; if (outputStream != null) { - var errorListeners = outputStream.listeners('error'); + const errorListeners = outputStream.listeners('error'); if (Array.isArray(errorListeners) && errorListeners.length > 0) { outputStream.emit('error', input); } else { @@ -193,7 +193,7 @@ Operation.prototype.dispatchError = function dispatchError(error) { } }; Operation.prototype.logError = function logError(error) { - var operation = this; + const operation = this; if (error.body == null) { operation.logger.error(error.message); @@ -204,13 +204,13 @@ Operation.prototype.logError = function logError(error) { } }; Operation.prototype.makeError = function makeError(message) { - var operation = this; + const operation = this; - var operationName = operation.name; - var operationMsg = (operationName === void 0) ? message : + const operationName = operation.name; + let operationMsg = (operationName === void 0) ? message : (operationName+': '+message); - var errorTransform = operation.errorTransform; + const errorTransform = operation.errorTransform; const responsePath = operation.options.path; const subMsg = (responsePath && responsePath.toString().includes('?'))? responsePath.toString().substring(0,responsePath.toString().indexOf('?') ): @@ -222,13 +222,13 @@ Operation.prototype.makeError = function makeError(message) { ); }; Operation.prototype.copyResponseHeaders = function copyResponseHeaders(response) { - var operation = this; + const operation = this; - var responseHeaders = response.headers; + const responseHeaders = response.headers; - var contentType = trimContentType(responseHeaders['content-type']); + const contentType = trimContentType(responseHeaders['content-type']); - var format = responseHeaders['vnd.marklogic.document-format']; + let format = responseHeaders['vnd.marklogic.document-format']; if ((format == null) && contentType !== null) { format = contentTypeToFormat(contentType); } @@ -267,11 +267,11 @@ function OperationHeaders( if (versionId == null) { this.versionId = null; } else { - var firstChar = versionId.charAt(0); - var lastChar = versionId.charAt(versionId.length - 1); + const firstChar = versionId.charAt(0); + const lastChar = versionId.charAt(versionId.length - 1); this.versionId = ( (firstChar === '"' && lastChar === '"') || - (firstChar === "'" && lastChar === "'") + (firstChar === '\'' && lastChar === '\'') ) ? versionId.substring(1, versionId.length - 1) : versionId; } @@ -283,7 +283,7 @@ function trimContentType(contentType) { if (contentType == null) { return null; } - var semicolonPos = contentType.indexOf(';'); + const semicolonPos = contentType.indexOf(';'); return (semicolonPos > 0) ? contentType.substring(0, semicolonPos) : contentType; } @@ -292,7 +292,7 @@ function contentTypeToFormat(contentType) { return null; } - var fields = contentType.split(/[\/+]/); + const fields = contentType.split(/[\/+]/); switch(fields[0]) { case 'application': switch(fields[fields.length - 1]) { @@ -326,21 +326,21 @@ function contentTypeToFormat(contentType) { } function parsePartHeaders(headers) { - var partHeaders = {}; + const partHeaders = {}; - var contentDispositionArray = headers['content-disposition']; + const contentDispositionArray = headers['content-disposition']; if (Array.isArray(contentDispositionArray) && contentDispositionArray.length > 0) { - var contentDisposition = contentDispositionArray[0]; + let contentDisposition = contentDispositionArray[0]; if (contentDisposition.substring(contentDisposition.length) !== ';') { contentDisposition += ';'; } - var tokens = contentDisposition.match(/"[^"]*"|;|=|[^";=\s]+/g); - var key = null; - var value = null; - for (var i=0; i < tokens.length; i++) { - var token = tokens[i]; + const tokens = contentDisposition.match(/"[^"]*"|;|=|[^";=\s]+/g); + let key = null; + let value = null; + for (let i=0; i < tokens.length; i++) { + const token = tokens[i]; switch(token) { case ';': if (key) { @@ -350,7 +350,7 @@ function parsePartHeaders(headers) { value = value.substring(1,value.length - 1); } - var currentValue = partHeaders[key]; + const currentValue = partHeaders[key]; if (!currentValue) { partHeaders[key] = value; } else if (currentValue instanceof Array) { @@ -378,8 +378,8 @@ function parsePartHeaders(headers) { } } - var contentTypeArray = headers['content-type']; - var contentType = null; + const contentTypeArray = headers['content-type']; + let contentType = null; if (Array.isArray(contentTypeArray) && contentTypeArray.length > 0) { contentType = trimContentType(contentTypeArray[0]); partHeaders.contentType = contentType; @@ -389,12 +389,12 @@ function parsePartHeaders(headers) { partHeaders.format = contentTypeToFormat(contentType); } - var contentLengthArray = headers['content-length']; + const contentLengthArray = headers['content-length']; if (Array.isArray(contentLengthArray) && contentLengthArray.length > 0) { partHeaders.contentLength = contentLengthArray[0]; } - var contentIdArray = headers['content-id']; + const contentIdArray = headers['content-id']; if (Array.isArray(contentIdArray) && contentIdArray.length > 0) { partHeaders.contentId = contentIdArray[0].slice(1, -1); } @@ -407,19 +407,19 @@ function projectData(data, subdata, i) { return data; } - var key = subdata[i]; + const key = subdata[i]; if (!Array.isArray(data)) { - var nextData = data[key]; + const nextData = data[key]; if (nextData == null) { return data; } return projectData(nextData, subdata, i + 1); } - var newData = []; - for (var j=0; j < data.length; j++) { - var currItem = data[j]; - var nextValue = currItem[key]; + const newData = []; + for (let j=0; j < data.length; j++) { + const currItem = data[j]; + const nextValue = currItem[key]; newData.push( (nextValue == null) ? currItem : projectData(nextValue, subdata, i + 1) diff --git a/lib/optional.js b/lib/optional.js index b48f7a1a4..228c92344 100644 --- a/lib/optional.js +++ b/lib/optional.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -14,7 +14,7 @@ function library(libname) { } } function libraryProperty(libname, propertyName) { - var lib = library(libname); + const lib = library(libname); if (lib == null) { return null; } diff --git a/lib/patch-builder.js b/lib/patch-builder.js index 1fadc1577..f70b78a1d 100644 --- a/lib/patch-builder.js +++ b/lib/patch-builder.js @@ -1,12 +1,12 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var mlutil = require('./mlutil.js'); +const mlutil = require('./mlutil.js'); -var qb = require('./query-builder.js'); +const qb = require('./query-builder.js'); /** * A helper for building the definition of a document patch. The helper is @@ -33,12 +33,12 @@ var qb = require('./query-builder.js'); * @returns {patchBuilder.PatchOperation} a patch operation */ function remove() { - var select = null; - var cardinality = null; + let select = null; + let cardinality = null; - var argLen = arguments.length; - for (var i=0; i < argLen; i++) { - var arg = arguments[i]; + const argLen = arguments.length; + for (let i=0; i < argLen; i++) { + const arg = arguments[i]; if (i === 0) { select = arg; continue; @@ -54,7 +54,7 @@ function remove() { throw new Error('remove takes select and optional cardinality'); } - var operation = { + const operation = { select: select }; if (cardinality !== null) { @@ -80,14 +80,14 @@ function remove() { * @returns {patchBuilder.PatchOperation} a patch operation */ function insert() { - var context = null; - var position = null; - var content = void 0; - var cardinality = null; - - var argLen = arguments.length; - for (var i=0; i < argLen; i++) { - var arg = arguments[i]; + let context = null; + let position = null; + let content = void 0; + let cardinality = null; + + const argLen = arguments.length; + for (let i=0; i < argLen; i++) { + const arg = arguments[i]; if (i === 0) { context = arg; continue; @@ -96,7 +96,7 @@ function insert() { content = arg; continue; } - var isString = (typeof arg === 'string' || arg instanceof String); + const isString = (typeof arg === 'string' || arg instanceof String); if (isString) { if (position === null && /^(before|after|last-child)$/.test(arg)) { position = arg; @@ -120,7 +120,7 @@ function insert() { ); } - var operation = { + const operation = { context: context, position: position, content: content @@ -142,7 +142,7 @@ function insert() { * Specifies a library supplying functions to apply to existing content * to produce the replacement content as part of * {@link patchBuilder#replace} or {@link patchBuilder#replaceInsert} operations. - * The library must be installed as /ext/marklogic/patch/apply/MODULE_NAME.xqy + * The library must be installed as /ext/marklogic/patch/apply/MODULE_NAME.xqy * or /ext/marklogic/patch/apply/MODULE_NAME.sjs and must have the * http://marklogic.com/patch/apply/MODULE_NAME namespace if the library has .xqy extension. * @method @@ -158,13 +158,13 @@ function library(module) { ); } - var rootname = mlutil.rootname(module); + const rootname = mlutil.rootname(module); if (rootname === null) { throw new Error('library must have an extension of .sjs or .xqy'); } - var extension = module.substring((module.lastIndexOf('.')+1), module.length); + const extension = module.substring((module.lastIndexOf('.')+1), module.length); - if(extension === "sjs") { + if(extension === 'sjs') { return {'replace-library':{ at: '/ext/marklogic/patch/apply/'+module }}; @@ -195,9 +195,9 @@ function library(module) { * @returns {patchBuilder.ApplyDefinition} the specification for applying a function */ function apply() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const argLen = args.length; switch(argLen) { case 0: throw new Error('no name for function to apply'); @@ -412,14 +412,14 @@ function replaceRegex(match, replace, flags) { * @returns {patchBuilder.PatchOperation} a patch operation */ function replace() { - var select = null; - var content = void 0; - var cardinality = null; - var apply = null; - - var argLen = arguments.length; - for (var i=0; i < argLen; i++) { - var arg = arguments[i]; + let select = null; + let content = void 0; + let cardinality = null; + let apply = null; + + const argLen = arguments.length; + for (let i=0; i < argLen; i++) { + const arg = arguments[i]; if (i === 0) { select = arg; continue; @@ -428,7 +428,7 @@ function replace() { content = arg; continue; } - var isString = (typeof arg === 'string' || arg instanceof String); + const isString = (typeof arg === 'string' || arg instanceof String); if (isString && cardinality === null && /^[?.*+]$/.test(arg)) { cardinality = arg; continue; @@ -455,7 +455,7 @@ function replace() { ); } - var operation = { + const operation = { select: select, content: content }; @@ -493,16 +493,16 @@ function replace() { * @returns {patchBuilder.PatchOperation} a patch operation */ function replaceInsert() { - var select = null; - var context = null; - var position = null; - var content = void 0; - var cardinality = null; - var apply = null; - - var argLen = arguments.length; - for (var i=0; i < argLen; i++) { - var arg = arguments[i]; + let select = null; + let context = null; + let position = null; + let content = void 0; + let cardinality = null; + let apply = null; + + const argLen = arguments.length; + for (let i=0; i < argLen; i++) { + const arg = arguments[i]; if (i === 0) { select = arg; continue; @@ -515,7 +515,7 @@ function replaceInsert() { content = arg; continue; } - var isString = (typeof arg === 'string' || arg instanceof String); + const isString = (typeof arg === 'string' || arg instanceof String); if (isString) { if (position === null && /^(before|after|last-child)$/.test(arg)) { position = arg; @@ -547,7 +547,7 @@ function replaceInsert() { ); } - var operation = { + const operation = { select: select, context: context, position: position, @@ -583,14 +583,14 @@ function replaceInsert() { * @returns {patchBuilder.PathLanguageParam} the specification for the path language */ function pathLanguage() { - var pathlang = (arguments.length < 1) ? null : arguments[0]; + const pathlang = (arguments.length < 1) ? null : arguments[0]; if (pathlang !== 'jsonpath' && pathlang !== 'xpath') { throw new Error( 'pathLanguage takes a path language of xpath or jsonpath' ); } - return {"pathlang": pathlang}; + return {'pathlang': pathlang}; } /** @@ -642,7 +642,7 @@ function removeCollection(collection) { * @returns {patchBuilder.PatchOperation} a patch operation */ function addPermission() { - var permission = getPermission( + const permission = getPermission( mlutil.asArray.apply(null, arguments) ); if (permission === null) { @@ -662,7 +662,7 @@ function addPermission() { * capabilities from the insert|update|read|execute enumeration */ function replacePermission() { - var permission = getPermission( + const permission = getPermission( mlutil.asArray.apply(null, arguments) ); if (permission === null) { @@ -688,13 +688,13 @@ function removePermission(roleName) { } /** @ignore */ function getPermission(args) { - var argLen = args.length; + const argLen = args.length; - var roleName = null; - var capabilities = null; - var isObject = false; + let roleName = null; + let capabilities = null; + let isObject = false; - var first = (argLen === 0) ? null : args[0]; + const first = (argLen === 0) ? null : args[0]; if (first !== null) { if (args.length > 1 && typeof first === 'string') { roleName = first; @@ -713,10 +713,10 @@ function getPermission(args) { return null; } - var check = {execute:true, insert:true, read:true, update:true}; + const check = {execute:true, insert:true, read:true, update:true}; if (Array.isArray(capabilities)) { - var max = capabilities.length; - for (var i=0; i < max; i++) { + const max = capabilities.length; + for (let i=0; i < max; i++) { if (!check[capabilities[i]]) { return null; } @@ -754,7 +754,7 @@ function addProperty(name, value) { if (typeof name !== 'string' || value == null) { throw new Error('properties.add() takes a string name and a value'); } - var prop = {}; + const prop = {}; prop[name] = value; return insert('/object-node("properties")', 'last-child', prop); } @@ -822,7 +822,7 @@ function addMetadataValue(name, value) { if (typeof name !== 'string' || typeof value !== 'string' ) { throw new Error('metadataValues.add() takes a string name and string value'); } - var metaVal = {}; + const metaVal = {}; metaVal[name] = value; return insert('/object-node("metadataValues")', 'last-child', metaVal); } diff --git a/lib/plan-builder-base.js b/lib/plan-builder-base.js index 59c17b04c..cbeb91499 100644 --- a/lib/plan-builder-base.js +++ b/lib/plan-builder-base.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -131,7 +131,7 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { return true; } throw new Error( - `bm25LengthWeight must be a number` + 'bm25LengthWeight must be a number' ); default: return false; @@ -261,11 +261,11 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { ); } if(key === 'permissions'){ - let permissionValue = []; + const permissionValue = []; for(let i=0; i { if(key === 'kind') { - if(typeof arg[key] !== "string") { + if(typeof arg[key] !== 'string') { throw new Error( `${argLabel(funcName, paramName, argPos)} has another type than string` ); @@ -329,7 +329,7 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { } } if(key === 'mode') { - if(typeof arg[key] !== "string") { + if(typeof arg[key] !== 'string') { throw new Error( `${argLabel(funcName, paramName, argPos)} has another type than string` ); @@ -337,7 +337,7 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { return true; } if(key === 'schemaUri') { - if(typeof arg[key] !== "string") { + if(typeof arg[key] !== 'string') { throw new Error( `${argLabel(funcName, paramName, argPos)} has another type than string` ); @@ -350,7 +350,7 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { const value = arg[key]; const type = typeof value; if(key === 'path') { - if(type !== "string") { + if(type !== 'string') { throw new Error( `${argLabel(funcName, paramName, argPos)} should be a type of string` ); @@ -366,7 +366,7 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { return true; } if(key === 'params') { - if(type !== "object") { + if(type !== 'object') { throw new Error( `${argLabel(funcName, paramName, argPos)} should be a type of object` ); @@ -381,7 +381,7 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) { } objKeys.every(key => { if(key === 'column') { - if(typeof arg[key] !== "string") { + if(typeof arg[key] !== 'string') { throw new Error( `${argLabel(funcName, paramName, argPos)} has another type than string` ); @@ -538,7 +538,7 @@ function makeSingleArgs(funcName, minArity, paramDef, args) { function exportOperators(plan) { const operList = plan._operators; if (!Array.isArray(operList)) { - throw new Error(`operator list is not an array: `+operList); + throw new Error('operator list is not an array: '+operList); } return { ns: 'op', diff --git a/lib/plan-builder-generated.js b/lib/plan-builder-generated.js index d413945ba..41b967648 100755 --- a/lib/plan-builder-generated.js +++ b/lib/plan-builder-generated.js @@ -1,14 +1,14 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -/* -The contents of this file are mostly an output of the Optic code generator. -But some parts have been manually modified. So care needs to be taken when +/* +The contents of this file are mostly an output of the Optic code generator. +But some parts have been manually modified. So care needs to be taken when running the code generator to not lose any manual modifications, each of -which should either be commented or should be obvious, such as changes in -version numbers for "since" annotations. +which should either be commented or should be obvious, such as changes in +version numbers for "since" annotations. */ const types = require('./server-types-generated.js'); @@ -52,7 +52,7 @@ andNotQuery(...args) { * @method planBuilder.cts#andQuery * @since 2.1.1 * @param { CtsQuery } [queries] - A sequence of sub-queries. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "ordered" An ordered and-query, which specifies that the sub-query matches must occur in the order of the specified sub-queries. For example, if the sub-queries are "cat" and "dog", an ordered query will only match fragments where both "cat" and "dog" occur, and where "cat" comes before "dog" in the fragment. "unordered" An unordered and-query, which specifies that the sub-query matches can occur in any order. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "ordered" An ordered and-query, which specifies that the sub-query matches must occur in the order of the specified sub-queries. For example, if the sub-queries are "cat" and "dog", an ordered query will only match fragments where both "cat" and "dog" occur, and where "cat" comes before "dog" in the fragment. "unordered" An unordered and-query, which specifies that the sub-query matches can occur in any order. * @returns { CtsQuery } */ andQuery(...args) { @@ -217,7 +217,7 @@ collectionQuery(...args) { * Creates a reference to the collection lexicon, for use as a parameter to cts:value-tuples. Since lexicons are implemented with range indexes, this function will throw an exception if the specified range index does not exist. Provides a client interface to a server function. See {@link http://docs.marklogic.com/cts.collectionReference|cts.collectionReference} * @method planBuilder.cts#collectionReference * @since 2.1.1 - * @param { XsString } [options] - Options. The default is (). Options include: "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Do not check the definition against the context database. + * @param { XsString } [options] - Options. The default is (). Options include: "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Do not check the definition against the context database. * @returns { CtsReference } */ collectionReference(...args) { @@ -233,8 +233,8 @@ collectionReference(...args) { * @param { XsString } [view] - The TDE view name. * @param { XsString } [column] - The TDE column name. * @param { XsAnyAtomicType } [value] - One or more values used for querying. - * @param { XsString } [operator] - Operator for the $value values. The default operator is "=". Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. + * @param { XsString } [operator] - Operator for the $value values. The default operator is "=". Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -354,7 +354,7 @@ documentRootQuery(...args) { * @param { XsQName } [latitudeName] - One or more latitude attribute QNames to match. When multiple QNames are specified, the query matches if any QName matches; however, only the first matching latitude attribute in any point instance will be checked. * @param { XsQName } [longitudeName] - One or more longitude attribute QNames to match. When multiple QNames are specified, the query matches if any QName matches; however, only the first matching longitude attribute in any point instance will be checked. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -373,9 +373,9 @@ elementAttributePairGeospatialQuery(...args) { * @since 2.1.1 * @param { XsQName } [elementName] - One or more element QNames to match. When multiple QNames are specified, the query matches if any QName matches. * @param { XsQName } [attributeName] - One or more attribute QNames to match. When multiple QNames are specified, the query matches if any QName matches. - * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. * @param { XsAnyAtomicType } [value] - Some values to match. When multiple values are specified, the query matches if any value matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -394,7 +394,7 @@ elementAttributeRangeQuery(...args) { * @since 2.1.1 * @param { XsQName } [element] - An element QName. * @param { XsQName } [attribute] - An attribute QName. - * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. + * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. * @returns { CtsReference } */ elementAttributeReference(...args) { @@ -433,7 +433,7 @@ elementAttributeValueQuery(...args) { * @param { XsQName } [elementName] - One or more element QNames to match. When multiple QNames are specified, the query matches if any QName matches. * @param { XsQName } [attributeName] - One or more attribute QNames to match. When multiple QNames are specified, the query matches if any QName matches. * @param { XsString } [text] - Some words or phrases to match. When multiple strings are specified, the query matches if any string matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "case-sensitive" A case-sensitive query. "case-insensitive" A case-insensitive query. "diacritic-sensitive" A diacritic-sensitive query. "diacritic-insensitive" A diacritic-insensitive query. "punctuation-sensitive" A punctuation-sensitive query. "punctuation-insensitive" A punctuation-insensitive query. "whitespace-sensitive" A whitespace-sensitive query. "whitespace-insensitive" A whitespace-insensitive query. "stemmed" A stemmed query. "unstemmed" An unstemmed query. "wildcarded" A wildcarded query. "unwildcarded" An unwildcarded query. "exact" An exact match query. Shorthand for "case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive", "unstemmed", and "unwildcarded". "lang=iso639code" Specifies the language of the query. The iso639code code portion is case-insensitive, and uses the languages specified by ISO 639. The default is specified in the database configuration. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "synonym" Specifies that all of the terms in the $text parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). "lexicon-expand=value" The value is one of full, prefix-postfix, off, or heuristic (the default is heuristic). An option with a value of lexicon-expand=full specifies that wildcards are resolved by expanding the pattern to words in a lexicon (if there is one available), and turning into a series of cts:word-queries, even if this takes a long time to evaluate. An option with a value of lexicon-expand=prefix-postfix specifies that wildcards are resolved by expanding the pattern to the pre- and postfixes of the words in the word lexicon (if there is one), and turning the query into a series of character queries, even if it takes a long time to evaluate. An option with a value of lexicon-expand=off specifies that wildcards are only resolved by looking up character patterns in the search pattern index, not in the lexicon. An option with a value of lexicon-expand=heuristic, which is the default, specifies that wildcards are resolved by using a series of internal rules, such as estimating the number of lexicon entries that need to be scanned, seeing if the estimate crosses certain thresholds, and (if appropriate), using another way besides lexicon expansion to resolve the query. * "lexicon-expansion-limit=number" Specifies the limit for lexicon expansion. This puts a restriction on the number of lexicon expansions that can be performed. If the limit is exceeded, the server may raise an error depending on whether the "limit-check" option is set. The default value for this option will be 4096. "limit-check" Specifies that an error will be raised if the lexicon expansion exceeds the specified limit. "no-limit-check" Specifies that error will not be raised if the lexicon expansion exceeds the specified limit. The server will try to resolve the wildcard. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "case-sensitive" A case-sensitive query. "case-insensitive" A case-insensitive query. "diacritic-sensitive" A diacritic-sensitive query. "diacritic-insensitive" A diacritic-insensitive query. "punctuation-sensitive" A punctuation-sensitive query. "punctuation-insensitive" A punctuation-insensitive query. "whitespace-sensitive" A whitespace-sensitive query. "whitespace-insensitive" A whitespace-insensitive query. "stemmed" A stemmed query. "unstemmed" An unstemmed query. "wildcarded" A wildcarded query. "unwildcarded" An unwildcarded query. "exact" An exact match query. Shorthand for "case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive", "unstemmed", and "unwildcarded". "lang=iso639code" Specifies the language of the query. The iso639code code portion is case-insensitive, and uses the languages specified by ISO 639. The default is specified in the database configuration. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "synonym" Specifies that all of the terms in the $text parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). "lexicon-expand=value" The value is one of full, prefix-postfix, off, or heuristic (the default is heuristic). An option with a value of lexicon-expand=full specifies that wildcards are resolved by expanding the pattern to words in a lexicon (if there is one available), and turning into a series of cts:word-queries, even if this takes a long time to evaluate. An option with a value of lexicon-expand=prefix-postfix specifies that wildcards are resolved by expanding the pattern to the pre- and postfixes of the words in the word lexicon (if there is one), and turning the query into a series of character queries, even if it takes a long time to evaluate. An option with a value of lexicon-expand=off specifies that wildcards are only resolved by looking up character patterns in the search pattern index, not in the lexicon. An option with a value of lexicon-expand=heuristic, which is the default, specifies that wildcards are resolved by using a series of internal rules, such as estimating the number of lexicon entries that need to be scanned, seeing if the estimate crosses certain thresholds, and (if appropriate), using another way besides lexicon expansion to resolve the query. * "lexicon-expansion-limit=number" Specifies the limit for lexicon expansion. This puts a restriction on the number of lexicon expansions that can be performed. If the limit is exceeded, the server may raise an error depending on whether the "limit-check" option is set. The default value for this option will be 4096. "limit-check" Specifies that an error will be raised if the lexicon expansion exceeds the specified limit. "no-limit-check" Specifies that error will not be raised if the lexicon expansion exceeds the specified limit. The server will try to resolve the wildcard. * @param { XsDouble } [weight] - A weight for this query. Higher weights move search results up in the relevance order. The default is 1.0. The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. Weights less than the absolute value of 0.0625 (between -0.0625 and 0.0625) are rounded to 0, which means that they do not contribute to the score. * @returns { CtsQuery } */ @@ -453,7 +453,7 @@ elementAttributeWordQuery(...args) { * @param { XsQName } [elementName] - One or more parent element QNames to match. When multiple QNames are specified, the query matches if any QName matches. * @param { XsQName } [childName] - One or more child element QNames to match. When multiple QNames are specified, the query matches if any QName matches; however, only the first matching latitude child in any point instance will be checked. The element must specify both latitude and longitude coordinates. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -472,7 +472,7 @@ elementChildGeospatialQuery(...args) { * @since 2.1.1 * @param { XsQName } [elementName] - One or more element QNames to match. When multiple QNames are specified, the query matches if any QName matches. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -493,7 +493,7 @@ elementGeospatialQuery(...args) { * @param { XsQName } [latitudeName] - One or more latitude element QNames to match. When multiple QNames are specified, the query matches if any QName matches; however, only the first matching latitude child in any point instance will be checked. * @param { XsQName } [longitudeName] - One or more longitude element QNames to match. When multiple QNames are specified, the query matches if any QName matches; however, only the first matching longitude child in any point instance will be checked. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -528,9 +528,9 @@ elementQuery(...args) { * @method planBuilder.cts#elementRangeQuery * @since 2.1.1 * @param { XsQName } [elementName] - One or more element QNames to match. When multiple QNames are specified, the query matches if any QName matches. - * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. * @param { XsAnyAtomicType } [value] - One or more element values to match. When multiple values are specified, the query matches if any value matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -548,7 +548,7 @@ elementRangeQuery(...args) { * @method planBuilder.cts#elementReference * @since 2.1.1 * @param { XsQName } [element] - An element QName. - * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. + * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. * @returns { CtsReference } */ elementReference(...args) { @@ -614,9 +614,9 @@ falseQuery(...args) { * @method planBuilder.cts#fieldRangeQuery * @since 2.1.1 * @param { XsString } [fieldName] - One or more field names to match. When multiple field names are specified, the query matches if any field name matches. - * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. * @param { XsAnyAtomicType } [value] - One or more field values to match. When multiple values are specified, the query matches if any value matches. The value must be a type for which there is a range index defined. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -634,7 +634,7 @@ fieldRangeQuery(...args) { * @method planBuilder.cts#fieldReference * @since 2.1.1 * @param { XsString } [field] - A field name. - * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. + * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. * @returns { CtsReference } */ fieldReference(...args) { @@ -652,7 +652,7 @@ fieldReference(...args) { * @since 2.1.1 * @param { XsString } [fieldName] - One or more field names to search over. If multiple field names are supplied, the match can be in any of the specified fields (or-query semantics). * @param { XsAnyAtomicType } [text] - The values to match. If multiple values are specified, the query matches if any of the values match (or-query semantics). For XML and metadata, the values should be strings. For JSON, the values can be strings, numbers or booleans to match correspondingly typed nodes. To match null, pass in the empty sequence. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "case-sensitive" A case-sensitive query. "case-insensitive" A case-insensitive query. "diacritic-sensitive" A diacritic-sensitive query. "diacritic-insensitive" A diacritic-insensitive query. "punctuation-sensitive" A punctuation-sensitive query. "punctuation-insensitive" A punctuation-insensitive query. "whitespace-sensitive" A whitespace-sensitive query. "whitespace-insensitive" A whitespace-insensitive query. "stemmed" A stemmed query. "unstemmed" An unstemmed query. "wildcarded" A wildcarded query. "unwildcarded" An unwildcarded query. "exact" An exact match query. Shorthand for "case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive", "unstemmed", and "unwildcarded". "lang=iso639code" Specifies the language of the query. The iso639code code portion is case-insensitive, and uses the languages specified by ISO 639. The default is specified in the database configuration. "distance-weight=number" A weight applied based on the minimum distance between matches of this query. Higher weights add to the importance of proximity (as opposed to term matches) when the relevance order is calculated. The default value is 0.0 (no impact of proximity). The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. This parameter has no effect if the word positions index is not enabled. This parameter has no effect on searches that use score-simple or score-random (because those scoring algorithms do not consider term frequency, proximity is irrelevant). "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "synonym" Specifies that all of the terms in the $text parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). "lexicon-expansion-limit=number" Specifies the limit for lexicon expansion. This puts a restriction on the number of lexicon expansions that can be performed. If the limit is exceeded, the server may raise an error depending on whether the "limit-check" option is set. The default value for this option will be 4096. "limit-check" Specifies that an error will be raised if the lexicon expansion exceeds the specified limit. "no-limit-check" Specifies that error will not be raised if the lexicon expansion exceeds the specified limit. The server will try to resolve the wildcard. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "case-sensitive" A case-sensitive query. "case-insensitive" A case-insensitive query. "diacritic-sensitive" A diacritic-sensitive query. "diacritic-insensitive" A diacritic-insensitive query. "punctuation-sensitive" A punctuation-sensitive query. "punctuation-insensitive" A punctuation-insensitive query. "whitespace-sensitive" A whitespace-sensitive query. "whitespace-insensitive" A whitespace-insensitive query. "stemmed" A stemmed query. "unstemmed" An unstemmed query. "wildcarded" A wildcarded query. "unwildcarded" An unwildcarded query. "exact" An exact match query. Shorthand for "case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive", "unstemmed", and "unwildcarded". "lang=iso639code" Specifies the language of the query. The iso639code code portion is case-insensitive, and uses the languages specified by ISO 639. The default is specified in the database configuration. "distance-weight=number" A weight applied based on the minimum distance between matches of this query. Higher weights add to the importance of proximity (as opposed to term matches) when the relevance order is calculated. The default value is 0.0 (no impact of proximity). The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. This parameter has no effect if the word positions index is not enabled. This parameter has no effect on searches that use score-simple or score-random (because those scoring algorithms do not consider term frequency, proximity is irrelevant). "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "synonym" Specifies that all of the terms in the $text parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). "lexicon-expansion-limit=number" Specifies the limit for lexicon expansion. This puts a restriction on the number of lexicon expansions that can be performed. If the limit is exceeded, the server may raise an error depending on whether the "limit-check" option is set. The default value for this option will be 4096. "limit-check" Specifies that an error will be raised if the lexicon expansion exceeds the specified limit. "no-limit-check" Specifies that error will not be raised if the lexicon expansion exceeds the specified limit. The server will try to resolve the wildcard. * @param { XsDouble } [weight] - A weight for this query. Higher weights move search results up in the relevance order. The default is 1.0. The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. Weights less than the absolute value of 0.0625 (between -0.0625 and 0.0625) are rounded to 0, which means that they do not contribute to the score. * @returns { CtsQuery } */ @@ -671,7 +671,7 @@ fieldValueQuery(...args) { * @since 2.1.1 * @param { XsString } [fieldName] - One or more field names to search over. If multiple field names are supplied, the match can be in any of the specified fields (or-query semantics). * @param { XsString } [text] - The word or phrase to match. If multiple strings are specified, the query matches if any of the words or phrases match (or-query semantics). - * @param { XsString } [options] - Options to this query. The default is (). Options include: "case-sensitive" A case-sensitive query. "case-insensitive" A case-insensitive query. "diacritic-sensitive" A diacritic-sensitive query. "diacritic-insensitive" A diacritic-insensitive query. "punctuation-sensitive" A punctuation-sensitive query. "punctuation-insensitive" A punctuation-insensitive query. "whitespace-sensitive" A whitespace-sensitive query. "whitespace-insensitive" A whitespace-insensitive query. "stemmed" A stemmed query. "unstemmed" An unstemmed query. "wildcarded" A wildcarded query. "unwildcarded" An unwildcarded query. "exact" An exact match query. Shorthand for "case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive", "unstemmed", and "unwildcarded". "lang=iso639code" Specifies the language of the query. The iso639code code portion is case-insensitive, and uses the languages specified by ISO 639. The default is specified in the database configuration. "distance-weight=number" A weight applied based on the minimum distance between matches of this query. Higher weights add to the importance of proximity (as opposed to term matches) when the relevance order is calculated. The default value is 0.0 (no impact of proximity). The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. This parameter has no effect if the word positions index is not enabled. This parameter has no effect on searches that use score-simple, score-random, or score-zero (because those scoring algorithms do not consider term frequency, proximity is irrelevant). "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "synonym" Specifies that all of the terms in the $text parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). "lexicon-expand=value" The value is one of full, prefix-postfix, off, or heuristic (the default is heuristic). An option with a value of lexicon-expand=full specifies that wildcards are resolved by expanding the pattern to words in a lexicon (if there is one available), and turning into a series of cts:word-queries, even if this takes a long time to evaluate. An option with a value of lexicon-expand=prefix-postfix specifies that wildcards are resolved by expanding the pattern to the pre- and postfixes of the words in the word lexicon (if there is one), and turning the query into a series of character queries, even if it takes a long time to evaluate. An option with a value of lexicon-expand=off specifies that wildcards are only resolved by looking up character patterns in the search pattern index, not in the lexicon. An option with a value of lexicon-expand=heuristic, which is the default, specifies that wildcards are resolved by using a series of internal rules, such as estimating the number of lexicon entries that need to be scanned, seeing if the estimate crosses certain thresholds, and (if appropriate), using another way besides lexicon expansion to resolve the query. "lexicon-expansion-limit=number" Specifies the limit for lexicon expansion. This puts a restriction on the number of lexicon expansions that can be performed. If the limit is exceeded, the server may raise an error depending on whether the "limit-check" option is set. The default value for this option will be 4096. "limit-check" Specifies that an error will be raised if the lexicon expansion exceeds the specified limit. "no-limit-check" Specifies that error will not be raised if the lexicon expansion exceeds the specified limit. The server will try to resolve the wildcard. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "case-sensitive" A case-sensitive query. "case-insensitive" A case-insensitive query. "diacritic-sensitive" A diacritic-sensitive query. "diacritic-insensitive" A diacritic-insensitive query. "punctuation-sensitive" A punctuation-sensitive query. "punctuation-insensitive" A punctuation-insensitive query. "whitespace-sensitive" A whitespace-sensitive query. "whitespace-insensitive" A whitespace-insensitive query. "stemmed" A stemmed query. "unstemmed" An unstemmed query. "wildcarded" A wildcarded query. "unwildcarded" An unwildcarded query. "exact" An exact match query. Shorthand for "case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive", "unstemmed", and "unwildcarded". "lang=iso639code" Specifies the language of the query. The iso639code code portion is case-insensitive, and uses the languages specified by ISO 639. The default is specified in the database configuration. "distance-weight=number" A weight applied based on the minimum distance between matches of this query. Higher weights add to the importance of proximity (as opposed to term matches) when the relevance order is calculated. The default value is 0.0 (no impact of proximity). The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. This parameter has no effect if the word positions index is not enabled. This parameter has no effect on searches that use score-simple, score-random, or score-zero (because those scoring algorithms do not consider term frequency, proximity is irrelevant). "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "synonym" Specifies that all of the terms in the $text parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). "lexicon-expand=value" The value is one of full, prefix-postfix, off, or heuristic (the default is heuristic). An option with a value of lexicon-expand=full specifies that wildcards are resolved by expanding the pattern to words in a lexicon (if there is one available), and turning into a series of cts:word-queries, even if this takes a long time to evaluate. An option with a value of lexicon-expand=prefix-postfix specifies that wildcards are resolved by expanding the pattern to the pre- and postfixes of the words in the word lexicon (if there is one), and turning the query into a series of character queries, even if it takes a long time to evaluate. An option with a value of lexicon-expand=off specifies that wildcards are only resolved by looking up character patterns in the search pattern index, not in the lexicon. An option with a value of lexicon-expand=heuristic, which is the default, specifies that wildcards are resolved by using a series of internal rules, such as estimating the number of lexicon entries that need to be scanned, seeing if the estimate crosses certain thresholds, and (if appropriate), using another way besides lexicon expansion to resolve the query. "lexicon-expansion-limit=number" Specifies the limit for lexicon expansion. This puts a restriction on the number of lexicon expansions that can be performed. If the limit is exceeded, the server may raise an error depending on whether the "limit-check" option is set. The default value for this option will be 4096. "limit-check" Specifies that an error will be raised if the lexicon expansion exceeds the specified limit. "no-limit-check" Specifies that error will not be raised if the lexicon expansion exceeds the specified limit. The server will try to resolve the wildcard. * @param { XsDouble } [weight] - A weight for this query. Higher weights move search results up in the relevance order. The default is 1.0. The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. Weights less than the absolute value of 0.0625 (between -0.0625 and 0.0625) are rounded to 0, which means that they do not contribute to the score. * @returns { CtsQuery } */ @@ -689,7 +689,7 @@ fieldWordQuery(...args) { * @method planBuilder.cts#geospatialPathReference * @since 2.1.1 * @param { XsString } [pathExpression] - A path expression. - * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (point or long-lat-point) "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type and coordinate-system info only from the input. Do not check the definition against the context database. + * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (point or long-lat-point) "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type and coordinate-system info only from the input. Do not check the definition against the context database. * @param { MapMap } [map] - A map of namespace bindings. The keys should be namespace prefixes and the values should be namespace URIs. These namespace bindings will be added to the in-scope namespace bindings in the interpretation of the path. * @returns { CtsReference } */ @@ -707,7 +707,7 @@ geospatialPathReference(...args) { * @method planBuilder.cts#geospatialRegionPathReference * @since 2.1.1 * @param { XsString } [pathExpression] - The XPath expression specified in the index configuration. - * @param { XsString } [options] - Index configuration options. The default is (). These options should match the configuration used when creating the index. Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float (default) and double. "unchecked" Read the coordinate-system info only from the input. Do not check the definition against the context database. + * @param { XsString } [options] - Index configuration options. The default is (). These options should match the configuration used when creating the index. Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float (default) and double. "unchecked" Read the coordinate-system info only from the input. Do not check the definition against the context database. * @param { MapMap } [namespaces] - A map of namespace bindings. The keys should be namespace prefixes and the values should be namespace URIs. These namespace bindings will be added to the in-scope namespace bindings in the interpretation of the path. * @param { XsInteger } [geohashPrecision] - The geohash precision specified in the index configuration. Values between 1 and 12 inclusive are possible. * @param { XsString } [units] - The units specified in the index configuration. 'miles', 'km', 'feet', and 'meters' are valid. @@ -730,7 +730,7 @@ geospatialRegionPathReference(...args) { * @param { CtsReference } [reference] - Zero or more geospatial path region index references that identify regions in your content. To create a reference, see cts:geospatial-region-path-reference. * @param { XsString } [operation] - The match operation to apply between the regions specified in the $geospatial-region-reference parameter and the regions in the $regions parameter. Allowed values: contains, covered-by, covers, disjoint, intersects, overlaps, within, equals, touches, crosses. See the Usage Notes for details. * @param { CtsRegion } [region] - Criteria regions to match against the regions specified in the $geospatial-region-reference parameter. These regions function as the right operand of $operation. - * @param { XsString } [options] - Options to this query. The default is (). Available options: "units=value" Measure distances and the radii of circles using the given units. Allowed values: miles (default), km, feet, and meters. This option only affects regions provided in the $regions parameter, not regions stored in documents. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this query. The default is (). Available options: "units=value" Measure distances and the radii of circles using the given units. Allowed values: miles (default), km, feet, and meters. This option only affects regions provided in the $regions parameter, not regions stored in documents. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -761,7 +761,7 @@ iriReference(...args) { * @param { XsString } [propertyName] - One or more parent property names to match. When multiple names are specified, the query matches if any name matches. * @param { XsString } [childName] - One or more child property names to match. When multiple names are specified, the query matches if any name matches; however, only the first matching latitude child in any point instance will be checked. The property must specify both latitude and longitude coordinates. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -780,7 +780,7 @@ jsonPropertyChildGeospatialQuery(...args) { * @since 2.1.1 * @param { XsString } [propertyName] - One or more json property names to match. When multiple names are specified, the query matches if any name matches. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -801,7 +801,7 @@ jsonPropertyGeospatialQuery(...args) { * @param { XsString } [latitudeName] - One or more latitude property names to match. When multiple names are specified, the query matches if any name matches; however, only the first matching latitude child in any point instance will be checked. * @param { XsString } [longitudeName] - One or more longitude property names to match. When multiple names are specified, the query matches if any name matches; however, only the first matching longitude child in any point instance will be checked. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -819,9 +819,9 @@ jsonPropertyPairGeospatialQuery(...args) { * @method planBuilder.cts#jsonPropertyRangeQuery * @since 2.1.1 * @param { XsString } [propertyName] - One or more property name to match. When multiple names are specified, the query matches if any name matches. - * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. * @param { XsAnyAtomicType } [value] - One or more property values to match. When multiple values are specified, the query matches if any value matches. The value must be a type for which there is a range index defined. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -839,7 +839,7 @@ jsonPropertyRangeQuery(...args) { * @method planBuilder.cts#jsonPropertyReference * @since 2.1.1 * @param { XsString } [property] - A property name. - * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. + * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. * @returns { CtsReference } */ jsonPropertyReference(...args) { @@ -936,7 +936,7 @@ locksFragmentQuery(...args) { * @since 2.1.1 * @param { XsString } [temporalCollection] - The name of the temporal collection. * @param { XsDateTime } [timestamp] - Return only temporal documents with a system start time less than or equal to this value. Default is temporal:get-lsqt($temporal-collection). Timestamps larger than LSQT are rejected. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" Break down the query into sub-queries and then cache each one of them for better performance. This is enabled, by default. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" Break down the query into sub-queries and then cache each one of them for better performance. This is enabled, by default. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. * @param { XsDouble } [weight] - A weight for this query. Higher weights move search results up in the relevance order. The default is 1.0. The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. Weights less than the absolute value of 0.0625 (between -0.0625 and 0.0625) are rounded to 0, which means that they do not contribute to the score. * @returns { CtsQuery } */ @@ -955,7 +955,7 @@ lsqtQuery(...args) { * @since 2.1.1 * @param { CtsQuery } [queries] - A sequence of queries to match. * @param { XsDouble } [distance] - A distance, in number of words, between any two matching queries. The results match if two queries match and the distance between the two matches is equal to or less than the specified distance. A distance of 0 matches when the text is the exact same text or when there is overlapping text (see the third example below). A negative distance is treated as 0. The default value is 10. - * @param { XsString } [options] - Options to this query. The default value is (). Options include: "ordered" Any near-query matches must occur in the order of the specified sub-queries. "unordered" Any near-query matches will satisfy the query, regardless of the order they were specified. "minimum-distance" The minimum distance between two matching queries. The results match if the two queries match and the minimum distance between the two matches is greater than or equal to the specified minimum distance. The default value is zero. A negative distance is treated as 0. + * @param { XsString } [options] - Options to this query. The default value is (). Options include: "ordered" Any near-query matches must occur in the order of the specified sub-queries. "unordered" Any near-query matches will satisfy the query, regardless of the order they were specified. "minimum-distance" The minimum distance between two matching queries. The results match if the two queries match and the minimum distance between the two matches is greater than or equal to the specified minimum distance. The default value is zero. A negative distance is treated as 0. * @param { XsDouble } [weight] - A weight attributed to the distance for this query. Higher weights add to the importance of distance (as opposed to term matches) when the relevance order is calculated. The default value is 1.0. The weight should be between 64 and -16. Weights greater than 64 will have the same effect as a weight of 64. Weights less than the absolute value of 0.0625 (between -0.0625 and 0.0625) are rounded to 0, which means that they do not contribute to the score. This parameter has no effect if the word positions index is not enabled. * @returns { CtsQuery } */ @@ -1002,7 +1002,7 @@ notQuery(...args) { * @method planBuilder.cts#orQuery * @since 2.1.1 * @param { CtsQuery } [queries] - A sequence of sub-queries. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "synonym" Specifies that all of the terms in the $queries parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "synonym" Specifies that all of the terms in the $queries parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @returns { CtsQuery } */ orQuery(...args) { @@ -1032,7 +1032,7 @@ partOfSpeech(...args) { * @since 2.1.1 * @param { XsString } [pathExpression] - One or more path expressions to match. When multiple path expressions are specified, the query matches if any path expression matches. * @param { CtsRegion } [region] - One or more geographic boxes, circles, polygons, or points. Where multiple regions are specified, the query matches if any region matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "type=long-lat-point" Specifies the format for the point in the data as longitude first, latitude second. "type=point" Specifies the format for the point in the data as latitude first, longitude second. This is the default format. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $regions parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrence of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -1050,9 +1050,9 @@ pathGeospatialQuery(...args) { * @method planBuilder.cts#pathRangeQuery * @since 2.1.1 * @param { XsString } [pathName] - One or more XPath expressions that identify the content to match. When multiple paths are specified, the query matches if any path matches. - * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. * @param { XsAnyAtomicType } [value] - One or more values to match. These values are compared to the value(s) addressed by the path-expression parameter. When multiple When multiple values are specified, the query matches if any value matches. The value must be a type for which there is a range index defined. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "collation=URI" Use the range index with the collation specified by URI. If not specified, then the default collation from the query is used. If a range index with the specified collation does not exist, an error is thrown. "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "cached-incremental" When querying on a short date or dateTime range, break the query into sub-queries on smaller ranges, and then cache the results of each. See the Usage Notes for details. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -1070,7 +1070,7 @@ pathRangeQuery(...args) { * @method planBuilder.cts#pathReference * @since 2.1.1 * @param { XsString } [pathExpression] - A path range index expression. - * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. + * @param { XsString } [options] - Options. The default is (). Options include: "type=type" Use the lexicon with the type specified by type (int, unsignedInt, long, unsignedLong, float, double, decimal, dateTime, time, date, gYearMonth, gYear, gMonth, gDay, yearMonthDuration, dayTimeDuration, string, anyURI, point, or long-lat-point) "collation=URI" Use the lexicon with the collation specified by URI. "nullable" Allow null values in tuples reported from cts:value-tuples when using this lexicon. "unchecked" Read the scalar type, collation and coordinate-system info only from the input. Do not check the definition against the context database. "coordinate-system=name" Create a reference to an index or lexicon based on the specified coordinate system. Allowed values: "wgs84", "wgs84/double", "raw", "raw/double". Only applicable if the index/lexicon value type is point or long-lat-point. "precision=value" Create a reference to an index or lexicon configured with the specified geospatial precision. Allowed values: float and double. Only applicable if the index/lexicon value type is point or long-lat-point. This value takes precedence over the precision implicit in the coordinate system name. * @param { MapMap } [map] - A map of namespace bindings. The keys should be namespace prefixes and the values should be namespace URIs. These namespace bindings will be added to the in-scope namespace bindings in the interpretation of the path. * @returns { CtsReference } */ @@ -1105,9 +1105,9 @@ period(...args) { * @method planBuilder.cts#periodCompareQuery * @since 2.1.1 * @param { XsString } [axis1] - Name of the first axis to compare - * @param { XsString } [operator] - A comparison operator. Period is the two timestamps contained in the axis. Operators include: "aln_equals" Match documents whose period1 equals period2. "aln_contains" Match documents whose period1 contains period2. i.e. period1 starts before period2 starts and ends before period2 ends. "aln_contained_by" Match documents whose period1 is contained by period2. "aln_meets" Match documents whose period1 meets period2, i.e. period1 ends at period2 start. "aln_met_by" Match documents whose period1 meets period2, i.e. period1 starts at period2 end. "aln_before" Match documents whose period1 is before period2, i.e. period1 ends before period2 starts. "aln_after" Match documents whose period1 is after period2, i.e. period1 starts after period2 ends. "aln_starts" Match documents whose period1 starts period2, i.e. period1 starts at period2 start and ends before period2 ends. "aln_started_by" Match documents whose period2 starts period1, i.e. period1 starts at period2 start and ends after period2 ends. "aln_finishes" Match documents whose period1 finishes period2, i.e. period1 finishes at period2 finish and starts after period2 starts. "aln_finished_by" Match documents whose period2 finishes period1, i.e. period1 finishes at period2 finish and starts before period2 starts. "aln_overlaps" Match documents whose period1 overlaps period2, i.e. period1 starts before period2 start and ends before period2 ends but after period2 starts. "aln_overlapped_by" Match documents whose period2 overlaps period1, i.e. period1 starts after period2 start but before period2 ends and ends after period2 ends. "iso_contains" Match documents whose period1 contains period2 in sql 2011 standard. i.e. period1 starts before or at period2 starts and ends after or at period2 ends. "iso_overlaps" Match documents whose period1 overlaps period2 in sql 2011 standard. i.e. period1 and period2 have common time period. "iso_succeeds" Match documents whose period1 succeeds period2 in sql 2011 standard. i.e. period1 starts at or after period2 ends "iso_precedes" Match documents whose period1 precedes period2 in sql 2011 standard. i.e. period1 ends at or before period2 ends "iso_succeeds" Match documents whose period1 succeeds period2 in sql 2011 standard. i.e. period1 starts at or after period2 ends "iso_precedes" Match documents whose period1 precedes period2 in sql 2011 standard. i.e. period1 ends at or before period2 ends "iso_imm_succeeds" Match documents whose period1 immediately succeeds period2 in sql 2011 standard. i.e. period1 starts at period2 ends "iso_imm_precedes" Match documents whose period1 immediately precedes period2 in sql 2011 standard. i.e. period1 ends at period2 ends + * @param { XsString } [operator] - A comparison operator. Period is the two timestamps contained in the axis. Operators include: "aln_equals" Match documents whose period1 equals period2. "aln_contains" Match documents whose period1 contains period2. i.e. period1 starts before period2 starts and ends before period2 ends. "aln_contained_by" Match documents whose period1 is contained by period2. "aln_meets" Match documents whose period1 meets period2, i.e. period1 ends at period2 start. "aln_met_by" Match documents whose period1 meets period2, i.e. period1 starts at period2 end. "aln_before" Match documents whose period1 is before period2, i.e. period1 ends before period2 starts. "aln_after" Match documents whose period1 is after period2, i.e. period1 starts after period2 ends. "aln_starts" Match documents whose period1 starts period2, i.e. period1 starts at period2 start and ends before period2 ends. "aln_started_by" Match documents whose period2 starts period1, i.e. period1 starts at period2 start and ends after period2 ends. "aln_finishes" Match documents whose period1 finishes period2, i.e. period1 finishes at period2 finish and starts after period2 starts. "aln_finished_by" Match documents whose period2 finishes period1, i.e. period1 finishes at period2 finish and starts before period2 starts. "aln_overlaps" Match documents whose period1 overlaps period2, i.e. period1 starts before period2 start and ends before period2 ends but after period2 starts. "aln_overlapped_by" Match documents whose period2 overlaps period1, i.e. period1 starts after period2 start but before period2 ends and ends after period2 ends. "iso_contains" Match documents whose period1 contains period2 in sql 2011 standard. i.e. period1 starts before or at period2 starts and ends after or at period2 ends. "iso_overlaps" Match documents whose period1 overlaps period2 in sql 2011 standard. i.e. period1 and period2 have common time period. "iso_succeeds" Match documents whose period1 succeeds period2 in sql 2011 standard. i.e. period1 starts at or after period2 ends "iso_precedes" Match documents whose period1 precedes period2 in sql 2011 standard. i.e. period1 ends at or before period2 ends "iso_succeeds" Match documents whose period1 succeeds period2 in sql 2011 standard. i.e. period1 starts at or after period2 ends "iso_precedes" Match documents whose period1 precedes period2 in sql 2011 standard. i.e. period1 ends at or before period2 ends "iso_imm_succeeds" Match documents whose period1 immediately succeeds period2 in sql 2011 standard. i.e. period1 starts at period2 ends "iso_imm_precedes" Match documents whose period1 immediately precedes period2 in sql 2011 standard. i.e. period1 ends at period2 ends * @param { XsString } [axis2] - Name of the second period to compare - * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. * @returns { CtsQuery } */ periodCompareQuery(...args) { @@ -1124,9 +1124,9 @@ periodCompareQuery(...args) { * @method planBuilder.cts#periodRangeQuery * @since 2.1.1 * @param { XsString } [axis] - One or more axis to match on. - * @param { XsString } [operator] - A comparison operator. Operators include: "aln_equals" Match documents whose period1 equals value. "aln_contains" Match documents whose period1 contains value. i.e. period1 starts before value starts and ends before value ends. "aln_contained_by" Match documents whose period1 is contained by value. "aln_meets" Match documents whose period1 meets value, i.e. period1 ends at value start. "aln_met_by" Match documents whose period1 meets value, i.e. period1 starts at value end. "aln_before" Match documents whose period1 is before value, i.e. period1 ends before value starts. "aln_after" Match documents whose period1 is after value, i.e. period1 starts after value ends. "aln_starts" Match documents whose period1 starts value, i.e. period1 starts at value start and ends before value ends. "aln_started_by" Match documents whose value starts period1, i.e. period1 starts at value start and ends after value ends. "aln_finishes" Match documents whose period1 finishes value, i.e. period1 finishes at value finish and starts after value starts. "aln_finished_by" Match documents whose value finishes period1, i.e. period1 finishes at value finish and starts before value starts. "aln_overlaps" Match documents whose period1 overlaps value, i.e. period1 starts before value start and ends before value ends but after value starts. "aln_overlapped_by" Match documents whose value overlaps period1, i.e. period1 starts after value start but before value ends and ends after value ends. "iso_contains" Match documents whose period1 contains value in sql 2011 standard. i.e. period1 starts before or at value starts and ends after or at value ends. "iso_overlaps" Match documents whose period1 overlaps value in sql 2011 standard. i.e. period1 and value have common time period. "iso_succeeds" Match documents whose period1 succeeds value in sql 2011 standard. i.e. period1 starts at or after value ends "iso_precedes" Match documents whose period1 precedes value in sql 2011 standard. i.e. period1 ends at or before value ends "iso_imm_succeeds" Match documents whose period1 immediately succeeds value in sql 2011 standard. i.e. period1 starts at value end "iso_imm_precedes" Match documents whose period1 immediately precedes value in sql 2011 standard. i.e. period1 ends at value end + * @param { XsString } [operator] - A comparison operator. Operators include: "aln_equals" Match documents whose period1 equals value. "aln_contains" Match documents whose period1 contains value. i.e. period1 starts before value starts and ends before value ends. "aln_contained_by" Match documents whose period1 is contained by value. "aln_meets" Match documents whose period1 meets value, i.e. period1 ends at value start. "aln_met_by" Match documents whose period1 meets value, i.e. period1 starts at value end. "aln_before" Match documents whose period1 is before value, i.e. period1 ends before value starts. "aln_after" Match documents whose period1 is after value, i.e. period1 starts after value ends. "aln_starts" Match documents whose period1 starts value, i.e. period1 starts at value start and ends before value ends. "aln_started_by" Match documents whose value starts period1, i.e. period1 starts at value start and ends after value ends. "aln_finishes" Match documents whose period1 finishes value, i.e. period1 finishes at value finish and starts after value starts. "aln_finished_by" Match documents whose value finishes period1, i.e. period1 finishes at value finish and starts before value starts. "aln_overlaps" Match documents whose period1 overlaps value, i.e. period1 starts before value start and ends before value ends but after value starts. "aln_overlapped_by" Match documents whose value overlaps period1, i.e. period1 starts after value start but before value ends and ends after value ends. "iso_contains" Match documents whose period1 contains value in sql 2011 standard. i.e. period1 starts before or at value starts and ends after or at value ends. "iso_overlaps" Match documents whose period1 overlaps value in sql 2011 standard. i.e. period1 and value have common time period. "iso_succeeds" Match documents whose period1 succeeds value in sql 2011 standard. i.e. period1 starts at or after value ends "iso_precedes" Match documents whose period1 precedes value in sql 2011 standard. i.e. period1 ends at or before value ends "iso_imm_succeeds" Match documents whose period1 immediately succeeds value in sql 2011 standard. i.e. period1 starts at value end "iso_imm_precedes" Match documents whose period1 immediately precedes value in sql 2011 standard. i.e. period1 ends at value end * @param { CtsPeriod } [period] - the cts:period to perform operations on. When multiple values are specified, the query matches if any value matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. * @returns { CtsQuery } */ periodRangeQuery(...args) { @@ -1210,9 +1210,9 @@ propertiesFragmentQuery(...args) { * @method planBuilder.cts#rangeQuery * @since 2.1.1 * @param { CtsReference } [index] - One or more range index references. When multiple indexes are specified, the query matches if any index matches. - * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [operator] - A comparison operator. Operators include: "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. * @param { XsAnyAtomicType } [value] - One or more values to match. When multiple values are specified, the query matches if any value matches. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). + * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "min-occurs=number" Specifies the minimum number of occurrences required. If fewer that this number of words occur, the fragment does not match. The default is 1. "max-occurs=number" Specifies the maximum number of occurrences required. If more than this number of words occur, the fragment does not match. The default is unbounded. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. "synonym" Specifies that all of the terms in the $value parameter are considered synonyms for scoring purposes. The result is that occurrences of more than one of the synonyms are scored as if there are more occurrences of the same term (as opposed to having a separate term that contributes to score). * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -1268,8 +1268,8 @@ tokenize(...args) { * @param { XsAnyAtomicType } [subject] - The subjects to look up. When multiple values are specified, the query matches if any value matches. When the empty sequence is specified, then triples with any subject are matched. * @param { XsAnyAtomicType } [predicate] - The predicates to look up. When multiple values are specified, the query matches if any value matches. When the empty sequence is specified, then triples with any predicate are matched. * @param { XsAnyAtomicType } [object] - The objects to look up. When multiple values are specified, the query matches if any value matches. When the empty sequence is specified, then triples with any object are matched. - * @param { XsString } [operator] - If a single string is provided it is treated as the operator for the $object values. If a sequence of three strings are provided, they give the operators for $subject, $predicate and $object in turn. The default operator is "=". Operators include: "sameTerm" Match triple index values which are the same RDF term as $value. This compares aspects of values that are ignored in XML Schema comparison semantics, like timezone and derived type of $value. "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. - * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. + * @param { XsString } [operator] - If a single string is provided it is treated as the operator for the $object values. If a sequence of three strings are provided, they give the operators for $subject, $predicate and $object in turn. The default operator is "=". Operators include: "sameTerm" Match triple index values which are the same RDF term as $value. This compares aspects of values that are ignored in XML Schema comparison semantics, like timezone and derived type of $value. "<" Match range index values less than $value. "<=" Match range index values less than or equal to $value. ">" Match range index values greater than $value. ">=" Match range index values greater than or equal to $value. "=" Match range index values equal to $value. "!=" Match range index values not equal to $value. + * @param { XsString } [options] - Options to this query. The default is (). Options include: "cached" Cache the results of this query in the list cache. "uncached" Do not cache the results of this query in the list cache. "score-function=function" Use the selected scoring function. The score function may be: linearUse a linear function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. reciprocalUse a reciprocal function of the difference between the specified query value and the matching value in the index to calculate a score for this range query. zeroThis range query does not contribute to the score. This is the default. "slope-factor=number" Apply the given number as a scaling factor to the slope of the scoring function. The default is 1.0. * @param { XsDouble } [weight] - A weight for this query. The default is 1.0. * @returns { CtsQuery } */ @@ -2814,7 +2814,7 @@ class GeoExpr { * @method planBuilder.geo#approxCenter * @since 2.1.1 * @param { CtsRegion } [region] - A geospatial region. - * @param { XsString } [options] - Options. The default is (). Options include: "box-percent=n" An integer between 0 and 100 (default is 100) that indicates what percentage of a polygon's bounding box slivers should be used in constructing the approximate centroid. Lower numbers use fewer slivers, giving faster but less accurate results; larger numbers use more slivers, giving slower but more accurate results. "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" The precision use for this operation, including the interpretation of input values. Allowed values: float, double. Default: The precision of the governing coordinate system. + * @param { XsString } [options] - Options. The default is (). Options include: "box-percent=n" An integer between 0 and 100 (default is 100) that indicates what percentage of a polygon's bounding box slivers should be used in constructing the approximate centroid. Lower numbers use fewer slivers, giving faster but less accurate results; larger numbers use more slivers, giving slower but more accurate results. "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" The precision use for this operation, including the interpretation of input values. Allowed values: float, double. Default: The precision of the governing coordinate system. * @returns { CtsPoint } */ approxCenter(...args) { @@ -2834,7 +2834,7 @@ approxCenter(...args) { * @param { CtsPoint } [p2] - The ending point of the first arc. * @param { CtsPoint } [q1] - The starting point of the second arc. * @param { CtsPoint } [q2] - The ending point of the second arc. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { CtsPoint } */ arcIntersection(...args) { @@ -2852,7 +2852,7 @@ arcIntersection(...args) { * @since 2.1.1 * @param { CtsPoint } [p1] - The first point. * @param { CtsPoint } [p2] - The second point. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Unit of measure of the tolerance value. Valid values are miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Unit of measure of the tolerance value. Valid values are miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsDouble } */ bearing(...args) { @@ -2869,7 +2869,7 @@ bearing(...args) { * @method planBuilder.geo#boundingBoxes * @since 2.1.1 * @param { CtsRegion } [region] - A geographic region (box, circle, polygon, or point). - * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "box-percent=n" An integer between 0 and 100 (default is 100) that indicates what percentage of a polygon's bounding box slivers should be returned. Lower numbers give fewer, less accurate boxes; larger numbers give more, more accurate boxes. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. The bounding boxes will be padded to cover any points within tolerance of the region. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. The default value is 0 (no padding). "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "box-percent=n" An integer between 0 and 100 (default is 100) that indicates what percentage of a polygon's bounding box slivers should be returned. Lower numbers give fewer, less accurate boxes; larger numbers give more, more accurate boxes. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. The bounding boxes will be padded to cover any points within tolerance of the region. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. The default value is 0 (no padding). "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. * @returns { CtsBox } */ boundingBoxes(...args) { @@ -2887,7 +2887,7 @@ boundingBoxes(...args) { * @since 2.1.1 * @param { CtsBox } [box] - A geographic box. * @param { CtsRegion } [region] - One or more geographic regions (boxes, circles, polygons, or points). Where multiple regions are specified, return true if any region intersects the box. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. * @returns { XsBoolean } */ boxIntersects(...args) { @@ -2905,7 +2905,7 @@ boxIntersects(...args) { * @since 2.1.1 * @param { CtsCircle } [circle] - A geographic circle. * @param { CtsRegion } [region] - One or more geographic regions (boxes, circles, polygons, or points). Where multiple regions are specified, return true if any region intersects the target circle. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on boxes', circles', and polygons' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and polygons' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. * @returns { XsBoolean } */ circleIntersects(...args) { @@ -2923,7 +2923,7 @@ circleIntersects(...args) { * @since 2.1.1 * @param { CtsCircle } [circle] - A cts circle that defines the circle to be approximated. * @param { XsDouble } [arcTolerance] - How far the approximation can be from the actual circle, specified in the same units as the units option. Arc-tolerance should be greater than the value of the tolerance option. - * @param { XsString } [options] - Options with which you can customize this operation. The following options are available: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. Tolerance should be smaller than the value of the arc-tolerance parameter. + * @param { XsString } [options] - Options with which you can customize this operation. The following options are available: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. Tolerance should be smaller than the value of the arc-tolerance parameter. * @returns { CtsPolygon } */ circlePolygon(...args) { @@ -2941,7 +2941,7 @@ circlePolygon(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of contains. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of contains. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ contains(...args) { @@ -2958,7 +2958,7 @@ contains(...args) { * @method planBuilder.geo#countDistinctVertices * @since 2.1.1 * @param { CtsRegion } [region] - A cts region. - * @param { XsString } [options] - Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsInteger } */ countDistinctVertices(...args) { @@ -2988,7 +2988,7 @@ countVertices(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of covered-by. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of covered-by. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ coveredBy(...args) { @@ -3006,7 +3006,7 @@ coveredBy(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of covers. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of covers. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ covers(...args) { @@ -3024,7 +3024,7 @@ covers(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of crosses. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of crosses. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ crosses(...args) { @@ -3043,7 +3043,7 @@ crosses(...args) { * @param { CtsPoint } [p] - The starting point. * @param { XsDouble } [bearing] - The bearing, in radians. * @param { XsDouble } [distance] - The distance, in units. See the units option, below. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. * @returns { CtsPoint } */ destination(...args) { @@ -3061,7 +3061,7 @@ destination(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of disjoint. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of disjoint. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ disjoint(...args) { @@ -3079,7 +3079,7 @@ disjoint(...args) { * @since 2.1.1 * @param { CtsPoint } [p1] - The first point. * @param { CtsPoint } [p2] - The second point. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. * @returns { XsDouble } */ distance(...args) { @@ -3118,7 +3118,7 @@ distanceConvert(...args) { * @param { XsDouble } [semiMinorAxis] - The semi minor axis of the ellipse. The units are governed by the units option. * @param { XsDouble } [azimuth] - The azimuth. * @param { XsDouble } [arcTolerance] - How far the approximation can be from the actual ellipse, specified in the same units as the units option. Arc-tolerance should be greater than the value of the tolerance option, which defaults to 0.05km (0.3106856 miles). - * @param { XsString } [options] - Options with which to configure the behavior. Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, the axes of the ellipse, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options with which to configure the behavior. Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, the axes of the ellipse, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { CtsPolygon } */ ellipsePolygon(...args) { @@ -3136,7 +3136,7 @@ ellipsePolygon(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of equals. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of equals. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ equals(...args) { @@ -3178,7 +3178,7 @@ geohashDecodePoint(...args) { * @since 2.1.1 * @param { CtsRegion } [region] - The region to encode. * @param { XsInteger } [geohashPrecision] - The desired precision (length of the geohash). The precision should be between 1 and 12. If the precision is less than 1, or unspecified, the default geohash-precision of 6 is used. A geohash-precision greater than 12 is treated as the same as 12. In the worst case (at the equator) a precision of 12 gives resolution of less than a centimeter. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. Geohashing is not allowed for non-geodetic coordinate systems. Attempting to use this function with the raw or raw/double coordinate system will result in an XDMP-GEOHASH-COORD error. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. geohashes=value Specify which geohashes to return. Allowed values: all Return a complete set of covering hashes for the region (boundary + interior). This is the default behavior. boundary Return only geohashes that intersect with the boundary of the region. interior Return only geohashes completely contained in the interior of the region. exterior Return all geohashes disjoint from the region. That is, all geohashes completely contained in the exterior of the region. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. Geohashing is not allowed for non-geodetic coordinate systems. Attempting to use this function with the raw or raw/double coordinate system will result in an XDMP-GEOHASH-COORD error. "precision=string" Use the coordinate system at the given precision. Allowed values: float (default) and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. geohashes=value Specify which geohashes to return. Allowed values: all Return a complete set of covering hashes for the region (boundary + interior). This is the default behavior. boundary Return only geohashes that intersect with the boundary of the region. interior Return only geohashes completely contained in the interior of the region. exterior Return all geohashes disjoint from the region. That is, all geohashes completely contained in the exterior of the region. * @returns { XsString } */ geohashEncode(...args) { @@ -3236,7 +3236,7 @@ geohashSubhashes(...args) { * @method planBuilder.geo#interiorPoint * @since 2.1.1 * @param { CtsRegion } [region] - A cts region. - * @param { XsString } [options] - Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { CtsPoint } */ interiorPoint(...args) { @@ -3254,7 +3254,7 @@ interiorPoint(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of intersects. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of intersects. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ intersects(...args) { @@ -3272,7 +3272,7 @@ intersects(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of overlaps. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of overlaps. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ overlaps(...args) { @@ -3300,7 +3300,7 @@ parseWkt(...args) { * Perform an affine transformation on a geospatial region. The transformation is always applied in the raw coordinate system (Cartesian). Provides a client interface to a server function. See {@link http://docs.marklogic.com/geo.regionAffineTransform|geo.regionAffineTransform} * @method planBuilder.geo#regionAffineTransform * @since 2.1.1 - * @param { CtsRegion } [region] - + * @param { CtsRegion } [region] - * @param { MapMap } [transform] - A sequence of maps that specify the transformation to apply. Each map should contain at least one of the following transform specifications: translation Translate the points of the region by the given amount in the x and y coordinates. The value is a map with the following keys: txAmount to shift the points in the x direction. (Required.) tyAmount to shift the points in the y direction. (Required.) scaling Scale the points of the region by the given amount of the x and y coordinates. The value is a map with the following keys: sxAmount to scale the points in the x direction. (Required.) syAmount to scale the points in the y direction. (Required.) pscPoint to scale relative to. (Optional. Default is the origin.) rotation Rotate the points of the region by the given angle. The value is a map with the following keys: angleAmount to rotate the points (radians). (Required.) protPoint to rotate relative to. (Optional. Default is the origin.) shearing Shear the points of the region by the given amounts. The value is a map with the following keys: shxyAmount of shearing due to x in y direction. (Required.) shyxAmount of shearing due to y in x direction. (Required.) reflection Reflect the points of the region around a line or a point. The value is a map with the following keys: lineRLine of reflection. prefPoint to reflect points around. The value is a map with the following keys: startThe starting point of the line. endThe ending point of the line. Exactly of lineR or pref must be specified. If no transform specifications are provided, the points are transformed by the identity transform. That is, they remain unchanged. * @param { XsString } [options] - Geospatial options that affect the transformation. Currently there are no relevant options. * @returns { CtsRegion } @@ -3320,7 +3320,7 @@ regionAffineTransform(...args) { * @since 2.1.1 * @param { CtsRegion } [region] - A cts region. * @param { XsDouble } [threshold] - How close the approximation should be, in the units specified by the units option. - * @param { XsString } [options] - Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. Tolerance must be smaller than the value of the threshold parameter. + * @param { XsString } [options] - Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. Tolerance must be smaller than the value of the threshold parameter. * @returns { CtsRegion } */ regionApproximate(...args) { @@ -3337,7 +3337,7 @@ regionApproximate(...args) { * @method planBuilder.geo#regionClean * @since 2.1.1 * @param { CtsRegion } [region] - A cts region. - * @param { XsString } [options] - The tolerance, units, coordinate system. Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - The tolerance, units, coordinate system. Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { CtsRegion } */ regionClean(...args) { @@ -3355,7 +3355,7 @@ regionClean(...args) { * @since 2.1.1 * @param { CtsRegion } [target] - A geographic region. * @param { CtsRegion } [region] - One or more geographic regions (boxes, circles, polygons, or points). Where multiple regions are specified, return true if target contains any of the regions. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on boxes', circles', and regions' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and regions' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on boxes', circles', and regions' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on boxes', circles', and regions' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. * @returns { XsBoolean } */ regionContains(...args) { @@ -3373,7 +3373,7 @@ regionContains(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. * @param { CtsRegion } [region2] - The second geospatial region to compare. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsString } */ regionDe9im(...args) { @@ -3391,7 +3391,7 @@ regionDe9im(...args) { * @since 2.1.1 * @param { CtsRegion } [target] - A geographic region (box, circle, polygon, or point). * @param { CtsRegion } [region] - One or more geographic regions. Where multiple regions are specified, return true if any region intersects the target region. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on regions' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on regions' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. "boundaries-included" Points on regions' boundaries are counted as matching. This is the default. "boundaries-excluded" Points on regions' boundaries are not counted as matching. "boundaries-latitude-excluded" Points on boxes' latitude boundaries are not counted as matching. "boundaries-longitude-excluded" Points on boxes' longitude boundaries are not counted as matching. "boundaries-south-excluded" Points on the boxes' southern boundaries are not counted as matching. "boundaries-west-excluded" Points on the boxes' western boundaries are not counted as matching. "boundaries-north-excluded" Points on the boxes' northern boundaries are not counted as matching. "boundaries-east-excluded" Points on the boxes' eastern boundaries are not counted as matching. "boundaries-circle-excluded" Points on circles' boundary are not counted as matching. "boundaries-endpoints-excluded" Points on linestrings' boundary (the endpoints) are not counted as matching. * @returns { XsBoolean } */ regionIntersects(...args) { @@ -3410,7 +3410,7 @@ regionIntersects(...args) { * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of $operation. * @param { XsString } [operation] - The operation to apply between the region specified in the $region-1 and $region-2 parameters. Allowed values: contains, covered-by, covers, crosses, disjoint, equals, intersects, overlaps, touches, within. See the Usage Notes for details. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of $operation. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ regionRelate(...args) { @@ -3427,7 +3427,7 @@ regionRelate(...args) { * @method planBuilder.geo#removeDuplicateVertices * @since 2.1.1 * @param { CtsRegion } [region] - A cts region. - * @param { XsString } [options] - The tolerance, units, coordinate system. Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - The tolerance, units, coordinate system. Options include: "coordinate-system=value" Use the given coordinate system. Valid values are wgs84, wgs84/double, etrs89, etrs89/double, raw and raw/double. Defaults to the governing coordinating system. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. Defaults to the precision of the governing coordinate system. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { CtsRegion } */ removeDuplicateVertices(...args) { @@ -3445,7 +3445,7 @@ removeDuplicateVertices(...args) { * @since 2.1.1 * @param { CtsPoint } [p1] - The first point. * @param { CtsRegion } [region] - A region such as a circle, box, polygon, linestring, or complex-polygon. For compatibility with previous versions, a sequence of points is interpreted as a sequence of arcs (defined pairwise) and the distance returned is the shortest distance to one of those points. If the first parameter is a point within the region specified in this parameter, then this function returns 0. If the point specified in the first parameter in not in the region specified in this parameter, then this function returns the shortest distance to the boundary of the region. - * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. + * @param { XsString } [options] - Options for the operation. The default is (). Options include: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "units=value" Measure distance and the radii of circles in the specified units. Allowed values: miles (default), km, feet, meters. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. * @returns { XsDouble } */ shortestDistance(...args) { @@ -3475,7 +3475,7 @@ toWkt(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of touches. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of touches. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ touches(...args) { @@ -3505,7 +3505,7 @@ validateWkt(...args) { * @since 2.1.1 * @param { CtsRegion } [region1] - The first geospatial region to compare. This region is the left operand of within. * @param { CtsRegion } [region2] - The second geospatial region to compare. This region is the right operand of within. - * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. + * @param { XsString } [options] - Options to this operation. The default is (). Available options: "coordinate-system=string" Use the given coordinate system. Valid values are: wgs84The WGS84 coordinate system with degrees as the angular unit. wgs84/radiansThe WGS84 coordinate system with radians as the angular unit. wgs84/doubleThe WGS84 coordinate system at double precision with degrees as the angular unit. wgs84/radians/doubleThe WGS84 coordinate system at double precision with radians as the angular unit. etrs89The ETRS89 coordinate system. etrs89/doubleThe ETRS89 coordinate system at double precision. rawThe raw (unmapped) coordinate system. raw/doubleThe raw coordinate system at double precision. "precision=value" Use the coordinate system at the given precision. Allowed values: float and double. "units=value" Measure distance, radii of circles, and tolerance in the specified units. Allowed values: miles (default), km, feet, meters. "tolerance=distance" Tolerance is the largest allowable variation in geometry calculations. If the distance between two points is less than tolerance, then the two points are considered equal. For the raw coordinate system, use the units of the coordinates. For geographic coordinate systems, use the units specified by the units option. * @returns { XsBoolean } */ within(...args) { @@ -4049,7 +4049,7 @@ median(...args) { * @method planBuilder.math#mode * @since 2.1.1 * @param { XsAnyAtomicType } [arg] - The sequence of values. - * @param { XsString } [options] - Options. The default is (). Options include: "collation=URI" Applies only when $arg is of the xs:string type. If no specified, the default collation is used. "coordinate-system=name" Applies only when $arg is of the cts:point type. If no specified, the default coordinate system is used. + * @param { XsString } [options] - Options. The default is (). Options include: "collation=URI" Applies only when $arg is of the xs:string type. If no specified, the default collation is used. "coordinate-system=name" Applies only when $arg is of the cts:point type. If no specified, the default coordinate system is used. * @returns { XsAnyAtomicType } */ mode(...args) { @@ -4079,7 +4079,7 @@ modf(...args) { * @since 2.1.1 * @param { XsAnyAtomicType } [arg] - The sequence of values. * @param { XsAnyAtomicType } [value] - The value to be "ranked". - * @param { XsString } [options] - Options. The default is (). Options include: "ascending"(default) Rank the value as if the sequence was sorted in ascending order. "descending" Rank the value as if the sequence was sorted in descending order. "collation=URI" Applies only when $arg is of the xs:string type. If no specified, the default collation is used. "coordinate-system=name" Applies only when $arg is of the cts:point type. If no specified, the default coordinate system is used. + * @param { XsString } [options] - Options. The default is (). Options include: "ascending"(default) Rank the value as if the sequence was sorted in ascending order. "descending" Rank the value as if the sequence was sorted in descending order. "collation=URI" Applies only when $arg is of the xs:string type. If no specified, the default collation is used. "coordinate-system=name" Applies only when $arg is of the cts:point type. If no specified, the default coordinate system is used. * @returns { XsDouble } */ percentRank(...args) { @@ -4154,7 +4154,7 @@ radians(...args) { * @since 2.1.1 * @param { XsAnyAtomicType } [arg1] - The sequence of values. * @param { XsAnyAtomicType } [arg2] - The value to be "ranked". - * @param { XsString } [options] - Options. The default is (). Options include: "ascending"(default) Rank the value as if the sequence was sorted in ascending order. "descending" Rank the value as if the sequence was sorted in descending order. "collation=URI" Applies only when $arg is of the xs:string type. If no specified, the default collation is used. "coordinate-system=name" Applies only when $arg is of the cts:point type. If no specified, the default coordinate system is used. + * @param { XsString } [options] - Options. The default is (). Options include: "ascending"(default) Rank the value as if the sequence was sorted in ascending order. "descending" Rank the value as if the sequence was sorted in descending order. "collation=URI" Applies only when $arg is of the xs:string type. If no specified, the default collation is used. "coordinate-system=name" Applies only when $arg is of the cts:point type. If no specified, the default coordinate system is used. * @returns { XsInteger } */ rank(...args) { @@ -4442,7 +4442,7 @@ iri(...args) { * Converts an IRI value to a QName value. Provides a client interface to a server function. * @method planBuilder.sem#iriToQName * @since 2.1.1 - * @param { XsString } [arg1] - + * @param { XsString } [arg1] - * @returns { XsQName } */ iriToQName(...args) { @@ -4531,7 +4531,7 @@ langMatches(...args) { * Converts a QName value to an IRI value. Provides a client interface to a server function. * @method planBuilder.sem#QNameToIri * @since 2.1.1 - * @param { XsQName } [arg1] - + * @param { XsQName } [arg1] - * @returns { SemIri } */ QNameToIri(...args) { @@ -4556,7 +4556,7 @@ random(...args) { * @since 2.1.1 * @param { XsString } [locations] - The locations of the rulesets. * @param { SemStore } [store] - The base store(s) over which to apply the ruleset to get inferred triples. The default for sem:store is an empty sequence, which means accessing the current database's triple index using the default rulesets configured for that database. - * @param { XsString } [options] - Options as a sequence of string values. Available options are: "size=number of MB" The maximum size of the memory used to cache inferred triples. This defaults to the default inference size set for the app-server. If the value provided is bigger than the maximum inference size set for the App Server, an error is raised [XDMP-INFSIZE]. + * @param { XsString } [options] - Options as a sequence of string values. Available options are: "size=number of MB" The maximum size of the memory used to cache inferred triples. This defaults to the default inference size set for the app-server. If the value provided is bigger than the maximum inference size set for the App Server, an error is raised [XDMP-INFSIZE]. * @returns { SemStore } */ rulesetStore(...args) { @@ -4589,7 +4589,7 @@ sameTerm(...args) { * The sem:store function defines a set of criteria, that when evaluated, selects a set of triples to be passed in to sem:sparql(), sem:sparql-update(), or sem:sparql-values() as part of the options argument. The sem:store constructor queries from the current database's triple index, restricted by the options and the cts:query argument (for instance, "triples in documents matching this query"). Provides a client interface to a server function. See {@link http://docs.marklogic.com/sem.store|sem.store} * @method planBuilder.sem#store * @since 2.1.1 - * @param { XsString } [options] - Options as a sequence of string values. Available options are: "any" Values from any fragment should be included. "document" Values from document fragments should be included. "properties" Values from properties fragments should be included. "locks" Values from locks fragments should be included. "checked" Word positions should be checked when resolving the query. "unchecked" Word positions should not be checked when resolving the query. "size=number of MB" The maximum size of the memory used to cache inferred triples. This defaults to the default inference size set for the app-server. If the value provided is bigger than the maximum inference size set for the App Server, an error is raised [XDMP-INFSIZE]. "no-default-rulesets" Don't apply the database's default rulesets to the sem:store. "locking=read-write/write" read-write: Read-lock documents containing triples being accessed, write-lock documents being updated; write: Only write-lock documents being updated. Default is locking=read-write. Locking is ignored in query transaction. + * @param { XsString } [options] - Options as a sequence of string values. Available options are: "any" Values from any fragment should be included. "document" Values from document fragments should be included. "properties" Values from properties fragments should be included. "locks" Values from locks fragments should be included. "checked" Word positions should be checked when resolving the query. "unchecked" Word positions should not be checked when resolving the query. "size=number of MB" The maximum size of the memory used to cache inferred triples. This defaults to the default inference size set for the app-server. If the value provided is bigger than the maximum inference size set for the App Server, an error is raised [XDMP-INFSIZE]. "no-default-rulesets" Don't apply the database's default rulesets to the sem:store. "locking=read-write/write" read-write: Read-lock documents containing triples being accessed, write-lock documents being updated; write: Only write-lock documents being updated. Default is locking=read-write. Locking is ignored in query transaction. * @param { CtsQuery } [query] - Only include triples in fragments selected by the cts:query. The triples do not need to match the query, but they must occur in fragments selected by the query. The fragments are not filtered to ensure they match the query, but instead selected in the same manner as "unfiltered" cts:search operations. If a string is entered, the string is treated as a cts:word-query of the specified string. * @returns { SemStore } */ @@ -4782,7 +4782,7 @@ collatedString(...args) { * Returns a specified date with the specified number interval (signed integer) added to a specified datepart of that date Provides a client interface to a server function. See {@link http://docs.marklogic.com/sql:dateadd|sql:dateadd} * @method planBuilder.sql#dateadd * @since 2.1.1 - * @param { XsString } [datepart] - Is the part of date where the number will be added. The following table lists all valid datepart arguments. User-defined variable equivalents are not valid. The return data type is the data type of the date argument. Options: datepart parameter abbreviation includes: "year","yyyy","yy" The year part of the date "quarter","qq","q" The quarter part of the date "month","mm","m" The month part of the date "dayofyear","dy","y" The day of the year from the date "day","dd","d" The day of the month from the date "week","wk","ww" The week of the year from the date "weekday","dw" The day of the week from the date "hour","hh" The hour of the day from the date "minute","mi","n" The minute of the hour from the date "second","ss","s" The second of the minute from the date "millisecond","ms" The millisecond of the minute from the date "microsecond","msc" The microsecond of the minute from the date "nanosecond","ns" The nanosecond of the minute from the date + * @param { XsString } [datepart] - Is the part of date where the number will be added. The following table lists all valid datepart arguments. User-defined variable equivalents are not valid. The return data type is the data type of the date argument. Options: datepart parameter abbreviation includes: "year","yyyy","yy" The year part of the date "quarter","qq","q" The quarter part of the date "month","mm","m" The month part of the date "dayofyear","dy","y" The day of the year from the date "day","dd","d" The day of the month from the date "week","wk","ww" The week of the year from the date "weekday","dw" The day of the week from the date "hour","hh" The hour of the day from the date "minute","mi","n" The minute of the hour from the date "second","ss","s" The second of the minute from the date "millisecond","ms" The millisecond of the minute from the date "microsecond","msc" The microsecond of the minute from the date "nanosecond","ns" The nanosecond of the minute from the date * @param { XsInt } [number] - This number will be added to the datepart of the given date. * @param { Item } [date] - Is an expression that can be resolved to a time, date or datetime, value. date can be an expression, column expression, user-defined variable or string literal. startdate is subtracted from enddate. * @returns { Item } @@ -4800,7 +4800,7 @@ dateadd(...args) { * Returns the count (signed integer) of the specified datepart boundaries crossed between the specified startdate and enddate. Provides a client interface to a server function. See {@link http://docs.marklogic.com/sql:datediff|sql:datediff} * @method planBuilder.sql#datediff * @since 2.1.1 - * @param { XsString } [datepart] - Is the part of startdate and enddate that specifies the type of boundary crossed. The following table lists all valid datepart arguments. User-defined variable equivalents are not valid. Options: datepart parameter abbreviation includes: "year","yyyy","yy" The year part of the date "quarter","qq","q" The quarter part of the date "month","mm","m" The month part of the date "dayofyear","dy","y" The day of the year from the date "day","dd","d" The day of the month from the date "week","wk","ww" The week of the year from the date "weekday","dw" The day of the week from the date "hour","hh" The hour of the day from the date "minute","mi","n" The minute of the hour from the date "second","ss","s" The second of the minute from the date "millisecond","ms" The millisecond of the minute from the date "microsecond","msc" The microsecond of the minute from the date "nanosecond","ns" The nanosecond of the minute from the date + * @param { XsString } [datepart] - Is the part of startdate and enddate that specifies the type of boundary crossed. The following table lists all valid datepart arguments. User-defined variable equivalents are not valid. Options: datepart parameter abbreviation includes: "year","yyyy","yy" The year part of the date "quarter","qq","q" The quarter part of the date "month","mm","m" The month part of the date "dayofyear","dy","y" The day of the year from the date "day","dd","d" The day of the month from the date "week","wk","ww" The week of the year from the date "weekday","dw" The day of the week from the date "hour","hh" The hour of the day from the date "minute","mi","n" The minute of the hour from the date "second","ss","s" The second of the minute from the date "millisecond","ms" The millisecond of the minute from the date "microsecond","msc" The microsecond of the minute from the date "nanosecond","ns" The nanosecond of the minute from the date * @param { Item } [startdate] - Is an expression that can be resolved to a time, date, datetime or value. date can be an expression, column expression, user-defined variable or string literal. startdate is subtracted from enddate. * @param { Item } [enddate] - Same as startdate. * @returns { XsInteger } @@ -4818,7 +4818,7 @@ datediff(...args) { * Returns an integer that represents the specified datepart of the specified date. Provides a client interface to a server function. See {@link http://docs.marklogic.com/sql:datepart|sql:datepart} * @method planBuilder.sql#datepart * @since 2.1.1 - * @param { XsString } [datepart] - The part of date that to be returned. Options: datepart parameter abbreviation includes: "year","yyyy","yy" The year part of the date "quarter","qq","q" The quarter part of the date "month","mm","m" The month part of the date "dayofyear","dy","y" The day of the year from the date "day","dd","d" The day of the month from the date "week","wk","ww" The week of the year from the date "weekday","dw" The day of the week from the date "hour","hh" The hour of the day from the date "minute","mi","n" The minute of the hour from the date "second","ss","s" The second of the minute from the date "millisecond","ms" The millisecond of the minute from the date "microsecond","msc" The microsecond of the minute from the date "nanosecond","ns" The nanosecond of the minute from the date "TZoffset","tz" The timezone offset from the date + * @param { XsString } [datepart] - The part of date that to be returned. Options: datepart parameter abbreviation includes: "year","yyyy","yy" The year part of the date "quarter","qq","q" The quarter part of the date "month","mm","m" The month part of the date "dayofyear","dy","y" The day of the year from the date "day","dd","d" The day of the month from the date "week","wk","ww" The week of the year from the date "weekday","dw" The day of the week from the date "hour","hh" The hour of the day from the date "minute","mi","n" The minute of the hour from the date "second","ss","s" The second of the minute from the date "millisecond","ms" The millisecond of the minute from the date "microsecond","msc" The microsecond of the minute from the date "nanosecond","ns" The nanosecond of the minute from the date "TZoffset","tz" The timezone offset from the date * @param { Item } [date] - Is an expression that can be resolved to a xs:date, xs:time, xs:dateTime. date can be an expression, column expression,user-defined variable, or string literal. * @returns { XsInteger } */ @@ -5111,7 +5111,7 @@ right(...args) { * Constructs a row identifier from the string form of the temporary identifier assigned to a row during processing. Provides a client interface to a server function. * @method planBuilder.sql#rowID * @since 2.1.1 - * @param { XsAnyAtomicType } [arg1] - + * @param { XsAnyAtomicType } [arg1] - * @returns { SqlRowID } */ rowID(...args) { @@ -5201,7 +5201,7 @@ strpos(...args) { * Returns a xs:string? timestamp created by adding a number to the given dateTimeType field of a given timestamp. Provides a client interface to a server function. See {@link http://docs.marklogic.com/sql.timestampadd|sql.timestampadd} * @method planBuilder.sql#timestampadd * @since 2.1.1 - * @param { XsString } [dateTimeType] - The dateTimeType of the timestamp where addition should take place. Available types are: SQL_TSI_FRAC_SECOND nano seconds SQL_TSI_SECOND seconds SQL_TSI_MINUTE minute SQL_TSI_HOUR hour SQL_TSI_DAY day SQL_TSI_WEEK week SQL_TSI_MONTH month SQL_TSI_QUARTER quarter SQL_TSI_YEAR year + * @param { XsString } [dateTimeType] - The dateTimeType of the timestamp where addition should take place. Available types are: SQL_TSI_FRAC_SECOND nano seconds SQL_TSI_SECOND seconds SQL_TSI_MINUTE minute SQL_TSI_HOUR hour SQL_TSI_DAY day SQL_TSI_WEEK week SQL_TSI_MONTH month SQL_TSI_QUARTER quarter SQL_TSI_YEAR year * @param { XsInt } [value] - The integer to add to the given dateTimeType field of the third parameter. * @param { Item } [timestamp] - The xs:dateTime timestamp to which addition has to take place. * @returns { Item } @@ -5219,7 +5219,7 @@ timestampadd(...args) { * Returns the difference in dateTimeType field of two given timestamps. Provides a client interface to a server function. See {@link http://docs.marklogic.com/sql.timestampdiff|sql.timestampdiff} * @method planBuilder.sql#timestampdiff * @since 2.1.1 - * @param { XsString } [dateTimeType] - The dateTimeType of the timestamp where addition should take place. Available types are: SQL_TSI_FRAC_SECOND nano seconds SQL_TSI_SECOND seconds SQL_TSI_MINUTE minute SQL_TSI_HOUR hour SQL_TSI_DAY day SQL_TSI_WEEK week SQL_TSI_MONTH month SQL_TSI_QUARTER quarter SQL_TSI_YEAR year + * @param { XsString } [dateTimeType] - The dateTimeType of the timestamp where addition should take place. Available types are: SQL_TSI_FRAC_SECOND nano seconds SQL_TSI_SECOND seconds SQL_TSI_MINUTE minute SQL_TSI_HOUR hour SQL_TSI_DAY day SQL_TSI_WEEK week SQL_TSI_MONTH month SQL_TSI_QUARTER quarter SQL_TSI_YEAR year * @param { Item } [timestamp1] - The integer to add to the given dateTimeType field of the third parameter. * @param { Item } [timestamp2] - The xs:dateTime timestamp to which addition has to take place. * @returns { XsInteger } @@ -5261,7 +5261,7 @@ week(...args) { * Returns the day of the week. Provides a client interface to a server function. * @method planBuilder.sql#weekday * @since 2.1.1 - * @param { Item } [arg1] - + * @param { Item } [arg1] - * @returns { XsInteger } */ weekday(...args) { @@ -6104,7 +6104,7 @@ or64(...args) { * Parses a string containing date, time or dateTime using the supplied picture argument and returns a dateTime value. While this function is closely related to other XSLT functions, it is available in XSLT as well as in all XQuery dialects and in Server-Side JavaScript. Provides a client interface to a server function. See {@link http://docs.marklogic.com/xdmp.parseDateTime|xdmp.parseDateTime} * @method planBuilder.xdmp#parseDateTime * @since 2.1.1 - * @param { XsString } [picture] - The desired string representation of the given $value. The picture string is a sequence of characters, in which the characters represent variables such as, decimal-separator-sign, grouping-sign, zero-digit-sign, digit-sign, pattern-separator, percent sign and per-mille-sign. For details on the picture string, see http://www.w3.org/TR/xslt20/#date-picture-string. This follows the specification of picture string in the W3C XSLT 2.0 specification for the fn:format-dateTime function. Symbol Description ----------------------------------- 'Y' year(absolute value) 'M' month in year 'D' day in month 'd' day in year 'F' day of week 'W' week in year 'w' week in month 'H' hour in day 'h' hour in half-day 'P' am/pm marker 'm' minute in hour 's' second in minute 'f' fractional seconds 'Z' timezone as a time offset from UTC for example PST 'z' timezone as an offset using GMT, for example GMT+1 + * @param { XsString } [picture] - The desired string representation of the given $value. The picture string is a sequence of characters, in which the characters represent variables such as, decimal-separator-sign, grouping-sign, zero-digit-sign, digit-sign, pattern-separator, percent sign and per-mille-sign. For details on the picture string, see http://www.w3.org/TR/xslt20/#date-picture-string. This follows the specification of picture string in the W3C XSLT 2.0 specification for the fn:format-dateTime function. Symbol Description ----------------------------------- 'Y' year(absolute value) 'M' month in year 'D' day in month 'd' day in year 'F' day of week 'W' week in year 'w' week in month 'H' hour in day 'h' hour in half-day 'P' am/pm marker 'm' minute in hour 's' second in minute 'f' fractional seconds 'Z' timezone as a time offset from UTC for example PST 'z' timezone as an offset using GMT, for example GMT+1 * @param { XsString } [value] - The given string $value representing the dateTime value that needs to be formatted. * @param { XsString } [language] - The language used in string representation of the date, time or dateTime value. * @param { XsString } [calendar] - This argument is reserved for future use. The only calendar supported at this point is "Gregorian" or "AD". @@ -6124,7 +6124,7 @@ parseDateTime(...args) { * Parses a string containing date, time or dateTime using the supplied picture argument and returns a dateTime value. While this function is closely related to other XSLT functions, it is available in XSLT as well as in all XQuery dialects and in Server-Side JavaScript. Provides a client interface to a server function. See {@link http://docs.marklogic.com/xdmp.parseYymmdd|xdmp.parseYymmdd} * @method planBuilder.xdmp#parseYymmdd * @since 2.1.1 - * @param { XsString } [picture] - The desired string representation of the given $value. This follows the specification of picture string which is compatible to the format specification in icu. See http://icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html for more details. The following is the summary of the formatting symbols: Symbol Description ---------------------------- "y" year(absolute value) "M" month in year "d" day in month "D" day in year "E" day of week "w" week in year "W" week in month "H" hour in day "K" hour in half-day "a" am/pm marker "s" second in minute "S" fractional seconds "Z" timezone as a time offset from UTC for example PST "ZZZZ" timezone as an offset using GMT, for example GMT+1 + * @param { XsString } [picture] - The desired string representation of the given $value. This follows the specification of picture string which is compatible to the format specification in icu. See http://icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html for more details. The following is the summary of the formatting symbols: Symbol Description ---------------------------- "y" year(absolute value) "M" month in year "d" day in month "D" day in year "E" day of week "w" week in year "W" week in month "H" hour in day "K" hour in half-day "a" am/pm marker "s" second in minute "S" fractional seconds "Z" timezone as a time offset from UTC for example PST "ZZZZ" timezone as an offset using GMT, for example GMT+1 * @param { XsString } [value] - The given string $value that needs to be formatted. * @param { XsString } [language] - The language used in string representation of the date, time or dateTime value. * @param { XsString } [calendar] - This argument is reserved for future use. The only calendar supported at this point is "Gregorian" or "AD". @@ -6389,7 +6389,7 @@ type(...args) { * @since 2.1.1 * @param { XsString } [arg] - Input to be unquoted. * @param { XsString } [defaultNamespace] - Default namespace for nodes in the first parameter. - * @param { XsString } [options] - The options for getting this document. The default value is (). Options include: "repair-full" Specifies that malformed XML content be repaired. XML content with multiple top-level elements will be parsed as multiple documents. This option has no effect on binary or text documents. "repair-none" Specifies that malformed XML content be rejected. XML content will be parsed as a single document, so a maximum of one document node will be returned. This option has no effect on binary or text documents. "format-text" Specifies to get the document as a text document, regardless of the URI specified. "format-binary" Specifies to get the document as a binary document, regardless of the URI specified. "format-xml" Specifies to get the document as an XML document, regardless of the URI specified. "format-json" Specifies to get the document as a JSON document, regardless of the URI specified. "default-language=xx" If the root element node specified in the first parameter does not already have an xml:lang attribute, the language to specify in an xml:lang attribute on the root element node. If default-language is not specified, then nothing is added to the root element node. Some examples are default-language=en and default-language=fr. + * @param { XsString } [options] - The options for getting this document. The default value is (). Options include: "repair-full" Specifies that malformed XML content be repaired. XML content with multiple top-level elements will be parsed as multiple documents. This option has no effect on binary or text documents. "repair-none" Specifies that malformed XML content be rejected. XML content will be parsed as a single document, so a maximum of one document node will be returned. This option has no effect on binary or text documents. "format-text" Specifies to get the document as a text document, regardless of the URI specified. "format-binary" Specifies to get the document as a binary document, regardless of the URI specified. "format-xml" Specifies to get the document as an XML document, regardless of the URI specified. "format-json" Specifies to get the document as a JSON document, regardless of the URI specified. "default-language=xx" If the root element node specified in the first parameter does not already have an xml:lang attribute, the language to specify in an xml:lang attribute on the root element node. If default-language is not specified, then nothing is added to the root element node. Some examples are default-language=en and default-language=fr. * @returns { DocumentNode } */ unquote(...args) { @@ -7210,8 +7210,8 @@ class PlanPlan extends types.ServerType { * Provides a client interface to a server function. * @method planBuilder.Plan#bindParam * @since 2.1.1 - * @param { PlanParamName } [param] - - * @param { PlanParamBinding } [literal] - + * @param { PlanParamName } [param] - + * @param { PlanParamBinding } [literal] - * @returns { planBuilder.Plan } */ bindParam(...args) { @@ -7395,7 +7395,7 @@ class PlanPrefixer extends types.ServerType { * Provides a client interface to a server function. * @method planBuilder.Prefixer#iri * @since 2.1.1 - * @param { XsString } [name] - + * @param { XsString } [name] - * @returns { SemIri } */ iri(...args) { @@ -8111,7 +8111,7 @@ col(...args) { * This function samples rows from a view or from a pattern match on the triple index. Provides a client interface to a server function. See {@link http://docs.marklogic.com/AccessPlan.prototype.sampleBy|AccessPlan.prototype.sampleBy} * @method planBuilder.AccessPlan#sampleBy * @since 2.1.1 - * @param { PlanSampleByOption } [option] - + * @param { PlanSampleByOption } [option] - * @returns { planBuilder.ModifyPlan } */ sampleBy(...args) { @@ -9014,8 +9014,8 @@ groupConcat(...args) { * Provides a client interface to a server function. * @method planBuilder#groupKey * @since 2.1.1 - * @param { PlanColumnName } [name] - - * @param { PlanExprColName } [column] - + * @param { PlanColumnName } [name] - + * @param { PlanExprColName } [column] - * @returns { planBuilder.PlanAggregateCol } */ groupKey(...args) { @@ -9438,8 +9438,8 @@ xmlPi(...args) { * Provides a client interface to a server function. * @method planBuilder#resolveFunction * @since 2.1.1 - * @param { PlanQualifiableName } [functionName] - - * @param { XsString } [modulePath] - + * @param { PlanQualifiableName } [functionName] - + * @param { XsString } [modulePath] - * @returns { planBuilder.PlanFunction } */ resolveFunction(...args) { diff --git a/lib/plan-builder.js b/lib/plan-builder.js index f01ec406c..c69d7610b 100644 --- a/lib/plan-builder.js +++ b/lib/plan-builder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -9,7 +9,7 @@ const bldrgen = require('./plan-builder-generated.js'); /** @ignore */ function isNonEmptyString(arg) { - if (typeof arg === "string" || arg instanceof String) { + if (typeof arg === 'string' || arg instanceof String) { return (arg.length > 0); } return false; diff --git a/lib/proxy-generator.js b/lib/proxy-generator.js index 7587fed22..4e93be146 100644 --- a/lib/proxy-generator.js +++ b/lib/proxy-generator.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -114,14 +114,14 @@ function buildModule(moduleName, servicedef, endpointdefs) { b.methodDefinition('constructor', b.identifier('constructor'), b.functionExpression(null, [b.identifier('client'), b.identifier('serviceDeclaration')], b.blockStatement([ - b.ifStatement(b.logicalExpression("||", + b.ifStatement(b.logicalExpression('||', b.binaryExpression('===', b.identifier('client'), b.identifier('undefined')), b.binaryExpression('===', b.identifier('client'), b.literal(null)) ), b.blockStatement([b.throwStatement(b.newExpression(b.identifier('Error'), [ b.literal('missing required client') ]))])), - b.ifStatement(b.logicalExpression("||", + b.ifStatement(b.logicalExpression('||', b.binaryExpression('===', b.identifier('serviceDeclaration'), b.identifier('undefined')), b.binaryExpression('===', b.identifier('serviceDeclaration'), b.literal(null)) ), @@ -341,21 +341,21 @@ function generateSessionFactoryDoc(className, sessionFactoryName) { function generateModuleSource(moduleName, servicedef, endpointdefs) { if (moduleName === void 0 || moduleName === null) { - throw new Error(`missing module name`); + throw new Error('missing module name'); } else if (servicedef === void 0 || servicedef === null) { - throw new Error(`missing service.json declaration`); + throw new Error('missing service.json declaration'); } else if (servicedef.endpointDirectory === void 0 || servicedef.endpointDirectory === null) { - throw new Error(`service.json declaration without endpointDirectory property`); + throw new Error('service.json declaration without endpointDirectory property'); } else if (!Array.isArray(endpointdefs) || endpointdefs.length === 0) { - throw new Error(`no endpoint pairs of *.api declaration and main module`); + throw new Error('no endpoint pairs of *.api declaration and main module'); } else { endpointdefs.forEach(endpoint => { if (endpoint.moduleExtension === void 0 || endpoint.moduleExtension === null) { - throw new Error(`endpoint without moduleExtension property`); + throw new Error('endpoint without moduleExtension property'); } else if (endpoint.declaration === void 0 || endpoint.declaration === null) { - throw new Error(`endpoint without declaration`); + throw new Error('endpoint without declaration'); } else if (endpoint.declaration.functionName === void 0 || endpoint.declaration.functionName === null) { - throw new Error(`endpoint declaration without functionName property`); + throw new Error('endpoint declaration without functionName property'); } const validationResult = endpointDeclarationValidator.validate(endpoint.declaration); if (!(validationResult.isValid)) { diff --git a/lib/query-builder.js b/lib/query-builder.js index 8f9ca1587..08fc1f7be 100644 --- a/lib/query-builder.js +++ b/lib/query-builder.js @@ -1,16 +1,15 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var util = require("util"); -var deepcopy = require('deepcopy'); +const util = require('util'); -var mlutil = require('./mlutil.js'); +const mlutil = require('./mlutil.js'); const types = require('./server-types-generated.js'); const bldrbase = require('./plan-builder-base.js'); -var comparisons = { +const comparisons = { '<' : 'LT', '<=' : 'LE', '>' : 'GT', @@ -18,7 +17,7 @@ var comparisons = { '=' : 'EQ', '!=' : 'NE' }; -var datatypes = { +const datatypes = { 'xs:anyURI': 'xs:anyURI', 'xs:date': 'xs:date', 'xs:dateTime': 'xs:dateTime', @@ -45,7 +44,7 @@ function asIndex(index) { } /** @ignore */ function addIndex(query, index, isContainer) { - var containerOnly = (isContainer || false); + const containerOnly = (isContainer || false); if (index instanceof JSONPropertyDef) { query['json-property'] = index['json-property']; } else if (index instanceof ElementDef) { @@ -112,12 +111,12 @@ function checkQueryArray(queryArray) { return queryArray; } - var max = queryArray.length; + const max = queryArray.length; if (max === 0) { return queryArray; } - var i = 0; + let i = 0; for (; i < max; i++) { checkQuery(queryArray[i]); } @@ -171,11 +170,11 @@ function ConstraintDef() { * @returns {queryBuilder.Query} a composable query */ function and() { - var args = mlutil.asArray.apply(null, arguments); - var queries = []; - var ordered = null; - var arg = null; - for (var i=0; i < args.length; i++) { + const args = mlutil.asArray.apply(null, arguments); + const queries = []; + let ordered = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (ordered === null) { if (arg instanceof OrderedDef) { @@ -261,7 +260,7 @@ function QueryListDef(queries, ordered, weight, distance) { * @returns {queryBuilder.Query} a composable query */ function andNot() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing positive and negative queries'); @@ -317,7 +316,7 @@ function PositiveNegativeDef(positive, negative) { * @returns {queryBuilder.IndexedName} an indexed name for specifying a query */ function attribute() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing element and attribute'); @@ -394,7 +393,7 @@ function AttributeDef(elemQName, attrQName) { * @returns {queryBuilder.Query} a composable query */ function boost() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing matching and boosting queries'); @@ -452,7 +451,7 @@ function MatchingBoostingDef(matching, boosting) { * @returns {queryBuilder.Region} the region criteria for a geospatial query */ function box() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing four corners for box'); @@ -498,8 +497,8 @@ function BoxRegionDef(box) { * @returns {queryBuilder.Region} the region criteria for a geospatial query */ function circle() { - var args = mlutil.asArray.apply(null, arguments); - var arg = null; + const args = mlutil.asArray.apply(null, arguments); + let arg = null; switch(args.length) { case 0: throw new Error('missing radius and center for circle'); @@ -583,18 +582,18 @@ function CircleDef(radius, center) { * @returns {queryBuilder.Query} a composable query */ function collection() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { return new CollectionConstraintDef(null, null, null); } - var constraintName = null; - var suggestOptions = null; - var prefix = null; - var arg = null; - var i = 0; + let constraintName = null; + let suggestOptions = null; + let prefix = null; + let arg = null; + let i = 0; for (; i < argLen; i++) { arg = args[i]; if (constraintName === null && arg instanceof BindDef) { @@ -700,18 +699,18 @@ util.inherits(CollectionQueryDef, QueryDef); * @returns {queryBuilder.Query} a composable query */ function lsqtQuery() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('no temporal collection for lsqt query'); } - var temporalCollection = null; - var weight = null; - var timestamp = null; - var temporalOptions = null; - var arg = null; - for (var i=0; i < args.length; i++) { + let temporalCollection = null; + let weight = null; + let timestamp = null; + let temporalOptions = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (i === 0) { if (typeof arg !== 'string' && !(arg instanceof String)) { @@ -811,17 +810,17 @@ function LSQTQueryDef(temporalCollection, weight, timestamp, temporalOptions) { * @returns {queryBuilder.Query} a composable query */ function scope() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('element or property scope not specified'); } - var index = null; - var constraintName = null; - var fragmentScope = null; - var query = null; - var arg = null; - for (var i=0; i < args.length; i++) { + let index = null; + let constraintName = null; + let fragmentScope = null; + let query = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (i === 0) { index = asIndex(arg); @@ -919,9 +918,9 @@ function ContainedDef(index, fragmentScope, query) { this['fragment-scope'] = fragmentScope; } if (query != null) { - var queryKeys = Object.keys(query); - var queryKey = null; - for (var i=0; i < queryKeys.length; i++) { + const queryKeys = Object.keys(query); + let queryKey = null; + for (let i=0; i < queryKeys.length; i++) { queryKey = queryKeys[i]; this[queryKey] = query[queryKey]; } @@ -944,7 +943,7 @@ function ContainedDef(index, fragmentScope, query) { * @returns {queryBuilder.DatatypeParam} a datatype specification */ function datatype() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing datatype'); @@ -988,12 +987,12 @@ function DatatypeDef(datatype, collation) { * @returns {queryBuilder.Query} a composable query */ function directory() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); - var uris = []; - var infinite = null; - var arg = null; - for (var i=0; i < args.length; i++) { + const uris = []; + let infinite = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (infinite === null && (typeof arg === 'boolean')) { infinite = arg; @@ -1106,7 +1105,7 @@ util.inherits(DocumentFragmentDef, QueryDef); * @returns {queryBuilder.IndexedName} an indexed name for specifying a query */ function element() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing element name'); @@ -1145,7 +1144,7 @@ function ElementDef(qname) { * @returns {queryBuilder.IndexedName} an indexed name for specifying a query */ function field() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing field name'); @@ -1240,18 +1239,18 @@ function FragmentScopeDef(scope) { * @returns {queryBuilder.GeoLocation} the specification for the geospatial locations */ function geoAttributePair() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 2) { throw new Error('need at least two parameters for geospatial attribute pair query'); } - var location = {}; + const location = {}; - var keys = ['parent', 'lat', 'lon']; - var iArg=0; - for (var i=0; i < keys.length; i++) { - var key = keys[i]; - var arg = args[iArg++]; + const keys = ['parent', 'lat', 'lon']; + let iArg=0; + for (let i=0; i < keys.length; i++) { + const key = keys[i]; + const arg = args[iArg++]; if (arg instanceof QNameDef) { location[key] = arg; } else if (typeof arg === 'string' || arg instanceof String) { @@ -1285,19 +1284,19 @@ function geoAttributePair() { * @returns {queryBuilder.GeoLocation} the specification for the geospatial locations */ function geoElement() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('need at least one parameter for geospatial element query'); } - var location = {}; + const location = {}; // TODO: elementName - var maxIndex = Math.min(argLen, 2); - var elemName = null; - var arg = null; - var i=0; + const maxIndex = Math.min(argLen, 2); + let elemName = null; + let arg = null; + let i=0; while (i < maxIndex) { arg = args[i]; if (arg instanceof QNameDef) { @@ -1337,17 +1336,17 @@ function geoElement() { * @returns {queryBuilder.GeoLocation} the specification for the geospatial locations */ function geoElementPair() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 2) { throw new Error('need at least two parameters for geospatial element pair query'); } - var location = {}; + const location = {}; - var keys = ['parent', 'lat', 'lon']; - var key = null; - var arg = null; - for (var i=0; i < keys.length; i++) { + const keys = ['parent', 'lat', 'lon']; + let key = null; + let arg = null; + for (let i=0; i < keys.length; i++) { key = keys[i]; arg = args[i]; if (arg instanceof QNameDef) { @@ -1376,18 +1375,18 @@ function geoElementPair() { * @returns {queryBuilder.GeoLocation} the specification for the geospatial locations */ function geoProperty() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('need at least one parameters for geospatial property query'); } - var location = {}; + const location = {}; - var maxIndex = Math.min(argLen, 2); - var propName = null; - var arg = null; - var i=0; + const maxIndex = Math.min(argLen, 2); + let propName = null; + let arg = null; + let i=0; while (i < maxIndex) { arg = args[i]; if (arg instanceof JSONPropertyDef) { @@ -1421,17 +1420,17 @@ function geoProperty() { * @returns {queryBuilder.GeoLocation} the specification for the geospatial locations */ function geoPropertyPair() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 2) { throw new Error('need at least two parameters for geospatial property pair query'); } - var location = {}; + const location = {}; - var keys = ['parent-property', 'lat-property', 'lon-property']; - var key = null; - var arg = null; - for (var i=0; i < keys.length; i++) { + const keys = ['parent-property', 'lat-property', 'lon-property']; + let key = null; + let arg = null; + for (let i=0; i < keys.length; i++) { key = keys[i]; arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { @@ -1460,17 +1459,17 @@ function geoPropertyPair() { * @returns {queryBuilder.GeoLocation} the specification for the geospatial locations */ function geoPath() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('need at least one parameter for geospatial path query'); } - var location = {}; + const location = {}; - var seekingPathIndex = true; - var firstArg = null; - var arg = null; - var i=0; + let seekingPathIndex = true; + let firstArg = null; + let arg = null; + let i=0; for (; i < args.length; i++) { arg = args[i]; if (i === 0) { @@ -1582,7 +1581,7 @@ function geospatialImpl(hasOperator, args) { throw new Error('need at least one parameter for geospatial query'); } - var isGeoLocationIndex = { + const isGeoLocationIndex = { 'geo-attr-pair': true, 'geo-elem': true, 'geo-elem-pair': true, @@ -1591,18 +1590,18 @@ function geospatialImpl(hasOperator, args) { 'geo-path': true }; - var query = null; - var variant = null; - var constraintName = null; - var suggestOptions = null; - var seekingWeight = true; - var seekingFragmentScope = true; - var seekingGeoOption = true; - var seekingRegion = true; - var seekingGeoOperator = true; - var firstKey = null; - var arg = null; - var i=0; + let query = null; + let variant = null; + let constraintName = null; + let suggestOptions = null; + let seekingWeight = true; + let seekingFragmentScope = true; + let seekingGeoOption = true; + let seekingRegion = true; + let seekingGeoOperator = true; + let firstKey = null; + let arg = null; + let i=0; for (; i < args.length; i++) { arg = args[i]; if (i === 0) { @@ -1743,13 +1742,13 @@ util.inherits(GeospatialConstraintDef, ConstraintDef); * @returns {queryBuilder.HeatMapParam} the buckets for a geospatial facet */ function heatmap() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('no region or divisions for heat map'); } - var hmap = {}; + const hmap = {}; switch(argLen) { case 3: var first = args[0]; @@ -1769,14 +1768,14 @@ function heatmap() { } var keys = ['s', 'w', 'n', 'e']; - for (var i=0; i < keys.length; i++) { - var key = keys[i]; - var value = region[key]; + for (let i=0; i < keys.length; i++) { + const key = keys[i]; + let value = region[key]; if (value != null) { hmap[key] = value; continue; } else { - var altKey = null; + let altKey = null; switch(key) { case 's': altKey = 'south'; @@ -1858,7 +1857,7 @@ function GeoOptionsDef(options) { * @returns {queryBuilder.LatLon} a coordinate for a {queryBuilder.Region} */ function latlon() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing latitude and longitude for latlon coordinate'); @@ -1972,7 +1971,7 @@ function MinDistanceDef(distance) { * @returns {queryBuilder.Query} a composable query */ function near() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('need at least a subquery for near query'); } @@ -1984,14 +1983,14 @@ function NearDef(args) { return new NearDef(args); } - var query = {}; - var subquery = []; - var seekingOrdered = true; - var seekingWeight = true; - var seekingDistance = true; - var seekingMinDistance = true; - var arg = null; - for (var i=0; i < args.length; i++) { + const query = {}; + const subquery = []; + let seekingOrdered = true; + let seekingWeight = true; + let seekingDistance = true; + let seekingMinDistance = true; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (seekingOrdered) { if (arg instanceof OrderedDef) { @@ -2070,7 +2069,7 @@ util.inherits(NotDef, QueryDef); * @returns {queryBuilder.Query} a composable query */ function notIn() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing positive and negative queries'); @@ -2164,7 +2163,7 @@ function OrderedDef(on) { * @returns {queryBuilder.IndexedName} an indexed name for specifying a query */ function pathIndex() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing path for path index identifier'); @@ -2215,7 +2214,7 @@ function PathDef(pathExpression, namespaces) { * @returns {queryBuilder.CoordSystem} a coordinate system identifier */ function coordSystem() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing identifier for coordinate system'); @@ -2250,7 +2249,7 @@ function CoordSystemDef(coordSystem) { * @returns {queryBuilder.Region} the region criteria for a geospatial query */ function point() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing latitude and longitude for point'); @@ -2288,11 +2287,11 @@ function PointRegionDef(point) { * @returns {queryBuilder.Region} the region criteria for a geospatial query */ function polygon() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); - var points = []; - var arg = null; - var i=0; + const points = []; + let arg = null; + let i=0; for (; i < args.length; i++) { arg = args[i]; if (arg instanceof PointRegionDef) { @@ -2358,7 +2357,7 @@ util.inherits(PropertiesFragmentDef, QueryDef); * @returns {queryBuilder.IndexedName} an indexed name for specifying a query */ function property() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing JSON property name'); @@ -2400,7 +2399,7 @@ function JSONPropertyDef(name) { * an element or attribute */ function qname() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('missing name for QName identifier'); @@ -2451,8 +2450,8 @@ function QNameDef(ns, name) { * for a {@link queryBuilder#periodRange} temporal query */ function period() { - var startDate = null; - var endDate = null; + let startDate = null; + let endDate = null; switch(arguments.length) { case 0: @@ -2513,15 +2512,15 @@ function PeriodDef(startDate, endDate) { * @returns {queryBuilder.Query} a composable query */ function periodCompare() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; - - var compareAxis1 = null; - var compareOperator = null; - var compareAxis2 = null; - var temporalOptions = null; - var arg = null; - for (var i=0; i < argLen; i++) { + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; + + let compareAxis1 = null; + let compareOperator = null; + let compareAxis2 = null; + let temporalOptions = null; + let arg = null; + for (let i=0; i < argLen; i++) { arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { if (compareAxis1 === null) { @@ -2613,15 +2612,15 @@ function PeriodCompareQueryDef( * @returns {queryBuilder.Query} a composable query */ function periodRange() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; - - var rangeAxis = null; - var rangeOperator = null; - var rangePeriod = null; - var temporalOptions = null; - var arg = null; - for (var i=0; i < argLen; i++) { + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; + + let rangeAxis = null; + let rangeOperator = null; + let rangePeriod = null; + let temporalOptions = null; + let arg = null; + for (let i=0; i < argLen; i++) { arg = args[i]; if (Array.isArray(arg) && arg.length > 0) { if (rangeAxis === null && (typeof arg[0] === 'string' || arg[0] instanceof String)) { @@ -2830,21 +2829,21 @@ function TemporalOptionsDef(options) { * @returns {queryBuilder.Query} a composable query */ function range() { - var args = mlutil.asArray.apply(null, arguments); - - var index = null; - var datatype = null; - var collation = null; - var weight = null; - var fragmentScope = null; - var rangeOptions = null; - var values = null; - var operator = null; - var suggestOptions = null; - var constraintName = null; - var defaultConstraint = null; - var arg = null; - for (var i=0; i < args.length; i++) { + const args = mlutil.asArray.apply(null, arguments); + + let index = null; + let datatype = null; + let collation = null; + let weight = null; + let fragmentScope = null; + let rangeOptions = null; + let values = null; + let operator = null; + let suggestOptions = null; + let constraintName = null; + let defaultConstraint = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (i === 0) { index = asIndex(arg); @@ -2888,11 +2887,11 @@ function range() { continue; } if ((datatype === null || operator === null) && (typeof arg === 'string' || arg instanceof String)) { - var testType = (datatype === null) ? datatypes[arg.trim()] : null; + const testType = (datatype === null) ? datatypes[arg.trim()] : null; if (testType != null) { datatype = testType; } else { - var testComp = (operator === null) ? comparisons[arg.trim()] : null; + const testComp = (operator === null) ? comparisons[arg.trim()] : null; if (testComp != null) { operator = testComp; } else if (values === null) { @@ -2910,7 +2909,7 @@ function range() { } } - var rangeDef = new RangeDef( + const rangeDef = new RangeDef( index, datatype, collation, operator, values, weight, rangeOptions, fragmentScope ); @@ -2934,7 +2933,7 @@ function range() { } } - var constraint = new RangeConstraintDef(constraintName, rangeDef, suggestOptions); + const constraint = new RangeConstraintDef(constraintName, rangeDef, suggestOptions); return (defaultConstraint !== true) ? constraint : new DefaultConstraintDef(constraint); @@ -2977,7 +2976,7 @@ function RangeDef( ); } - var hasOperator = (operator != null); + const hasOperator = (operator != null); if (index != null) { addIndex(this, index, false); @@ -3061,8 +3060,8 @@ function RangeOptionsDef(options) { * @returns {object} the coordinates for the box */ function southWestNorthEast() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen !== 4) { throw new Error('box must have four parameters: '+argLen); } @@ -3120,12 +3119,12 @@ function BoxDef(south, west, north, east) { * @returns {queryBuilder.Query} a composable query */ function term() { - var args = mlutil.asArray.apply(null, arguments); - var text = []; - var weight = null; - var termOptions = null; - var arg = null; - for (var i=0; i < args.length; i++) { + const args = mlutil.asArray.apply(null, arguments); + const text = []; + let weight = null; + let termOptions = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (weight === null && arg instanceof WeightDef) { weight = arg.weight; @@ -3166,7 +3165,7 @@ util.inherits(TermDef, QueryDef); * @returns {queryBuilder.Query} a composable query */ function before() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length === 0 || args[0] === null) { throw new Error('missing Timestamp'); } else if (args.length>1) { @@ -3197,7 +3196,7 @@ util.inherits(BeforeQueryDef, QueryDef); * @returns {queryBuilder.Query} a composable query */ function after() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length === 0 || args[0] === null) { throw new Error('missing Timestamp'); } else if (args.length>1) { @@ -3255,19 +3254,19 @@ function TermOptionsDef(options) { } /** @ignore */ function textQuery(variant, args) { - var isValue = (variant === 'value'); - - var index = null; - var text = null; - var weight = null; - var fragmentScope = null; - var termOptions = null; - var suggestOptions = null; - var constraintName = null; - var defaultConstraint = null; - var jsontype = null; - var arg = null; - for (var i=0; i < args.length; i++) { + const isValue = (variant === 'value'); + + let index = null; + let text = null; + let weight = null; + let fragmentScope = null; + let termOptions = null; + let suggestOptions = null; + let constraintName = null; + let defaultConstraint = null; + let jsontype = null; + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (i === 0) { index = asIndex(arg); @@ -3325,7 +3324,7 @@ function textQuery(variant, args) { null; } - var textDef = new TextDef( + const textDef = new TextDef( index, jsontype, text, weight, termOptions, fragmentScope ); @@ -3349,7 +3348,7 @@ function textQuery(variant, args) { } } - var constraint = isValue ? + const constraint = isValue ? new ValueConstraintDef(constraintName, textDef, suggestOptions) : new WordConstraintDef(constraintName, textDef, suggestOptions); @@ -3362,7 +3361,7 @@ function DefaultConstraintDef(constraintDef) { return new DefaultConstraintDef(constraintDef); } - this['default'] = constraintDef; + this.default = constraintDef; } /** @ignore */ function ValueConstraintDef(constraintName, textDef, suggestOptions) { @@ -3536,7 +3535,7 @@ function JSONTypeDef(type) { return new JSONTypeDef(type); } - var isJSONType = { + const isJSONType = { 'boolean': true, 'null': true, 'number': true, @@ -3628,21 +3627,21 @@ function word() { * @returns {queryBuilder.BuiltQuery} a built query */ function copyFromQueryBuilder(otherQueryBuilder) { - var qb = new QueryBuilder(); + const qb = new QueryBuilder(); if (otherQueryBuilder != null) { - var clauseKeys = [ + const clauseKeys = [ 'whereClause', 'calculateClause', 'orderByClause', 'sliceClause', 'withOptionsClause' ]; - var isString = (typeof otherQueryBuilder === 'string' || otherQueryBuilder instanceof String); - var other = isString ? + const isString = (typeof otherQueryBuilder === 'string' || otherQueryBuilder instanceof String); + const other = isString ? JSON.parse(otherQueryBuilder) : otherQueryBuilder; - for (var i=0; i < clauseKeys.length; i++){ - var key = clauseKeys[i]; - var value = other[key]; + for (let i=0; i < clauseKeys.length; i++){ + const key = clauseKeys[i]; + const value = other[key]; if (value != null) { - // deepcopy instead of clone to avoid preserving prototype - qb[key] = isString ? value : deepcopy(value); + // structuredClone instead of clone to avoid preserving prototype + qb[key] = isString ? value : structuredClone(value); } } } @@ -3671,19 +3670,19 @@ function copyFromQueryBuilder(otherQueryBuilder) { */ function where() { /*jshint validthis:true */ - var self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); + const self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; // TODO: if empty, clear the clause - var parsedQuery = null; - var fragmentScope = null; - var queries = null; + let parsedQuery = null; + let fragmentScope = null; + let queries = null; - var i=0; + let i=0; - var arg = (argLen > 0) ? args[0] : null; + let arg = (argLen > 0) ? args[0] : null; if (arg == null) { self.whereClause = {query: {queries: [and()]}}; self.queryType = 'structured'; @@ -3716,7 +3715,7 @@ function where() { queries.push(checkQuery(arg)); } } - var whereClause = {}; + const whereClause = {}; if (queries !== null) { whereClause.query = {queries: queries}; } @@ -3757,7 +3756,7 @@ QueryBuilder.prototype.where = where; * for the {@link queryBuilder#where} function */ function byExample() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: return {$query: []}; @@ -3788,18 +3787,18 @@ function byExample() { */ function orderBy() { /*jshint validthis:true */ - var self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); + const self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); // TODO: if empty, clear the clause - var sortOrder = []; + const sortOrder = []; - var scoreOption = null; - var scoreDirection = null; + let scoreOption = null; + let scoreDirection = null; - var arg = null; - for (var i=0; i < args.length; i++) { + let arg = null; + for (let i=0; i < args.length; i++) { arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { sortOrder.push(sort(arg)); @@ -3880,24 +3879,24 @@ function score() { * for the {@link queryBuilder#orderBy} function */ function sort() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length === 0) { throw new Error('missing sorted index'); } - var firstIndex = asIndex(args[0]); + const firstIndex = asIndex(args[0]); // null is a legitimate value of score - var isScore = (firstIndex.score !== void 0); + const isScore = (firstIndex.score !== void 0); - var sorter = {}; + const sorter = {}; if (isScore) { sorter.score = firstIndex.score; } else { addIndex(sorter, firstIndex, false); } - var arg = null; - for (var i=1; i < args.length; i++) { + let arg = null; + for (let i=1; i < args.length; i++) { arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { switch (arg) { @@ -3945,7 +3944,7 @@ function transform(name, params) { throw new Error('transform without name'); } - var transformList = [name]; + const transformList = [name]; if (params != null) { transformList.push(params); } @@ -3996,9 +3995,9 @@ util.inherits(TrueQueryDef, QueryDef); */ function slice() { /*jshint validthis:true */ - var self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); + const self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); // TODO: if empty, clear the clause @@ -4022,12 +4021,12 @@ QueryBuilder.prototype.slice = slice; */ function calculate() { /*jshint validthis:true */ - var self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); + const self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); // TODO: distinguish facets and values - var calculateClause = { + const calculateClause = { constraint: args }; @@ -4071,13 +4070,13 @@ QueryBuilder.prototype.calculate = calculate; * for the {@link queryBuilder#calculate} function */ function facet() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('facet must at a minimum identify the index'); } - var isConstraintIndex = { + const isConstraintIndex = { collection: true, element: true, field: true, @@ -4090,7 +4089,7 @@ function facet() { 'json-property': true, 'path-index': true }; - var isGeoLocationIndex = { + const isGeoLocationIndex = { 'geo-attr-pair': true, 'geo-elem': true, 'geo-elem-pair': true, @@ -4099,19 +4098,19 @@ function facet() { 'geo-path': true }; - var constraintName = null; - var constraintIndex = null; - var firstKey = null; - var datatype; - var collation; - var facetOptions; - var calculateFunction; - var buckets = null; - var computedBuckets = null; - var heatmap = null; - - var arg = null; - for (var i=0; i < argLen; i++) { + let constraintName = null; + let constraintIndex = null; + let firstKey = null; + let datatype; + let collation; + let facetOptions; + let calculateFunction; + let buckets = null; + let computedBuckets = null; + let heatmap = null; + + let arg = null; + for (let i=0; i < argLen; i++) { arg = args[i]; switch(i) { case 0: @@ -4211,8 +4210,8 @@ function facet() { } } - var facetWrapper = {name: constraintName}; - var constraint = {facet: true}; + const facetWrapper = {name: constraintName}; + const constraint = {facet: true}; if (constraintIndex.collection !== undefined) { facetWrapper.collection = constraint; } else if (calculateFunction !== undefined) { @@ -4232,10 +4231,10 @@ function facet() { constraint.collation = collation; } } - var constraintKeys = Object.keys(constraintIndex); - var constraintKeyLen = constraintKeys.length; - for (var j=0; j < constraintKeyLen; j++) { - var key = constraintKeys[j]; + const constraintKeys = Object.keys(constraintIndex); + const constraintKeyLen = constraintKeys.length; + for (let j=0; j < constraintKeyLen; j++) { + const key = constraintKeys[j]; constraint[key] = constraintIndex[key]; } if (buckets !== null) { @@ -4275,14 +4274,14 @@ function facet() { * module for the {@link queryBuilder#facet} function. */ function calculateFunction() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('calculate function without module name'); } - var moduleName = args[0]; + const moduleName = args[0]; - var rootname = mlutil.rootname(moduleName); + const rootname = mlutil.rootname(moduleName); if (rootname === null) { throw new Error('library must have an extension of .xqy'); } @@ -4378,7 +4377,7 @@ util.inherits(FalseQueryDef, QueryDef); * @returns {queryBuilder.BucketParam} specification for a {@link queryBuilder#facet} calculation */ function bucket() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('must specify name, comparison, and bound for bucket'); @@ -4443,7 +4442,7 @@ function BucketDef(name, lower, upper) { this.name = name; this.label = name; - var lowerType = -1; + let lowerType = -1; if (lower == null) { lowerType = 0; } else if (typeof lower === 'number' || lower instanceof Number) { @@ -4454,7 +4453,7 @@ function BucketDef(name, lower, upper) { throw new Error('invalid lower bound for bucket: '+mlutil.identify(lower, true)); } - var upperType = -1; + let upperType = -1; if (upper == null) { upperType = 0; } else if (typeof upper === 'number' || upper instanceof Number) { @@ -4492,7 +4491,7 @@ function ComputedBucketDef(name, lower, upper) { this.name = name; this.label = name; - var lowerType = -1; + let lowerType = -1; if (lower == null) { lowerType = 0; } else if (lower instanceof AnchorDef) { @@ -4501,7 +4500,7 @@ function ComputedBucketDef(name, lower, upper) { throw new Error('invalid lower bound for computed bucket: '+mlutil.identify(lower, true)); } - var upperType = -1; + let upperType = -1; if (upper == null) { upperType = 0; } else if (upper instanceof AnchorDef) { @@ -4562,7 +4561,7 @@ function ComputedBucketDef(name, lower, upper) { * as part of a facet calculation */ function anchor() { - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); switch(args.length) { case 0: throw new Error('no milestone or lower bound for anchor'); @@ -4592,7 +4591,7 @@ function AnchorDef(milestone, first, comparison, second) { throw new Error('invalid milestone for anchor: '+mlutil.identify(milestone, true)); } - var comparisonType = -1; + let comparisonType = -1; if (comparison == null) { comparisonType = 0; } else if (comparison === '<') { @@ -4674,10 +4673,10 @@ function defaultConstraintName(index) { * the {@link queryBuilder#where} function */ function parsedFrom() { - var qtext = null; - var bindings = null; - var constraints = null; - var term = null; + let qtext = null; + let bindings = null; + let constraints = null; + let term = null; switch(arguments.length) { case 0: @@ -4767,20 +4766,20 @@ function parseBindings() { } /** @ignore */ function makeBindings(variant, args) { - var isParse = (variant === 'parse'); - var desc = isParse ? 'parsing query text' : 'defining suggestion sources'; + const isParse = (variant === 'parse'); + const desc = isParse ? 'parsing query text' : 'defining suggestion sources'; - var argLen = args.length; + const argLen = args.length; if (argLen < 1) { throw new Error('no bindings for '+desc); } - var constraints = null; - var defaultConstraints = null; - var suggestOptions = null; - var empty = null; - var arg = null; - for (var i=0; i < argLen; i++) { + let constraints = null; + let defaultConstraints = null; + let suggestOptions = null; + let empty = null; + let arg = null; + for (let i=0; i < argLen; i++) { arg = args[i]; if (arg.name !== void 0) { if (isParse && (arg['suggest-option'] !== void 0)) { @@ -4794,7 +4793,7 @@ function makeBindings(variant, args) { continue; } if (defaultConstraints == null) { - defaultConstraints = arg['default']; + defaultConstraints = arg.default; if (defaultConstraints !== void 0) { suggestOptions = arg['suggest-option']; if (isParse && (suggestOptions !== void 0)) { @@ -4812,7 +4811,7 @@ function makeBindings(variant, args) { throw new Error('unknown argument for parse query binding: '+mlutil.identify(arg, true)); } - var termDef = ( + const termDef = ( (defaultConstraints == null) && (empty == null) && (suggestOptions == null) @@ -4845,7 +4844,7 @@ function TermBindingDef(defaultConstraints, empty, suggestOptions) { } if (defaultConstraints != null) { - this['default'] = defaultConstraints; + this.default = defaultConstraints; } if (empty != null) { this.empty = empty; @@ -4959,7 +4958,7 @@ function EmptyApplyDef(binding) { return new EmptyApplyDef(binding); } - var valid = {'all-results': true, 'no-results': true}; + const valid = {'all-results': true, 'no-results': true}; if ((typeof binding === 'string' || binding instanceof String) && valid[binding] === true) { this.apply = binding; @@ -4994,18 +4993,18 @@ function EmptyApplyDef(binding) { * module for the {@link queryBuilder#parseBindings} function. */ function parseFunction() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 2) { throw new Error('query parse function without module name or binding'); } - var moduleName = args[0]; + const moduleName = args[0]; - var constraintName = null; - var termOptions = null; - var arg = null; - for (var i=1; i < args.length; i++) { + let constraintName = null; + let termOptions = null; + let arg = null; + for (let i=1; i < args.length; i++) { arg = args[i]; if (termOptions === null && arg instanceof TermOptionsDef) { termOptions = arg['term-option']; @@ -5069,7 +5068,7 @@ function CustomParserDef(moduleName) { return new CustomParserDef(moduleName); } - var rootname = mlutil.rootname(moduleName); + const rootname = mlutil.rootname(moduleName); if (rootname === null) { throw new Error('library must have an extension of .xqy'); } @@ -5101,19 +5100,19 @@ function CustomParserDef(moduleName) { * for the {@link queryBuilder#slice} function */ function extract() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('must specify paths to extract'); } - var extractdef = {}; + const extractdef = {}; - var arg = args[0]; + const arg = args[0]; if (typeof arg === 'string' || arg instanceof String) { extractdef['extract-path'] = args; } else { - var paths = arg.paths; + const paths = arg.paths; if (typeof paths === 'string' || paths instanceof String) { extractdef['extract-path'] = [paths]; } else if (Array.isArray(paths)) { @@ -5122,12 +5121,12 @@ function extract() { throw new Error('first argument does not have key for paths to extract'); } - var namespaces = arg.namespaces; + const namespaces = arg.namespaces; if (namespaces !== void 0) { extractdef.namespaces = namespaces; } - var selected = arg.selected; + const selected = arg.selected; if (selected !== void 0) { extractdef.selected = selected; } @@ -5159,10 +5158,10 @@ function extract() { * for the {@link queryBuilder#slice} function */ function snippet() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; - var builtins = { + const builtins = { empty: 'empty-snippet', 'empty-snippet': 'empty-snippet', metadata: 'metadata-snippet', @@ -5170,13 +5169,13 @@ function snippet() { snippet: 'snippet' }; - var snippeter = { + const snippeter = { apply: 'snippet' }; - var arg = null; - var builtin = null; - for (var i=0; i < argLen; i++) { + let arg = null; + let builtin = null; + for (let i=0; i < argLen; i++) { arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { builtin = builtins[arg]; @@ -5184,7 +5183,7 @@ function snippet() { snippeter.apply = builtin; continue; } else { - var rootname = mlutil.rootname(arg); + const rootname = mlutil.rootname(arg); snippeter.ns = 'http://marklogic.com/snippet/custom/'+rootname; snippeter.at = '/ext/marklogic/snippet/custom/'+arg; snippeter.apply = 'snippet'; @@ -5229,10 +5228,10 @@ function snippet() { */ function withOptions() { /*jshint validthis:true */ - var self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); + const self = (this instanceof QueryBuilder) ? this : new QueryBuilder(); // TODO: share with documents.js - var optionKeyMapping = { + const optionKeyMapping = { search:'search-option', weight:'quality-weight', forestNames:'forest', similarDocs:'return-similar', metrics:'return-metrics', queryPlan:'return-plan', @@ -5240,14 +5239,14 @@ function withOptions() { categories:true, txid:true }; - var withOptionsClause = {}; + const withOptionsClause = {}; if (0 < arguments.length) { - var arg = arguments[0]; - var argKeys = Object.keys(arg); - for (var i=0; i < argKeys.length; i++) { - var key = argKeys[i]; + const arg = arguments[0]; + const argKeys = Object.keys(arg); + for (let i=0; i < argKeys.length; i++) { + const key = argKeys[i]; if (optionKeyMapping[key] !== void 0) { - var value = arg[key]; + const value = arg[key]; if (value !== void 0) { withOptionsClause[key] = value; } else { @@ -5269,17 +5268,17 @@ function makeSearchBody(builtQuery) { throw new Error('no query for documents'); } - var categories = null; - var optionsName = null; - var pageStart = null; - var pageLength = null; - var txid = null; - var transform = null; - var view = null; + let categories = null; + let optionsName = null; + let pageStart = null; + let pageLength = null; + let txid = null; + let transform = null; + let view = null; - var i=0; + let i=0; - var searchBody = {}; + const searchBody = {}; if (builtQuery.search !== void 0) { searchBody.search = builtQuery.search; @@ -5308,10 +5307,10 @@ function makeSearchBody(builtQuery) { categories = (builtQuery.categories !== void 0) ? builtQuery.categories : ['content']; } else { - var search = {}; + const search = {}; searchBody.search = search; - var searchOptions = search.options; + let searchOptions = search.options; if (searchOptions == null) { searchOptions = {}; search.options = searchOptions; @@ -5319,11 +5318,11 @@ function makeSearchBody(builtQuery) { // TODO: validate clauses - var whereClause = builtQuery.whereClause; + const whereClause = builtQuery.whereClause; if (builtQuery.queryType === 'qbe') { search.$query = whereClause.$query; - var format = whereClause.$format; - var validate = whereClause.$validate; + const format = whereClause.$format; + const validate = whereClause.$validate; if (format != null) { search.$format = format; } @@ -5333,9 +5332,9 @@ function makeSearchBody(builtQuery) { } else if (builtQuery.queryType === 'cts') { search.ctsast = bldrbase.exportArg(whereClause); } else if (whereClause != null) { - var query = whereClause.query; - var parsedQuery = whereClause.parsedQuery; - var fragmentScope = whereClause['fragment-scope']; + const query = whereClause.query; + const parsedQuery = whereClause.parsedQuery; + const fragmentScope = whereClause['fragment-scope']; if (query != null) { search.query = query; @@ -5348,7 +5347,7 @@ function makeSearchBody(builtQuery) { } } - var calculateClause = builtQuery.calculateClause; + const calculateClause = builtQuery.calculateClause; if (calculateClause != null) { view = 'results'; searchOptions['return-facets'] = true; @@ -5356,30 +5355,30 @@ function makeSearchBody(builtQuery) { searchOptions['return-metrics'] = false; searchOptions['return-qtext'] = false; searchOptions['transform-results'] = {apply: 'empty-snippet'}; - var searchConstraintList = searchOptions.constraint; + const searchConstraintList = searchOptions.constraint; if (searchConstraintList == null) { searchOptions.constraint = calculateClause.constraint; } else { // TODO: convert into a generic deep merge utility - var constraintLookup = {}; - for (var li=0; li < searchConstraintList.length; li++) { - var lookupConstraint = searchConstraintList[li]; + const constraintLookup = {}; + for (let li=0; li < searchConstraintList.length; li++) { + const lookupConstraint = searchConstraintList[li]; constraintLookup[lookupConstraint.name] = lookupConstraint; } - var calculateConstraints = calculateClause.constraint; - for (var mi=0; mi < calculateConstraints.length; mi++) { - var calculateConstraint = calculateConstraints[mi]; - var searchConstraint = constraintLookup[calculateConstraint.name]; + const calculateConstraints = calculateClause.constraint; + for (let mi=0; mi < calculateConstraints.length; mi++) { + const calculateConstraint = calculateConstraints[mi]; + const searchConstraint = constraintLookup[calculateConstraint.name]; if (searchConstraint == null) { searchConstraintList.push(calculateConstraint); } else { - var constraintChildKeys = + const constraintChildKeys = Object.keys(calculateConstraint).filter(notNameFilter); - for (var ki=0; ki < constraintChildKeys.length; ki++) { - var constraintChildKey = constraintChildKeys[ki]; - var searchChild = searchConstraint[constraintChildKey]; - var searchType = (searchChild === null) ? + for (let ki=0; ki < constraintChildKeys.length; ki++) { + const constraintChildKey = constraintChildKeys[ki]; + const searchChild = searchConstraint[constraintChildKey]; + const searchType = (searchChild === null) ? 'undefined' : typeof searchChild; switch(searchType) { case 'boolean': @@ -5400,7 +5399,7 @@ function makeSearchBody(builtQuery) { } } - var searchFlags = searchOptions['search-option']; + let searchFlags = searchOptions['search-option']; if (searchFlags == null) { searchFlags = ['unfiltered']; searchOptions['search-option'] = searchFlags; @@ -5408,11 +5407,11 @@ function makeSearchBody(builtQuery) { searchFlags.push('unfiltered'); } - var orderByClause = builtQuery.orderByClause; + const orderByClause = builtQuery.orderByClause; if (orderByClause != null) { searchOptions['sort-order'] = orderByClause['sort-order']; - var scoreOption = orderByClause.scoreOption; + const scoreOption = orderByClause.scoreOption; if (scoreOption !== null && scoreOption !== void 0) { for (i=0; i < searchFlags.length; i++) { if (searchFlags[i].indexOf('score-') !== -1) { @@ -5425,25 +5424,25 @@ function makeSearchBody(builtQuery) { } } - var sliceClause = builtQuery.sliceClause; + const sliceClause = builtQuery.sliceClause; if (sliceClause != null) { - var sliceStart = sliceClause['page-start']; + const sliceStart = sliceClause['page-start']; if (sliceStart != null) { pageStart = sliceStart; } - var sliceLength = sliceClause['page-length']; + const sliceLength = sliceClause['page-length']; if (sliceLength != null) { pageLength = sliceLength; } - var transformResults = sliceClause['transform-results']; + const transformResults = sliceClause['transform-results']; if (transformResults != null) { searchOptions['transform-results'] = transformResults; searchOptions['return-results'] = true; view = 'results'; } - var extractResults = sliceClause['extract-document-data']; + const extractResults = sliceClause['extract-document-data']; if (extractResults != null) { searchOptions['extract-document-data'] = extractResults; } @@ -5453,27 +5452,27 @@ function makeSearchBody(builtQuery) { categories = (pageLength > 0) ? ['content'] : null; - var withOptionsClause = builtQuery.withOptionsClause; + const withOptionsClause = builtQuery.withOptionsClause; if (withOptionsClause != null) { // TODO: share with queryBuilder.js - var optionKeyMapping = { + const optionKeyMapping = { search:'search-option', weight:'quality-weight', forestNames:'forest', similarDocs:'return-similar', metrics:'return-metrics', queryPlan:'return-plan', debug:'debug', concurrencyLevel:'concurrency-level', categories:true, txid:true }; - var optionKeyInResponse = { + const optionKeyInResponse = { similarDocs:true, metrics:true, queryPlan:true, debug:true }; - var optionsKeys = Object.keys(withOptionsClause); + const optionsKeys = Object.keys(withOptionsClause); for (i=0; i < optionsKeys.length; i++) { - var key = optionsKeys[i]; - var mapping = optionKeyMapping[key]; + const key = optionsKeys[i]; + const mapping = optionKeyMapping[key]; if (mapping != null) { - var value = withOptionsClause[key]; + const value = withOptionsClause[key]; if (value != null) { if (mapping === true) { switch(key) { @@ -5510,15 +5509,15 @@ function makeSearchBody(builtQuery) { }; } function makeParsedQuery(searchBody, parsedQuery) { - var search = searchBody.search; + const search = searchBody.search; search.qtext = parsedQuery.qtext; - var constraintBindings = parsedQuery.constraint; - var hasConstraints = (constraintBindings != null); - var termBinding = parsedQuery.term; - var hasTerm = (termBinding != null); + const constraintBindings = parsedQuery.constraint; + const hasConstraints = (constraintBindings != null); + const termBinding = parsedQuery.term; + const hasTerm = (termBinding != null); if (hasConstraints || hasTerm) { - var searchOptions = search.options; + let searchOptions = search.options; if (searchOptions == null) { searchOptions = {}; search.options = searchOptions; diff --git a/lib/requester.js b/lib/requester.js index 8f922a2c3..63bd14798 100644 --- a/lib/requester.js +++ b/lib/requester.js @@ -1,20 +1,20 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var createAuthInitializer = require('./www-authenticate-patched/www-authenticate'); -var Kerberos = require('./optional.js') +const createAuthInitializer = require('./www-authenticate-patched/www-authenticate'); +const Kerberos = require('./optional.js') .libraryProperty('kerberos', 'Kerberos'); -var Multipart = require('multipart-stream'); -var through2 = require('through2'); -var mlutil = require('./mlutil.js'); -var responder = require('./responder.js'); -var kerberos = null; +const Multipart = require('multipart-stream'); +const through2 = require('through2'); +const mlutil = require('./mlutil.js'); +const responder = require('./responder.js'); +let kerberos = null; const https = require('https'); const formData = require('form-data'); function createAuthenticator(client, user, password, challenge) { - var authenticator = createAuthInitializer.call(null, user, password)(challenge); + const authenticator = createAuthInitializer.call(null, user, password)(challenge); if (!client.authenticator) { client.authenticator = {}; } @@ -23,8 +23,8 @@ function createAuthenticator(client, user, password, challenge) { } function createAuthenticatorKerberos(client, credentials) { - var authenticatorKerberos = { - "credentials": credentials + const authenticatorKerberos = { + 'credentials': credentials }; client.authenticatorKerberos = authenticatorKerberos; return authenticatorKerberos; @@ -64,7 +64,7 @@ function getAccessToken(operation){ } const responseValue = JSON.parse(d.toString()); operation.accessToken = responseValue.access_token; - operation.expiration = new Date(responseValue[".expires"]); + operation.expiration = new Date(responseValue['.expires']); if(operation.lockAccessToken){ operation.lockAccessToken = false; } @@ -81,11 +81,11 @@ function getAccessToken(operation){ } function startRequest(operation) { - var options = operation.options; - var operationErrorListener = responder.operationErrorListener; + const options = operation.options; + const operationErrorListener = responder.operationErrorListener; operation.errorListener = mlutil.callbackOn(operation, operationErrorListener); - var headers = options.headers; + let headers = options.headers; if (headers == null) { headers = {}; options.headers = headers; @@ -96,8 +96,8 @@ function startRequest(operation) { if(options.enableGzippedResponses) { headers['Accept-Encoding'] = 'gzip'; } - var started = null; - var operationResultPromise = null; + let started = null; + let operationResultPromise = null; switch(operation.requestType) { case 'empty': @@ -127,12 +127,12 @@ function startRequest(operation) { } const authType = options.authType.toUpperCase(); - var needsAuthenticator = ( + let needsAuthenticator = ( authType === 'DIGEST' || authType === 'KERBEROS' ); if (needsAuthenticator) { - var authenticator = null; + let authenticator = null; switch(authType) { case 'DIGEST': authenticator = getAuthenticator(operation.client, options.user); @@ -173,23 +173,23 @@ function startRequest(operation) { } if (started === null) { - var ResponseSelector = responder.ResponseSelector; + const ResponseSelector = responder.ResponseSelector; started = new ResponseSelector(operation); } return started; } function challengeRequest(operation) { - var isRead = (operation.inputSender === null); - var options = operation.options; - var challengeOpts = isRead ? options : { + const isRead = (operation.inputSender === null); + const options = operation.options; + const challengeOpts = isRead ? options : { method: 'HEAD', path: '/v1/ping' }; if (!isRead) { Object.keys(options).forEach(function optionKeyCopier(key) { if (challengeOpts[key] === void 0) { - var value = options[key]; + const value = options[key]; if (value != null) { challengeOpts[key] = value; } @@ -199,10 +199,10 @@ function challengeRequest(operation) { operation.logger.debug('challenge request for %s', challengeOpts.path); var request1 = operation.client.request(challengeOpts, function challengeResponder(response1) { - var statusCode1 = response1.statusCode; - var successStatus = (statusCode1 < 400); - var challenge = response1.headers['www-authenticate']; - var hasChallenge = (challenge != null); + const statusCode1 = response1.statusCode; + const successStatus = (statusCode1 < 400); + const challenge = response1.headers['www-authenticate']; + const hasChallenge = (challenge != null); operation.logger.debug('response with status %d and %s challenge for %s', statusCode1, hasChallenge, challengeOpts.path); @@ -218,7 +218,7 @@ function challengeRequest(operation) { authenticatedRequest(operation); // should never happen } else if (successStatus && isRead) { - var responseDispatcher = responder.responseDispatcher; + const responseDispatcher = responder.responseDispatcher; responseDispatcher.call(operation, response1); } else if (isRetry(response1)) { retryRequest(operation, response1, challengeRequest); @@ -232,13 +232,13 @@ function challengeRequest(operation) { } function credentialsRequest(operation) { kerberos = new Kerberos(); - var uri = "HTTP@"+operation.options.host; + const uri = 'HTTP@'+operation.options.host; kerberos.authGSSClientInit(uri, 0, function(err, ctx) { if (err) { operation.errorListener('kerberos initialization failed at '+uri); } operation.logger.debug('kerberos initialized at '+uri); - kerberos.authGSSClientStep(ctx, "", function (err) { + kerberos.authGSSClientStep(ctx, '', function (err) { if (err) { operation.errorListener('kerberos credentials failed'); } @@ -257,12 +257,12 @@ function credentialsRequest(operation) { }); } function authenticatedRequest(operation) { - var isRead = (operation.inputSender === null); - var options = operation.options; + const isRead = (operation.inputSender === null); + const options = operation.options; operation.logger.debug('authenticated request for %s', options.path); - var authenticator = operation.authenticator; - var responseDispatcher = operation.isReplayable ? retryDispatcher : responder.responseDispatcher; - var request = operation.client.request( + const authenticator = operation.authenticator; + const responseDispatcher = operation.isReplayable ? retryDispatcher : responder.responseDispatcher; + const request = operation.client.request( options, mlutil.callbackOn(operation, responseDispatcher) ); const authType = options.authType.toUpperCase(); @@ -279,7 +279,7 @@ function authenticatedRequest(operation) { operation.logger.debug('kerberos authentication'); request.setHeader( 'authorization', - "Negotiate "+authenticator.credentials + 'Negotiate '+authenticator.credentials ); break; default: @@ -301,14 +301,14 @@ function authenticatedRequest(operation) { } else { request.setHeader( 'authorization', - "bearer " +operation.accessToken + 'bearer ' +operation.accessToken ); } break; case 'OAUTH': request.setHeader( 'Authorization', - "Bearer " +options.oauthToken + 'Bearer ' +options.oauthToken ); } } @@ -364,9 +364,9 @@ function retryRequest(operation, response, requestSender) { function singleRequester(request) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var requestSource = mlutil.marshal(operation.requestBody, operation); + const requestSource = mlutil.marshal(operation.requestBody, operation); if (requestSource == null) { request.end(); } else if (typeof requestSource === 'string' || requestSource instanceof String) { @@ -382,13 +382,13 @@ function singleRequester(request) { } function multipartRequester(request) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var operationBoundary = operation.multipartBoundary; - var multipartStream = new Multipart((operationBoundary == null) ? + const operationBoundary = operation.multipartBoundary; + const multipartStream = new Multipart((operationBoundary == null) ? mlutil.multipartBoundary : operationBoundary); - var requestPartsProvider = operation.requestPartsProvider; + const requestPartsProvider = operation.requestPartsProvider; if(operation.bindingParam) { const form = new formData(); const bindingParam = operation.bindingParam; @@ -443,14 +443,14 @@ function multipartRequester(request) { } else if (typeof requestPartsProvider === 'function') { requestPartsProvider.call(operation, multipartStream); } else { - var parts = operation.requestPartList; + const parts = operation.requestPartList; if (Array.isArray(parts)) { - var partsLen = parts.length; + const partsLen = parts.length; operation.logger.debug('writing %s parts', partsLen); - for (var i=0; i < partsLen; i++) { - var part = parts[i]; - var headers = part.headers; - var content = part.content; + for (let i=0; i < partsLen; i++) { + const part = parts[i]; + const headers = part.headers; + const content = part.content; if ((headers != null) && (content != null)) { operation.logger.debug('starting part %s', i); @@ -471,9 +471,9 @@ function multipartRequester(request) { } function chunkedRequester(request) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var requestWriter = operation.requestWriter; + const requestWriter = operation.requestWriter; if (requestWriter === null || requestWriter === undefined) { operation.errorListener('no request writer for streaming request'); request.end(); @@ -483,10 +483,10 @@ function chunkedRequester(request) { } function chunkedMultipartRequester(request) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var requestWriter = operation.requestWriter; - var requestDocument = operation.requestDocument; + const requestWriter = operation.requestWriter; + const requestDocument = operation.requestDocument; if (requestWriter == null) { operation.errorListener('no request writer for streaming request'); request.end(); @@ -494,17 +494,17 @@ function chunkedMultipartRequester(request) { operation.errorListener('no request document for streaming request'); request.end(); } else { - var operationBoundary = operation.multipartBoundary; + const operationBoundary = operation.multipartBoundary; - var multipartStream = new Multipart((operationBoundary == null) ? + const multipartStream = new Multipart((operationBoundary == null) ? mlutil.multipartBoundary : operationBoundary); - var partLast = requestDocument.length - 1; - for (var i=0; i <= partLast; i++) { - var part = requestDocument[i]; - var headers = part.headers; + const partLast = requestDocument.length - 1; + for (let i=0; i <= partLast; i++) { + const part = requestDocument[i]; + const headers = part.headers; if (i < partLast) { - var content = part.content; + const content = part.content; if ((headers != null) && (content != null)) { multipartStream.addPart({ diff --git a/lib/resources-config.js b/lib/resources-config.js index a3e964d57..97762dcf5 100644 --- a/lib/resources-config.js +++ b/lib/resources-config.js @@ -1,17 +1,17 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** @ignore */ function nameErrorTransform(message) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var name = operation.name; + const name = operation.name; return (name == null) ? message : (message+' (on '+name+' resource service)'); } @@ -26,7 +26,7 @@ function nameErrorTransform(message) { /** @ignore */ function emptyOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; return { name: operation.name @@ -59,11 +59,11 @@ Resources.prototype.read = function readResourceConfig(name) { throw new Error('must specify name when reading the resource service source'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.path = '/v1/config/resources/'+encodeURIComponent(name); - var operation = new Operation( + const operation = new Operation( 'read resource service', this.client, requestOptions, 'empty', 'single' ); operation.name = name; @@ -82,21 +82,21 @@ Resources.prototype.read = function readResourceConfig(name) { * @param {object|string} source - the source for the resource service */ Resources.prototype.write = function writeResourceConfig() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { throw new Error('no arguments for writing an extension library'); } - var name = null; - var title = null; - var description = null; - var provider = null; - var version = null; - var format = null; - var source = null; + let name = null; + let title = null; + let description = null; + let provider = null; + let version = null; + let format = null; + let source = null; - var params = null; + let params = null; if (argLen === 1) { params = args[0]; name = params.name; @@ -117,7 +117,7 @@ Resources.prototype.write = function writeResourceConfig() { throw new Error('must specify name, format, and source when writing a resource service'); } - var contentType = null; + let contentType = null; switch(format) { case 'javascript': contentType = 'application/javascript'; @@ -129,9 +129,9 @@ Resources.prototype.write = function writeResourceConfig() { throw new Error('unsupported resource service format '+format); } - var endpoint = '/v1/config/resources/'+encodeURIComponent(name); + let endpoint = '/v1/config/resources/'+encodeURIComponent(name); - var sep = '?'; + let sep = '?'; if (title != null) { endpoint += sep+'title='+encodeURIComponent(title); if (sep === '?') {sep = '&';} @@ -149,14 +149,14 @@ Resources.prototype.write = function writeResourceConfig() { if (sep === '?') {sep = '&';} } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'PUT'; requestOptions.headers = { 'Content-Type': contentType }; requestOptions.path = endpoint; - var operation = new Operation( + const operation = new Operation( 'write resource service', this.client, requestOptions, 'single', 'empty' ); operation.name = name; @@ -178,11 +178,11 @@ Resources.prototype.remove = function removeResourceConfig(name) { throw new Error('must specify name when deleting the resource service source'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'DELETE'; requestOptions.path = '/v1/config/resources/'+encodeURIComponent(name); - var operation = new Operation( + const operation = new Operation( 'remove resource service', this.client, requestOptions, 'empty', 'empty' ); operation.name = name; @@ -201,14 +201,14 @@ Resources.prototype.remove = function removeResourceConfig(name) { * on the server */ Resources.prototype.list = function listResourceConfig() { - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.headers = { 'Accept': 'application/json' }; requestOptions.path = '/v1/config/resources'; - var operation = new Operation( + const operation = new Operation( 'list resource services', this.client, requestOptions, 'empty', 'single' ); diff --git a/lib/resources-exec.js b/lib/resources-exec.js index 72c327096..c3103da0d 100644 --- a/lib/resources-exec.js +++ b/lib/resources-exec.js @@ -1,10 +1,10 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** * Provides functions to execute resource services on the REST server @@ -20,7 +20,7 @@ function checkArgs() { throw new Error('no argument for executing resource service'); } - var args = arguments[0]; + const args = arguments[0]; if (args.name === void 0) { throw new Error('no name for executing resource service'); } @@ -29,18 +29,18 @@ function checkArgs() { } /** @ignore */ function makeRequestOptions(client, args) { - var path = '/v1/resources/'+args.name; - - var sep ='?'; - - var params = args.params; - var keys = (params === void 0) ? null : Object.keys(params); - var keyLen = (keys === null) ? 0 : keys.length; - var key = null; - var prefix = null; - var i=0; - var value = null; - var j=0; + let path = '/v1/resources/'+args.name; + + let sep ='?'; + + const params = args.params; + const keys = (params === void 0) ? null : Object.keys(params); + const keyLen = (keys === null) ? 0 : keys.length; + let key = null; + let prefix = null; + let i=0; + let value = null; + let j=0; for (; i < keyLen; i++) { key = keys?keys[i]:null; if(params){ @@ -63,7 +63,7 @@ function makeRequestOptions(client, args) { } } - var txid = mlutil.convertTransaction(args.txid); + const txid = mlutil.convertTransaction(args.txid); if (txid !== undefined && txid != null) { path += sep+'txid='+mlutil.getTxidParam(txid); if (sep === '?') { @@ -77,7 +77,7 @@ function makeRequestOptions(client, args) { return requestOptions; } function validateStatusCode(statusCode) { - return (statusCode < 400) ? null : "response with invalid "+statusCode+" status"; + return (statusCode < 400) ? null : 'response with invalid '+statusCode+' status'; } function Resources(client) { @@ -109,9 +109,9 @@ Resources.prototype.get = function getResourceExec() { ); }; Resources.prototype.getReadStream = function getResourceExecStream() { - var args = checkArgs.apply(null, arguments); + const args = checkArgs.apply(null, arguments); - var contentType = args.contentType; + const contentType = args.contentType; if (contentType == null) { throw new Error('no content type for reading stream from resource service'); } @@ -120,13 +120,13 @@ Resources.prototype.getReadStream = function getResourceExecStream() { }; /** @ignore */ function readResourceExec(self, responseType, contentType, args) { - var requestOptions = makeRequestOptions(self.client, args); + const requestOptions = makeRequestOptions(self.client, args); requestOptions.method = 'GET'; requestOptions.headers = { 'Accept': contentType }; - var operation = new Operation( + const operation = new Operation( 'execute remove service', self.client, requestOptions, 'empty', responseType ); operation.name = args.name; @@ -179,19 +179,19 @@ Resources.prototype.putWriteStream = function putResourceExecStream() { }; /** @ignore */ function writeResourceStream(self, method, responseType, args) { - var contentType = args.contentType; + const contentType = args.contentType; if (contentType == null) { throw new Error('no content type for writing stream to resource service'); } - var requestOptions = makeRequestOptions(self.client, args); + const requestOptions = makeRequestOptions(self.client, args); requestOptions.headers = { 'Content-Type': contentType, 'Accept': 'application/json' }; requestOptions.method = method; - var operation = new Operation( + const operation = new Operation( 'execute '+method+' service stream', self.client, requestOptions, 'chunked', responseType ); @@ -203,16 +203,16 @@ function writeResourceStream(self, method, responseType, args) { } /** @ignore */ function writeResources(self, method, responseType, args) { - var documents = args.documents; + let documents = args.documents; - var isEmpty = (documents == null); + const isEmpty = (documents == null); if (!isEmpty && !Array.isArray(documents)) { documents = [documents]; } - var multipartBoundary = mlutil.multipartBoundary; + const multipartBoundary = mlutil.multipartBoundary; - var requestOptions = makeRequestOptions(self.client, args); + const requestOptions = makeRequestOptions(self.client, args); requestOptions.method = method; requestOptions.headers = (!isEmpty) ? { @@ -223,7 +223,7 @@ function writeResources(self, method, responseType, args) { 'Accept': 'application/json' }; - var operation = new Operation( + const operation = new Operation( 'execute '+method+' service', self.client, requestOptions, (isEmpty ? 'empty' : 'multipart'), responseType ); @@ -234,7 +234,7 @@ function writeResources(self, method, responseType, args) { operation.requestPartList = []; if (typeof documents !== 'undefined' && documents !== null) { - for (var i=0; i < documents.length; i++) { + for (let i=0; i < documents.length; i++) { addPart(operation, documents[i]); } } @@ -245,17 +245,17 @@ function writeResources(self, method, responseType, args) { } /** @ignore */ function addPart(operation, document) { - var headers = {}; - var part = { + const headers = {}; + const part = { headers: headers }; - var content = document.content; - var hasContent = (content != null); - var contentType = hasContent ? document.contentType : null; + const content = document.content; + const hasContent = (content != null); + const contentType = hasContent ? document.contentType : null; if (hasContent && (contentType != null)) { - var marshaledData = mlutil.marshal(content, operation); + const marshaledData = mlutil.marshal(content, operation); /* TODO: allow encoding in multipart parse headers['Content-Type'] = contentType + ((typeof marshaledData === 'string' || marshaledData instanceof String) ? '; charset=utf-8' : ''); @@ -291,15 +291,15 @@ function addPart(operation, document) { * multi-statement transaction */ Resources.prototype.remove = function removeResourceExec() { - var args = checkArgs.apply(null, arguments); + const args = checkArgs.apply(null, arguments); - var requestOptions = makeRequestOptions(this.client, args); + const requestOptions = makeRequestOptions(this.client, args); requestOptions.headers = { 'Accept': 'application/json' }; requestOptions.method = 'DELETE'; - var operation = new Operation( + const operation = new Operation( 'execute remove service', this.client, requestOptions, 'empty', 'single' ); operation.name = args.name; diff --git a/lib/responder.js b/lib/responder.js index 1adc0ccee..412ca64da 100644 --- a/lib/responder.js +++ b/lib/responder.js @@ -1,13 +1,13 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var concatStream = require('concat-stream'); -var jsonParser = require('json-text-sequence').parser; -var Dicer = require('@fastify/busboy/deps/dicer/lib/Dicer'); -var through2 = require('through2'); -var mlutil = require('./mlutil.js'); -const requester = require("./requester"); +const concatStream = require('concat-stream'); +const jsonParser = require('json-text-sequence').Parser; +const Dicer = require('@fastify/busboy/deps/dicer/lib/Dicer'); +const through2 = require('through2'); +const mlutil = require('./mlutil.js'); +const requester = require('./requester'); const {createGunzip} = require('zlib'); /** @@ -31,20 +31,20 @@ const {createGunzip} = require('zlib'); */ function responseDispatcher(response) { /*jshint validthis:true */ - var operation = this; + const operation = this; if (!isResponseStatusOkay.call(operation, response)) { return; } - var outputMode = operation.outputMode; + const outputMode = operation.outputMode; if (outputMode === 'none') { return; } - var responseType = response.headers['content-type']; - var responseTypeLen = (!responseType) ? 0 : responseType.length; - var responseBoundary = null; + const responseType = response.headers['content-type']; + const responseTypeLen = (!responseType) ? 0 : responseType.length; + let responseBoundary = null; if (15 <= responseTypeLen && responseType.substr(0, 15) === 'multipart/mixed') { responseBoundary = responseType.replace( /^multipart.mixed\s*;\s*boundary\s*=\s*([^\s;]+)([\s;].*)?$/, '$1' @@ -60,16 +60,16 @@ function responseDispatcher(response) { ); } } - var isMultipart = (responseBoundary != null); + const isMultipart = (responseBoundary != null); // inputHeader may be boundary (for multipart) or content type (for body) // Allows dispatch function signatures to remain consistent - var inputHeader = isMultipart ? responseBoundary : responseType; + const inputHeader = isMultipart ? responseBoundary : responseType; - var responseLength = response.headers['content-length']; - var isEmpty = ((responseLength != null) && responseLength === '0'); + const responseLength = response.headers['content-length']; + const isEmpty = ((responseLength != null) && responseLength === '0'); - var expectedType = operation.responseType; + const expectedType = operation.responseType; // point-in-time operations: if timestamp unset, set with header value if (operation.timestamp !== undefined && operation.timestamp !== null) { @@ -79,7 +79,7 @@ function responseDispatcher(response) { } } - var dispatcher = null; + let dispatcher = null; if (isMultipart) { if (expectedType !== 'multipart') { operation.logger.debug('expected body but received multipart'); @@ -149,15 +149,15 @@ function CSVDispatcher(operation) { CSVDispatcher.prototype.promise = function dispatchCSVPromise( contentType, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('csv promise'); - var collectObject = function collectPromiseBodyObject(data) { + const collectObject = function collectPromiseBodyObject(data) { operation.data = data; resolvedPromise(operation, operation.resolve); }; - var isString = operation.copyResponseHeaders(response); + const isString = operation.copyResponseHeaders(response); if(isResponseGzipped(response.headers)) { response.pipe(createGunzip()).pipe(concatStream( {encoding: (isString ? 'string' : 'buffer')}, @@ -173,7 +173,7 @@ CSVDispatcher.prototype.promise = function dispatchCSVPromise( CSVDispatcher.prototype.chunkedStream = function dispatchCSVChunkedStream( contentType, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('csv chunked stream'); @@ -196,20 +196,20 @@ function JSONSeqDispatcher(operation) { JSONSeqDispatcher.prototype.promise = function dispatchJSONSeqPromise( contentType, response ) { - var operation = this.operation; - var errorListener = operation.errorListener; - var objectQueue = new FifoQueue(2); - var parsedObjects = 0; + const operation = this.operation; + const errorListener = operation.errorListener; + let objectQueue = new FifoQueue(2); + let parsedObjects = 0; operation.logger.debug('json sequence promise'); - var dataListener = function JSONSeqDataListener(object) { + let dataListener = function JSONSeqDataListener(object) { parsedObjects++; operation.logger.debug('json-seq parsing object %d', parsedObjects); objectQueue.addLast(object); }; - var finishListener = function JSONSeqFinishListener() { + let finishListener = function JSONSeqFinishListener() { operation.logger.debug('json-seq finished parsing %d objects', parsedObjects); operation.data = objectQueue.getQueue(); resolvedPromise(operation, operation.resolve); @@ -248,21 +248,21 @@ JSONSeqDispatcher.prototype.objectStream = function dispatchJSONSeqObjectStream( JSONSeqDispatcher.prototype.stream = function dispatchJSONSeqStream( streamMode, response ) { - var operation = this.operation; - var errorListener = operation.errorListener; - var outputStream = operation.outputStream; - var parsedObjects = 0; - var hasParsed = false; - var hasEnded = false; + const operation = this.operation; + const errorListener = operation.errorListener; + const outputStream = operation.outputStream; + let parsedObjects = 0; + let hasParsed = false; + let hasEnded = false; operation.logger.debug('json sequence stream ' + streamMode); - var dataListener = function JSONSeqDataListener(object) { + let dataListener = function JSONSeqDataListener(object) { parsedObjects++; operation.logger.debug('parsing object %d', parsedObjects); operation.logger.debug(object); - var writeResult = null; + let writeResult = null; if (object !== null && object !== undefined) { if (streamMode === 'object') { writeResult = outputStream.write(object); @@ -284,7 +284,7 @@ JSONSeqDispatcher.prototype.stream = function dispatchJSONSeqStream( }; - var responseFinisher = function JSONSeqFinishListener() { + let responseFinisher = function JSONSeqFinishListener() { if (hasParsed && hasEnded) { operation.logger.debug('finished parsing %d objects', parsedObjects); @@ -343,7 +343,7 @@ function BodyDispatcher(operation) { this.operation = operation; } BodyDispatcher.prototype.emptyPromise = function dispatchBodyEmptyPromise(response) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('empty body promise'); @@ -351,13 +351,13 @@ BodyDispatcher.prototype.emptyPromise = function dispatchBodyEmptyPromise(respon resolvedPromise(operation, operation.resolve); }; BodyDispatcher.prototype.emptyStream = function dispatchBodyEmptyStream(response) { - var operation = this.operation; + const operation = this.operation; - var data = operation.emptyHeaderData(response); + const data = operation.emptyHeaderData(response); operation.logger.debug('empty body stream'); - var outputStream = operation.outputStream; + const outputStream = operation.outputStream; if (data != null) { if (operation.outputStreamMode === 'chunked') { outputStream.write(JSON.stringify(data)); @@ -370,17 +370,17 @@ BodyDispatcher.prototype.emptyStream = function dispatchBodyEmptyStream(response BodyDispatcher.prototype.promise = function dispatchBodyPromise( contentType, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('body promise'); - var collectObject = function collectPromiseBodyObject(data) { + const collectObject = function collectPromiseBodyObject(data) { // turn collected data into something usable // e.g., if JSON, parse as JS object operation.data = operation.collectBodyObject(data); resolvedPromise(operation, operation.resolve); }; - var isString = operation.copyResponseHeaders(response); + const isString = operation.copyResponseHeaders(response); if(isResponseGzipped(response.headers)) { const gunzip = createGunzip(); @@ -400,7 +400,7 @@ BodyDispatcher.prototype.promise = function dispatchBodyPromise( BodyDispatcher.prototype.chunkedStream = function dispatchBodyChunkedStream( contentType, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('body chunked stream'); @@ -416,23 +416,23 @@ BodyDispatcher.prototype.chunkedStream = function dispatchBodyChunkedStream( BodyDispatcher.prototype.objectStream = function dispatchBodyObjectStream( contentType, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('body object stream'); // outputStream is a through2 stream in object mode - var outputStream = operation.outputStream; + const outputStream = operation.outputStream; - var collectObject = function collectStreamBodyObject(data) { + const collectObject = function collectStreamBodyObject(data) { // similar to promise body case, but write to through2 - var writableObject = operation.collectBodyObject(data); + const writableObject = operation.collectBodyObject(data); if (writableObject != null) { outputStream.write(writableObject); } outputStream.end(); }; - var isString = operation.copyResponseHeaders(response); + const isString = operation.copyResponseHeaders(response); if(isResponseGzipped(response.headers)) { response.pipe(createGunzip()).pipe(concatStream( {encoding: (isString ? 'string' : 'buffer')}, @@ -458,9 +458,9 @@ function MultipartDispatcher(operation) { this.operation = operation; } MultipartDispatcher.prototype.emptyPromise = function dispatchMultipartEmptyPromise(response) { - var operation = this.operation; + const operation = this.operation; - var data = operation.emptyHeaderData(response); + const data = operation.emptyHeaderData(response); operation.logger.debug('empty multipart promise'); @@ -468,13 +468,13 @@ MultipartDispatcher.prototype.emptyPromise = function dispatchMultipartEmptyProm resolvedPromise(operation, operation.resolve); }; MultipartDispatcher.prototype.emptyStream = function dispatchMultipartEmptyStream(response) { - var operation = this.operation; + const operation = this.operation; - var data = operation.emptyHeaderData(response); + const data = operation.emptyHeaderData(response); operation.logger.debug('empty multipart stream'); - var outputStream = operation.outputStream; + const outputStream = operation.outputStream; if (data != null) { if (operation.outputStreamMode === 'chunked') { outputStream.write(JSON.stringify(data)); @@ -492,14 +492,14 @@ MultipartDispatcher.prototype.emptyStream = function dispatchMultipartEmptyStrea MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( boundary, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('multipart promise'); - const errorListenerCheck = (operation.options.headers['Accept'] === 'application/json' && (operation.name.includes('rows') || operation.name.includes('query') || operation.name.includes('/v1/rows'))); + const errorListenerCheck = (operation.options.headers.Accept === 'application/json' && (operation.name.includes('rows') || operation.name.includes('query') || operation.name.includes('/v1/rows'))); if(errorListenerCheck) { if(response.headers['content-encoding']!=='gzip'){ - response.setEncoding("utf8"); + response.setEncoding('utf8'); } const multipartResponse = (isResponseGzipped(response.headers))?response.pipe(createGunzip()):response; @@ -512,7 +512,7 @@ MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( response.pipe(concatStream( {encoding: 'json'}, () => { - let data = JSON.parse(chunks); + const data = JSON.parse(chunks); operation.data = data; resolvedPromise(operation, operation.resolve); } @@ -521,22 +521,22 @@ MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( return; } - var errorListener = operation.errorListener; + const errorListener = operation.errorListener; - var rawHeaderQueue = new FifoQueue(2); - var objectQueue = new FifoQueue(2); - var partReaderQueue = new FifoQueue(3); + let rawHeaderQueue = new FifoQueue(2); + let objectQueue = new FifoQueue(2); + let partReaderQueue = new FifoQueue(3); - var parsingParts = 0; - var parsedParts = 0; + let parsingParts = 0; + let parsedParts = 0; - var hasParsed = false; - var hasEnded = false; + let hasParsed = false; + let hasEnded = false; - var responseFinisher = function promiseResponseFinisher() { + let responseFinisher = function promiseResponseFinisher() { // If there is metadata left in the buffer, add it to queue if (operation.nextMetadataBuffer !== null) { - var metadataHeaders = operation.nextMetadataBuffer[0]; + const metadataHeaders = operation.nextMetadataBuffer[0]; mlutil.copyProperties(operation.nextMetadataBuffer[1], metadataHeaders); objectQueue.addLast(metadataHeaders); } @@ -563,7 +563,7 @@ MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( partReaderQueue.removeFirst(); - var madeObject = operation.makeObject( + const madeObject = operation.makeObject( (data.length === 0) ? null : data, rawHeaderQueue ); @@ -572,10 +572,10 @@ MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( } if (partReaderQueue.hasItem()) { - var partConcatenator = concatStream(partFinisher); + const partConcatenator = concatStream(partFinisher); partConcatenator.on('error', errorListener); - var partReadStream = partReaderQueue.getFirst(); + const partReadStream = partReaderQueue.getFirst(); partReadStream.pipe(partConcatenator); } else if (hasParsed) { responseFinisher(); @@ -597,7 +597,7 @@ MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( partReaderQueue.addLast(partReadStream); if (partReaderQueue.isLast()) { - var partConcatenator = concatStream(partFinisher); + const partConcatenator = concatStream(partFinisher); partConcatenator.on('error', errorListener); partReadStream.pipe(partConcatenator); } @@ -629,19 +629,19 @@ MultipartDispatcher.prototype.promise = function dispatchMultipartPromise( MultipartDispatcher.prototype.chunkedStream = function dispatchMultipartChunkedStream( boundary, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('multipart chunked stream'); - var errorListener = operation.errorListener; + const errorListener = operation.errorListener; - var outputStream = operation.outputStream; + let outputStream = operation.outputStream; - var partReaderQueue = new FifoQueue(3); + const partReaderQueue = new FifoQueue(3); - var hasParsed = false; - var hasEnded = false; + let hasParsed = false; + let hasEnded = false; - var responseFinisher = function chunkedResponseFinisher() { + let responseFinisher = function chunkedResponseFinisher() { outputStream.end(); outputStream = null; partEndListener = null; @@ -656,7 +656,7 @@ MultipartDispatcher.prototype.chunkedStream = function dispatchMultipartChunkedS partReaderQueue.removeFirst(); if (partReaderQueue.hasItem()) { - var partReadStream = partReaderQueue.getFirst(); + const partReadStream = partReaderQueue.getFirst(); partReadStream.pipe(outputStream, {end: false}); } else if (hasParsed) { responseFinisher(); @@ -699,26 +699,26 @@ MultipartDispatcher.prototype.chunkedStream = function dispatchMultipartChunkedS MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStream( boundary, response ) { - var operation = this.operation; + const operation = this.operation; operation.logger.debug('multipart object stream'); - var errorListener = operation.errorListener; + const errorListener = operation.errorListener; - var rawHeaderQueue = new FifoQueue(5); - var partReaderQueue = new FifoQueue(3); + let rawHeaderQueue = new FifoQueue(5); + const partReaderQueue = new FifoQueue(3); // For referenced attachments case - var partBuffer = null; + let partBuffer = null; - var parsingParts = 0; - var parsedParts = 0; + let parsingParts = 0; + let parsedParts = 0; - var hasParsed = false; - var hasEnded = false; + let hasParsed = false; + let hasEnded = false; - var isConcatenating = false; + let isConcatenating = false; - var responseFinisher = function objectResponseFinisher() { + const responseFinisher = function objectResponseFinisher() { if (!partReaderQueue.hasItem() && hasParsed && hasEnded) { @@ -734,7 +734,7 @@ MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStr else { // If there is metadata left in the buffer, write it if (operation.nextMetadataBuffer !== null) { - var metadataHeaders = operation.nextMetadataBuffer[0]; + const metadataHeaders = operation.nextMetadataBuffer[0]; mlutil.copyProperties(operation.nextMetadataBuffer[1], metadataHeaders); operation.outputStream.write(metadataHeaders); operation.nextMetadataBuffer = null; @@ -753,16 +753,16 @@ MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStr }; - var partFinisher = function objectPartFinisher(data) { + const partFinisher = function objectPartFinisher(data) { parsedParts++; operation.logger.debug('parsed part %d', parsedParts); - var madeObject = operation.makeObject( + const madeObject = operation.makeObject( (data.length === 0) ? null : data, rawHeaderQueue ); // Handle multipart with reference attachments (rows) - var writeResult = null; + let writeResult = null; if (operation.complexValues === 'reference') { if (madeObject !== null && madeObject !== undefined) { // Columns object @@ -784,7 +784,7 @@ MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStr // Attachment object else { // Remove '[n]' to get column name - var columnName = madeObject.contentId + const columnName = madeObject.contentId .slice(0, madeObject.contentId.lastIndexOf('[')); // Put attachment into currently cached part partBuffer.content[columnName] = { @@ -819,9 +819,9 @@ MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStr // If item avail, concat-stream it with callback to finisher if (partReaderQueue.hasItem()) { isConcatenating = true; - var partRead = concatStream(partFinisher); + const partRead = concatStream(partFinisher); partRead.on('error', errorListener); - var partReadStream = partReaderQueue.getFirst(); + const partReadStream = partReaderQueue.getFirst(); partReadStream.pipe(partRead); } else if (hasParsed) { @@ -845,7 +845,7 @@ MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStr if (partReaderQueue.isLast()) { isConcatenating = true; - var partRead = concatStream(partFinisher); + const partRead = concatStream(partFinisher); partRead.on('error', errorListener); partReadStream.pipe(partRead); } @@ -861,15 +861,15 @@ MultipartDispatcher.prototype.objectStream = function dispatchMultipartObjectStr responseFinisher(); }; - var drainListener = function objectDrainListener() { + const drainListener = function objectDrainListener() { if (!hasEnded) { response.resume(); // Don't read if concat in progress to avoid double processing if (partReaderQueue.hasItem() && !isConcatenating) { isConcatenating = true; - var partRead = concatStream(partFinisher); + const partRead = concatStream(partFinisher); partRead.on('error', errorListener); - var partReadStream = partReaderQueue.getFirst(); + const partReadStream = partReaderQueue.getFirst(); partReadStream.pipe(partRead); } } @@ -951,7 +951,7 @@ FifoQueue.prototype.removeFirst = function fifoRemoveFirst() { } }; FifoQueue.prototype.pollFirst = function fifoPollFirst() { - var item = this.getFirst(); + const item = this.getFirst(); if (item !== undefined) { this.removeFirst(); } @@ -997,20 +997,20 @@ FifoQueue.prototype.compact = function fifoCompact() { function isResponseStatusOkay(response) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var statusCode = response.statusCode; + const statusCode = response.statusCode; - var errMsg = null; + let errMsg = null; - var statusCodeValidator = operation.statusCodeValidator; + const statusCodeValidator = operation.statusCodeValidator; if (typeof statusCodeValidator === 'function') { errMsg = statusCodeValidator.call(operation, statusCode, response); } else { - var validStatusCodes = operation.validStatusCodes; + const validStatusCodes = operation.validStatusCodes; if (Array.isArray(validStatusCodes)) { - var isError = true; - for (var i=0; i < validStatusCodes.length; i++) { + let isError = true; + for (let i=0; i < validStatusCodes.length; i++) { if (validStatusCodes[i] === statusCode) { isError = false; break; @@ -1025,20 +1025,23 @@ function isResponseStatusOkay(response) { } if (errMsg != null) { - var clientError = operation.makeError(errMsg); + const clientError = operation.makeError(errMsg); clientError.statusCode = statusCode; if (statusCode >= 400) { - let errorResponse = (isResponseGzipped(response.headers))?response.pipe(createGunzip()):response; + const errorResponse = (isResponseGzipped(response.headers))?response.pipe(createGunzip()):response; errorResponse.pipe(concatStream( {encoding: 'string'}, function errorBodyDispatcher(body) { if (body.length > 0) { - var bodyMsg = (typeof body === 'string' || body instanceof String) ? body : body.toString(); - var contentType = response.headers['content-type']; + const bodyMsg = (typeof body === 'string' || body instanceof String) ? body : body.toString(); + const contentType = response.headers['content-type']; clientError.body = ((typeof contentType === 'string' || contentType instanceof String) && /^application\/([^+]+\+)?json(\s*;.*)?$/.test(contentType)) ? mlutil.parseJSON(bodyMsg) : bodyMsg; + + // Enhance error message with response body details for better debugging + clientError.message = `${clientError.message}; server response: ${bodyMsg}`; } operation.errorListener(clientError); })); @@ -1062,7 +1065,7 @@ function ResponseSelector(operation) { } function operationResultPromise(fullfilled, rejected) { /*jshint validthis:true */ - var operation = this; + const operation = this; switch (operation.outputMode) { case 'none': @@ -1077,7 +1080,7 @@ function operationResultPromise(fullfilled, rejected) { } operation.outputMode = 'promise'; - var promise = new Promise(function promiseDispatcher(resolve, reject) { + const promise = new Promise(function promiseDispatcher(resolve, reject) { if (operation.done !== true) { if (resolve) { operation.resolve = resolve; @@ -1106,9 +1109,9 @@ function resolvedPromise(operation, resolve) { return; } - var data = operation.data; - var hasData = (data != null); - var dataLen = hasData ? data.length : null; + const data = operation.data; + const hasData = (data != null); + const dataLen = hasData ? data.length : null; if(hasData && dataLen) { for(let i=0; i 1) { firstError.otherErrors = errorArray.slice(1); } @@ -1160,7 +1163,7 @@ function rejectedPromise(operation, reject) { } function operationResultStream() { /*jshint validthis:true */ - var operation = this; + const operation = this; switch (operation.outputMode) { case 'none': @@ -1174,8 +1177,8 @@ function operationResultStream() { throw new Error('already created stream'); } - var streamArg = (arguments.length > 0) ? arguments[0] : null; - var streamMode = null; + const streamArg = (arguments.length > 0) ? arguments[0] : null; + let streamMode = null; if (streamArg === null) { streamMode = operation.streamDefaultMode; operation.outputStreamMode = streamMode; @@ -1191,7 +1194,7 @@ function operationResultStream() { } operation.outputMode = streamMode+'Stream'; - var outputStream = null; + let outputStream = null; switch(streamMode) { case 'chunked': outputStream = through2(); @@ -1207,9 +1210,9 @@ function operationResultStream() { } operation.outputStream = outputStream; - var error = operation.error; + const error = operation.error; if (error != null) { - var i = 0; + let i = 0; for (; i < error.length; i++) { outputStream.emit('error', error[i]); } @@ -1220,7 +1223,7 @@ function operationResultStream() { } function operationErrorListener(error) { /*jshint validthis:true */ - var operation = this; + const operation = this; if(operation.client.connectionParams.apiKey){ if(error.statusCode === 401 && operation.expiration <= (new Date())){ if(!operation.lockAccessToken){ @@ -1242,7 +1245,7 @@ function operationErrorListener(error) { operation.done = true; - var outputStream = operation.outputStream; + const outputStream = operation.outputStream; if (outputStream != null) { outputStream.end(); diff --git a/lib/rest-server-properties.js b/lib/rest-server-properties.js index 3a8ec5c7a..ee6c0f437 100644 --- a/lib/rest-server-properties.js +++ b/lib/rest-server-properties.js @@ -1,10 +1,10 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** * Provides functions to modify the properties of the REST server for @@ -28,14 +28,14 @@ function RESTServerProperties(client) { * @returns {object} the properties */ RESTServerProperties.prototype.read = function readRESTServerProperties() { - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.headers = { 'Accept': 'application/json' }; requestOptions.path = '/v1/config/properties'; - var operation = new Operation( + const operation = new Operation( 'read REST server properties', this.client, requestOptions, 'empty', 'single' ); @@ -45,9 +45,9 @@ RESTServerProperties.prototype.read = function readRESTServerProperties() { /** @ignore */ function RESTServerPropertiesOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var statusCode = operation.responseStatusCode; + const statusCode = operation.responseStatusCode; return (statusCode === 204 || statusCode === 200); } @@ -62,14 +62,14 @@ RESTServerProperties.prototype.write = function writeRESTServerProperties(proper throw new Error('cannot write with missing properties object'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'PUT'; requestOptions.headers = { 'Content-Type': 'application/json' }; requestOptions.path = '/v1/config/properties'; - var operation = new Operation( + const operation = new Operation( 'write REST server properties', this.client, requestOptions, 'single', 'empty' ); operation.outputTransform = RESTServerPropertiesOutputTransform; diff --git a/lib/rows.js b/lib/rows.js index 6d620a5fa..f24b72b21 100644 --- a/lib/rows.js +++ b/lib/rows.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -9,7 +9,7 @@ const requester = require('./requester.js'), Operation = require('./operation.js'), planBuilder = require('./plan-builder.js'); const stream = require('stream'); -const bigInt = require("big-integer"); +const bigInt = require('big-integer'); /** @ignore */ function Rows(client) { @@ -64,13 +64,13 @@ function Rows(client) { * @returns {Promise} A Promise. */ Rows.prototype.query = function queryRows() { - let args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('built plan required'); } - let builtPlan = args[0], + const builtPlan = args[0], options = (args.length >= 2) ? args[1] : null; return queryRowsImpl(this, builtPlan, null, options, args[2]); @@ -87,12 +87,13 @@ function queryRowsImpl(self, builtPlan, streamType, options, bindingArg, graphql } function queryRowsOperationImpl(self, builtPlan, streamType, options, bindingArg, graphqlQuery) { + const validFormats = ['json','xml','csv'], + validStructures = ['object','array'], + validColumnTypes = ['rows','header'], + validComplexValues = ['inline','reference'], + validStreamTypes = ['chunked','object','sequence']; + let sep = '?', - validFormats = ['json','xml','csv'], - validStructures = ['object','array'], - validColumnTypes = ['rows','header'], - validComplexValues = ['inline','reference'], - validStreamTypes = ['chunked','object','sequence'], // set defaults format = 'json', structure = 'object', @@ -237,7 +238,7 @@ function queryRowsOperationImpl(self, builtPlan, streamType, options, bindingArg } } - let requestOptions = mlutil.newRequestOptions(connectionParams, endpoint, 'POST'); + const requestOptions = mlutil.newRequestOptions(connectionParams, endpoint, 'POST'); requestOptions.headers = { 'Content-Type': contentTypeHeader, 'Accept': acceptHeader @@ -291,7 +292,7 @@ function queryContentType(builtPlan, queryType) { const validQueryTypes = ['json', 'sparql', 'sql', 'dsl']; if (validQueryTypes.indexOf(queryType) < 0) { throw new Error('invalid queryType "' + queryType + '"'); - } else if (queryType != 'json' && typeof builtPlan != 'string' && !(builtPlan instanceof String)) { + } else if (queryType != 'json' && typeof builtPlan !== 'string' && !(builtPlan instanceof String)) { throw new Error('queryType "' + queryType + '" must be provided as string'); } @@ -318,15 +319,15 @@ function queryContentType(builtPlan, queryType) { * @returns {ReadableStream} A readable stream. */ Rows.prototype.queryAsStream = function queryAsStreamRows() { - let args = mlutil.asArray.apply(null, arguments), - streamType = 'chunked', // default + const args = mlutil.asArray.apply(null, arguments); + let streamType = 'chunked', // default options = null; if (args.length < 1) { throw new Error('built plan required'); } - let builtPlan = args[0]; + const builtPlan = args[0]; if (args.length === 2) { if (typeof args[1] === 'string' || args[1] instanceof String) { @@ -414,7 +415,7 @@ Rows.prototype.generateView = function generateViewRows(builtPlan, schema, view, throw new Error('view cannot be null or empty'); } - let acceptHeader = 'application/xml'; + const acceptHeader = 'application/xml'; const contentTypeHeader = queryContentType(builtPlan, queryType); const endpoint = '/v1/rows?output=generateView&schemaName='+schema+'&viewName='+view; @@ -475,7 +476,7 @@ Rows.prototype.generateView = function generateViewRows(builtPlan, schema, view, */ Rows.prototype.queryAll = function queryAllDocumentsImpl(batchView, jobOptions){ - let path = '/v1/internal/viewinfo'; + const path = '/v1/internal/viewinfo'; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'POST'); requestOptions.headers = { @@ -483,7 +484,7 @@ Rows.prototype.generateView = function generateViewRows(builtPlan, schema, view, 'Content-Type': 'application/json' }; - let operation = new Operation( + const operation = new Operation( 'read viewInfo', this.client, requestOptions, 'single', 'single' ); if (batchView instanceof planBuilder.Plan) { @@ -492,7 +493,7 @@ Rows.prototype.generateView = function generateViewRows(builtPlan, schema, view, operation.requestBody = batchView; } - let jobState = { + const jobState = { docInstance : this, requesterCount: 0, rowsReadSuccessfully:0, @@ -623,26 +624,26 @@ Rows.prototype.generateView = function generateViewRows(builtPlan, schema, view, */ Rows.prototype.execute = function executeRows() { - let args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('built plan required'); } - let builtPlan = args[0], options = (args.length >= 2 && args[1])?args[1] : {}; + const builtPlan = args[0], options = (args.length >= 2 && args[1])?args[1] : {}; // opticExecute is an internal flag to ensure output doesn't default to anything. options.opticExecute = true; queryRowsImpl(this, builtPlan, null, options, args[2]); }; Rows.prototype.graphQL = function graphqlRows() { - let args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); if (args.length < 1) { throw new Error('graphql query required'); } - let options = (args.length >= 2) ? args[1] : null; + const options = (args.length >= 2) ? args[1] : null; return queryRowsImpl(this, null, null, options,null, args[0]); }; @@ -702,10 +703,10 @@ function onQueryAllRows(jobState, readerId, batchNum) { finishOnQueryAllRows(jobState); return; } - let lowerBound = bigInt((currentBatchNum - 1) * jobState.requestBatchSize); - let upperBound = (currentBatchNum === jobState.numberOfBatches) ? '-1' : + const lowerBound = bigInt((currentBatchNum - 1) * jobState.requestBatchSize); + const upperBound = (currentBatchNum === jobState.numberOfBatches) ? '-1' : bigInt(lowerBound + jobState.requestBatchSize -1); - let options = { + const options = { bindings: {ML_LOWER_BOUND:lowerBound, ML_UPPER_BOUND:upperBound}, format: jobState.jobOptions.rowFormat, structure: jobState.jobOptions.rowStructure, diff --git a/lib/server-exec.js b/lib/server-exec.js index a0302ebc4..cc934500a 100644 --- a/lib/server-exec.js +++ b/lib/server-exec.js @@ -1,11 +1,11 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var qs = require('qs'); -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const qs = require('qs'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); function execOutputTransform(headers, data) { /*jshint validthis:true */ @@ -13,7 +13,7 @@ function execOutputTransform(headers, data) { return []; } - var contentType = headers['content-type'][0]; + let contentType = headers['content-type'][0]; if (typeof contentType === 'string' || contentType instanceof String) { contentType = contentType.replace(/;.*$/, ''); } @@ -39,8 +39,8 @@ function execOutputTransform(headers, data) { }; } - var primitive = headers['x-primitive'][0]; - var value = null; + const primitive = headers['x-primitive'][0]; + let value = null; switch(primitive) { case 'node()': return { @@ -102,7 +102,7 @@ function execOutputTransform(headers, data) { case 'unsignedLong': value = data.content; if (isFinite(value)) { - var number = Number(value); + const number = Number(value); if (Math.abs(number) < 9007199254740992) { value = number; } @@ -224,10 +224,10 @@ function serverInvoke() { /** @ignore */ function serverExec(execName, args) { /*jshint validthis:true */ - var client = this; + const client = this; - var operationDesc = null; - var execType = null; + let operationDesc = null; + let execType = null; if (execName === 'invoke') { operationDesc = 'invoke code on server'; execType = execName; @@ -240,13 +240,13 @@ function serverExec(execName, args) { throw new Error('must specify the source to '+operationDesc); } - var isInvoke = (execType === 'invoke'); + const isInvoke = (execType === 'invoke'); - var arg = args[0]; + const arg = args[0]; - var source = isInvoke ? arg.path : arg.source; - var variables = null; - var txid = null; + let source = isInvoke ? arg.path : arg.source; + let variables = null; + let txid = null; if (source !== void 0) { variables = arg.variables; txid = mlutil.convertTransaction(arg.txid); @@ -257,7 +257,7 @@ function serverExec(execName, args) { } } - var body = {}; + const body = {}; if (isInvoke) { body.module = source; } else { @@ -267,8 +267,8 @@ function serverExec(execName, args) { body.vars = JSON.stringify(variables); } - var endpoint = isInvoke? '/v1/invoke' : '/v1/eval'; - var sep = '?'; + let endpoint = isInvoke? '/v1/invoke' : '/v1/eval'; + let sep = '?'; if (txid != null) { endpoint += sep+'txid='+mlutil.getTxidParam(txid); sep = '&'; @@ -281,7 +281,7 @@ function serverExec(execName, args) { }; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( operationDesc, client, requestOptions, 'single', 'multipart' ); operation.requestBody = qs.stringify(body); diff --git a/lib/server-types-generated.js b/lib/server-types-generated.js index b132fc524..b1bc3b276 100755 --- a/lib/server-types-generated.js +++ b/lib/server-types-generated.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/lib/session-state.js b/lib/session-state.js index d9c46d30a..29c5d0d7d 100644 --- a/lib/session-state.js +++ b/lib/session-state.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/lib/transactions.js b/lib/transactions.js index 21abec89a..f010ef4c7 100644 --- a/lib/transactions.js +++ b/lib/transactions.js @@ -1,10 +1,10 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** * Provides functions to open, commit, or rollback multi-statement @@ -16,9 +16,9 @@ var Operation = require('./operation.js'); /** @ignore */ function openOutputTransform(headers/*, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var txid = headers.location.substring('/v1/transactions/'.length); + const txid = headers.location.substring('/v1/transactions/'.length); if (operation.withState === true) { return new mlutil.Transaction(txid, operation.rawHeaders['set-cookie']); @@ -57,17 +57,17 @@ function Transactions(client) { * will be removed in the next major release. */ Transactions.prototype.open = function openTransaction() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; - var transactionName = null; - var timeLimit = null; - var withState = null; + let transactionName = null; + let timeLimit = null; + let withState = null; - var arg = (argLen > 0) ? args[0] : null; + let arg = (argLen > 0) ? args[0] : null; if (argLen > 1 || (typeof arg === 'string' || arg instanceof String) || (typeof arg === 'number' || arg instanceof Number) || (typeof arg === 'boolean')) { - var i=0; + let i=0; for (; i < argLen; i++) { arg = args[i]; if (transactionName === null && (typeof arg === 'string' || arg instanceof String)) { @@ -88,8 +88,8 @@ Transactions.prototype.open = function openTransaction() { withState = arg.withState; } - var path = '/v1/transactions'; - var sep = '?'; + let path = '/v1/transactions'; + let sep = '?'; if (transactionName != null) { path += sep+'name='+encodeURIComponent(transactionName); sep = '&'; @@ -100,7 +100,7 @@ Transactions.prototype.open = function openTransaction() { const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'POST'); - var operation = new Operation( + const operation = new Operation( 'open transaction', this.client, requestOptions, 'empty', 'empty' ); operation.validStatusCodes = [303]; @@ -121,8 +121,8 @@ Transactions.prototype.open = function openTransaction() { * @returns {object} information about the transaction */ Transactions.prototype.read = function readTransaction(txidRaw) { - var txid = mlutil.convertTransaction(txidRaw); - var path = + const txid = mlutil.convertTransaction(txidRaw); + const path = '/v1/transactions/'+mlutil.getTxidParam(txid, 'read')+'?format=json'; const requestOptions = mlutil.newRequestOptions(this.client.getConnectionParams(), path, 'GET'); @@ -131,7 +131,7 @@ Transactions.prototype.read = function readTransaction(txidRaw) { }; mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( 'read transaction', this.client, requestOptions, 'empty', 'single' ); operation.txid = txid; @@ -166,7 +166,7 @@ Transactions.prototype.rollback = function rollbackTransaction(txid) { /** @ignore */ function finishOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; return { txid: operation.txid, @@ -175,14 +175,14 @@ function finishOutputTransform(/*headers, data*/) { } /** @ignore */ function finishTransaction(client, result, txidRaw) { - var txid = mlutil.convertTransaction(txidRaw); - var path = + const txid = mlutil.convertTransaction(txidRaw); + const path = '/v1/transactions/'+mlutil.getTxidParam(txid, result)+'?result='+result; const requestOptions = mlutil.newRequestOptions(client.getConnectionParams(), path, 'POST'); mlutil.addTxidHeaders(requestOptions, txid); - var operation = new Operation( + const operation = new Operation( result+' transaction', client, requestOptions, 'empty', 'empty' ); operation.txid = txid; diff --git a/lib/transforms.js b/lib/transforms.js index 59abb9c40..e3c5338df 100644 --- a/lib/transforms.js +++ b/lib/transforms.js @@ -1,17 +1,17 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** @ignore */ function nameErrorTransform(message) { /*jshint validthis:true */ - var operation = this; + const operation = this; - var name = operation.name; + const name = operation.name; return (name == null) ? message : (message+' (on '+name+' transform)'); } @@ -26,7 +26,7 @@ function nameErrorTransform(message) { /** @ignore */ function emptyOutputTransform(/*headers, data*/) { /*jshint validthis:true */ - var operation = this; + const operation = this; return { name: operation.name @@ -59,11 +59,11 @@ Transforms.prototype.read = function readTransform(name) { throw new Error('must specify name when reading the transform source'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.path = '/v1/config/transforms/'+encodeURIComponent(name); - var operation = new Operation( + const operation = new Operation( 'read transform', this.client, requestOptions, 'empty', 'single' ); operation.name = name; @@ -82,21 +82,21 @@ Transforms.prototype.read = function readTransform(name) { * @param {object|string} source - the source for the transform */ Transforms.prototype.write = function writeTransform() { - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen === 0) { throw new Error('no arguments for writing an extension library'); } - var name = null; - var title = null; - var description = null; - var provider = null; - var version = null; - var format = null; - var source = null; + let name = null; + let title = null; + let description = null; + let provider = null; + let version = null; + let format = null; + let source = null; - var params = null; + let params = null; if (argLen === 1) { params = args[0]; name = params.name; @@ -117,7 +117,7 @@ Transforms.prototype.write = function writeTransform() { throw new Error('must specify name, format, and source when writing a transform'); } - var contentType = null; + let contentType = null; switch(format) { case 'javascript': contentType = 'application/javascript'; @@ -132,9 +132,9 @@ Transforms.prototype.write = function writeTransform() { throw new Error('unsupported transform format '+format); } - var endpoint = '/v1/config/transforms/'+encodeURIComponent(name); + let endpoint = '/v1/config/transforms/'+encodeURIComponent(name); - var sep = '?'; + let sep = '?'; if (title != null) { endpoint += sep+'title='+encodeURIComponent(title); if (sep === '?') {sep = '&';} @@ -152,14 +152,14 @@ Transforms.prototype.write = function writeTransform() { if (sep === '?') {sep = '&';} } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'PUT'; requestOptions.headers = { 'Content-Type': contentType }; requestOptions.path = endpoint; - var operation = new Operation( + const operation = new Operation( 'write transform', this.client, requestOptions, 'single', 'empty' ); operation.name = name; @@ -181,11 +181,11 @@ Transforms.prototype.remove = function removeTransform(name) { throw new Error('must specify name when deleting the transform source'); } - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'DELETE'; requestOptions.path = '/v1/config/transforms/'+encodeURIComponent(name); - var operation = new Operation( + const operation = new Operation( 'remove transform', this.client, requestOptions, 'empty', 'empty' ); operation.name = name; @@ -204,14 +204,14 @@ Transforms.prototype.remove = function removeTransform(name) { * on the server */ Transforms.prototype.list = function listTransforms() { - var requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); + const requestOptions = mlutil.copyProperties(this.client.getConnectionParams()); requestOptions.method = 'GET'; requestOptions.headers = { 'Accept': 'application/json' }; requestOptions.path = '/v1/config/transforms'; - var operation = new Operation( + const operation = new Operation( 'list transforms', this.client, requestOptions, 'empty', 'single' ); diff --git a/lib/values-builder.js b/lib/values-builder.js index d75f35757..4c93caff3 100644 --- a/lib/values-builder.js +++ b/lib/values-builder.js @@ -1,12 +1,11 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var deepcopy = require('deepcopy'); -var mlutil = require('./mlutil.js'); -var qb = require('./query-builder.js').builder; +const mlutil = require('./mlutil.js'); +const qb = require('./query-builder.js').builder; /** * A source of datatyped values from a JSON property, @@ -114,18 +113,18 @@ function ValueBuilder() { */ function valuesFromIndexes() { /*jshint validthis:true */ - var self = (this instanceof ValueBuilder) ? this : new ValueBuilder(); + const self = (this instanceof ValueBuilder) ? this : new ValueBuilder(); - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; - var isRangeIndex = { + const isRangeIndex = { 'element': true, 'field': true, 'json-property': true, 'path-index': true }; - var isGeoLocationIndex = { + const isGeoLocationIndex = { 'geo-attr-pair': true, 'geo-elem': true, 'geo-elem-pair': true, @@ -134,10 +133,10 @@ function valuesFromIndexes() { 'geo-path': true }; - var arg = null; - var firstKey = null; - var range = null; - for (var i=0; i < argLen; i++) { + let arg = null; + let firstKey = null; + let range = null; + for (let i=0; i < argLen; i++) { arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { args[i] = {range: qb.property(arg)}; @@ -175,15 +174,15 @@ ValueBuilder.prototype.fromIndexes = valuesFromIndexes; * @returns {valuesBuilder.BuiltQuery} a built query */ ValueBuilder.prototype.where = function valuesWhere() { - var self = this; + const self = this; - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; // TODO: if empty, clear the clause - var parsedQuery = null; - var fragmentScope = null; - var queries = null; + let parsedQuery = null; + let fragmentScope = null; + let queries = null; switch(argLen) { case 0: @@ -191,8 +190,8 @@ ValueBuilder.prototype.where = function valuesWhere() { self.whereClause = {query: {queries: [qb.and()]}}; break; default: - for (var i=0; i < argLen; i++) { - var arg = args[i]; + for (let i=0; i < argLen; i++) { + const arg = args[i]; if (parsedQuery == null) { parsedQuery = arg.parsedQuery; if (parsedQuery != null) { @@ -245,17 +244,17 @@ ValueBuilder.prototype.where = function valuesWhere() { * @returns {valuesBuilder.BuiltQuery} a built query */ ValueBuilder.prototype.aggregates = function valuesAggregates() { - var self = this; + const self = this; - var args = mlutil.asArray.apply(null, arguments); - var argLen = args.length; + const args = mlutil.asArray.apply(null, arguments); + const argLen = args.length; if (argLen < 1) { throw new Error('aggregates must specify at least one built-in function or UDF'); } - var aggregateFunctions = []; - for (var i=0; i < argLen; i++) { - var arg = args[i]; + const aggregateFunctions = []; + for (let i=0; i < argLen; i++) { + const arg = args[i]; if (typeof arg === 'string' || arg instanceof String) { aggregateFunctions.push({apply:arg}); } else if (arg.udf !== void 0) { @@ -319,9 +318,9 @@ function udf() { * @returns {valuesBuilder.BuiltQuery} a built query */ ValueBuilder.prototype.slice = function valuesSlice() { - var self = this; + const self = this; - var args = mlutil.asArray.apply(null, arguments); + const args = mlutil.asArray.apply(null, arguments); // TODO: if empty, clear the clause @@ -343,23 +342,23 @@ ValueBuilder.prototype.slice = function valuesSlice() { * @returns {valuesBuilder.BuiltQuery} a built query */ ValueBuilder.prototype.withOptions = function valuesWithOptions() { - var self = this; + const self = this; // TODO: share with values.js - var optionKeyMapping = { + const optionKeyMapping = { values: 'values-option', forestNames: 'forest-names' }; // TODO: reuse key copy logic with query-build withOptions - var withOptionsClause = {}; + const withOptionsClause = {}; if (0 < arguments.length) { - var arg = arguments[0]; - var argKeys = Object.keys(arg); - for (var i=0; i < argKeys.length; i++) { - var key = argKeys[i]; + const arg = arguments[0]; + const argKeys = Object.keys(arg); + for (let i=0; i < argKeys.length; i++) { + const key = argKeys[i]; if (optionKeyMapping[key] !== undefined) { - var value = arg[key]; + const value = arg[key]; if (value !== undefined) { withOptionsClause[key] = value; } @@ -394,23 +393,23 @@ function valuesUri() { * @returns {valuesBuilder.BuiltQuery} a built query */ function copyFromValueBuilder(otherValueBuilder) { - var tb = new ValueBuilder(); + const tb = new ValueBuilder(); // TODO: share with QueryBuilder if (otherValueBuilder != null) { - var clauseKeys = [ + const clauseKeys = [ 'fromIndexesClause', 'whereClause', 'aggregatesClause', 'sliceClause', 'withOptionsClause' ]; - var isString = (typeof otherValueBuilder === 'string' || otherValueBuilder instanceof String); - var other = isString ? + const isString = (typeof otherValueBuilder === 'string' || otherValueBuilder instanceof String); + const other = isString ? JSON.parse(otherValueBuilder) : otherValueBuilder; - for (var i=0; i < clauseKeys.length; i++){ - var key = clauseKeys[i]; - var value = other[key]; + for (let i=0; i < clauseKeys.length; i++){ + const key = clauseKeys[i]; + const value = other[key]; if (value != null) { - // deepcopy instead of clone to avoid preserving prototype - tb[key] = isString ? value : deepcopy(value); + // structuredClone instead of clone to avoid preserving prototype + tb[key] = isString ? value : structuredClone(value); } } } diff --git a/lib/values.js b/lib/values.js index eb7fda7ab..308dfbd1d 100644 --- a/lib/values.js +++ b/lib/values.js @@ -1,10 +1,10 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; -var requester = require('./requester.js'); -var mlutil = require('./mlutil.js'); -var Operation = require('./operation.js'); +const requester = require('./requester.js'); +const mlutil = require('./mlutil.js'); +const Operation = require('./operation.js'); /** * Provides functions to project tuples (aka rows) of values out of documents. @@ -40,9 +40,9 @@ Values.prototype.read = function readValues() { if (arguments.length === 0 || arguments.length > 2) { throw new Error('incorrect number of arguments to read values'); } - var arg = arguments[0]; + const arg = arguments[0]; - var timestamp = null; + let timestamp = null; if (arguments.length === 2) { if (arguments[1] instanceof mlutil.Timestamp) { timestamp = arguments[1]; @@ -51,49 +51,49 @@ Values.prototype.read = function readValues() { } } - var structuredef = { + const structuredef = { name: 'structuredef', style: 'consistent' }; - var indexesClause = arg.fromIndexesClause; - var indexesLength = Array.isArray(indexesClause) ? indexesClause.length : 0; + const indexesClause = arg.fromIndexesClause; + const indexesLength = Array.isArray(indexesClause) ? indexesClause.length : 0; if (indexesLength < 1) { throw new Error('must specify indexes to read values'); } - var isValues = (indexesLength === 1); - var structureName = isValues ? 'values' : 'tuples'; + const isValues = (indexesLength === 1); + const structureName = isValues ? 'values' : 'tuples'; if (isValues) { - var indexObject = indexesClause[0]; - var indexKey = Object.keys(indexObject)[0]; + const indexObject = indexesClause[0]; + const indexKey = Object.keys(indexObject)[0]; structuredef[indexKey] = indexObject[indexKey]; } else { structuredef.indexes = indexesClause; } - var aggregatesClause = arg.aggregatesClause; + const aggregatesClause = arg.aggregatesClause; if (aggregatesClause !== void 0) { structuredef.aggregate = aggregatesClause.aggregates; } - var structureOptions = {}; + const structureOptions = {}; structureOptions[structureName] = [structuredef]; - var withOptionsClause = arg.withOptionsClause; + const withOptionsClause = arg.withOptionsClause; if (withOptionsClause !== void 0) { // TODO: share with value-builder.js - var optionKeyMapping = { + const optionKeyMapping = { values: 'values-option', forestNames: 'forest-names' }; - var optionsKeys = Object.keys(withOptionsClause); - var key = null; - var mapping = null; - var value = null; - for (var i=0; i < optionsKeys.length; i++) { + const optionsKeys = Object.keys(withOptionsClause); + let key = null; + let mapping = null; + let value = null; + for (let i=0; i < optionsKeys.length; i++) { key = optionsKeys[i]; mapping = optionKeyMapping[key]; if (mapping !== void 0) { @@ -109,23 +109,23 @@ Values.prototype.read = function readValues() { } } - var searchBody = { + const searchBody = { options: structureOptions }; - var whereClause = arg.whereClause; + const whereClause = arg.whereClause; if (whereClause != null) { - var query = whereClause.query; - var parsedQuery = whereClause.parsedQuery; - var fragmentScope = whereClause['fragment-scope']; + const query = whereClause.query; + const parsedQuery = whereClause.parsedQuery; + const fragmentScope = whereClause['fragment-scope']; if (query != null) { searchBody.query = query; } if (parsedQuery != null) { searchBody.qtext = parsedQuery.qtext; - var constraintBindings = parsedQuery.constraint; - var termBinding = parsedQuery.term; + const constraintBindings = parsedQuery.constraint; + const termBinding = parsedQuery.term; if (constraintBindings != null) { structureOptions.constraint = constraintBindings; } @@ -138,17 +138,17 @@ Values.prototype.read = function readValues() { } } - var pageStart = null; - var pageLength = null; - var transform = null; + let pageStart = null; + let pageLength = null; + let transform = null; - var sliceClause = arg.sliceClause; + const sliceClause = arg.sliceClause; if (sliceClause !== void 0) { - var sliceStart = sliceClause['page-start']; + const sliceStart = sliceClause['page-start']; if (sliceStart !== void 0) { pageStart = sliceStart; } - var sliceLength = sliceClause['page-length']; + const sliceLength = sliceClause['page-length']; if (sliceLength !== void 0) { pageLength = sliceLength; } @@ -156,7 +156,7 @@ Values.prototype.read = function readValues() { transform = sliceClause['document-transform']; } - var endpoint = '/v1/values/structuredef?format=json'; + let endpoint = '/v1/values/structuredef?format=json'; if (pageStart !== null) { endpoint += '&start='+pageStart; @@ -180,7 +180,7 @@ Values.prototype.read = function readValues() { 'Accept': 'application/json' }; - var operation = new Operation( + const operation = new Operation( 'query values', this.client, requestOptions, 'single', 'single' ); operation.validStatusCodes = [200, 204]; diff --git a/lib/vector-util.js b/lib/vector-util.js index 661652036..1cc485251 100644 --- a/lib/vector-util.js +++ b/lib/vector-util.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/lib/www-authenticate-patched/md5.js b/lib/www-authenticate-patched/md5.js index 732d576ed..10a5df0fa 100644 --- a/lib/www-authenticate-patched/md5.js +++ b/lib/www-authenticate-patched/md5.js @@ -7,9 +7,9 @@ */ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var crypto= require('crypto'); +const crypto= require('crypto'); function md5(s) { return crypto.createHash('md5').update(s).digest('hex'); diff --git a/lib/www-authenticate-patched/parsers.js b/lib/www-authenticate-patched/parsers.js index acf544166..6998fc400 100644 --- a/lib/www-authenticate-patched/parsers.js +++ b/lib/www-authenticate-patched/parsers.js @@ -1,3 +1,7 @@ +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ + /* * www-authenticate * https://github.com/randymized/www-authenticate @@ -6,28 +10,25 @@ * Licensed under the MIT license. */ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var ParseAuth= /(\w+)\s+(.*)/ // -> scheme, params +const ParseAuth= /(\w+)\s+(.*)/ // -> scheme, params , Separators= /([",=])/ ; function parse_params(header) { // This parser will definitely fail if there is more than one challenge - var tok, _i, _len, key, value; - var state= 0; //0: token, - var m= header.split(Separators) + let tok, _i, _len, key, value; + let state= 0; //0: token, + const m= header.split(Separators); for (_i = 0, _len = m.length; _i < _len; _i++) { tok = m[_i]; - if (!tok.length) continue; + if (!tok.length) {continue;} switch (state) { case 0: // token key= tok.trim(); state= 1; // expect equals continue; case 1: // expect equals - if ('=' != tok) return 'Equal sign was expected after '+key; + if ('=' != tok) {return 'Equal sign was expected after '+key;} state= 2; continue; case 2: // expect value @@ -67,7 +68,7 @@ function parse_params(header) { return 'Unexpected token ('+tok+') after '+value+'"'; } case 9: // expect commma - if (',' != tok) return 'Comma expected after '+value; + if (',' != tok) {return 'Comma expected after '+value;} state= 0; continue; } @@ -86,10 +87,10 @@ function parse_params(header) { function Parse_WWW_Authenticate(to_parse) { - var m= to_parse.match(ParseAuth); + const m= to_parse.match(ParseAuth); this.scheme= m[1]; this.parms= {}; - var err= this.parse_params(m[2]); + const err= this.parse_params(m[2]); if (err) { this.scheme= ''; this.parms= {}; @@ -101,7 +102,7 @@ function Parse_Authentication_Info(to_parse) { this.scheme= 'Digest'; this.parms= {}; - var err= this.parse_params(to_parse); + const err= this.parse_params(to_parse); if (err) { this.scheme= ''; this.parms= {}; diff --git a/lib/www-authenticate-patched/user-credentials.js b/lib/www-authenticate-patched/user-credentials.js index c1f5db0b8..3d3555af3 100644 --- a/lib/www-authenticate-patched/user-credentials.js +++ b/lib/www-authenticate-patched/user-credentials.js @@ -1,3 +1,7 @@ +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ + /* * www-authenticate * https://github.com/randymized/www-authenticate @@ -6,10 +10,8 @@ * Licensed under the MIT license. */ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var md5= require('./md5'); + +const md5= require('./md5'); /* * Hide the password. Uses the password to form authorization strings, @@ -23,14 +25,14 @@ function user_credentials(username,password,options) { return username; } - var basic_string= options && options.hide_basic ? + const basic_string= options && options.hide_basic ? '' : (!password && password !== '' ? - Buffer.from(username, "ascii").toString("base64") + Buffer.from(username, 'ascii').toString('base64') : - Buffer.from(username+':'+password, "ascii").toString("base64") - ) + Buffer.from(username+':'+password, 'ascii').toString('base64') + ); function Credentials() { this.username= username; @@ -38,18 +40,18 @@ function user_credentials(username,password,options) { Credentials.prototype.basic= function() { return basic_string; - } + }; Credentials.prototype.digest= function(realm) { return !password && password !== '' ? md5(username+':'+realm) : - md5(username+':'+realm+':'+password) - } + md5(username+':'+realm+':'+password); + }; Credentials.prototype.is_user_credentials= function() { return true; - } + }; return new Credentials; } diff --git a/lib/www-authenticate-patched/www-authenticate.js b/lib/www-authenticate-patched/www-authenticate.js index 2069a5d8b..5b85f9f79 100644 --- a/lib/www-authenticate-patched/www-authenticate.js +++ b/lib/www-authenticate-patched/www-authenticate.js @@ -1,3 +1,7 @@ +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ + /* * www-authenticate * https://github.com/randymized/www-authenticate @@ -6,12 +10,9 @@ * Licensed under the MIT license. */ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ 'use strict'; -var crypto= require('crypto') +const crypto= require('crypto') , parsers= require('./parsers') , md5= require('./md5') , user_credentials= require('./user-credentials') @@ -25,35 +26,35 @@ var crypto= require('crypto') function hex8(num) { - return ("00000000" + num.toString(16)).slice(-8); + return ('00000000' + num.toString(16)).slice(-8); } -var www_authenticator = function(username,password,options) +const www_authenticator = function(username,password,options) { if (2 == arguments.length && toString.call(password) != '[object String]') { options= password; password= null; } - var credentials= user_credentials(username,password) - var cnonce; + const credentials= user_credentials(username,password); + let cnonce; if (options) { if (toString.call(options.cnonce) == '[object String]') - cnonce= options.cnonce; + {cnonce= options.cnonce;} } - if (cnonce === void 0) cnonce= crypto.pseudoRandomBytes(8).toString('hex'); - var parse_header= function(www_authenticate) + if (cnonce === void 0) {cnonce= crypto.pseudoRandomBytes(8).toString('hex');} + const parse_header= function(www_authenticate) { function Authenticator() { function note_error(err) { - this.err= err + this.err= err; } - var nc= 0; + let nc= 0; - var parsed= new parsers.WWW_Authenticate(www_authenticate); - if (parsed.err) return note_error(parsed.err); - var auth_parms= this.parms= parsed.parms; + const parsed= new parsers.WWW_Authenticate(www_authenticate); + if (parsed.err) {return note_error(parsed.err);} + const auth_parms= this.parms= parsed.parms; this.cnonce= cnonce; switch(parsed.scheme) { @@ -66,14 +67,14 @@ var www_authenticator = function(username,password,options) case 'Digest': var realm= auth_parms.realm; if (!realm) { - return note_error("Realm not found in www-authenticate header."); + return note_error('Realm not found in www-authenticate header.'); } var ha1= credentials.digest(realm); var nonce= auth_parms.nonce; if (!nonce) { - return note_error("Nonce not found in www-authenticate header."); + return note_error('Nonce not found in www-authenticate header.'); } var fixed= 'Digest username="'+credentials.username+'",'+ @@ -82,7 +83,7 @@ var www_authenticator = function(username,password,options) var qop= auth_parms.qop; if (!qop) { this.authorize= function(method,digestURI) { - var ha2= md5(method+':'+digestURI); + const ha2= md5(method+':'+digestURI); return fixed+ ' uri="'+digestURI+'",'+ ' response="'+md5(ha1+':'+nonce+':'+ha2)+'",'; @@ -90,12 +91,12 @@ var www_authenticator = function(username,password,options) return; } else { - var qopa= qop.split(','); - var _i, _len; + const qopa= qop.split(','); + let _i, _len; for (_i = 0, _len = qopa.length; _i < _len; _i++) { if ('auth' === qopa[_i]) { var opaque= auth_parms.opaque; - var algorithm= auth_parms.algorithm; + let algorithm= auth_parms.algorithm; if (algorithm) { fixed+= ' algorithm="'+algorithm+'",'; } @@ -107,10 +108,10 @@ var www_authenticator = function(username,password,options) : ha1; this.authorize= function(method,digestURI) { - var ha2= md5(method+':'+digestURI); + const ha2= md5(method+':'+digestURI); nc= nc+1; - var hexed_nc= hex8(nc); - var s= fixed+ + const hexed_nc= hex8(nc); + let s= fixed+ ' uri="'+digestURI+'",'+ ' qop=auth,'+ ' nc='+hexed_nc+','+ @@ -127,7 +128,7 @@ var www_authenticator = function(username,password,options) return note_error('Server does not accept any supported quality of protection techniques.'); } default: - return note_error("Unknown scheme"); + return note_error('Unknown scheme'); } } @@ -141,8 +142,8 @@ var www_authenticator = function(username,password,options) function HigherLevel(credentials,options) { - this.credentials= credentials - this.options= options + this.credentials= credentials; + this.options= options; if (options && options.sendImmediately) { this.sendImmediately= true; } @@ -150,42 +151,42 @@ function HigherLevel(credentials,options) HigherLevel.prototype.get_challenge= function(request) { if (401 == request.statusCode && 'www-authenticate' in request.headers) { if (!this.parse_header) { - this.parse_header= www_authenticator(this.credentials,this.options) + this.parse_header= www_authenticator(this.credentials,this.options); } - this.challenge= this.parse_header(request.headers['www-authenticate']) + this.challenge= this.parse_header(request.headers['www-authenticate']); return this.challenge.err; } -} +}; HigherLevel.prototype._challenge= function() { if (!this.challenge) { if (this.sendImmediately) { // simulate receipt of a basic challenge - this.get_challenge(basic_challenge) - return this.challenge + this.get_challenge(basic_challenge); + return this.challenge; } - else return; // simply won't produce an 'Authorization' header + else {return;} // simply won't produce an 'Authorization' header } return this.challenge; -} +}; HigherLevel.prototype.authentication_string= function(method,digestURI) { - var challenge= this._challenge(); - if (!challenge) return; // simply won't produce an 'Authorization' header - if (challenge.err) return challenge.err; + const challenge= this._challenge(); + if (!challenge) {return;} // simply won't produce an 'Authorization' header + if (challenge.err) {return challenge.err;} return challenge.authorize(method,digestURI); -} +}; HigherLevel.prototype.authenticate_headers= function(headers,method,digestURI) { - var challenge= this._challenge(); - if (!challenge) return; // simply won't produce an 'Authorization' header - if (challenge.err) return challenge.err; + const challenge= this._challenge(); + if (!challenge) {return;} // simply won't produce an 'Authorization' header + if (challenge.err) {return challenge.err;} headers.authorization= challenge.authorize(method,digestURI); -} +}; HigherLevel.prototype.authenticate_request_options= function(request_options) { - var challenge= this._challenge(); - if (!challenge) return; // simply won't produce an 'Authorization' header - if (challenge.err) return challenge.err; - if (!request_options.headers) request_options.headers= {}; + const challenge= this._challenge(); + if (!challenge) {return;} // simply won't produce an 'Authorization' header + if (challenge.err) {return challenge.err;} + if (!request_options.headers) {request_options.headers= {};} request_options.headers.authorization= challenge.authorize(request_options.method,request_options.path); -} +}; module.exports = www_authenticator; module.exports.parsers= parsers; @@ -197,6 +198,6 @@ module.exports.authenticator= function(username,password,options) options= password; password= null; } - var credentials= user_credentials(username,password) + const credentials= user_credentials(username,password); return new HigherLevel(credentials,options); -} \ No newline at end of file +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ac55aab1c..1bd1e3da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,52 +1,47 @@ { "name": "marklogic", - "version": "3.7.1", - "lockfileVersion": 2, + "version": "4.0.0", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "marklogic", - "version": "3.7.1", - "hasInstallScript": true, + "version": "4.0.0", "license": "Apache-2.0", "dependencies": { - "@fastify/busboy": "^1.1.0", - "big-integer": "^1.6.51", - "concat-stream": "^2.0.0", - "deepcopy": "^2.1.0", - "duplexify": "^4.1.2", - "eslint": "^8.57.0", - "form-data": "^4.0.4", - "json-text-sequence": "^1.0.1", - "multipart-stream": "^2.0.1", - "qs": "^6.11.0", - "through2": "^4.0.2" + "@fastify/busboy": "3.2.0", + "big-integer": "1.6.52", + "concat-stream": "2.0.0", + "duplexify": "4.1.3", + "form-data": "4.0.4", + "json-text-sequence": "4.0.2", + "multipart-stream": "2.0.1", + "qs": "6.14.0", + "through2": "4.0.2" }, "devDependencies": { - "@jsdoc/salty": "0.2.3", - "ajv": "^8.11.0", - "ast-types": "^0.14.2", - "astring": "^1.8.3", - "bunyan": "^1.8.15", - "chai": "^4.4.1", - "core-util-is": "^1.0.3", - "gulp": "^5.0.0", - "gulp-jsdoc3": "^3.0.0", - "gulp-jshint": "^2.1.0", - "gulp-mocha": "^8.0.0", - "intercept-stdout": "^0.1.2", - "jshint": "^2.13.5", - "mocha": "^10.0.0", - "mocha-junit-reporter": "2.2.0", - "moment": "^2.29.4", - "read": "^1.0.7", - "sanitize-html": "^2.13.0", - "should": "^13.2.3", - "stream-to-array": "^2.3.0", - "winston": "^3.8.2" - }, - "engines": { - "node": ">=16.14.0" + "@jsdoc/salty": "0.2.9", + "ajv": "8.17.1", + "ast-types": "0.14.2", + "astring": "1.9.0", + "bunyan": "1.8.15", + "chai": "6.2.0", + "core-util-is": "1.0.3", + "eslint": "9.38.0", + "gulp": "5.0.1", + "gulp-eslint-new": "2.5.0", + "gulp-mocha": "10.0.1", + "intercept-stdout": "0.1.2", + "jsdoc": "4.0.5", + "mocha": "11.7.4", + "mocha-junit-reporter": "2.2.1", + "moment": "2.30.1", + "sanitize-html": "2.17.0", + "should": "13.2.3", + "stream-to-array": "2.3.0" + }, + "engines": { + "node": ">=22.0.0" }, "optionalDependencies": { "kerberos": "^2.0.1", @@ -58,26 +53,29 @@ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -87,42 +85,25 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -136,23 +117,81 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -160,7 +199,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -170,6 +209,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -184,32 +225,59 @@ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@fastify/busboy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", - "integrity": "sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "text-decoding": "^1.0.0" + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "license": "MIT" + }, "node_modules/@gulpjs/messages": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -219,6 +287,7 @@ "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", "dev": true, + "license": "MIT", "dependencies": { "is-negated-glob": "^1.0.0" }, @@ -226,24 +295,36 @@ "node": ">=10.13.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -252,16 +333,26 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -274,26 +365,19 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -306,25 +390,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@jsdoc/salty": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.3.tgz", - "integrity": "sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", + "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "lodash": "^4.17.21" }, @@ -332,42 +403,12 @@ "node": ">=v12.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -377,53 +418,84 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", + "license": "MIT", "engines": { "node": ">= 8" } }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", "dev": true, + "license": "MIT", "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "@types/linkify-it": "^5", + "@types/mdurl": "^2" } }, "node_modules/@types/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "node_modules/@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" + "node_modules/@types/vinyl": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", + "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/expect": "^1.20.4", + "@types/node": "*" + } }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -435,6 +507,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -444,6 +518,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -456,45 +531,13 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-wrap": "0.1.0" + "ansi-wrap": "^0.1.0" }, "engines": { "node": ">=0.10.0" @@ -504,6 +547,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -512,6 +557,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -527,6 +574,7 @@ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -535,13 +583,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -553,53 +603,16 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-diff/node_modules/array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "Python-2.0" }, "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -609,24 +622,7 @@ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -636,6 +632,7 @@ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -648,21 +645,17 @@ "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "dev": true, + "license": "MIT", "bin": { "astring": "bin/astring" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, "node_modules/async-done": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.4.4", "once": "^1.4.0", @@ -677,6 +670,7 @@ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, + "license": "MIT", "dependencies": { "async-done": "^2.0.0" }, @@ -687,13 +681,15 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/b4a": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.1.tgz", - "integrity": "sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "devOptional": true, + "license": "Apache-2.0", "peerDependencies": { "react-native-b4a": "*" }, @@ -708,6 +704,7 @@ "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, + "license": "MIT", "dependencies": { "async-done": "^2.0.0", "async-settle": "^2.0.0", @@ -720,13 +717,24 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" }, "node_modules/bare-events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", - "devOptional": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.1.tgz", + "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/base64-js": { "version": "1.5.1", @@ -746,24 +754,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/beeper": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-2.1.0.tgz", - "integrity": "sha512-85+CcymhlP0jM4fs4ZMiMRl58VthoN9NRdvi+knXiQpP2UggkSre+A9rOZ0c2g2Vh+pEF5ZAlT+k8dsJNoanAA==", - "dev": true, - "dependencies": { - "yoctodelay": "^1.1.0" - }, - "engines": { - "node": ">=8" - } + ], + "license": "MIT" }, "node_modules/big-integer": { "version": "1.6.52", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", "engines": { "node": ">=0.6" } @@ -773,6 +771,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -784,6 +783,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", "optional": true, "dependencies": { "buffer": "^5.5.0", @@ -795,12 +795,15 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -810,6 +813,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -821,7 +825,8 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/buffer": { "version": "5.7.1", @@ -841,6 +846,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "base64-js": "^1.3.1", @@ -850,7 +856,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" }, "node_modules/bunyan": { "version": "1.8.15", @@ -860,6 +867,7 @@ "engines": [ "node >=0.10.0" ], + "license": "MIT", "bin": { "bunyan": "bin/bunyan" }, @@ -874,6 +882,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -886,6 +895,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -901,6 +911,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -910,6 +922,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -922,6 +935,7 @@ "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.15" }, @@ -930,27 +944,21 @@ } }, "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", + "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" } }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -967,27 +975,17 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -1011,92 +1009,52 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC", "optional": true }, - "node_modules/cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", - "dev": true, - "dependencies": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "engines": { - "node": ">=0.2.5" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.0.tgz", + "integrity": "sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==", + "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "color-name": "^2.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.6" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", + "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "license": "MIT", + "engines": { + "node": ">=12.20" } }, "node_modules/color-support": { @@ -1104,39 +1062,16 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", "bin": { "color-support": "bin.js" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1151,6 +1086,7 @@ "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -1158,26 +1094,19 @@ "typedarray": "^0.0.6" } }, - "node_modules/console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", - "dev": true, - "dependencies": { - "date-now": "^0.1.4" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-props": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, + "license": "MIT", "dependencies": { "each-props": "^3.0.0", "is-plain-object": "^5.0.0" @@ -1190,12 +1119,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1210,31 +1142,32 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", - "dev": true - }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.2" }, "engines": { "node": ">=6.0" @@ -1250,6 +1183,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1261,6 +1195,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "optional": true, "dependencies": { "mimic-response": "^3.1.0" @@ -1272,22 +1207,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1296,21 +1220,16 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepcopy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", - "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", - "dependencies": { - "type-detect": "^4.0.8" - } + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1319,6 +1238,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -1328,50 +1248,47 @@ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/detect-libc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", - "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", "optional": true, "engines": { "node": ">=8" } }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { + "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", @@ -1381,40 +1298,38 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "domelementtype": "1" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dtrace-provider": { @@ -1423,6 +1338,7 @@ "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "dev": true, "hasInstallScript": true, + "license": "BSD-2-Clause", "optional": true, "dependencies": { "nan": "^2.14.0" @@ -1435,6 +1351,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -1448,6 +1365,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", @@ -1460,6 +1378,7 @@ "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0" @@ -1471,37 +1390,57 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-transform-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-transform-stream/-/easy-transform-stream-1.0.1.tgz", + "integrity": "sha512-ktkaa6XR7COAR3oj02CF3IOgz2m1hCaY3SfzvKT4Svt2MhHw9XCt+ncJNWfe2TGz31iqzNGZ8spdKQflj+Rlog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", - "dev": true + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1510,6 +1449,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1518,6 +1458,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -1529,6 +1470,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -1544,6 +1486,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1552,6 +1495,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1560,81 +1505,90 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1644,6 +1598,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1658,19 +1614,23 @@ "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1680,6 +1640,8 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -1691,6 +1653,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -1702,6 +1666,8 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -1710,55 +1676,51 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/events-universal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.0.tgz", - "integrity": "sha512-1KVXP1Oq8SiC0HsRraCryA4XGrZ2uJgIt/h4X+mB/8pzMKE7L8yBDN2lBlqJZeUwLAt7kf80m/5GX3HvoCrSGA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { "bare-events": "^2.7.0" } }, "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=16.17" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", "optional": true, "engines": { "node": ">=6" @@ -1769,6 +1731,7 @@ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -1780,55 +1743,49 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, - "dependencies": { - "kind-of": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "color-support": "^1.1.3" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", @@ -1844,13 +1801,15 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -1859,25 +1818,23 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true - }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -1885,6 +1842,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1896,6 +1854,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1912,6 +1872,7 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, + "license": "MIT", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.3", @@ -1927,6 +1888,7 @@ "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "is-plain-object": "^5.0.0", @@ -1943,6 +1905,7 @@ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -1952,39 +1915,38 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1994,6 +1956,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -2005,6 +1968,8 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -2016,21 +1981,18 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/fork-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", + "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==", + "dev": true, + "license": "BSD" }, "node_modules/form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -2046,6 +2008,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT", "optional": true }, "node_modules/fs-mkdirp-stream": { @@ -2053,6 +2016,7 @@ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.8", "streamx": "^2.12.0" @@ -2067,6 +2031,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2079,6 +2044,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2088,23 +2054,16 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -2128,6 +2087,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -2137,12 +2097,13 @@ } }, "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2152,12 +2113,15 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT", "optional": true }, "node_modules/glob": { "version": "10.3.11", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.11.tgz", "integrity": "sha512-0UAMm+R/z1E2bTR8eFnoIIlnrUK89m36i90Ez36ld9hLulfUPBgRCQtBy/v86ABx18jnGyrTvu4X3LAjIeBogw==", + "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", @@ -2179,6 +2143,8 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -2191,6 +2157,7 @@ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", "dev": true, + "license": "MIT", "dependencies": { "@gulpjs/to-absolute-glob": "^4.0.0", "anymatch": "^3.1.3", @@ -2210,6 +2177,7 @@ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, + "license": "MIT", "dependencies": { "async-done": "^2.0.0", "chokidar": "^3.5.3" @@ -2223,6 +2191,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -2237,6 +2206,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -2253,6 +2223,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -2261,14 +2232,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2279,6 +2249,7 @@ "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", "dev": true, + "license": "MIT", "dependencies": { "sparkles": "^2.1.0" }, @@ -2290,6 +2261,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2301,27 +2273,15 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, - "engines": { - "node": ">=4.x" - } + "license": "ISC" }, "node_modules/gulp": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", "integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==", "dev": true, + "license": "MIT", "dependencies": { "glob-watcher": "^6.0.0", "gulp-cli": "^3.1.0", @@ -2340,6 +2300,7 @@ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.1.0.tgz", "integrity": "sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==", "dev": true, + "license": "MIT", "dependencies": { "@gulpjs/messages": "^1.1.0", "chalk": "^4.1.2", @@ -2361,96 +2322,42 @@ "node": ">=10.13.0" } }, - "node_modules/gulp-jsdoc3": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-jsdoc3/-/gulp-jsdoc3-3.0.0.tgz", - "integrity": "sha512-rE2jAwCPA8XFi9g4V3Z3LPhZNjxuMTIYQVMjdqZAQpRfJITLVaUK3xfmiiNTMc7j+fT7pL8Q5yj7ZPRdwCJWNg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "beeper": "^2.0.0", - "debug": "^4.1.1", - "fancy-log": "^1.3.3", - "ink-docstrap": "^1.3.2", - "jsdoc": "^3.6.3", - "map-stream": "0.0.7", - "tmp": "0.1.0" - } - }, - "node_modules/gulp-jshint": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-2.1.0.tgz", - "integrity": "sha512-sP3NK8Y/1e58O0PH9t6s7DAr/lKDSUbIY207oWSeufM6/VclB7jJrIBcPCsyhrFTCDUl9DauePbt6VqP2vPM5w==", + "node_modules/gulp-eslint-new": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/gulp-eslint-new/-/gulp-eslint-new-2.5.0.tgz", + "integrity": "sha512-sEF9dnihZ04oUybO4grpPO0zomJwiAeCKcVyYZouzfArkJut/cVcjN3KA0g9iaX1g05pZhhYTBH6pnrqGTiVOg==", "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.12.0", - "minimatch": "^3.0.3", - "plugin-error": "^0.1.2", - "rcloader": "^0.2.2", - "through2": "^2.0.0" + "eslint": "8 || 9", + "fancy-log": "^2.0.0", + "plugin-error": "^2.0.1", + "semver": "^7.7.2", + "ternary-stream": "^3.0.0", + "vinyl-fs": "^4.0.2" }, "engines": { - "node": ">= 0.4.0" + "node": "^12.20 || ^14.13 || >=16" }, - "peerDependencies": { - "jshint": "2.x" - } - }, - "node_modules/gulp-jshint/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/gulp-jshint/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-jshint/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/gulp-jshint/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "optionalDependencies": { + "@types/node": ">=12" } }, "node_modules/gulp-mocha": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-8.0.0.tgz", - "integrity": "sha512-FdbBydfzszaES/gXfwD6RFq1yJTj4Z6328R1yqsmhf+t7hW2aj9ZD9Hz8boQShjZ9J8/w6tQBM5mePb8K2pbqA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-10.0.1.tgz", + "integrity": "sha512-BGo+sDMXHxNfgxYqc7Vq0W4Na8J1nBwjR91BwrhIHVm0mR6UklWIvNOk8Ql086XBVGbhIQ8u+b1XlSzZoBtLXg==", "dev": true, + "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "execa": "^5.0.0", - "mocha": "^8.3.0", - "plugin-error": "^1.0.1", - "supports-color": "^8.1.1", - "through2": "^4.0.2" + "dargs": "^8.1.0", + "execa": "^8.0.1", + "gulp-plugin-extras": "^0.3.0", + "mocha": "^10.2.0", + "supports-color": "^9.4.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2465,233 +2372,101 @@ } }, "node_modules/gulp-mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/gulp-mocha/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-mocha/node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-mocha/node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/gulp-mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/gulp-mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/gulp-mocha/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/gulp-mocha/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gulp-mocha/node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "node_modules/gulp-mocha/node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gulp-mocha/node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 10.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": ">= 14.0.0" } }, - "node_modules/gulp-mocha/node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "node_modules/gulp-mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "engines": { - "node": ">= 0.10" - } + "license": "MIT" }, - "node_modules/gulp-mocha/node_modules/plugin-error/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/gulp-mocha/node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "license": "Apache-2.0" }, - "node_modules/gulp-mocha/node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "node_modules/gulp-mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, + "license": "ISC", "engines": { - "node": ">=8.10.0" + "node": ">=10" } }, - "node_modules/gulp-mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/gulp-plugin-extras": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gulp-plugin-extras/-/gulp-plugin-extras-0.3.0.tgz", + "integrity": "sha512-I/kOBSpo61QsGQZcqozZYEnDseKvpudUafVVWDLYgBFAUJ37kW5R8Sjw9cMYzpGyPUfEYOeoY4p+dkfLqgyJUQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@types/vinyl": "^2.0.9", + "chalk": "^5.3.0", + "easy-transform-stream": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/gulp-mocha/node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "node_modules/gulp-mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gulplog": { @@ -2699,6 +2474,7 @@ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, + "license": "MIT", "dependencies": { "glogg": "^2.2.0" }, @@ -2710,6 +2486,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2718,6 +2496,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2729,6 +2508,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -2743,6 +2523,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2755,6 +2536,7 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -2764,6 +2546,7 @@ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, + "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -2772,49 +2555,33 @@ } }, "node_modules/htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", - "dev": true, - "dependencies": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "node_modules/htmlparser2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/htmlparser2/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/htmlparser2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=10.17.0" + "node": ">=16.17.0" } }, "node_modules/iconv-lite": { @@ -2822,6 +2589,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -2847,12 +2615,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -2861,6 +2632,8 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2876,6 +2649,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2883,29 +2658,22 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true - }, - "node_modules/ink-docstrap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.2.tgz", - "integrity": "sha512-STx5orGQU1gfrkoI/fMU7lX6CSP7LBGO10gXNgOZhwKhUqbtNjCkYSewJtNnLmWP1tAGN6oyEpG1HFPw5vpa5Q==", - "dev": true, - "dependencies": { - "moment": "^2.14.1", - "sanitize-html": "^1.13.0" - } + "devOptional": true, + "license": "ISC" }, "node_modules/intercept-stdout": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/intercept-stdout/-/intercept-stdout-0.1.2.tgz", "integrity": "sha512-Umb41Ryp5FzLurfCRAWx+jjNAk8jsw2RTk2XPIwus+86h/Y2Eb4DfOWof/mZ6FBww8SoO45rJSlg25054/Di9w==", "dev": true, + "license": "MIT", "dependencies": { "lodash.toarray": "^3.0.0" } @@ -2915,6 +2683,7 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -2924,6 +2693,7 @@ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, + "license": "MIT", "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -2932,17 +2702,12 @@ "node": ">=0.10.0" } }, - "node_modules/is-arrayish": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -2954,13 +2719,15 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -2971,34 +2738,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3007,6 +2752,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3015,6 +2762,8 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3027,6 +2776,7 @@ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3036,6 +2786,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -3044,6 +2795,8 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3053,6 +2806,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3062,6 +2816,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3071,6 +2826,7 @@ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, + "license": "MIT", "dependencies": { "is-unc-path": "^1.0.0" }, @@ -3079,12 +2835,13 @@ } }, "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3095,6 +2852,7 @@ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, + "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -3107,6 +2865,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3119,6 +2878,7 @@ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3128,26 +2888,24 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3156,6 +2914,8 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -3173,6 +2933,8 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3185,26 +2947,28 @@ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "xmlcreate": "^2.0.4" } }, "node_modules/jsdoc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.0.tgz", - "integrity": "sha512-tzTgkklbWKrlaQL2+e3NNgLcZu3NaK2vsHRx7tyHQ+H5jcB9Gx0txSd2eJWlMC/xU1+7LQu4s58Ry0RkuaEQVg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.5.tgz", + "integrity": "sha512-P4C6MWP9yIlMiK8nwoZvxN84vb6MsnXcHuy7XzVOvQoCizWX5JFCBsWIIWKXBltpoRZXddUOVQmCTOZt9yDj9g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/parser": "^7.9.4", + "@babel/parser": "^7.20.15", "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", + "@types/markdown-it": "^14.1.1", "bluebird": "^3.7.2", "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.2", "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", "marked": "^4.0.10", "mkdirp": "^1.0.4", "requizzle": "^0.2.3", @@ -3223,65 +2987,42 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jshint": { - "version": "2.13.6", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", - "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "dependencies": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "strip-json-comments": "1.0.x" - }, - "bin": { - "jshint": "bin/jshint" - } - }, - "node_modules/jshint/node_modules/strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", - "dev": true, - "bin": { - "strip-json-comments": "cli.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" }, "node_modules/json-text-sequence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-1.0.1.tgz", - "integrity": "sha512-AYvyAj02ukg85KiFMLphUMFWcNDCSwmNNuoqmpHUyBr/MJOB0c3rQrsJgzM2ELv25yozY9s9NrORuqdP1vNLXQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-4.0.2.tgz", + "integrity": "sha512-rpmhNYEvL5LEAK0QNhgs+mOCyIh5tfiEQC59Wf3huR4wXcmJHBnSEc6pWqNPR/cjHoSgDhTEfbHqAh7gqaNbiw==", + "license": "MIT", "dependencies": { "@sovpro/delimited-stream": "^1.1.0" }, "engines": { - "node": ">=12.20.0" + "node": ">=20" } }, "node_modules/kerberos": { @@ -3289,6 +3030,7 @@ "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.2.tgz", "integrity": "sha512-42O7+/1Zatsc3MkxaMPpXcIl/ukIrbQaGoArZEAr6GcEi2qhfprOBYOPhj+YvSMJkEkdpTjApUx+2DuWaKwRhg==", "hasInstallScript": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "node-addon-api": "^6.1.0", @@ -3302,39 +3044,28 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/klaw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.9" } }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, "node_modules/last-run": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -3344,6 +3075,7 @@ "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -3352,6 +3084,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -3365,6 +3099,7 @@ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", "integrity": "sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==", "dev": true, + "license": "MIT", "dependencies": { "extend": "^3.0.2", "findup-sync": "^5.0.0", @@ -3383,6 +3118,7 @@ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } @@ -3391,6 +3127,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -3405,61 +3143,50 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._arraycopy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", "integrity": "sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true - }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", @@ -3469,13 +3196,16 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.toarray": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-3.0.2.tgz", "integrity": "sha512-ptkjUqvuHjTuMJJxiktJpZhxM5l60bEkfntJx+NFzdQd1bZVxfpTF1bhFYFqBrT4F0wZ1qx9KbVmHJV3Rfc7Tw==", "dev": true, + "license": "MIT", "dependencies": { "lodash._arraycopy": "^3.0.0", "lodash._basevalues": "^3.0.0", @@ -3487,6 +3217,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -3498,57 +3229,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true - }, "node_modules/markdown-it": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -3566,28 +3269,18 @@ "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", "dev": true, + "license": "Unlicense", "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" } }, - "node_modules/markdown-it/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -3599,6 +3292,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3608,6 +3302,7 @@ "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -3618,19 +3313,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3643,6 +3341,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3651,6 +3350,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -3659,18 +3359,23 @@ } }, "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=10" @@ -3683,6 +3388,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3694,6 +3401,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3703,6 +3411,8 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -3712,6 +3422,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -3723,33 +3434,36 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", "optional": true }, "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "version": "11.7.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.4.tgz", + "integrity": "sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", + "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", - "glob": "^8.1.0", + "glob": "^10.4.5", "he": "^1.2.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", + "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" }, "bin": { @@ -3757,18 +3471,19 @@ "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 14.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha-junit-reporter": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.0.tgz", - "integrity": "sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", + "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "md5": "^2.3.0", - "mkdirp": "~1.0.4", + "mkdirp": "^3.0.0", "strip-ansi": "^6.0.1", "xml": "^1.0.1" }, @@ -3776,19 +3491,91 @@ "mocha": ">=2.2.5" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/mocha-junit-reporter/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, "node_modules/moment": { @@ -3796,19 +3583,23 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" }, "node_modules/multipart-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/multipart-stream/-/multipart-stream-2.0.1.tgz", "integrity": "sha512-s2DhMKNH12ydxvLMIjE4lX5ZZsh0lusC1EWzXwg+haFfX/ODTt3+xYkUnGRLy119tVMLltbHnUiEKfuqdQySfA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "is-stream": "^1.0.1", @@ -3819,6 +3610,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3828,21 +3620,17 @@ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "node_modules/mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -3858,6 +3646,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "^1.2.6" @@ -3866,31 +3655,18 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/nan": { "version": "2.23.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -3898,6 +3674,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3909,27 +3686,32 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", "optional": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "dev": true, + "license": "MIT", "optional": true, "bin": { "ncp": "bin/ncp" } }, "node_modules/node-abi": { - "version": "3.77.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", + "version": "3.79.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.79.0.tgz", + "integrity": "sha512-Pr/5KdBQGG8TirdkS0qN3B+f3eo8zTOfZQWAxHoJqopMz2/uvRnG+S4fWu/6AZxKei2CP2p/psdQ5HFC2Ap5BA==", + "license": "MIT", "optional": true, "dependencies": { "semver": "^7.3.5" @@ -3942,6 +3724,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT", "optional": true }, "node_modules/normalize-path": { @@ -3949,6 +3732,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3958,6 +3742,7 @@ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" }, @@ -3966,21 +3751,39 @@ } }, "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3993,6 +3796,7 @@ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, + "license": "MIT", "dependencies": { "array-each": "^1.0.1", "array-slice": "^1.0.0", @@ -4008,6 +3812,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -4019,29 +3824,22 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, - "dependencies": { - "fn.name": "1.x.x" - } - }, "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4051,6 +3849,8 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -4067,6 +3867,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4081,6 +3883,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -4095,6 +3899,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -4107,6 +3913,7 @@ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -4116,20 +3923,12 @@ "node": ">=0.8" } }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4138,12 +3937,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4152,6 +3954,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4160,13 +3964,15 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, + "license": "MIT", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -4179,6 +3985,7 @@ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4187,6 +3994,8 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -4198,26 +4007,19 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -4226,19 +4028,16 @@ } }, "node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-2.0.1.tgz", + "integrity": "sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" + "ansi-colors": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/postcss": { @@ -4260,6 +4059,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4273,6 +4073,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^2.0.0", @@ -4299,20 +4100,17 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", "optional": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -4323,6 +4121,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4332,6 +4132,7 @@ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4340,6 +4141,7 @@ "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" }, @@ -4350,30 +4152,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -4382,6 +4166,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -4397,55 +4182,17 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/rcfinder": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", - "integrity": "sha512-rhSo812VIVaX7cxl33KkllHRwfLvjZL3lQedWEpQ27YlMFKZbFZsiVdCcQn/Z0FauLWxIpKrNREGuHbJFSi0Lw==", - "dev": true, - "dependencies": { - "lodash.clonedeep": "^4.3.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/rcloader": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.2.2.tgz", - "integrity": "sha512-hSkFcFiLb5buT0X1fNI023M6tn0ywblKzF0hGzVCkTjEggT5tQUZI+fCG71utA7NiEyiBEc3trl/LDFFHzGIrw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "lodash.assign": "^4.2.0", - "lodash.isobject": "^3.0.2", - "lodash.merge": "^4.6.0", - "rcfinder": "^0.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4460,6 +4207,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -4472,6 +4220,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -4483,13 +4232,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/replace-ext": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -4499,6 +4250,7 @@ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -4508,6 +4260,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4517,6 +4270,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4526,17 +4280,19 @@ "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4555,6 +4311,7 @@ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -4567,6 +4324,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4576,6 +4335,7 @@ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, + "license": "MIT", "dependencies": { "value-or-function": "^4.0.0" }, @@ -4587,46 +4347,26 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^6.0.1" }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { @@ -4646,29 +4386,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "dev": true, + "license": "MIT", "optional": true }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sandwich-stream": { "version": "1.0.0", @@ -4683,6 +4417,7 @@ "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", "dev": true, + "license": "MIT", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -4692,97 +4427,12 @@ "postcss": "^8.3.11" } }, - "node_modules/sanitize-html/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/sanitize-html/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/sanitize-html/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, "node_modules/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "optional": true, + "devOptional": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4798,6 +4448,7 @@ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", "dev": true, + "license": "MIT", "dependencies": { "sver": "^1.8.3" }, @@ -4809,7 +4460,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, + "devOptional": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -4822,6 +4474,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -4830,6 +4483,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4841,6 +4496,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4850,6 +4507,7 @@ "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, + "license": "MIT", "dependencies": { "should-equal": "^2.0.0", "should-format": "^3.0.3", @@ -4863,6 +4521,7 @@ "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, + "license": "MIT", "dependencies": { "should-type": "^1.4.0" } @@ -4872,6 +4531,7 @@ "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", "dev": true, + "license": "MIT", "dependencies": { "should-type": "^1.3.0", "should-type-adaptors": "^1.0.1" @@ -4881,13 +4541,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/should-type-adaptors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, + "license": "MIT", "dependencies": { "should-type": "^1.3.0", "should-util": "^1.0.0" @@ -4897,12 +4559,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -4921,6 +4585,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -4936,6 +4601,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -4953,6 +4619,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -4968,10 +4635,17 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-concat": { "version": "1.0.1", @@ -4991,6 +4665,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true }, "node_modules/simple-get": { @@ -5011,6 +4686,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "decompress-response": "^6.0.0", @@ -5018,20 +4694,12 @@ "simple-concat": "^1.0.0" } }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5041,24 +4709,17 @@ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/stream-composer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", "dev": true, + "license": "MIT", "dependencies": { "streamx": "^2.13.2" } @@ -5067,18 +4728,21 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.1.0" } @@ -5088,6 +4752,7 @@ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "devOptional": true, + "license": "MIT", "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", @@ -5098,6 +4763,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -5106,6 +4772,8 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5120,6 +4788,8 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5130,11 +4800,13 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^5.0.0" }, "engines": { "node": ">=8" @@ -5145,6 +4817,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5153,18 +4827,24 @@ } }, "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5176,6 +4856,8 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5188,6 +4870,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5200,14 +4883,16 @@ "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", "dev": true, + "license": "MIT", "optionalDependencies": { "semver": "^6.3.0" } }, "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -5220,6 +4905,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", "optional": true, "dependencies": { "bl": "^4.0.3", @@ -5237,66 +4923,60 @@ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "devOptional": true, + "license": "MIT", "dependencies": { "streamx": "^2.12.5" } }, + "node_modules/ternary-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz", + "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.1", + "fork-stream": "^0.0.4", + "merge-stream": "^2.0.0", + "through2": "^3.0.1" + } + }, + "node_modules/ternary-stream/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, - "node_modules/text-decoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", - "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==" - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "license": "MIT", "dependencies": { "readable-stream": "3" } }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5309,6 +4989,7 @@ "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, + "license": "MIT", "dependencies": { "streamx": "^2.12.5" }, @@ -5316,25 +4997,18 @@ "node": ">=10.13.0" } }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", "optional": true, "dependencies": { "safe-buffer": "^5.0.1" @@ -5347,6 +5021,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -5354,41 +5030,25 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5397,13 +5057,15 @@ "version": "1.13.7", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/undertaker": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, + "license": "MIT", "dependencies": { "bach": "^2.0.1", "fast-levenshtein": "^3.0.0", @@ -5419,6 +5081,7 @@ "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -5428,14 +5091,24 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "dev": true, + "license": "MIT", "dependencies": { "fastest-levenshtein": "^1.0.7" } }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -5443,13 +5116,15 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/v8flags": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -5459,6 +5134,7 @@ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -5468,6 +5144,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", "devOptional": true, + "license": "MIT", "dependencies": { "clone": "^2.1.2", "remove-trailing-separator": "^1.1.0", @@ -5483,6 +5160,7 @@ "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^5.0.0", "vinyl": "^3.0.0" @@ -5496,6 +5174,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -5521,6 +5200,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -5531,6 +5211,7 @@ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", "dev": true, + "license": "MIT", "dependencies": { "fs-mkdirp-stream": "^2.0.1", "glob-stream": "^8.0.3", @@ -5556,6 +5237,7 @@ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, + "license": "MIT", "dependencies": { "convert-source-map": "^2.0.0", "graceful-fs": "^4.2.10", @@ -5572,6 +5254,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5582,133 +5266,49 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "Apache-2.0" }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" @@ -5717,94 +5317,32 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "engines": { - "node": ">=0.4" - } + "license": "Apache-2.0" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -5813,13 +5351,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true + "devOptional": true, + "license": "ISC" }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -5834,12 +5374,13 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-unparser": { @@ -5847,6 +5388,7 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -5857,4359 +5399,28 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/yoctodelay": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/yoctodelay/-/yoctodelay-1.2.0.tgz", - "integrity": "sha512-12y/P9MSig9/5BEhBgylss+fkHiCRZCvYR81eH35NW9uw801cvJt31EAV+WOLcwZRZbLiIQl/hxcdXXXFmGvXg==", - "dev": true, - "engines": { - "node": ">=4" - } - } - }, - "dependencies": { - "@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true - }, - "@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", - "dev": true, - "requires": { - "@babel/types": "^7.28.4" - } - }, - "@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - } - }, - "@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "requires": { - "eslint-visitor-keys": "^3.4.3" - } - }, - "@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==" - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "5.1.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - } - } - }, - "@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==" - }, - "@fastify/busboy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", - "integrity": "sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==", - "requires": { - "text-decoding": "^1.0.0" - } - }, - "@gulpjs/messages": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", - "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", - "dev": true - }, - "@gulpjs/to-absolute-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", - "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", - "dev": true, - "requires": { - "is-negated-glob": "^1.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "requires": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "5.1.0" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "@jsdoc/salty": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.3.tgz", - "integrity": "sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true - }, - "@sovpro/delimited-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", - "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==" - }, - "@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true - }, - "@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true - }, - "@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" - }, - "acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - }, - "dependencies": { - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", - "dev": true - } - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astring": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", - "dev": true - }, - "async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "async-done": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", - "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", - "dev": true, - "requires": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "stream-exhaust": "^1.0.2" - } - }, - "async-settle": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", - "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", - "dev": true, - "requires": { - "async-done": "^2.0.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "b4a": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.1.tgz", - "integrity": "sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==", - "devOptional": true, - "requires": {} - }, - "bach": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", - "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", - "dev": true, - "requires": { - "async-done": "^2.0.0", - "async-settle": "^2.0.0", - "now-and-later": "^3.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "bare-events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", - "devOptional": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "devOptional": true - }, - "beeper": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-2.1.0.tgz", - "integrity": "sha512-85+CcymhlP0jM4fs4ZMiMRl58VthoN9NRdvi+knXiQpP2UggkSre+A9rOZ0c2g2Vh+pEF5ZAlT+k8dsJNoanAA==", - "dev": true, - "requires": { - "yoctodelay": "^1.1.0" - } - }, - "big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==" - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "dev": true, - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "requires": { - "get-func-name": "^2.0.2" - } - }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "3.0.3", - "fsevents": "~2.3.2", - "glob-parent": "6.0.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "10.3.11" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "devOptional": true - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "copy-props": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", - "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", - "dev": true, - "requires": { - "each-props": "^3.0.0", - "is-plain-object": "^5.0.0" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", - "dev": true - }, - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepcopy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", - "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", - "requires": { - "type-detect": "^4.0.8" - } - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "detect-libc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", - "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", - "optional": true - }, - "diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "duplexify": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.2" - } - }, - "each-props": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", - "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", - "dev": true, - "requires": { - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", - "dev": true - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "7.0.6", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "5.1.0", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - } - } - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "events-universal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.0.tgz", - "integrity": "sha512-1KVXP1Oq8SiC0HsRraCryA4XGrZ2uJgIt/h4X+mB/8pzMKE7L8yBDN2lBlqJZeUwLAt7kf80m/5GX3HvoCrSGA==", - "devOptional": true, - "requires": { - "bare-events": "^2.7.0" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "7.0.6", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "devOptional": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" - } - }, - "flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", - "dev": true - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" - }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "requires": { - "cross-spawn": "7.0.6", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - } - } - }, - "form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, - "fs-mkdirp-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", - "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.8", - "streamx": "^2.12.0" - } - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "optional": true - }, - "glob": { - "version": "10.3.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.11.tgz", - "integrity": "sha512-0UAMm+R/z1E2bTR8eFnoIIlnrUK89m36i90Ez36ld9hLulfUPBgRCQtBy/v86ABx18jnGyrTvu4X3LAjIeBogw==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "5.1.0", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-stream": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", - "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", - "dev": true, - "requires": { - "@gulpjs/to-absolute-glob": "^4.0.0", - "anymatch": "^3.1.3", - "fastq": "^1.13.0", - "glob-parent": "6.0.2", - "is-glob": "^4.0.3", - "is-negated-glob": "^1.0.0", - "normalize-path": "^3.0.0", - "streamx": "^2.12.5" - } - }, - "glob-watcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", - "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", - "dev": true, - "requires": { - "async-done": "^2.0.0", - "chokidar": "^3.5.3" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "glogg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", - "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", - "dev": true, - "requires": { - "sparkles": "^2.1.0" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gulp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", - "integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==", - "dev": true, - "requires": { - "glob-watcher": "^6.0.0", - "gulp-cli": "^3.1.0", - "undertaker": "^2.0.0", - "vinyl-fs": "^4.0.2" - } - }, - "gulp-cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.1.0.tgz", - "integrity": "sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==", - "dev": true, - "requires": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.1", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", - "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" - } - }, - "gulp-jsdoc3": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-jsdoc3/-/gulp-jsdoc3-3.0.0.tgz", - "integrity": "sha512-rE2jAwCPA8XFi9g4V3Z3LPhZNjxuMTIYQVMjdqZAQpRfJITLVaUK3xfmiiNTMc7j+fT7pL8Q5yj7ZPRdwCJWNg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1", - "beeper": "^2.0.0", - "debug": "^4.1.1", - "fancy-log": "^1.3.3", - "ink-docstrap": "^1.3.2", - "jsdoc": "4.0.0", - "map-stream": "0.0.7", - "tmp": "0.2.4" - } - }, - "gulp-jshint": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-2.1.0.tgz", - "integrity": "sha512-sP3NK8Y/1e58O0PH9t6s7DAr/lKDSUbIY207oWSeufM6/VclB7jJrIBcPCsyhrFTCDUl9DauePbt6VqP2vPM5w==", - "dev": true, - "requires": { - "lodash": "^4.12.0", - "minimatch": "5.1.0", - "plugin-error": "^0.1.2", - "rcloader": "^0.2.2", - "through2": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "gulp-mocha": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-8.0.0.tgz", - "integrity": "sha512-FdbBydfzszaES/gXfwD6RFq1yJTj4Z6328R1yqsmhf+t7hW2aj9ZD9Hz8boQShjZ9J8/w6tQBM5mePb8K2pbqA==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "execa": "^5.0.0", - "mocha": "^8.3.0", - "plugin-error": "^1.0.1", - "supports-color": "^8.1.1", - "through2": "^4.0.2" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "3.0.3", - "fsevents": "~2.3.1", - "glob-parent": "6.0.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "10.3.11", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "5.1.0", - "ms": "2.1.3", - "nanoid": "3.3.8", - "serialize-javascript": "6.0.2", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "dependencies": { - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - } - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "gulplog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", - "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", - "dev": true, - "requires": { - "glogg": "^2.2.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "devOptional": true - }, - "ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" - }, - "import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true - }, - "ink-docstrap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.2.tgz", - "integrity": "sha512-STx5orGQU1gfrkoI/fMU7lX6CSP7LBGO10gXNgOZhwKhUqbtNjCkYSewJtNnLmWP1tAGN6oyEpG1HFPw5vpa5Q==", - "dev": true, - "requires": { - "moment": "^2.14.1", - "sanitize-html": "^2.13.0" - } - }, - "intercept-stdout": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/intercept-stdout/-/intercept-stdout-0.1.2.tgz", - "integrity": "sha512-Umb41Ryp5FzLurfCRAWx+jjNAk8jsw2RTk2XPIwus+86h/Y2Eb4DfOWof/mZ6FBww8SoO45rJSlg25054/Di9w==", - "dev": true, - "requires": { - "lodash.toarray": "^3.0.0" - } - }, - "interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-arrayish": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "requires": { - "hasown": "^2.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "requires": { - "xmlcreate": "^2.0.4" - } - }, - "jsdoc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.0.tgz", - "integrity": "sha512-tzTgkklbWKrlaQL2+e3NNgLcZu3NaK2vsHRx7tyHQ+H5jcB9Gx0txSd2eJWlMC/xU1+7LQu4s58Ry0RkuaEQVg==", - "dev": true, - "requires": { - "@babel/parser": "^7.9.4", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "14.1.0", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "jshint": { - "version": "2.13.6", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", - "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "5.1.0", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", - "dev": true - } - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json-text-sequence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-1.0.1.tgz", - "integrity": "sha512-AYvyAj02ukg85KiFMLphUMFWcNDCSwmNNuoqmpHUyBr/MJOB0c3rQrsJgzM2ELv25yozY9s9NrORuqdP1vNLXQ==", - "requires": { - "@sovpro/delimited-stream": "^1.1.0" - } - }, - "kerberos": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.2.tgz", - "integrity": "sha512-42O7+/1Zatsc3MkxaMPpXcIl/ukIrbQaGoArZEAr6GcEi2qhfprOBYOPhj+YvSMJkEkdpTjApUx+2DuWaKwRhg==", - "optional": true, - "requires": { - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.2" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", - "dev": true - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, - "last-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", - "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", - "dev": true - }, - "lead": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", - "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "liftoff": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", - "integrity": "sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==", - "dev": true, - "requires": { - "extend": "^3.0.2", - "findup-sync": "^5.0.0", - "fined": "^2.0.0", - "flagged-respawn": "^2.0.0", - "is-plain-object": "^5.0.0", - "rechoir": "^0.8.0", - "resolve": "^1.20.0" - } - }, - "linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "requires": { - "uc.micro": "^2.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A==", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.toarray": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-3.0.2.tgz", - "integrity": "sha512-ptkjUqvuHjTuMJJxiktJpZhxM5l60bEkfntJx+NFzdQd1bZVxfpTF1bhFYFqBrT4F0wZ1qx9KbVmHJV3Rfc7Tw==", - "dev": true, - "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, - "requires": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.1" - } - }, - "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true - }, - "markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, - "requires": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "dependencies": { - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - } - } - }, - "markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "requires": {} - }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "requires": { - "braces": "3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "2.0.2" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "optional": true - }, - "minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, - "mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "10.3.11", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "5.1.0", - "ms": "^2.1.3", - "serialize-javascript": "6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "mocha-junit-reporter": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.0.tgz", - "integrity": "sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "md5": "^2.3.0", - "mkdirp": "~1.0.4", - "strip-ansi": "^6.0.1", - "xml": "^1.0.1" - } - }, - "moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "multipart-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/multipart-stream/-/multipart-stream-2.0.1.tgz", - "integrity": "sha512-s2DhMKNH12ydxvLMIjE4lX5ZZsh0lusC1EWzXwg+haFfX/ODTt3+xYkUnGRLy119tVMLltbHnUiEKfuqdQySfA==", - "requires": { - "inherits": "^2.0.1", - "is-stream": "^1.0.1", - "sandwich-stream": "^1.0.0" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - } - } - }, - "mute-stdout": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", - "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "dev": true, - "optional": true, - "requires": { - "glob": "10.3.11" - } - } - } - }, - "nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true - }, - "napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true, - "optional": true - }, - "node-abi": { - "version": "3.77.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", - "optional": true, - "requires": { - "semver": "7.5.3" - } - }, - "node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, - "requires": { - "fn.name": "1.x.x" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - } - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - }, - "postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "requires": { - "nanoid": "3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - } - }, - "prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "optional": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "4.0.1", - "tar-fs": "2.1.3", - "tunnel-agent": "^0.6.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" - }, - "punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true - }, - "qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "requires": { - "side-channel": "^1.1.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "optional": true - } - } - }, - "rcfinder": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", - "integrity": "sha512-rhSo812VIVaX7cxl33KkllHRwfLvjZL3lQedWEpQ27YlMFKZbFZsiVdCcQn/Z0FauLWxIpKrNREGuHbJFSi0Lw==", - "dev": true, - "requires": { - "lodash.clonedeep": "^4.3.2" - } - }, - "rcloader": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.2.2.tgz", - "integrity": "sha512-hSkFcFiLb5buT0X1fNI023M6tn0ywblKzF0hGzVCkTjEggT5tQUZI+fCG71utA7NiEyiBEc3trl/LDFFHzGIrw==", - "dev": true, - "requires": { - "lodash.assign": "^4.2.0", - "lodash.isobject": "^3.0.2", - "lodash.merge": "^4.6.0", - "rcfinder": "^0.1.6" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "requires": { - "resolve": "^1.20.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "devOptional": true - }, - "replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "devOptional": true - }, - "replace-homedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", - "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "requires": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", - "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", - "dev": true, - "requires": { - "value-or-function": "^4.0.0" - } - }, - "reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "10.3.11" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true, - "optional": true - }, - "safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sandwich-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sandwich-stream/-/sandwich-stream-1.0.0.tgz", - "integrity": "sha512-2dkauRpV97eUtQOf5wCVRQzu95TSCl6cV+LxmZODzj8gmafWjtTXrDZNU8CdnaJM3A4zabtsdg+4Nju36ncbdQ==" - }, - "sanitize-html": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", - "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", - "dev": true, - "requires": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^8.0.0", - "is-plain-object": "^5.0.0", - "parse-srcset": "^1.0.2", - "postcss": "^8.3.11" - }, - "dependencies": { - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - } - } - }, - "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "semver-greatest-satisfied-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", - "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", - "dev": true, - "requires": { - "sver": "^1.8.3" - } - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "dev": true, - "requires": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dev": true, - "requires": { - "should-type": "^1.4.0" - } - }, - "should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", - "dev": true, - "requires": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", - "dev": true - }, - "should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "dev": true, - "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - } - }, - "side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - } - }, - "side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - } - }, - "side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "optional": true - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "optional": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true - }, - "sparkles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", - "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "stream-composer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", - "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", - "dev": true, - "requires": { - "streamx": "^2.13.2" - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" - }, - "stream-to-array": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", - "dev": true, - "requires": { - "any-promise": "^1.1.0" - } - }, - "streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "devOptional": true, - "requires": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sver": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", - "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", - "dev": true, - "requires": { - "semver": "7.5.3" - } - }, - "tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "devOptional": true, - "requires": { - "streamx": "^2.12.5" - } - }, - "text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "devOptional": true, - "requires": { - "b4a": "^1.6.4" - } - }, - "text-decoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", - "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==" - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true - }, - "tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "to-through": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", - "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", - "dev": true, - "requires": { - "streamx": "^2.12.5" - } - }, - "triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true - }, - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==" - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "dev": true - }, - "undertaker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", - "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", - "dev": true, - "requires": { - "bach": "^2.0.1", - "fast-levenshtein": "^3.0.0", - "last-run": "^2.0.0", - "undertaker-registry": "^2.0.0" - }, - "dependencies": { - "fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "dev": true, - "requires": { - "fastest-levenshtein": "^1.0.7" - } - } - } - }, - "undertaker-registry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", - "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8flags": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", - "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", - "dev": true - }, - "value-or-function": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", - "dev": true - }, - "vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", - "devOptional": true, - "requires": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - } - }, - "vinyl-contents": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", - "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", - "dev": true, - "requires": { - "bl": "^5.0.0", - "vinyl": "^3.0.0" - }, - "dependencies": { - "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } - } - }, - "vinyl-fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", - "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.3", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.1", - "vinyl-sourcemap": "^2.0.0" - } - }, - "vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", - "dev": true, - "requires": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, - "requires": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - } - }, - "winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, - "requires": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" - }, - "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" - }, - "ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true - }, - "xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "yoctodelay": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/yoctodelay/-/yoctodelay-1.2.0.tgz", - "integrity": "sha512-12y/P9MSig9/5BEhBgylss+fkHiCRZCvYR81eH35NW9uw801cvJt31EAV+WOLcwZRZbLiIQl/hxcdXXXFmGvXg==", - "dev": true } } } diff --git a/package.json b/package.json index 230b390f6..1640b3273 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,12 @@ "name": "marklogic", "description": "The official MarkLogic Node.js client API.", "homepage": "https://github.com/marklogic/node-client-api", - "version": "3.7.1", + "version": "4.0.0", "license": "Apache-2.0", "main": "./lib/marklogic.js", "scripts": { - "doc": "gulp doc", - "preinstall": "node checkNodeVersion", - "prestart": "node checkNodeVersion", - "test:setup": "node etc/test-setup.js", - "test:teardown": "node etc/test-teardown.js", - "test": "gulp test" + "doc": "jsdoc -c jsdoc.json lib/*.js README.md", + "lint": "gulp lint" }, "keywords": [ "marklogic", @@ -28,67 +24,65 @@ "xpath" ], "dependencies": { - "@fastify/busboy": "^1.1.0", - "big-integer": "^1.6.51", - "concat-stream": "^2.0.0", - "deepcopy": "^2.1.0", - "duplexify": "^4.1.2", - "eslint": "^8.57.0", - "form-data": "^4.0.4", - "json-text-sequence": "^1.0.1", - "multipart-stream": "^2.0.1", - "qs": "^6.11.0", - "through2": "^4.0.2" + "@fastify/busboy": "3.2.0", + "big-integer": "1.6.52", + "concat-stream": "2.0.0", + "duplexify": "4.1.3", + "form-data": "4.0.4", + "json-text-sequence": "4.0.2", + "multipart-stream": "2.0.1", + "qs": "6.14.0", + "through2": "4.0.2" }, "repository": { "type": "git", "url": "https://github.com/marklogic/node-client-api.git" }, "engines": { - "node": ">=16.14.0" + "node": ">=22.0.0" }, "devDependencies": { - "@jsdoc/salty": "0.2.3", - "ajv": "^8.11.0", - "ast-types": "^0.14.2", - "astring": "^1.8.3", - "bunyan": "^1.8.15", - "chai": "^4.4.1", - "core-util-is": "^1.0.3", - "gulp": "^5.0.0", - "gulp-jsdoc3": "^3.0.0", - "gulp-jshint": "^2.1.0", - "gulp-mocha": "^8.0.0", - "intercept-stdout": "^0.1.2", - "jshint": "^2.13.5", - "mocha": "^10.0.0", - "mocha-junit-reporter": "2.2.0", - "moment": "^2.29.4", - "read": "^1.0.7", - "sanitize-html": "^2.13.0", - "should": "^13.2.3", - "stream-to-array": "^2.3.0", - "winston": "^3.8.2" + "@jsdoc/salty": "0.2.9", + "ajv": "8.17.1", + "ast-types": "0.14.2", + "astring": "1.9.0", + "bunyan": "1.8.15", + "chai": "6.2.0", + "core-util-is": "1.0.3", + "eslint": "9.38.0", + "gulp": "5.0.1", + "gulp-eslint-new": "2.5.0", + "gulp-mocha": "10.0.1", + "intercept-stdout": "0.1.2", + "jsdoc": "4.0.5", + "mocha": "11.7.4", + "mocha-junit-reporter": "2.2.1", + "moment": "2.30.1", + "sanitize-html": "2.17.0", + "should": "13.2.3", + "stream-to-array": "2.3.0" }, "optionalDependencies": { "kerberos": "^2.0.1", "vinyl": "^3.0.0" }, "overrides": { + "ansi-styles": "4.3.0", + "ansi-regex": "5.0.1", "braces": "3.0.3", "brace-expansion": "2.0.2", - "cross-spawn":"7.0.6", - "jsdoc": "4.0.0", - "sanitize-html": "^2.13.0", - "markdown-it": "14.1.0", - "minimatch": "5.1.0", - "nanoid": "3.3.8", + "chalk": "4.1.2", + "color-convert": "3.1.0", + "color-name": "2.0.0", + "cross-spawn": "7.0.6", + "debug": "4.3.6", "glob": "10.3.11", "glob-parent": "6.0.2", - "simple-get": "4.0.1", + "minimatch": "5.1.0", "semver": "7.5.3", - "serialize-javascript": "6.0.2", - "tar-fs": "2.1.3", - "tmp": "0.2.4" + "strip-ansi": "6.0.0", + "supports-color": "7.2.0", + "tar-fs": "2.1.4", + "wrap-ansi": "6.2.0" } } diff --git a/test-app/build.gradle b/test-app/build.gradle index 7f09cda14..8c9e2afd0 100644 --- a/test-app/build.gradle +++ b/test-app/build.gradle @@ -1,7 +1,26 @@ -// Only used for setting up the test AppServer in MarkLogic +buildscript { + repositories { + mavenCentral() + // Needed for ml-gradle 6.2-SNAPSHOT + maven { + url = "https://bed-artifactory.bedford.progress.com:443/artifactory/ml-maven-snapshots/" + } + } + dependencies { + classpath "com.marklogic:ml-gradle:6.2-SNAPSHOT" + } +} + plugins { - id 'net.saliman.properties' version '1.5.2' - id "com.marklogic.ml-gradle" version "5.0.0" + id "net.saliman.properties" version "1.6.0" +} + +apply plugin: "com.marklogic.ml-gradle" + +// Using longer values as MarkLogic seems to take much longer to initialize with the Jenkins nodeclientpool. +mlWaitTillReady { + waitInterval = 3000 + maxAttempts = 40 } tasks.register("addMarkLogic12SchemasIfNecessary", com.marklogic.gradle.task.MarkLogicTask) { @@ -21,9 +40,38 @@ mlLoadSchemas.dependsOn addMarkLogic12SchemasIfNecessary * that requires SSL. */ ext { - def command = new com.marklogic.appdeployer.command.security.GenerateTemporaryCertificateCommand() - command.setTemplateIdOrName("node-client-ssl-template") - command.setCommonName("localhost") - command.setValidFor(365) - mlAppDeployer.commands.add(command) + def command = new com.marklogic.appdeployer.command.security.GenerateTemporaryCertificateCommand() + command.setTemplateIdOrName("node-client-ssl-template") + command.setCommonName("localhost") + command.setValidFor(365) + mlAppDeployer.commands.add(command) +} + +tasks.register("curlPeople", Exec) { + commandLine = [ + 'curl', + '--fail', + '--anyauth', '--user', 'admin:admin', + '-i', + '-X', 'POST', + '--data-binary', '@./src/main/turtle/people/people.ttl', + '-H', 'Content-type: text/turtle', + 'http://localhost:8079/v1/graphs?graph=/people' + ] } + +tasks.register("curlCompanies", Exec) { + commandLine = [ + 'curl', + '--fail', + '--anyauth', '--user', 'admin:admin', + '-i', + '-X', 'POST', + '--data-binary', '@./src/main/turtle/companies/companies_100.ttl', + '-H', 'Content-type: text/turtle', + 'http://localhost:8079/v1/graphs?graph=/optic/sparql/test/companies.ttl' + ] +} + +mlDeploy.finalizedBy curlPeople +mlDeploy.finalizedBy curlCompanies diff --git a/test-app/docker-compose-nightlies.yaml b/test-app/docker-compose-nightlies.yaml deleted file mode 100644 index 161a0fdeb..000000000 --- a/test-app/docker-compose-nightlies.yaml +++ /dev/null @@ -1,27 +0,0 @@ -version: '3.8' -# name: node-client-10-nightly -# name: node-client-10_0-10 -name: node-client-11-1-jenkins -#name: node-client-11-nightly-jenkins -# name: node-client-12-nightly - -services: - - marklogic: - #image: "ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-centos:10.0-nightly-centos-1.1.1" - #image: "marklogicdb/marklogic-db:latest-10.0-10" - image: "marklogicdb/marklogic-db:11.1.0-centos-1.1.0" - # image: "ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-centos:11.2.nightly-centos-1.1.2" - #image: "ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-centos:12.0.nightly-centos-1.1.1" - platform: linux/amd64 - environment: - - INSTALL_CONVERTERS=true - - MARKLOGIC_INIT=true - - MARKLOGIC_ADMIN_USERNAME=admin - - MARKLOGIC_ADMIN_PASSWORD=admin - volumes: - - ./containerLogs:/var/opt/MarkLogic/Logs - ports: - - 8000-8017:8000-8017 - - 8024-8029:8024-8029 - - 8079:8079 diff --git a/test-app/docker-compose.yaml b/test-app/docker-compose.yaml deleted file mode 100644 index cd0181d07..000000000 --- a/test-app/docker-compose.yaml +++ /dev/null @@ -1,18 +0,0 @@ -name: node-client - -services: - - marklogic: - image: "progressofficial/marklogic-db:latest" - # image: "ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-12" - platform: linux/amd64 - environment: - - INSTALL_CONVERTERS=true - - MARKLOGIC_INIT=true - - MARKLOGIC_ADMIN_USERNAME=admin - - MARKLOGIC_ADMIN_PASSWORD=admin - volumes: - - ./docker/marklogic/logs:/var/opt/MarkLogic/Logs - ports: - - 8000-8002:8000-8002 - - 8015-8017:8015-8017 diff --git a/test-app/gradle-e2e.properties b/test-app/gradle-e2e.properties new file mode 100644 index 000000000..fd2ac4ff5 --- /dev/null +++ b/test-app/gradle-e2e.properties @@ -0,0 +1,8 @@ +# Defines properties for loading data and modules for the so-called "e2e" tests in "test-complete". +mlDataPaths=src/main/ml-e2e-data +mlModulePaths=src/main/ml-e2e-modules + +mlDataDatabaseName=nodeOpticFunctionalTest +mlModulesDatabaseName=nodeOpticFunctionalTestModules + +mlNoRestServer=true diff --git a/test-app/gradle.properties b/test-app/gradle.properties index 3a31f8090..c2ae282df 100644 --- a/test-app/gradle.properties +++ b/test-app/gradle.properties @@ -1,7 +1,10 @@ +# See https://github.com/stevesaliman/gradle-properties-plugin +propertiesPluginEnvironmentNameProperty=env + mlAppName=unittest-nodeapi mlContentDatabaseName=unittest-nodeapi mlHost=localhost mlUsername=admin mlPassword=admin mlRestPort=8015 -mlContentForestsPerHost=3 \ No newline at end of file +mlContentForestsPerHost=3 diff --git a/test-app/gradle/wrapper/gradle-wrapper.jar b/test-app/gradle/wrapper/gradle-wrapper.jar index 249e5832f..1b33c55ba 100644 Binary files a/test-app/gradle/wrapper/gradle-wrapper.jar and b/test-app/gradle/wrapper/gradle-wrapper.jar differ diff --git a/test-app/gradle/wrapper/gradle-wrapper.properties b/test-app/gradle/wrapper/gradle-wrapper.properties index e411586a5..d4081da47 100644 --- a/test-app/gradle/wrapper/gradle-wrapper.properties +++ b/test-app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/test-app/gradlew b/test-app/gradlew index cccdd3d51..23d15a936 100755 --- a/test-app/gradlew +++ b/test-app/gradlew @@ -1,78 +1,129 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,92 +132,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/test-app/gradlew.bat b/test-app/gradlew.bat index f9553162f..5eed7ee84 100644 --- a/test-app/gradlew.bat +++ b/test-app/gradlew.bat @@ -1,84 +1,94 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/test-app/src/main/ml-config/databases/Schemas/schemas/permissions.properties b/test-app/src/main/ml-config/databases/Schemas/schemas/permissions.properties new file mode 100644 index 000000000..86366e369 --- /dev/null +++ b/test-app/src/main/ml-config/databases/Schemas/schemas/permissions.properties @@ -0,0 +1 @@ +*=app-user,read,app-user,execute,app-builder,read,app-builder,execute,rest-reader,read,rest-reader,execute,rest-reader,update,rest-admin,read,rest-admin,execute,rest-admin,update,rest-writer,read,rest-writer,execute,rest-writer,update diff --git a/test-app/src/main/ml-config/databases/Schemas/schemas/tde/exportingRows.tdex b/test-app/src/main/ml-config/databases/Schemas/schemas/tde/exportingRows.tdex new file mode 100644 index 000000000..f83ff6b04 --- /dev/null +++ b/test-app/src/main/ml-config/databases/Schemas/schemas/tde/exportingRows.tdex @@ -0,0 +1,35 @@ + + diff --git a/config-optic/qa-data/masterDetail.tdex b/test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail.tdex similarity index 100% rename from config-optic/qa-data/masterDetail.tdex rename to test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail.tdex diff --git a/config-optic/qa-data/masterDetail2.tdej b/test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail2.tdej similarity index 100% rename from config-optic/qa-data/masterDetail2.tdej rename to test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail2.tdej diff --git a/config-optic/qa-data/masterDetail3.tdej b/test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail3.tdej similarity index 100% rename from config-optic/qa-data/masterDetail3.tdej rename to test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail3.tdej diff --git a/config-optic/qa-data/masterDetail4.tdej b/test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail4.tdej similarity index 100% rename from config-optic/qa-data/masterDetail4.tdej rename to test-app/src/main/ml-config/databases/Schemas/schemas/tde/masterDetail4.tdej diff --git a/test-app/src/main/ml-config/databases/dmsdk-api-rest-server-modules.json b/test-app/src/main/ml-config/databases/dmsdk-api-rest-server-modules.json new file mode 100644 index 000000000..255145f39 --- /dev/null +++ b/test-app/src/main/ml-config/databases/dmsdk-api-rest-server-modules.json @@ -0,0 +1,3 @@ +{ + "database-name": "dmsdk-api-rest-server-modules" +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/dmsdk-api-rest-server.json b/test-app/src/main/ml-config/databases/dmsdk-api-rest-server.json new file mode 100644 index 000000000..aa3371d53 --- /dev/null +++ b/test-app/src/main/ml-config/databases/dmsdk-api-rest-server.json @@ -0,0 +1,6 @@ +{ + "database-name": "dmsdk-api-rest-server", + "schema-database": "Schemas", + "range-element-index": [ + ] +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/node-client-api-rest-server-modules.json b/test-app/src/main/ml-config/databases/node-client-api-rest-server-modules.json new file mode 100644 index 000000000..d7c25fe31 --- /dev/null +++ b/test-app/src/main/ml-config/databases/node-client-api-rest-server-modules.json @@ -0,0 +1,3 @@ +{ + "database-name": "node-client-api-rest-server-modules" +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/node-client-api-rest-server.json b/test-app/src/main/ml-config/databases/node-client-api-rest-server.json new file mode 100644 index 000000000..20cae4aa0 --- /dev/null +++ b/test-app/src/main/ml-config/databases/node-client-api-rest-server.json @@ -0,0 +1,226 @@ +{ + "database-name": "node-client-api-rest-server", + "schema-database": "Schemas", + "stemmed-searches": "basic", + "range-element-index": [ + { + "scalar-type": "double", + "namespace-uri": "", + "localname": "amt", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "double", + "namespace-uri": "", + "localname": "score", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "int", + "namespace-uri": "", + "localname": "popularity", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "int", + "namespace-uri": "", + "localname": "rate", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "dateTime", + "namespace-uri": "", + "localname": "datetime", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "dateTime", + "namespace-uri": "", + "localname": "systemStartTime", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "dateTime", + "namespace-uri": "", + "localname": "systemEndTime", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "dateTime", + "namespace-uri": "", + "localname": "validStartTime", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "dateTime", + "namespace-uri": "", + "localname": "validEndTime", + "range-value-positions": false, + "invalid-values": "ignore" + } + ], + "range-path-index": [ + { + "scalar-type": "decimal", + "path-expression": "price/amt", + "collation": "", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-path-index": [ + { + "path-expression": "gElemChildParent/gElemChildPoint", + "coordinate-system": "wgs84", + "point-format": "point", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-element-index": [ + { + "namespace-uri": "", + "localname": "gElemPoint", + "coordinate-system": "wgs84", + "point-format": "point", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "namespace-uri": "", + "localname": "gElemPointWgs84Double", + "coordinate-system": "wgs84/double", + "point-format": "point", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-element-child-index": [ + { + "parent-namespace-uri": "", + "parent-localname": "gElemChildParent", + "namespace-uri": "", + "localname": "gElemChildPoint", + "coordinate-system": "wgs84", + "point-format": "point", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "parent-namespace-uri": "", + "parent-localname": "gElemChildParentEtrs89Double", + "namespace-uri": "", + "localname": "gElemChildPointEtrs89Double", + "coordinate-system": "etrs89/double", + "point-format": "point", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-element-pair-index": [ + { + "parent-namespace-uri": "", + "parent-localname": "gElemPair", + "latitude-namespace-uri": "", + "latitude-localname": "latitude", + "longitude-namespace-uri": "", + "longitude-localname": "longitude", + "coordinate-system": "wgs84", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "parent-namespace-uri": "", + "parent-localname": "gElemPairRawDouble", + "latitude-namespace-uri": "", + "latitude-localname": "latitudeRawDouble", + "longitude-namespace-uri": "", + "longitude-localname": "longitudeRawDouble", + "coordinate-system": "raw/double", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-element-attribute-pair-index": [ + { + "parent-namespace-uri": "", + "parent-localname": "gAttrPair", + "latitude-namespace-uri": "", + "latitude-localname": "latitude", + "longitude-namespace-uri": "", + "longitude-localname": "longitude", + "coordinate-system": "wgs84", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-region-path-index": [ + { + "path-expression": "/root/item/point", + "coordinate-system": "wgs84", + "geohash-precision": 1, + "invalid-values": "reject" + }, + { + "path-expression": "/root/item/linestring", + "coordinate-system": "wgs84/double", + "geohash-precision": 2, + "invalid-values": "ignore" + }, + { + "path-expression": "/root/item/circle", + "coordinate-system": "wgs84/double", + "geohash-precision": 1, + "invalid-values": "reject" + }, + { + "path-expression": "/root/item/circle", + "coordinate-system": "wgs84", + "geohash-precision": 1, + "invalid-values": "reject" + }, + { + "path-expression": "/root/item/box", + "coordinate-system": "wgs84/double", + "geohash-precision": 2, + "invalid-values": "ignore" + }, + { + "path-expression": "/root/item/polygon", + "coordinate-system": "wgs84", + "geohash-precision": 3, + "invalid-values": "reject" + }, + { + "path-expression": "/root/item/complex-polygon", + "coordinate-system": "wgs84", + "geohash-precision": 1, + "invalid-values": "ignore" + } + ], + "element-word-lexicon": [ + { + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "defaultWordKey" + }, + { + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "taggedWordKey" + }, + { + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "otherKey" + } + ] +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/axes/temporal-system-axis.json b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/axes/temporal-system-axis.json new file mode 100644 index 000000000..37905abc6 --- /dev/null +++ b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/axes/temporal-system-axis.json @@ -0,0 +1,17 @@ +{ + "axis-name": "systemTime", + "axis-start": { + "element-reference": { + "namespace-uri": "", + "localname": "systemStartTime", + "scalar-type": "dateTime" + } + }, + "axis-end": { + "element-reference": { + "namespace-uri": "", + "localname": "systemEndTime", + "scalar-type": "dateTime" + } + } +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/axes/temporal-valid-axis.json b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/axes/temporal-valid-axis.json new file mode 100644 index 000000000..46313d9c7 --- /dev/null +++ b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/axes/temporal-valid-axis.json @@ -0,0 +1,17 @@ +{ + "axis-name": "validTime", + "axis-start": { + "element-reference": { + "namespace-uri": "", + "localname": "validStartTime", + "scalar-type": "dateTime" + } + }, + "axis-end": { + "element-reference": { + "namespace-uri": "", + "localname": "validEndTime", + "scalar-type": "dateTime" + } + } +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/collections/temporal-collection.json b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/collections/temporal-collection.json new file mode 100644 index 000000000..7530249ce --- /dev/null +++ b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/collections/temporal-collection.json @@ -0,0 +1,6 @@ +{ + "collection-name": "temporalCollection", + "system-axis": "systemTime", + "valid-axis": "validTime", + "option": [ "updates-safe" ] +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/collections/temporalCollectionLsqt.json b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/collections/temporalCollectionLsqt.json new file mode 100644 index 000000000..e4a827936 --- /dev/null +++ b/test-app/src/main/ml-config/databases/node-client-api-rest-server/temporal/collections/temporalCollectionLsqt.json @@ -0,0 +1,6 @@ +{ + "collection-name": "temporalCollectionLsqt", + "system-axis": "systemTime", + "valid-axis": "validTime", + "option": [ "updates-safe" ] +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/nodeOpticFunctionalTest.json b/test-app/src/main/ml-config/databases/nodeOpticFunctionalTest.json new file mode 100644 index 000000000..a549925af --- /dev/null +++ b/test-app/src/main/ml-config/databases/nodeOpticFunctionalTest.json @@ -0,0 +1,88 @@ +{ + "database-name": "nodeOpticFunctionalTest", + "schema-database": "Schemas", + "fast-element-trailing-wildcard-searches": true, + "two-character-searches": true, + "one-character-searches": true, + "triple-index": true, + "uri-lexicon": true, + "collection-lexicon": true, + "range-element-index": [ + { + "scalar-type": "string", + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "city", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "scalar-type": "string", + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "cityName", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "scalar-type": "long", + "namespace-uri": "", + "localname": "cityPopulation", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "scalar-type": "string", + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "cityTeam", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "scalar-type": "date", + "namespace-uri": "", + "localname": "date", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "scalar-type": "double", + "namespace-uri": "", + "localname": "distance", + "range-value-positions": false, + "invalid-values": "reject" + }, + { + "scalar-type": "int", + "namespace-uri": "", + "localname": "id", + "range-value-positions": false, + "invalid-values": "ignore" + }, + { + "scalar-type": "int", + "namespace-uri": "", + "localname": "popularity", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "geospatial-element-index": [ + { + "namespace-uri": "", + "localname": "latLonPoint", + "coordinate-system": "wgs84", + "point-format": "point", + "range-value-positions": false, + "invalid-values": "reject" + } + ], + "element-word-lexicon": [ + { + "collation": "http://marklogic.com/collation/", + "namespace-uri": "", + "localname": "city" + } + ] +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/databases/nodeOpticFunctionalTestModules.json b/test-app/src/main/ml-config/databases/nodeOpticFunctionalTestModules.json new file mode 100644 index 000000000..985ca1bc8 --- /dev/null +++ b/test-app/src/main/ml-config/databases/nodeOpticFunctionalTestModules.json @@ -0,0 +1,3 @@ +{ + "database-name": "nodeOpticFunctionalTestModules" +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/servers/dmsdk-api-rest-server.json b/test-app/src/main/ml-config/servers/dmsdk-api-rest-server.json new file mode 100644 index 000000000..3c6ad55d1 --- /dev/null +++ b/test-app/src/main/ml-config/servers/dmsdk-api-rest-server.json @@ -0,0 +1,13 @@ +{ + "server-name": "dmsdk-api-rest-server", + "port": 8025, + "server-type": "http", + "root": "/", + "content-database": "dmsdk-api-rest-server", + "modules-database": "dmsdk-api-rest-server-modules", + "default-error-format": "json", + "error-handler": "/MarkLogic/rest-api/error-handler.xqy", + "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", + "rewrite-resolves-globally": true, + "authentication": "digestbasic" +} \ No newline at end of file diff --git a/test-app/src/main/ml-config/servers/node-client-api-rest-server.json b/test-app/src/main/ml-config/servers/node-client-api-rest-server.json new file mode 100644 index 000000000..3b6758f67 --- /dev/null +++ b/test-app/src/main/ml-config/servers/node-client-api-rest-server.json @@ -0,0 +1,13 @@ +{ + "server-name": "node-client-api-rest-server", + "port": 8024, + "server-type": "http", + "root": "/", + "content-database": "node-client-api-rest-server", + "modules-database": "node-client-api-rest-server-modules", + "default-error-format": "json", + "error-handler": "/MarkLogic/rest-api/error-handler.xqy", + "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", + "rewrite-resolves-globally": true, + "authentication": "digestbasic" +} \ No newline at end of file diff --git a/test-complete-app/src/main/ml-config/servers/rest-api-server.json b/test-app/src/main/ml-config/servers/node-client-api-ssl-server.json similarity index 88% rename from test-complete-app/src/main/ml-config/servers/rest-api-server.json rename to test-app/src/main/ml-config/servers/node-client-api-ssl-server.json index 478198956..69f230b3b 100644 --- a/test-complete-app/src/main/ml-config/servers/rest-api-server.json +++ b/test-app/src/main/ml-config/servers/node-client-api-ssl-server.json @@ -10,5 +10,5 @@ "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", "rewrite-resolves-globally": true, "authentication": "digestbasic", - "ssl-certificate-template": "ssl-project-template" -} \ No newline at end of file + "ssl-certificate-template": "node-client-ssl-template" +} diff --git a/test-app/src/main/ml-config/servers/nodeOpticFunctionalTest.json b/test-app/src/main/ml-config/servers/nodeOpticFunctionalTest.json new file mode 100644 index 000000000..6baa4b869 --- /dev/null +++ b/test-app/src/main/ml-config/servers/nodeOpticFunctionalTest.json @@ -0,0 +1,13 @@ +{ + "server-name": "nodeOpticFunctionalTest", + "port": 8079, + "server-type": "http", + "root": "/", + "content-database": "nodeOpticFunctionalTest", + "modules-database": "nodeOpticFunctionalTestModules", + "default-error-format": "json", + "error-handler": "/MarkLogic/rest-api/error-handler.xqy", + "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", + "rewrite-resolves-globally": true, + "authentication": "digestbasic" +} \ No newline at end of file diff --git a/config-optic/qa-data/city1.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/city1.json similarity index 100% rename from config-optic/qa-data/city1.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/city1.json diff --git a/config-optic/qa-data/city2.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/city2.json similarity index 100% rename from config-optic/qa-data/city2.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/city2.json diff --git a/config-optic/qa-data/city3.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/city3.json similarity index 100% rename from config-optic/qa-data/city3.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/city3.json diff --git a/config-optic/qa-data/city4.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/city4.json similarity index 100% rename from config-optic/qa-data/city4.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/city4.json diff --git a/config-optic/qa-data/city5.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/city5.json similarity index 100% rename from config-optic/qa-data/city5.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/city5.json diff --git a/test-app/src/main/ml-e2e-data/optic/lexicon/test/collections.properties b/test-app/src/main/ml-e2e-data/optic/lexicon/test/collections.properties new file mode 100644 index 000000000..b00d41c82 --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/lexicon/test/collections.properties @@ -0,0 +1,4 @@ +city*=/optic/lexicon/test +doc*=/optic/lexicon/test +doc1.json=/optic/lexicon/test,/other/coll1,/other/coll2 +masterDetail*=/optic/view/test \ No newline at end of file diff --git a/config-optic/qa-data/doc1.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/doc1.json similarity index 100% rename from config-optic/qa-data/doc1.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/doc1.json diff --git a/config-optic/qa-data/doc2.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/doc2.json similarity index 100% rename from config-optic/qa-data/doc2.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/doc2.json diff --git a/config-optic/qa-data/doc3.json b/test-app/src/main/ml-e2e-data/optic/lexicon/test/doc3.json similarity index 100% rename from config-optic/qa-data/doc3.json rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/doc3.json diff --git a/config-optic/qa-data/doc4.xml b/test-app/src/main/ml-e2e-data/optic/lexicon/test/doc4.xml similarity index 100% rename from config-optic/qa-data/doc4.xml rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/doc4.xml diff --git a/config-optic/qa-data/doc5.xml b/test-app/src/main/ml-e2e-data/optic/lexicon/test/doc5.xml similarity index 100% rename from config-optic/qa-data/doc5.xml rename to test-app/src/main/ml-e2e-data/optic/lexicon/test/doc5.xml diff --git a/test-app/src/main/ml-e2e-data/optic/plan/test/collections.properties b/test-app/src/main/ml-e2e-data/optic/plan/test/collections.properties new file mode 100644 index 000000000..295f8fa8f --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/plan/test/collections.properties @@ -0,0 +1 @@ +*=/optic/plan/test \ No newline at end of file diff --git a/test-app/src/main/ml-e2e-data/optic/plan/test/planLexicons.json b/test-app/src/main/ml-e2e-data/optic/plan/test/planLexicons.json new file mode 100644 index 000000000..9a916e74b --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/plan/test/planLexicons.json @@ -0,0 +1,161 @@ +{ + "$optic": { + "ns": "op", + "fn": "operators", + "args": [ + { + "ns": "op", + "fn": "from-lexicons", + "args": [ + { + "uri1": { + "uriReference": { } + }, + "city": { + "jsonPropertyReference": { + "property": "city", + "scalarType": "string", + "collation": "http://marklogic.com/collation/", + "nullable": false + } + }, + "popularity": { + "jsonPropertyReference": { + "property": "popularity", + "scalarType": "int", + "nullable": false + } + }, + "date": { + "jsonPropertyReference": { + "property": "date", + "scalarType": "date", + "nullable": false + } + }, + "distance": { + "jsonPropertyReference": { + "property": "distance", + "scalarType": "double", + "nullable": false + } + }, + "point": { + "jsonPropertyReference": { + "property": "latLonPoint", + "scalarType": "point", + "coordinateSystem": "wgs84", + "nullable": false + } + } + }, + "myCity", + { + "ns": "op", + "fn": "fragment-id-col", + "args": [ + "fragId1" + ] + } + ] + }, + { + "ns": "op", + "fn": "join-inner", + "args": [ + { + "ns": "op", + "fn": "operators", + "args": [ + { + "ns": "op", + "fn": "from-lexicons", + "args": [ + { + "uri2": { + "uriReference": { } + }, + "cityName": { + "jsonPropertyReference": { + "property": "cityName", + "scalarType": "string", + "collation": "http://marklogic.com/collation/", + "nullable": false + } + }, + "cityTeam": { + "jsonPropertyReference": { + "property": "cityTeam", + "scalarType": "string", + "collation": "http://marklogic.com/collation/", + "nullable": false + } + } + }, + "myTeam", + { + "ns": "op", + "fn": "fragment-id-col", + "args": [ + "fragId2" + ] + } + ] + } + ] + }, + null, + null + ] + }, + { + "ns": "op", + "fn": "where", + "args": [ + { + "ns": "op", + "fn": "eq", + "args": [ + { + "ns": "op", + "fn": "viewCol", + "args": [ + "myCity", + "city" + ] + }, + { + "ns": "op", + "fn": "col", + "args": [ + "cityName" + ] + } + ] + } + ] + }, + { + "ns": "op", + "fn": "order-by", + "args": [ + [ + { + "ns": "op", + "fn": "asc", + "args": [ + { + "ns": "op", + "fn": "col", + "args": [ + "date" + ] + } + ] + } + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/test-app/src/main/ml-e2e-data/optic/plan/test/planTriples.json b/test-app/src/main/ml-e2e-data/optic/plan/test/planTriples.json new file mode 100644 index 000000000..bb854c693 --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/plan/test/planTriples.json @@ -0,0 +1,73 @@ +{ + "$optic": { + "ns": "op", + "fn": "operators", + "args": [ { + "ns": "op", + "fn": "from-triples", + "args": [ + [ { + "ns": "op", + "fn": "pattern", + "args": [ + [ { + "ns": "op", + "fn": "col", + "args": [ "player_id" ] + } ], + [ { + "ns": "sem", + "fn": "iri", + "args": [ "http://marklogic.com/other/bball/players#age" ] + } ], + [ { + "ns": "op", + "fn": "col", + "args": [ "player_age" ] + } ], null + ] + }, { + "ns": "op", + "fn": "pattern", + "args": [ + [ { + "ns": "op", + "fn": "col", + "args": [ "player_id" ] + } ], + [ { + "ns": "sem", + "fn": "iri", + "args": [ "http://marklogic.com/other/bball/players#name" ] + } ], + [ { + "ns": "op", + "fn": "col", + "args": [ "player_name" ] + } ], null + ] + }, { + "ns": "op", + "fn": "pattern", + "args": [ + [ { + "ns": "op", + "fn": "col", + "args": [ "player_id" ] + } ], + [ { + "ns": "sem", + "fn": "iri", + "args": [ "http://marklogic.com/other/bball/players#team" ] + } ], + [ { + "ns": "op", + "fn": "col", + "args": [ "player_team" ] + } ], null + ] + } ], "myPlayer", null, null + ] + } ] + } +} diff --git a/test-app/src/main/ml-e2e-data/optic/plan/test/planViews.json b/test-app/src/main/ml-e2e-data/optic/plan/test/planViews.json new file mode 100644 index 000000000..0a5f59ff0 --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/plan/test/planViews.json @@ -0,0 +1,117 @@ +{ + "$optic": { + "ns": "op", + "fn": "operators", + "args": [ + { + "ns": "op", + "fn": "from-view", + "args": [ + "opticFunctionalTest", + "detail", + "myDetail", + null + ] + }, + { + "ns": "op", + "fn": "join-inner", + "args": [ + { + "ns": "op", + "fn": "operators", + "args": [ + { + "ns": "op", + "fn": "from-view", + "args": [ + "opticFunctionalTest", + "master", + "myMaster", + null + ] + } + ] + }, + [ + { + "ns": "op", + "fn": "on", + "args": [ + { + "ns": "op", + "fn": "viewCol", + "args": [ + "myDetail", + "masterId" + ] + }, + { + "ns": "op", + "fn": "viewCol", + "args": [ + "myMaster", + "id" + ] + } + ] + }, + { + "ns": "op", + "fn": "on", + "args": [ + { + "ns": "op", + "fn": "viewCol", + "args": [ + "myMaster", + "id" + ] + }, + { + "ns": "op", + "fn": "viewCol", + "args": [ + "myDetail", + "id" + ] + } + ] + } + ], + null + ] + }, + { + "ns": "op", + "fn": "order-by", + "args": [ + [ + { + "ns": "op", + "fn": "desc", + "args": [ + { + "ns": "op", + "fn": "viewCol", + "args": [ + "myDetail", + "name" + ] + } + ] + } + ] + ] + }, + { + "ns": "op", + "fn": "offset-limit", + "args": [ + 1, + 100 + ] + } + ] + } +} \ No newline at end of file diff --git a/test-app/src/main/ml-e2e-data/optic/sparql/test/collections.properties b/test-app/src/main/ml-e2e-data/optic/sparql/test/collections.properties new file mode 100644 index 000000000..295f8fa8f --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/sparql/test/collections.properties @@ -0,0 +1 @@ +*=/optic/plan/test \ No newline at end of file diff --git a/test-app/src/main/ml-e2e-data/optic/sparql/test/dedupdoc1.xml b/test-app/src/main/ml-e2e-data/optic/sparql/test/dedupdoc1.xml new file mode 100644 index 000000000..76234f73b --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/sparql/test/dedupdoc1.xml @@ -0,0 +1,15 @@ + + world + + + http://marklogicsparql.com/id#5555 + http://marklogicsparql.com/addressbook#firstName + Jim + + + http://marklogicsparql.com/id#5555 + http://marklogicsparql.com/addressbook#firstName + Jim + + + \ No newline at end of file diff --git a/test-app/src/main/ml-e2e-data/optic/triple/test/collections.properties b/test-app/src/main/ml-e2e-data/optic/triple/test/collections.properties new file mode 100644 index 000000000..91f8d0dcb --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/triple/test/collections.properties @@ -0,0 +1,5 @@ +playerTripleSet.xml=/optic/player/triple/test +duplicatePlayerTripleSet.xml=/optic/player/triple/test +otherPlayerTripleSet.xml=/optic/other/player/triple/test +teamTripleSet.xml=/optic/team/triple/test +duplicateTeamTripleSet.xml=/optic/team/triple/test diff --git a/config-optic/qa-data/playerTripleSet.xml b/test-app/src/main/ml-e2e-data/optic/triple/test/duplicatePlayerTripleSet.xml similarity index 100% rename from config-optic/qa-data/playerTripleSet.xml rename to test-app/src/main/ml-e2e-data/optic/triple/test/duplicatePlayerTripleSet.xml diff --git a/config-optic/qa-data/teamTripleSet.xml b/test-app/src/main/ml-e2e-data/optic/triple/test/duplicateTeamTripleSet.xml similarity index 100% rename from config-optic/qa-data/teamTripleSet.xml rename to test-app/src/main/ml-e2e-data/optic/triple/test/duplicateTeamTripleSet.xml diff --git a/config-optic/qa-data/otherPlayerTripleSet.xml b/test-app/src/main/ml-e2e-data/optic/triple/test/otherPlayerTripleSet.xml similarity index 100% rename from config-optic/qa-data/otherPlayerTripleSet.xml rename to test-app/src/main/ml-e2e-data/optic/triple/test/otherPlayerTripleSet.xml diff --git a/test-app/src/main/ml-e2e-data/optic/triple/test/playerTripleSet.xml b/test-app/src/main/ml-e2e-data/optic/triple/test/playerTripleSet.xml new file mode 100755 index 000000000..c7345106b --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/triple/test/playerTripleSet.xml @@ -0,0 +1,376 @@ + + + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/name + John Doe + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/description + Describing John Doe + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/position + Pitcher + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/dob + 1981-05-04 + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/eff + 25.45 + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/age + 31 + + + http://marklogic.com/baseball/id#001 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/001 + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/name + Bob Brian + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/description + Describing Bob Brian + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/position + Outfielder + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/dob + 1999-01-15 + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/eff + 78.45 + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/age + 23 + + + http://marklogic.com/baseball/id#002 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/003 + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/name + Josh Ream + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/description + Describing Josh Ream + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/position + Pitcher + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/dob + 1985-11-30 + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/eff + 53.10 + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/age + 29 + + + http://marklogic.com/baseball/id#003 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/001 + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/name + Pat Crenshaw + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/description + Describing Pat Crenshaw + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/position + Catcher + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/dob + 1998-09-01 + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/eff + 33.89 + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/age + 25 + + + http://marklogic.com/baseball/id#004 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/005 + + + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/name + Pedro Barrozo + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/description + Describing Pedro Barrozo + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/position + Midfielder + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/dob + 1991-12-09 + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/eff + 41.65 + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/age + 19 + + + http://marklogic.com/baseball/id#005 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/002 + + + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/name + Aoki Yamada + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/description + Describing Aoki Yamada + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/position + First Base + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/dob + 1987-03-15 + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/eff + 55.2 + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/age + 34 + + + http://marklogic.com/baseball/id#006 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/003 + + + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/name + Matt Rose + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/description + Describing Matt Rose + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/position + Pitcher + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/dob + 1984-11-01 + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/eff + 32.89 + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/age + 29 + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/005 + + + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/name + Matt Rose + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/description + Describing Matt Rose + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/position + Pitcher + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/dob + 1984-11-01 + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/eff + 32.89 + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/age + 29 + + + http://marklogic.com/baseball/id#007 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/005 + + + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/name + Juan Leone + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/type + http://marklogic.com/baseball/players/bbtype/Dataset + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/description + Describing Juan Leone + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/position + Second Base + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/dob + 1993-08-17 + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/eff + 29.77 + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/age + 27 + + + http://marklogic.com/baseball/id#008 + http://marklogic.com/baseball/players/team + http://marklogic.com/mlb/team/id/001 + + + + diff --git a/test-app/src/main/ml-e2e-data/optic/triple/test/teamTripleSet.xml b/test-app/src/main/ml-e2e-data/optic/triple/test/teamTripleSet.xml new file mode 100755 index 000000000..9e18ba093 --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/triple/test/teamTripleSet.xml @@ -0,0 +1,56 @@ + + + + + http://marklogic.com/mlb/team/id/001 + http://marklogic.com/mlb/team/name + Giants + + + http://marklogic.com/mlb/team/id/001 + http://marklogic.com/mlb/team/city + San Francisco + + + http://marklogic.com/mlb/team/id/002 + http://marklogic.com/mlb/team/name + Athletics + + + http://marklogic.com/mlb/team/id/002 + http://marklogic.com/mlb/team/city + Oakland + + + http://marklogic.com/mlb/team/id/003 + http://marklogic.com/mlb/team/name + Padres + + + http://marklogic.com/mlb/team/id/003 + http://marklogic.com/mlb/team/city + San Diego + + + http://marklogic.com/mlb/team/id/004 + http://marklogic.com/mlb/team/name + Yankees + + + http://marklogic.com/mlb/team/id/004 + http://marklogic.com/mlb/team/city + New York + + + http://marklogic.com/mlb/team/id/005 + http://marklogic.com/mlb/team/name + Mariners + + + http://marklogic.com/mlb/team/id/005 + http://marklogic.com/mlb/team/city + Seattle + + + + \ No newline at end of file diff --git a/test-app/src/main/ml-e2e-data/optic/view/test/collections.properties b/test-app/src/main/ml-e2e-data/optic/view/test/collections.properties new file mode 100644 index 000000000..24e46cdc9 --- /dev/null +++ b/test-app/src/main/ml-e2e-data/optic/view/test/collections.properties @@ -0,0 +1 @@ +*=/optic/view/test \ No newline at end of file diff --git a/config-optic/qa-data/masterDetail.xml b/test-app/src/main/ml-e2e-data/optic/view/test/masterDetail.xml similarity index 100% rename from config-optic/qa-data/masterDetail.xml rename to test-app/src/main/ml-e2e-data/optic/view/test/masterDetail.xml diff --git a/config-optic/qa-data/masterDetail2.json b/test-app/src/main/ml-e2e-data/optic/view/test/masterDetail2.json similarity index 100% rename from config-optic/qa-data/masterDetail2.json rename to test-app/src/main/ml-e2e-data/optic/view/test/masterDetail2.json diff --git a/config-optic/qa-data/masterDetail3.json b/test-app/src/main/ml-e2e-data/optic/view/test/masterDetail3.json similarity index 100% rename from config-optic/qa-data/masterDetail3.json rename to test-app/src/main/ml-e2e-data/optic/view/test/masterDetail3.json diff --git a/config-optic/qa-data/masterDetail4.json b/test-app/src/main/ml-e2e-data/optic/view/test/masterDetail4.json similarity index 100% rename from config-optic/qa-data/masterDetail4.json rename to test-app/src/main/ml-e2e-data/optic/view/test/masterDetail4.json diff --git a/config-optic/qa-data/masterDetail5.json b/test-app/src/main/ml-e2e-data/optic/view/test/masterDetail5.json similarity index 100% rename from config-optic/qa-data/masterDetail5.json rename to test-app/src/main/ml-e2e-data/optic/view/test/masterDetail5.json diff --git a/config-optic/qa-data/mapperReducer.sjs b/test-app/src/main/ml-e2e-modules/root/optic/test/mapperReducer.sjs similarity index 73% rename from config-optic/qa-data/mapperReducer.sjs rename to test-app/src/main/ml-e2e-modules/root/optic/test/mapperReducer.sjs index c7aed2a76..79978ad1c 100644 --- a/config-optic/qa-data/mapperReducer.sjs +++ b/test-app/src/main/ml-e2e-modules/root/optic/test/mapperReducer.sjs @@ -1,18 +1,6 @@ /* - * Copyright (c) 2020 MarkLogic Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ 'use strict'; function arrayMapper(row) { diff --git a/config-optic/qa-data/companies_100.ttl b/test-app/src/main/turtle/companies/companies_100.ttl similarity index 100% rename from config-optic/qa-data/companies_100.ttl rename to test-app/src/main/turtle/companies/companies_100.ttl diff --git a/config-optic/qa-data/people.ttl b/test-app/src/main/turtle/people/people.ttl similarity index 100% rename from config-optic/qa-data/people.ttl rename to test-app/src/main/turtle/people/people.ttl diff --git a/test-basic-proxy/lib/negative/badAtomicParameterTest.js b/test-basic-proxy/lib/negative/badAtomicParameterTest.js index 9887f0532..bdfcc1838 100644 --- a/test-basic-proxy/lib/negative/badAtomicParameterTest.js +++ b/test-basic-proxy/lib/negative/badAtomicParameterTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const expect = require('chai').expect; diff --git a/test-basic-proxy/lib/negative/badExecutionTest.js b/test-basic-proxy/lib/negative/badExecutionTest.js index 646586029..68058d085 100644 --- a/test-basic-proxy/lib/negative/badExecutionTest.js +++ b/test-basic-proxy/lib/negative/badExecutionTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const expect = require('chai').expect; diff --git a/test-basic-proxy/lib/negative/badGenerationTest.js b/test-basic-proxy/lib/negative/badGenerationTest.js index 2145595ba..c127d264e 100644 --- a/test-basic-proxy/lib/negative/badGenerationTest.js +++ b/test-basic-proxy/lib/negative/badGenerationTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/negative/badIOTest.js b/test-basic-proxy/lib/negative/badIOTest.js index a2e717062..5093f21ba 100644 --- a/test-basic-proxy/lib/negative/badIOTest.js +++ b/test-basic-proxy/lib/negative/badIOTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/negative/badNodeParameterTest.js b/test-basic-proxy/lib/negative/badNodeParameterTest.js index 818392969..75c904caa 100644 --- a/test-basic-proxy/lib/negative/badNodeParameterTest.js +++ b/test-basic-proxy/lib/negative/badNodeParameterTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const expect = require('chai').expect; diff --git a/test-basic-proxy/lib/positive/atomicReturnMappingTest.js b/test-basic-proxy/lib/positive/atomicReturnMappingTest.js index 4753dd68d..c6a49303c 100644 --- a/test-basic-proxy/lib/positive/atomicReturnMappingTest.js +++ b/test-basic-proxy/lib/positive/atomicReturnMappingTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/positive/decoratorBaseTest.js b/test-basic-proxy/lib/positive/decoratorBaseTest.js index 271fab239..e22b5d1b3 100644 --- a/test-basic-proxy/lib/positive/decoratorBaseTest.js +++ b/test-basic-proxy/lib/positive/decoratorBaseTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/positive/decoratorCustomTest.js b/test-basic-proxy/lib/positive/decoratorCustomTest.js index 50bc31d6d..09458e462 100644 --- a/test-basic-proxy/lib/positive/decoratorCustomTest.js +++ b/test-basic-proxy/lib/positive/decoratorCustomTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/positive/mimetypeTest.js b/test-basic-proxy/lib/positive/mimetypeTest.js index ddffa4431..74cd147b2 100644 --- a/test-basic-proxy/lib/positive/mimetypeTest.js +++ b/test-basic-proxy/lib/positive/mimetypeTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/positive/sessionsTest.js b/test-basic-proxy/lib/positive/sessionsTest.js index 60d661fe3..d563cdcce 100644 --- a/test-basic-proxy/lib/positive/sessionsTest.js +++ b/test-basic-proxy/lib/positive/sessionsTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/positive/streamerTest.js b/test-basic-proxy/lib/positive/streamerTest.js index 57be09260..fc671f2bc 100644 --- a/test-basic-proxy/lib/positive/streamerTest.js +++ b/test-basic-proxy/lib/positive/streamerTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/lib/positive/supplementalAtomicParameterTest.js b/test-basic-proxy/lib/positive/supplementalAtomicParameterTest.js index 0dcc6af76..603f8b649 100644 --- a/test-basic-proxy/lib/positive/supplementalAtomicParameterTest.js +++ b/test-basic-proxy/lib/positive/supplementalAtomicParameterTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const expect = require('chai').expect; diff --git a/test-basic-proxy/lib/positive/supplementalNodeParameterTest.js b/test-basic-proxy/lib/positive/supplementalNodeParameterTest.js index 5a3851ff6..b3797c73b 100644 --- a/test-basic-proxy/lib/positive/supplementalNodeParameterTest.js +++ b/test-basic-proxy/lib/positive/supplementalNodeParameterTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const expect = require('chai').expect; diff --git a/test-basic-proxy/lib/testutil.js b/test-basic-proxy/lib/testutil.js index c68f77bc2..3f6db664f 100644 --- a/test-basic-proxy/lib/testutil.js +++ b/test-basic-proxy/lib/testutil.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic-proxy/testGenerator.js b/test-basic-proxy/testGenerator.js index aa73f8399..2dc0d8286 100644 --- a/test-basic-proxy/testGenerator.js +++ b/test-basic-proxy/testGenerator.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/annTopK.js b/test-basic/annTopK.js index 5ea4d8d88..af6e6339c 100644 --- a/test-basic/annTopK.js +++ b/test-basic/annTopK.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -13,98 +13,89 @@ let serverConfiguration = {}; const execPlan = pbb.execPlan; describe('tests for annTopK', function () { - this.timeout(5000) - before(function (done) { - try { - testlib.findServerConfiguration(serverConfiguration); - setTimeout(() => { - if (serverConfiguration.serverVersion < 12) { - this.skip(); - } - done(); - }, 3000); - } catch (error) { - done(error); + this.timeout(5000); + before(async function () { + await testlib.findServerConfigurationPromise(serverConfiguration); + + if (serverConfiguration.serverVersion < 12) { + this.skip(); } }); - it('annTopK without PlanAnnTopKOptions', function (done) { - execPlan(p + it('annTopK without PlanAnnTopKOptions', async function () { + const response = await execPlan(p .fromView('vectors', 'persons', '') .annTopK(10, p.col('embedding'), p.vec.vector([1.1, 2.2, 3.3]), p.col('distance')) .orderBy(p.col('name')) - ) - .then(function (response) { - verifyResults(response.rows, done); - }) - .catch(error => done(error)); + ); + verifyResults(response.rows); }); - it('annTopK with PlanAnnTopKOptions as a single string', function (done) { - execPlan(p + it('annTopK with PlanAnnTopKOptions as a single string', async function () { + const response = await execPlan(p .fromView('vectors', 'persons', '') .annTopK(10, p.col('embedding'), p.vec.vector([1.1, 2.2, 3.3]), p.col('distance'), 'onlyIndex') .orderBy(p.col('name')) - ) - .then(function (response) { - verifyResults(response.rows, done); - }) - .catch(error => done(error)); + ); + verifyResults(response.rows); }); - it('annTopK with PlanAnnTopKOptions as an array of string', function (done) { - execPlan(p + it('annTopK with PlanAnnTopKOptions as an array of string', async function () { + const response = await execPlan(p .fromView('vectors', 'persons', '') .annTopK(10, p.col('embedding'), p.vec.vector([1.1, 2.2, 3.3]), p.col('distance'), ['onlyIndex', "maxDistance=0.15", "searchFactor=1.0"]) .orderBy(p.col('name')) - ).then(function (response) { - verifyResults(response.rows, done); - }).catch(error => done(error)); + ); + verifyResults(response.rows); }); - it('annTopK with PlanAnnTopKOptions as a map', function (done) { + it('annTopK with PlanAnnTopKOptions as a map', async function () { const planAnnTopKOptionsMap = new Map(); planAnnTopKOptionsMap.set("maxDistance", 0.158454656600952); planAnnTopKOptionsMap.set("searchFactor", 10.0); - execPlan(p + const response = await execPlan(p .fromView('vectors', 'persons', '') .annTopK(10, p.col('embedding'), p.vec.vector([1.1, 2.2, 3.3]), p.col('distance'), planAnnTopKOptionsMap) .orderBy(p.col('name')) - ) - .then(function (response) { - verifyResults(response.rows, done); - }) - .catch(error => done(error)); + ); + verifyResults(response.rows); }); - it('annTopK with invalid PlanAnnTopKOptions', function (done) { + it('annTopK with invalid PlanAnnTopKOptions', async function () { const planAnnTopKOptionsMap = new Map(); planAnnTopKOptionsMap.set('invalid', 10.0); - try{ - execPlan(p - .fromView('vectors', 'persons', '') - .annTopK(10, p.col('embedding'), p.vec.vector([1.1, 2.2, 3.3]), p.col('distance'), - planAnnTopKOptionsMap) - .orderBy(p.col('name')) - ); - } catch(error){ - assert(error.message.toString().includes('options argument at 4 of PlanModifyPlan.annTopK() has invalid key- invalid')) - done(); - } + + await assert.rejects( + async () => { + await execPlan(p + .fromView('vectors', 'persons', '') + .annTopK(10, p.col('embedding'), p.vec.vector([1.1, 2.2, 3.3]), p.col('distance'), + planAnnTopKOptionsMap) + .orderBy(p.col('name')) + ); + }, + (error) => { + return error.message.toString().includes('options argument at 4 of PlanModifyPlan.annTopK() has invalid key- invalid'); + } + ); }); - function verifyResults(rows, done){ - try { - assert(rows.length === 2, 'Expecting both rows in the view to be returned.'); - assert(rows[0].name.value === 'Alice'); - assert(rows[0].distance.type === 'xs:float', 'Verifying that the distance column was populated.'); - assert(rows[1].name.value === 'Bob'); - assert(rows[1].distance.type === 'xs:float', 'Verifying that the distance column was populated.'); - done(); - } catch (error){ - done(error) - } + function verifyResults(rows) { + + assert(Array.isArray(rows), 'Expected rows to be an array'); + assert(rows.length === 2, 'Expecting both rows in the view to be returned.'); + assert(rows[0].name.value === 'Alice'); + assert(rows[0].distance.type === 'xs:float', 'Verifying that the distance column was populated.'); + assert(rows[1].name.value === 'Bob'); + assert(rows[1].distance.type === 'xs:float', 'Verifying that the distance column was populated.'); + + // Verify each row has the expected structure + rows.forEach((row, index) => { + assert(row.name && row.name.value, `Row ${index} should have a name with a value`); + assert(row.distance && row.distance.type === 'xs:float', + `Row ${index} should have a distance column of type xs:float`); + }); } }); \ No newline at end of file diff --git a/test-basic/basePath-test.js b/test-basic/basePath-test.js index 082acc234..744b6363b 100644 --- a/test-basic/basePath-test.js +++ b/test-basic/basePath-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const testconfig = require('../etc/test-config.js'); @@ -17,7 +17,9 @@ describe('basePath tests', function() { testconfig.restWriterConnectionWithBasePath.basePath = 'invalid'; const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnectionWithBasePath); dbWriter.documents.write(writeObject) - .result(function(response){}) + .result(function(response){ + done(new Error('Expecting an error to be thrown due to invalid basePath')); + }) .catch(err=> { assert(err.toString().includes('path: invalid/v1/documents')); @@ -29,7 +31,9 @@ describe('basePath tests', function() { testconfig.restWriterConnectionWithBasePath.basePath = '/invalid'; const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnectionWithBasePath); dbWriter.documents.write(writeObject) - .result(function(response){}) + .result(function(response){ + done(new Error('Expecting an error to be thrown due to invalid basePath with a leading slash')); + }) .catch(err=> { assert(err.toString().includes('path: /invalid/v1/documents')); @@ -41,7 +45,9 @@ describe('basePath tests', function() { testconfig.restWriterConnectionWithBasePath.basePath = 'invalid/'; const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnectionWithBasePath); dbWriter.documents.write(writeObject) - .result(function(response){}) + .result(function(response){ + done(new Error('Expecting an error to be thrown due to invalid basePath with a trailing slash')); + }) .catch(err=> { assert(err.toString().includes('path: invalid/v1/documents')); @@ -53,7 +59,9 @@ describe('basePath tests', function() { testconfig.restWriterConnectionWithBasePath.basePath = '/invalid/'; const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnectionWithBasePath); dbWriter.documents.write(writeObject) - .result(function(response){}) + .result(function(response){ + done(new Error('Expecting an error to be thrown due to invalid basePath with starting and trailing slashes')); + }) .catch(err=> { assert(err.toString().includes('path: /invalid/v1/documents')); @@ -65,7 +73,9 @@ describe('basePath tests', function() { testconfig.restWriterConnectionWithBasePath.basePath = '//invalid//'; const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnectionWithBasePath); dbWriter.documents.write(writeObject) - .result(function(response){}) + .result(function(response){ + done(new Error('Expecting an error to be thrown due to invalid basePath with multiple starting and trailing slashes')); + }) .catch(err=> { try{ diff --git a/test-basic/bindingFromParam.js b/test-basic/bindingFromParam.js index 1dd6b558a..ab9da7045 100644 --- a/test-basic/bindingFromParam.js +++ b/test-basic/bindingFromParam.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const testconfig = require('../etc/test-config.js'); @@ -111,6 +111,7 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', 'qualifier', outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate,null, temp); + done(new Error('Expecting an error to be thrown due to invalid row-col-types argument')); } catch (e) { e.toString().should.equal('Error: row-col-types argument at 2 of PlanBuilder.fromParam() has invalid argument for PlanRowColTypes value: [object Object]'); done(); @@ -157,6 +158,7 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', 'qualifier', outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate, null, temp); + done(new Error('Expecting an error to be thrown due to invalid row-col-types argument')); } catch (e) { e.toString().should.equal('Error: row-col-types argument at 2 of PlanBuilder.fromParam() has another type than string'); done(); @@ -205,7 +207,11 @@ describe('optic-update fromParam tests', function(){ }, {"column": "lastName", "type": "string"}]; const planBuilderTemplate = op.fromParam('myDocs', 'qualifier', outputCols); const temp = {myDocs: rows}; - db.rows.query(planBuilderTemplate, null, temp).catch(e => { + db.rows.query(planBuilderTemplate, null, temp) + .then(function(response){ + done(new Error('Expecting an error to be thrown due to null value for non-nullable column')); + }) + .catch(e => { e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); done(); }); @@ -221,7 +227,11 @@ describe('optic-update fromParam tests', function(){ }, {"column": "lastName", "type": "string", "nullable": true}]; const planBuilderTemplate = op.fromParam('myDocs', 'qualifier', outputCols); const temp = {myDocs: rows}; - db.rows.query(planBuilderTemplate, null,temp).catch(e => { + db.rows.query(planBuilderTemplate, null,temp) + .then(function(response){ + done(new Error('Expecting an error to be thrown due to invalid row-col-types argument')); + }) + .catch(e => { e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); done(); }); @@ -237,7 +247,11 @@ describe('optic-update fromParam tests', function(){ }, {"column": "lastName", "type": "string", "nullable": true}]; const planBuilderTemplate = op.fromParam('myDocs', 'qualifier', outputCols); const temp = {myDocs: rows}; - db.rows.query(planBuilderTemplate,null, temp).catch(e => { + db.rows.query(planBuilderTemplate,null, temp) + .then(function(response){ + done(new Error('Expecting an error to be thrown due to invalid row-col-types argument')); + }) + .catch(e => { e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); done(); }); @@ -255,10 +269,13 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', null, outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate,null, temp) - .catch(e => { - e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); - done(); - }); + .then(function(response){ + done(new Error('Expecting an error to be thrown due to null value for non-nullable column')); + }) + .catch(e => { + e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); + done(); + }); } catch (e) { done(); } @@ -274,10 +291,13 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', null, outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate, null,temp) - .catch(e => { - e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); - done(); - }); + .then(function(response){ + done(new Error('Expecting an error to be thrown due to extra non-defined column types')); + }) + .catch(e => { + e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); + done(); + }); }); @@ -290,10 +310,13 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', null, outputCols); const temp = {bindingParam: rows}; db.rows.query(planBuilderTemplate, null, temp) - .catch(e => { - e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); - done(); - }); + .then(function(response){ + done(new Error('Expecting an error to be thrown due to non-consistent binding argument name')); + }) + .catch(e => { + e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); + done(); + }); }); @@ -311,10 +334,13 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', null, outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate, null, temp) - .catch(e => { - e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); - done(); - }); + .then(function(response){ + done(new Error('Expecting an error to be thrown due to mismatch type')); + }) + .catch(e => { + e.toString().includes('Error: binding arguments /v1/rows: cannot process response with 500 status'); + done(); + }); }); @@ -333,6 +359,7 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', 1234, outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate, null, temp); + done(new Error('Expecting an error to be thrown due to invalid qualifier argument')); } catch (e) { e.toString().includes('Error: qualifier argument at 1 of PlanBuilder.fromParam() must be a XsString value'); done(); @@ -353,11 +380,17 @@ describe('optic-update fromParam tests', function(){ const planBuilderTemplate = op.fromParam('myDocs', null, outputCols); const temp = {myDocs: rows}; db.rows.query(planBuilderTemplate, null, temp).then(res => { - const rows = res.rows; - rows[0].id.value.should.equal(1); - rows[0].firstName.value.should.equal("firstName_1"); - rows[0].lastName.value.should.equal("lastName_1"); - done(); + try { + const rows = res.rows; + rows[0].id.value.should.equal(1); + rows[0].firstName.value.should.equal("firstName_1"); + rows[0].lastName.value.should.equal("lastName_1"); + done(); + } catch (e) { + done(e); + } + }).catch(e => { + done(e); }); }); diff --git a/test-basic/client.js b/test-basic/client.js index 1edff42c8..a26fcf053 100644 --- a/test-basic/client.js +++ b/test-basic/client.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var assert = require('assert'); var should = require('should'); @@ -87,13 +87,21 @@ describe('database clients', function () { done(); }); it('should use a custom agent', function (done) { - agentDb.connectionParams.agent.options.keepAliveTimeoutMsecs.should.equal(1000); - done(); + try { + agentDb.connectionParams.agent.options.keepAliveTimeoutMsecs.should.equal(1000); + done(); + } catch(e){ + done(e); + } }); it('should create a timestamp', function (done) { let timestamp = db.createTimestamp('123'); - timestamp.value.should.equal('123'); - done(); + try { + timestamp.value.should.equal('123'); + done(); + } catch(e){ + done(e); + } }); it('should throw Error when server expects DIGEST and authType is CERTIFICATE', function (done) { const db = marklogic.createDatabaseClient({ @@ -108,6 +116,7 @@ describe('database clients', function () { .result(function (documents) { documents.forEach(function (document) { }); + done(new Error('Expecting an error to be thrown due to invalid authentication configuration')); }) .catch(error => { assert(error.toString().includes('response with invalid 401 status with path: /v1/search')); @@ -143,7 +152,9 @@ describe('database clients', function () { contentType: 'application/json', content: '{"key1":"value 1"}' }) - .result() + .result(function (document) { + done(new Error('Expecting an error to be thrown due to invalid SSL configuration')); + }) .catch(error => { try{ assert(error.message.toString().includes('You have attempted to access an HTTP server using HTTPS. Please check your configuration.') || @@ -158,6 +169,7 @@ describe('database clients', function () { it('should throw error when authType is OAuth and oauthToken is missing', function(done){ try { marklogic.createDatabaseClient(testconfig.restConnectionForOauth); + done(new Error('Expecting an error to be thrown due to missing oauthToken')); } catch(error){ assert(error.message.toString().includes('oauthToken required for OAuth authentication. ')); done(); diff --git a/test-basic/cloud_authentication-test.js b/test-basic/cloud_authentication-test.js index 0846fa990..8eb8f75e0 100644 --- a/test-basic/cloud_authentication-test.js +++ b/test-basic/cloud_authentication-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const marklogic = require('../'); @@ -15,6 +15,7 @@ describe('cloud-authentication tests', function() { host: 'invalid', authType: 'cloud' }); + done(new Error('Expecting an error to be thrown due to missing apiKey')); } catch(error) { assert(error.toString().includes('apiKey needed for MarkLogic cloud authentication.')); done(); @@ -35,7 +36,9 @@ describe('cloud-authentication tests', function() { } }); - it('should throw error with invalid apiKey.', function (done) { + // skip for now, support.beta.marklogic.cloud is not working for me. Not sure if this should be in test suite anyway. + it.skip('should throw error with invalid apiKey.', function (done) { + this.timeout(10000); let db = marklogic.createDatabaseClient({ host: 'support.beta.marklogic.cloud', authType: 'cloud', @@ -46,7 +49,6 @@ describe('cloud-authentication tests', function() { try { // Also verified that it throws 'Error: User's API Key is expired.' when API key has expired a few seconds ago. expect(()=>db.documents.write(writeObject).throws(Error('API Key is not valid.'))); - done(); } catch (error) { done(error); } diff --git a/test-basic/data/echoModule.js b/test-basic/data/echoModule.js index 27425c1fc..12dd78ab1 100644 --- a/test-basic/data/echoModule.js +++ b/test-basic/data/echoModule.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var test; var extra; diff --git a/test-basic/data/timestampTransform.js b/test-basic/data/timestampTransform.js index fd672aa6c..a906c930c 100644 --- a/test-basic/data/timestampTransform.js +++ b/test-basic/data/timestampTransform.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ function timestampTransform(context, params, document) { var newDoc = document.toObject(); diff --git a/test-basic/data/transformAll_transform.js b/test-basic/data/transformAll_transform.js index 877a2b938..1dc63615e 100644 --- a/test-basic/data/transformAll_transform.js +++ b/test-basic/data/transformAll_transform.js @@ -1,5 +1,5 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ function transform_function(context, params, content) { let document = content.toObject(); diff --git a/test-basic/data/versionService.js b/test-basic/data/versionService.js index 6f1573514..9234fe8ed 100644 --- a/test-basic/data/versionService.js +++ b/test-basic/data/versionService.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ function getVersionService(context, params) { return { diff --git a/test-basic/digestauth-fips-nomd5load.js b/test-basic/digestauth-fips-nomd5load.js index fd244643f..e0192feca 100644 --- a/test-basic/digestauth-fips-nomd5load.js +++ b/test-basic/digestauth-fips-nomd5load.js @@ -1,12 +1,12 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); describe('FIPS test - ensure MD5 hash digester object is not loaded by default on require of www-authenticate module', function () { - it('should not automatically load MD5 digest algorithm function when requiring www-authenticate module', function () { + it('should not automatically load MD5 digest algorithm function when requiring www-authenticate module', function (done) { /** * Attempt to load/require the www-authenticate module after applying a monkey-patch * to the crypto.createHash function to intercept any attempts to create an MD5 hash @@ -42,7 +42,9 @@ describe('FIPS test - ensure MD5 hash digester object is not loaded by default o // Require the module - should not call to get MD5 digester so should not throw (() => require('../lib/www-authenticate-patched/md5')).should.not.throw(); (() => require('../lib/www-authenticate-patched/www-authenticate')).should.not.throw(); - + done(); + } catch (e) { + done(e); } finally { // Restore the original createHash function to avoid side effects // This MUST execute to avoid breaking other tests! diff --git a/test-basic/docColTypes-test.js b/test-basic/docColTypes-test.js index 9303793c1..4e01ab7be 100644 --- a/test-basic/docColTypes-test.js +++ b/test-basic/docColTypes-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); @@ -46,6 +46,7 @@ describe('optic-update docColTypes tests', function() { const plan = op.fromParam('bindingParam', null, op.docColTypes(op.col('uri'))); const temp = {bindingParam: rows}; db.rows.query(plan, null, temp); + done(new Error("Expected an error to be thrown due to only 1 argument to fromParam")); } catch (e) { e.toString().includes('Error: PlanBuilder.docColTypes takes a maximum of 0 arguments but received: 1'); done(); @@ -116,6 +117,7 @@ describe('optic-update docColTypes tests', function() { try { db.rows.query(op.fromDocDescriptors(docsDescriptor).write(op.docColTypes())); + done(new Error('Expecting an error to be thrown due to invalid document descriptor')); } catch (e) { e.toString().includes('Error: doc-cols argument at 0 of PlanModifyPlan.write() must have type PlanDocColsIdentifier'); done(); diff --git a/test-basic/documents-core.js b/test-basic/documents-core.js index 186426d9d..fc8ccf045 100644 --- a/test-basic/documents-core.js +++ b/test-basic/documents-core.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); @@ -58,7 +58,7 @@ describe('document content', function(){ document.content.key1.should.equal('value 1'); done(); }) - .catch(error=> done(error)); + .catch(done); }); it('should read back normal contents with enableGzippedResponses as false', function(done){ @@ -379,18 +379,21 @@ describe('document content', function(){ '/test/write/arrayObject2.json' ) .result(function(documents) { - valcheck.isUndefined(documents).should.equal(false); - documents.length.should.equal(2); - for (var i=0; i < 2; i++) { - var document = documents[i]; - valcheck.isUndefined(document).should.equal(false); - document.should.have.property('content'); - document.content.should.have.property('key1'); - document.content.key1.should.equal('value 1'); + try { + valcheck.isUndefined(documents).should.equal(false); + documents.length.should.equal(2); + for (var i=0; i < 2; i++) { + var document = documents[i]; + valcheck.isUndefined(document).should.equal(false); + document.should.have.property('content'); + document.content.should.have.property('key1'); + document.content.key1.should.equal('value 1'); + } + done(); + } catch (e) { + done(e); } - done(); - }) - .catch(done); + }) }); it('should read as an object stream with content and metadata', function(done){ var count = 0; @@ -399,15 +402,24 @@ describe('document content', function(){ categories: ['content', 'quality'] }).stream('object').on('error', done). on('data', function (data) { - count++; - valcheck.isObject(data).should.equal(true); - data.should.have.property('content'); - data.should.have.property('quality'); + try { + count++; + valcheck.isObject(data).should.equal(true); + data.should.have.property('content'); + data.should.have.property('quality'); + } catch (e) { + done(e); + return; + } }). on('end', function () { - count.should.equal(2); - done(); - }); + try { + count.should.equal(2); + done(); + } catch (e) { + done(e); + } + }) }); it('should read as an object stream with content only', function(done){ var count = 0; @@ -416,14 +428,23 @@ describe('document content', function(){ categories: ['content'] }).stream('object').on('error', done). on('data', function (data) { - count++; - valcheck.isObject(data).should.equal(true); - data.should.have.property('content'); - data.should.not.have.property('quality'); + try { + count++; + valcheck.isObject(data).should.equal(true); + data.should.have.property('content'); + data.should.not.have.property('quality'); + } catch (e) { + done(e); + return; + } }). on('end', function () { - count.should.equal(2); - done(); + try { + count.should.equal(2); + done(); + } catch (e) { + done(e); + } }); }); it('should read as an object stream with metadata only', function(done){ @@ -433,14 +454,23 @@ describe('document content', function(){ categories: ['quality'] }).stream('object').on('error', done). on('data', function (data) { - count++; - valcheck.isObject(data).should.equal(true); - data.should.not.have.property('content'); - data.should.have.property('quality'); + try { + count++; + valcheck.isObject(data).should.equal(true); + data.should.not.have.property('content'); + data.should.have.property('quality'); + } catch (e) { + done(e); + return; + } }). on('end', function () { - count.should.equal(2); - done(); + try { + count.should.equal(2); + done(); + } catch (e) { + done(e); + } }); }); }); @@ -459,13 +489,17 @@ describe('document content', function(){ it('should read back the value', function(done){ db.documents.read('/test/write/writable1.json').stream('chunked'). on('data', function(chunk) { - valcheck.isUndefined(chunk).should.equal(false); - var content = JSON.parse(chunk.toString()); - valcheck.isUndefined(content).should.equal(false); - content.should.have.property('key1'); - content.key1.should.equal('value 1'); - done(); - }, done); + try { + valcheck.isUndefined(chunk).should.equal(false); + var content = JSON.parse(chunk.toString()); + valcheck.isUndefined(content).should.equal(false); + content.should.have.property('key1'); + content.key1.should.equal('value 1'); + done(); + } catch (e) { + done(e); + } + }) }); }); diff --git a/test-basic/documents-data-movement-ingest.js b/test-basic/documents-data-movement-ingest.js index 4368232c8..0fac8808a 100644 --- a/test-basic/documents-data-movement-ingest.js +++ b/test-basic/documents-data-movement-ingest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const testconfig = require('../etc/test-config.js'); diff --git a/test-basic/documents-data-movement-queryAll.js b/test-basic/documents-data-movement-queryAll.js index b0c21c55e..02af3de56 100644 --- a/test-basic/documents-data-movement-queryAll.js +++ b/test-basic/documents-data-movement-queryAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -21,9 +21,9 @@ describe('data movement queryAll', function() { before(function (done) { // This "before" and the "after" frequently fail to finish before the timeout triggers // TODO: - // short-term -> run with "timeout 0" and/or change/add "this.timeout(0)" to both methods - // long-term -> Do we need 10000 records for these tests? - this.timeout(0); + // short-term -> add "this.timeout(120000)" to both methods + // long-term -> Do we need 10000 records for these tests? If 120 seconds is not enough, we change the test. + this.timeout(120000); readable = new Stream.Readable({objectMode: true}); uris = []; for(let i=0; i<10000; i++) { @@ -44,12 +44,11 @@ describe('data movement queryAll', function() { }); after((function(done){ - this.timeout(0); + this.timeout(120000); dbWriter.documents.remove(uris) .result(function(response){ done(); }) - .catch(err=> done(err)) .catch(done); })); @@ -57,6 +56,7 @@ describe('data movement queryAll', function() { try{ const query = q.directory('/test/dataMovement/requests/queryAll/'); dbWriter.documents.queryAll(query); + done(new Error('Expected an error to be thrown because query is not a cts query.')); } catch(err){ err.toString().should.equal('Error: Query needs to be a cts query.'); done(); @@ -94,12 +94,12 @@ describe('data movement queryAll', function() { }); it('queryAll should throw error if no query is provided', function (done){ - try{ dbWriter.documents.queryAll(); + return done(new Error('Expected an error to be thrown because no query was provided')); } catch(err){ err.toString().should.equal('Error: Query cannot be null or undefined.'); - done(); + return done(); } }); @@ -118,14 +118,14 @@ describe('data movement queryAll', function() { }); it('queryAll should throw error with batchSize=100001', function (done){ - try{ dbWriter.documents.queryAll(query, { batchSize:100001 }); + return done(new Error('Expected an error to be thrown because batchSize greater than 100000')); } catch(err){ err.toString().should.equal('Error: batchSize cannot be greater than 100000'); - done(); + return done(); } }); @@ -259,14 +259,14 @@ describe('data movement queryAll', function() { }); it('queryAll should throw error with consistentSnapshot as Integer', function (done){ - try{ dbWriter.documents.queryAll(query, { consistentSnapshot: 1 }); + return done(new Error('Expected an error to be thrown because consistentSnapshot is invalid')); } catch(err){ err.toString().should.equal('Error: consistentSnapshot needs to be a boolean or DatabaseClient.Timestamp object.'); - done(); + return done(); } }); }); diff --git a/test-basic/documents-data-movement-readAll.js b/test-basic/documents-data-movement-readAll.js index 1b3bdb2aa..e543b7697 100644 --- a/test-basic/documents-data-movement-readAll.js +++ b/test-basic/documents-data-movement-readAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -12,6 +12,9 @@ const streamToArray = require('stream-to-array'); const fs = require('fs'); const expect = require('chai').expect; +const TOTAL_NUM_DOCS = 10000; +const CATEGORIES_NUM_DOCS = 400; + let uriStream = new Stream.PassThrough({objectMode: true}); let urisList = []; let result = new Set(); @@ -23,12 +26,12 @@ let xqyTransformPath = './test-basic/data/flagTransform.xqy'; describe('data movement readAll', function() { // This "before" frequently fails to finish before the timeout triggers // TODO: - // short-term -> run with "timeout 0" and/or change/add "this.timeout(0)" to both methods - // long-term -> Do we need 10000 records for these tests? - this.timeout(120000); + // short-term -> add "this.timeout(120000)" to both methods + // long-term -> Do we need 10000 records for these tests? If 120 seconds is not enough, we change the test. before(function (done) { + this.timeout(120000); let readable = new Stream.Readable({objectMode: true}); - for(let i=0; i<10000; i++) { + for(let i=0; i { readable = new Stream.Readable({objectMode: true}); - for (let i = 0; i < 400; i++) { + for (let i = 0; i < CATEGORIES_NUM_DOCS; i++) { const temp = { uri: '/test/dataMovement/requests/categories/' + i + '.json', contentType: 'application/json', @@ -74,26 +77,24 @@ describe('data movement readAll', function() { }); }); - beforeEach(function(done){ + beforeEach(function(){ uriStream = new Stream.PassThrough({objectMode: true}); urisList.forEach(uri => uriStream.push(uri)); uriStream.push(null); - done(); }); after((function(done){ + this.timeout(120000); categoriesUrisList.forEach(uri=>urisList.push(uri)); dbWriter.documents.remove(urisList) .result(function(){ - restAdminDB.config.transforms.remove(xqyTransformName); - done(); + restAdminDB.config.transforms.remove(xqyTransformName) + .result(() => done(), (err) => done(err)); }) - .catch(err=> done(err)) .catch(done); })); it('should readAll documents with empty options', function(done){ - streamToArray(dbWriter.documents.readAll(uriStream), function(err, arr ) { if(err){ @@ -101,11 +102,11 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should readAll documents with onCompletion option', function(done){ - streamToArray(dbWriter.documents.readAll(uriStream,{ onCompletion: ((summary) => summaryValue = summary) }), @@ -115,12 +116,14 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkSummary(summaryValue, done); - }); + }) + .catch(done); }); it('should throw error with invalid inputKind option', function(done){ try{ dbWriter.documents.readAll(uriStream,{inputKind:10}); + done(new Error('Expected an error to be thrown due to invalid inputKind option')); } catch(err){ err.toString().should.equal('Error: Invalid value for inputKind. Value must be array or string.'); done(); @@ -137,7 +140,8 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should readAll documents with inputKind option as array', function(done){ @@ -156,12 +160,14 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should throw error with invalid outputStreamType option', function(done){ try{ dbWriter.documents.readAll(uriStream,{outputStreamType:10}); + done(new Error('Expected an error to be thrown due to invalid outputStreamType option')); } catch(err){ err.toString().should.equal('Error: Invalid value for outputStreamType. Value must be chunked or object.'); done(); @@ -174,6 +180,7 @@ describe('data movement readAll', function() { outputStreamType: 'chunked', categories: [] }); + done(new Error('Expected an error to be thrown due to invalid categories and outputStreamType as chunked')); } catch(err){ err.toString().should.equal('Error: categories not expected when outputStreamType is chunked.'); done(); @@ -190,7 +197,8 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should readAll documents with outputStreamType option as chunked', function(done){ @@ -203,15 +211,17 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.toString())); - result.size.should.equal(10000); + result.size.should.equal(TOTAL_NUM_DOCS); result.clear(); done(); - }); + }) + .catch(done); }); it('should throw error with invalid batchSize option', function(done){ try{ dbWriter.documents.readAll(uriStream,{batchSize:-1}); + done(new Error('Expected an error to be thrown due to invalid batchSize')); } catch(err){ err.toString().should.equal('Error: Invalid batchSize. batchSize cannot be less than or equal to 0.'); done(); @@ -228,12 +238,14 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should throw error with invalid batchSize and inputKind as array option', function(done){ try{ dbWriter.documents.readAll(uriStream,{batchSize:10, inputKind:'array'}); + done(new Error('Expected an error to be thrown due to invalid batchSize and inputKind as array')); } catch(err){ err.toString().should.equal('Error: batchSize not expected when inputKind is array.'); done(); @@ -243,6 +255,7 @@ describe('data movement readAll', function() { it('should throw error with invalid concurrentRequests option', function(done){ try{ dbWriter.documents.readAll(uriStream,{concurrentRequests: {multipleOf: 'invalid', multiplier: 4}}); + done(new Error('Expected an error to be thrown due to invalid concurrentRequests option')); } catch(err){ err.toString().should.equal('Error: Invalid value for multipleOf. Value must be forests or hosts.'); done(); @@ -259,7 +272,8 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should readAll documents with categories option', function(done){ @@ -276,7 +290,8 @@ describe('data movement readAll', function() { } arr.forEach(item => result.add(item)); checkCategoriesResult(result, done); - }); + }) + .catch(done); }); it('should readAll documents with transform option', function(done){ @@ -293,9 +308,10 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item)); checkTransformResult(done); - }); + }) + .catch(done); }) - .catch(err=> done(err)); + .catch(done); }); it('should throw error with invalid onBatchError option', function(done){ @@ -316,13 +332,13 @@ describe('data movement readAll', function() { done(); }); }) - .catch(err=> done(err)); + .catch(done); }); it('should readAll documents with onBatchError option returning null', function(done){ restAdminDB.config.transforms.write(xqyTransformName, 'xquery', fs.createReadStream(xqyTransformPath)) .result(function(response){ - dbWriter.documents.readAll(uriStream,{ + const readStream = dbWriter.documents.readAll(uriStream,{ batchSize:1000, transform: ['tested1'], onBatchError: ((progressSoFar, documents, error) => { @@ -333,14 +349,22 @@ describe('data movement readAll', function() { return null; }), onCompletion: ((summary) => { - summary.docsReadSuccessfully.should.be.equal(0); - summary.docsFailedToBeRead.should.be.equal(10000); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - done(); + try { + summary.docsReadSuccessfully.should.be.equal(0); + summary.docsFailedToBeRead.should.be.equal(TOTAL_NUM_DOCS); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + done(); + } catch (error) { + done(error); + } }) }); + + readStream.on('error', function(err){ + done(err); + }); }) - .catch(err=> done(err)); + .catch(done); }); it('should readAll documents with onBatchError option returning replacement batch', function(done){ @@ -370,30 +394,42 @@ describe('data movement readAll', function() { it('should readAll documents with consistentSnapshot option as true', function(done){ this.timeout(15000); - dbWriter.documents.readAll(uriStream,{ + const readStream = dbWriter.documents.readAll(uriStream,{ consistentSnapshot:true, onCompletion: ((summary) => { - summary.docsReadSuccessfully.should.be.equal(10000); - summary.docsFailedToBeRead.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - summary.consistentSnapshotTimestamp.should.be.greaterThanOrEqual(0); - done(); + try { + summary.docsReadSuccessfully.should.be.equal(TOTAL_NUM_DOCS); + summary.docsFailedToBeRead.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + summary.consistentSnapshotTimestamp.should.be.greaterThanOrEqual(0); + done(); + } catch (error) { + done(error); + } }) }); + + readStream.on('error', function(err){ + done(err); + }); }); it('should readAll documents with consistentSnapshot option as DatabaseClient.Timestamp object', function(done){ this.timeout(120000); - dbWriter.documents.readAll(uriStream,{ + const readStream = dbWriter.documents.readAll(uriStream,{ consistentSnapshot:dbWriter.createTimestamp((Date.now()*10000).toString()), onCompletion: ((summary) => { - summary.docsReadSuccessfully.should.be.equal(10000); + summary.docsReadSuccessfully.should.be.equal(TOTAL_NUM_DOCS); summary.docsFailedToBeRead.should.be.equal(0); summary.timeElapsed.should.be.greaterThanOrEqual(0); summary.consistentSnapshotTimestamp.should.be.greaterThanOrEqual(0); done(); }) }); + + readStream.on('error', function(err){ + done(err); + }); }); it('should readAll documents with consistentSnapshot option as false', function(done){ @@ -401,7 +437,7 @@ describe('data movement readAll', function() { dbWriter.documents.readAll(uriStream,{ consistentSnapshot:false, onCompletion: ((summary) => { - summary.docsReadSuccessfully.should.be.equal(10000); + summary.docsReadSuccessfully.should.be.equal(TOTAL_NUM_DOCS); summary.docsFailedToBeRead.should.be.equal(0); summary.timeElapsed.should.be.greaterThanOrEqual(0); expect(summary.consistentSnapshotTimestamp).to.be.undefined; @@ -432,7 +468,8 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should queryToReadAll documents with onCompletion option', function(done){ @@ -441,7 +478,7 @@ describe('data movement readAll', function() { const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/readAll/')); streamToArray(dbWriter.documents.queryToReadAll(query,{ onCompletion:((summary) => { - summary.docsReadSuccessfully.should.be.equal(10000); + summary.docsReadSuccessfully.should.be.equal(TOTAL_NUM_DOCS); summary.docsFailedToBeRead.should.be.equal(0); summary.timeElapsed.should.be.greaterThanOrEqual(0); }) @@ -452,7 +489,8 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should queryToReadAll documents with onCompletion, consistentSnapshot and onInitialTimestamp options', function(done){ @@ -470,7 +508,7 @@ describe('data movement readAll', function() { onInitialTimestampValue = new Date(timestampValue); }), onCompletion:((summary) => { - summary.docsReadSuccessfully.should.be.equal(10000); + summary.docsReadSuccessfully.should.be.equal(TOTAL_NUM_DOCS); summary.docsFailedToBeRead.should.be.equal(0); summary.timeElapsed.should.be.greaterThanOrEqual(0); summary.consistentSnapshotTimestamp.toString().should.equal(onInitialTimestampValue.toString()); @@ -482,7 +520,8 @@ describe('data movement readAll', function() { } arr.forEach(item=> result.add(item.uri)); checkResult(done); - }); + }) + .catch(done); }); it('should throw error with categories options rawContent and permissions', function(done){ @@ -519,34 +558,42 @@ describe('data movement readAll', function() { }); docCount.should.be.equal(categoriesUrisList.length); done(); - }); + }) + .catch(done); }); it('should return empty with cts wordQuery when no documents are found', function(done) { const ctsqb = marklogic.ctsQueryBuilder; const q = marklogic.queryBuilder; const query = q.where(ctsqb.cts.wordQuery('zero')); - var res = ''; - var chk = ''; + let summaryResult = null; + let receivedData = false; const queryToReadAllStream = dbWriter.documents.queryToReadAll(query,{ onCompletion:((summary) => { - res = summary; + // should never get here since no documents are to be read + summaryResult = summary; }) }); - queryToReadAllStream.on('error', function (err) { throw new Error(err);}); + queryToReadAllStream.on('error', function (err) { + done(err); + }); queryToReadAllStream.on('data', function(chunk){ - chk = chunk; + receivedData = true; }); - queryToReadAllStream.on('end', function(end){ - expect(res).to.be.empty; - expect(chk).to.be.empty; - done(); + queryToReadAllStream.on('end', function() { + try { + expect(summaryResult).to.be.null; + expect(receivedData).to.be.false; + done(); + } catch (error) { + done(error); + } }); }); }); function checkResult(done){ - result.size.should.equal(10000); + result.size.should.equal(TOTAL_NUM_DOCS); for(let i=0; i { item.content.flagParam.should.be.equal('tested1'); }); diff --git a/test-basic/documents-data-movement-removeAllUris.js b/test-basic/documents-data-movement-removeAllUris.js index 199dc53c2..385d63366 100644 --- a/test-basic/documents-data-movement-removeAllUris.js +++ b/test-basic/documents-data-movement-removeAllUris.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); diff --git a/test-basic/documents-data-movement-rows-queryAll.js b/test-basic/documents-data-movement-rows-queryAll.js index 8533dd6f5..fc7acdeba 100644 --- a/test-basic/documents-data-movement-rows-queryAll.js +++ b/test-basic/documents-data-movement-rows-queryAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); diff --git a/test-basic/documents-data-movement-transformAll.js b/test-basic/documents-data-movement-transformAll.js index 6c1d394c0..a44d86bcd 100644 --- a/test-basic/documents-data-movement-transformAll.js +++ b/test-basic/documents-data-movement-transformAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -18,7 +18,7 @@ const ctsQb = marklogic.ctsQueryBuilder; const q = marklogic.queryBuilder; const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/transformAll/')); -describe('data movement transformAll', function() { +describe('data movement transformAll (documents-data-movement-transformAll)', function() { before(function(done) { diff --git a/test-basic/documents-negative.js b/test-basic/documents-negative.js index 51107c49d..c99aab598 100644 --- a/test-basic/documents-negative.js +++ b/test-basic/documents-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/documents-patch.js b/test-basic/documents-patch.js index cbea9dccd..9194d503a 100644 --- a/test-basic/documents-patch.js +++ b/test-basic/documents-patch.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/documents-query.js b/test-basic/documents-query.js index 9dbc8082f..ca3240a20 100644 --- a/test-basic/documents-query.js +++ b/test-basic/documents-query.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/documents-quick.js b/test-basic/documents-quick.js index 97b4b7b65..4d9f93af6 100644 --- a/test-basic/documents-quick.js +++ b/test-basic/documents-quick.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); @@ -167,7 +167,7 @@ describe('check connection', function(){ }).catch(done); }); it('should give 403 when user is not authorized', function(done){ - var config = {host:testconfig.testConnection.host, user:testconfig.testConnection.user, password: testconfig.testConnection.password, port:testconfig.testConnection.port, + var config = {host:testconfig.testConnection.host, user:testconfig.testConnection.user, password: testconfig.testConnection.password, port:testconfig.testConnection.port, authType:testconfig.testConnection.authType}; var db1 = marklogic.createDatabaseClient(config); var assert = require('assert'); @@ -183,7 +183,7 @@ describe('check connection', function(){ }); it('should give 401 when does not exist', function(done){ - var config = {host:testconfig.restReaderConnection.host, user:testconfig.testConnection.user, password: 'invalid', port:testconfig.testConnection.port, + var config = {host:testconfig.restReaderConnection.host, user:testconfig.testConnection.user, password: 'invalid', port:testconfig.testConnection.port, authType:testconfig.restReaderConnection.authType}; var db1 = marklogic.createDatabaseClient(config); var assert = require('assert'); diff --git a/test-basic/documents-read-xqy-docs.js b/test-basic/documents-read-xqy-docs.js index 1a2e7e1df..f191a53c2 100644 --- a/test-basic/documents-read-xqy-docs.js +++ b/test-basic/documents-read-xqy-docs.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ let testconfig = require('../etc/test-config.js'); diff --git a/test-basic/documents-temporal-document.js b/test-basic/documents-temporal-document.js index a95593422..f963eb3b0 100644 --- a/test-basic/documents-temporal-document.js +++ b/test-basic/documents-temporal-document.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var testconfig = require('../etc/test-config.js'); diff --git a/test-basic/documents-temporal-patch.js b/test-basic/documents-temporal-patch.js index 1edeb5d40..5c38f9612 100644 --- a/test-basic/documents-temporal-patch.js +++ b/test-basic/documents-temporal-patch.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var testconfig = require('../etc/test-config.js'); diff --git a/test-basic/documents-temporal-protect.js b/test-basic/documents-temporal-protect.js index ac00663e4..5631eae56 100644 --- a/test-basic/documents-temporal-protect.js +++ b/test-basic/documents-temporal-protect.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-basic/documents-temporal-wipe.js b/test-basic/documents-temporal-wipe.js index a90b229cb..70b314637 100644 --- a/test-basic/documents-temporal-wipe.js +++ b/test-basic/documents-temporal-wipe.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var testconfig = require('../etc/test-config.js'); diff --git a/test-basic/documents-temporal.js b/test-basic/documents-temporal.js index 13ec64b6f..18f6e1182 100644 --- a/test-basic/documents-temporal.js +++ b/test-basic/documents-temporal.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/documents-transform.js b/test-basic/documents-transform.js index 4d52a8aaf..87b0e5101 100644 --- a/test-basic/documents-transform.js +++ b/test-basic/documents-transform.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/documents-version.js b/test-basic/documents-version.js index 6b9f2cba7..5dcc1f57d 100644 --- a/test-basic/documents-version.js +++ b/test-basic/documents-version.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/endpoint-caller.js b/test-basic/endpoint-caller.js index e396fb56d..aef35c7ad 100644 --- a/test-basic/endpoint-caller.js +++ b/test-basic/endpoint-caller.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var marklogic = require('../'); @@ -12,6 +12,7 @@ let gulpConfig = require('../gulpfile.js'); describe('Endpoint caller', function() { before(function(done){ + this.timeout(30000); // set timeout to 30 seconds, because some of the tests take a while gulpConfig.loadProxyTests(); setTimeout(()=>{done();}, 5000); }); diff --git a/test-basic/endpoint-proxy.js b/test-basic/endpoint-proxy.js index 87c6cb91a..997772cd1 100644 --- a/test-basic/endpoint-proxy.js +++ b/test-basic/endpoint-proxy.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/errors.js b/test-basic/errors.js index fd1e957f1..999990fec 100644 --- a/test-basic/errors.js +++ b/test-basic/errors.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/extlibs.js b/test-basic/extlibs.js index f53635529..6df1161ff 100644 --- a/test-basic/extlibs.js +++ b/test-basic/extlibs.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/fromDocDescriptors-test.js b/test-basic/fromDocDescriptors-test.js index 422296be3..b8c239e6a 100644 --- a/test-basic/fromDocDescriptors-test.js +++ b/test-basic/fromDocDescriptors-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); diff --git a/test-basic/graphs.js b/test-basic/graphs.js index 5c1df2433..a69c8dc1c 100644 --- a/test-basic/graphs.js +++ b/test-basic/graphs.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/joinDocCols-test.js b/test-basic/joinDocCols-test.js index 989b48349..751788afa 100644 --- a/test-basic/joinDocCols-test.js +++ b/test-basic/joinDocCols-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); diff --git a/test-basic/lockForUpdate-test.js b/test-basic/lockForUpdate-test.js index 8605ec323..93e7c0d65 100644 --- a/test-basic/lockForUpdate-test.js +++ b/test-basic/lockForUpdate-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const marklogic = require('../'); const testconfig = require('../etc/test-config.js'); diff --git a/test-basic/logging.js b/test-basic/logging.js index db544e561..e1a110fab 100644 --- a/test-basic/logging.js +++ b/test-basic/logging.js @@ -1,16 +1,14 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'), testconfig = require('../etc/test-config.js'), marklogic = require('../'), bunyan = require('bunyan'), - winston = require('winston'), intercept = require("intercept-stdout"); var dbDefault = marklogic.createDatabaseClient(testconfig.restWriterConnection); var dbBunyan = marklogic.createDatabaseClient(testconfig.restWriterConnection); -var dbWinston = marklogic.createDatabaseClient(testconfig.restWriterConnection); describe('logging', function(){ @@ -47,31 +45,7 @@ describe('logging', function(){ }); }); - describe('with Winston', function(){ - var winstonLogger = winston.createLogger({ - level: 'debug', - format: winston.format.combine( - winston.format((info) => { - info.level = info.level.toUpperCase(); - return info; - })(), - winston.format.json() - ), - transports: [new winston.transports.Console()] - }); - dbWinston.setLogger(winstonLogger); - it('should write Winston string entries', function(done){ - var captured = []; - var unhook = intercept(function(txt) { - captured.push(txt); - }); - dbWinston.config.serverprops.read().result(function(response) { - unhook(); - JSON.parse(captured[0]).level.should.eql('DEBUG'); - done(); - }, done); - }); - }); - }); + + diff --git a/test-basic/optic-fromDocUris.js b/test-basic/optic-fromDocUris.js index d3588e508..31bf17390 100644 --- a/test-basic/optic-fromDocUris.js +++ b/test-basic/optic-fromDocUris.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/optic-patchBuilder.js b/test-basic/optic-patchBuilder.js index 8015c46ef..7aec64f3f 100644 --- a/test-basic/optic-patchBuilder.js +++ b/test-basic/optic-patchBuilder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const marklogic = require('../'); diff --git a/test-basic/optic-remove.js b/test-basic/optic-remove.js index 32e150827..62cf39e7b 100644 --- a/test-basic/optic-remove.js +++ b/test-basic/optic-remove.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); diff --git a/test-basic/optic-update-execute.js b/test-basic/optic-update-execute.js index cba392488..9cbecd6a8 100644 --- a/test-basic/optic-update-execute.js +++ b/test-basic/optic-update-execute.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); diff --git a/test-basic/optic-vector.js b/test-basic/optic-vector.js index ed4291322..bc29330dc 100644 --- a/test-basic/optic-vector.js +++ b/test-basic/optic-vector.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/patch-builder.js b/test-basic/patch-builder.js index ae90f3843..0641cca81 100644 --- a/test-basic/patch-builder.js +++ b/test-basic/patch-builder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var assert = require('assert'); var should = require('should'); diff --git a/test-basic/plan-aggregates.js b/test-basic/plan-aggregates.js index 69ac201a1..5d4daf88b 100644 --- a/test-basic/plan-aggregates.js +++ b/test-basic/plan-aggregates.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-builder-base.js b/test-basic/plan-builder-base.js index 252e1fa81..652ca0ff4 100644 --- a/test-basic/plan-builder-base.js +++ b/test-basic/plan-builder-base.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-builder-cts-tests-with-string-input.js b/test-basic/plan-builder-cts-tests-with-string-input.js index a81fde561..f4fd22545 100644 --- a/test-basic/plan-builder-cts-tests-with-string-input.js +++ b/test-basic/plan-builder-cts-tests-with-string-input.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-builder-generated.js b/test-basic/plan-builder-generated.js index c86d94da8..678c24a0f 100755 --- a/test-basic/plan-builder-generated.js +++ b/test-basic/plan-builder-generated.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -29,357 +29,357 @@ describe('plan builder', function() { }); it('cts.box#4', function(done) { testPlan([p.xs.double(1), p.xs.double(2), p.xs.double(3), p.xs.double(4)], p.cts.box(p.col("1"), p.col("2"), p.col("3"), p.col("4"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("[1, 2, 3, 4]"); done(); }).catch(done); - }); + }); it('cts.boxEast#1', function(done) { testPlan([p.cts.box(1, 2, 3, 4)], p.cts.boxEast(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('4'); done(); }).catch(done); - }); + }); it('cts.boxNorth#1', function(done) { testPlan([p.cts.box(1, 2, 3, 4)], p.cts.boxNorth(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('cts.boxSouth#1', function(done) { testPlan([p.cts.box(1, 2, 3, 4)], p.cts.boxSouth(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('cts.boxWest#1', function(done) { testPlan([p.cts.box(1, 2, 3, 4)], p.cts.boxWest(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('cts.circle#2', function(done) { testPlan([p.xs.double(1.2), p.cts.point(1, 2)], p.cts.circle(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("@1.2 1,2"); done(); }).catch(done); - }); + }); it('cts.partOfSpeech#1', function(done) { testPlan([p.xs.string("abc")], p.cts.partOfSpeech(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal(''); done(); }).catch(done); - }); + }); it('cts.period#2', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z"), p.xs.dateTime("2016-01-03T10:09:08Z")], p.cts.period(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql('cts.period(xs.dateTime("2016-01-02T10:09:08Z"),xs.dateTime("2016-01-03T10:09:08Z"))'); done(); }).catch(done); - }); + }); it('cts.point#2', function(done) { testPlan([p.xs.double(1), p.xs.double(2)], p.cts.point(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1,2"); done(); }).catch(done); - }); + }); it('cts.pointLatitude#1', function(done) { testPlan([p.cts.point(1, 2)], p.cts.pointLatitude(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('cts.pointLongitude#1', function(done) { testPlan([p.cts.point(1, 2)], p.cts.pointLongitude(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('cts.stem#1', function(done) { testPlan([p.xs.string("ran")], p.cts.stem(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('run'); done(); }).catch(done); - }); + }); it('cts.stem#2', function(done) { testPlan([p.xs.string("ran"), p.xs.string("en")], p.cts.stem(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('run'); done(); }).catch(done); - }); + }); it('cts.tokenize#1', function(done) { testPlan([p.xs.string("a-b c")], p.cts.tokenize(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "-", "b", " ", "c"]); done(); }).catch(done); - }); + }); it('cts.tokenize#2', function(done) { testPlan([p.xs.string("a-b c"), p.xs.string("en")], p.cts.tokenize(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "-", "b", " ", "c"]); done(); }).catch(done); - }); + }); it('fn.abs#1', function(done) { testPlan([p.xs.double(-11)], p.fn.abs(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('11'); done(); }).catch(done); - }); + }); it('fn.analyzeString#2', function(done) { testPlan([p.xs.string("aXbyc"), p.xs.string("[xy]")], p.fn.analyzeString(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('aXbyc'); done(); }).catch(done); - }); + }); it('fn.analyzeString#3', function(done) { testPlan([p.xs.string("aXbyc"), p.xs.string("[xy]"), p.xs.string("i")], p.fn.analyzeString(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('aXbyc'); done(); }).catch(done); - }); + }); it('fn.avg#1', function(done) { testPlan([[p.xs.double(2), p.xs.double(4), p.xs.double(6), p.xs.double(8)]], p.fn.avg(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('5'); done(); }).catch(done); - }); + }); it('fn.boolean#1', function(done) { testPlan([p.xs.string("abc")], p.fn.boolean(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.ceiling#1', function(done) { testPlan([p.xs.double(1.3)], p.fn.ceiling(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.codepointEqual#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("abc")], p.fn.codepointEqual(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.codepointsToString#1', function(done) { testPlan([[p.xs.integer(97), p.xs.integer(98), p.xs.integer(99)]], p.fn.codepointsToString(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('fn.compare#2', function(done) { testPlan([p.xs.string("abz"), p.xs.string("aba")], p.fn.compare(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('fn.compare#3', function(done) { testPlan([p.xs.string("abz"), p.xs.string("aba"), p.xs.string("http://marklogic.com/collation/")], p.fn.compare(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('fn.concat#2', function(done) { testPlan([p.xs.string("a"), p.xs.string("b")], p.fn.concat(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ab'); done(); }).catch(done); - }); + }); it('fn.concat#3', function(done) { testPlan([p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.fn.concat(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('fn.contains#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("b")], p.fn.contains(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.contains#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("b"), p.xs.string("http://marklogic.com/collation/")], p.fn.contains(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.count#1', function(done) { testPlan([[p.xs.double(1), p.xs.double(2), p.xs.double(3)]], p.fn.count(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('fn.count#2', function(done) { testPlan([[p.xs.double(1), p.xs.double(2), p.xs.double(3)], p.xs.double(4)], p.fn.count(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('fn.dateTime#2', function(done) { testPlan([p.xs.date("2016-01-02Z"), p.xs.time("10:09:08Z")], p.fn.dateTime(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016-01-02T10:09:08Z'); done(); }).catch(done); - }); + }); it('fn.dayFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02-03:04")], p.fn.dayFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.dayFromDateTime#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.fn.dayFromDateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.daysFromDuration#1', function(done) { testPlan([p.xs.dayTimeDuration("P3DT4H5M6S")], p.fn.daysFromDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('fn.deepEqual#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("abc")], p.fn.deepEqual(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.deepEqual#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("abc"), p.xs.string("http://marklogic.com/collation/")], p.fn.deepEqual(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.distinctValues#1', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("b"), p.xs.string("c")]], p.fn.distinctValues(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "b", "c"]); done(); }).catch(done); - }); + }); it('fn.distinctValues#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("b"), p.xs.string("c")], p.xs.string("http://marklogic.com/collation/")], p.fn.distinctValues(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "b", "c"]); done(); }).catch(done); - }); + }); it('fn.empty#1', function(done) { testPlan([p.xs.double(1)], p.fn.empty(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('fn.encodeForUri#1', function(done) { testPlan([p.xs.string("http://a/b?c#d")], p.fn.encodeForUri(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http%3A%2F%2Fa%2Fb%3Fc%23d'); done(); }).catch(done); - }); + }); it('fn.endsWith#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("c")], p.fn.endsWith(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.endsWith#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("c"), p.xs.string("http://marklogic.com/collation/")], p.fn.endsWith(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.escapeHtmlUri#1', function(done) { testPlan([p.xs.string("http://a/b?c#d")], p.fn.escapeHtmlUri(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://a/b?c#d'); done(); }).catch(done); - }); + }); it('fn.exists#1', function(done) { testPlan([p.xs.double(1)], p.fn.exists(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.false#0', function(done) { testPlan(undefined, p.fn.false()) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('fn.floor#1', function(done) { testPlan([p.xs.double(1.7)], p.fn.floor(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('fn.formatDate#2', function(done) { testPlan([p.xs.date("2016-01-02-03:04"), p.xs.string("[Y0001]/[M01]/[D01]")], p.fn.formatDate(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016/01/02'); done(); }).catch(done); - }); + }); it('fn.formatDateTime#2', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z"), p.xs.string("[Y0001]/[M01]/[D01] [H01]:[m01]:[s01]:[f01]")], p.fn.formatDateTime(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016/01/02 10:09:08:00'); done(); }).catch(done); - }); + }); it('fn.formatNumber#2', function(done) { testPlan([p.xs.double(1234.5), p.xs.string("#,##0.00")], p.fn.formatNumber(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1,234.50"); done(); }).catch(done); - }); + }); it('fn.formatTime#2', function(done) { testPlan([p.xs.time("10:09:08Z"), p.xs.string("[H01]:[m01]:[s01]:[f01]")], p.fn.formatTime(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('10:09:08:00'); done(); }).catch(done); @@ -393,193 +393,193 @@ describe('plan builder', function() { }); it('fn.hoursFromDateTime#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.fn.hoursFromDateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('10'); done(); }).catch(done); - }); + }); it('fn.hoursFromDuration#1', function(done) { testPlan([p.xs.dayTimeDuration("P3DT4H5M6S")], p.fn.hoursFromDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('4'); done(); }).catch(done); - }); + }); it('fn.hoursFromTime#1', function(done) { testPlan([p.xs.time("10:09:08Z")], p.fn.hoursFromTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('10'); done(); }).catch(done); - }); + }); it('fn.indexOf#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.xs.string("b")], p.fn.indexOf(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.indexOf#3', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.xs.string("b"), p.xs.string("http://marklogic.com/collation/")], p.fn.indexOf(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.insertBefore#3', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("e"), p.xs.string("f")], p.xs.integer(3), [p.xs.string("c"), p.xs.string("d")]], p.fn.insertBefore(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "b", "c", "d", "e", "f"]); done(); }).catch(done); - }); + }); it('fn.iriToUri#1', function(done) { testPlan([p.xs.string("http://a/b?c#d")], p.fn.iriToUri(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://a/b?c#d'); done(); }).catch(done); - }); + }); it('fn.localNameFromQName#1', function(done) { testPlan([p.xs.QName("abc")], p.fn.localNameFromQName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('fn.lowerCase#1', function(done) { testPlan([p.xs.string("ABC")], p.fn.lowerCase(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('fn.matches#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("^.B")], p.fn.matches(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('fn.matches#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("^.B"), p.xs.string("i")], p.fn.matches(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.max#1', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")]], p.fn.max(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('c'); done(); }).catch(done); - }); + }); it('fn.max#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.xs.string("http://marklogic.com/collation/")], p.fn.max(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('c'); done(); }).catch(done); - }); + }); it('fn.min#1', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")]], p.fn.min(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('fn.min#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.xs.string("http://marklogic.com/collation/")], p.fn.min(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('fn.minutesFromDateTime#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.fn.minutesFromDateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('9'); done(); }).catch(done); - }); + }); it('fn.minutesFromDuration#1', function(done) { testPlan([p.xs.dayTimeDuration("P3DT4H5M6S")], p.fn.minutesFromDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('5'); done(); }).catch(done); - }); + }); it('fn.minutesFromTime#1', function(done) { testPlan([p.xs.time("10:09:08Z")], p.fn.minutesFromTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('9'); done(); }).catch(done); - }); + }); it('fn.monthFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02-03:04")], p.fn.monthFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('fn.monthFromDateTime#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.fn.monthFromDateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('fn.monthsFromDuration#1', function(done) { testPlan([p.xs.yearMonthDuration("P1Y2M")], p.fn.monthsFromDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.namespaceUriFromQName#1', function(done) { testPlan([p.xs.QName("abc")], p.fn.namespaceUriFromQName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal(''); done(); }).catch(done); - }); + }); it('fn.normalizeSpace#1', function(done) { testPlan([p.xs.string(" abc 123 ")], p.fn.normalizeSpace(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc 123'); done(); }).catch(done); - }); + }); it('fn.normalizeUnicode#1', function(done) { testPlan([p.xs.string(" aBc ")], p.fn.normalizeUnicode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('aBc '); done(); }).catch(done); - }); + }); it('fn.normalizeUnicode#2', function(done) { testPlan([p.xs.string(" aBc "), p.xs.string("NFC")], p.fn.normalizeUnicode(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('aBc '); done(); }).catch(done); - }); + }); it('fn.not#1', function(done) { testPlan([p.xs.boolean(true)], p.fn.not(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('fn.number#1', function(done) { testPlan([p.xs.string("1.1")], p.fn.number(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.1'); done(); }).catch(done); - }); + }); it('fn.prefixFromQName#1', function(done) { testPlan([p.xs.QName("abc")], p.fn.prefixFromQName(p.col("1"))) .then(function(response) { @@ -590,381 +590,381 @@ describe('plan builder', function() { } done(); }).catch(done); - }); + }); it('fn.QName#2', function(done) { testPlan([p.xs.string("http://a/b"), p.xs.string("c")], p.fn.QName(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('c'); done(); }).catch(done); - }); + }); it('fn.remove#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("x"), p.xs.string("c")], p.xs.integer(3)], p.fn.remove(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "b", "c"]); done(); }).catch(done); - }); + }); it('fn.replace#3', function(done) { testPlan([p.xs.string("axc"), p.xs.string("^(.)X"), p.xs.string("$1b")], p.fn.replace(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('axc'); done(); }).catch(done); - }); + }); it('fn.replace#4', function(done) { testPlan([p.xs.string("axc"), p.xs.string("^(.)X"), p.xs.string("$1b"), p.xs.string("i")], p.fn.replace(p.col("1"), p.col("2"), p.col("3"), p.col("4"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('fn.resolveUri#2', function(done) { testPlan([p.xs.string("b?c#d"), p.xs.string("http://a/x")], p.fn.resolveUri(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://a/b?c#d'); done(); }).catch(done); - }); + }); it('fn.reverse#1', function(done) { testPlan([[p.xs.string("c"), p.xs.string("b"), p.xs.string("a")]], p.fn.reverse(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "b", "c"]); done(); }).catch(done); - }); + }); it('fn.round#1', function(done) { testPlan([p.xs.double(1.7)], p.fn.round(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('fn.roundHalfToEven#1', function(done) { testPlan([p.xs.double(1234.5)], p.fn.roundHalfToEven(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1234'); done(); }).catch(done); - }); + }); it('fn.roundHalfToEven#2', function(done) { testPlan([p.xs.double(1234.5), p.xs.integer(-2)], p.fn.roundHalfToEven(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1200'); done(); }).catch(done); - }); + }); it('fn.secondsFromDateTime#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.fn.secondsFromDateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('8'); done(); }).catch(done); - }); + }); it('fn.secondsFromDuration#1', function(done) { testPlan([p.xs.dayTimeDuration("P3DT4H5M6S")], p.fn.secondsFromDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('6'); done(); }).catch(done); - }); + }); it('fn.secondsFromTime#1', function(done) { testPlan([p.xs.time("10:09:08Z")], p.fn.secondsFromTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('8'); done(); }).catch(done); - }); + }); it('fn.startsWith#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("a")], p.fn.startsWith(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.startsWith#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("a"), p.xs.string("http://marklogic.com/collation/")], p.fn.startsWith(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.string#1', function(done) { testPlan([p.xs.double(1)], p.fn.string(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('fn.stringJoin#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.xs.string("+")], p.fn.stringJoin(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a+b+c'); done(); }).catch(done); - }); + }); it('fn.stringLength#1', function(done) { testPlan([p.xs.string("abc")], p.fn.stringLength(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('fn.stringToCodepoints#1', function(done) { testPlan([p.xs.string("abc")], p.fn.stringToCodepoints(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([97, 98, 99]); done(); }).catch(done); - }); + }); it('fn.subsequence#2', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c"), p.xs.string("d"), p.xs.string("e")], p.xs.double(2)], p.fn.subsequence(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["b", "c", "d", "e"]); done(); }).catch(done); - }); + }); it('fn.subsequence#3', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c"), p.xs.string("d"), p.xs.string("e")], p.xs.double(2), p.xs.double(3)], p.fn.subsequence(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["b", "c", "d"]); done(); }).catch(done); - }); + }); it('fn.substring#2', function(done) { testPlan([p.xs.string("abcd"), p.xs.double(2)], p.fn.substring(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('bcd'); done(); }).catch(done); - }); + }); it('fn.substring#3', function(done) { testPlan([p.xs.string("abcd"), p.xs.double(2), p.xs.double(2)], p.fn.substring(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('bc'); done(); }).catch(done); - }); + }); it('fn.substringAfter#2', function(done) { testPlan([p.xs.string("abcd"), p.xs.string("ab")], p.fn.substringAfter(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('cd'); done(); }).catch(done); - }); + }); it('fn.substringAfter#3', function(done) { testPlan([p.xs.string("abcd"), p.xs.string("ab"), p.xs.string("http://marklogic.com/collation/")], p.fn.substringAfter(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('cd'); done(); }).catch(done); - }); + }); it('fn.substringBefore#2', function(done) { testPlan([p.xs.string("abcd"), p.xs.string("cd")], p.fn.substringBefore(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ab'); done(); }).catch(done); - }); + }); it('fn.substringBefore#3', function(done) { testPlan([p.xs.string("abcd"), p.xs.string("cd"), p.xs.string("http://marklogic.com/collation/")], p.fn.substringBefore(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ab'); done(); }).catch(done); - }); + }); it('fn.sum#1', function(done) { testPlan([[p.xs.double(1), p.xs.double(2), p.xs.double(3)]], p.fn.sum(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('6'); done(); }).catch(done); - }); + }); it('fn.tail#1', function(done) { testPlan([[p.xs.string("a"), p.xs.string("b"), p.xs.string("c")]], p.fn.tail(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["b", "c"]); done(); }).catch(done); - }); + }); it('fn.tokenize#2', function(done) { testPlan([p.xs.string("axbxc"), p.xs.string("X")], p.fn.tokenize(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('axbxc'); done(); }).catch(done); - }); + }); it('fn.tokenize#3', function(done) { testPlan([p.xs.string("axbxc"), p.xs.string("X"), p.xs.string("i")], p.fn.tokenize(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["a", "b", "c"]); done(); }).catch(done); - }); + }); it('fn.translate#3', function(done) { testPlan([p.xs.string("axcy"), p.xs.string("xy"), p.xs.string("bd")], p.fn.translate(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abcd'); done(); }).catch(done); - }); + }); it('fn.true#0', function(done) { testPlan(undefined, p.fn.true()) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('fn.upperCase#1', function(done) { testPlan([p.xs.string("abc")], p.fn.upperCase(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ABC'); done(); }).catch(done); - }); + }); it('fn.yearFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02-03:04")], p.fn.yearFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016'); done(); }).catch(done); - }); + }); it('fn.yearFromDateTime#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.fn.yearFromDateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016'); done(); }).catch(done); - }); + }); it('fn.yearsFromDuration#1', function(done) { testPlan([p.xs.yearMonthDuration("P1Y2M")], p.fn.yearsFromDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('geo.arcIntersection#4', function(done) { testPlan([p.cts.point(1, 2), p.cts.point(1, 2), p.cts.point(1, 2), p.cts.point(1, 2)], p.geo.arcIntersection(p.col("1"), p.col("2"), p.col("3"), p.col("4"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1,2"); done(); }).catch(done); - }); + }); it('geo.arcIntersection#5', function(done) { testPlan([p.cts.point(1, 2), p.cts.point(1, 2), p.cts.point(1, 2), p.cts.point(1, 2), p.xs.string("precision=float")], p.geo.arcIntersection(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1,2"); done(); }).catch(done); - }); + }); it('geo.bearing#2', function(done) { testPlan([p.cts.point(1, 2), p.cts.point(3, 4)], p.geo.bearing(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(parseFloat(getResult(response).value).toFixed(2)).equal('0.79'); done(); }).catch(done); - }); + }); it('geo.bearing#3', function(done) { testPlan([p.cts.point(1, 2), p.cts.point(3, 4), p.xs.string("precision=float")], p.geo.bearing(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(parseFloat(getResult(response).value).toFixed(2)).equal('0.79'); done(); }).catch(done); - }); + }); it('geo.destination#3', function(done) { testPlan([p.cts.point(1, 2), p.xs.double(1.2), p.xs.double(1.2)], p.geo.destination(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1.0063286,2.0161717"); done(); }).catch(done); - }); + }); it('geo.destination#4', function(done) { testPlan([p.cts.point(1, 2), p.xs.double(1.2), p.xs.double(1.2), p.xs.string("precision=float")], p.geo.destination(p.col("1"), p.col("2"), p.col("3"), p.col("4"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1.0063286,2.0161717"); done(); }).catch(done); - }); + }); it('geo.distance#2', function(done) { testPlan([p.cts.point(1, 2), p.cts.point(1, 2)], p.geo.distance(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('geo.distance#3', function(done) { testPlan([p.cts.point(1, 2), p.cts.point(1, 2), p.xs.string("precision=float")], p.geo.distance(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('geo.distanceConvert#3', function(done) { testPlan([p.xs.double(1), p.xs.string("miles"), p.xs.string("km")], p.geo.distanceConvert(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.609344'); done(); }).catch(done); - }); + }); it('geo.ellipsePolygon#5', function(done) { testPlan([p.cts.point(1, 2), p.xs.double(1.2), p.xs.double(1.2), p.xs.double(1.2), p.xs.double(1.2)], p.geo.ellipsePolygon(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1.0063287,2.0162783 0.98657537,2.0110099 0.98537451,1.9905261 1.0043854,1.983135 1.0173359,1.9990506 1.0063287,2.0162783"); done(); }).catch(done); - }); + }); it('geo.ellipsePolygon#6', function(done) { testPlan([p.cts.point(1, 2), p.xs.double(1.2), p.xs.double(1.2), p.xs.double(1.2), p.xs.double(1.2), p.xs.string("precision=float")], p.geo.ellipsePolygon(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"), p.col("6"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1.0063287,2.0162783 0.98657537,2.0110099 0.98537451,1.9905261 1.0043854,1.983135 1.0173359,1.9990506 1.0063287,2.0162783"); done(); }).catch(done); - }); + }); it('geo.geohashDecode#1', function(done) { testPlan([p.xs.string("abc")], p.geo.geohashDecode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("[-90, -180, 90, 180]"); done(); }).catch(done); - }); + }); it('geo.geohashDecodePoint#1', function(done) { testPlan([p.xs.string("s01mtw")], p.geo.geohashDecodePoint(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("1.0025024,2.0050049"); done(); }).catch(done); - }); + }); it('geo.geohashNeighbors#1', function(done) { testPlan([p.xs.string("s01mtw")], p.geo.geohashNeighbors(p.col("1"))) .then(function(response) { should(getResult(response).value).eql({"NE":"s01mtz", "S":"s01mtt", "E":"s01mty", "W":"s01mtq", "SW":"s01mtm", "N":"s01mtx", "SE":"s01mtv", "NW":"s01mtr"}); done(); }).catch(done); - }); + }); it('geo.geohashPrecisionDimensions#1', function(done) { testPlan([p.xs.integer(4)], p.geo.geohashPrecisionDimensions(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([0.17578125, 0.3515625]); done(); }).catch(done); - }); + }); it('geo.geohashSubhashes#1', function(done) { if(serverConfiguration.serverVersion < 11){ this.skip(); } testPlan([p.xs.string("s01mtw")], p.geo.geohashSubhashes(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["s01mtw0", "s01mtw1", "s01mtw2", "s01mtw3", "s01mtw4", "s01mtw5", "s01mtw6", "s01mtw7", "s01mtw8", "s01mtw9", "s01mtwb", "s01mtwc", "s01mtwd", "s01mtwe", "s01mtwf", "s01mtwg", "s01mtwh", "s01mtwj", "s01mtwk", "s01mtwm", "s01mtwn", "s01mtwp", "s01mtwq", "s01mtwr", "s01mtws", "s01mtwt", "s01mtwu", "s01mtwv", "s01mtww", "s01mtwx", "s01mtwy", "s01mtwz"]); done(); }).catch(error => done(error)); }); it('geo.geohashSubhashes#2', function(done) { testPlan([p.xs.string("s01mtw"), p.xs.string("S")], p.geo.geohashSubhashes(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["s01mtwh", "s01mtwj", "s01mtwk", "s01mtwm", "s01mtwn", "s01mtwp", "s01mtwq", "s01mtwr", "s01mtws", "s01mtwt", "s01mtwu", "s01mtwv", "s01mtww", "s01mtwx", "s01mtwy", "s01mtwz"]); done(); }).catch(done); - }); + }); it('geo.parseWkt#1', function(done) { testPlan([p.xs.string("LINESTRING(-112.25 47.1,-112.3 47.1,-112.4 47.2)")], p.geo.parseWkt(p.col("1"))) .then(function(response) { @@ -973,756 +973,756 @@ describe('plan builder', function() { should(getResult(response).value).eql(responseValue); done(); }).catch(done); - }); + }); it('geo.validateWkt#1', function(done) { testPlan([p.xs.string("POINT(2 1)")], p.geo.validateWkt(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('json.array#0', function(done) { testPlan(undefined, p.json.array()) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([]); done(); }).catch(done); - }); + }); it('json.toArray#0', function(done) { testPlan(undefined, p.json.toArray()) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([]); done(); }).catch(done); - }); + }); it('map.entry#2', function(done) { testPlan([p.xs.string("one"), p.xs.string("two")], p.map.entry(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql({"one":"two"}); done(); }).catch(done); - }); + }); it('map.map#0', function(done) { testPlan(undefined, p.map.map()) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql({}); done(); }).catch(done); - }); + }); it('map.new#0', function(done) { testPlan(undefined, p.map.new()) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql({}); done(); }).catch(done); - }); + }); it('math.acos#1', function(done) { testPlan([p.xs.double(0.5)], p.math.acos(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.0471975511966'); done(); }).catch(done); - }); + }); it('math.asin#1', function(done) { testPlan([p.xs.double(0.5)], p.math.asin(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.523598775598299'); done(); }).catch(done); - }); + }); it('math.atan#1', function(done) { testPlan([p.xs.double(3.14159)], p.math.atan(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.26262701154934'); done(); }).catch(done); - }); + }); it('math.atan2#2', function(done) { testPlan([p.xs.double(36.23), p.xs.double(5.234)], p.math.atan2(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.42732303452594'); done(); }).catch(done); - }); + }); it('math.ceil#1', function(done) { testPlan([p.xs.double(1.3)], p.math.ceil(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('math.cos#1', function(done) { testPlan([p.xs.double(11)], p.math.cos(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.00442569798805079'); done(); }).catch(done); - }); + }); it('math.cosh#1', function(done) { testPlan([p.xs.double(11)], p.math.cosh(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('29937.0708659498'); done(); }).catch(done); - }); + }); it('math.cot#1', function(done) { testPlan([p.xs.double(19.5)], p.math.cot(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.31422390103306'); done(); }).catch(done); - }); + }); it('math.degrees#1', function(done) { testPlan([p.xs.double(1.5707963267949)], p.math.degrees(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('90.0000000000002'); done(); }).catch(done); - }); + }); it('math.exp#1', function(done) { testPlan([p.xs.double(0.1)], p.math.exp(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.10517091807565'); done(); }).catch(done); - }); + }); it('math.fabs#1', function(done) { testPlan([p.xs.double(4.013)], p.math.fabs(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('4.013'); done(); }).catch(done); - }); + }); it('math.floor#1', function(done) { testPlan([p.xs.double(1.7)], p.math.floor(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('math.fmod#2', function(done) { testPlan([p.xs.double(10), p.xs.double(3)], p.math.fmod(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('math.frexp#1', function(done) { testPlan([p.xs.double(10)], p.math.frexp(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([0.625, 4]); done(); }).catch(done); - }); + }); it('math.ldexp#2', function(done) { testPlan([p.xs.double(1.333), p.xs.integer(10)], p.math.ldexp(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1364.992'); done(); }).catch(done); - }); + }); it('math.log#1', function(done) { testPlan([p.xs.double(1000)], p.math.log(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('6.90775527898214'); done(); }).catch(done); - }); + }); it('math.log10#1', function(done) { testPlan([p.xs.double(1000)], p.math.log10(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('math.median#1', function(done) { testPlan([p.xs.double(1.2)], p.math.median(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.2'); done(); }).catch(done); - }); + }); it('math.mode#1', function(done) { testPlan([[p.xs.string("abc"), p.xs.string("abc"), p.xs.string("def")]], p.math.mode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('math.mode#2', function(done) { testPlan([[p.xs.string("abc"), p.xs.string("abc"), p.xs.string("def")], p.xs.string("collation=http://marklogic.com/collation/")], p.math.mode(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('math.modf#1', function(done) { testPlan([p.xs.double(1.333)], p.math.modf(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([0.333, 1]); done(); }).catch(done); - }); + }); it('math.percentRank#2', function(done) { testPlan([[p.xs.double(1), p.xs.double(7), p.xs.double(5), p.xs.double(5), p.xs.double(10), p.xs.double(9)], p.xs.double(9)], p.math.percentRank(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.833333333333333'); done(); }).catch(done); - }); + }); it('math.percentRank#3', function(done) { testPlan([[p.xs.double(1), p.xs.double(7), p.xs.double(5), p.xs.double(5), p.xs.double(10), p.xs.double(9)], p.xs.double(9), p.xs.string("descending")], p.math.percentRank(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.333333333333333'); done(); }).catch(done); - }); + }); it('math.percentile#2', function(done) { testPlan([[p.xs.double(2), p.xs.double(3), p.xs.double(1), p.xs.double(4)], [p.xs.double(0.25), p.xs.double(0.75)]], p.math.percentile(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([1.5, 3.5]); done(); }).catch(done); - }); + }); it('math.pi#0', function(done) { testPlan(undefined, p.math.pi()) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3.14159265358979'); done(); }).catch(done); - }); + }); it('math.pow#2', function(done) { testPlan([p.xs.double(2), p.xs.double(10)], p.math.pow(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1024'); done(); }).catch(done); - }); + }); it('math.radians#1', function(done) { testPlan([p.xs.double(90)], p.math.radians(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.5707963267949'); done(); }).catch(done); - }); + }); it('math.rank#2', function(done) { testPlan([[p.xs.double(1), p.xs.double(7), p.xs.double(5), p.xs.double(5), p.xs.double(10), p.xs.double(9)], p.xs.double(9)], p.math.rank(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('5'); done(); }).catch(done); - }); + }); it('math.rank#3', function(done) { testPlan([[p.xs.double(1), p.xs.double(7), p.xs.double(5), p.xs.double(5), p.xs.double(10), p.xs.double(9)], p.xs.double(9), p.xs.string("descending")], p.math.rank(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('math.sin#1', function(done) { testPlan([p.xs.double(1.95)], p.math.sin(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.928959715003869'); done(); }).catch(done); - }); + }); it('math.sinh#1', function(done) { testPlan([p.xs.double(1.95)], p.math.sinh(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3.44320675450139'); done(); }).catch(done); - }); + }); it('math.sqrt#1', function(done) { testPlan([p.xs.double(4)], p.math.sqrt(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('math.stddev#1', function(done) { testPlan([p.xs.double(1.2)], p.math.stddev(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(null); done(); }).catch(done); - }); + }); it('math.stddevP#1', function(done) { testPlan([p.xs.double(1.2)], p.math.stddevP(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('math.tan#1', function(done) { testPlan([p.xs.double(19.5)], p.math.tan(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.760905351982977'); done(); }).catch(done); - }); + }); it('math.tanh#1', function(done) { testPlan([p.xs.double(0.95)], p.math.tanh(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0.739783051274004'); done(); }).catch(done); - }); + }); it('math.trunc#1', function(done) { testPlan([p.xs.double(123.456)], p.math.trunc(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('123'); done(); }).catch(done); - }); + }); it('math.trunc#2', function(done) { testPlan([p.xs.double(123.456), p.xs.integer(2)], p.math.trunc(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('123.45'); done(); }).catch(done); - }); + }); it('math.variance#1', function(done) { testPlan([p.xs.double(1.2)], p.math.variance(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(null); done(); }).catch(done); - }); + }); it('math.varianceP#1', function(done) { testPlan([p.xs.double(1.2)], p.math.varianceP(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('rdf.langString#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("en")], p.rdf.langString(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('rdf.langStringLanguage#1', function(done) { testPlan([p.rdf.langString("abc", "en")], p.rdf.langStringLanguage(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('en'); done(); }).catch(done); - }); + }); it('sem.coalesce#2', function(done) { testPlan([p.xs.string("a"), p.xs.string("b")], p.sem.coalesce(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('sem.coalesce#3', function(done) { testPlan([p.xs.string("a"), p.xs.string("b"), p.xs.string("c")], p.sem.coalesce(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('sem.datatype#1', function(done) { testPlan([p.xs.string("a")], p.sem.datatype(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://www.w3.org/2001/XMLSchema#string'); done(); }).catch(done); - }); + }); it('sem.defaultGraphIri#0', function(done) { testPlan(undefined, p.sem.defaultGraphIri()) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://marklogic.com/semantics#default-graph'); done(); }).catch(done); - }); + }); it('sem.if#3', function(done) { testPlan([p.xs.boolean(true), p.xs.string("a"), p.xs.string("b")], p.sem.if(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('sem.invalid#2', function(done) { testPlan([p.xs.string("abc"), p.sem.iri("http://a/b")], p.sem.invalid(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sem.iri#1', function(done) { testPlan([p.xs.string("http://a/b")], p.sem.iri(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://a/b'); done(); }).catch(done); - }); + }); it('sem.iriToQName#1', function(done) { testPlan([p.xs.string("http://a/b")], p.sem.iriToQName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('b'); done(); }).catch(done); - }); + }); it('sem.isBlank#1', function(done) { testPlan([p.xs.double(1)], p.sem.isBlank(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('sem.isIRI#1', function(done) { testPlan([p.xs.double(1)], p.sem.isIRI(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('sem.isLiteral#1', function(done) { testPlan([p.xs.double(1)], p.sem.isLiteral(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('sem.isNumeric#1', function(done) { testPlan([p.xs.string("a")], p.sem.isNumeric(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('sem.lang#1', function(done) { testPlan([p.xs.string("abc")], p.sem.lang(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal(''); done(); }).catch(done); - }); + }); it('sem.langMatches#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("abc")], p.sem.langMatches(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('sem.QNameToIri#1', function(done) { testPlan([p.xs.QName("abc")], p.sem.QNameToIri(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sem.sameTerm#2', function(done) { testPlan([p.xs.double(1), p.xs.double(1)], p.sem.sameTerm(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('sem.timezoneString#1', function(done) { testPlan([p.xs.dateTime("2016-01-02T10:09:08Z")], p.sem.timezoneString(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('Z'); done(); }).catch(done); - }); + }); it('sem.typedLiteral#2', function(done) { testPlan([p.xs.string("abc"), p.sem.iri("http://a/b")], p.sem.typedLiteral(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sem.unknown#2', function(done) { testPlan([p.xs.string("abc"), p.sem.iri("http://a/b")], p.sem.unknown(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('spell.doubleMetaphone#1', function(done) { testPlan([p.xs.string("smith")], p.spell.doubleMetaphone(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(["smo", "xmt"]); done(); }).catch(done); - }); + }); it('spell.levenshteinDistance#2', function(done) { testPlan([p.xs.string("cat"), p.xs.string("cats")], p.spell.levenshteinDistance(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('spell.romanize#1', function(done) { testPlan([p.xs.string("abc")], p.spell.romanize(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sql.bitLength#1', function(done) { testPlan([p.xs.string("abc")], p.sql.bitLength(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('24'); done(); }).catch(done); - }); + }); it('sql.bucket#2', function(done) { testPlan([[p.xs.double(2), p.xs.double(4)], p.xs.double(3)], p.sql.bucket(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('sql.collatedString#2', function(done) { testPlan([p.xs.string("a"), p.xs.string("http://marklogic.com/collation/")], p.sql.collatedString(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('sql.dateadd#3', function(done) { testPlan([p.xs.string("day"), p.xs.int(3), p.xs.string("2016-01-02T10:09:08Z")], p.sql.dateadd(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016-01-05T10:09:08Z'); done(); }).catch(done); - }); + }); it('sql.datediff#3', function(done) { testPlan([p.xs.string("day"), p.xs.string("2016-01-02T10:09:08Z"), p.xs.string("2016-01-05T10:09:08Z")], p.sql.datediff(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('sql.datepart#2', function(done) { testPlan([p.xs.string("day"), p.xs.string("2016-01-05T10:09:08Z")], p.sql.datepart(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('5'); done(); }).catch(done); - }); + }); it('sql.day#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.day(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('sql.dayname#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.dayname(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('Saturday'); done(); }).catch(done); - }); + }); it('sql.glob#2', function(done) { testPlan([p.xs.string("abcdefg"), p.xs.string("a??d*g")], p.sql.glob(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('sql.hours#1', function(done) { testPlan([p.xs.string("10:09:08")], p.sql.hours(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('10'); done(); }).catch(done); - }); + }); it('sql.ifnull#2', function(done) { testPlan([p.xs.string("a"), p.xs.string("b")], p.sql.ifnull(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('sql.insert#4', function(done) { testPlan([p.xs.string("axxxf"), p.xs.double(2), p.xs.double(3), p.xs.string("bcde")], p.sql.insert(p.col("1"), p.col("2"), p.col("3"), p.col("4"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abcdef'); done(); }).catch(done); - }); + }); it('sql.instr#2', function(done) { testPlan([p.xs.string("abcde"), p.xs.string("cd")], p.sql.instr(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('sql.left#2', function(done) { testPlan([p.xs.string("abcde"), p.xs.double(3)], p.sql.left(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sql.like#2', function(done) { testPlan([p.xs.string("abcdefg%h"), p.xs.string("a__d%g!%h")], p.sql.like(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(false); done(); }).catch(done); - }); + }); it('sql.like#3', function(done) { testPlan([p.xs.string("abcdefg%h"), p.xs.string("a__d%g!%h"), p.xs.string("!")], p.sql.like(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('sql.ltrim#1', function(done) { testPlan([p.xs.string(" abc")], p.sql.ltrim(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sql.minutes#1', function(done) { testPlan([p.xs.string("10:09:08")], p.sql.minutes(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('9'); done(); }).catch(done); - }); + }); it('sql.month#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.month(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('sql.monthname#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.monthname(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('January'); done(); }).catch(done); - }); + }); it('sql.nullif#2', function(done) { testPlan([p.xs.string("a"), p.xs.string("b")], p.sql.nullif(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a'); done(); }).catch(done); - }); + }); it('sql.octetLength#1', function(done) { testPlan([p.xs.string("abc")], p.sql.octetLength(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3'); done(); }).catch(done); - }); + }); it('sql.quarter#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.quarter(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('sql.repeat#2', function(done) { testPlan([p.xs.string("abc"), p.xs.double(2)], p.sql.repeat(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abcabc'); done(); }).catch(done); - }); + }); it('sql.right#2', function(done) { testPlan([p.xs.string("abcde"), p.xs.double(3)], p.sql.right(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('cde'); done(); }).catch(done); - }); + }); it('sql.rtrim#1', function(done) { testPlan([p.xs.string("abc ")], p.sql.rtrim(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sql.seconds#1', function(done) { testPlan([p.xs.string("10:09:08")], p.sql.seconds(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('8'); done(); }).catch(done); - }); + }); it('sql.sign#1', function(done) { testPlan([p.xs.double(-3)], p.sql.sign(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('-1'); done(); }).catch(done); - }); + }); it('sql.soundex#1', function(done) { testPlan([p.xs.string("word")], p.sql.soundex(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('W630'); done(); }).catch(done); - }); + }); it('sql.space#1', function(done) { testPlan([p.xs.double(2)], p.sql.space(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value)).equal(' '); done(); }).catch(done); - }); + }); it('sql.strpos#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("b")], p.sql.strpos(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('sql.strpos#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("b"), p.xs.string("http://marklogic.com/collation/")], p.sql.strpos(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('sql.trim#1', function(done) { testPlan([p.xs.string(" abc ")], p.sql.trim(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('sql.week#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.week(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('53'); done(); }).catch(done); - }); + }); it('sql.weekday#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.weekday(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('6'); done(); }).catch(done); - }); + }); it('sql.year#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.year(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016'); done(); }).catch(done); - }); + }); it('sql.yearday#1', function(done) { testPlan([p.xs.string("2016-01-02")], p.sql.yearday(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('vec.base64Decode#1', function(done) { if(serverConfiguration.serverVersion < 12) { this.skip(); @@ -1765,877 +1765,877 @@ describe('plan builder', function() { }); it('xdmp.add64#2', function(done) { testPlan([p.xs.unsignedLong(123), p.xs.unsignedLong(456)], p.xdmp.add64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('579'); done(); }).catch(done); - }); + }); it('xdmp.and64#2', function(done) { testPlan([p.xs.unsignedLong(255), p.xs.unsignedLong(2)], p.xdmp.and64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('xdmp.base64Decode#1', function(done) { testPlan([p.xs.string("aGVsbG8sIHdvcmxk")], p.xdmp.base64Decode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql("hello, world"); done(); }).catch(done); - }); + }); it('xdmp.base64Encode#1', function(done) { testPlan([p.xs.string("hello, world")], p.xdmp.base64Encode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('aGVsbG8sIHdvcmxk'); done(); }).catch(done); - }); + }); it('xdmp.castableAs#3', function(done) { testPlan([p.xs.string("http://www.w3.org/2001/XMLSchema"), p.xs.string("int"), p.xs.string("1")], p.xdmp.castableAs(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('xdmp.crypt#2', function(done) { testPlan([p.xs.string("123abc"), p.xs.string("admin")], p.xdmp.crypt(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('arQEnpM6JHR8vY4n3e5gr0'); done(); }).catch(done); - }); + }); it('xdmp.daynameFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02")], p.xdmp.daynameFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('Saturday'); done(); }).catch(done); - }); + }); it('xdmp.decodeFromNCName#1', function(done) { testPlan([p.xs.string("A_20_Name")], p.xdmp.decodeFromNCName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('A Name'); done(); }).catch(done); - }); + }); it('xdmp.diacriticLess#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.diacriticLess(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('xdmp.encodeForNCName#1', function(done) { testPlan([p.xs.string("A Name")], p.xdmp.encodeForNCName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('A_20_Name'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#1', function(done) { testPlan([p.xs.double(9)], p.xdmp.formatNumber(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('9'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#2', function(done) { testPlan([p.xs.double(9), p.xs.string("W")], p.xdmp.formatNumber(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('9'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#3', function(done) { testPlan([p.xs.double(9), p.xs.string("W"), p.xs.string("en")], p.xdmp.formatNumber(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('NINE'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#4', function(done) { testPlan([p.xs.double(9), p.xs.string("W"), p.xs.string("en"), p.xs.string("")], p.xdmp.formatNumber(p.col("1"), p.col("2"), p.col("3"), p.col("4"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('NINE'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#5', function(done) { testPlan([p.xs.double(9), p.xs.string("W"), p.xs.string("en"), p.xs.string(""), p.xs.string("")], p.xdmp.formatNumber(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('NINE'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#6', function(done) { testPlan([p.xs.double(9), p.xs.string("W"), p.xs.string("en"), p.xs.string(""), p.xs.string(""), p.xs.string("")], p.xdmp.formatNumber(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"), p.col("6"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('NINE'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#7', function(done) { testPlan([p.xs.double(9), p.xs.string("W"), p.xs.string("en"), p.xs.string(""), p.xs.string(""), p.xs.string(""), p.xs.string(",")], p.xdmp.formatNumber(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"), p.col("6"), p.col("7"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('NINE'); done(); }).catch(done); - }); + }); it('xdmp.formatNumber#8', function(done) { testPlan([p.xs.double(9), p.xs.string("W"), p.xs.string("en"), p.xs.string(""), p.xs.string(""), p.xs.string(""), p.xs.string(","), p.xs.integer(3)], p.xdmp.formatNumber(p.col("1"), p.col("2"), p.col("3"), p.col("4"), p.col("5"), p.col("6"), p.col("7"), p.col("8"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('NINE'); done(); }).catch(done); - }); + }); it('xdmp.hash32#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.hash32(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('4229403455'); done(); }).catch(done); - }); + }); it('xdmp.hash64#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.hash64(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('13056678368508584127'); done(); }).catch(done); - }); + }); it('xdmp.hexToInteger#1', function(done) { testPlan([p.xs.string("1234567890abcdef")], p.xdmp.hexToInteger(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1311768467294899695'); done(); }).catch(done); - }); + }); it('xdmp.hmacMd5#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def")], p.xdmp.hmacMd5(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('debda77b7cc3e7a10ee70104e6717a6b'); done(); }).catch(done); - }); + }); it('xdmp.hmacMd5#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def"), p.xs.string("base64")], p.xdmp.hmacMd5(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3r2ne3zD56EO5wEE5nF6aw=='); done(); }).catch(done); - }); + }); it('xdmp.hmacSha1#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def")], p.xdmp.hmacSha1(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('12554eabbaf7e8e12e4737020f987ca7901016e5'); done(); }).catch(done); - }); + }); it('xdmp.hmacSha1#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def"), p.xs.string("base64")], p.xdmp.hmacSha1(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ElVOq7r36OEuRzcCD5h8p5AQFuU='); done(); }).catch(done); - }); + }); it('xdmp.hmacSha256#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def")], p.xdmp.hmacSha256(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('20ebc0f09344470134f35040f63ea98b1d8e414212949ee5c500429d15eab081'); done(); }).catch(done); - }); + }); it('xdmp.hmacSha256#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def"), p.xs.string("base64")], p.xdmp.hmacSha256(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('IOvA8JNERwE081BA9j6pix2OQUISlJ7lxQBCnRXqsIE='); done(); }).catch(done); - }); + }); it('xdmp.hmacSha512#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def")], p.xdmp.hmacSha512(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('bf93c3deee1eb6660ec00820a285327b3e8b775f641fd7f2ea321b6a241afe7b49a5cca81d2e8e1d206bd3379530e2d9ad3a7b2cc54ca66ea3352ebfee3862e5'); done(); }).catch(done); - }); + }); it('xdmp.hmacSha512#3', function(done) { testPlan([p.xs.string("abc"), p.xs.string("def"), p.xs.string("base64")], p.xdmp.hmacSha512(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('v5PD3u4etmYOwAggooUyez6Ld19kH9fy6jIbaiQa/ntJpcyoHS6OHSBr0zeVMOLZrTp7LMVMpm6jNS6/7jhi5Q=='); done(); }).catch(done); - }); + }); it('xdmp.initcap#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.initcap(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('Abc'); done(); }).catch(done); - }); + }); it('xdmp.integerToHex#1', function(done) { testPlan([p.xs.integer(123)], p.xdmp.integerToHex(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('7b'); done(); }).catch(done); - }); + }); it('xdmp.integerToOctal#1', function(done) { testPlan([p.xs.integer(123)], p.xdmp.integerToOctal(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('173'); done(); }).catch(done); - }); + }); it('xdmp.keyFromQName#1', function(done) { testPlan([p.xs.QName("abc")], p.xdmp.keyFromQName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('xdmp.lshift64#2', function(done) { testPlan([p.xs.unsignedLong(255), p.xs.long(2)], p.xdmp.lshift64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1020'); done(); }).catch(done); - }); + }); it('xdmp.md5#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.md5(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('900150983cd24fb0d6963f7d28e17f72'); done(); }).catch(done); - }); + }); it('xdmp.md5#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("base64")], p.xdmp.md5(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('kAFQmDzST7DWlj99KOF/cg=='); done(); }).catch(done); - }); + }); it('xdmp.monthNameFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02")], p.xdmp.monthNameFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('January'); done(); }).catch(done); - }); + }); it('xdmp.mul64#2', function(done) { testPlan([p.xs.unsignedLong(123), p.xs.unsignedLong(456)], p.xdmp.mul64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('56088'); done(); }).catch(done); - }); + }); it('xdmp.not64#1', function(done) { testPlan([p.xs.unsignedLong(255)], p.xdmp.not64(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('18446744073709551360'); done(); }).catch(done); - }); + }); it('xdmp.octalToInteger#1', function(done) { testPlan([p.xs.string("12345670")], p.xdmp.octalToInteger(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2739128'); done(); }).catch(done); - }); + }); it('xdmp.or64#2', function(done) { testPlan([p.xs.unsignedLong(255), p.xs.unsignedLong(2)], p.xdmp.or64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('255'); done(); }).catch(done); - }); + }); it('xdmp.position#2', function(done) { testPlan([p.xs.string("abcdef"), p.xs.string("cd")], p.xdmp.position(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('xdmp.position#3', function(done) { testPlan([p.xs.string("abcdef"), p.xs.string("cd"), p.xs.string("http://marklogic.com/collation/")], p.xdmp.position(p.col("1"), p.col("2"), p.col("3"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('xdmp.QNameFromKey#1', function(done) { testPlan([p.xs.string("{http://a/b}c")], p.xdmp.QNameFromKey(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('c'); done(); }).catch(done); - }); + }); it('xdmp.quarterFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02")], p.xdmp.quarterFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xdmp.resolveUri#2', function(done) { testPlan([p.xs.string("b?c#d"), p.xs.string("/a/x")], p.xdmp.resolveUri(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('/a/b?c#d'); done(); }).catch(done); - }); + }); it('xdmp.rshift64#2', function(done) { testPlan([p.xs.unsignedLong(255), p.xs.long(2)], p.xdmp.rshift64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('63'); done(); }).catch(done); - }); + }); it('xdmp.sha1#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.sha1(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a9993e364706816aba3e25717850c26c9cd0d89d'); done(); }).catch(done); - }); + }); it('xdmp.sha1#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("base64")], p.xdmp.sha1(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('qZk+NkcGgWq6PiVxeFDCbJzQ2J0='); done(); }).catch(done); - }); + }); it('xdmp.sha256#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.sha256(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'); done(); }).catch(done); - }); + }); it('xdmp.sha256#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("base64")], p.xdmp.sha256(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0='); done(); }).catch(done); - }); + }); it('xdmp.sha384#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.sha384(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7'); done(); }).catch(done); - }); + }); it('xdmp.sha384#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("base64")], p.xdmp.sha384(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ywB1P0WjXou1oD1pmsZQBycsMqsO3tFjGotgWkP/W+2AhgcroefMI1i67KE0yCWn'); done(); }).catch(done); - }); + }); it('xdmp.sha512#1', function(done) { testPlan([p.xs.string("abc")], p.xdmp.sha512(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f'); done(); }).catch(done); - }); + }); it('xdmp.sha512#2', function(done) { testPlan([p.xs.string("abc"), p.xs.string("base64")], p.xdmp.sha512(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('3a81oZNherrMQXNJriBBMRLm+k6JqX6iCp7u5ktV05ohkpkqJ0/BqDa6PCOj/uu9RU1EI2Q86A4qmslPpUyknw=='); done(); }).catch(done); - }); + }); it('xdmp.step64#2', function(done) { testPlan([p.xs.unsignedLong(123), p.xs.unsignedLong(456)], p.xdmp.step64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('8966314677'); done(); }).catch(done); - }); + }); it('xdmp.type#1', function(done) { testPlan([p.xs.string("a")], p.xdmp.type(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('string'); done(); }).catch(done); - }); + }); it('xdmp.unquote#1', function(done) { if(serverConfiguration.serverVersion < 11){ this.skip(); } testPlan([p.xs.string("[123]")], p.xdmp.unquote(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql([123]); done(); }).catch(done); - }); + }); it('xdmp.uriContentType#1', function(done) { testPlan([p.xs.string("a.json")], p.xdmp.uriContentType(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('application/json'); done(); }).catch(done); - }); + }); it('xdmp.uriFormat#1', function(done) { testPlan([p.xs.string("a.json")], p.xdmp.uriFormat(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('json'); done(); }).catch(done); - }); + }); it('xdmp.urlDecode#1', function(done) { testPlan([p.xs.string("a+b")], p.xdmp.urlDecode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a b'); done(); }).catch(done); - }); + }); it('xdmp.urlEncode#1', function(done) { testPlan([p.xs.string("a b")], p.xdmp.urlEncode(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a+b'); done(); }).catch(done); - }); + }); it('xdmp.weekFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02")], p.xdmp.weekFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('53'); done(); }).catch(done); - }); + }); it('xdmp.weekdayFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02")], p.xdmp.weekdayFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('6'); done(); }).catch(done); - }); + }); it('xdmp.xor64#2', function(done) { testPlan([p.xs.unsignedLong(255), p.xs.unsignedLong(2)], p.xdmp.xor64(p.col("1"), p.col("2"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('253'); done(); }).catch(done); - }); + }); it('xdmp.yeardayFromDate#1', function(done) { testPlan([p.xs.date("2016-01-02")], p.xdmp.yeardayFromDate(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2'); done(); }).catch(done); - }); + }); it('xs.anyURI#1', function(done) { testPlan([p.xs.string("http://a/b?c#d")], p.xs.anyURI(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('http://a/b?c#d'); done(); }).catch(done); - }); + }); it('xs.base64Binary#1', function(done) { testPlan([p.xs.string("aGVsbG8sIHdvcmxk")], p.xs.base64Binary(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('aGVsbG8sIHdvcmxk'); done(); }).catch(done); - }); + }); it('xs.boolean#1', function(done) { testPlan([p.xs.boolean(true)], p.xs.boolean(p.col("1"))) - .then(function(response) { + .then(function(response) { should(getResult(response).value).eql(true); done(); }).catch(done); - }); + }); it('xs.byte#1', function(done) { testPlan([p.xs.double(1)], p.xs.byte(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.date#1', function(done) { testPlan([p.xs.string("2016-01-02Z")], p.xs.date(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016-01-02Z'); done(); }).catch(done); - }); + }); it('xs.dateTime#1', function(done) { testPlan([p.xs.string("2016-01-02T10:09:08Z")], p.xs.dateTime(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016-01-02T10:09:08Z'); done(); }).catch(done); - }); + }); it('xs.dayTimeDuration#1', function(done) { testPlan([p.xs.string("P3DT4H5M6S")], p.xs.dayTimeDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('P3DT4H5M6S'); done(); }).catch(done); - }); + }); it('xs.decimal#1', function(done) { testPlan([p.xs.double(1.2)], p.xs.decimal(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.2'); done(); }).catch(done); - }); + }); it('xs.double#1', function(done) { testPlan([p.xs.double(1.2)], p.xs.double(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.2'); done(); }).catch(done); - }); + }); it('xs.float#1', function(done) { testPlan([p.xs.double(1)], p.xs.float(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.gDay#1', function(done) { testPlan([p.xs.string("---02")], p.xs.gDay(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('---02'); done(); }).catch(done); - }); + }); it('xs.gMonth#1', function(done) { testPlan([p.xs.string("--01")], p.xs.gMonth(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('--01'); done(); }).catch(done); - }); + }); it('xs.gMonthDay#1', function(done) { testPlan([p.xs.string("--01-02")], p.xs.gMonthDay(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('--01-02'); done(); }).catch(done); - }); + }); it('xs.gYear#1', function(done) { testPlan([p.xs.string("2016")], p.xs.gYear(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016'); done(); }).catch(done); - }); + }); it('xs.gYearMonth#1', function(done) { testPlan([p.xs.string("2016-01")], p.xs.gYearMonth(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('2016-01'); done(); }).catch(done); - }); + }); it('xs.hexBinary#1', function(done) { testPlan([p.xs.string("68656c6c6f2c20776f726c64")], p.xs.hexBinary(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('68656C6C6F2C20776F726C64'); done(); }).catch(done); - }); + }); it('xs.int#1', function(done) { testPlan([p.xs.double(1)], p.xs.int(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.integer#1', function(done) { testPlan([p.xs.double(1)], p.xs.integer(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.language#1', function(done) { testPlan([p.xs.string("en-US")], p.xs.language(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('en-US'); done(); }).catch(done); - }); + }); it('xs.long#1', function(done) { testPlan([p.xs.double(1)], p.xs.long(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.Name#1', function(done) { testPlan([p.xs.string("a:b:c")], p.xs.Name(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a:b:c'); done(); }).catch(done); - }); + }); it('xs.NCName#1', function(done) { testPlan([p.xs.string("a-b-c")], p.xs.NCName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a-b-c'); done(); }).catch(done); - }); + }); it('xs.negativeInteger#1', function(done) { testPlan([p.xs.double(-1)], p.xs.negativeInteger(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('-1'); done(); }).catch(done); - }); + }); it('xs.NMTOKEN#1', function(done) { testPlan([p.xs.string("a:b:c")], p.xs.NMTOKEN(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a:b:c'); done(); }).catch(done); - }); + }); it('xs.nonNegativeInteger#1', function(done) { testPlan([p.xs.string("0")], p.xs.nonNegativeInteger(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('xs.nonPositiveInteger#1', function(done) { testPlan([p.xs.string("0")], p.xs.nonPositiveInteger(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('0'); done(); }).catch(done); - }); + }); it('xs.normalizedString#1', function(done) { testPlan([p.xs.string("a b c")], p.xs.normalizedString(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a b c'); done(); }).catch(done); - }); + }); it('xs.numeric#1', function(done) { testPlan([p.xs.double(1.2)], p.xs.numeric(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1.2'); done(); }).catch(done); - }); + }); it('xs.positiveInteger#1', function(done) { testPlan([p.xs.double(1)], p.xs.positiveInteger(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.QName#1', function(done) { testPlan([p.xs.string("abc")], p.xs.QName(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('xs.short#1', function(done) { testPlan([p.xs.double(1)], p.xs.short(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.string#1', function(done) { testPlan([p.xs.string("abc")], p.xs.string(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('xs.time#1', function(done) { testPlan([p.xs.string("10:09:08Z")], p.xs.time(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('10:09:08Z'); done(); }).catch(done); - }); + }); it('xs.token#1', function(done) { testPlan([p.xs.string("a b c")], p.xs.token(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('a b c'); done(); }).catch(done); - }); + }); it('xs.unsignedByte#1', function(done) { testPlan([p.xs.double(1)], p.xs.unsignedByte(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.unsignedInt#1', function(done) { testPlan([p.xs.double(1)], p.xs.unsignedInt(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.unsignedLong#1', function(done) { testPlan([p.xs.double(1)], p.xs.unsignedLong(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.unsignedShort#1', function(done) { testPlan([p.xs.double(1)], p.xs.unsignedShort(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('1'); done(); }).catch(done); - }); + }); it('xs.untypedAtomic#1', function(done) { testPlan([p.xs.string("abc")], p.xs.untypedAtomic(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('abc'); done(); }).catch(done); - }); + }); it('xs.yearMonthDuration#1', function(done) { testPlan([p.xs.string("P1Y2M")], p.xs.yearMonthDuration(p.col("1"))) - .then(function(response) { + .then(function(response) { should(String(getResult(response).value).replace(/^ /, '')).equal('P1Y2M'); done(); }).catch(done); }); }); - describe('expression operators', function() { + describe('expression operators', function() { it('add#2', function(done) { testPlan([p.xs.double(1), p.xs.double(2)], p.add(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(3); done(); }).catch(done); - }); + }); it('add#3', function(done) { testPlan([p.xs.double(1), p.xs.double(2), p.xs.double(3)], p.add(p.col("1"), p.col("2"), p.col("3"))) .then(function(response) { should(getResult(response).value).equal(6); done(); }).catch(done); - }); + }); it('and#2', function(done) { testPlan([p.xs.boolean(true), p.xs.boolean(true)], p.and(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('and#3', function(done) { testPlan([p.xs.boolean(true), p.xs.boolean(true), p.xs.boolean(true)], p.and(p.col("1"), p.col("2"), p.col("3"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('divide#2', function(done) { testPlan([p.xs.double(6), p.xs.double(2)], p.divide(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(3); done(); }).catch(done); - }); + }); it('eq#2', function(done) { testPlan([p.xs.double(1), p.xs.double(1)], p.eq(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('eq#3', function(done) { testPlan([p.xs.double(1), p.xs.double(1), p.xs.double(1)], p.eq(p.col("1"), p.col("2"), p.col("3"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('ge#2', function(done) { testPlan([p.xs.double(1), p.xs.double(1)], p.ge(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('gt#2', function(done) { testPlan([p.xs.double(2), p.xs.double(1)], p.gt(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('in#2', function(done) { testPlan([p.xs.double(2), [p.xs.double(1), p.xs.double(2), p.xs.double(3)]], p.in(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('le#2', function(done) { testPlan([p.xs.double(1), p.xs.double(1)], p.le(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('lt#2', function(done) { testPlan([p.xs.double(1), p.xs.double(2)], p.lt(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('multiply#2', function(done) { testPlan([p.xs.double(2), p.xs.double(3)], p.multiply(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(6); done(); }).catch(done); - }); + }); it('multiply#3', function(done) { testPlan([p.xs.double(2), p.xs.double(3), p.xs.double(4)], p.multiply(p.col("1"), p.col("2"), p.col("3"))) .then(function(response) { should(getResult(response).value).equal(24); done(); }).catch(done); - }); + }); it('ne#2', function(done) { testPlan([p.xs.double(1), p.xs.double(2)], p.ne(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('not#1', function(done) { testPlan([p.xs.boolean(false)], p.not(p.col("1"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('or#2', function(done) { testPlan([p.xs.boolean(false), p.xs.boolean(true)], p.or(p.col("1"), p.col("2"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('or#3', function(done) { testPlan([p.xs.boolean(false), p.xs.boolean(true), p.xs.boolean(false)], p.or(p.col("1"), p.col("2"), p.col("3"))) .then(function(response) { should(getResult(response).value).equal(true); done(); }).catch(done); - }); + }); it('subtract#2', function(done) { testPlan([p.xs.double(3), p.xs.double(2)], p.subtract(p.col("1"), p.col("2"))) .then(function(response) { diff --git a/test-basic/plan-composers.js b/test-basic/plan-composers.js index 7c364edcc..705fea179 100644 --- a/test-basic/plan-composers.js +++ b/test-basic/plan-composers.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-documents.js b/test-basic/plan-documents.js index d383f8cff..1ab74686e 100644 --- a/test-basic/plan-documents.js +++ b/test-basic/plan-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-expressions.js b/test-basic/plan-expressions.js index e7b59cd99..ce06a9f00 100644 --- a/test-basic/plan-expressions.js +++ b/test-basic/plan-expressions.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-lexicons.js b/test-basic/plan-lexicons.js index 1b51edc80..43162422f 100644 --- a/test-basic/plan-lexicons.js +++ b/test-basic/plan-lexicons.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-literals.js b/test-basic/plan-literals.js index 590052e70..11aea48d5 100644 --- a/test-basic/plan-literals.js +++ b/test-basic/plan-literals.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-modifiers.js b/test-basic/plan-modifiers.js index 0d1b2755d..7cbc2c515 100644 --- a/test-basic/plan-modifiers.js +++ b/test-basic/plan-modifiers.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-nodes.js b/test-basic/plan-nodes.js index 3ba572135..78cbc5aa1 100644 --- a/test-basic/plan-nodes.js +++ b/test-basic/plan-nodes.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-processors.js b/test-basic/plan-processors.js index edb0144b7..1eea209da 100644 --- a/test-basic/plan-processors.js +++ b/test-basic/plan-processors.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-search.js b/test-basic/plan-search.js index 5524603ed..20fc30228 100644 --- a/test-basic/plan-search.js +++ b/test-basic/plan-search.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-triples.js b/test-basic/plan-triples.js index f012ef4c8..79125f80f 100644 --- a/test-basic/plan-triples.js +++ b/test-basic/plan-triples.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/plan-views.js b/test-basic/plan-views.js index 5ded4c3bb..ed1c43a93 100644 --- a/test-basic/plan-views.js +++ b/test-basic/plan-views.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/probe.js b/test-basic/probe.js index 145ed2f17..b6c4fb17f 100644 --- a/test-basic/probe.js +++ b/test-basic/probe.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'), testconfig = require('../etc/test-config.js'), diff --git a/test-basic/query-builder.js b/test-basic/query-builder.js index 90ef395a6..488f34abd 100644 --- a/test-basic/query-builder.js +++ b/test-basic/query-builder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var assert = require('assert'); var should = require('should'); diff --git a/test-basic/redactionTest.js b/test-basic/redactionTest.js index ad54e8cb2..48626d775 100644 --- a/test-basic/redactionTest.js +++ b/test-basic/redactionTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/removeAll.js b/test-basic/removeAll.js index 89015ab62..bfcaba1e3 100644 --- a/test-basic/removeAll.js +++ b/test-basic/removeAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/resources-config.js b/test-basic/resources-config.js index dc65dd7a9..1731f5e0a 100644 --- a/test-basic/resources-config.js +++ b/test-basic/resources-config.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/resources-exec.js b/test-basic/resources-exec.js index 37d043abd..136a2166f 100644 --- a/test-basic/resources-exec.js +++ b/test-basic/resources-exec.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/rest-server-properties.js b/test-basic/rest-server-properties.js index ed09f5f9b..b7a0d0abb 100644 --- a/test-basic/rest-server-properties.js +++ b/test-basic/rest-server-properties.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/rows-graphQl.js b/test-basic/rows-graphQl.js index e4f363bab..a1d3b615c 100644 --- a/test-basic/rows-graphQl.js +++ b/test-basic/rows-graphQl.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const testconfig = require('../etc/test-config.js'); diff --git a/test-basic/rows.js b/test-basic/rows.js index 13afee8b6..704a7fbe6 100644 --- a/test-basic/rows.js +++ b/test-basic/rows.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'), fs = require('fs'), @@ -236,7 +236,6 @@ describe('rows', function(){ }); describe('from a TDE view', function(){ - // View defined in etc/data/employees.tdej const planFromBuilderTemplate = p.fromView('company', 'employees', '') .select(['EmployeeID', 'FirstName', 'LastName']) .orderBy('LastName'); diff --git a/test-basic/server-exec.js b/test-basic/server-exec.js index 668c178e9..020573b11 100644 --- a/test-basic/server-exec.js +++ b/test-basic/server-exec.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/service-caller.js b/test-basic/service-caller.js index cc63feeec..aee8c50e8 100644 --- a/test-basic/service-caller.js +++ b/test-basic/service-caller.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var marklogic = require('../'); @@ -12,6 +12,7 @@ let gulpConfig = require('../gulpfile.js'); describe('Service caller', function() { before(function(done){ + this.timeout(30000); // set timeout to 30 seconds, because some of the tests take a while gulpConfig.loadProxyTests(); setTimeout(()=>{done();}, 5000); }); diff --git a/test-basic/shortest-path.js b/test-basic/shortest-path.js index fb5ebde62..7d9e88135 100644 --- a/test-basic/shortest-path.js +++ b/test-basic/shortest-path.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/ssl-min-allow-tls-test.js b/test-basic/ssl-min-allow-tls-test.js index 08c775d11..fb0690302 100644 --- a/test-basic/ssl-min-allow-tls-test.js +++ b/test-basic/ssl-min-allow-tls-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ let testconfig = require('../etc/test-config.js'); diff --git a/test-basic/suggest.js b/test-basic/suggest.js index c543058e5..8c8bc180a 100644 --- a/test-basic/suggest.js +++ b/test-basic/suggest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var assert = require('assert'); var should = require('should'); diff --git a/test-basic/test-internal.js b/test-basic/test-internal.js index 4d33cfb30..8a726790c 100644 --- a/test-basic/test-internal.js +++ b/test-basic/test-internal.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const testconfig = require("../etc/test-config"); diff --git a/test-basic/test-util.js b/test-basic/test-util.js index 470cabe0f..7b3a1deb0 100644 --- a/test-basic/test-util.js +++ b/test-basic/test-util.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var stream = require('stream'); var util = require('util'); diff --git a/test-basic/timestamp.js b/test-basic/timestamp.js index 448ef4dee..2ebd444f1 100644 --- a/test-basic/timestamp.js +++ b/test-basic/timestamp.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var valcheck = require('core-util-is'); diff --git a/test-basic/transactions.js b/test-basic/transactions.js index f0df83a7d..ea39f6f74 100644 --- a/test-basic/transactions.js +++ b/test-basic/transactions.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); @@ -234,7 +234,7 @@ describe('transaction', function(){ tid = txn.txid; var txnRaw = {txid: txn.txid, cookies: txn.cookies}; var convertedTransaction = mlutil.convertTransaction(txnRaw); - + return db.transactions.read(convertedTransaction).result() ; }) .then(function(document) { diff --git a/test-basic/transformDoc-test.js b/test-basic/transformDoc-test.js index eb715628b..6b5069a3b 100644 --- a/test-basic/transformDoc-test.js +++ b/test-basic/transformDoc-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); diff --git a/test-basic/unnestTest.js b/test-basic/unnestTest.js index cae9480ba..695956b81 100644 --- a/test-basic/unnestTest.js +++ b/test-basic/unnestTest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const assert = require('assert'); const marklogic = require('../'); diff --git a/test-basic/validateDoc-test.js b/test-basic/validateDoc-test.js index ba534be0a..c18607e58 100644 --- a/test-basic/validateDoc-test.js +++ b/test-basic/validateDoc-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); @@ -184,24 +184,27 @@ describe('optic-update validateDoc tests', function () { }); it('test validateDoc with 1 invalid doc and no "onError" defined, should return nothing in 11.1-, or throw an exception on 11.2+', function (done) { - try { - const plan = op.fromDocDescriptors([{ uri: '/test/optic/validateDoc/toValidate1.xml' }]) - .joinDocCols(null, op.col('uri')) - .validateDoc('doc', { kind: 'xmlSchema' }); - db.rows.query(plan, options).then(res => { - try { - (res === undefined).should.equal(true); - done(); - } catch (e) { - done(e); - } - }).catch(e => { - e.message.should.equal('query rows: response with invalid 500 status with path: /v1/rows/update'); + const plan = op.fromDocDescriptors([{ uri: '/test/optic/validateDoc/toValidate1.xml' }]) + .joinDocCols(null, op.col('uri')) + .validateDoc('doc', { kind: 'xmlSchema' }); + + db.rows.query(plan, options).then(res => { + // If we get here, the query succeeded (expected in 11.1-) + try { + (res === undefined).should.equal(true); done(); - }); - } catch (e) { - done(e); - } + } catch (e) { + done(e); + } + }).catch(e => { + // If we get here, the query failed (expected in 11.2+) + try { + e.message.should.containEql('query rows: response with invalid 500 status with path: /v1/rows/update'); + done(); + } catch (assertionError) { + done(assertionError); + } + }); }); // Skip this test until the 'onError' function is available in plan-builder.js diff --git a/test-basic/values-builder.js b/test-basic/values-builder.js index 18bb32c7f..47d0d76b5 100644 --- a/test-basic/values-builder.js +++ b/test-basic/values-builder.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var assert = require('assert'); var should = require('should'); diff --git a/test-basic/values.js b/test-basic/values.js index c8bd04197..9951a5a13 100644 --- a/test-basic/values.js +++ b/test-basic/values.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-basic/vector-util-test.js b/test-basic/vector-util-test.js index a918628ec..410f31e42 100644 --- a/test-basic/vector-util-test.js +++ b/test-basic/vector-util-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-basic/write-test.js b/test-basic/write-test.js index ac85a8c08..c0de32506 100644 --- a/test-basic/write-test.js +++ b/test-basic/write-test.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; const should = require('should'); diff --git a/test-complete-app/build.gradle b/test-complete-app/build.gradle deleted file mode 100644 index 71ecd1e0c..000000000 --- a/test-complete-app/build.gradle +++ /dev/null @@ -1,16 +0,0 @@ -plugins { - id "net.saliman.properties" version "1.5.1" - id "com.marklogic.ml-gradle" version "4.7.0" -} - -/* - * Since our REST API server uses a certificate template, we need to execute an extra command to generate a temporary - * certificate for this template - without that, the REST API server won't be able to receive HTTP or HTTPS requests. - */ -ext { - def command = new com.marklogic.appdeployer.command.security.GenerateTemporaryCertificateCommand() - command.setTemplateIdOrName("ssl-project-template") - command.setCommonName("localhost") - command.setValidFor(365) - mlAppDeployer.commands.add(command) -} \ No newline at end of file diff --git a/test-complete-app/gradle.properties b/test-complete-app/gradle.properties deleted file mode 100644 index 3d61cb0a0..000000000 --- a/test-complete-app/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -mlHost=localhost -mlUsername=admin -mlPassword=admin - -mlNoRestServer=true diff --git a/test-complete-app/gradle/wrapper/gradle-wrapper.jar b/test-complete-app/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f..000000000 Binary files a/test-complete-app/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/test-complete-app/gradle/wrapper/gradle-wrapper.properties b/test-complete-app/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e411586a5..000000000 --- a/test-complete-app/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/test-complete-app/gradlew b/test-complete-app/gradlew deleted file mode 100755 index cccdd3d51..000000000 --- a/test-complete-app/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/test-complete-app/gradlew.bat b/test-complete-app/gradlew.bat deleted file mode 100644 index f9553162f..000000000 --- a/test-complete-app/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/test-complete-app/src/main/ml-config/security/certificate-templates/template-1.xml b/test-complete-app/src/main/ml-config/security/certificate-templates/template-1.xml deleted file mode 100644 index d745328de..000000000 --- a/test-complete-app/src/main/ml-config/security/certificate-templates/template-1.xml +++ /dev/null @@ -1,17 +0,0 @@ - - ssl-project-template - This template is used to demonstrate how ml-gradle can enable SSL for an app server - rsa - - - 0 - - US - VA - McLean - MarkLogic - Sales - nobody@marklogic.com - - - \ No newline at end of file diff --git a/test-complete-proxy/gulpfile.js b/test-complete-proxy/gulpfile.js index 98ef270ee..27e1deb35 100755 --- a/test-complete-proxy/gulpfile.js +++ b/test-complete-proxy/gulpfile.js @@ -1,95 +1,86 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -const path = require('path'); -const gulp = require('gulp'); -const jshint = require('gulp-jshint'); -const mocha = require('gulp-mocha'); -const jsdoc = require('gulp-jsdoc3'); - -const { parallel, series } = gulp; - -const marklogic = require('../'); -const proxy = require('../lib/proxy-generator.js'); -const testconfig = require('../etc/test-config-qa.js'); -const basicloader = require('../lib/basic-loader.js'); - -function lint() { - return gulp.src('lib/*') - .pipe(jshint({lookup:true})) - .pipe(jshint.reporter('default')); -} - -function test() { - return gulp.src(['test-basic/*.js']) - .pipe(mocha({ - reporter: 'spec', - globals: { - should: require('should') - } - })); -} - -let testModulesClient = null; -function getTestModulesClient() { - var modDBName = testconfig.testServerName+'-modules'; - if (testModulesClient === null) { - const connectionParams = { - host: testconfig.restEvaluatorConnection.host, - port: testconfig.restEvaluatorConnection.port, - user: testconfig.restEvaluatorConnection.user, - password: testconfig.restEvaluatorConnection.password, - authType: testconfig.restEvaluatorConnection.authType, - database: modDBName - }; - testModulesClient = marklogic.createDatabaseClient(connectionParams); - } - return testModulesClient; -} -function getTestDocumentPermissions() { - return [ - {'role-name':'rest-reader', capabilities:['read', 'execute']}, - {'role-name':'rest-writer', capabilities:['update']} - ]; -} - -function loadQAModules(callback) { - const databaseClient = getTestModulesClient(); - const documentMetadata = { - collections: ['/qa/test/cases'], - permissions: getTestDocumentPermissions() - }; - const uriPrefix = '/qa/test/'; - const uriStartDepth = 2; - return gulp.src([ - '../test-complete-proxy/ml-modules/*/service.json', - '../test-complete-proxy/ml-modules/*/*.api', - '../test-complete-proxy/ml-modules/*/*.sjs', - '../test-complete-proxy/ml-modules/*/*.mjs', - '../test-complete-proxy/ml-modules/*/*.xqy' - ]) - .pipe(basicloader.loadFileStream({ - databaseClient: databaseClient, - documentMetadata: documentMetadata, - uriPrefix: uriPrefix, - uriStartDepth: uriStartDepth - })); -} -function generateTestFnClasses() { - return gulp.src('../test-complete-proxy/ml-modules/**/*') - .pipe(proxy.generate()) - .pipe(gulp.dest('../test-complete-proxy/lib/')); -} - -function copyClassesTotestComplete() { - return gulp.src('./lib/*.js') - .pipe(gulp.dest('./')); -} - -exports.lint = lint; -exports.loadToModulesDB = loadQAModules; -exports.generateFnClasses = generateTestFnClasses; -exports.copyFnClasses = copyClassesTotestComplete; - -exports.test = test; -exports.default = lint; +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ +const path = require('path'); +const gulp = require('gulp'); +const mocha = require('gulp-mocha'); + +const { parallel, series } = gulp; + +const marklogic = require('../'); +const proxy = require('../lib/proxy-generator.js'); +const testconfig = require('../etc/test-config-qa.js'); +const basicloader = require('../lib/basic-loader.js'); + +function test() { + return gulp.src(['test-basic/*.js']) + .pipe(mocha({ + reporter: 'spec', + globals: { + should: require('should') + } + })); +} + +let testModulesClient = null; +function getTestModulesClient() { + var modDBName = testconfig.testServerName+'-modules'; + if (testModulesClient === null) { + const connectionParams = { + host: testconfig.restEvaluatorConnection.host, + port: testconfig.restEvaluatorConnection.port, + user: testconfig.restEvaluatorConnection.user, + password: testconfig.restEvaluatorConnection.password, + authType: testconfig.restEvaluatorConnection.authType, + database: modDBName + }; + testModulesClient = marklogic.createDatabaseClient(connectionParams); + } + return testModulesClient; +} +function getTestDocumentPermissions() { + return [ + {'role-name':'rest-reader', capabilities:['read', 'execute']}, + {'role-name':'rest-writer', capabilities:['update']} + ]; +} + +function loadQAModules(callback) { + const databaseClient = getTestModulesClient(); + const documentMetadata = { + collections: ['/qa/test/cases'], + permissions: getTestDocumentPermissions() + }; + const uriPrefix = '/qa/test/'; + const uriStartDepth = 2; + return gulp.src([ + '../test-complete-proxy/ml-modules/*/service.json', + '../test-complete-proxy/ml-modules/*/*.api', + '../test-complete-proxy/ml-modules/*/*.sjs', + '../test-complete-proxy/ml-modules/*/*.mjs', + '../test-complete-proxy/ml-modules/*/*.xqy' + ]) + .pipe(basicloader.loadFileStream({ + databaseClient: databaseClient, + documentMetadata: documentMetadata, + uriPrefix: uriPrefix, + uriStartDepth: uriStartDepth + })); +} +function generateTestFnClasses() { + return gulp.src('../test-complete-proxy/ml-modules/**/*') + .pipe(proxy.generate()) + .pipe(gulp.dest('../test-complete-proxy/lib/')); +} + +function copyClassesTotestComplete() { + return gulp.src('./lib/*.js') + .pipe(gulp.dest('./')); +} + +exports.loadToModulesDB = loadQAModules; +exports.generateFnClasses = generateTestFnClasses; +exports.copyFnClasses = copyClassesTotestComplete; + +exports.test = test; +exports.default = test; diff --git a/test-complete-proxy/insertFromMultipleStreams.js b/test-complete-proxy/insertFromMultipleStreams.js index 3655b1ec7..6b09553a6 100755 --- a/test-complete-proxy/insertFromMultipleStreams.js +++ b/test-complete-proxy/insertFromMultipleStreams.js @@ -1,7 +1,7 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ - + const {Worker, isMainThread, parentPort, workerData} = require('worker_threads'); const TestE2EMultiStringsInStringsOut = require("./TestE2EMultiStringsInStringsOut.js"); diff --git a/test-complete-proxy/nodejs-ds-dynamic.js b/test-complete-proxy/nodejs-ds-dynamic.js index f08e77632..44c51411e 100755 --- a/test-complete-proxy/nodejs-ds-dynamic.js +++ b/test-complete-proxy/nodejs-ds-dynamic.js @@ -1,5 +1,5 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const fs = require('fs'); diff --git a/test-complete-proxy/nodejs-ds-error-map.js b/test-complete-proxy/nodejs-ds-error-map.js index 5fad6e7ce..25299047e 100755 --- a/test-complete-proxy/nodejs-ds-error-map.js +++ b/test-complete-proxy/nodejs-ds-error-map.js @@ -1,5 +1,5 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const fs = require('fs'); diff --git a/test-complete-proxy/nodejs-ds-multipleWorker.js b/test-complete-proxy/nodejs-ds-multipleWorker.js index e1c004847..949521bc0 100755 --- a/test-complete-proxy/nodejs-ds-multipleWorker.js +++ b/test-complete-proxy/nodejs-ds-multipleWorker.js @@ -1,193 +1,305 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ - -const fs = require('fs'); - -const expect = require('chai').expect; -const should = require('should'); - -const {Worker, isMainThread, parentPort, workerData} = require('worker_threads'); - -var testconfig = require('../etc/test-config-qa.js'); - -var marklogic = require('../'); -var q = marklogic.queryBuilder; - -var db = marklogic.createDatabaseClient(testconfig.restEvaluatorConnection); - // Run tests from test-complete-proxy folder. Else adjust paths of worker's js files. - describe('Multiple-Worker-Test', function(){ - before(function(done) { - // runs once before the first test in this block - var s11 = 'Vannevar Bush wrote an article for The Atlantic Monthly 1'; - var s12 = 'Lisa wrote an article for The Strait Times 1'; - - var s21 = 'Vannevar Bush wrote an article for The Atlantic Monthly 2'; - var s22 = 'Lisa wrote an article for The Strait Times 2'; - - var inputFiles1 = [s11, s12]; - var uris1 = ['Test1stream11', 'Test1stream12']; - - var inputFiles2 = [s21, s22]; - var uris2 = ['Test1stream21', 'Test1stream22']; - - if (isMainThread) { - const workerOneInsert = new Worker('./insertFromMultipleStreams.js', {workerData: {files: inputFiles1, uris:uris1}}); - workerOneInsert.on('done', (result) => { - //console.log('workerOneInsert message is ' + result ); - }); - - workerOneInsert.on('exit', (code) => { - if (code !== 0) - reject(new Error('Worker workerOneInsert stopped with exit code ${code}')); - //else console.debug('workerOneInsert exits normally'); - }); - - const workerTwoInsert = new Worker('./insertFromMultipleStreams.js', {workerData: {files: inputFiles2, uris:uris2}}); - workerTwoInsert.on('message', (result) => { - //console.log('workerTwoInsert message is ' + result ); - }); - - workerTwoInsert.on('exit', (code) => { - if (code !== 0) - reject(new Error('Worker workerTwoInsert stopped with exit code ${code}')); - //else console.debug('workerTwoInsert exits normally'); - }); - - } - - done(); - }); - - it('Verify inserts using client API query', function(done){ - - var res1; - db.documents.query(q.where(q.parsedFrom('Bush'))).result( function(results) { - res1 = JSON.stringify(results); - //console.log(res1); - expect(res1).to.include('Monthly 1'); - expect(res1).to.include('Monthly 2'); - }); - - var res2; - db.documents.query(q.where(q.parsedFrom('Lisa'))).result( function(results) { - res2 = JSON.stringify(results); - //console.log(res2); - expect(res2).to.include('Times 1'); - expect(res2).to.include('Times 2'); - - done(); - - }); - }); - - it('One worker', function(done){ - try { - // Get results from all workers - var searchResults1 = []; - var searchResults2 = []; - - if (isMainThread) { - const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); - workerOneSearch.on('done', (result) => { - searchResults1.push(result); - //console.log('Results 1 from search is :', searchResults1); - expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); - }); - workerOneSearch.on('exit', (code) => { - if (code !== 0) - reject(new Error('Worker workerOneSearch stopped with exit code ${code}')); - //else console.debug('workerOneSearch exits normally'); - }); - done(); - } - } - catch(err) { - //console.debug(err); - done(); - } - }); - - it('Multiple workers', function(done){ - try { - // Get results from all workers - var searchResults1 = []; - var searchResults2 = []; - - if (isMainThread) { - const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); - workerOneSearch.on('done', (result) => { - searchResults1.push(result); - //console.log('Results 1 from search is :', searchResults1); - expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); - }); - - const workerTwoSearch = new Worker('./searchMultiple.js', {workerData: {search:'Lisa'}}); - workerTwoSearch.on('done', (result) => { - searchResults2.push(result); - //console.log('Results 2 from search is :', searchResults2); - expect(searchResults2[0]).to.have.members(["/Test1stream12.json", "/Test1stream22.json"]); - }); - done(); - } - } - catch(err) { - //console.debug(err); - done(); - } - }); - - it('Multiple workers-One result back', function(done){ - try { - // Get results from all workers - var searchResults1 = []; - var searchResults2 = []; - - if (isMainThread) { - const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); - workerOneSearch.on('done', (result) => { - searchResults1.push(result); - //console.log('Results 1 from search is :', searchResults1); - expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); - }); - - const workerTwoSearch = new Worker('./searchMultiple.js', {workerData: {search:'100'}}); - workerTwoSearch.on('done', (result) => { - searchResults2.push(result); - //console.log('Results 2 from search is :', searchResults2); - expect(searchResults2[0]).to.eql([]); - }); - done(); - } - } - catch(err) { - //console.debug(err); - done(); - } - }); - - it('Multiple workers- incorrect data', function(done){ - try { - // Get results from all workers - var searchResults1 = []; - var searchResults2 = []; - - if (isMainThread) { - const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); - workerOneSearch.on('done', (result) => { - searchResults1.push(result); - //console.log('Results 1 from search is :', searchResults1); - expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); - }); - - expect( - () => new Worker('./searchMultiple.js', {workerData: {find:100}}).to.throw('null value not allowed for parameter')); - done(); - } - } - catch(err) { - //console.debug(err); - done(); - } - }); -}); +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +*/ + +const fs = require('fs'); + +const expect = require('chai').expect; +const should = require('should'); + +const {Worker, isMainThread, parentPort, workerData} = require('worker_threads'); + +var testconfig = require('../etc/test-config-qa.js'); + +var marklogic = require('../'); +var q = marklogic.queryBuilder; + +var db = marklogic.createDatabaseClient(testconfig.restEvaluatorConnection); + // Run tests from test-complete-proxy folder. Else adjust paths of worker's js files. + describe('Multiple-Worker-Test', function(){ + before(function(done) { + // runs once before the first test in this block + var s11 = 'Vannevar Bush wrote an article for The Atlantic Monthly 1'; + var s12 = 'Lisa wrote an article for The Strait Times 1'; + + var s21 = 'Vannevar Bush wrote an article for The Atlantic Monthly 2'; + var s22 = 'Lisa wrote an article for The Strait Times 2'; + + var inputFiles1 = [s11, s12]; + var uris1 = ['Test1stream11', 'Test1stream12']; + + var inputFiles2 = [s21, s22]; + var uris2 = ['Test1stream21', 'Test1stream22']; + + if (isMainThread) { + let workersCompleted = 0; + const totalWorkers = 2; + let hasError = false; + + const handleWorkerComplete = (err) => { + if (hasError) return; + + if (err) { + hasError = true; + done(err); + return; + } + + workersCompleted++; + if (workersCompleted === totalWorkers) { + done(); + } + }; + + const workerOneInsert = new Worker('./insertFromMultipleStreams.js', {workerData: {files: inputFiles1, uris:uris1}}); + workerOneInsert.on('done', (result) => { + //console.log('workerOneInsert message is ' + result ); + }); + + workerOneInsert.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerOneInsert stopped with exit code ${code}`)); + } else { + //console.debug('workerOneInsert exits normally'); + handleWorkerComplete(); + } + }); + + const workerTwoInsert = new Worker('./insertFromMultipleStreams.js', {workerData: {files: inputFiles2, uris:uris2}}); + workerTwoInsert.on('message', (result) => { + //console.log('workerTwoInsert message is ' + result ); + }); + + workerTwoInsert.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerTwoInsert stopped with exit code ${code}`)); + } else { + //console.debug('workerTwoInsert exits normally'); + handleWorkerComplete(); + } + }); + } else { + done(); + } + }); + + it('Verify inserts using client API query', function(done){ + Promise.all([ + db.documents.query(q.where(q.parsedFrom('Bush'))).result(), + db.documents.query(q.where(q.parsedFrom('Lisa'))).result() + ]) + .then(([bushResults, lisaResults]) => { + const res1 = JSON.stringify(bushResults); + console.log(res1); + expect(res1).to.include('Monthly 1'); + expect(res1).to.include('Monthly 2'); + + const res2 = JSON.stringify(lisaResults); + console.log(res2); + expect(res2).to.include('Times 1'); + expect(res2).to.include('Times 2'); + + done(); + }) + .catch(err => { + done(err); + }); + }); + + it('One worker', function(done){ + // Get results from all workers + var searchResults1 = []; + + if (isMainThread) { + const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); + workerOneSearch.on('done', (result) => { + searchResults1.push(result); + //console.log('Results 1 from search is :', searchResults1); + expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); + }); + workerOneSearch.on('exit', (code) => { + if (code !== 0) { + done(new Error(`Worker workerOneSearch stopped with exit code ${code}`)); + } else { + //console.debug('workerOneSearch exits normally'); + done(); + } + }); + } else { + done(); + } + }); + + it('Multiple workers', function(done){ + // Get results from all workers + var searchResults1 = []; + var searchResults2 = []; + + if (isMainThread) { + let workersCompleted = 0; + const totalWorkers = 2; + let hasError = false; + + const handleWorkerComplete = (err) => { + if (hasError) return; + + if (err) { + hasError = true; + done(err); + return; + } + + workersCompleted++; + if (workersCompleted === totalWorkers) { + done(); + } + }; + + const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); + workerOneSearch.on('done', (result) => { + searchResults1.push(result); + //console.log('Results 1 from search is :', searchResults1); + expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); + }); + workerOneSearch.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerOneSearch stopped with exit code ${code}`)); + } else { + handleWorkerComplete(); + } + }); + + const workerTwoSearch = new Worker('./searchMultiple.js', {workerData: {search:'Lisa'}}); + workerTwoSearch.on('done', (result) => { + searchResults2.push(result); + //console.log('Results 2 from search is :', searchResults2); + expect(searchResults2[0]).to.have.members(["/Test1stream12.json", "/Test1stream22.json"]); + }); + workerTwoSearch.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerTwoSearch stopped with exit code ${code}`)); + } else { + handleWorkerComplete(); + } + }); + } else { + done(); + } + }); + + it('Multiple workers-One result back', function(done){ + // Get results from all workers + var searchResults1 = []; + var searchResults2 = []; + + if (isMainThread) { + let workersCompleted = 0; + const totalWorkers = 2; + let hasError = false; + + const handleWorkerComplete = (err) => { + if (hasError) return; + + if (err) { + hasError = true; + done(err); + return; + } + + workersCompleted++; + if (workersCompleted === totalWorkers) { + done(); + } + }; + + const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); + workerOneSearch.on('done', (result) => { + searchResults1.push(result); + //console.log('Results 1 from search is :', searchResults1); + expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); + }); + workerOneSearch.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerOneSearch stopped with exit code ${code}`)); + } else { + handleWorkerComplete(); + } + }); + + const workerTwoSearch = new Worker('./searchMultiple.js', {workerData: {search:'100'}}); + workerTwoSearch.on('done', (result) => { + searchResults2.push(result); + //console.log('Results 2 from search is :', searchResults2); + expect(searchResults2[0]).to.eql([]); + }); + workerTwoSearch.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerTwoSearch stopped with exit code ${code}`)); + } else { + handleWorkerComplete(); + } + }); + } else { + done(); + } + }); + + it('Multiple workers- incorrect data', function(done){ + // Get results from all workers + var searchResults1 = []; + + if (isMainThread) { + let workersCompleted = 0; + const totalWorkers = 2; + let hasError = false; + + const handleWorkerComplete = (err) => { + if (hasError) return; + + if (err) { + hasError = true; + done(err); + return; + } + + workersCompleted++; + if (workersCompleted === totalWorkers) { + done(); + } + }; + + const workerOneSearch = new Worker('./searchMultiple.js', {workerData: {search:'Bush'}}); + workerOneSearch.on('done', (result) => { + searchResults1.push(result); + //console.log('Results 1 from search is :', searchResults1); + expect(searchResults1[0]).to.have.members(["/Test1stream11.json", "/Test1stream21.json"]); + }); + workerOneSearch.on('exit', (code) => { + if (code !== 0) { + handleWorkerComplete(new Error(`Worker workerOneSearch stopped with exit code ${code}`)); + } else { + handleWorkerComplete(); + } + }); + + // Test worker with incorrect data - should fail/exit with error + const workerBadData = new Worker('./searchMultiple.js', {workerData: {find:100}}); + workerBadData.on('error', (err) => { + // Expected error path - worker received bad data + //console.log('Expected error from workerBadData:', err.message); + handleWorkerComplete(); + }); + workerBadData.on('exit', (code) => { + if (code !== 0) { + // This is also acceptable - worker exited with error code + handleWorkerComplete(); + } else { + // Worker shouldn't succeed with bad data + handleWorkerComplete(new Error('Worker with incorrect data should have failed')); + } + }); + } else { + done(); + } + }); +}); diff --git a/test-complete-proxy/nodejs-ds-required-params.js b/test-complete-proxy/nodejs-ds-required-params.js index bc9e95839..dfb43852b 100755 --- a/test-complete-proxy/nodejs-ds-required-params.js +++ b/test-complete-proxy/nodejs-ds-required-params.js @@ -1,5 +1,5 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const fs = require('fs'); diff --git a/test-complete-proxy/nodejs-ds-setup-docs.js b/test-complete-proxy/nodejs-ds-setup-docs.js index ec596f913..d31e5f049 100755 --- a/test-complete-proxy/nodejs-ds-setup-docs.js +++ b/test-complete-proxy/nodejs-ds-setup-docs.js @@ -1,5 +1,5 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const fs = require('fs'); diff --git a/test-complete-proxy/nodejs-ds-transactions.js b/test-complete-proxy/nodejs-ds-transactions.js index 79cc67bad..1823db7ee 100755 --- a/test-complete-proxy/nodejs-ds-transactions.js +++ b/test-complete-proxy/nodejs-ds-transactions.js @@ -1,7 +1,7 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ - + const fs = require('fs'); const util = require('util') @@ -18,7 +18,7 @@ var db1 = marklogic.createDatabaseClient(testconfig.restEvaluatorConnection); var db2 = marklogic.createDatabaseClient(testconfig.restEvaluatorConnection); describe('Transactions-Tests', function(){ - + it('same transaction', function(done) { // Insert and read back on same database client. this.timeout(10000); @@ -54,7 +54,7 @@ describe('Transactions-Tests', function(){ } ); }); - + it('different transaction', function(done) { this.timeout(10000); var tid = null; @@ -87,7 +87,7 @@ describe('Transactions-Tests', function(){ } ); }); - + }); - - + + diff --git a/test-complete-proxy/searchMultiple.js b/test-complete-proxy/searchMultiple.js index 2bb27f5d4..16f4eb417 100755 --- a/test-complete-proxy/searchMultiple.js +++ b/test-complete-proxy/searchMultiple.js @@ -1,5 +1,5 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +/* +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const {Worker, isMainThread, parentPort, workerData} = require('worker_threads'); const TestE2EMultiStringsInStringsOut = require("./TestE2EMultiStringsInStringsOut.js"); diff --git a/test-complete-proxy/setup/ds-qa-test-setup-users.js b/test-complete-proxy/setup/ds-qa-test-setup-users.js index ead073365..50ad4f279 100755 --- a/test-complete-proxy/setup/ds-qa-test-setup-users.js +++ b/test-complete-proxy/setup/ds-qa-test-setup-users.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var valcheck = require('core-util-is'); diff --git a/test-complete-proxy/setup/ds-qa-test-setup.js b/test-complete-proxy/setup/ds-qa-test-setup.js index b8b08db24..cba82c187 100755 --- a/test-complete-proxy/setup/ds-qa-test-setup.js +++ b/test-complete-proxy/setup/ds-qa-test-setup.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var valcheck = require('core-util-is'); diff --git a/test-complete/data/emptyTransform.js b/test-complete/data/emptyTransform.js index fc1c59fa5..00caddbf0 100644 --- a/test-complete/data/emptyTransform.js +++ b/test-complete/data/emptyTransform.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ function emptyTransform(context, params, document) { diff --git a/test-complete/data/paramTransform.js b/test-complete/data/paramTransform.js index 55f4f7a9e..401079f22 100644 --- a/test-complete/data/paramTransform.js +++ b/test-complete/data/paramTransform.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ function paramTransform(context, params, document) { diff --git a/test-complete/data/sourceParams.js b/test-complete/data/sourceParams.js index d28a108a4..b82542261 100644 --- a/test-complete/data/sourceParams.js +++ b/test-complete/data/sourceParams.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var num1; diff --git a/test-complete/data/sourceParamsNegative.js b/test-complete/data/sourceParamsNegative.js index 88980f1f7..a38fea259 100644 --- a/test-complete/data/sourceParamsNegative.js +++ b/test-complete/data/sourceParamsNegative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ avar num1; diff --git a/test-complete/data/sourceSimple.js b/test-complete/data/sourceSimple.js index 60252f381..082724ebf 100644 --- a/test-complete/data/sourceSimple.js +++ b/test-complete/data/sourceSimple.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var a = "hello"; diff --git a/test-complete/data/sourceSimpleNegative.js b/test-complete/data/sourceSimpleNegative.js index c6e60bc53..f78edce22 100644 --- a/test-complete/data/sourceSimpleNegative.js +++ b/test-complete/data/sourceSimpleNegative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var a = "hello"; diff --git a/test-complete/data/timestampTransform.js b/test-complete/data/timestampTransform.js index 3ac0df472..d7fbeb114 100644 --- a/test-complete/data/timestampTransform.js +++ b/test-complete/data/timestampTransform.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ function timestampTransform(context, params, document) { diff --git a/test-complete/nodejs-config-patch-negative.js b/test-complete/nodejs-config-patch-negative.js index 3fce257ae..406cf344e 100644 --- a/test-complete/nodejs-config-patch-negative.js +++ b/test-complete/nodejs-config-patch-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-config-patch.js b/test-complete/nodejs-config-patch.js index 0531f6fcc..cd27ddde7 100644 --- a/test-complete/nodejs-config-patch.js +++ b/test-complete/nodejs-config-patch.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-config-query-negative.js b/test-complete/nodejs-config-query-negative.js index 8527cfbbb..a35464534 100644 --- a/test-complete/nodejs-config-query-negative.js +++ b/test-complete/nodejs-config-query-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-config-query.js b/test-complete/nodejs-config-query.js index c8d005b6c..4e4e167f1 100644 --- a/test-complete/nodejs-config-query.js +++ b/test-complete/nodejs-config-query.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-database-concurrency.js b/test-complete/nodejs-database-concurrency.js index 2e8c36b31..00b76aca2 100644 --- a/test-complete/nodejs-database-concurrency.js +++ b/test-complete/nodejs-database-concurrency.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-database-connection-negative.js b/test-complete/nodejs-database-connection-negative.js index 68993b8d9..ef25ab05c 100644 --- a/test-complete/nodejs-database-connection-negative.js +++ b/test-complete/nodejs-database-connection-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-database-connection-ssl.js b/test-complete/nodejs-database-connection-ssl.js index 3a707ed95..0dd6de1fc 100644 --- a/test-complete/nodejs-database-connection-ssl.js +++ b/test-complete/nodejs-database-connection-ssl.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-dmsdk-QueryToRdAll.js b/test-complete/nodejs-dmsdk-QueryToRdAll.js index ed9781c8f..f0e929d76 100644 --- a/test-complete/nodejs-dmsdk-QueryToRdAll.js +++ b/test-complete/nodejs-dmsdk-QueryToRdAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var marklogic = require('../'); var testconfig = require('../etc/test-config-qa.js'); diff --git a/test-complete/nodejs-dmsdk-UpdAndRdAll.js b/test-complete/nodejs-dmsdk-UpdAndRdAll.js index 61a467221..c7dcb0773 100644 --- a/test-complete/nodejs-dmsdk-UpdAndRdAll.js +++ b/test-complete/nodejs-dmsdk-UpdAndRdAll.js @@ -1,20 +1,23 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var marklogic = require('../'); +const marklogic = require('../'); -var testconfig = require('../etc/test-config-qa.js'); +const testconfig = require('../etc/test-config-qa.js'); const stream = require('stream'); const { expect } = require('chai'); +const { pipeline } = require('stream/promises'); -var memStore = { }; +const memStore = { }; +const dbWriter = marklogic.createDatabaseClient(testconfig.dmsdkrestWriterConnection); +const inputJsonUris = []; +const inputContents = []; -var uriStream = new stream.Readable(); -var dbWriter = marklogic.createDatabaseClient(testconfig.dmsdkrestWriterConnection); -let inputJsonUris = []; -let inputContents = []; +let uriStream = new stream.Readable(); + +const TOTAL_DOCS = 1000; /* Based on example from @@ -42,9 +45,9 @@ class MLQASnapshotTransform extends stream.Transform { // Filter what we need and push. We will verify only 900.json piped from ReadAll if (chunk.uri === this.docId) { //Push transformed content onto the stream with changed key names such as Matched ID and Matched Name - var currId = chunk.content.id; - var currName = chunk.content.name; - var retStr = 'Matched ID:' + currId + ', Matched Name:' + currName; + let currId = chunk.content.id; + let currName = chunk.content.name; + let retStr = 'Matched ID:' + currId + ', Matched Name:' + currName; this.push(retStr); } return setImmediate(callback); @@ -68,20 +71,21 @@ class MLQAWritableStream extends stream.Writable { } _write(chunk, encoding, callback) { - var buffer = (Buffer.isBuffer(chunk)) ? + let buffer = (Buffer.isBuffer(chunk)) ? chunk : // already is Buffer use it - new Buffer(chunk, encoding); + Buffer.from(chunk, encoding); memStore[this.key] = Buffer.concat([memStore[this.key], buffer]); return setImmediate(callback); } } describe('Update doc and readAll with Snapshot', function () { - before(function (done) { - this.timeout(50000); - var jsonDocreadable = new stream.Readable({ objectMode: true }); - for (let i = 0; i < 1000; i++) { + before(async function () { + + const jsonDocreadable = new stream.Readable({ objectMode: true }); + + for (let i = 0; i < TOTAL_DOCS; i++) { const tempJson = { uri: '/data/dmsdk/Snap-update-then-readall/' + i + '.json', contentType: 'application/json', @@ -93,70 +97,67 @@ describe('Update doc and readAll with Snapshot', function () { inputContents.push(tempJson.content); } jsonDocreadable.push(null); - dbWriter.documents.writeAll(jsonDocreadable, { - onCompletion: ((summary) => { - setTimeout(() => { - var i = 0; i++; - }, 1000); - summary.docsWrittenSuccessfully.should.be.greaterThanOrEqual(1000); + + let summaryPromiseResolve; + + // The following pattern uses Promise.all to coordinate the completion of the writeAll operation and its onCompletion callback. + // The first promise initiates the writeAll process, while the second promise is resolved by the onCompletion callback with the summary object. + // This ensures that both the write operation and its completion summary are available before proceeding. + const [result, summary] = await Promise.all([ + dbWriter.documents.writeAll(jsonDocreadable, { + onCompletion: (summary) => { + summaryPromiseResolve(summary); + } + }), + new Promise(resolve => { + summaryPromiseResolve = resolve; }) - }); // End of pipe to writeAll - // Use uriStream as the input to readAll() + ]); + expect(summary.docsWrittenSuccessfully).to.be.greaterThanOrEqual(1000); + uriStream = new stream.PassThrough({ objectMode: true }); inputJsonUris.forEach(uri => uriStream.push(uri)); uriStream.push(null); - // wait for DB to finish writing - setTimeout(() => { - done(); - }, 10000); }); - after((function (done) { - this.timeout(10000); - - dbWriter.documents.remove(inputJsonUris) - .result(function (response) { - done(); - }) - .catch(err => done(err)) - .catch(done); - })); + after(async function () { + await dbWriter.documents.remove(inputJsonUris).result(); + }); // This test updates an existing doc and then performs readAll - it('update a doc and readAll with snapshot', function (done) { - this.timeout(30000); + it('update a doc and readAll with snapshot', async function () { + // Used in test that updates doc and then does readAll const UpdBeforeReadAllUriName = '/data/dmsdk/Snap-update-then-readall/900.json'; const filteredSnapshot = new MLQASnapshotTransform(UpdBeforeReadAllUriName, { objectMode: true }); - setTimeout(() => { - var i = 0; i++; - }, 3000); // Initiate a document change on doc id 900. - dbWriter.documents.write({ + const writeResponse = await dbWriter.documents.write({ uri: UpdBeforeReadAllUriName, collections: ['coll5', 'coll6'], contentType: 'application/json', quality: 250, properties: { prop1: 'bar', prop2: 1981 }, - content: { id: 88, name: 'David' } - }); - // Expected result + content: { id: 88, name: 'David' }, + }).result(); + + // Updated doc should be in db now. var exptdResult = 'Matched ID:88, Matched Name:David'; var mlqawstream = new MLQAWritableStream('before'); - // Have listeners before calling pipe. - setTimeout(() => { - var i = 0; i++; - }, 3000); - mlqawstream.on('finish', function () { - expect(memStore.before.toString()).to.equal(exptdResult); - }); - dbWriter.documents.readAll(uriStream, { - inputkind: 'Array', - consistentSnapshot: true, - batch: 50 - }).pipe(filteredSnapshot).pipe(mlqawstream);/* Add.pipe(process.stdout) to debug */ - done(); + + // Use pipeline with await to read and confirm, much cleaner and understandable. + await pipeline( + dbWriter.documents.readAll(uriStream, { + inputkind: 'Array', + consistentSnapshot: true, + batch: 50 + }), + filteredSnapshot, + mlqawstream + ); + + // confirm we wrote correct stream to memStore in mlqawstream + expect(memStore.before.toString()).to.equal(exptdResult); }); }); diff --git a/test-complete/nodejs-dmsdk-queryToTransformAll.js b/test-complete/nodejs-dmsdk-queryToTransformAll.js index ed0d901b1..d35e8e309 100644 --- a/test-complete/nodejs-dmsdk-queryToTransformAll.js +++ b/test-complete/nodejs-dmsdk-queryToTransformAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -18,28 +18,24 @@ const ctsQb = marklogic.ctsQueryBuilder; const q = marklogic.queryBuilder; const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/transformAll/')); -describe('data movement transformAll', function () { - this.timeout(20000); - before(function (done) { +describe('data movement transformAll - nodejs-dmsdk-queryToTransformAll', function () { - restAdminDB.config.transforms.write(transformName, 'javascript', fs.createReadStream(transformPath)) - .result(() => { - for (let i = 0; i < 100; i++) { - uris.push('/test/dataMovement/requests/transformAll/' + i + '.json'); - } - }) - .then(() => done()) - .catch(error => done(error)); + before(async function () { + await restAdminDB.config.transforms.write(transformName, 'javascript', + fs.createReadStream(transformPath)).result(); + for (let i = 0; i < 100; i++) { + uris.push('/test/dataMovement/requests/transformAll/' + i + '.json'); + } }); - beforeEach(function (done) { + beforeEach(async function () { let readable = new Stream.Readable({ objectMode: true }); transformStream = new Stream.PassThrough({ objectMode: true }); for (let i = 0; i < 100; i++) { const temp = { uri: '/test/dataMovement/requests/transformAll/' + i + '.json', contentType: 'application/json', - content: { ['key']: 'initialValue' } + content: { key: 'initialValue' } }; readable.push(temp); transformStream.push(temp.uri); @@ -47,244 +43,263 @@ describe('data movement transformAll', function () { readable.push(null); transformStream.push(null); - dbWriter.documents.writeAll(readable, { - onCompletion: ((summary) => { - done(); - }) + return new Promise((resolve, reject) => { + dbWriter.documents.writeAll(readable, { + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); + } + }); }); - }); - afterEach((function (done) { - dbWriter.documents.remove(uris) - .result(function (response) { - done(); - }) - .catch(err => done(err)) - .catch(done); - })); - - it('should queryToTransformAll documents with onCompletion, transform, concurrentRequests and transformStrategy as ignore', - function (done) { + afterEach( async function () { + await dbWriter.documents.remove(uris).result(); + }); + it('should queryToTransformAll documents with onCompletion, transform, concurrentRequests and transformStrategy as ignore', async function () { + const summary = await new Promise((resolve, reject) => { dbWriter.documents.queryToTransformAll(query, { transform: [transformName, { newValue: 'transformedValue' }], concurrentRequests: { multipleOf: 'hosts', multiplier: 4 }, transformStrategy: 'ignore', onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('initialValue', done); - } catch (err) { - done(err); - } - }) + resolve(summary); + }), + onError: (error) => { + reject(error); + } }); }); - it('should transformAll documents with transformStrategy as ignore', function (done) { - - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - concurrentRequests: { multipleOf: 'hosts', multiplier: 4 }, - transformStrategy: 'ignore', - onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('initialValue', done); - } catch (err) { - done(err); - } - }) - }); + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('initialValue'); }); - it('should work with query and onCompletion function', function (done) { - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('transformedValue', done); - } catch (err) { - done(err); + it('should transformAll documents with transformStrategy as ignore', async function () { + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + transformStrategy: 'ignore', + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); } - }) + }); }); + + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('initialValue'); }); - it('should work with query and onCompletion function and batchSize', function (done) { - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - batchSize: 10, - onBatchSuccess: (function (progress, documents) { - try { - progress.docsTransformedSuccessfully.should.be.greaterThanOrEqual(10); - progress.docsFailedToBeTransformed.should.be.equal(0); - progress.timeElapsed.should.be.greaterThanOrEqual(0); - } catch (err) { - done(err); + it('should work with query and onCompletion function', async function () { + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); } + }); + }); + + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('transformedValue'); + }); - }), - onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('transformedValue', done); - } catch (err) { - done(err); + it('should work with query and onCompletion function and batchSize', async function () { + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + batchSize: 10, + onBatchSuccess: ((progress) => { + try { + progress.docsFailedToBeTransformed.should.be.equal(0); + progress.timeElapsed.should.be.greaterThanOrEqual(0); + } catch (err) { + reject(err); + } + }), + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); } }) }); + + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('transformedValue'); }); - it('should transformAll documents with onCompletion, concurrentRequests and transform options', function (done) { - - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - concurrentRequests: { multipleOf: 'hosts', multiplier: 4 }, - onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('transformedValue', done); - } catch (err) { - done(err); + it('should transformAll documents with onCompletion, concurrentRequests and transform options', async function () { + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + concurrentRequests: { multipleOf: 'hosts', multiplier: 4 }, + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); } - }) + }); }); - }); - it('should transformAll documents with inputKind as array', function (done) { + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('transformedValue'); + }); + it('should transformAll documents with inputKind as array', async function () { transformStream = new Stream.Readable({ objectMode: true }); for (let i = 0; i + 10 <= uris.length; i = i + 10) { transformStream.push(uris.slice(i, i + 10)); } transformStream.push(null); - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - inputKind: 'aRRaY', - onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('transformedValue', done); - } catch (error) { - done(error); + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + inputKind: 'aRRaY', + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); } - }) + }); }); - }); - it('should queryToTransformAll documents with onCompletion option', function (done) { + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - onCompletion: ((summary) => { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('transformedValue', done); - }) + await verifyDocs('transformedValue'); + }); + + it('should queryToTransformAll documents with onCompletion option', async function () { + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); + } + }); }); + + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('transformedValue'); }); - it('should work with batchSize less than 1', function (done) { - dbWriter.documents.queryToTransformAll(query, { - transform: [transformName, { newValue: 'transformedValue' }], - batchSize: 0, - onCompletion: ((summary) => { - try { - summary.docsTransformedSuccessfully.should.be.equal(100); - summary.docsFailedToBeTransformed.should.be.equal(0); - summary.timeElapsed.should.be.greaterThanOrEqual(0); - verifyDocs('transformedValue', done); - } catch (err) { - done(err); + it('should work with batchSize less than 1', async function () { + const summary = await new Promise((resolve, reject) => { + dbWriter.documents.queryToTransformAll(query, { + transform: [transformName, { newValue: 'transformedValue' }], + batchSize: 0, + onCompletion: ((summary) => { + resolve(summary); + }), + onError: (error) => { + reject(error); } - }) + }); }); + + summary.docsTransformedSuccessfully.should.be.equal(100); + summary.docsFailedToBeTransformed.should.be.equal(0); + summary.timeElapsed.should.be.greaterThanOrEqual(0); + + await verifyDocs('transformedValue'); }); - it('should throw error with no query', function (done) { + it('should throw error with no query', async function () { try { - dbWriter.documents.queryToTransformAll('invalid query', {}); + await dbWriter.documents.queryToTransformAll('invalid query', {}); } catch (err) { err.toString().should.equal('Error: Query needs to be a cts query.'); - done(); } }); - it('should throw error with null query', function (done) { + it('should throw error with null query', async function () { try { dbWriter.documents.queryToTransformAll(null, { transform: [transformName, { newValue: 'transformedValue' }], }); } catch (err) { err.toString().should.equal('Error: Query cannot be null or undefined.'); - done(); } }); - it('should throw error with onInitialTimestamp and wrong consistentSnapshot', function (done) { + it('should throw error with onInitialTimestamp and wrong consistentSnapshot', async function () { try { - dbWriter.documents.queryToTransformAll(query, { + await dbWriter.documents.queryToTransformAll(query, { transform: [transformName, { newValue: 'transformedValue' }], onInitialTimestamp: '1667222674', consistentSnapshot: false, }); } catch (err) { err.toString().should.equal('Error: consistentSnapshot needs to be true when onInitialTimestamp is provided.'); - done(); } }); - it('should throw error with consistentSnapshot another type', function (done) { + it('should throw error with consistentSnapshot another type', async function () { try { - dbWriter.documents.queryToTransformAll(query, { + await dbWriter.documents.queryToTransformAll(query, { transform: [transformName, { newValue: 'transformedValue' }], consistentSnapshot: 'true', }); } catch (err) { err.toString().should.equal('Error: consistentSnapshot needs to be a boolean or DatabaseClient.Timestamp object.'); - done(); } }); - it('should throw error with batchSize greater than 100000', function (done) { + it('should throw error with batchSize greater than 100000', async function () { try { - dbWriter.documents.queryToTransformAll(query, { + await dbWriter.documents.queryToTransformAll(query, { transform: [transformName, { newValue: 'transformedValue' }], batchSize: 1000000, }); } catch (err) { err.toString().should.equal('Error: batchSize cannot be greater than 100000'); - done(); } }); }); -function verifyDocs(value, done) { - dbWriter.documents.read(uris) - .result(function (documents) { - documents.length.should.equal(100); - for (let i = 0; i < documents.length; i++) { - documents[0].content.key.should.equal(value); - } - }) - .then(() => done()) - .catch(err => done(err)); -} \ No newline at end of file +async function verifyDocs(value) { + const documents = await dbWriter.documents.read(uris).result(); + should.exist(documents); + documents.should.be.an.Array(); + documents.length.should.equal(100); + for (let i = 0; i < documents.length; i++) { + documents[i].content.key.should.equal(value); + } +} diff --git a/test-complete/nodejs-dmsdk-queryall.js b/test-complete/nodejs-dmsdk-queryall.js index b2b71c9ba..49a77bc07 100644 --- a/test-complete/nodejs-dmsdk-queryall.js +++ b/test-complete/nodejs-dmsdk-queryall.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-dmsdk-readall-1.js b/test-complete/nodejs-dmsdk-readall-1.js index 62f108e29..e2b2c0a11 100644 --- a/test-complete/nodejs-dmsdk-readall-1.js +++ b/test-complete/nodejs-dmsdk-readall-1.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var fs = require('fs'); const path = require('path'); diff --git a/test-complete/nodejs-dmsdk-removeAllUris.js b/test-complete/nodejs-dmsdk-removeAllUris.js index 65107e23f..b09269f70 100644 --- a/test-complete/nodejs-dmsdk-removeAllUris.js +++ b/test-complete/nodejs-dmsdk-removeAllUris.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ // deleteEmptyIterator @@ -17,7 +17,7 @@ const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/remo let removeStream = new Stream.PassThrough({ objectMode: true }); let uris = []; -describe('Functional tests - data movement removeAllUris', function () { +describe('Functional tests - data movement - nodejs-dmsdk-removeAllUris', function () { this.timeout(15000); beforeEach(function (done) { let readable = new Stream.Readable({ objectMode: true }); diff --git a/test-complete/nodejs-dmsdk-rows-queryAll.js b/test-complete/nodejs-dmsdk-rows-queryAll.js index 4a6f73423..a22217853 100644 --- a/test-complete/nodejs-dmsdk-rows-queryAll.js +++ b/test-complete/nodejs-dmsdk-rows-queryAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); diff --git a/test-complete/nodejs-dmsdk-transformAll.js b/test-complete/nodejs-dmsdk-transformAll.js index 31c9eb065..de4dc7bab 100644 --- a/test-complete/nodejs-dmsdk-transformAll.js +++ b/test-complete/nodejs-dmsdk-transformAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -18,7 +18,7 @@ const ctsQb = marklogic.ctsQueryBuilder; const q = marklogic.queryBuilder; const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/transformAll/')); -describe('data movement transformAll', function () { +describe('data movement transformAll (nodejs-dmsdk-transformAll)', function () { this.timeout(20000); before(function (done) { diff --git a/test-complete/nodejs-dmsdk-txtFiles-transformAll.js b/test-complete/nodejs-dmsdk-txtFiles-transformAll.js index a64119a20..f5b12b32a 100644 --- a/test-complete/nodejs-dmsdk-txtFiles-transformAll.js +++ b/test-complete/nodejs-dmsdk-txtFiles-transformAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -18,7 +18,7 @@ const ctsQb = marklogic.ctsQueryBuilder; const q = marklogic.queryBuilder; const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/transformAll/')); -describe('data movement transformAll', function () { +describe('data movement transformAll (nodejs-dmsdk-txtFiles-transformAll)', function () { before(function (done) { this.timeout(20000); diff --git a/test-complete/nodejs-dmsdk-writeall.js b/test-complete/nodejs-dmsdk-writeall.js index 1bb41f080..fe164c62e 100644 --- a/test-complete/nodejs-dmsdk-writeall.js +++ b/test-complete/nodejs-dmsdk-writeall.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-dmsdk-xmlFiles-transformAll.js b/test-complete/nodejs-dmsdk-xmlFiles-transformAll.js index b448404c2..c7acfb2a0 100644 --- a/test-complete/nodejs-dmsdk-xmlFiles-transformAll.js +++ b/test-complete/nodejs-dmsdk-xmlFiles-transformAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ const should = require('should'); @@ -18,7 +18,7 @@ const ctsQb = marklogic.ctsQueryBuilder; const q = marklogic.queryBuilder; const query = q.where(ctsQb.cts.directoryQuery('/test/dataMovement/requests/transformAll/')); -describe('data movement transformAll', function () { +describe('data movement transformAll (nodejs-dmsdk-xmlFiles-transformAll)', function () { before(function (done) { this.timeout(20000); diff --git a/test-complete/nodejs-documents-binary-gif.js b/test-complete/nodejs-documents-binary-gif.js index 44cccfb96..ccf13e35b 100644 --- a/test-complete/nodejs-documents-binary-gif.js +++ b/test-complete/nodejs-documents-binary-gif.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-binary-mp3.js b/test-complete/nodejs-documents-binary-mp3.js index e13106802..872836419 100644 --- a/test-complete/nodejs-documents-binary-mp3.js +++ b/test-complete/nodejs-documents-binary-mp3.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-binary-pdf.js b/test-complete/nodejs-documents-binary-pdf.js index b69556975..0cd939d3e 100644 --- a/test-complete/nodejs-documents-binary-pdf.js +++ b/test-complete/nodejs-documents-binary-pdf.js @@ -1,87 +1,72 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var should = require('should'); +const should = require('should'); -var fs = require('fs'); -var stream = require('stream'); -var util = require('util'); +const fs = require('fs'); +const stream = require('stream'); +const util = require('util'); -var concatStream = require('concat-stream'); -var valcheck = require('core-util-is'); -var testconfig = require('../etc/test-config-qa.js'); +const concatStream = require('concat-stream'); +const valcheck = require('core-util-is'); +const testconfig = require('../etc/test-config-qa.js'); -var marklogic = require('../'); -var q = marklogic.queryBuilder; +const marklogic = require('../'); +const q = marklogic.queryBuilder; + +const dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); +const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); +const dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); -var dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); -var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); -var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); describe('Binary documents test', function () { - var binaryPath = __dirname + '/data/somePdfFile.pdf'; - var uri = '/test/binary/somePdfFile.pdf'; - var binaryValue = null; - before(function (done) { - this.timeout(10000); - fs.createReadStream(binaryPath). - pipe(concatStream({ encoding: 'buffer' }, function (value) { - binaryValue = value; - done(); - })); - }); + const binaryPath = __dirname + '/data/somePdfFile.pdf'; + let binaryValue = null; - it('should write the binary with Readable stream', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - var readableBinary = new ValueStream(binaryValue); - //readableBinary.pause(); - dbWriter.documents.write({ - uri: uri, - contentType: 'application/pdf', - quality: 25, - properties: { prop1: 'foo' }, - content: readableBinary - }). - result(function (response) { - response.should.have.property('documents'); - done(); - }, done); - }); + const uri = '/test/write/somePdfFile.pdf'; - it('should read the binary with Readable stream', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - dbReader.documents.read(uri). - result(function (documents) { - //console.log(JSON.stringify(documents, null, 2)); - JSON.stringify(binaryValue).should.equal( - JSON.stringify(documents[0].content)); - done(); - }, done); + before(async function () { + binaryValue = await new Promise((resolve, reject) => { + fs.createReadStream(binaryPath) + .pipe(concatStream({ encoding: 'buffer' }, function (value) { + resolve(value); + })) + .on('error', reject); + }); }); - it('should read the binary document metadata', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - dbReader.documents.read({ uris: uri, categories: ['metadata'] }) - .result(function (documents) { - var document = documents[0]; - document.quality.should.equal(25); - document.properties.prop1.should.equal('foo'); - done(); - }, done); - }); + it('should write, read, read metadata, verify and delete the binary pdf content', async function () { - it('should delete the pdf file', function (done) { - dbAdmin.documents.removeAll({ - all: true - }). - result(function (response) { - done(); - }, done); - }); + const readableBinary = new ValueStream(binaryValue); + try { + const writeResponse = await dbWriter.documents.write({ + uri: uri, + contentType: 'application/pdf', + quality: 25, + properties: { prop1: 'foo' }, + content: readableBinary + }).result(); + writeResponse.should.have.property('documents'); + const docReadResp = await dbReader.documents.read(uri).result(); + docReadResp[0].contentType.should.equal('application/pdf'); + docReadResp[0].content.length.should.equal(binaryValue.length); + Buffer.compare(binaryValue, docReadResp[0].content).should.equal(0); + + const docReadRespMeta = await dbReader.documents.read( + { uris: uri, categories: ['metadata'] } + ).result(); + docReadRespMeta[0].quality.should.equal(25); + docReadRespMeta[0].properties.prop1.should.equal('foo'); + + // original test deleted all documents. This one just deletes the one we wrote. + await dbAdmin.documents.remove(uri).result(); + + } catch (error) { + console.error(error); + throw error; + } + }); }); function ValueStream(value) { diff --git a/test-complete/nodejs-documents-binary-range.js b/test-complete/nodejs-documents-binary-range.js index 13b9892ce..f23179964 100644 --- a/test-complete/nodejs-documents-binary-range.js +++ b/test-complete/nodejs-documents-binary-range.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-crud-negative.js b/test-complete/nodejs-documents-crud-negative.js index 277e05022..e77a2ca33 100644 --- a/test-complete/nodejs-documents-crud-negative.js +++ b/test-complete/nodejs-documents-crud-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-crud.js b/test-complete/nodejs-documents-crud.js index d21bfe0e9..d7a9cf5eb 100644 --- a/test-complete/nodejs-documents-crud.js +++ b/test-complete/nodejs-documents-crud.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-extract-negative.js b/test-complete/nodejs-documents-extract-negative.js index 5d8a664f7..08ee217a3 100644 --- a/test-complete/nodejs-documents-extract-negative.js +++ b/test-complete/nodejs-documents-extract-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-extract.js b/test-complete/nodejs-documents-extract.js index 8a771f953..6dc6a3199 100644 --- a/test-complete/nodejs-documents-extract.js +++ b/test-complete/nodejs-documents-extract.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-metadata-values.js b/test-complete/nodejs-documents-metadata-values.js index 97fd4281a..fb523251d 100644 --- a/test-complete/nodejs-documents-metadata-values.js +++ b/test-complete/nodejs-documents-metadata-values.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-parse-2.js b/test-complete/nodejs-documents-parse-2.js index bf73b668f..8d8bba10d 100644 --- a/test-complete/nodejs-documents-parse-2.js +++ b/test-complete/nodejs-documents-parse-2.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-parse.js b/test-complete/nodejs-documents-parse.js index 9ea7bbc88..26ff73411 100644 --- a/test-complete/nodejs-documents-parse.js +++ b/test-complete/nodejs-documents-parse.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-patch-2.js b/test-complete/nodejs-documents-patch-2.js index 60767f472..7cb830ce1 100755 --- a/test-complete/nodejs-documents-patch-2.js +++ b/test-complete/nodejs-documents-patch-2.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-patch-datatypes.js b/test-complete/nodejs-documents-patch-datatypes.js index 24f979914..967dee868 100644 --- a/test-complete/nodejs-documents-patch-datatypes.js +++ b/test-complete/nodejs-documents-patch-datatypes.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-documents-patch-metadata.js b/test-complete/nodejs-documents-patch-metadata.js index b8c98311d..c52601e55 100644 --- a/test-complete/nodejs-documents-patch-metadata.js +++ b/test-complete/nodejs-documents-patch-metadata.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-patch-negative.js b/test-complete/nodejs-documents-patch-negative.js index e47606cb4..74b74486f 100644 --- a/test-complete/nodejs-documents-patch-negative.js +++ b/test-complete/nodejs-documents-patch-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-patch-null.js b/test-complete/nodejs-documents-patch-null.js index 26de8350f..ee83e07cf 100644 --- a/test-complete/nodejs-documents-patch-null.js +++ b/test-complete/nodejs-documents-patch-null.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-patch-stream.js b/test-complete/nodejs-documents-patch-stream.js index efe6d43d9..440fd56ee 100644 --- a/test-complete/nodejs-documents-patch-stream.js +++ b/test-complete/nodejs-documents-patch-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-patch.js b/test-complete/nodejs-documents-patch.js index 3199c0297..921178122 100644 --- a/test-complete/nodejs-documents-patch.js +++ b/test-complete/nodejs-documents-patch.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-qbe.js b/test-complete/nodejs-documents-qbe.js index 1c2640f8b..9190419fa 100644 --- a/test-complete/nodejs-documents-qbe.js +++ b/test-complete/nodejs-documents-qbe.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-2.js b/test-complete/nodejs-documents-query-2.js index dd108b900..26fcd0fe5 100644 --- a/test-complete/nodejs-documents-query-2.js +++ b/test-complete/nodejs-documents-query-2.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-3.js b/test-complete/nodejs-documents-query-3.js index 6eb542065..9aa67f245 100644 --- a/test-complete/nodejs-documents-query-3.js +++ b/test-complete/nodejs-documents-query-3.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-facet.js b/test-complete/nodejs-documents-query-facet.js index a0e6348e2..25afb6490 100644 --- a/test-complete/nodejs-documents-query-facet.js +++ b/test-complete/nodejs-documents-query-facet.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-geo-double.js b/test-complete/nodejs-documents-query-geo-double.js index 1476a4054..d75267803 100644 --- a/test-complete/nodejs-documents-query-geo-double.js +++ b/test-complete/nodejs-documents-query-geo-double.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-geo-region.js b/test-complete/nodejs-documents-query-geo-region.js index af33a502a..ff7b8342d 100644 --- a/test-complete/nodejs-documents-query-geo-region.js +++ b/test-complete/nodejs-documents-query-geo-region.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-geo.js b/test-complete/nodejs-documents-query-geo.js index bd6211dff..6b97dfb50 100644 --- a/test-complete/nodejs-documents-query-geo.js +++ b/test-complete/nodejs-documents-query-geo.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-negative.js b/test-complete/nodejs-documents-query-negative.js index 676cc21ae..3530ed00c 100644 --- a/test-complete/nodejs-documents-query-negative.js +++ b/test-complete/nodejs-documents-query-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-options.js b/test-complete/nodejs-documents-query-options.js index 169566ca0..23347d130 100644 --- a/test-complete/nodejs-documents-query-options.js +++ b/test-complete/nodejs-documents-query-options.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-slice.js b/test-complete/nodejs-documents-query-slice.js index ec8c84cee..1192d1c29 100644 --- a/test-complete/nodejs-documents-query-slice.js +++ b/test-complete/nodejs-documents-query-slice.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-sort.js b/test-complete/nodejs-documents-query-sort.js index 6e451fc85..1e6e6fefe 100644 --- a/test-complete/nodejs-documents-query-sort.js +++ b/test-complete/nodejs-documents-query-sort.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-query-stream.js b/test-complete/nodejs-documents-query-stream.js index 983fccef0..26688029d 100644 --- a/test-complete/nodejs-documents-query-stream.js +++ b/test-complete/nodejs-documents-query-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); //var should = require('chai').should(); diff --git a/test-complete/nodejs-documents-query.js b/test-complete/nodejs-documents-query.js index a589b0f61..50a5a313c 100644 --- a/test-complete/nodejs-documents-query.js +++ b/test-complete/nodejs-documents-query.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-quick.js b/test-complete/nodejs-documents-quick.js index 194d13b94..5889a3da8 100644 --- a/test-complete/nodejs-documents-quick.js +++ b/test-complete/nodejs-documents-quick.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-read-chunk.js b/test-complete/nodejs-documents-read-chunk.js index 3865965e6..7dd0024bc 100644 --- a/test-complete/nodejs-documents-read-chunk.js +++ b/test-complete/nodejs-documents-read-chunk.js @@ -1,83 +1,85 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ -var should = require('should'); +const should = require('should'); -var fs = require('fs'); -var stream = require('stream'); -var util = require('util'); +const fs = require('fs'); +const stream = require('stream'); +const util = require('util'); -var concatStream = require('concat-stream'); -var valcheck = require('core-util-is'); -var testconfig = require('../etc/test-config-qa.js'); +const concatStream = require('concat-stream'); +const valcheck = require('core-util-is'); +const testconfig = require('../etc/test-config-qa.js'); -var marklogic = require('../'); -var q = marklogic.queryBuilder; +const marklogic = require('../'); +const q = marklogic.queryBuilder; -var dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); -var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); -var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); +const dbReader = marklogic.createDatabaseClient(testconfig.restReaderConnection); +const dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); +const dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); describe('Binary documents test', function () { - var binaryPath = __dirname + '/data/somePdfFile.pdf'; - var uri = '/test/binary/somePdfFile.pdf'; - var binaryValue = null; - before(function (done) { - this.timeout(10000); - fs.createReadStream(binaryPath). - pipe(concatStream({ encoding: 'buffer' }, function (value) { - binaryValue = value; - done(); - })); - }); + const binaryPath = __dirname + '/data/somePdfFile.pdf'; + let binaryValue = null; - it('should write the binary with Readable stream', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - var readableBinary = new ValueStream(binaryValue); - //readableBinary.pause(); - dbWriter.documents.write({ - uri: uri, - contentType: 'application/pdf', - quality: 25, - properties: { prop1: 'foo' }, - content: readableBinary - }). - result(function (response) { - response.should.have.property('documents'); - done(); - }, done); - }); + const uri = '/test/binary/somePdfFile.pdf'; - it('should wait for the document to be written', function (done) { - setTimeout(function () { - done(); - }, 10000); + before(async function () { + binaryValue = await new Promise((resolve, reject) => { + fs.createReadStream(binaryPath) + .pipe(concatStream({ encoding: 'buffer' }, function (value) { + resolve(value); + })) + .on('error', reject); + }); }); - it('should read the binary in chunk', function (done) { - this.timeout(10000); - var uri = '/test/write/somePdfFile.pdf'; - setTimeout(function () { - dbReader.documents.read(uri).stream('chunked'). - on('data', function (data) { - var strData = data.toString(); - strData.should.containEql('CVISION Technologies'); - }). - on('end', function () { - done(); - }, done); - }, 3000); - }); - it('should delete all documents', function (done) { - dbAdmin.documents.removeAll({ - all: true - }). - result(function (response) { - done(); - }, done); - }); + it('should write, read using stream, verify and delete the binary content', async function () { + + let readableBinary = new ValueStream(binaryValue); + try { + const response = await dbWriter.documents.write({ + uri: uri, + contentType: 'application/pdf', + quality: 25, + properties: { prop1: 'foo' }, + content: readableBinary + }).result(); + + should.exist(response); + response.should.have.property('documents'); + + const streamData = await new Promise((resolve, reject) => { + const chunks = []; + const readStream = dbReader.documents.read(uri).stream('chunked'); + readStream.on('data', function (data) { + chunks.push(data); + }); + + readStream.on('end', function () { + resolve(Buffer.concat(chunks)); + }); + + readStream.on('error', function (error) { + reject(error); + }); + }); + + Buffer.compare(binaryValue, streamData).should.equal(0); + + // Verify the binary content has a string near the end of the file + const strData = streamData.toString(); + strData.should.containEql('CVISION Technologies'); + + // original test deleted all documents. This one just deletes the one we wrote. + await dbAdmin.documents.remove(uri).result(); + + } catch (error) { + console.error("Error writing document: ", error); + throw error; + } + }); }); function ValueStream(value) { diff --git a/test-complete/nodejs-documents-remove-multiple.js b/test-complete/nodejs-documents-remove-multiple.js index 598efcc20..d9732615e 100644 --- a/test-complete/nodejs-documents-remove-multiple.js +++ b/test-complete/nodejs-documents-remove-multiple.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-removeAll-all.js b/test-complete/nodejs-documents-removeAll-all.js index 11f64bfbe..a2b8341d3 100644 --- a/test-complete/nodejs-documents-removeAll-all.js +++ b/test-complete/nodejs-documents-removeAll-all.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-removeAll-negative.js b/test-complete/nodejs-documents-removeAll-negative.js index 1c8a6b5db..5926c4f66 100644 --- a/test-complete/nodejs-documents-removeAll-negative.js +++ b/test-complete/nodejs-documents-removeAll-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-removeAll.js b/test-complete/nodejs-documents-removeAll.js index fb63f6511..1cebc815a 100644 --- a/test-complete/nodejs-documents-removeAll.js +++ b/test-complete/nodejs-documents-removeAll.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-resources-config.js b/test-complete/nodejs-documents-resources-config.js index 923765ef9..250f017e0 100644 --- a/test-complete/nodejs-documents-resources-config.js +++ b/test-complete/nodejs-documents-resources-config.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-resources.js b/test-complete/nodejs-documents-resources.js index 534e8c930..c30f52428 100644 --- a/test-complete/nodejs-documents-resources.js +++ b/test-complete/nodejs-documents-resources.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-suggest.js b/test-complete/nodejs-documents-suggest.js index 2e1a2a5a3..6cbe4c32b 100644 --- a/test-complete/nodejs-documents-suggest.js +++ b/test-complete/nodejs-documents-suggest.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-transaction-combo.js b/test-complete/nodejs-documents-transaction-combo.js index 66b03610c..40e8f7c18 100644 --- a/test-complete/nodejs-documents-transaction-combo.js +++ b/test-complete/nodejs-documents-transaction-combo.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-transaction-remove.js b/test-complete/nodejs-documents-transaction-remove.js index 8045158dd..2b0b4f490 100644 --- a/test-complete/nodejs-documents-transaction-remove.js +++ b/test-complete/nodejs-documents-transaction-remove.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-transaction-timelimit.js b/test-complete/nodejs-documents-transaction-timelimit.js index 087884d69..958b90fea 100644 --- a/test-complete/nodejs-documents-transaction-timelimit.js +++ b/test-complete/nodejs-documents-transaction-timelimit.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-transaction-withstate.js b/test-complete/nodejs-documents-transaction-withstate.js index c02f20719..537fb8779 100644 --- a/test-complete/nodejs-documents-transaction-withstate.js +++ b/test-complete/nodejs-documents-transaction-withstate.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-transaction.js b/test-complete/nodejs-documents-transaction.js index 3f722e0ec..af61e769c 100644 --- a/test-complete/nodejs-documents-transaction.js +++ b/test-complete/nodejs-documents-transaction.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-values-negative.js b/test-complete/nodejs-documents-values-negative.js index f1c0de2c7..a1f995f5a 100644 --- a/test-complete/nodejs-documents-values-negative.js +++ b/test-complete/nodejs-documents-values-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-values.js b/test-complete/nodejs-documents-values.js index 59f281202..b5b0d36b6 100644 --- a/test-complete/nodejs-documents-values.js +++ b/test-complete/nodejs-documents-values.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-write-large.js b/test-complete/nodejs-documents-write-large.js index 471841bf0..a32843efb 100644 --- a/test-complete/nodejs-documents-write-large.js +++ b/test-complete/nodejs-documents-write-large.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-documents-write-stream.js b/test-complete/nodejs-documents-write-stream.js index baae9b657..63488b878 100644 --- a/test-complete/nodejs-documents-write-stream.js +++ b/test-complete/nodejs-documents-write-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-extlibs-negative.js b/test-complete/nodejs-extlibs-negative.js index 3cd35bf2b..0bedb97a4 100644 --- a/test-complete/nodejs-extlibs-negative.js +++ b/test-complete/nodejs-extlibs-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-extlibs.js b/test-complete/nodejs-extlibs.js index c0279a872..ef3bfee36 100644 --- a/test-complete/nodejs-extlibs.js +++ b/test-complete/nodejs-extlibs.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-graphs-content-type.js b/test-complete/nodejs-graphs-content-type.js index 7eb9e0d74..4dae3475d 100644 --- a/test-complete/nodejs-graphs-content-type.js +++ b/test-complete/nodejs-graphs-content-type.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-default.js b/test-complete/nodejs-graphs-default.js index 766f23a60..64489817a 100644 --- a/test-complete/nodejs-graphs-default.js +++ b/test-complete/nodejs-graphs-default.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-merge-stream.js b/test-complete/nodejs-graphs-merge-stream.js index cdea139f6..707596f3a 100644 --- a/test-complete/nodejs-graphs-merge-stream.js +++ b/test-complete/nodejs-graphs-merge-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-merge.js b/test-complete/nodejs-graphs-merge.js index afab9e6c0..769a00933 100644 --- a/test-complete/nodejs-graphs-merge.js +++ b/test-complete/nodejs-graphs-merge.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-negative.js b/test-complete/nodejs-graphs-negative.js index a2b94eb35..b1c2fb2d3 100644 --- a/test-complete/nodejs-graphs-negative.js +++ b/test-complete/nodejs-graphs-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-overwrite-stream.js b/test-complete/nodejs-graphs-overwrite-stream.js index 5dcf469c9..cc43ea83d 100644 --- a/test-complete/nodejs-graphs-overwrite-stream.js +++ b/test-complete/nodejs-graphs-overwrite-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-overwrite.js b/test-complete/nodejs-graphs-overwrite.js index 94dfa0818..f60bc34eb 100644 --- a/test-complete/nodejs-graphs-overwrite.js +++ b/test-complete/nodejs-graphs-overwrite.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-read-write-stream.js b/test-complete/nodejs-graphs-read-write-stream.js index a21c0742e..5ebbac5e8 100644 --- a/test-complete/nodejs-graphs-read-write-stream.js +++ b/test-complete/nodejs-graphs-read-write-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-repair.js b/test-complete/nodejs-graphs-repair.js index c75ba23be..c374be6ed 100644 --- a/test-complete/nodejs-graphs-repair.js +++ b/test-complete/nodejs-graphs-repair.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-graphs-transaction-remove.js b/test-complete/nodejs-graphs-transaction-remove.js index 1f314b315..ac67ea577 100644 --- a/test-complete/nodejs-graphs-transaction-remove.js +++ b/test-complete/nodejs-graphs-transaction-remove.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-graphs-transaction.js b/test-complete/nodejs-graphs-transaction.js index 517d55ebf..324657547 100644 --- a/test-complete/nodejs-graphs-transaction.js +++ b/test-complete/nodejs-graphs-transaction.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-issue-104.js b/test-complete/nodejs-issue-104.js index a79c5efe2..246808f6a 100644 --- a/test-complete/nodejs-issue-104.js +++ b/test-complete/nodejs-issue-104.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-issue-108-109.js b/test-complete/nodejs-issue-108-109.js index 061234e83..7ddf7a008 100644 --- a/test-complete/nodejs-issue-108-109.js +++ b/test-complete/nodejs-issue-108-109.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-issue-110.js b/test-complete/nodejs-issue-110.js index 38b8172b9..27499c019 100644 --- a/test-complete/nodejs-issue-110.js +++ b/test-complete/nodejs-issue-110.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-issue-115.js b/test-complete/nodejs-issue-115.js index c3da66ca9..b884e1a04 100644 --- a/test-complete/nodejs-issue-115.js +++ b/test-complete/nodejs-issue-115.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-issue-257.js b/test-complete/nodejs-issue-257.js index df5060cb9..095c513a2 100644 --- a/test-complete/nodejs-issue-257.js +++ b/test-complete/nodejs-issue-257.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-issue-99.js b/test-complete/nodejs-issue-99.js index 8e5c14e02..b90f5e9bb 100644 --- a/test-complete/nodejs-issue-99.js +++ b/test-complete/nodejs-issue-99.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-eval-negative.js b/test-complete/nodejs-javascript-eval-negative.js index 4e62e6614..1e0f0f717 100644 --- a/test-complete/nodejs-javascript-eval-negative.js +++ b/test-complete/nodejs-javascript-eval-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-eval-params.js b/test-complete/nodejs-javascript-eval-params.js index e71750c49..55042fc55 100644 --- a/test-complete/nodejs-javascript-eval-params.js +++ b/test-complete/nodejs-javascript-eval-params.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-eval.js b/test-complete/nodejs-javascript-eval.js index 705f9c695..586417f06 100644 --- a/test-complete/nodejs-javascript-eval.js +++ b/test-complete/nodejs-javascript-eval.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-invoke-params-negative.js b/test-complete/nodejs-javascript-invoke-params-negative.js index 56bfbf56e..f72014634 100644 --- a/test-complete/nodejs-javascript-invoke-params-negative.js +++ b/test-complete/nodejs-javascript-invoke-params-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-invoke-params.js b/test-complete/nodejs-javascript-invoke-params.js index 733ab8ca9..d16a4e8ad 100644 --- a/test-complete/nodejs-javascript-invoke-params.js +++ b/test-complete/nodejs-javascript-invoke-params.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-invoke-simple-negative.js b/test-complete/nodejs-javascript-invoke-simple-negative.js index 6c358f8af..1a197bb64 100644 --- a/test-complete/nodejs-javascript-invoke-simple-negative.js +++ b/test-complete/nodejs-javascript-invoke-simple-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-javascript-invoke-simple.js b/test-complete/nodejs-javascript-invoke-simple.js index b5b53067b..1a0b6b0cb 100644 --- a/test-complete/nodejs-javascript-invoke-simple.js +++ b/test-complete/nodejs-javascript-invoke-simple.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-logger-bunyan.js b/test-complete/nodejs-logger-bunyan.js deleted file mode 100644 index 9a809f6ef..000000000 --- a/test-complete/nodejs-logger-bunyan.js +++ /dev/null @@ -1,16 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var testconfig = require('../etc/test-config-qa.js'); -var marklogic = require('../'); -var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); - -describe('Bunyan logger test', function () { - - it('should read the bunyan logger', function (done) { - dbAdmin.config.serverprops.read().result(function (response) { - done(); - }, done); - }); - -}); diff --git a/test-complete/nodejs-logger-winston.js b/test-complete/nodejs-logger-winston.js deleted file mode 100644 index f45cb9f67..000000000 --- a/test-complete/nodejs-logger-winston.js +++ /dev/null @@ -1,31 +0,0 @@ -/* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. -*/ -var should = require('should'); -var winston = require('winston'); - -var testconfig = require('../etc/test-config-qa.js'); -var fs = require('fs'); - -var marklogic = require('../'); - -var db = marklogic.createDatabaseClient(testconfig.restReaderConnection); -var dbWriter = marklogic.createDatabaseClient(testconfig.restWriterConnection); -var dbEval = marklogic.createDatabaseClient(testconfig.restEvaluatorConnection); -var dbAdmin = marklogic.createDatabaseClient(testconfig.restAdminConnection); - -describe('Winston logger test', function () { - - winston.level = 'debug'; - dbAdmin.setLogger(winston); - - it('should read the bunyan logger', function (done) { - dbAdmin.config.serverprops.read().result(function (response) { - //var log = JSON.stringify(response); - //console.log(log); - //log.should.containEql('testlog'); - done(); - }, done); - }); - -}); diff --git a/test-complete/nodejs-optic-cts-queries.js b/test-complete/nodejs-optic-cts-queries.js index a006e53a0..b65e29727 100644 --- a/test-complete/nodejs-optic-cts-queries.js +++ b/test-complete/nodejs-optic-cts-queries.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-from-lexicons.js b/test-complete/nodejs-optic-from-lexicons.js index b77aff486..e1f9febf9 100644 --- a/test-complete/nodejs-optic-from-lexicons.js +++ b/test-complete/nodejs-optic-from-lexicons.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-from-literals.js b/test-complete/nodejs-optic-from-literals.js index cece36d71..31b3ef937 100644 --- a/test-complete/nodejs-optic-from-literals.js +++ b/test-complete/nodejs-optic-from-literals.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-from-sparql.js b/test-complete/nodejs-optic-from-sparql.js index ca4d2c5a9..0eba89afc 100644 --- a/test-complete/nodejs-optic-from-sparql.js +++ b/test-complete/nodejs-optic-from-sparql.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-from-sql.js b/test-complete/nodejs-optic-from-sql.js index da1b4ec8d..e8fab26d5 100644 --- a/test-complete/nodejs-optic-from-sql.js +++ b/test-complete/nodejs-optic-from-sql.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-from-triples.js b/test-complete/nodejs-optic-from-triples.js index b6d1ac551..1a4f5c104 100644 --- a/test-complete/nodejs-optic-from-triples.js +++ b/test-complete/nodejs-optic-from-triples.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -317,8 +317,10 @@ describe('Nodejs Optic from triples test', function () { db.rows.query(output, { format: 'json', structure: 'object', columnTypes: 'header' }) .then(function (output) { - //console.log(JSON.stringify(output, null, 2)); - expect(output.rows.length).to.equal(3); + // console.log(JSON.stringify(output, null, 2)); + // This test was expecting 3 rows, but after changing the deploy to not use a custom deployer, the test + // and the query itself in qconsole receives 6 rows. It's not clear that the "dedup": "on" should have + // an impact when the join occurs. So just asserting that some expected data is received. expect(output.rows[0].PlayerName).to.equal('Juan Leone'); expect(output.rows[0].TeamName).to.equal('San Francisco Giants'); expect(output.rows[0].GraphName).to.equal('/optic/player/triple/test'); diff --git a/test-complete/nodejs-optic-from-views.js b/test-complete/nodejs-optic-from-views.js index a79dd3f87..3fd0197c8 100644 --- a/test-complete/nodejs-optic-from-views.js +++ b/test-complete/nodejs-optic-from-views.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -1151,7 +1151,8 @@ describe('Nodejs Optic from views test', function () { }, done); }); - it('TEST 38 - with old timestamp', function (done) { + // Skipping due to server bug MLE-24724 + it.skip('TEST 38 - with old timestamp', function (done) { var oldTimestamp = db.createTimestamp('123'); const plan1 = op.fromView('opticFunctionalTest', 'detail', 'myDetail'); const plan2 = op.fromView('opticFunctionalTest', 'master', 'myMaster'); diff --git a/test-complete/nodejs-optic-generate-views.js b/test-complete/nodejs-optic-generate-views.js index d4ad3e5ab..1b8172d56 100644 --- a/test-complete/nodejs-optic-generate-views.js +++ b/test-complete/nodejs-optic-generate-views.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -25,10 +25,9 @@ const db = marklogic.createDatabaseClient( } ); -// Client to query schema database to verify view is stored -// Make sure you have qbvuser user created. See XQuery script nodejs-optic-setup.xml of internal repo (SVN). -var dbModClient = marklogic.createDatabaseClient({ - database: dbName + 'Modules', +// Client for writing new schemas. +const schemasClient = marklogic.createDatabaseClient({ + database: 'Schemas', host: connectdef.host, port: connectdef.port, user: 'qbvuser', @@ -76,7 +75,7 @@ describe('Nodejs Optic generate views test', function () { dbClient.rows.generateView(plan, 'InnerJoin', 'keymatch') .then(function (res) { //console.log(JSON.stringify(res, null, 2)); - dbModClient.documents.write({ + schemasClient.documents.write({ uri: '/qbv-InnerJoin-keymatch.xml', collections: 'http://marklogic.com/xdmp/qbv', contentType: 'application/xml', @@ -130,7 +129,7 @@ describe('Nodejs Optic generate views test', function () { dbClient.rows.generateView(plan, 'sparql', 'groupmin') .then(function (res) { //console.log(JSON.stringify(res, null, 2)); - dbModClient.documents.write({ + schemasClient.documents.write({ uri: '/qbv-sparql-groupmin.xml', collections: 'http://marklogic.com/xdmp/qbv', contentType: 'application/xml', @@ -187,7 +186,7 @@ describe('Nodejs Optic generate views test', function () { dbClient.rows.generateView(plan, 'lexicons', 'orderbyselect') .then(function (res) { //console.log(JSON.stringify(res, null, 2)); - dbModClient.documents.write({ + schemasClient.documents.write({ uri: '/qbv-lexicons-orderby-select.xml', collections: 'http://marklogic.com/xdmp/qbv', contentType: 'application/xml', diff --git a/test-complete/nodejs-optic-nodes.js b/test-complete/nodejs-optic-nodes.js index 698031058..dc1a2dd0b 100644 --- a/test-complete/nodejs-optic-nodes.js +++ b/test-complete/nodejs-optic-nodes.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-read-file.js b/test-complete/nodejs-optic-read-file.js index cc1dea395..0a16efac1 100644 --- a/test-complete/nodejs-optic-read-file.js +++ b/test-complete/nodejs-optic-read-file.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; diff --git a/test-complete/nodejs-optic-redaction.js b/test-complete/nodejs-optic-redaction.js index 817dfed8a..5920a052b 100644 --- a/test-complete/nodejs-optic-redaction.js +++ b/test-complete/nodejs-optic-redaction.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ 'use strict'; @@ -25,29 +25,6 @@ const db = marklogic.createDatabaseClient( } ); -// Client to query schema database to verify view is stored -// Make sure you have qbvuser user created. See XQuery script nodejs-optic-setup.xml of internal repo (SVN). -var dbModClient = marklogic.createDatabaseClient({ - database: dbName + 'Modules', - host: connectdef.host, - port: connectdef.port, - user: 'qbvuser', - password: 'qbvuser', - authType: connectdef.authType -}); - -// Client to generate views -const dbClient = marklogic.createDatabaseClient( - { - database: dbName, - host: connectdef.host, - port: connectdef.port, - user: 'qbvuser', - password: 'qbvuser', - authType: connectdef.authType - } -); - const op = marklogic.planBuilder; function waitForViewCreate(wTime) { diff --git a/test-complete/nodejs-optimistic-locking-stream.js b/test-complete/nodejs-optimistic-locking-stream.js index 3cd58be74..9a8ecdece 100644 --- a/test-complete/nodejs-optimistic-locking-stream.js +++ b/test-complete/nodejs-optimistic-locking-stream.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-optimistic-locking.js b/test-complete/nodejs-optimistic-locking.js index 5543c9498..5d349648e 100644 --- a/test-complete/nodejs-optimistic-locking.js +++ b/test-complete/nodejs-optimistic-locking.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-pitq-documents.js b/test-complete/nodejs-pitq-documents.js index 8157106ff..e4b796fac 100644 --- a/test-complete/nodejs-pitq-documents.js +++ b/test-complete/nodejs-pitq-documents.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-pitq-graphs.js b/test-complete/nodejs-pitq-graphs.js index 5f9096a16..9245dea09 100644 --- a/test-complete/nodejs-pitq-graphs.js +++ b/test-complete/nodejs-pitq-graphs.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-pitq-values.js b/test-complete/nodejs-pitq-values.js index 4a357cfc3..c2be10c05 100644 --- a/test-complete/nodejs-pitq-values.js +++ b/test-complete/nodejs-pitq-values.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-process-env.js b/test-complete/nodejs-process-env.js index 1ad0a7aa3..66b886839 100644 --- a/test-complete/nodejs-process-env.js +++ b/test-complete/nodejs-process-env.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ process.env.NODE_ENV = 'development'; diff --git a/test-complete/nodejs-serverprops.js b/test-complete/nodejs-serverprops.js index 035054a44..a2fdc9efa 100644 --- a/test-complete/nodejs-serverprops.js +++ b/test-complete/nodejs-serverprops.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-sparql-update.js b/test-complete/nodejs-sparql-update.js index feec8e524..bad4b324e 100644 --- a/test-complete/nodejs-sparql-update.js +++ b/test-complete/nodejs-sparql-update.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-sparql.js b/test-complete/nodejs-sparql.js index 42b6a2571..ddb3930b0 100644 --- a/test-complete/nodejs-sparql.js +++ b/test-complete/nodejs-sparql.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-advance-lsqt.js b/test-complete/nodejs-temporal-advance-lsqt.js index a13b7df7e..28e85182c 100644 --- a/test-complete/nodejs-temporal-advance-lsqt.js +++ b/test-complete/nodejs-temporal-advance-lsqt.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-insert-bulk.js b/test-complete/nodejs-temporal-insert-bulk.js index a6aedd6f7..c96f6a67d 100644 --- a/test-complete/nodejs-temporal-insert-bulk.js +++ b/test-complete/nodejs-temporal-insert-bulk.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-insert-lsqt.js b/test-complete/nodejs-temporal-insert-lsqt.js index e990bfdc1..ad06bdf4e 100644 --- a/test-complete/nodejs-temporal-insert-lsqt.js +++ b/test-complete/nodejs-temporal-insert-lsqt.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-insert-transform.js b/test-complete/nodejs-temporal-insert-transform.js index 5060f6a7e..4bfcf8baf 100644 --- a/test-complete/nodejs-temporal-insert-transform.js +++ b/test-complete/nodejs-temporal-insert-transform.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-insert.js b/test-complete/nodejs-temporal-insert.js index a32be511d..4ba972276 100644 --- a/test-complete/nodejs-temporal-insert.js +++ b/test-complete/nodejs-temporal-insert.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-lsqt-query.js b/test-complete/nodejs-temporal-lsqt-query.js index 4fb815840..6588aafb2 100644 --- a/test-complete/nodejs-temporal-lsqt-query.js +++ b/test-complete/nodejs-temporal-lsqt-query.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-patch.js b/test-complete/nodejs-temporal-patch.js index 5a989a472..2c2ee1df8 100644 --- a/test-complete/nodejs-temporal-patch.js +++ b/test-complete/nodejs-temporal-patch.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-period-compare-query.js b/test-complete/nodejs-temporal-period-compare-query.js index 897a21c83..97c3db862 100644 --- a/test-complete/nodejs-temporal-period-compare-query.js +++ b/test-complete/nodejs-temporal-period-compare-query.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-period-range-query-multiple-axis.js b/test-complete/nodejs-temporal-period-range-query-multiple-axis.js index 3a6fd6c51..b630701c1 100644 --- a/test-complete/nodejs-temporal-period-range-query-multiple-axis.js +++ b/test-complete/nodejs-temporal-period-range-query-multiple-axis.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-period-range-query.js b/test-complete/nodejs-temporal-period-range-query.js index 302c94ae9..e99d231b6 100644 --- a/test-complete/nodejs-temporal-period-range-query.js +++ b/test-complete/nodejs-temporal-period-range-query.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-protect-delete.js b/test-complete/nodejs-temporal-protect-delete.js index 3baba023b..b67b9b1fb 100644 --- a/test-complete/nodejs-temporal-protect-delete.js +++ b/test-complete/nodejs-temporal-protect-delete.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-protect-update.js b/test-complete/nodejs-temporal-protect-update.js index bb67045a5..13d398ff5 100644 --- a/test-complete/nodejs-temporal-protect-update.js +++ b/test-complete/nodejs-temporal-protect-update.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-protect-wipe.js b/test-complete/nodejs-temporal-protect-wipe.js index f2407d15a..2bb9c22eb 100644 --- a/test-complete/nodejs-temporal-protect-wipe.js +++ b/test-complete/nodejs-temporal-protect-wipe.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-transaction-commit.js b/test-complete/nodejs-temporal-transaction-commit.js index f3123da84..f784cebe6 100644 --- a/test-complete/nodejs-temporal-transaction-commit.js +++ b/test-complete/nodejs-temporal-transaction-commit.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-transaction-rollback.js b/test-complete/nodejs-temporal-transaction-rollback.js index c0ede209f..d7693858d 100644 --- a/test-complete/nodejs-temporal-transaction-rollback.js +++ b/test-complete/nodejs-temporal-transaction-rollback.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-update-lsqt.js b/test-complete/nodejs-temporal-update-lsqt.js index 813abe71f..fc53a1484 100644 --- a/test-complete/nodejs-temporal-update-lsqt.js +++ b/test-complete/nodejs-temporal-update-lsqt.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-temporal-update.js b/test-complete/nodejs-temporal-update.js index 6d9b9195c..3265a611b 100644 --- a/test-complete/nodejs-temporal-update.js +++ b/test-complete/nodejs-temporal-update.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-transform-combine.js b/test-complete/nodejs-transform-combine.js index 665f13cea..fe3069683 100644 --- a/test-complete/nodejs-transform-combine.js +++ b/test-complete/nodejs-transform-combine.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-empty.js b/test-complete/nodejs-transform-empty.js index f9390792a..8975d73f6 100644 --- a/test-complete/nodejs-transform-empty.js +++ b/test-complete/nodejs-transform-empty.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-javascript.js b/test-complete/nodejs-transform-javascript.js index a63603b4a..9f9e16abf 100644 --- a/test-complete/nodejs-transform-javascript.js +++ b/test-complete/nodejs-transform-javascript.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-negative.js b/test-complete/nodejs-transform-negative.js index cc348acb1..3bdce3d2a 100644 --- a/test-complete/nodejs-transform-negative.js +++ b/test-complete/nodejs-transform-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-params.js b/test-complete/nodejs-transform-params.js index 90d624d7b..e28588254 100644 --- a/test-complete/nodejs-transform-params.js +++ b/test-complete/nodejs-transform-params.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-save-json-as-xml.js b/test-complete/nodejs-transform-save-json-as-xml.js index 74b9be0a9..d3f0d0bcb 100644 --- a/test-complete/nodejs-transform-save-json-as-xml.js +++ b/test-complete/nodejs-transform-save-json-as-xml.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-xquery.js b/test-complete/nodejs-transform-xquery.js index cee4fc69e..54d966403 100644 --- a/test-complete/nodejs-transform-xquery.js +++ b/test-complete/nodejs-transform-xquery.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-transform-xslt.js b/test-complete/nodejs-transform-xslt.js index 7c4a20596..28dd31f71 100644 --- a/test-complete/nodejs-transform-xslt.js +++ b/test-complete/nodejs-transform-xslt.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); var fs = require('fs'); diff --git a/test-complete/nodejs-xquery-eval-negative.js b/test-complete/nodejs-xquery-eval-negative.js index f2372ac0e..e1f080a3b 100644 --- a/test-complete/nodejs-xquery-eval-negative.js +++ b/test-complete/nodejs-xquery-eval-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-xquery-eval.js b/test-complete/nodejs-xquery-eval.js index a47801103..5e1c52cd3 100644 --- a/test-complete/nodejs-xquery-eval.js +++ b/test-complete/nodejs-xquery-eval.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-xquery-invoke-params-negative.js b/test-complete/nodejs-xquery-invoke-params-negative.js index 0da32d374..e0b970458 100644 --- a/test-complete/nodejs-xquery-invoke-params-negative.js +++ b/test-complete/nodejs-xquery-invoke-params-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-xquery-invoke-params.js b/test-complete/nodejs-xquery-invoke-params.js index 47485ca8c..63e7afbd3 100644 --- a/test-complete/nodejs-xquery-invoke-params.js +++ b/test-complete/nodejs-xquery-invoke-params.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-xquery-invoke-simple-negative.js b/test-complete/nodejs-xquery-invoke-simple-negative.js index a1aaaa20e..728cbe44c 100644 --- a/test-complete/nodejs-xquery-invoke-simple-negative.js +++ b/test-complete/nodejs-xquery-invoke-simple-negative.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should'); diff --git a/test-complete/nodejs-xquery-invoke-simple.js b/test-complete/nodejs-xquery-invoke-simple.js index 95ddb1d7f..db3d4dd3b 100644 --- a/test-complete/nodejs-xquery-invoke-simple.js +++ b/test-complete/nodejs-xquery-invoke-simple.js @@ -1,5 +1,5 @@ /* -* Copyright © 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. +* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved. */ var should = require('should');