From 2e4dabc165d0551bbb9d905fe7aa6be7b254b681 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 12 Aug 2024 08:24:18 -0600 Subject: [PATCH] Revert "Improved aliased parameter parsing v3" --- packages/sp/spqueryable.ts | 14 ++++++++---- test/sp/alias.ts | 44 -------------------------------------- 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index 26b30e4ba..e246c3d35 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -81,11 +81,17 @@ export class _SPQueryable extends Queryable { const aliasedParams = new URLSearchParams(this.query); - // this regex is designed to locate aliased parameters within url paths - let url = this.toUrl().replace(/'!(@.+?)::((?:[^']|'')+)'/ig, (match, labelName, value) => { + // this regex is designed to locate aliased parameters within url paths. These may have the form: + // /something(!@p1::value) + // /something(!@p1::value, param=value) + // /something(param=value,!@p1::value) + // /something(param=value,!@p1::value,param=value) + // /something(param=!@p1::value) + // there could be spaces or not around the boundaries + let url = this.toUrl().replace(/([( *| *, *| *= *])'!(@.*?)::(.*?)'([ *)| *, *])/ig, (match, frontBoundary, labelName, value, endBoundary) => { this.log(`Rewriting aliased parameter from match ${match} to label: ${labelName} value: ${value}`, 0); - aliasedParams.set(labelName, `'${value}'`); - return labelName; + aliasedParams.set(labelName,`'${value}'`); + return `${frontBoundary}${labelName}${endBoundary}`; }); const query = aliasedParams.toString(); diff --git a/test/sp/alias.ts b/test/sp/alias.ts index 098d6fb82..b69a9a2d4 100644 --- a/test/sp/alias.ts +++ b/test/sp/alias.ts @@ -6,7 +6,6 @@ import "@pnp/sp/files/web"; import "@pnp/sp/files/folder"; import "@pnp/sp/lists/web"; import { combine } from "@pnp/core"; -import { SPQueryable } from "@pnp/sp"; describe("Alias Parameters", function () { @@ -29,49 +28,6 @@ describe("Alias Parameters", function () { await ler.list.rootFolder.files.addUsingPath("text.txt", "Some file content!"); }); - it("Parameter parsing", function() { - /** Values to test */ - const values = [ - "value", - "value's", - "value with space", - "value with space' and apostrophe", - "ending with apostrophe'", - "'staring with apostrophe", - "'staring and ending with apostrophe'", - "with,' comma", - ]; - /** Aliased parameters to test */ - const tests = values.reduce>>((obj, value)=>{ - // Escape apostrophe in value - value = value.replace(/'/g, "''"); - - obj[`something('!@p1::${value}')`] = {"@p1": `'${value}'`}; - obj[`something('!@p1::${value}','!@p2::${value}2')`] = {"@p1": `'${value}'`, "@p2": `'${value}2'`}; - obj[`something('!@p1::${value}', param=value)`] = {"@p1": `'${value}'`}; - obj[`something('!@p1::${value}', param=value, '!@p2::${value}2')`] = {"@p1": `'${value}'`, "@p2": `'${value}2'`}; - obj[`something(param=value,'!@p1::${value}')`] = {"@p1": `'${value}'`}; - obj[`something(param=value,'!@p1::${value}','!@p2::${value}2')`] = {"@p1": `'${value}'`, "@p2": `'${value}2'`}; - obj[`something(param=value,'!@p1::${value}',param=value)`] = {"@p1": `'${value}'`}; - obj[`something(param=value,'!@p1::${value}',param=value,'!@p2::${value}2')`] = {"@p1": `'${value}'`, "@p2": `'${value}2'`}; - obj[`something(param='!@p1::${value}')`] = {"@p1": `'${value}'`}; - obj[`something(param='!@p1::${value}',param2='!@p2::${value}2')`] = {"@p1": `'${value}'`, "@p2": `'${value}2'`}; - return obj; - }, {}); - - // Test all aliased parameters - for(const [alias, params] of Object.entries(tests)) { - const requestUrl = SPQueryable(this.pnp.sp.web, alias).toRequestUrl(); - const searchParams = Object.fromEntries(new URL(requestUrl).searchParams.entries()); - - // eslint-disable-next-line guard-for-in - for(const param in params) { - expect(searchParams, `Failed to parse "${alias}"`).to.have.property(param); - expect(searchParams[param], `Failed to parse "${alias}"`).to.equal(params[param]); - } - } - }); - it("Folders", function () { return expect(this.pnp.sp.web.getFolderByServerRelativePath(`!@p1::/${combine(webRelativeUrl, "AliasTestLib/MyTestFolder")}`)()).to.eventually.be.fulfilled;