diff --git a/.changeset/wild-boxes-rest.md b/.changeset/wild-boxes-rest.md new file mode 100644 index 0000000000000000000000000000000000000000..8b4e6cd034c414cecd538d8c46c69af8dcdd8ea1 --- /dev/null +++ b/.changeset/wild-boxes-rest.md @@ -0,0 +1,4 @@ +--- +--- + +fix: patch `python-format-js` diff --git a/package.json b/package.json index e75c33ed77c21f52724376873ad016af81f4c049..7126b584dd0f7280a7b89c273f25082eb3df2f6f 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,9 @@ "overrides": { "trim": "1.0.1", "protobufjs": "7.2.6" + }, + "patchedDependencies": { + "python-format-js@1.4.3": "patches/python-format-js@1.4.3.patch" } }, "lint-staged": { diff --git a/patches/python-format-js@1.4.3.patch b/patches/python-format-js@1.4.3.patch new file mode 100644 index 0000000000000000000000000000000000000000..d1a4b4aac01d23763f6f784d628e6a963019a1e6 --- /dev/null +++ b/patches/python-format-js@1.4.3.patch @@ -0,0 +1,347 @@ +diff --git a/index.js b/index.js +index 932040020497479950da08c246578d1e274b5aed..466918479b412307da9fb4838aec2f2f6cd1d3b0 100755 +--- a/index.js ++++ b/index.js +@@ -1,179 +1,178 @@ + "use strict"; +-Object.defineProperty(String.prototype, "format", { +- value: function (...args_) { +- // Create variables +- let self = this; +- let __patterns__ = self.match(/({.*?})/g); +- const { +- REF, +- FILL_CHAR, +- MASK_NUMBER, +- ALIGN_OP, +- CROP_SIZE, +- DOT, +- FRACTION, +- TYPE_VAR, +- } = { +- REF: 1, +- FILL_CHAR: 2, +- MASK_NUMBER: 3, +- ALIGN_OP: 4, +- CROP_SIZE: 5, +- DOT: 6, +- FRACTION: 7, +- TYPE_VAR: 8, +- }; +- const DEFAULT_PLACE = 6; +- const ALL_REGEXP = +- /{(\w+)?:([^>\^<\d#]|0)?([#%,])?([>^<\.])?(\d+)?(\.)?(\d+)?([eEfFgGdxXobn#%])?}/g; +- const regExpBasic = /{\[?(\w+)\]?}/; // it's not best solution +- const isObject = typeof args_[0] === "object"; +- // types/use logic +- __patterns__?.map((pattern, patt_index) => { +- const kargs = ALL_REGEXP.exec(pattern) || ALL_REGEXP.exec(pattern); +- const wargs = regExpBasic.exec(pattern); ++function format(...args_) { ++ // Create variables ++ let self = this; ++ let __patterns__ = self.match(/({.*?})/g); ++ const { ++ REF, ++ FILL_CHAR, ++ MASK_NUMBER, ++ ALIGN_OP, ++ CROP_SIZE, ++ DOT, ++ FRACTION, ++ TYPE_VAR, ++ } = { ++ REF: 1, ++ FILL_CHAR: 2, ++ MASK_NUMBER: 3, ++ ALIGN_OP: 4, ++ CROP_SIZE: 5, ++ DOT: 6, ++ FRACTION: 7, ++ TYPE_VAR: 8, ++ }; ++ const DEFAULT_PLACE = 6; ++ const ALL_REGEXP = ++ /{(\w+)?:([^>\^<\d#]|0)?([#%,])?([>^<\.])?(\d+)?(\.)?(\d+)?([eEfFgGdxXobn#%])?}/g; ++ const regExpBasic = /{\[?(\w+)\]?}/; // it's not best solution ++ const isObject = typeof args_[0] === "object"; ++ // types/use logic ++ __patterns__?.map((pattern, patt_index) => { ++ const kargs = ALL_REGEXP.exec(pattern) || ALL_REGEXP.exec(pattern); ++ const wargs = regExpBasic.exec(pattern); + +- // Insert values (one 2 one / array / object) +- const INDEX_VAR = (wargs ? wargs[REF] : kargs ? kargs[REF] : patt_index) || patt_index; +- let NATUAL_VALUE = isObject ? args_[0][INDEX_VAR] : args_[INDEX_VAR]; +- let ACTUAL_VALUE = isObject ? args_[0][INDEX_VAR] : args_[INDEX_VAR]; ++ // Insert values (one 2 one / array / object) ++ const INDEX_VAR = (wargs ? wargs[REF] : kargs ? kargs[REF] : patt_index) || patt_index; ++ let NATUAL_VALUE = isObject ? args_[0][INDEX_VAR] : args_[INDEX_VAR]; ++ let ACTUAL_VALUE = isObject ? args_[0][INDEX_VAR] : args_[INDEX_VAR]; + +- // Verify sintax/semantic +- if (ACTUAL_VALUE === null || ACTUAL_VALUE === undefined) +- throw new Error( +- `Replacement index ${INDEX_VAR} out of range for positional args tuple` +- ); +- if (kargs) { +- // If TYPE_VAR is not defined and the first argument is a number, pad a string should from left, so set TYPE_VAR to "d" +- if (kargs[TYPE_VAR] === undefined && typeof ACTUAL_VALUE === "number") { +- kargs[TYPE_VAR] = "d"; ++ // Verify sintax/semantic ++ if (ACTUAL_VALUE === null || ACTUAL_VALUE === undefined) ++ throw new Error( ++ `Replacement index ${INDEX_VAR} out of range for positional args tuple` ++ ); ++ if (kargs) { ++ // If TYPE_VAR is not defined and the first argument is a number, pad a string should from left, so set TYPE_VAR to "d" ++ if (kargs[TYPE_VAR] === undefined && typeof ACTUAL_VALUE === "number") { ++ kargs[TYPE_VAR] = "d"; ++ } ++ const LETTER = ++ (!kargs[FILL_CHAR] ++ ? false ++ : !kargs[ALIGN_OP] && ++ [..."FfbefoxXn"].includes(kargs[FILL_CHAR].toLowerCase()) ++ ? kargs[FILL_CHAR] ++ : kargs[TYPE_VAR]) || kargs[TYPE_VAR]; ++ // padronaze ++ if (LETTER) { ++ const floatSize = pattern.includes(".") ++ ? Number(kargs[FRACTION] || kargs[CROP_SIZE]) ++ : DEFAULT_PLACE; ++ switch (LETTER) { ++ case "E": ++ ACTUAL_VALUE = ++ ACTUAL_VALUE.toExponential(DEFAULT_PLACE).toUpperCase(); ++ break; ++ case "e": ++ ACTUAL_VALUE = ACTUAL_VALUE.toExponential(DEFAULT_PLACE); ++ break; ++ case "X": ++ ACTUAL_VALUE = ACTUAL_VALUE.toString(16).toUpperCase(); ++ break; ++ case "x": ++ ACTUAL_VALUE = ACTUAL_VALUE.toString(16); // Hexadecimal ++ break; ++ case "b": ++ ACTUAL_VALUE = ACTUAL_VALUE.toString(2); // Binary ++ break; ++ case "f": ++ case "F": ++ ACTUAL_VALUE = ACTUAL_VALUE.toFixed(floatSize); ++ break; ++ case "o": ++ ACTUAL_VALUE = ACTUAL_VALUE.toString(8); // Octal ++ break; ++ default: ++ break; + } +- const LETTER = +- (!kargs[FILL_CHAR] +- ? false +- : !kargs[ALIGN_OP] && +- [..."FfbefoxXn"].includes(kargs[FILL_CHAR].toLowerCase()) +- ? kargs[FILL_CHAR] +- : kargs[TYPE_VAR]) || kargs[TYPE_VAR]; +- // padronaze +- if (LETTER) { +- const floatSize = pattern.includes(".") +- ? Number(kargs[FRACTION] || kargs[CROP_SIZE]) +- : DEFAULT_PLACE; +- switch (LETTER) { +- case "E": +- ACTUAL_VALUE = +- ACTUAL_VALUE.toExponential(DEFAULT_PLACE).toUpperCase(); +- break; +- case "e": +- ACTUAL_VALUE = ACTUAL_VALUE.toExponential(DEFAULT_PLACE); +- break; +- case "X": +- ACTUAL_VALUE = ACTUAL_VALUE.toString(16).toUpperCase(); +- break; +- case "x": +- ACTUAL_VALUE = ACTUAL_VALUE.toString(16); // Hexadecimal +- break; +- case "b": +- ACTUAL_VALUE = ACTUAL_VALUE.toString(2); // Binary +- break; +- case "f": +- case "F": +- ACTUAL_VALUE = ACTUAL_VALUE.toFixed(floatSize); ++ // mask ++ switch (kargs[MASK_NUMBER]) { ++ case "#": ++ const MASK = { ++ x: "0x", ++ X: "0X", ++ o: "0o", ++ b: "0b", ++ }[LETTER]; ++ ACTUAL_VALUE = MASK + ACTUAL_VALUE; ++ break; ++ } ++ } ++ // signal ++ if ( ++ [..." +-,%"].includes(kargs[FILL_CHAR]) && ++ typeof NATUAL_VALUE === "number" ++ ) { ++ ACTUAL_VALUE = ACTUAL_VALUE.toString().replace("-", ""); ++ if (NATUAL_VALUE >= 0) ++ switch (kargs[FILL_CHAR]) { ++ case "+": ++ ACTUAL_VALUE = "+" + ACTUAL_VALUE; + break; +- case "o": +- ACTUAL_VALUE = ACTUAL_VALUE.toString(8); // Octal ++ case " ": ++ ACTUAL_VALUE = " " + ACTUAL_VALUE; + break; +- default: ++ case ",": ++ ACTUAL_VALUE = NATUAL_VALUE.toString() ++ .split(/(?=(?:...)*$)/) ++ .join(kargs[FILL_CHAR]); + break; +- } +- // mask +- switch (kargs[MASK_NUMBER]) { +- case "#": +- const MASK = { +- x: "0x", +- X: "0X", +- o: "0o", +- b: "0b", +- }[LETTER]; +- ACTUAL_VALUE = MASK + ACTUAL_VALUE; ++ case "%": ++ ACTUAL_VALUE = ++ (NATUAL_VALUE * 100).toFixed( ++ kargs[FRACTION] || DEFAULT_PLACE ++ ) + "%"; + break; + } +- } +- // signal +- if ( +- [..." +-,%"].includes(kargs[FILL_CHAR]) && +- typeof NATUAL_VALUE === "number" +- ) { +- ACTUAL_VALUE = ACTUAL_VALUE.toString().replace("-", ""); +- if (NATUAL_VALUE >= 0) +- switch (kargs[FILL_CHAR]) { +- case "+": +- ACTUAL_VALUE = "+" + ACTUAL_VALUE; +- break; +- case " ": +- ACTUAL_VALUE = " " + ACTUAL_VALUE; +- break; +- case ",": +- ACTUAL_VALUE = NATUAL_VALUE.toString() +- .split(/(?=(?:...)*$)/) +- .join(kargs[FILL_CHAR]); +- break; +- case "%": +- ACTUAL_VALUE = +- (NATUAL_VALUE * 100).toFixed( +- kargs[FRACTION] || DEFAULT_PLACE +- ) + "%"; +- break; +- } +- else ACTUAL_VALUE = "-" + ACTUAL_VALUE; +- } +- // space / order / trim +- if (kargs[CROP_SIZE]) { +- ACTUAL_VALUE = ACTUAL_VALUE.toString(); +- const FILL_ELEMENT = kargs[FILL_CHAR] || " "; +- const SIZE_STRING = ACTUAL_VALUE.length; +- const SIZE_ARG = kargs[CROP_SIZE]; +- const FILL_LENGTH = SIZE_STRING > SIZE_ARG ? SIZE_STRING : SIZE_ARG; +- const FILL = FILL_ELEMENT.repeat(FILL_LENGTH); ++ else ACTUAL_VALUE = "-" + ACTUAL_VALUE; ++ } ++ // space / order / trim ++ if (kargs[CROP_SIZE]) { ++ ACTUAL_VALUE = ACTUAL_VALUE.toString(); ++ const FILL_ELEMENT = kargs[FILL_CHAR] || " "; ++ const SIZE_STRING = ACTUAL_VALUE.length; ++ const SIZE_ARG = kargs[CROP_SIZE]; ++ const FILL_LENGTH = SIZE_STRING > SIZE_ARG ? SIZE_STRING : SIZE_ARG; ++ const FILL = FILL_ELEMENT.repeat(FILL_LENGTH); + +- switch (kargs[ALIGN_OP] || kargs[FILL_CHAR]) { +- case "<": +- ACTUAL_VALUE = ACTUAL_VALUE.padEnd(FILL_LENGTH, FILL_ELEMENT); +- break; +- case ".": +- if (!(LETTER && /[fF]/.test(LETTER))) +- ACTUAL_VALUE = ACTUAL_VALUE.slice(0, SIZE_ARG); +- break; +- case ">": +- ACTUAL_VALUE = ACTUAL_VALUE.padStart(FILL_LENGTH, FILL_ELEMENT); +- break; +- case "^": +- const length_start = Math.floor((FILL_LENGTH - SIZE_STRING) / 2); +- const string_start = +- length_start > 0 +- ? FILL_ELEMENT.repeat(length_start) + ACTUAL_VALUE +- : ACTUAL_VALUE; ++ switch (kargs[ALIGN_OP] || kargs[FILL_CHAR]) { ++ case "<": ++ ACTUAL_VALUE = ACTUAL_VALUE.padEnd(FILL_LENGTH, FILL_ELEMENT); ++ break; ++ case ".": ++ if (!(LETTER && /[fF]/.test(LETTER))) ++ ACTUAL_VALUE = ACTUAL_VALUE.slice(0, SIZE_ARG); ++ break; ++ case ">": ++ ACTUAL_VALUE = ACTUAL_VALUE.padStart(FILL_LENGTH, FILL_ELEMENT); ++ break; ++ case "^": ++ const length_start = Math.floor((FILL_LENGTH - SIZE_STRING) / 2); ++ const string_start = ++ length_start > 0 ++ ? FILL_ELEMENT.repeat(length_start) + ACTUAL_VALUE ++ : ACTUAL_VALUE; + +- ACTUAL_VALUE = FILL.replace( +- RegExp(`.{${string_start.length}}`), +- string_start +- ); +- break; +- default: +- ACTUAL_VALUE = LETTER +- ? ACTUAL_VALUE.padStart(FILL_LENGTH, FILL_ELEMENT) +- : ACTUAL_VALUE.padEnd(FILL_LENGTH, FILL_ELEMENT); +- break; +- } ++ ACTUAL_VALUE = FILL.replace( ++ RegExp(`.{${string_start.length}}`), ++ string_start ++ ); ++ break; ++ default: ++ ACTUAL_VALUE = LETTER ++ ? ACTUAL_VALUE.padStart(FILL_LENGTH, FILL_ELEMENT) ++ : ACTUAL_VALUE.padEnd(FILL_LENGTH, FILL_ELEMENT); ++ break; + } + } ++ } ++ ++ // SET Definitive value ++ self = self.replace(pattern, ACTUAL_VALUE); ++ }); + +- // SET Definitive value +- self = self.replace(pattern, ACTUAL_VALUE); +- }); ++ return self; ++} + +- return self; +- }, +-}); +-module.exports = (inputString, ...param) => inputString.format(...param); ++module.exports = (inputString, ...param) => format.call(inputString, ...param); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 261c3e9876611c433d831a84d363faf889e2157e..f46c0c22f1ca94927ebdd7a3742d60e881f7d0d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,11 @@ overrides: trim: 1.0.1 protobufjs: 7.2.6 +patchedDependencies: + python-format-js@1.4.3: + hash: th6l7y4oiguwssg6vyt7e3sc3i + path: patches/python-format-js@1.4.3.patch + importers: .: @@ -388,7 +393,7 @@ importers: version: 8.0.1(@aws-sdk/credential-providers@3.637.0) python-format-js: specifier: ^1.4.3 - version: 1.4.3 + version: 1.4.3(patch_hash=th6l7y4oiguwssg6vyt7e3sc3i) packages/core/tests: devDependencies: @@ -21697,7 +21702,7 @@ snapshots: dependencies: escape-goat: 4.0.0 - python-format-js@1.4.3: {} + python-format-js@1.4.3(patch_hash=th6l7y4oiguwssg6vyt7e3sc3i): {} qs@6.11.0: dependencies: