From 6972aed899fa2dd4016a7e314c46e6902bcafb7b Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Fri, 15 Jan 2021 13:52:18 +0530 Subject: [PATCH] Add support for quoted csv in ini-values --- __tests__/utils.test.ts | 11 +++++++++++ dist/index.js | 10 ++++++---- src/utils.ts | 12 +++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts index f28b0360..ad082716 100644 --- a/__tests__/utils.test.ts +++ b/__tests__/utils.test.ts @@ -111,6 +111,17 @@ describe('Utils tests', () => { 'b=2', 'c=3' ]); + expect(await utils.CSVArray('\'a=1,2\', "b=3, 4", c=5, d=~e~')).toEqual([ + 'a=1,2', + 'b=3, 4', + 'c=5', + "d='~e~'" + ]); + expect(await utils.CSVArray('a=\'1,2\', b="3, 4", c=5')).toEqual([ + 'a=1,2', + 'b=3, 4', + 'c=5' + ]); expect(await utils.CSVArray('')).toEqual([]); expect(await utils.CSVArray(' ')).toEqual([]); }); diff --git a/dist/index.js b/dist/index.js index c3db6a48..73ff20a3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1241,8 +1241,7 @@ async function extensionArray(extension_csv) { return extension .trim() .toLowerCase() - .replace('php-', '') - .replace('php_', ''); + .replace(/^php[-_]/, ''); }) .filter(Boolean); } @@ -1261,9 +1260,12 @@ async function CSVArray(values_csv) { return []; default: return values_csv - .split(',') + .split(/,(?=(?:(?:[^"']*["']){2})*[^"']*$)/) .map(function (value) { - return value.trim(); + return value + .trim() + .replace(/^["']|["']$|(?<==)["']/g, '') + .replace(/=(.*[?{}|&~![()^]+.*)/, "='$1'"); }) .filter(Boolean); } diff --git a/src/utils.ts b/src/utils.ts index 71192881..64094b03 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -228,8 +228,7 @@ export async function extensionArray( return extension .trim() .toLowerCase() - .replace('php-', '') - .replace('php_', ''); + .replace(/^php[-_]/, ''); }) .filter(Boolean); } @@ -248,9 +247,12 @@ export async function CSVArray(values_csv: string): Promise> { return []; default: return values_csv - .split(',') - .map(function (value: string) { - return value.trim(); + .split(/,(?=(?:(?:[^"']*["']){2})*[^"']*$)/) + .map(function (value) { + return value + .trim() + .replace(/^["']|["']$|(?<==)["']/g, '') + .replace(/=(.*[?{}|&~![()^]+.*)/, "='$1'"); }) .filter(Boolean); }