diff --git a/CHANGELOG.md b/CHANGELOG.md index 43227268..2e3ecc22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog + +## [v1.19.0](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.0) (2025-01-13) + - Feature + - Release 2.0 feature ## [v1.18.4](https://github.com/contentstack/contentstack-management-javascript/tree/v1.18.4) (2024-11-22) - Enhancement - Added support for response headers. diff --git a/lib/core/concurrency-queue.js b/lib/core/concurrency-queue.js index 54acb14f..e27c5fd1 100644 --- a/lib/core/concurrency-queue.js +++ b/lib/core/concurrency-queue.js @@ -205,7 +205,7 @@ export function ConcurrencyQueue ({ axios, config }) { } else { return Promise.reject(responseHandler(error)) } - } else if (response.status === 429 || (response.status === 401 && this.config.refreshToken)) { + } else if ((response.status === 401 && this.config.refreshToken)) { retryErrorType = `Error with status: ${response.status}` networkError++ diff --git a/lib/stack/bulkOperation/index.js b/lib/stack/bulkOperation/index.js index 05621003..615b22e3 100644 --- a/lib/stack/bulkOperation/index.js +++ b/lib/stack/bulkOperation/index.js @@ -9,6 +9,109 @@ export function BulkOperation (http, data = {}) { this.stackHeaders = data.stackHeaders this.urlPath = `/bulk` + /** + * The addItems request allows you to add multiple items to a release in bulk. + * @memberof BulkOperation + * @func addItems + * @returns {Promise} Response Object. + * @param {Object} params.data - The data containing the items to be added to the release. + * @param {String} [params.bulk_version] - The bulk version. + * @example + * const itemsData = { + * items: [ + * { + * uid: '{{entry_uid}}', + * content_type: '{{content_type_uid}}' + * } + * ] + * } + * client.stack({ api_key: 'api_key'}).bulkOperation().addItems({ data: itemsData }) + * .then((response) => { console.log(response) }) + */ + this.addItems = async ({ data, bulk_version = "" }) => { + this.urlPath = `/bulk/release/items`; + const headers = { + headers: { + ...cloneDeep(this.stackHeaders), + }, + }; + if (bulk_version) headers.headers.bulk_version = bulk_version; + try { + const response = await http.post(this.urlPath, data, headers); + if (response.data) { + return response.data; + } + } catch (error) { + console.error(error); + } + }; + + /** + * The updateItems request allows you to update multiple items in a release in bulk. + * @memberof BulkOperation + * @func updateItems + * @returns {Promise} Response Object. + * @param {Object} params.data - The data containing the items to be updated in the release. + * @param {String} [params.bulk_version] - The bulk version. + * @example + * const itemsData = { + * items: [ + * { + * uid: '{{entry_uid}}', + * content_type: '{{content_type_uid}}' + * } + * ] + * } + * client.stack({ api_key: 'api_key'}).bulkOperation().updateItems({ data: itemsData }) + * .then((response) => { console.log(response) }) + */ + this.updateItems = async ({ data, bulk_version = "" }) => { + this.urlPath = `/bulk/release/update_items`; + const headers = { + headers: { + ...cloneDeep(this.stackHeaders), + }, + }; + if (bulk_version) headers.headers.bulk_version = bulk_version; + try { + const response = await http.put(this.urlPath, data, headers); + if (response.data) { + return response.data; + } + } catch (error) { + console.error(error); + } + }; + + /** + * The jobStatus request allows you to check the status of a bulk job. + * @memberof BulkOperation + * @func jobStatus + * @returns {Promise} Response Object. + * @param {String} params.job_id - The ID of the job. + * @param {String} [params.bulk_version] - The bulk version. + * @example + * client.stack({ api_key: 'api_key'}).bulkOperation().jobStatus({ job_id: 'job_id' }) + * .then((response) => { console.log(response) }) + */ + this.jobStatus = async ({ job_id, bulk_version = "" }) => { + this.urlPath = `/bulk/jobs/${job_id}`; + const headers = { + headers: { + ...cloneDeep(this.stackHeaders), + }, + }; + if (bulk_version) headers.headers.bulk_version = bulk_version; + try { + const response = await http.get(this.urlPath, headers); + if (response.data) { + return response.data; + } + } catch (error) { + console.error(error); + } + }; + /** * The Publish entries and assets in bulk request allows you to publish multiple entries and assets at the same time. * @memberof BulkOperation diff --git a/lib/stack/release/items/index.js b/lib/stack/release/items/index.js index b8cd65db..dca8e75e 100644 --- a/lib/stack/release/items/index.js +++ b/lib/stack/release/items/index.js @@ -52,25 +52,36 @@ export function ReleaseItem (http, data = {}) { * client.stack({ api_key: 'api_key'}).release('release_uid').delete({items}) * .then((response) => console.log(response.notice)) */ - this.delete = async (items) => { + this.delete = async (params) => { let param = {} - if (items === undefined) { + if (params.items === undefined && params.item === undefined) { param = {all: true} + params.items = [] } try { const headers = { headers: { ...cloneDeep(this.stackHeaders) }, data: { - ...cloneDeep(items) + ...cloneDeep(params) }, params: { ...cloneDeep(param) } } || {} + + if (params.release_version) { + headers.headers['release_version'] = params.release_version; + } + + if (params.item) { + this.urlPath = `releases/${data.releaseUid}/item` + headers.data['item'] = params.item + } else + headers.data['items'] = params.items const response = await http.delete(this.urlPath, headers) if (response.data) { - return new Release(http, { ...response.data, stackHeaders: data.stackHeaders }) + return response.data } else { throw error(response) } @@ -129,9 +140,18 @@ export function ReleaseItem (http, data = {}) { ...cloneDeep(this.stackHeaders) } } || {} + + if (param.release_version) { + headers.headers['release_version'] = param.release_version; + } + if (param.item) { + this.urlPath = `releases/${data.releaseUid}/item` + param['item'] = param.item + } else + param['items'] = param.items try { - const response = await http.post(param.item ? `releases/${data.releaseUid}/item` : this.urlPath, param, headers) + const response = await http.post(this.urlPath, param, headers) if (response.data) { if (response.data) { return new Release(http, { ...response.data, stackHeaders: data.stackHeaders }) @@ -166,7 +186,10 @@ export function ReleaseItem (http, data = {}) { ...cloneDeep(param) } } || {} - + if (param.release_version) { + headers.headers['release_version'] = param.release_version; + delete headers.params.release_version; + } const response = await http.get(this.urlPath, headers) if (response.data) { return new ContentstackCollection(response, http, this.stackHeaders, ReleaseItemCollection) @@ -177,6 +200,44 @@ export function ReleaseItem (http, data = {}) { error(err) } } + + /** + * The move request allows you to move multiple items within a release. + * @memberof ReleaseItem + * @func move + * @returns {Promise} Response Object. + * @param {Object} params.param - The data containing the items to be moved within the release. + * @param {String} [params.release_version] - The release version. + * @example + * const moveData = { + * items: [ + * { + * uid: '{{entry_uid}}', + * content_type: '{{content_type_uid}}' + * } + * ] + * } + * client.stack({ api_key: 'api_key'}).release('release_uid').item().move({ param: moveData, release_version: '1.0' }) + * .then((response) => { console.log(response) }) + */ + this.move = async ({ param, release_version = '' }) => { + const headers = { + headers: { + ...cloneDeep(this.stackHeaders) + } + } || {} + if (release_version) { + headers.headers['release_version'] = release_version; + } + try { + const response = await http.put(`${this.urlPath}/move`, param, headers) + if (response.data) { + return response.data + } + } catch (err) { + throw error(err) + } + } } return this } diff --git a/package-lock.json b/package-lock.json index 165e7c43..1cae2aaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/management", - "version": "1.18.4", + "version": "1.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/management", - "version": "1.18.4", + "version": "1.19.0", "license": "MIT", "dependencies": { "axios": "^1.7.8", @@ -44,7 +44,7 @@ "eslint-plugin-standard": "^4.1.0", "jest": "^28.1.3", "jsdoc": "^4.0.4", - "mocha": "^9.2.2", + "mocha": "^11.0.1", "mocha-html-reporter": "^0.0.1", "mochawesome": "^7.1.3", "multiparty": "^4.2.3", @@ -2030,6 +2030,109 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2913,6 +3016,17 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -3557,13 +3671,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true, - "license": "ISC" - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -3864,9 +3971,9 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -5094,7 +5201,6 @@ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5653,9 +5759,9 @@ } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5702,6 +5808,13 @@ "node": ">=10" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -6619,9 +6732,9 @@ } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "license": "MIT", "dependencies": { @@ -6644,7 +6757,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -6659,6 +6772,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -6679,9 +6796,9 @@ "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, "license": "MIT" }, @@ -7302,16 +7419,6 @@ "dev": true, "license": "MIT" }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.x" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -8493,6 +8600,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", @@ -10541,6 +10664,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -10555,47 +10688,39 @@ } }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz", + "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha-html-reporter": { @@ -10617,32 +10742,14 @@ "node": ">=8" } }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/cliui": { @@ -10657,31 +10764,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -10695,54 +10777,86 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/mocha/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "*" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, + "node_modules/mocha/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mocha/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11011,19 +11125,6 @@ "node": ">= 0.6" } }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11824,6 +11925,13 @@ "node": ">=8" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11910,6 +12018,30 @@ "dev": true, "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-to-regexp": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", @@ -12796,9 +12928,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13206,6 +13338,45 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -13294,6 +13465,30 @@ "node": ">=0.10.0" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13509,16 +13704,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -14411,9 +14596,9 @@ } }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, "license": "Apache-2.0" }, @@ -14435,6 +14620,64 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -14561,9 +14804,9 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { diff --git a/package.json b/package.json index b7b177c8..b512a9c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/management", - "version": "1.18.4", + "version": "1.19.0", "description": "The Content Management API is used to manage the content of your Contentstack account", "main": "./dist/node/contentstack-management.js", "browser": "./dist/web/contentstack-management.js", @@ -92,7 +92,7 @@ "eslint-plugin-standard": "^4.1.0", "jest": "^28.1.3", "jsdoc": "^4.0.4", - "mocha": "^9.2.2", + "mocha": "^11.0.1", "mocha-html-reporter": "^0.0.1", "mochawesome": "^7.1.3", "multiparty": "^4.2.3", @@ -106,8 +106,7 @@ "typescript": "^4.9.5", "webpack": "^5.96.1", "webpack-cli": "^4.10.0", - "webpack-merge": "4.2.2", - "@slack/bolt": "^3.22.0" + "webpack-merge": "4.2.2" }, "homepage": "https://www.contentstack.com" } diff --git a/test/sanity-check/api/release-test.js b/test/sanity-check/api/release-test.js index 20c9c822..befc23c0 100644 --- a/test/sanity-check/api/release-test.js +++ b/test/sanity-check/api/release-test.js @@ -1,239 +1,483 @@ -import { describe, it, setup } from 'mocha' -import { jsonReader } from '../utility/fileOperations/readwrite.js' -import { releaseCreate } from '../mock/release.js' -import { expect } from 'chai' -import { cloneDeep } from 'lodash' -import { contentstackClient } from '../utility/ContentstackClient.js' -import { multiPageCT } from '../mock/content-type.js' -import dotenv from 'dotenv' - -dotenv.config() -let client = {} -let releaseUID = '' -let releaseUID2 = '' -let entries = {} -const itemToDelete = {} - -describe('Relases api Test', () => { +import { describe, it, setup } from "mocha"; +import { jsonReader } from "../utility/fileOperations/readwrite.js"; +import { releaseCreate, releaseCreate2 } from "../mock/release.js"; +import { expect } from "chai"; +import { cloneDeep } from "lodash"; +import { contentstackClient } from "../utility/ContentstackClient.js"; +import { multiPageCT } from "../mock/content-type.js"; +import dotenv from "dotenv"; + +dotenv.config(); +let client = {}; +let releaseUID = ""; +let releaseUID2 = ""; +let releaseUID3 = ""; +let releaseUID4 = ""; +let entries = {}; +const itemToDelete = {}; +const jobId = ""; + +describe("Relases api Test", () => { setup(() => { - const user = jsonReader('loggedinuser.json') - entries = jsonReader('entry.json') - client = contentstackClient(user.authtoken) - }) + const user = jsonReader("loggedinuser.json"); + entries = jsonReader("entry.json"); + client = contentstackClient(user.authtoken); + }); - it('should create a Release', done => { + it("should create a Release", (done) => { makeRelease() .create(releaseCreate) .then((release) => { - releaseUID = release.uid - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.not.equal(null) - done() + releaseUID = release.uid; + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.not.equal(null); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should fetch a Release from Uid', done => { + it("should create a Release 2", (done) => { + makeRelease() + .create(releaseCreate2) + .then((release) => { + releaseUID2 = release.uid; + expect(release.name).to.be.equal(releaseCreate2.release.name); + expect(release.description).to.be.equal( + releaseCreate2.release.description + ); + expect(release.uid).to.be.not.equal(null); + done(); + }) + .catch(done); + }); + + it("should fetch a Release from Uid", (done) => { makeRelease(releaseUID) .fetch() .then((release) => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.equal(releaseUID) - done() + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.equal(releaseUID); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should create release item', done => { + it("should create release item", (done) => { const item = { version: entries[0]._version, uid: entries[0].uid, content_type_uid: multiPageCT.content_type.uid, - action: 'publish', - locale: 'en-us' - } + action: "publish", + locale: "en-us", + }; makeRelease(releaseUID) .item() .create({ item }) .then((release) => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.equal(releaseUID) - expect(release.items.length).to.be.equal(1) - done() + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.equal(releaseUID); + expect(release.items.length).to.be.equal(1); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should create release items', done => { + it("should create release items", (done) => { const items = [ { version: entries[1]._version, uid: entries[1].uid, content_type_uid: multiPageCT.content_type.uid, - action: 'publish', - locale: 'en-us' + action: "publish", + locale: "en-us", }, { version: entries[2]._version, uid: entries[2].uid, content_type_uid: multiPageCT.content_type.uid, - action: 'publish', - locale: 'en-us' - } - ] + action: "publish", + locale: "en-us", + }, + ]; makeRelease(releaseUID) .item() .create({ items }) .then((release) => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.equal(releaseUID) - expect(release.items.length).to.be.equal(3) - done() + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.equal(releaseUID); + expect(release.items.length).to.be.equal(3); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should fetch a Release items from Uid', done => { + it("should fetch a Release items from Uid", (done) => { makeRelease(releaseUID) .item() - .findAll() + .findAll({ release_version: "2.0" }) .then((collection) => { - const itemdelete = collection.items[0] - itemToDelete['version'] = itemdelete.version - itemToDelete.action = itemdelete.action - itemToDelete.uid = itemdelete.uid - itemToDelete.locale = itemdelete.locale - itemToDelete.content_type_uid = itemdelete.content_type_uid - expect(collection.items.length).to.be.equal(3) - done() - }) - .catch(done) - }) - - it('should delete specific item', done => { + const itemdelete = collection.items[0]; + itemToDelete["version"] = itemdelete.version; + itemToDelete.action = itemdelete.action; + itemToDelete.uid = itemdelete.uid; + itemToDelete.locale = itemdelete.locale; + itemToDelete.content_type_uid = itemdelete.content_type_uid; + expect(collection.items.length).to.be.equal(3); + done(); + }) + .catch(done); + }); + + it("should move release items from release1 to release2", (done) => { + const data = { + release_uid: releaseUID2, + items: [ + { + uid: entries[1].uid, + locale: "en-us", + }, + ], + }; + makeRelease(releaseUID) + .item() + .move({ param: data, release_version: "2.0" }) + .then((release) => { + expect(release.notice).to.be.equal("Release items moved successfully!"); + done(); + }) + .catch(done); + }); + + it("should delete specific item", (done) => { makeRelease(releaseUID) .item() .delete({ items: [itemToDelete] }) .then((release) => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.equal(releaseUID) - expect(release.items.length).to.be.equal(2) - done() + expect(release.notice).to.be.equal('Item(s) send to remove from release successfully.'); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should delete all items', done => { + it("should delete all items", (done) => { makeRelease(releaseUID) .item() - .delete() + .delete({ release_version: "2.0" }) .then((release) => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.equal(releaseUID) - expect(release.items.length).to.be.equal(0) - done() + expect(release.notice).to.be.equal('Items deleted from release successfully!'); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should fetch and Update a Release from Uid', done => { + it("should fetch and Update a Release from Uid", (done) => { makeRelease(releaseUID) .fetch() .then((release) => { - release.name = 'Update release name' - return release.update() + release.name = "Update release name"; + return release.update(); }) .then((release) => { - expect(release.name).to.be.equal('Update release name') - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.not.equal(null) - done() + expect(release.name).to.be.equal("Update release name"); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.not.equal(null); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should update a Release from Uid', done => { - const relaseObject = makeRelease(releaseUID) - Object.assign(relaseObject, cloneDeep(releaseCreate.release)) + it("should update a Release from Uid", (done) => { + const relaseObject = makeRelease(releaseUID); + Object.assign(relaseObject, cloneDeep(releaseCreate.release)); relaseObject .update() .then((release) => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.description).to.be.equal(releaseCreate.release.description) - expect(release.uid).to.be.not.equal(null) - done() + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.not.equal(null); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should get all Releases', done => { + it("should get all Releases", (done) => { makeRelease() .query() .find() .then((releaseCollection) => { - releaseCollection.items.forEach(release => { - expect(release.name).to.be.not.equal(null) - expect(release.uid).to.be.not.equal(null) - }) - done() + releaseCollection.items.forEach((release) => { + expect(release.name).to.be.not.equal(null); + expect(release.uid).to.be.not.equal(null); + }); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should get specific Releases with name ', done => { + it("should get specific Releases with name ", (done) => { makeRelease() .query({ query: { name: releaseCreate.release.name } }) .find() .then((releaseCollection) => { - releaseCollection.items.forEach(release => { - expect(release.name).to.be.equal(releaseCreate.release.name) - expect(release.uid).to.be.not.equal(null) - }) - done() + releaseCollection.items.forEach((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.uid).to.be.not.equal(null); + }); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should clone specific Releases with Uid ', done => { + it("should clone specific Releases with Uid ", (done) => { makeRelease(releaseUID) - .clone({ name: 'New Clone Name', description: 'New Desc' }) + .clone({ name: "New Clone Name", description: "New Desc" }) .then((release) => { - releaseUID2 = release.uid - expect(release.name).to.be.equal('New Clone Name') - expect(release.description).to.be.equal('New Desc') - expect(release.uid).to.be.not.equal(null) - done() + releaseUID3 = release.uid; + expect(release.name).to.be.equal("New Clone Name"); + expect(release.description).to.be.equal("New Desc"); + expect(release.uid).to.be.not.equal(null); + done(); + }) + .catch(done); + }); + + it("Bulk Operation: should add items to a release", (done) => { + const items = { + release: releaseUID, + action: "publish", + locale: ["en-us"], + reference: true, + items: [ + { + version: entries[1]._version, + uid: entries[1].uid, + content_type_uid: multiPageCT.content_type.uid, + locale: "en-us", + title: entries[1].title, + }, + { + version: entries[2]._version, + uid: entries[2].uid, + content_type_uid: multiPageCT.content_type.uid, + locale: "en-us", + title: entries[2].title, + }, + ], + }; + doBulkOperation() + .addItems({ data: items, bulk_version: "2.0" }) + .then((response) => { + jobId = response.job_id; + expect(response.notice).to.equal( + "Your add to release request is in progress." + ); + expect(response.job_id).to.not.equal(undefined); + done(); + }) + .catch(done); + }); + + it("Bulk Operation: should fetch job status details", (done) => { + doBulkOperation() + .jobStatus({ job_id: jobId, bulk_version: "2.0" }) + .then((response) => { + expect(response.job).to.not.equal(undefined); + expect(response.job._id).to.equal(jobId); + done(); + }) + .catch(done); + }); + + it("Bulk Operation: should update items to a release", (done) => { + const items = { + release: releaseUID, + action: "publish", + locale: ["en-us"], + reference: true, + items: ["$all"], + }; + doBulkOperation() + .updateItems({ data: items, bulk_version: "2.0" }) + .then((response) => { + expect(response.notice).to.equal( + "Your update release items to latest version request is in progress." + ); + expect(response.job_id).to.not.equal(undefined); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should delete specific Releases with Uid ', done => { + it("should delete specific Releases with Uid ", (done) => { makeRelease(releaseUID) .delete() .then((data) => { - expect(data.notice).to.be.equal('Release deleted successfully.') - done() + expect(data.notice).to.be.equal("Release deleted successfully."); + done(); }) - .catch(done) - }) + .catch(done); + }); - it('should delete cloned Release with Uid', done => { + it("should delete specific Releases with Uid 2", (done) => { makeRelease(releaseUID2) .delete() .then((data) => { - expect(data.notice).to.be.equal('Release deleted successfully.') - done() + expect(data.notice).to.be.equal("Release deleted successfully."); + done(); + }) + .catch(done); + }); + + it("should delete cloned Release with Uid", (done) => { + makeRelease(releaseUID3) + .delete() + .then((data) => { + expect(data.notice).to.be.equal("Release deleted successfully."); + done(); + }) + .catch(done); + }); + + it("should create a Release v2", (done) => { + makeRelease() + .create(releaseCreate) + .then((release) => { + releaseUID4 = release.uid; + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.not.equal(null); + done(); + }) + .catch(done); + }); + + it("should create release item fo v2", (done) => { + const item = { + version: entries[0]._version, + uid: entries[0].uid, + content_type_uid: multiPageCT.content_type.uid, + action: "publish", + locale: "en-us", + title: entries[0].title, + }; + makeRelease(releaseUID4) + .item() + .create({ item, release_version: "2.0" }) + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name); + expect(release.description).to.be.equal( + releaseCreate.release.description + ); + expect(release.uid).to.be.equal(releaseUID4); + done(); + }) + .catch(done); + }); + + it("should delete specific item for v2", (done) => { + makeRelease(releaseUID4) + .item() + .delete({ + item: { uid: entries[0].uid, locale: "en-us" }, + release_version: "2.0", + }) + .then((release) => { + expect(release.notice).to.be.equal('Item deleted from release successfully!'); + done(); + }) + .catch(done); + }); + + it("Bulk Operation: should add items to a release 2", (done) => { + const items = { + release: releaseUID4, + action: "publish", + locale: ["en-us"], + reference: true, + items: [ + { + version: entries[1]._version, + uid: entries[1].uid, + content_type_uid: multiPageCT.content_type.uid, + locale: "en-us", + title: entries[1].title, + }, + { + version: entries[2]._version, + uid: entries[2].uid, + content_type_uid: multiPageCT.content_type.uid, + locale: "en-us", + title: entries[2].title, + }, + ], + }; + doBulkOperation() + .addItems({ data: items, bulk_version: "2.0" }) + .then((response) => { + expect(response.notice).to.equal( + "Your add to release request is in progress." + ); + expect(response.job_id).to.not.equal(undefined); + done(); + }) + .catch(done); + }); + + it("should delete specific items for v2", (done) => { + makeRelease(releaseUID4) + .item() + .delete({ + items: [ + { uid: entries[1].uid, + locale: "en-us" + }, + { + uid: entries[2].uid, + locale: "en-us", + }, + ], + release_version: "2.0", + }) + .then((release) => { + expect(release.notice).to.be.equal('Items deleted from release successfully!'); + done(); + }) + .catch(done); + }); + + it("should delete specific Releases with Uid ", (done) => { + makeRelease(releaseUID4) + .delete() + .then((data) => { + expect(data.notice).to.be.equal("Release deleted successfully."); + done(); }) - .catch(done) - }) -}) + .catch(done); + }); +}); + +function makeRelease(uid = null) { + return client.stack({ api_key: process.env.API_KEY }).release(uid); +} -function makeRelease (uid = null) { - return client.stack({ api_key: process.env.API_KEY }).release(uid) +function doBulkOperation(uid = null) { + return client.stack({ api_key: process.env.API_KEY }).bulkOperation(); } diff --git a/test/sanity-check/mock/managementToken.js b/test/sanity-check/mock/managementToken.js index f229b16e..0b2c1d2f 100644 --- a/test/sanity-check/mock/managementToken.js +++ b/test/sanity-check/mock/managementToken.js @@ -64,7 +64,7 @@ const createManagementToken2 = { } } ], - expires_on: '2024-12-10', + expires_on: '2025-12-10', is_email_notification_enabled: true } } diff --git a/test/sanity-check/mock/release.js b/test/sanity-check/mock/release.js index 9bb45e77..58ed92b8 100644 --- a/test/sanity-check/mock/release.js +++ b/test/sanity-check/mock/release.js @@ -7,4 +7,13 @@ const releaseCreate = { } } -export { releaseCreate } +const releaseCreate2 = { + release: { + name: 'Second release', + description: 'Adding release date 2020-21-07', + locked: false, + archived: false + } +} + +export { releaseCreate, releaseCreate2 } diff --git a/test/unit/bulkOperation-test.js b/test/unit/bulkOperation-test.js new file mode 100644 index 00000000..e0324146 --- /dev/null +++ b/test/unit/bulkOperation-test.js @@ -0,0 +1,225 @@ +import Axios from 'axios'; +import { expect } from 'chai'; +import MockAdapter from 'axios-mock-adapter'; +import { describe, it } from 'mocha'; +import { BulkOperation } from '../../lib/stack/bulkOperation'; +import { stackHeadersMock } from './mock/objects'; + +describe('Contentstack BulkOperation test', () => { + it('BulkOperation test without uid', done => { + const bulkOperation = makeBulkOperation(); + expect(bulkOperation.urlPath).to.be.equal('/bulk'); + expect(bulkOperation.stackHeaders).to.be.equal(undefined); + expect(bulkOperation.addItems).to.not.equal(undefined); + expect(bulkOperation.publish).to.not.equal(undefined); + expect(bulkOperation.unpublish).to.not.equal(undefined); + expect(bulkOperation.delete).to.not.equal(undefined); + done(); + }); + + it('BulkOperation test with stackHeaders', done => { + const bulkOperation = makeBulkOperation({ stackHeaders: { ...stackHeadersMock } }); + expect(bulkOperation.urlPath).to.be.equal('/bulk'); + expect(bulkOperation.stackHeaders).to.not.equal(undefined); + expect(bulkOperation.stackHeaders.api_key).to.be.equal(stackHeadersMock.api_key); + expect(bulkOperation.addItems).to.not.equal(undefined); + expect(bulkOperation.publish).to.not.equal(undefined); + expect(bulkOperation.unpublish).to.not.equal(undefined); + expect(bulkOperation.delete).to.not.equal(undefined); + done(); + }); + + it('should add items to a release', async () => { + const items = { + release: 'release_uid', + action: 'publish', + locale: ['en-us'], + reference: true, + items: [ + { + content_type_uid: 'ct_1', + uid: 'entry_uid', + version: 2, + locale: 'en-us', + title: 'validation test', + }, + ], + }; + + var mock = new MockAdapter(Axios); + mock.onPost('/bulk/release/items').reply(200, { + notice: 'Your add to release request is in progress.', + job_id: 'job_id', + }); + + const response = await makeBulkOperation().addItems({ data: items, bulk_version: '2.0' }); + expect(response.notice).to.equal('Your add to release request is in progress.'); + expect(response.job_id).to.not.equal(undefined); + }); + + it('should update items to a release', async () => { + const items = { + release: 'release_uid', + action: 'publish', + locale: ['en-us'], + reference: true, + items: [ + '$all' + ], + }; + + var mock = new MockAdapter(Axios); + mock.onPut('/bulk/release/update_items').reply(200, { + notice: 'Your update release items to latest version request is in progress.', + job_id: 'job_id', + }); + + const response = await makeBulkOperation().updateItems({ data: items, bulk_version: '2.0' }); + expect(response.notice).to.equal('Your update release items to latest version request is in progress.'); + expect(response.job_id).to.not.equal(undefined); + }); + + it('should publish items in bulk', async () => { + const publishDetails = { + entries: [ + { + uid: 'entry_uid', + content_type: 'content_type_uid', + version: 'version', + locale: 'entry_locale', + }, + ], + assets: [{ uid: 'uid' }], + locales: ['en'], + environments: ['env_uid'], + }; + + var mock = new MockAdapter(Axios); + mock.onPost('/bulk/publish').reply(200, { + notice: 'Your publish request is in progress.', + job_id: 'job_id', + }); + + const response = await makeBulkOperation().publish({ details: publishDetails }); + expect(response.notice).to.equal('Your publish request is in progress.'); + expect(response.job_id).to.not.equal(undefined); + }); + + it('should unpublish items in bulk', async () => { + const unpublishDetails = { + entries: [ + { + uid: 'entry_uid', + content_type: 'content_type_uid', + version: 'version', + locale: 'entry_locale', + }, + ], + assets: [{ uid: 'uid' }], + locales: ['en'], + environments: ['env_uid'], + }; + + var mock = new MockAdapter(Axios); + mock.onPost('/bulk/unpublish').reply(200, { + notice: 'Your unpublish request is in progress.', + job_id: 'job_id', + }); + + const response = await makeBulkOperation().unpublish({ details: unpublishDetails }); + expect(response.notice).to.equal('Your unpublish request is in progress.'); + expect(response.job_id).to.not.equal(undefined); + }); + + it('should delete items in bulk', async () => { + const deleteDetails = { + entries: [ + { + uid: 'entry_uid', + content_type: 'content_type_uid', + locale: 'entry_locale', + }, + ], + assets: [{ uid: 'uid' }], + }; + + var mock = new MockAdapter(Axios); + mock.onPost('/bulk/delete').reply(200, { + notice: 'Your delete request is in progress.', + job_id: 'job_id', + }); + + const response = await makeBulkOperation().delete({ details: deleteDetails }); + expect(response.notice).to.equal('Your delete request is in progress.'); + expect(response.job_id).to.not.equal(undefined); + }); + + it('should update items in bulk', async () => { + const updateBody = { + entries: [ + { + content_type: 'content_type_uid1', + uid: 'entry_uid', + locale: 'en-us', + }, + { + content_type: 'content_type_uid2', + uid: 'entry_uid', + locale: 'en-us', + }, + ], + workflow: { + workflow_stage: { + comment: 'Workflow-related Comments', + due_date: 'Thu Dec 01 2018', + notify: false, + uid: 'workflow_stage_uid', + assigned_to: [ + { + uid: 'user_uid', + name: 'user_name', + email: 'user_email_id', + }, + ], + assigned_by_roles: [ + { + uid: 'role_uid', + name: 'role_name', + }, + ], + }, + }, + }; + + var mock = new MockAdapter(Axios); + mock.onPost('/bulk/workflow').reply(200, { + notice: 'Your update request is in progress.', + job_id: 'job_id', + }); + + const response = await makeBulkOperation().update(updateBody); + expect(response.notice).to.equal('Your update request is in progress.'); + expect(response.job_id).to.not.equal(undefined); + }); + + it('should fetch job status', async () => { + const jobId = 'job_id'; + const jobStatusDetails = { + job_id: jobId, + }; + + var mock = new MockAdapter(Axios); + mock.onGet(`/bulk/jobs/${jobId}`).reply(200, { + notice: 'Your job status request is successful.', + status: 'completed', + }); + + const response = await makeBulkOperation().jobStatus(jobStatusDetails); + expect(response.notice).to.equal('Your job status request is successful.'); + expect(response.status).to.equal('completed'); + }); +}); + +function makeBulkOperation(data) { + return new BulkOperation(Axios, data); +} \ No newline at end of file diff --git a/test/unit/index.js b/test/unit/index.js index cde49f51..a49ffca1 100644 --- a/test/unit/index.js +++ b/test/unit/index.js @@ -14,6 +14,7 @@ require('./extension-test') require('./branch-test') require('./branchAlias-test') require('./release-test') +require('./bulkOperation-test') require('./asset-test') require('./webhook-test') require('./workflow-test') diff --git a/test/unit/release-test.js b/test/unit/release-test.js index 4cc3d6b8..f20ad79a 100644 --- a/test/unit/release-test.js +++ b/test/unit/release-test.js @@ -221,6 +221,95 @@ describe('Contentstack Release test', () => { }) .catch(done) }) + + it('Release move test', done => { + var mock = new MockAdapter(Axios) + mock.onPut('/releases/UID/items/move').reply(200, { + ...noticeMock + }) + makeRelease({ + release: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .item() + .move({ data: { release_uid: 'UID2', items: ['$all'] }, release_version: '2.0' }) + .then((response) => { + expect(response.notice).to.be.equal(noticeMock.notice) + done() + }) + .catch(done) + }) + + it('Release delete item test', done => { + var mock = new MockAdapter(Axios) + mock.onDelete('/releases/UID/item').reply(200, + { ...noticeMock } + ) + makeRelease({ + release: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .item() + .delete({ item: { uid: 'UID2', locale: 'en-us' }, release_version: '2.0' }) + .then((response) => { + expect(response.notice).to.be.equal(noticeMock.notice) + done() + }) + .catch(done) + }) + + it("should delete specific item for v2", (done) => { + var mock = new MockAdapter(Axios) + mock.onDelete('/releases/UID/item').reply(200, { + notice: 'Notice' + }) + makeRelease({ + release: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .item() + .delete({ + item: { uid: 'uid', locale: "en-us" }, + release_version: "2.0", + }) + .then((response) => { + expect(response.notice).to.be.equal('Notice'); + done(); + }) + .catch(done); + }); + + it("should delete specific items for v2", (done) => { + var mock = new MockAdapter(Axios) + mock.onDelete('/releases/UID/items').reply(200, { + notice: 'Notice' + }) + makeRelease({ + release: { + ...systemUidMock + }, + stackHeaders: stackHeadersMock + }) + .item() + .delete({ + items: [ + { uid: 'uid1', locale: "en-us" }, + { uid: 'uid2', locale: "en-us" }, + ], + release_version: "2.0", + }) + .then((response) => { + expect(response.notice).to.be.equal('Notice'); + done(); + }) + .catch(done); + }); }) function makeRelease (data) { diff --git a/types/stack/bulkOperation/index.d.ts b/types/stack/bulkOperation/index.d.ts index 867345da..4a997e15 100644 --- a/types/stack/bulkOperation/index.d.ts +++ b/types/stack/bulkOperation/index.d.ts @@ -6,14 +6,17 @@ export interface BulkOperation extends SystemFields { publish(config: BulkOperationConfig): Promise unpublish(config: BulkOperationConfig): Promise delete(config: BulkDeleteConfig): Promise + addItems(config: AddItemsConfig): Promise + updateItems(config: AddItemsConfig): Promise + jobStatus(config: BulkJobStatus): Promise } - export interface BulkOperationConfig { details: PublishItems skip_workflow_stage?: boolean approvals?: boolean is_nested?: boolean api_version?: string + bulk_version?: string } export interface PublishItems extends PublishDetails { @@ -44,4 +47,14 @@ export interface BulkDeleteAsset { export interface BranchData extends AnyProperty { name: string source: string +} + +export interface BulkAddItemsConfig { + data: AnyProperty; + bulk_version?: string; +} + +export interface BulkJobStatus { + job_id: AnyProperty; + bulk_version?: string; } \ No newline at end of file diff --git a/types/stack/release/index.d.ts b/types/stack/release/index.d.ts index 0982c189..516340b2 100644 --- a/types/stack/release/index.d.ts +++ b/types/stack/release/index.d.ts @@ -30,8 +30,10 @@ export interface ReleaseDeploy extends AnyProperty { // Represents a Release item with various operations export interface ReleaseItem extends SystemFields, Creatable }> { - delete(param?: { items: Array }): Promise; // Changed return type to Promise + delete(param?: { item?: ReleaseItemData; items?: Array; release_version?: string }): Promise; // Changed return type to Promise findAll(param?: AnyProperty): Promise>; + move(param: { param: MoveReleaseItems, release_version?: string }): Promise; + create(param: { item?: ReleaseItemData; items?: Array; release_version?: string }): Promise; } // Data structure for Release item properties @@ -42,3 +44,14 @@ export interface ReleaseItemData extends AnyProperty { content_type_uid: string; action: 'publish' | 'unpublish'; } + +export interface MoveReleaseItems extends AnyProperty { + release_uid: string; + items: Array; +} + +export interface MoveItemData extends AnyProperty { + uid: string; + locale: string; + variant_id?: string; +}