From 28e37d8f6f9ed8089442f81c3617ad2bab3645d9 Mon Sep 17 00:00:00 2001 From: James Ha Date: Sat, 4 Oct 2025 01:45:14 +0530 Subject: [PATCH] feat(#5689): req.getTags() api --- .../src/utils/codemirror/autocomplete.js | 1 + .../bruno-cli/src/runner/prepare-request.js | 1 + .../src/ipc/network/prepare-request.js | 1 + packages/bruno-js/src/bruno-request.js | 9 +++++ .../sandbox/quickjs/shims/bruno-request.js | 9 +++++ .../collection/scripting/api/req/getTags.bru | 33 +++++++++++++++++++ 6 files changed, 54 insertions(+) create mode 100644 packages/bruno-tests/collection/scripting/api/req/getTags.bru diff --git a/packages/bruno-app/src/utils/codemirror/autocomplete.js b/packages/bruno-app/src/utils/codemirror/autocomplete.js index c105caa63..a1b6d1e0c 100644 --- a/packages/bruno-app/src/utils/codemirror/autocomplete.js +++ b/packages/bruno-app/src/utils/codemirror/autocomplete.js @@ -27,6 +27,7 @@ const STATIC_API_HINTS = { 'req.setTimeout(timeout)', 'req.getExecutionMode()', 'req.getName()', + 'req.getTags()', 'req.disableParsingResponseJson()', 'req.onFail(function(err) {})', ], diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js index abaed8bf7..11adad8d0 100644 --- a/packages/bruno-cli/src/runner/prepare-request.js +++ b/packages/bruno-cli/src/runner/prepare-request.js @@ -39,6 +39,7 @@ const prepareRequest = async (item = {}, collection = {}) => { url: request.url, headers: headers, name: item.name, + tags: item.tags || [], pathParams: request.params?.filter((param) => param.type === 'path'), settings: item.settings, responseType: 'arraybuffer' diff --git a/packages/bruno-electron/src/ipc/network/prepare-request.js b/packages/bruno-electron/src/ipc/network/prepare-request.js index 09d03c85f..ec65c5ef6 100644 --- a/packages/bruno-electron/src/ipc/network/prepare-request.js +++ b/packages/bruno-electron/src/ipc/network/prepare-request.js @@ -343,6 +343,7 @@ const prepareRequest = async (item, collection = {}, abortController) => { url, headers, name: item.name, + tags: item.tags || [], pathParams: request.params?.filter((param) => param.type === 'path'), settings, responseType: 'arraybuffer' diff --git a/packages/bruno-js/src/bruno-request.js b/packages/bruno-js/src/bruno-request.js index b08e6515d..9738ada1f 100644 --- a/packages/bruno-js/src/bruno-request.js +++ b/packages/bruno-js/src/bruno-request.js @@ -18,6 +18,7 @@ class BrunoRequest { this.headers = req.headers; this.timeout = req.timeout; this.name = req.name; + this.tags = req.tags || []; /** * We automatically parse the JSON body if the content type is JSON * This is to make it easier for the user to access the body directly @@ -189,6 +190,14 @@ class BrunoRequest { getName() { return this.req.name; } + + /** + * Get the tags associated with this request + * @returns {Array} Array of tag strings + */ + getTags() { + return this.req.tags || []; + } } module.exports = BrunoRequest; diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js index 4a51ae580..36b3e10b2 100644 --- a/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js +++ b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js @@ -9,6 +9,7 @@ const addBrunoRequestShimToContext = (vm, req) => { const body = marshallToVm(req.getBody(), vm); const timeout = marshallToVm(req.getTimeout(), vm); const name = marshallToVm(req.getName(), vm); + const tags = marshallToVm(req.getTags(), vm); vm.setProp(reqObject, 'url', url); vm.setProp(reqObject, 'method', method); @@ -16,6 +17,7 @@ const addBrunoRequestShimToContext = (vm, req) => { vm.setProp(reqObject, 'body', body); vm.setProp(reqObject, 'timeout', timeout); vm.setProp(reqObject, 'name', name); + vm.setProp(reqObject, 'tags', tags); url.dispose(); method.dispose(); @@ -23,6 +25,7 @@ const addBrunoRequestShimToContext = (vm, req) => { body.dispose(); timeout.dispose(); name.dispose(); + tags.dispose(); let getUrl = vm.newFunction('getUrl', function () { return marshallToVm(req.getUrl(), vm); @@ -126,6 +129,12 @@ const addBrunoRequestShimToContext = (vm, req) => { vm.setProp(reqObject, 'getExecutionMode', getExecutionMode); getExecutionMode.dispose(); + let getTags = vm.newFunction('getTags', function () { + return marshallToVm(req.getTags(), vm); + }); + vm.setProp(reqObject, 'getTags', getTags); + getTags.dispose(); + vm.setProp(vm.global, 'req', reqObject); reqObject.dispose(); }; diff --git a/packages/bruno-tests/collection/scripting/api/req/getTags.bru b/packages/bruno-tests/collection/scripting/api/req/getTags.bru new file mode 100644 index 000000000..8176b34bf --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getTags.bru @@ -0,0 +1,33 @@ +meta { + name: getTags + type: http + seq: 11 + tags: [ + api + test + tags + ] +} + +post { + url: {{host}}/api/echo/json + body: none + auth: none +} + +script:pre-request { + // Test getTags() function + const tags = req.getTags(); + bru.setVar('request-tags', tags); +} + +tests { + test("req.getTags() should return array of tags", function() { + const tags = bru.getVar('request-tags'); + expect(tags).to.be.an('array'); + expect(tags).to.include('api'); + expect(tags).to.include('test'); + expect(tags).to.include('tags'); + expect(tags.length).to.be.equal(3); + }); +}