Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
0121245
Merge pull request #1064 from marklogic/release/4.1.0
rjrudin Feb 23, 2026
04ef078
Reapply "MLE-25586 - add transitive closure function to node client."
stevebio Feb 23, 2026
a5b62de
Reapply "MLE-26340 expose vec.precision and vec.trunc in Node client."
stevebio Feb 23, 2026
4e4afee
Reapply "MLE-23744 - implement optic fromDocs in node."
stevebio Feb 23, 2026
562abe4
MLE-12345
stevebio Feb 23, 2026
91bbfbc
MLE-27299 Upgrade dependencies to remove vulnerability warnings.
stevebio Feb 24, 2026
17182f1
MLE-27299 Bumping dependencies to fix npm audit
rjrudin Mar 2, 2026
00fc4eb
SECCMP-1797: Add top-level permissions to restrict default token
GAdityaVarma Apr 8, 2026
ce2461b
Merge pull request #1070 from marklogic/fix/SECCMP-1797-harden-permis…
rjrudin Apr 8, 2026
dfb1947
PDP-1182: Remove per-repo pr-workflow.yaml
SameeraPriyathamTadikonda Apr 9, 2026
69fb7af
Merge pull request #1071 from marklogic/PDP-1182-remove-pr-workflow-f…
GAdityaVarma Apr 9, 2026
76d5732
MLE-28498 11.3.5 Test Fixes for Security Update (#1074)
jonmille May 11, 2026
16e8f7d
MLE-27883 adapt cts.param in the Optic API for MLS 12.1 (#1075)
RitaChen609 May 13, 2026
362cb16
MLE-28335 added fragment option in fromSearch (#1077)
RitaChen609 May 18, 2026
be35792
MLE-28583 xdmp.uriContentType and xdmp.uriFormat test fix (#1079)
jonmille May 21, 2026
c31886b
MLE-29694 fixes for vulnerabilities and flaky tests (#1080)
RitaChen609 May 26, 2026
a715199
MLE-30684 Configure Harness Artifact Registry (#1085)
jonmille Jun 23, 2026
b01655b
MLE-30686 MLE-30964 form-data and markdown-it dependency bumps (#1086)
jonmille Jun 30, 2026
f8cec86
MLE-29889 add param binding support for CTS queries in Optic plans
RitaChen609 Jun 30, 2026
2564a6c
MLE-29889 update integration tests
RitaChen609 Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions .github/workflows/pr-workflow.yaml

This file was deleted.

5 changes: 5 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
engine-strict=true
registry=https://pkg.harness.io/pkg/ct8onj8YTdaXtKaFsYCRLg/org-marklogic-npm/npm/
@jsr:registry=https://pkg.harness.io/pkg/ct8onj8YTdaXtKaFsYCRLg/org-marklogic-npm/npm/
ignore-scripts=true
# cooldown in days (14 days)
min-release-age=14
5 changes: 3 additions & 2 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def runAuditReport() {
cd node-client-api
npm ci
rm -rf $WORKSPACE/npm-audit-report.json || true
npm audit --audit-level=moderate --json > $WORKSPACE/npm-audit-report.json
npm audit --audit-level=moderate --json > $WORKSPACE/npm-audit-report.json || true
'''
}

Expand Down Expand Up @@ -125,7 +125,7 @@ pipeline {
agent none

triggers {
parameterizedCron(env.BRANCH_NAME == "develop" ? "00 02 * * * % regressions=true" : "")
parameterizedCron(env.BRANCH_NAME == "develop" ? "00 05 * * * % regressions=true" : "")
}

parameters {
Expand All @@ -151,6 +151,7 @@ pipeline {
stage('pull-request-tests') {
agent { label 'nodeclientpool' }
steps {
// npm audit is non-blocking; Harness Artifact Repository does not currently support it so failures are ignored.
runAuditReport()
runLint()
runTypeCheck()
Expand Down
12 changes: 11 additions & 1 deletion etc/test-setup-users.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
* Copyright (c) 2015-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
*/
var valcheck = require('core-util-is');

Expand Down Expand Up @@ -68,6 +68,16 @@ function setupUsers(manager, done) {
'privilege-name': 'xdmp-get-session-field',
action: 'http://marklogic.com/xdmp/privileges/xdmp-get-session-field',
kind: 'execute'
},
{
'privilege-name': 'xdmp-lock-acquire',
action: 'http://marklogic.com/xdmp/privileges/xdmp-lock-acquire',
kind: 'execute'
},
{
'privilege-name': 'xdmp-lock-release',
action: 'http://marklogic.com/xdmp/privileges/xdmp-lock-release',
kind: 'execute'
}
]
}
Expand Down
41 changes: 39 additions & 2 deletions lib/plan-builder-base.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2015-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
* Copyright (c) 2015-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
*/
'use strict';

Expand Down Expand Up @@ -58,8 +58,18 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) {
} else if (arg instanceof Number || arg instanceof Boolean || arg instanceof String) {
arg = arg.valueOf();
} else if (arg instanceof types.ServerType) {
// We added new VecVector ServerType which is not a sub-type of Item. This makes it a one-off type
// as paramTypes will not include VecVector in any other type checks.
// And if we get here the arg must be and only be a VecVector (arg._ns === 'vec') or we throw an Error
if(arg._ns === 'vec'){
return arg._args;
return arg;
}
// cts.param() is a valid placeholder wherever a cts.query is accepted (e.g. as a direct
// sub-query argument to cts.orQuery, cts.andQuery, cts.notQuery, etc.). A global bypass
// here avoids updating every composite CTS function paramdef. Serialisation already works:
// exportObject converts _ns/_fn/_args -> ns/fn/args.
if (arg._ns === 'cts' && arg._fn === 'param') {
return arg;
}
throw new Error(
`${argLabel(funcName, paramName, argPos)} must have type ${typeLabel(paramTypes)}`
Expand Down Expand Up @@ -133,6 +143,13 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) {
throw new Error(
'bm25LengthWeight must be a number'
);
case 'fragment':
if (['document', 'properties', 'locks', 'any'].includes(value)) {
return true;
}
throw new Error(
`${argLabel(funcName, paramName, argPos)} fragment can only be 'document', 'properties', 'locks', or 'any'`
);
default:
return false;
}});
Expand Down Expand Up @@ -401,6 +418,26 @@ function castArg(arg, funcName, paramName, argPos, paramTypes) {
});
}
return true;
case 'PlanTransitiveClosureOptions':
const planTransitiveClosureOptionsSet = new Set(['minLength', 'min-length', 'maxLength', 'max-length']);
if(Object.getPrototypeOf(arg) === Map.prototype){
arg.forEach((value, key) => {
if(!planTransitiveClosureOptionsSet.has(key)) {
throw new Error(
`${argLabel(funcName, paramName, argPos)} has invalid key- ${key}`
);
}
});
} else if (typeof arg === 'object') {
Object.keys(arg).forEach(key => {
if(!planTransitiveClosureOptionsSet.has(key)) {
throw new Error(
`${argLabel(funcName, paramName, argPos)} has invalid key- ${key}`
);
}
});
}
return true;
default:
return false;
}
Expand Down
Loading
Loading