diff --git a/.copyrightconfig b/.copyrightconfig new file mode 100644 index 00000000..a4fe0e9c --- /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 00000000..09aeb926 --- /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 00000000..f62ebfcd --- /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 f2a31ab9..9165227c 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 190c5e44..5598f296 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 032b0536..00000000 --- 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 00000000..b6f27f13 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/CHANGELOG.md b/CHANGELOG.md index 140b08a4..f1656241 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 0665d992..82d9dfcf 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 490cc396..45939b37 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 ad7950a3..370f6d29 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 12349a65..b604670f 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 d8029d25..00000000 --- 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 fcda29ec..ac5c3885 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 1648cc21..00000000 --- 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 51f16580..00000000 --- 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 7ad2bc38..00000000 --- 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 37b0df03..00000000 --- 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 5cde4807..00000000 --- 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 464fa7dd..00000000 --- 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 f1f05020..00000000 --- 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 9e055670..00000000 --- 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 91674a2b..00000000 --- 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 00000000..c40c010d --- /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 00000000..a1ba8f26 --- /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 f1fe51c5..00000000 --- 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 e20d5d34..00000000 --- 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 288e8391..00000000 --- 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 1f9d7773..00000000 --- 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 2e593c9f..00000000 --- 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 cd217d2a..00000000 --- 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 4e2c2390..00000000 --- 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 3fcd473f..00000000 --- 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 2361a844..00000000 --- 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 86d20bd6..00000000 --- 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 bded8335..00000000 --- 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 f298b476..00000000 --- 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 4d45bfc8..00000000 --- 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 dc66b844..00000000 --- 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 1ac06d7b..00000000 --- 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 360ca1b3..00000000 --- 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 e3d88aa0..ff65507c 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 a32ebfb6..e4aaa140 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 193dc036..3ceda5f2 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 5f09262b..78ebfd7a 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 ad4e8c2c..00000000 --- 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 f6fe5ffb..9158b908 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 34c28184..00000000 --- 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 5f14f1e9..87d8c7fd 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 6885b210..00000000 --- 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 c4aaf5f9..00000000 --- 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 c4aaf5f9..00000000 --- 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 d70094ab..00000000 --- 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 4b1445f6..00000000 --- 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 9102836b..00000000 --- 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 d9a8c768..0c9f8685 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 2c572c27..5c9bd248 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 29744d05..8f496c43 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 5488e9cd..cd740fc0 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 4a04be58..2fe02c7e 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 bec3b807..da7abc95 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 11931ca6..702792b9 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 0e01af25..2fb36386 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 65f62790..fa4bc70c 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 eab1ca97..803c70bc 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 255b2b66..5a5bd112 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 a4b2be89..1653e408 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 bca00f36..6a1275c7 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 59d9352c..64ca8cc4 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 af732cac..960e29e6 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 51daf319..3df43f00 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 3f2f3f3a..380a1e6e 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 663f40dd..203b739b 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 6ff3c4e4..0f6b3666 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 31c98a87..9b9fba12 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 38dc5b7f..011c8ac8 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 7889ee66..2e728351 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 41666eda..2102a83b 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 22f935b0..97acc00a 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 41308825..b5750b7e 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 913abddb..c6e6dd69 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 841e3d52..079b5cf2 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 933f1e6b..956b9893 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 7a390c04..4529f1d6 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 5c354cfd..34360297 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 96d49b06..471fbcca 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 e652bf7a..5dc8092c 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 22c42279..583f614a 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 b7df7538..ebe1ec2b 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 22f57fbf..949e0512 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 c9ea815a..a34a325b 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 95a86c85..656fe487 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 b6089588..b64660e3 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 883b0fdf..bcfbeeff 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 1090ebaf..be579a34 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 317c020a..6e013356 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 3184a345..e5b453be 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 b2e1c324..9f439202 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 b48f7a1a..228c9234 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 1fadc157..f70b78a1 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 59c17b04..cbeb9149 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 d413945b..41b96764 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 f01ec406..c69d7610 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 7587fed2..4e93be14 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 8f9ca158..08fc1f7b 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 8f922a2c..63bd1479 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 a3e964d5..97762dcf 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 72c32709..c3103da0 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 1adc0cce..412ca64d 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 3a8ec5c7..ee6c0f43 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 6d620a5f..f24b72b2 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 a0302ebc..cc934500 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 b132fc52..b1bc3b27 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 d9c46d30..29c5d0d7 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 21abec89..f010ef4c 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 59abb9c4..e3c5338d 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 d75f3575..4c93caff 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 eb7fda7a..308dfbd1 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 66165203..1cc48525 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 732d576e..10a5df0f 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 acf54416..6998fc40 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 c1f5db0b..3d3555af 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 2069a5d8..5b85f9f7 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 ac55aab1..1bd1e3da 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 230b390f..1640b327 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 7f09cda1..8c9e2afd 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 161a0fde..00000000 --- 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 cd0181d0..00000000 --- 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 00000000..fd2ac4ff --- /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 3a31f809..c2ae282d 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 249e5832..1b33c55b 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 e411586a..d4081da4 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 cccdd3d5..23d15a93 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 f9553162..5eed7ee8 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 00000000..86366e36 --- /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 00000000..f83ff6b0 --- /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 00000000..255145f3 --- /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 00000000..aa3371d5 --- /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 00000000..d7c25fe3 --- /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 00000000..20cae4aa --- /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 00000000..37905abc --- /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 00000000..46313d9c --- /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 00000000..7530249c --- /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 00000000..e4a82793 --- /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 00000000..a549925a --- /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 00000000..985ca1bc --- /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 00000000..3c6ad55d --- /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 00000000..3b6758f6 --- /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 47819895..69f230b3 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 00000000..6baa4b86 --- /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 00000000..b00d41c8 --- /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 00000000..295f8fa8 --- /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 00000000..9a916e74 --- /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 00000000..bb854c69 --- /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 00000000..0a5f59ff --- /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 00000000..295f8fa8 --- /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 00000000..76234f73 --- /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 00000000..91f8d0dc --- /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 00000000..c7345106 --- /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 00000000..9e18ba09 --- /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 00000000..24e46cdc --- /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 c7aed2a7..79978ad1 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 9887f053..bdfcc183 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 64658602..68058d08 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 2145595b..c127d264 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 a2e71706..5093f21b 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 81839296..75c904ca 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 4753dd68..c6a49303 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 271fab23..e22b5d1b 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 50bc31d6..09458e46 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 ddffa443..74cd147b 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 60d661fe..d563cdcc 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 57be0926..fc671f2b 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 0dcc6af7..603f8b64 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 5a3851ff..b3797c73 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 c68f77bc..3f6db664 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 aa73f839..2dc0d828 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 5ea4d8d8..af6e6339 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 082acc23..744b6363 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 1dd6b558..ab9da704 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 1edff42c..a26fcf05 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 0846fa99..8eb8f75e 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 27425c1f..12dd78ab 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 fd672aa6..a906c930 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 877a2b93..1dc63615 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 6f157351..9234fe8e 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 fd244643..e0192fec 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 9303793c..4e01ab7b 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 186426d9..fc8ccf04 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 4368232c..0fac8808 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 b0c21c55..02af3de5 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 1b3bdb2a..e543b769 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 199dc53c..385d6336 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 8533dd6f..fc7acdeb 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 6c1d394c..a44d86bc 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 51107c49..c99aab59 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 cbea9dcc..9194d503 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 9dbc8082..ca3240a2 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 97b4b7b6..4d9f93af 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 1a2e7e1d..f191a53c 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 a9559342..f963eb3b 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 1edeb5d4..5c38f961 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 ac00663e..5631eae5 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 a90b229c..70b31463 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 13ec64b6..18f6e118 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 4d52a8aa..87b0e510 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 6b9f2cba..5dcc1f57 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 e396fb56..aef35c7a 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 87c6cb91..997772cd 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 fd1e957f..999990fe 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 f5363552..6df1161f 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 422296be..b8c239e6 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 5c1df243..a69c8dc1 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 989b4834..751788af 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 8605ec32..93e7c0d6 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 db544e56..e1a110fa 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 d3588e50..31bf1739 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 8015c46e..7aec64f3 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 32e15082..62cf39e7 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 cba39248..9cbecd6a 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 ed429132..bc29330d 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 ae90f384..0641cca8 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 69ac201a..5d4daf88 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 252e1fa8..652ca0ff 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 a81fde56..f4fd2254 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 c86d94da..678c24a0 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 7c364edc..705fea17 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 d383f8cf..1ab74686 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 e7b59cd9..ce06a9f0 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 1b51edc8..43162422 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 590052e7..11aea48d 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 0d1b2755..7cbc2c51 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 3ba57213..78cbc5aa 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 edb0144b..1eea209d 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 5524603e..20fc3022 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 f012ef4c..79125f80 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 5ded4c3b..ed1c43a9 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 145ed2f1..b6c4fb17 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 90ef395a..488f34ab 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 ad54e8cb..48626d77 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 89015ab6..bfcaba1e 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 dc65dd7a..1731f5e0 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 37d043ab..136a2166 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 ed09f5f9..b7a0d0ab 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 e4f363ba..a1d3b615 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 13afee8b..704a7fbe 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 668c178e..020573b1 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 cc63feee..aee8c50e 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 fb5ebde6..7d9e8813 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 08c775d1..fb069030 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 c543058e..8c8bc180 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 4d33cfb3..8a726790 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 470cabe0..7b3a1deb 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 448ef4de..2ebd444f 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 f0df83a7..ea39f6f7 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 eb715628..6b5069a3 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 cae9480b..695956b8 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 ba534be0..c18607e5 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 18bb32c7..47d0d76b 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 c8bd0419..9951a5a1 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 a918628e..410f31e4 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 ac85a8c0..c0de3250 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 71ecd1e0..00000000 --- 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 3d61cb0a..00000000 --- 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 249e5832..00000000 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 e411586a..00000000 --- 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 cccdd3d5..00000000 --- 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 f9553162..00000000 --- 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 d745328d..00000000 --- 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 98ef270e..27e1deb3 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 3655b1ec..6b09553a 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 f08e7763..44c51411 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 5fad6e7c..25299047 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 e1c00484..949521bc 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 bc9e9583..dfb43852 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 ec596f91..d31e5f04 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 79cc67ba..1823db7e 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 2bb27f5d..16f4eb41 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 ead07336..50ad4f27 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 b8b08db2..cba82c18 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 fc1c59fa..00caddbf 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 55f4f7a9..401079f2 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 d28a108a..b8254226 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 88980f1f..a38fea25 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 60252f38..082724eb 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 c6e60bc5..f78edce2 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 3ac0df47..d7fbeb11 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 3fce257a..406cf344 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 0531f6fc..cd27ddde 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 8527cfbb..a3546453 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 c8d005b6..4e4e167f 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 2e8c36b3..00b76aca 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 68993b8d..ef25ab05 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 3a707ed9..0dd6de1f 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 ed9781c8..f0e929d7 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 61a46722..c7dcb077 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 ed0d901b..d35e8e30 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 b2b71c9b..49a77bc0 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 62f108e2..e2b2c0a1 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 65107e23..b09269f7 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 4a6f7342..a2221785 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 31c9eb06..de4dc7ba 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 a64119a2..f5b12b32 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 1bb41f08..fe164c62 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 b448404c..c7acfb2a 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 44cccfb9..ccf13e35 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 e1310680..87283641 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 b6955697..0cd939d3 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 13b9892c..f2317996 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 277e0502..e77a2ca3 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 d21bfe0e..d7a9cf5e 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 5d8a664f..08ee217a 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 8a771f95..6dc6a319 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 97fd4281..fb523251 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 bf73b668..8d8bba10 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 9ea7bbc8..26ff7341 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 60767f47..7cb830ce 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 24f97991..967dee86 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 b8c98311..c52601e5 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 e47606cb..74b74486 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 26de8350..ee83e07c 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 efe6d43d..440fd56e 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 3199c029..92117812 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 1c2640f8..9190419f 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 dd108b90..26fcd0fe 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 6eb54206..9aa67f24 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 a0e6348e..25afb649 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 1476a405..d7526780 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 af33a502..ff7b8342 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 bd6211df..6b97dfb5 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 676cc21a..3530ed00 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 169566ca..23347d13 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 ec8c84ce..1192d1c2 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 6e451fc8..1e6e6fef 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 983fccef..26688029 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 a589b0f6..50a5a313 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 194d13b9..5889a3da 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 3865965e..7dd0024b 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 598efcc2..d9732615 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 11f64bfb..a2b8341d 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 1c8a6b5d..5926c4f6 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 fb63f651..1cebc815 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 923765ef..250f017e 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 534e8c93..c30f5242 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 2e1a2a5a..6cbe4c32 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 66b03610..40e8f7c1 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 8045158d..2b0b4f49 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 087884d6..958b90fe 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 c02f2071..537fb877 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 3f722e0e..af61e769 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 f1c0de2c..a1f995f5 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 59f28120..b5b0d36b 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 471841bf..a32843ef 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 baae9b65..63488b87 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 3cd35bf2..0bedb97a 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 c0279a87..ef3bfee3 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 7eb9e0d7..4dae3475 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 766f23a6..64489817 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 cdea139f..707596f3 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 afab9e6c..769a0093 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 a2b94eb3..b1c2fb2d 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 5dcf469c..cc43ea83 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 94dfa081..f60bc34e 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 a21c0742..5ebbac5e 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 c75ba23b..c374be6e 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 1f314b31..ac67ea57 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 517d55eb..32465754 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 a79c5efe..246808f6 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 061234e8..7ddf7a00 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 38b8172b..27499c01 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 c3da66ca..b884e1a0 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 df5060cb..095c513a 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 8e5c14e0..b90f5e9b 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 4e62e661..1e0f0f71 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 e71750c4..55042fc5 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 705f9c69..586417f0 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 56bfbf56..f7201463 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 733ab8ca..d16a4e8a 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 6c358f8a..1a197bb6 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 b5b53067..1a0b6b0c 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 9a809f6e..00000000 --- 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 f45cb9f6..00000000 --- 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 a006e53a..b65e2972 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 b77aff48..e1f9febf 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 cece36d7..31b3ef93 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 ca4d2c5a..0eba89af 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 da1b4ec8..e8fab26d 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 b6d1ac55..1a4f5c10 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 a79dd3f8..3fd0197c 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 d4ad3e5a..1b8172d5 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 69803105..dc1a2dd0 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 cc1dea39..0a16efac 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 817dfed8..5920a052 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 3cd58be7..9a8ecdec 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 5543c949..5d349648 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 8157106f..e4b796fa 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 5f9096a1..9245dea0 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 4a357cfc..c2be10c0 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 1ad0a7aa..66b88683 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 035054a4..a2fdc9ef 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 feec8e52..bad4b324 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 42b6a257..ddb3930b 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 a13b7df7..28e85182 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 a6aedd6f..c96f6a67 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 e990bfdc..ad06bdf4 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 5060f6a7..4bfcf8ba 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 a32be511..4ba97227 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 4fb81584..6588aafb 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 5a989a47..2c2ee1df 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 897a21c8..97c3db86 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 3a6fd6c5..b630701c 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 302c94ae..e99d231b 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 3baba023..b67b9b1f 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 bb67045a..13d398ff 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 f2407d15..2bb9c22e 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 f3123da8..f784cebe 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 c0ede209..d7693858 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 813abe71..fc53a148 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 6d9b9195..3265a611 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 665f13ce..fe306968 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 f9390792..8975d73f 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 a63603b4..9f9e16ab 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 cc348acb..3bdce3d2 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 90d624d7..e2858825 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 74b9be0a..d3f0d0bc 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 cee4fc69..54d96640 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 7c4a2059..28dd31f7 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 f2372ac0..e1f080a3 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 a4780110..5e1c52cd 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 0da32d37..e0b97045 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 47485ca8..63e7afbd 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 a1aaaa20..728cbe44 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 95ddb1d7..db3d4dd3 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');