diff --git a/package-lock.json b/package-lock.json index 7bc6261..c1e3e22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@modesty/fluent-mcp", - "version": "0.0.16", + "version": "0.0.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modesty/fluent-mcp", - "version": "0.0.16", + "version": "0.0.17", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "1.18.1", - "@servicenow/sdk": "4.0.1", + "@modelcontextprotocol/sdk": "1.19.1", + "@servicenow/sdk": "4.0.2", "zod": "^3.25.76", "zod-to-json-schema": "^3.24.6" }, @@ -18,26 +18,26 @@ "fluent-mcp": "dist/index.js" }, "devDependencies": { - "@eslint/js": "^9.36.0", + "@eslint/js": "^9.37.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-eslint": "^9.0.5", "@rollup/plugin-json": "^6.0.1", - "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-node-resolve": "^16.0.2", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.4", "@types/jest": "^30.0.0", - "@types/node": "^24.5.2", + "@types/node": "^24.7.0", "@typescript-eslint/eslint-plugin": "^8.44.0", "@typescript-eslint/parser": "^8.44.0", - "eslint": "^9.36.0", - "jest": "^30.1.3", - "rollup": "^4.52.0", + "eslint": "^9.37.0", + "jest": "^30.2.0", + "rollup": "^4.52.4", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-sourcemaps": "^0.6.3", "ts-jest": "^29.4.4", "ts-node": "^10.9.2", "tslib": "^2.8.1", - "typescript": "~5.9.2" + "typescript": "~5.9.3" }, "engines": { "node": ">=20.18.0" @@ -74,6 +74,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -645,13 +646,13 @@ "optional": true }, "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "version": "2.0.8", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", "license": "MIT", "optional": true, "dependencies": { - "colorspace": "1.1.x", + "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } @@ -756,19 +757,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", "devOptional": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.16.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -850,9 +854,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "version": "9.37.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "devOptional": true, "license": "MIT", "engines": { @@ -873,13 +877,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -1030,9 +1034,9 @@ } }, "node_modules/@inquirer/checkbox/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1088,9 +1092,9 @@ } }, "node_modules/@inquirer/confirm/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1131,9 +1135,9 @@ } }, "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1190,9 +1194,9 @@ } }, "node_modules/@inquirer/editor/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1249,9 +1253,9 @@ } }, "node_modules/@inquirer/expand/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1307,9 +1311,9 @@ } }, "node_modules/@inquirer/input/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1366,9 +1370,9 @@ } }, "node_modules/@inquirer/password/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1445,9 +1449,9 @@ } }, "node_modules/@inquirer/rawlist/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1505,9 +1509,9 @@ } }, "node_modules/@inquirer/select/node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.19", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", "license": "MIT", "optional": true, "dependencies": { @@ -1730,17 +1734,17 @@ } }, "node_modules/@jest/console": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/console/-/console-30.1.2.tgz", - "integrity": "sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -1748,39 +1752,39 @@ } }, "node_modules/@jest/core": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/core/-/core-30.1.3.tgz", - "integrity": "sha512-LIQz7NEDDO1+eyOA2ZmkiAyYvZuo6s1UxD/e2IHldR6D7UYogVq3arTmli07MkENLq6/3JEQjp0mA8rrHHJ8KQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", + "@jest/console": "30.2.0", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.1.3", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.5", - "jest-config": "30.1.3", - "jest-haste-map": "30.1.0", - "jest-message-util": "30.1.0", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-resolve-dependencies": "30.1.3", - "jest-runner": "30.1.3", - "jest-runtime": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", - "jest-watcher": "30.1.3", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -1796,9 +1800,9 @@ } }, "node_modules/@jest/core/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "version": "4.3.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -1822,39 +1826,39 @@ } }, "node_modules/@jest/environment": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/environment/-/environment-30.1.2.tgz", - "integrity": "sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.1.2", - "@jest/types": "30.0.5", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "30.0.5" + "jest-mock": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect/-/expect-30.1.2.tgz", - "integrity": "sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.1.2", - "jest-snapshot": "30.1.2" + "expect": "30.2.0", + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect-utils/-/expect-utils-30.1.2.tgz", - "integrity": "sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", "dev": true, "license": "MIT", "dependencies": { @@ -1865,18 +1869,18 @@ } }, "node_modules/@jest/fake-timers": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/fake-timers/-/fake-timers-30.1.2.tgz", - "integrity": "sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1893,16 +1897,16 @@ } }, "node_modules/@jest/globals": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/globals/-/globals-30.1.2.tgz", - "integrity": "sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/expect": "30.1.2", - "@jest/types": "30.0.5", - "jest-mock": "30.0.5" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1923,17 +1927,17 @@ } }, "node_modules/@jest/reporters": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/reporters/-/reporters-30.1.3.tgz", - "integrity": "sha512-VWEQmJWfXMOrzdFEOyGjUEOuVXllgZsoPtEHZzfdNz18RmzJ5nlR6kp8hDdY8dDS1yGOXAY7DHT+AOHIPSBV0w==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", @@ -1946,9 +1950,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", - "jest-worker": "30.1.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -1979,13 +1983,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz", - "integrity": "sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -2010,14 +2014,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-result/-/test-result-30.1.3.tgz", - "integrity": "sha512-P9IV8T24D43cNRANPPokn7tZh0FAFnYS2HIfi5vK18CjRkTDR9Y3e1BoEcAJnl4ghZZF4Ecda4M/k41QkvurEQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -2026,15 +2030,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-sequencer/-/test-sequencer-30.1.3.tgz", - "integrity": "sha512-82J+hzC0qeQIiiZDThh+YUadvshdBswi5nuyXlEmXzrhw5ZQSRHeQ5LpVMD/xc8B3wPePvs6VMzHnntxL+4E3w==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.1.3", + "@jest/test-result": "30.2.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -2042,23 +2046,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/transform/-/transform-30.1.2.tgz", - "integrity": "sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.2.0", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", @@ -2069,9 +2073,9 @@ } }, "node_modules/@jest/types": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/types/-/types-30.0.5.tgz", - "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, "license": "MIT", "dependencies": { @@ -2149,9 +2153,9 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.18.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@modelcontextprotocol/sdk/-/sdk-1.18.1.tgz", - "integrity": "sha512-d//GE8/Yh7aC3e7p+kZG8JqqEAwwDUmAfvH1quogtbk+ksS6E0RR6toKKESPYYZVre0meqkJb27zb+dhqE9Sgw==", + "version": "1.19.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@modelcontextprotocol/sdk/-/sdk-1.19.1.tgz", + "integrity": "sha512-3Y2h3MZKjec1eAqSTBclATlX+AbC6n1LgfVzRMJLt3v6w0RCYgwLrjbxPDbhsYHt6Wdqc/aCceNJYgj448ELQQ==", "license": "MIT", "dependencies": { "ajv": "^6.12.6", @@ -2679,14 +2683,14 @@ } }, "node_modules/@rollup/plugin-eslint": { - "version": "9.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/plugin-eslint/-/plugin-eslint-9.0.5.tgz", - "integrity": "sha512-C4nh0sSeJuxVW5u5tDX+dCMjKcNfHm4hS+zeUVh1si7gttnhgGbrmPkUxIX7iZgYABwdEh/ewyMbZB+WXjSJdA==", + "version": "9.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/plugin-eslint/-/plugin-eslint-9.1.0.tgz", + "integrity": "sha512-QacjRIg4O/1hNWaS9Y16uDzbIGGQ+7HlsXkkv5BkfEbxUkgQxteBsZW6gAWuGdE4UEm5+ao72wxJOxjNi5CvGA==", "dev": true, "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", - "eslint": "^8.24.0" + "eslint": "^8.57.1" }, "engines": { "node": ">=14.0.0" @@ -2910,9 +2914,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", - "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "version": "16.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.2.tgz", + "integrity": "sha512-tCtHJ2BlhSoK4cCs25NMXfV7EALKr0jyasmqVCq3y9cBrKdmJhtsy1iTz36Xhk/O+pDJbzawxF4K6ZblqCnITQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3008,9 +3012,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.0.tgz", - "integrity": "sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", "cpu": [ "arm" ], @@ -3022,9 +3026,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.0.tgz", - "integrity": "sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", "cpu": [ "arm64" ], @@ -3036,9 +3040,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.0.tgz", - "integrity": "sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", "cpu": [ "arm64" ], @@ -3050,9 +3054,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.0.tgz", - "integrity": "sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", "cpu": [ "x64" ], @@ -3064,9 +3068,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.0.tgz", - "integrity": "sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", "cpu": [ "arm64" ], @@ -3078,9 +3082,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.0.tgz", - "integrity": "sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", "cpu": [ "x64" ], @@ -3092,9 +3096,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.0.tgz", - "integrity": "sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", "cpu": [ "arm" ], @@ -3106,9 +3110,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.0.tgz", - "integrity": "sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", "cpu": [ "arm" ], @@ -3120,9 +3124,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.0.tgz", - "integrity": "sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", "cpu": [ "arm64" ], @@ -3134,9 +3138,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.0.tgz", - "integrity": "sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", "cpu": [ "arm64" ], @@ -3148,9 +3152,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.0.tgz", - "integrity": "sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", "cpu": [ "loong64" ], @@ -3188,9 +3192,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.0.tgz", - "integrity": "sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", "cpu": [ "ppc64" ], @@ -3202,9 +3206,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.0.tgz", - "integrity": "sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", "cpu": [ "riscv64" ], @@ -3216,9 +3220,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.0.tgz", - "integrity": "sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", "cpu": [ "riscv64" ], @@ -3230,9 +3234,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.0.tgz", - "integrity": "sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", "cpu": [ "s390x" ], @@ -3244,9 +3248,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.0.tgz", - "integrity": "sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", "cpu": [ "x64" ], @@ -3258,9 +3262,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.0.tgz", - "integrity": "sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", "cpu": [ "x64" ], @@ -3272,9 +3276,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.0.tgz", - "integrity": "sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", "cpu": [ "arm64" ], @@ -3286,9 +3290,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.0.tgz", - "integrity": "sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", "cpu": [ "arm64" ], @@ -3300,9 +3304,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.0.tgz", - "integrity": "sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", "cpu": [ "ia32" ], @@ -3314,9 +3318,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.0.tgz", - "integrity": "sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", "cpu": [ "x64" ], @@ -3328,9 +3332,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.0.tgz", - "integrity": "sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", "cpu": [ "x64" ], @@ -3342,9 +3346,9 @@ ] }, "node_modules/@servicenow/eslint-plugin-sdk-app-plugin": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/eslint-plugin-sdk-app-plugin/-/eslint-plugin-sdk-app-plugin-4.0.1.tgz", - "integrity": "sha512-8g5HiYzLuEePToGngwvE+S+hvo5pyTtXTxgU9E/hvW67HSFRPynGSQGktYyEAAq+wiva/ah0IHLwIw44CMJImA==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/eslint-plugin-sdk-app-plugin/-/eslint-plugin-sdk-app-plugin-4.0.2.tgz", + "integrity": "sha512-JXktXAlyT4sy1vNr5U9nAi8LehMZ2M6l+k1DBtPBIIayrEU14Ig9NsDdU+YfvZ+dwxJwnbCspeNyFanLhyz3/Q==", "license": "MIT", "optional": true, "dependencies": { @@ -3578,9 +3582,9 @@ } }, "node_modules/@servicenow/isomorphic-rollup": { - "version": "1.2.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/isomorphic-rollup/-/isomorphic-rollup-1.2.2.tgz", - "integrity": "sha512-lzEa8jucfmBk17an6Eu5OrzU4lxzobKSLs2kr465kYNpXuiRb3mq7k0t2oC8QK7McUMyg31ZsdyljhKa2laRVw==", + "version": "1.2.3", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/isomorphic-rollup/-/isomorphic-rollup-1.2.3.tgz", + "integrity": "sha512-WE5LvEiZEIMFji0PVZR304VGPsVAXgy0/Mr6H/+95kJIXm0fLaF/BwFEyv7vTSldAHEr6+62aokBQ4+zEZR/VQ==", "license": "MIT", "optional": true, "dependencies": { @@ -3588,12 +3592,12 @@ } }, "node_modules/@servicenow/sdk": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk/-/sdk-4.0.1.tgz", - "integrity": "sha512-RJ356rYghMqxJ+EvWumjS3P0esQIGfvyI7suSzdBAbJkHPLMiYlAfP4PtDNj5mBURf4ZNQoL1mCPeG57/vA+3A==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk/-/sdk-4.0.2.tgz", + "integrity": "sha512-AEoBVedfTxI3RmorkgSUg9YQSfXrv8Q/5Me7jbcTsmhaiiEKqpLLfdMFGQdFX0R3RGEoveXcVR/AzTRKbFUP8Q==", "license": "MIT", "dependencies": { - "@servicenow/sdk-core": "4.0.1" + "@servicenow/sdk-core": "4.0.2" }, "bin": { "now-sdk": "bin/index.js", @@ -3606,20 +3610,20 @@ "pnpm": ">=10.8.0" }, "optionalDependencies": { - "@servicenow/sdk-api": "4.0.1", - "@servicenow/sdk-cli": "4.0.1", + "@servicenow/sdk-api": "4.0.2", + "@servicenow/sdk-cli": "4.0.2", "undici": "6.19.8" } }, "node_modules/@servicenow/sdk-api": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-api/-/sdk-api-4.0.1.tgz", - "integrity": "sha512-aYzhyUQ5f39JgFqtKCOz0LEDELK0cuQpn+pmx8W3KcYxiW04jt7qvxEvnWqoyEu41o6mGAzjGzeupJPxmFbC8g==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-api/-/sdk-api-4.0.2.tgz", + "integrity": "sha512-aIDZ7EDOatB0q5jmqdmitFrCQFKAekG4Ztrx5AawC7MjqRlEwi7URnFHcAwYt62cEoFbdrtt+6g7NC2lJ8XfYg==", "license": "MIT", "optional": true, "dependencies": { - "@servicenow/sdk-build-core": "4.0.1", - "@servicenow/sdk-build-plugins": "4.0.1", + "@servicenow/sdk-build-core": "4.0.2", + "@servicenow/sdk-build-plugins": "4.0.2", "crypto-js": "4.2.0", "fast-xml-parser": "4.4.1", "handlebars": "4.7.8", @@ -3642,13 +3646,13 @@ } }, "node_modules/@servicenow/sdk-build-core": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-build-core/-/sdk-build-core-4.0.1.tgz", - "integrity": "sha512-VF2fRNaddqXPE7UzMmGOPSJweUTDThsEyi2CJ1kcSNjz9eZaD75BEzsZuVvErl9vDj5DQSCr0XOs1lEs2SVesg==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-build-core/-/sdk-build-core-4.0.2.tgz", + "integrity": "sha512-BzvNuL3PQ5m57rCoZyIHZnSh1TpCybiJ0xie743JJky7T5bxmYACf4g+5+auviUAh6tqT35b3tAxgg+/rmsp9w==", "license": "MIT", "optional": true, "dependencies": { - "@servicenow/sdk-core": "4.0.1", + "@servicenow/sdk-core": "4.0.2", "fast-glob": "3.3.2", "fflate": "0.8.2", "json5": "2.2.3", @@ -3679,18 +3683,18 @@ } }, "node_modules/@servicenow/sdk-build-plugins": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-build-plugins/-/sdk-build-plugins-4.0.1.tgz", - "integrity": "sha512-BpGN4HRtGaBPYOJpqjr8aZnPOOc/DckR/iX5WpL0c8+lcOmkBKv6Cv+v+o0G+MaoSJqRPZX/5P7pfEswDfzs1g==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-build-plugins/-/sdk-build-plugins-4.0.2.tgz", + "integrity": "sha512-dlCRPqvhS6ehP082ffWS9a+ojXjj5ywGUdVdox5lIvNgNmGXOdkvN6ETaSewobY0Vos+4VSERYg97/SZQypPWA==", "license": "MIT", "optional": true, "dependencies": { "@cyclonedx/cyclonedx-library": "7.1.0", - "@servicenow/eslint-plugin-sdk-app-plugin": "4.0.1", + "@servicenow/eslint-plugin-sdk-app-plugin": "4.0.2", "@servicenow/glide": "26.0.1", - "@servicenow/sdk-build-core": "4.0.1", - "@servicenow/sdk-core": "4.0.1", - "@servicenow/sdk-repack": "4.0.1", + "@servicenow/sdk-build-core": "4.0.2", + "@servicenow/sdk-core": "4.0.2", + "@servicenow/sdk-repack": "4.0.2", "eslint": "8.50.0", "eslint-formatter-stylish": "8.40.0", "eslint-plugin-es-x": "7.2.0", @@ -3924,15 +3928,15 @@ } }, "node_modules/@servicenow/sdk-cli": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-cli/-/sdk-cli-4.0.1.tgz", - "integrity": "sha512-OBQhHZgMVnyk1jdi5azAPGieQhld6WkVgbc8xjWcssf4YZa4UHmYX3/j2mX0n9NAObb2flEKbiVN7NkS+1OZEw==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-cli/-/sdk-cli-4.0.2.tgz", + "integrity": "sha512-MtxZJRf6lxcg1832GeAlK9BltxJw0xFWI5QLkmCGYtYgHQI4A+T884vskutmMysjJJOttyuagl6LQQ04cyInmw==", "license": "MIT", "optional": true, "dependencies": { "@inquirer/prompts": "3.1.1", - "@servicenow/sdk-api": "4.0.1", - "@servicenow/sdk-build-core": "4.0.1", + "@servicenow/sdk-api": "4.0.2", + "@servicenow/sdk-build-core": "4.0.2", "chalk": "4.1.2", "ci-info": "4.1.0", "clipboardy": "4.0.0", @@ -3954,9 +3958,9 @@ } }, "node_modules/@servicenow/sdk-core": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-core/-/sdk-core-4.0.1.tgz", - "integrity": "sha512-CADvN566g0YtW9eojZHRDRp16i7HRL0lqFwJe7yL4H5YHL91i2ZzhFGgzqFtGGququGpv9rcTiNzE/1etSvmXw==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-core/-/sdk-core-4.0.2.tgz", + "integrity": "sha512-VW2a6v87xQ5mzPU9LPuAwizR0VpPDyu/xU0owoYaBHAhq4sbf1sFK2dvPMcSF6/BbOe6QehEicyYgL5QNZ8uKA==", "license": "MIT", "engines": { "node": ">=20.18.0", @@ -3964,14 +3968,14 @@ } }, "node_modules/@servicenow/sdk-repack": { - "version": "4.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-repack/-/sdk-repack-4.0.1.tgz", - "integrity": "sha512-giiCdi0o6rddEHKSTdLhdDJIrFg7cl+ft5n0I6CWFjVP61jMbvlYI1Ki469/vtopYEVu4KzS1b6IoBZnaNd6Dg==", + "version": "4.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@servicenow/sdk-repack/-/sdk-repack-4.0.2.tgz", + "integrity": "sha512-46Ucuz04UBqXo13uRArUQZExrvI9jtsFAEfekqJISyq23eLXoiCtd4uJrl1/bsB2WtK/Quikm+SsF1BjnJIhmQ==", "license": "MIT", "optional": true, "dependencies": { - "@servicenow/isomorphic-rollup": "1.2.2", - "@servicenow/sdk-build-core": "4.0.1", + "@servicenow/isomorphic-rollup": "1.2.3", + "@servicenow/sdk-build-core": "4.0.2", "rollup": "4.43.0" } }, @@ -4283,6 +4287,17 @@ "@sinonjs/commons": "^3.0.1" } }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "optional": true, + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, "node_modules/@ts-morph/common": { "version": "0.24.0", "resolved": "https://artifact.devsnc.com/repository/npm-all/@ts-morph/common/-/common-0.24.0.tgz", @@ -4459,13 +4474,14 @@ } }, "node_modules/@types/node": { - "version": "24.5.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", + "version": "24.7.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@types/node/-/node-24.7.0.tgz", + "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~7.12.0" + "undici-types": "~7.14.0" } }, "node_modules/@types/resolve": { @@ -4514,17 +4530,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.0.tgz", - "integrity": "sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", + "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.44.0", - "@typescript-eslint/type-utils": "8.44.0", - "@typescript-eslint/utils": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/type-utils": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -4538,22 +4554,23 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.44.0", + "@typescript-eslint/parser": "^8.46.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/parser/-/parser-8.44.0.tgz", - "integrity": "sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/parser/-/parser-8.46.0.tgz", + "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.44.0", - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "engines": { @@ -4569,14 +4586,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/project-service/-/project-service-8.44.0.tgz", - "integrity": "sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", + "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.44.0", - "@typescript-eslint/types": "^8.44.0", + "@typescript-eslint/tsconfig-utils": "^8.46.0", + "@typescript-eslint/types": "^8.46.0", "debug": "^4.3.4" }, "engines": { @@ -4591,14 +4608,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/scope-manager/-/scope-manager-8.44.0.tgz", - "integrity": "sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", + "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0" + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4609,9 +4626,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.0.tgz", - "integrity": "sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", + "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", "dev": true, "license": "MIT", "engines": { @@ -4626,15 +4643,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/type-utils/-/type-utils-8.44.0.tgz", - "integrity": "sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", + "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0", - "@typescript-eslint/utils": "8.44.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -4651,9 +4668,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/types/-/types-8.44.0.tgz", - "integrity": "sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/types/-/types-8.46.0.tgz", + "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", "dev": true, "license": "MIT", "engines": { @@ -4665,16 +4682,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.0.tgz", - "integrity": "sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", + "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.44.0", - "@typescript-eslint/tsconfig-utils": "8.44.0", - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0", + "@typescript-eslint/project-service": "8.46.0", + "@typescript-eslint/tsconfig-utils": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4707,16 +4724,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/utils/-/utils-8.44.0.tgz", - "integrity": "sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/utils/-/utils-8.46.0.tgz", + "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.44.0", - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0" + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4750,13 +4767,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.44.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.0.tgz", - "integrity": "sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==", + "version": "8.46.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", + "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/types": "8.46.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5139,6 +5156,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5198,6 +5216,7 @@ "resolved": "https://artifact.devsnc.com/repository/npm-all/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5393,7 +5412,7 @@ "version": "1.0.7", "resolved": "https://artifact.devsnc.com/repository/npm-all/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -5406,16 +5425,16 @@ } }, "node_modules/babel-jest": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-jest/-/babel-jest-30.1.2.tgz", - "integrity": "sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.1.2", + "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.0", - "babel-preset-jest": "30.0.1", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" @@ -5424,7 +5443,7 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "node_modules/babel-plugin-istanbul": { @@ -5448,14 +5467,12 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "30.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", "@types/babel__core": "^7.20.5" }, "engines": { @@ -5490,20 +5507,20 @@ } }, "node_modules/babel-preset-jest": { - "version": "30.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.0.1", - "babel-preset-current-node-syntax": "^1.1.0" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "node_modules/balanced-match": { @@ -5535,9 +5552,9 @@ "optional": true }, "node_modules/baseline-browser-mapping": { - "version": "2.8.6", - "resolved": "https://artifact.devsnc.com/repository/npm-all/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", - "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "version": "2.8.12", + "resolved": "https://artifact.devsnc.com/repository/npm-all/baseline-browser-mapping/-/baseline-browser-mapping-2.8.12.tgz", + "integrity": "sha512-vAPMQdnyKCBtkmQA6FMCBvU9qFIppS3nzyXnEM+Lo2IAhG4Mpjv9cCxMudhgV3YdNNJv6TNqXy97dfRVL2LmaQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5715,37 +5732,22 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "version": "4.2.5", + "resolved": "https://artifact.devsnc.com/repository/npm-all/browserify-sign/-/browserify-sign-4.2.5.tgz", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", "dev": true, "license": "ISC", "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", + "elliptic": "^6.6.1", "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", + "parse-asn1": "^5.1.9", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/browserify-sign/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, "engines": { "node": ">= 0.10" } @@ -5798,9 +5800,9 @@ "license": "MIT" }, "node_modules/browserslist": { - "version": "4.26.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/browserslist/-/browserslist-4.26.2.tgz", - "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "version": "4.26.3", + "resolved": "https://artifact.devsnc.com/repository/npm-all/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dev": true, "funding": [ { @@ -5817,10 +5819,11 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.8.3", - "caniuse-lite": "^1.0.30001741", - "electron-to-chromium": "^1.5.218", + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, @@ -5967,7 +5970,7 @@ "version": "1.0.8", "resolved": "https://artifact.devsnc.com/repository/npm-all/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -6032,9 +6035,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001743", - "resolved": "https://artifact.devsnc.com/repository/npm-all/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", - "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "version": "1.0.30001748", + "resolved": "https://artifact.devsnc.com/repository/npm-all/caniuse-lite/-/caniuse-lite-1.0.30001748.tgz", + "integrity": "sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==", "dev": true, "funding": [ { @@ -6129,14 +6132,15 @@ } }, "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://artifact.devsnc.com/repository/npm-all/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "version": "1.0.7", + "resolved": "https://artifact.devsnc.com/repository/npm-all/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { "node": ">= 0.10" @@ -6291,14 +6295,17 @@ "license": "MIT" }, "node_modules/color": { - "version": "3.2.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "5.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/color/-/color-5.0.2.tgz", + "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", "license": "MIT", "optional": true, "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^3.0.1", + "color-string": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/color-convert": { @@ -6322,42 +6329,49 @@ "license": "MIT" }, "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "version": "2.1.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/color-string/-/color-string-2.1.2.tgz", + "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", "license": "MIT", "optional": true, "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-string/node_modules/color-name": { + "version": "2.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/color-name/-/color-name-2.0.2.tgz", + "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.20" } }, "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "3.1.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/color-convert/-/color-convert-3.1.2.tgz", + "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", "license": "MIT", "optional": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" } }, "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT", - "optional": true - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://artifact.devsnc.com/repository/npm-all/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "version": "2.0.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/color-name/-/color-name-2.0.2.tgz", + "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", "license": "MIT", "optional": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" + "engines": { + "node": ">=12.20" } }, "node_modules/commander": { @@ -6487,7 +6501,7 @@ "version": "1.0.3", "resolved": "https://artifact.devsnc.com/repository/npm-all/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/cors": { @@ -6719,7 +6733,7 @@ "version": "1.1.4", "resolved": "https://artifact.devsnc.com/repository/npm-all/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -6764,9 +6778,9 @@ } }, "node_modules/detect-libc": { - "version": "2.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/detect-libc/-/detect-libc-2.1.0.tgz", - "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "version": "2.1.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "optional": true, "engines": { @@ -6873,9 +6887,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.222", - "resolved": "https://artifact.devsnc.com/repository/npm-all/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz", - "integrity": "sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==", + "version": "1.5.231", + "resolved": "https://artifact.devsnc.com/repository/npm-all/electron-to-chromium/-/electron-to-chromium-1.5.231.tgz", + "integrity": "sha512-cyl6vqZGkEBnz/PmvFHn/u9G/hbo+FF2CNAOXriG87QOeLsUdifCZ9UbHNscE9wGdrC8XstNMli0CbQnZQ+fkA==", "dev": true, "license": "ISC" }, @@ -7058,20 +7072,21 @@ } }, "node_modules/eslint": { - "version": "9.36.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/eslint/-/eslint-9.36.0.tgz", - "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "version": "9.37.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.36.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -7574,18 +7589,18 @@ } }, "node_modules/expect": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/expect/-/expect-30.1.2.tgz", - "integrity": "sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.1.2", + "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -7977,7 +7992,7 @@ "version": "0.3.5", "resolved": "https://artifact.devsnc.com/repository/npm-all/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -8342,7 +8357,7 @@ "version": "1.0.2", "resolved": "https://artifact.devsnc.com/repository/npm-all/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -8367,7 +8382,7 @@ "version": "1.0.2", "resolved": "https://artifact.devsnc.com/repository/npm-all/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -8380,35 +8395,68 @@ } }, "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "version": "3.1.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "devOptional": true, "license": "MIT", "dependencies": { "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, + "node_modules/hash-base/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://artifact.devsnc.com/repository/npm-all/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "devOptional": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "devOptional": true, + "license": "MIT" + }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://artifact.devsnc.com/repository/npm-all/hash.js/-/hash.js-1.1.7.tgz", @@ -8721,7 +8769,7 @@ "version": "1.2.7", "resolved": "https://artifact.devsnc.com/repository/npm-all/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8897,7 +8945,7 @@ "version": "1.1.15", "resolved": "https://artifact.devsnc.com/repository/npm-all/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -8945,7 +8993,7 @@ "version": "2.0.5", "resolved": "https://artifact.devsnc.com/repository/npm-all/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/isbuffer": { @@ -9049,16 +9097,17 @@ } }, "node_modules/jest": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest/-/jest-30.1.3.tgz", - "integrity": "sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@jest/core": "30.1.3", - "@jest/types": "30.0.5", + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", "import-local": "^3.2.0", - "jest-cli": "30.1.3" + "jest-cli": "30.2.0" }, "bin": { "jest": "bin/jest.js" @@ -9076,14 +9125,14 @@ } }, "node_modules/jest-changed-files": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-changed-files/-/jest-changed-files-30.0.5.tgz", - "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "p-limit": "^3.1.0" }, "engines": { @@ -9207,29 +9256,29 @@ } }, "node_modules/jest-circus": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-circus/-/jest-circus-30.1.3.tgz", - "integrity": "sha512-Yf3dnhRON2GJT4RYzM89t/EXIWNxKTpWTL9BfF3+geFetWP4XSvJjiU1vrWplOiUkmq8cHLiwuhz+XuUp9DscA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/expect": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.1.0", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-runtime": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "p-limit": "^3.1.0", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -9239,21 +9288,21 @@ } }, "node_modules/jest-cli": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-cli/-/jest-cli-30.1.3.tgz", - "integrity": "sha512-G8E2Ol3OKch1DEeIBl41NP7OiC6LBhfg25Btv+idcusmoUSpqUkbrneMqbW9lVpI/rCKb/uETidb7DNteheuAQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.1.3", - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.1.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "yargs": "^17.7.2" }, "bin": { @@ -9313,34 +9362,34 @@ } }, "node_modules/jest-config": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-config/-/jest-config-30.1.3.tgz", - "integrity": "sha512-M/f7gqdQEPgZNA181Myz+GXCe8jXcJsGjCMXUzRj22FIXsZOyHNte84e0exntOvdPaeh9tA0w+B8qlP2fAezfw==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.1.3", - "@jest/types": "30.0.5", - "babel-jest": "30.1.2", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-circus": "30.1.3", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.1.2", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-runner": "30.1.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -9365,9 +9414,9 @@ } }, "node_modules/jest-config/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "version": "4.3.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -9381,25 +9430,25 @@ } }, "node_modules/jest-diff": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-diff/-/jest-diff-30.1.2.tgz", - "integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "30.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-docblock/-/jest-docblock-30.0.1.tgz", - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, "license": "MIT", "dependencies": { @@ -9410,56 +9459,56 @@ } }, "node_modules/jest-each": { - "version": "30.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-each/-/jest-each-30.1.0.tgz", - "integrity": "sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "chalk": "^4.1.2", - "jest-util": "30.0.5", - "pretty-format": "30.0.5" + "jest-util": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-environment-node/-/jest-environment-node-30.1.2.tgz", - "integrity": "sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/fake-timers": "30.1.2", - "@jest/types": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.1.0" + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-haste-map/-/jest-haste-map-30.1.0.tgz", - "integrity": "sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "jest-worker": "30.1.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, @@ -9471,49 +9520,49 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz", - "integrity": "sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz", - "integrity": "sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "jest-diff": "30.1.2", - "pretty-format": "30.0.5" + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "30.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-message-util/-/jest-message-util-30.1.0.tgz", - "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" }, @@ -9522,15 +9571,15 @@ } }, "node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-util": "30.0.5" + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -9565,18 +9614,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve/-/jest-resolve-30.1.3.tgz", - "integrity": "sha512-DI4PtTqzw9GwELFS41sdMK32Ajp3XZQ8iygeDMWkxlRhm7uUTOFSZFVZABFuxr0jvspn8MAYy54NxZCsuCTSOw==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.2.0", "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -9585,46 +9634,46 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.3.tgz", - "integrity": "sha512-DNfq3WGmuRyHRHfEet+Zm3QOmVFtIarUOQHHryKPc0YL9ROfgWZxl4+aZq/VAzok2SS3gZdniP+dO4zgo59hBg==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.1.2" + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runner/-/jest-runner-30.1.3.tgz", - "integrity": "sha512-dd1ORcxQraW44Uz029TtXj85W11yvLpDuIzNOlofrC8GN+SgDlgY4BvyxJiVeuabA1t6idjNbX59jLd2oplOGQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", - "@jest/environment": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.1.2", - "jest-haste-map": "30.1.0", - "jest-leak-detector": "30.1.0", - "jest-message-util": "30.1.0", - "jest-resolve": "30.1.3", - "jest-runtime": "30.1.3", - "jest-util": "30.0.5", - "jest-watcher": "30.1.3", - "jest-worker": "30.1.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -9633,32 +9682,32 @@ } }, "node_modules/jest-runtime": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runtime/-/jest-runtime-30.1.3.tgz", - "integrity": "sha512-WS8xgjuNSphdIGnleQcJ3AKE4tBKOVP+tKhCD0u+Tb2sBmsU8DxfbBpZX7//+XOz81zVs4eFpJQwBNji2Y07DA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/fake-timers": "30.1.2", - "@jest/globals": "30.1.2", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -9667,9 +9716,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.1.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-snapshot/-/jest-snapshot-30.1.2.tgz", - "integrity": "sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", "dev": true, "license": "MIT", "dependencies": { @@ -9678,20 +9727,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.1.2", + "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.1.2", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", - "babel-preset-current-node-syntax": "^1.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", - "expect": "30.1.2", + "expect": "30.2.0", "graceful-fs": "^4.2.11", - "jest-diff": "30.1.2", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", - "pretty-format": "30.0.5", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -9713,13 +9762,13 @@ } }, "node_modules/jest-util": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-util/-/jest-util-30.0.5.tgz", - "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", @@ -9731,9 +9780,9 @@ } }, "node_modules/jest-util/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "version": "4.3.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -9747,18 +9796,18 @@ } }, "node_modules/jest-validate": { - "version": "30.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-validate/-/jest-validate-30.1.0.tgz", - "integrity": "sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -9778,19 +9827,19 @@ } }, "node_modules/jest-watcher": { - "version": "30.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-watcher/-/jest-watcher-30.1.3.tgz", - "integrity": "sha512-6jQUZCP1BTL2gvG9E4YF06Ytq4yMb4If6YoQGRR6PpjtqOXSP3sKe2kqwB6SQ+H9DezOfZaSLnmka1NtGm3fCQ==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "string-length": "^4.0.2" }, "engines": { @@ -9798,15 +9847,15 @@ } }, "node_modules/jest-worker": { - "version": "30.1.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-worker/-/jest-worker-30.1.0.tgz", - "integrity": "sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -10815,9 +10864,9 @@ "optional": true }, "node_modules/napi-postinstall": { - "version": "0.3.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/napi-postinstall/-/napi-postinstall-0.3.3.tgz", - "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", + "version": "0.3.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, "license": "MIT", "bin": { @@ -10877,9 +10926,9 @@ "license": "MIT" }, "node_modules/node-abi": { - "version": "3.77.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/node-abi/-/node-abi-3.77.0.tgz", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", + "version": "3.78.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/node-abi/-/node-abi-3.78.0.tgz", + "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", "license": "MIT", "optional": true, "dependencies": { @@ -10955,9 +11004,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://artifact.devsnc.com/repository/npm-all/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "version": "2.0.23", + "resolved": "https://artifact.devsnc.com/repository/npm-all/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", "dev": true, "license": "MIT" }, @@ -11315,31 +11364,16 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://artifact.devsnc.com/repository/npm-all/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "version": "5.1.9", + "resolved": "https://artifact.devsnc.com/repository/npm-all/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", "dev": true, "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-asn1/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", + "pbkdf2": "^3.1.5", "safe-buffer": "^5.2.1" }, "engines": { @@ -11459,55 +11493,21 @@ "optional": true }, "node_modules/pbkdf2": { - "version": "3.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/pbkdf2/-/pbkdf2-3.1.3.tgz", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "version": "3.1.5", + "resolved": "https://artifact.devsnc.com/repository/npm-all/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, "license": "MIT", "dependencies": { - "create-hash": "~1.1.3", + "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", + "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=0.12" - } - }, - "node_modules/pbkdf2/node_modules/create-hash": { - "version": "1.1.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" - } - }, - "node_modules/pbkdf2/node_modules/hash-base": { - "version": "2.0.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/pbkdf2/node_modules/ripemd160": { - "version": "2.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" + "node": ">= 0.10" } }, "node_modules/picocolors": { @@ -11523,6 +11523,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -11622,7 +11623,7 @@ "version": "1.1.0", "resolved": "https://artifact.devsnc.com/repository/npm-all/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11682,9 +11683,9 @@ } }, "node_modules/pretty-format": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/pretty-format/-/pretty-format-30.0.5.tgz", - "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "version": "30.2.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", "dependencies": { @@ -11740,7 +11741,7 @@ "version": "2.0.1", "resolved": "https://artifact.devsnc.com/repository/npm-all/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/promise-retry": { @@ -12197,22 +12198,26 @@ } }, "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "version": "2.0.3", + "resolved": "https://artifact.devsnc.com/repository/npm-all/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "dev": true, "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/rollup": { - "version": "4.52.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/rollup/-/rollup-4.52.0.tgz", - "integrity": "sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==", + "version": "4.52.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/rollup/-/rollup-4.52.4.tgz", + "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -12224,28 +12229,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.0", - "@rollup/rollup-android-arm64": "4.52.0", - "@rollup/rollup-darwin-arm64": "4.52.0", - "@rollup/rollup-darwin-x64": "4.52.0", - "@rollup/rollup-freebsd-arm64": "4.52.0", - "@rollup/rollup-freebsd-x64": "4.52.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.0", - "@rollup/rollup-linux-arm-musleabihf": "4.52.0", - "@rollup/rollup-linux-arm64-gnu": "4.52.0", - "@rollup/rollup-linux-arm64-musl": "4.52.0", - "@rollup/rollup-linux-loong64-gnu": "4.52.0", - "@rollup/rollup-linux-ppc64-gnu": "4.52.0", - "@rollup/rollup-linux-riscv64-gnu": "4.52.0", - "@rollup/rollup-linux-riscv64-musl": "4.52.0", - "@rollup/rollup-linux-s390x-gnu": "4.52.0", - "@rollup/rollup-linux-x64-gnu": "4.52.0", - "@rollup/rollup-linux-x64-musl": "4.52.0", - "@rollup/rollup-openharmony-arm64": "4.52.0", - "@rollup/rollup-win32-arm64-msvc": "4.52.0", - "@rollup/rollup-win32-ia32-msvc": "4.52.0", - "@rollup/rollup-win32-x64-gnu": "4.52.0", - "@rollup/rollup-win32-x64-msvc": "4.52.0", + "@rollup/rollup-android-arm-eabi": "4.52.4", + "@rollup/rollup-android-arm64": "4.52.4", + "@rollup/rollup-darwin-arm64": "4.52.4", + "@rollup/rollup-darwin-x64": "4.52.4", + "@rollup/rollup-freebsd-arm64": "4.52.4", + "@rollup/rollup-freebsd-x64": "4.52.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", + "@rollup/rollup-linux-arm-musleabihf": "4.52.4", + "@rollup/rollup-linux-arm64-gnu": "4.52.4", + "@rollup/rollup-linux-arm64-musl": "4.52.4", + "@rollup/rollup-linux-loong64-gnu": "4.52.4", + "@rollup/rollup-linux-ppc64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-musl": "4.52.4", + "@rollup/rollup-linux-s390x-gnu": "4.52.4", + "@rollup/rollup-linux-x64-gnu": "4.52.4", + "@rollup/rollup-linux-x64-musl": "4.52.4", + "@rollup/rollup-openharmony-arm64": "4.52.4", + "@rollup/rollup-win32-arm64-msvc": "4.52.4", + "@rollup/rollup-win32-ia32-msvc": "4.52.4", + "@rollup/rollup-win32-x64-gnu": "4.52.4", + "@rollup/rollup-win32-x64-msvc": "4.52.4", "fsevents": "~2.3.2" } }, @@ -12562,7 +12567,7 @@ "version": "1.2.2", "resolved": "https://artifact.devsnc.com/repository/npm-all/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -12756,23 +12761,6 @@ "simple-concat": "^1.0.0" } }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://artifact.devsnc.com/repository/npm-all/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.4", - "resolved": "https://artifact.devsnc.com/repository/npm-all/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "license": "MIT", - "optional": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://artifact.devsnc.com/repository/npm-all/slash/-/slash-3.0.0.tgz", @@ -12978,8 +12966,8 @@ "version": "1.3.0", "resolved": "https://artifact.devsnc.com/repository/npm-all/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "devOptional": true, "license": "MIT", + "optional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -13502,10 +13490,10 @@ "license": "BSD-3-Clause" }, "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", - "dev": true, + "version": "1.2.2", + "resolved": "https://artifact.devsnc.com/repository/npm-all/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "devOptional": true, "license": "MIT", "dependencies": { "isarray": "^2.0.5", @@ -13670,6 +13658,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -13713,7 +13702,8 @@ "resolved": "https://artifact.devsnc.com/repository/npm-all/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -13803,7 +13793,7 @@ "version": "1.0.3", "resolved": "https://artifact.devsnc.com/repository/npm-all/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -13829,11 +13819,12 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://artifact.devsnc.com/repository/npm-all/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://artifact.devsnc.com/repository/npm-all/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13867,9 +13858,9 @@ } }, "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "version": "7.14.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", "devOptional": true, "license": "MIT" }, @@ -14091,7 +14082,7 @@ "version": "1.1.19", "resolved": "https://artifact.devsnc.com/repository/npm-all/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -14463,6 +14454,7 @@ "resolved": "https://artifact.devsnc.com/repository/npm-all/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 2721166..66e9321 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@modesty/fluent-mcp", - "version": "0.0.16", + "version": "0.0.17", "description": "MCP server for Fluent (ServiceNow SDK)", "keywords": [ "Servicenow SDK", @@ -49,32 +49,32 @@ } }, "dependencies": { - "@modelcontextprotocol/sdk": "1.18.1", - "@servicenow/sdk": "4.0.1", + "@modelcontextprotocol/sdk": "1.19.1", + "@servicenow/sdk": "4.0.2", "zod": "^3.25.76", "zod-to-json-schema": "^3.24.6" }, "devDependencies": { - "@eslint/js": "^9.36.0", + "@eslint/js": "^9.37.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-eslint": "^9.0.5", "@rollup/plugin-json": "^6.0.1", - "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-node-resolve": "^16.0.2", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.4", "@types/jest": "^30.0.0", - "@types/node": "^24.5.2", + "@types/node": "^24.7.0", "@typescript-eslint/eslint-plugin": "^8.44.0", "@typescript-eslint/parser": "^8.44.0", - "eslint": "^9.36.0", - "jest": "^30.1.3", - "rollup": "^4.52.0", + "eslint": "^9.37.0", + "jest": "^30.2.0", + "rollup": "^4.52.4", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-sourcemaps": "^0.6.3", "ts-jest": "^29.4.4", "ts-node": "^10.9.2", "tslib": "^2.8.1", - "typescript": "~5.9.2" + "typescript": "~5.9.3" }, "publishConfig": { "access": "public" diff --git a/res/instruct/fluent_instruct_acl.md b/res/instruct/fluent_instruct_acl.md index 6409b64..1dd2db9 100644 --- a/res/instruct/fluent_instruct_acl.md +++ b/res/instruct/fluent_instruct_acl.md @@ -1,6 +1,6 @@ # Instructions for Fluent Acl (Access Control List) API Always reference the Acl API specifications for more details. -1. when `type` is `record`, provide the `table` and `field` properties, `applies_to` is only applicable to `record` type ACL too but optional and `name` is not applicable. +1. when `type` is `record`, provide the `table` and `field` properties, `appliesTo` is only applicable to `record` type ACL too but optional and `name` is not applicable. 2. `roles` property is an array of Record<'sys_user_role'>, either sys_ids or Role objects. If using a new role, use the Role object. If using an existing role, use function like `get_sys_id('sys_user_role', 'name=ex_role')` - no `label` field for roles. 3. The `script` property is optional and should only be used for advanced ACLs where the condition cannot be expressed using just the `roles` and `condition` fields. 4. a `named ACL` can be created by providing a value for the `$id` , `type` and `name` properties. diff --git a/res/instruct/fluent_instruct_application-menu.md b/res/instruct/fluent_instruct_application-menu.md index e4362b6..5458d55 100644 --- a/res/instruct/fluent_instruct_application-menu.md +++ b/res/instruct/fluent_instruct_application-menu.md @@ -7,7 +7,7 @@ Follow the below instructions for top Application Menu 3. The `role` are defined by an array consisting of Role objects or role names that already exist on the platform. Follow the below instructions for Application Submenu under top Application Menu. Application Submenu is also known as app module or application module at Servicenow platform menu navigator. -1. Identify the right value for `link_type` column from the below combination of it's label and value, as per the user prompts, instructions or devrequest. +1. Identify the right value for `linkType` column from the below combination of it's label and value, as per the user prompts, instructions or devrequest. 2. The below combinations format is " or "~"". For example: "List of Records"~"LIST" - label is `List of Records` and value is `LIST`. "None"~"" "Separator"~"SEPARATOR" @@ -26,7 +26,7 @@ Follow the below instructions for Application Submenu under top Application Menu "Map Page"~"MAP" "Run a Report"~"REPORT" "URL (from Arguments:)"~"DIRECT" -3. If `link_type` is not specified in user instructions or prompts, then completely skip the field from code generation. -4. `assessment` is link type assessment and is applicable and mandatory only when `link_type` is `ASSESSMENT`. -5. `name` is table associated to link type and is applicable and mandatory only when `link_type` is `FILTER` or `LIST` or `NEW` or `SEARCH` or `DETAIL`. -6. `query` is link type arguments and is mandatory only when `link_type` is `DOC_LINK` or `HTML` or `SCRIPT` or `DIRECT`. \ No newline at end of file +3. If `linkType` is not specified in user instructions or prompts, then completely skip the field from code generation. +4. `assessment` is link type assessment and is applicable and mandatory only when `linkType` is `ASSESSMENT`. +5. `name` is table associated to link type and is applicable and mandatory only when `linkType` is `FILTER` or `LIST` or `NEW` or `SEARCH` or `DETAIL`. +6. `query` is link type arguments and is mandatory only when `linkType` is `DOC_LINK` or `HTML` or `SCRIPT` or `DIRECT`. \ No newline at end of file diff --git a/res/instruct/fluent_instruct_atf.md b/res/instruct/fluent_instruct_atf.md index a2d9907..4aed54c 100644 --- a/res/instruct/fluent_instruct_atf.md +++ b/res/instruct/fluent_instruct_atf.md @@ -4,7 +4,7 @@ To generate ATF (Automated Test Framework) Test in Fluent, ALWAYS start respondi // Fluent ATF Test import { Test } from '@servicenow/sdk/core' import '@servicenow/sdk-core/global' - Test({ // all properties are mandatory +Test({ // all properties are mandatory $id: Now.ID[''], // fill in a valid GUID string or the name of the test name: 'Fill in a name for the test', // string description: 'Fill in a description of the test', // string @@ -32,14 +32,14 @@ import '@servicenow/sdk-core/global' // atf.form.openExistingRecord({ // $id: Now.ID['0004'], // id the test step in the test suite // table: 'incident', - // recordId: outputOfSubmit.record_id, // use the declared variable to fill in value + // recordId: outputOfSubmit.recordId, // use the declared variable to fill in value // formUI: 'service_operations_workspace', // view: '', // selectedTabIndex: 0, // }) // atf.server.log({ // $id: Now.ID['0005'], // id the test step in the test suite - // log: `record opened: ${outputOfSubmit.record_id}` // explicitly use ${} for embedding function calls or variables in strings Template Literals + // log: `record opened: ${outputOfSubmit.recordId}` // explicitly use ${} for embedding function calls or variables in strings Template Literals // }) // Additional steps... }) diff --git a/res/instruct/fluent_instruct_business-rule.md b/res/instruct/fluent_instruct_business-rule.md index a868e71..23d49a7 100644 --- a/res/instruct/fluent_instruct_business-rule.md +++ b/res/instruct/fluent_instruct_business-rule.md @@ -2,6 +2,6 @@ Always reference the Business Rule API specifications for more details. 1. The `when` field is used to specify when the business rule should be executed. The only valid values for `when` are: before, after, async, display. 2. The `action` field is used to specify the CRUD operations that the business rule applies to. The only valid values for `action` are: insert, update, delete, query. -3. The `add_message` field indicates whether or not to display a message on the UI when the business rule runs. `add_message` === `true` means a message will be displayed. -4. The `condition` and `filter_condition` must be valid ServiceNow encoded query strings. +3. The `addMessage` field indicates whether or not to display a message on the UI when the business rule runs. `addMessage` === `true` means a message will be displayed. +4. The `condition` and `filterCondition` must be valid ServiceNow encoded query strings. 5. For Business Rule updates, do not modify the `script` property unless explicitly specified. diff --git a/res/instruct/fluent_instruct_cross-scope-privilege.md b/res/instruct/fluent_instruct_cross-scope-privilege.md index 43f4b88..284b529 100644 --- a/res/instruct/fluent_instruct_cross-scope-privilege.md +++ b/res/instruct/fluent_instruct_cross-scope-privilege.md @@ -1,4 +1,4 @@ # Instructions for Fluent Cross-Scope Privilege API Always reference the Cross-Scope Privilege API specifications for more details. -1. If target is a table (`target_type` is `sys_db_object`), the supported operations are `create`, `read`, `write`, and `delete`. If target is a script or script include, the only supported operation is `execute`. +1. If target is a table (`targetType` is `sys_db_object`), the supported operations are `create`, `read`, `write`, and `delete`. If target is a script or script include, the only supported operation is `execute`. 2. The status `requested` occurs when an application attempts to access a resource set to Caller Restriction, and requires an admin user to manually change to `allowed` or `denied`. diff --git a/res/instruct/fluent_instruct_form.md b/res/instruct/fluent_instruct_form.md index f2856a6..d5275b1 100644 --- a/res/instruct/fluent_instruct_form.md +++ b/res/instruct/fluent_instruct_form.md @@ -4,8 +4,8 @@ Always reference the Form API specifications for more details. 2. To create a new Form view from scratch, you must utilize ALL of the following types of records: `sys_ui_form`, `sys_ui_section`, `sys_ui_form_section`, and `sys_ui_element` - `sys_ui_form` is a container for multiple form sections - `sys_ui_section` is a reusable container for form elements - - `sys_ui_form_section` tracks the m2m relationships between sections and forms. Each section in the form MUST have a corresponding `sys_ui_form_section` record - - `sys_ui_element` tracks the fields that will be displayed in a section + - `sys_ui_form_section` tracks the m2m relationships between sections and forms. Each section in the form MUST have a corresponding `sys_ui_form_section` record + - `sys_ui_element` tracks the fields that will be displayed in a section 3. Typically, the first section in a form has no `caption`, but the following sections do have a `caption` that serves as a section title 4. `sys_ui_element` records usually store ordinary fields. However, you can also add column breaks between fields by using `.split` and `.end_split`. 5. Exclude any scripts or duplicate code from your output unless explicitly instructed in the prompt. diff --git a/res/instruct/fluent_instruct_list.md b/res/instruct/fluent_instruct_list.md index a445e85..ff83c28 100644 --- a/res/instruct/fluent_instruct_list.md +++ b/res/instruct/fluent_instruct_list.md @@ -1,5 +1,6 @@ # Instructions for Fluent List API Always reference the List API specifications for more details. 1. For the `view` field, you must either use `default_view` or create a custom view using the `Record` plugin. - - In order to use default_view, you must first import it from '@servicenow/sdk/core'. + - In order to use `default_view`, you must first import it from '@servicenow/sdk/core'. - In order to use a custom view, you must import the `Record` plugin from '@servicenow/sdk/core' and create a record in the `sys_ui_view` table. +2. $id property is deprecated since v4.0.0. diff --git a/res/instruct/fluent_instruct_role.md b/res/instruct/fluent_instruct_role.md index 1851e5c..2a6a679 100644 --- a/res/instruct/fluent_instruct_role.md +++ b/res/instruct/fluent_instruct_role.md @@ -1,6 +1,6 @@ # Instructions on Fluent Role API Always reference the Role API specification for more details. -1. `$id`is mandatory and should always be present, format should be `$id: Now.ID['']`, where '' is to be replaced with the role name as per user prompt or instructions. -2. `contains_roles` property is an array of Record<'sys_user_role'>, either sys_ids or Role objects. It is optional, it indicates other Role objects that this role contains. If using a new role, use the Role object. If using an existing role, use function like `get_sys_id('sys_user_role', 'name=ex_role')` - no `label` field for roles. -3. `elevated_privilege` is default to `false`, when it's `true`, it means user must manually accept the responsibility of using the role before you can access its features. -4. `can_delegate` is default to `true`, when it's `false`, it means the role cannot be delegated to other users. +1. `$id` is deprecated since v4.0.0. +2. `containsRoles` property is an array of Record<'sys_user_role'>, either sys_ids or Role objects. It is optional, it indicates other Role objects that this role contains. If using a new role, use the Role object. If using an existing role, use function like `get_sys_id('sys_user_role', 'name=ex_role')` - no `label` field for roles. +3. `elevatedPrivilege` is default to `false`. `true` means user must manually accept the responsibility of using the role before you can access its features. +4. `canDelegate` is default to `true`. `false` means the role cannot be delegated to other users. diff --git a/res/instruct/fluent_instruct_scheduled-script.md b/res/instruct/fluent_instruct_scheduled-script.md index 9b9d2e6..054c742 100644 --- a/res/instruct/fluent_instruct_scheduled-script.md +++ b/res/instruct/fluent_instruct_scheduled-script.md @@ -1,8 +1,8 @@ # Instructions on Scheduled Script Execution API -Always reference the Record API specification for more details. -1. The second parameter of the get_sys_id function for `business_calendar` should always query for both `calendar_name` and `label` field, and the query value can only be one of the following: `Year`, `Quarter`, `Month`, `Week`. ex: `calendar_name=Month^ORlabel=Month`. -2. `run_period`, `run_start` and `run_time` should all follow the following date time format: `YYYY-MM-DD HH-MM-SS`. -3. `run_type` can take any 1 of these values: `daily` | `weekly` | `monthly` | `periodically` | `once` | `on_demand` | `business_calendar_start` | `business_calendar_end`. -4. `time_zone` can take any 1 of these values: `floating` | `US/Hawaii` | `Canada Pacific` | `US/Pacific` | `Canada/Mountain` | `US/Mountain` | `US/Arizona` | `Canada/Central` | `US/Central` | `Canada/Eastern` | `US/Eastern` | `Canada/Atlantic` | `Europe/Dublin` | `Europe/London` | `GMT` | `Europe/Amsterdam` | `Europe/Berlin` | `Europe/Brussels` | `Europe/Copenhagan` | `Europe/Madrid` | `Europe/Paris` | `Europe/Rome` | `Europe/Stockholm` | `Europe/Zurich` | `Hongkong`. -5. `run_dayofweek` can take any value between `1` and `7`. `1` is Monday, `2` is Tuesday, `3` is Wednesday, `4` is Thursday, `5` is Friday, `6` is Saturday, and `7` is Sunday. -6. `run_period` is calculated by the time difference between its value and January 1st 1970 at midnight. ex: a job that runs every 2 and a half days will have a `run_period` of `1970-01-03 12:00:00`. +Always reference the Record API specification for more details. +1. The second parameter of the get_sys_id function for `businessCalendar` should always query for both `calendar_name` and `label` field, and the query value can only be one of the following: `Year`, `Quarter`, `Month`, `Week`. ex: `calendar_name=Month^ORlabel=Month`. +2. `runPeriod`, `runStart` and `runTime` should all follow the following date time format: `YYYY-MM-DD HH-MM-SS`. +3. `runType` can take any 1 of these values: `daily` | `weekly` | `monthly` | `periodically` | `once` | `on_demand` | `business_calendar_start` | `business_calendar_end`. +4. `timeZone` can take any 1 of these values: `floating` | `US/Hawaii` | `Canada Pacific` | `US/Pacific` | `Canada/Mountain` | `US/Mountain` | `US/Arizona` | `Canada/Central` | `US/Central` | `Canada/Eastern` | `US/Eastern` | `Canada/Atlantic` | `Europe/Dublin` | `Europe/London` | `GMT` | `Europe/Amsterdam` | `Europe/Berlin` | `Europe/Brussels` | `Europe/Copenhagan` | `Europe/Madrid` | `Europe/Paris` | `Europe/Rome` | `Europe/Stockholm` | `Europe/Zurich` | `Hongkong`. +5. `runDayofweek` can take any value between `1` and `7`. `1` is Monday, `2` is Tuesday, `3` is Wednesday, `4` is Thursday, `5` is Friday, `6` is Saturday, and `7` is Sunday. +6. `runPeriod` is calculated by the time difference between its value and January 1st 1970 at midnight. ex: a job that runs every 2 and a half days will have a `runPeriod` of `1970-01-03 12:00:00`. diff --git a/res/instruct/fluent_instruct_script-action.md b/res/instruct/fluent_instruct_script-action.md new file mode 100644 index 0000000..59e21c7 --- /dev/null +++ b/res/instruct/fluent_instruct_script-action.md @@ -0,0 +1,9 @@ +# Instructions for Fluent Script Action API +Always reference the Script Action API specifications for more details. +1. Use the `ScriptAction` API to define a server-side script that executes when a specific event is triggered. +2. The `eventName` property must match the name of a registered event in the Event Registry (`sysevent_registry`). +3. The `script` property should be a function that contains the JavaScript code to be executed. This script has access to the `current` (the record that triggered the event) and `event` (the event object itself) variables. You can provide an inline arrow function or import a function from another module. +4. By default, Script Actions run asynchronously. This is a best practice to avoid performance impacts on user transactions. +5. Use the `event.parm1` and `event.parm2` properties to pass additional information from the triggering script to the Script Action. +6. The `conditionScript` is a string containing a server-side script that must evaluate to true for the action to execute (e.g., `"gs.hasRole('admin')"`). +7. Before creating a Script Action, ensure the event it responds to is registered in the ServiceNow Event Registry. \ No newline at end of file diff --git a/res/instruct/fluent_instruct_script-include.md b/res/instruct/fluent_instruct_script-include.md index 09e02c2..6218070 100644 --- a/res/instruct/fluent_instruct_script-include.md +++ b/res/instruct/fluent_instruct_script-include.md @@ -1,3 +1,10 @@ # Instructions for Fluent Script Include API Always reference the Script Include API specifications for more details. -1. `caller_access` property only applies when `access` is set to `public` + +**Key Changes in v4:** +* Import the API as `import { ScriptInclude } from '@servicenow/sdk/core';`. +* The `script` property can now use the `Now.include()` helper to include a script from a file (e.g., `script: Now.include("./SampleClass.server.js")`). + +**Best Practices:** +1. `callerAccess` property only applies when `accessibleFrom` is set to `package_private`. +2. Use `Now.include()` to keep your script logic in separate files for better organization and maintainability. \ No newline at end of file diff --git a/res/instruct/fluent_instruct_scripted-rest.md b/res/instruct/fluent_instruct_scripted-rest.md index b40794c..6a40814 100644 --- a/res/instruct/fluent_instruct_scripted-rest.md +++ b/res/instruct/fluent_instruct_scripted-rest.md @@ -1,7 +1,7 @@ # Instructions for Fluent Scripted REST API Always reference the Scripted REST API specifications for more details. 1. Each Scripted REST API can contain more than one Route, each route is corresponding to HTTP verb. -2. To not `enforce_acl` set this field to be an empty array, otherwise specify a list of ACL object ot sys_ids +2. To not `enforceAcl` set this field to be an empty array, otherwise specify a list of ACL object ot sys_ids 3. The `consumes` field contains a list of media types/resources that the API can consume, default values here are: application/json, application/xml, text/xml. ACL objects from the fluent ACL spec. 4. The `produces` field contains a list of media types/resources that the API can produce, default values here are: application/json, application/xml, text/xml. diff --git a/res/instruct/fluent_instruct_service-portal.md b/res/instruct/fluent_instruct_service-portal.md new file mode 100644 index 0000000..1266403 --- /dev/null +++ b/res/instruct/fluent_instruct_service-portal.md @@ -0,0 +1,64 @@ +# Instructions for Fluent Service Portal APIs + +Always reference the Service Portal API specifications for more details. + +## SpWidget API + +1. **Templates and Controllers**: + - Use AngularJS data binding: `{{c.data.property}}` (controller accessible as `c` by default) + - Override controller alias with `controllerAs` property if needed + - Use `cssTemplate` for simple styles, `sassSrc` for complex SCSS with variables + +2. **Scripts**: + - **Client script**: AngularJS controller function. Use `c.server.get()` or `c.server.update()` to communicate with server + - **Server script**: Runs before rendering. Access `input`, store data in `data`, use `options` for widget configuration + - **Link function**: Only for direct DOM manipulation. Avoid unless necessary + +3. **Configuration**: + - Define `optionSchema` as JSON array for configurable widgets: `{name, label, type, default_value}` + - Use `field_list` to specify which fields from `dataTable` are available + - Set `controllable: true` to allow widget communication via events (`$scope.$on()`) + +4. **Security**: + - Set `roles` property to restrict visibility + - Use `public: true` for unauthenticated access + - Always check `gs.hasRole()` in server script for sensitive operations + +5. **Dependencies**: + - Use `scriptIncludes` array for server-side script includes + - Create SPWidgetDependency records for client-side libraries + +## SPWidgetDependency API + +1. **Loading**: + - Use `order` to control load sequence (lower numbers load first, default: 100) + - Separate multiple URLs with newlines in `jsIncludes` or `cssIncludes` + +2. **Angular Modules**: + - Set `angularModuleName` when including Angular modules + - Module name must match the actual Angular module name + +3. **Inline Code**: + - Include inline JavaScript or CSS directly for small utilities + - Use `version` property to track external library versions + +## SpAngularProvider API + +1. **Provider Types** (lowercase): + - **service**: Business logic, instantiated as singleton with `new` + - **factory**: Returns object/function, more flexible than service + - **directive**: Reusable UI components. Use `restrict: 'E'` for elements, `'A'` for attributes + - **filter**: Data transformation in templates. Keep pure functions + - **constant**: Immutable configuration values + - **value**: Simple values that can be overridden + - **provider**: Advanced configuration with `$get` method + +2. **Best Practices**: + - Inject dependencies as function parameters: `$http`, `$q`, `$timeout`, `$sce` + - Set `restricted: true` and specify `roles` for role-based access + - Name services/factories in PascalCase, directives/filters in camelCase + +3. **Common Issues**: + - Avoid heavy computations in filters (run on every digest cycle) + - Don't manipulate DOM in services/factories - use directives + - Always handle promise rejections with error callbacks diff --git a/res/instruct/fluent_instruct_table.md b/res/instruct/fluent_instruct_table.md index 66b81ec..8ae1d09 100644 --- a/res/instruct/fluent_instruct_table.md +++ b/res/instruct/fluent_instruct_table.md @@ -7,7 +7,7 @@ Always reference the Table API to create Table (Dictionary) for more details. 5. The `index` takes an array of column names to generate indexes in bootstrap.xml. To specify a composite index, add multiple column names to 'element' array. 6. Columns are specified as additional function calls within the Table API on the `schema` key. The `name` field is taken from the variable name or object key provided to the Table API. 7. For creating attributes refer to the provided attributes in the table spec. -8. Here are valid `function_definition` functions that Column objects can use: [ +8. Here are valid `functionDefinition` functions that Column objects can use: [ 'add', 'coalesce', 'concat', diff --git a/res/instruct/fluent_instruct_ui-action.md b/res/instruct/fluent_instruct_ui-action.md index b4c015b..6cfb146 100644 --- a/res/instruct/fluent_instruct_ui-action.md +++ b/res/instruct/fluent_instruct_ui-action.md @@ -1,10 +1,86 @@ -# Instructions for Fluent UI Action Spec API -1. Always reference the UI Action API specifications for more details. -2. Every `action_name` should always be prefixed with 'sysverb_'. -3. Set field `client` to true only when `onlick` field is specified with a function name. Else, its always default to false. -4. The function name in field `onlick` should always match the function name as defined in `client_script_v2`, which is the inline Servicenow client side scripting. -5. If protection policy is specified to be set, then map to field `sys_policy`. Else, completely skip the field from code generation. -6. Workspace form button corresponds to field name `form_button_v2`, hence, when specified, set value in `form_button_v2` field. -7. Workspace form menu corresponds to field name `form_menu_button_v2`, hence, when specified, set value in `form_menu_button_v2` field. -8. Set `format_for_configurable_workspace` to true only if workspace form button and workspace form menu is enabled, else, it's false. -9. List V2 compatible corresponds to `ui11_compatible` and List V3 compatible corresponds to `ui16_compatible`, hence, when specified, set value in appropriate field. \ No newline at end of file +# Instructions for Fluent UI Action API + +Always reference the UI Action API specifications for more details. + +## Import Statement + +1. **Always import UiAction**: Use `import { UiAction } from '@servicenow/sdk/core'` - the dedicated `UiAction` construct provides better type safety than the generic `Record` API. + +## Naming Conventions + +1. **actionName prefix**: Every `actionName` should always be prefixed with 'sysverb_' (e.g., `sysverb_save`, `sysverb_custom_action`). +1. **Unique identifiers**: Use descriptive `$id` values with `Now.ID['unique_identifier']` to avoid conflicts. + +## API Structure + +1. **Nested objects**: The UiAction API uses nested objects for logical grouping: `form`, `list`, `client`, and `workspace` objects contain related properties. +1. **Optional objects**: All nested objects are optional - only include them when you need to set properties within them. + +## Form Display Properties + +1. **form object**: Use the `form` object to control form-level display: `{ showButton, showLink, showContextMenu, style }`. +1. **showButton**: Set `form.showButton: true` to display as form button. +1. **showLink**: Set `form.showLink: true` to display as related link on form. +1. **showContextMenu**: Set `form.showContextMenu: true` to display in form context menu (right-click). +1. **style**: Use `form.style` to set button styling: `'primary'`, `'destructive'`, or `'unstyled'`. + +## List Display Properties + +1. **list object**: Use the `list` object to control list-level display: `{ showButton, showLink, showContextMenu, style, showListChoice, showBannerButton, showSaveWithFormButton }`. +1. **showButton**: Set `list.showButton: true` to display as list button. +1. **showListChoice**: Set `list.showListChoice: true` to display in list choice menu. +1. **showBannerButton**: Set `list.showBannerButton: true` to display as banner button. +1. **showContextMenu**: Set `list.showContextMenu: true` to display in list context menu. + +## Client-Side Scripting + +1. **client object**: Use the `client` object for client-side script configuration: `{ isClient, isUi11Compatible, isUi16Compatible, onClick }`. +1. **isClient**: Set `client.isClient: true` when using client-side scripts. +1. **onClick**: Use `client.onClick` to specify the function name to execute (e.g., `'onClickFunction(g_form)'`). +1. **script property**: The `script` property (at root level) contains the actual function definition that will be called by onClick. +1. **Return values**: Client scripts should return `true` to proceed with default action, or `false` to prevent it. + +## Workspace Compatibility + +1. **workspace object**: Use the `workspace` object for workspace configuration: `{ isConfigurableWorkspace, showFormButtonV2, showFormMenuButtonV2, clientScriptV2 }`. +1. **isConfigurableWorkspace**: Set `workspace.isConfigurableWorkspace: true` to enable workspace compatibility. +1. **showFormButtonV2**: Set `workspace.showFormButtonV2: true` for workspace form buttons. +1. **showFormMenuButtonV2**: Set `workspace.showFormMenuButtonV2: true` for workspace form menu items. +1. **clientScriptV2**: Use `workspace.clientScriptV2` to define workspace-specific client scripts (alternative to root-level `script`). + +## UI Compatibility + +1. **isUi16Compatible**: Set `client.isUi16Compatible: true` for UI16/Next Experience compatibility (List V3). +1. **isUi11Compatible**: Set `client.isUi11Compatible: true` for UI11 compatibility (List V2). + +## Display Conditions + +1. **showInsert/showUpdate**: Use `showInsert: true` for new records, `showUpdate: true` for existing records, or both to show on all forms. +1. **condition field**: Use server-side condition scripts to control visibility (e.g., `'gs.hasRole("admin")'`, `'current.state != 6'`). Conditions are evaluated server-side. +1. **Complex conditions**: Combine multiple conditions with `&&` and `||` operators (e.g., `'current.priority <= 2 && current.state != 6 && gs.hasRole("itil")'`). + +## Additional Properties + +1. **order field**: Use `order` property to control display sequence - lower numbers appear first (default is 100). +1. **comments**: Always add descriptive `comments` for documentation purposes. +1. **hint**: Use `hint` for tooltip text shown on hover. +1. **messages**: Use `messages` array for user-facing messages or notifications (e.g., `messages: ['Success message']`). +1. **roles**: Use `roles` array to restrict access to specific roles (e.g., `roles: ['admin', 'itil']`). + +## Best Practices + +1. **Server-side vs client-side**: If no user interaction is needed, omit the `client` object entirely - the UI Action will perform server-side action only. +1. **Error handling**: Always validate data in client scripts before processing (check for null/empty values). +1. **User feedback**: Use `g_form.addInfoMessage()`, `g_form.addErrorMessage()`, or `g_form.addWarningMessage()` to provide clear feedback. +1. **List actions**: For list actions using `g_list.getChecked()`, always verify that records are selected before processing. +1. **Confirmation dialogs**: Use `confirm()` for destructive actions to prevent accidental execution. +1. **isolateScript**: Set `isolateScript: true` for enhanced security when running scripts in strict mode, though this limits access to DOM and global objects. + +## Common Pitfalls + +1. **Nested structure**: Don't use flat properties like `formButton: true` - use `form: { showButton: true }` instead. +1. **script vs clientScriptV2**: Use `script` at root level for standard forms, or `workspace.clientScriptV2` for workspace-specific scripts. +1. **Active state**: Ensure `active: true` is set, otherwise the UI Action won't be visible to users. +1. **Role-based conditions**: Always test conditions with appropriate user roles to ensure visibility works as expected. +1. **GlideAjax calls**: When using GlideAjax in client scripts, ensure the corresponding Script Include is client-callable. +1. **messages array**: Remember `messages` is an array of strings, not a single string. diff --git a/res/instruct/fluent_instruct_ui-page.md b/res/instruct/fluent_instruct_ui-page.md new file mode 100644 index 0000000..01ecfc0 --- /dev/null +++ b/res/instruct/fluent_instruct_ui-page.md @@ -0,0 +1,173 @@ +# Instructions for Fluent UI Page API + +Always reference the UI Page API specifications for more details. + +## Import Statement + +1. **Always import UiPage**: Use `import { UiPage } from '@servicenow/sdk/core'` - the dedicated `UiPage` construct provides better type safety than the generic `Record` API. + +## Naming Conventions + +1. **endpoint format**: Every `endpoint` must end with `.do` and should follow the format `_.do`. +1. **Unique identifiers**: Use descriptive `$id` values with `Now.ID['unique_identifier']` to avoid conflicts. +1. **Scoped naming**: Prefix page names with your application scope (e.g., `x_myapp_dashboard.do`). + +## Page Types + +1. **Standard UI Pages**: Default pages load with ServiceNow navigation and header (set `direct: false` or omit). +1. **Direct UI Pages**: Set `direct: true` to create standalone pages without ServiceNow chrome - useful for: + - Custom landing pages + - External-facing interfaces + - Embedded iframes + - Login pages or portals +1. **Category selection**: Choose appropriate category for organization: + - `general` - Most custom pages (default) + - `homepages` - Dashboard and landing pages + - `htmleditor` - Rich text editing interfaces + - `kb` - Knowledge base related pages + - `cms` - Content management pages + - `catalog` - Service catalog related pages + +## HTML Content + +1. **Static HTML**: Use the `html` property for simple static content with standard HTML/XHTML markup. +1. **Jelly templates**: Use Jelly tags (``, ``) for server-side dynamic content generation. +1. **UI Macros**: Reference UI Macros (e.g., ``) to use reusable ServiceNow components. +1. **Proper XML declaration**: When using Jelly, start with ``. +1. **Namespace declarations**: Include required namespaces in Jelly root: `xmlns:j="jelly:core" xmlns:g="glide"`. + +## Client-Side Scripting + +1. **clientScript property**: Use for JavaScript that runs in the browser after page load. +1. **DOM manipulation**: Access DOM elements using standard JavaScript or jQuery. +1. **Event handlers**: Define functions in `clientScript` that can be called from HTML `onclick`, `onchange`, etc. +1. **GlideAjax calls**: Use `GlideAjax` to communicate with server-side Script Includes. +1. **Client-callable**: Ensure Script Includes used with GlideAjax are marked as client-callable. +1. **AngularJS support**: UI Pages support AngularJS for dynamic, reactive interfaces. +1. **jQuery availability**: jQuery is available by default in ServiceNow - use `$` or `jQuery`. + +## Server-Side Scripting + +1. **processingScript property**: Use for server-side code that executes on form submission or POST requests. +1. **Form parameters**: Access submitted form data using `g_request.getParameter('param_name')`. +1. **Database operations**: Use `GlideRecord` for CRUD operations in processing script. +1. **User feedback**: Use `gs.addInfoMessage()`, `gs.addErrorMessage()` to provide user feedback after processing. +1. **Jelly evaluation**: Use `` tags for server-side logic within HTML content. +1. **Function syntax**: processingScript can be a string or function - strings are more common for UI Pages. + +## Security Best Practices + +1. **Input validation**: Always validate and sanitize user input in both client and server scripts. +1. **XSS prevention**: Escape user-provided content before displaying in HTML. +1. **Role-based access**: Control access to UI Pages through ACLs (Access Control Lists). +1. **CSRF protection**: ServiceNow provides automatic CSRF tokens for form submissions. +1. **Direct page security**: Direct pages bypass standard security - implement custom authentication if needed. +1. **Script injection**: Never use `eval()` or directly execute user-provided code. + +## Performance Optimization + +1. **Minimize Jelly processing**: Excessive Jelly evaluation can slow page rendering - keep logic simple. +1. **Client-side rendering**: Move complex logic to client-side when possible to reduce server load. +1. **Lazy loading**: Load data asynchronously with AJAX instead of rendering everything on page load. +1. **Caching**: Consider caching frequently accessed data in client-side or using ServiceNow cache APIs. +1. **Query optimization**: Use GlideAggregate and indexed fields for efficient database queries. +1. **Image optimization**: Optimize images and use ServiceNow's built-in image handling. + +## Common Use Cases + +1. **Custom dashboards**: Use category `homepages` and combine Jelly with charts for dashboards. +1. **Forms**: Create custom forms with HTML form elements and processingScript for submissions. +1. **Reports**: Display custom reports with dynamic data from Jelly evaluation. +1. **Integration pages**: Direct pages work well for external system integrations. +1. **Knowledge base**: Use category `kb` for custom article viewers or search interfaces. +1. **Wizard interfaces**: Multi-step processes using client-side state management. + +## Jelly Template Guidelines + +1. **Variable scope**: Variables created with `` are available in Jelly context. +1. **Server-side execution**: Jelly code executes on the server before being sent to client. +1. **JSON data passing**: Use `JSON.stringify()` in Jelly to pass data to client-side JavaScript. +1. **Conditional rendering**: Use `` and `` for conditional content. +1. **Loops**: Use `` or `` for iterating over collections. +1. **Error handling**: Jelly errors can break the entire page - test thoroughly. + +## AngularJS Integration + +1. **Bootstrap directive**: Use `ng-app` directive to bootstrap AngularJS on your page. +1. **Controllers**: Define controllers in `clientScript` property. +1. **Two-way binding**: Leverage `ng-model` for reactive forms and data binding. +1. **Directives**: Use built-in AngularJS directives (`ng-repeat`, `ng-if`, `ng-click`, etc.). +1. **Service integration**: Create or inject AngularJS services for shared functionality. +1. **Version compatibility**: ServiceNow includes specific AngularJS version - check compatibility. + +## URL Parameters and Navigation + +1. **Query parameters**: Access URL parameters with `g_request.getParameter('param')` in Jelly. +1. **Client access**: Use JavaScript `URLSearchParams` or parse `window.location.search` for client-side access. +1. **Navigation**: Use `window.location.href = 'page.do'` for client-side navigation. +1. **Breadcrumbs**: Standard pages show in navigation history; direct pages don't. +1. **Deep linking**: Support direct links to specific content by handling URL parameters. + +## GlideAjax Best Practices + +1. **Script Include setup**: Create client-callable Script Include with functions returning string values. +1. **Parameter passing**: Use `ga.addParam('sysparm_name', 'functionName')` to specify the function to call. +1. **Additional params**: Pass data with `ga.addParam('param_name', 'value')`. +1. **Callback handling**: Use `ga.getXMLAnswer(callback)` for asynchronous response handling. +1. **Error handling**: Always handle errors in callback - check if answer is valid. +1. **JSON responses**: Parse JSON responses with `JSON.parse(answer)` in callback. + +## Testing and Debugging + +1. **Browser console**: Use browser developer tools to debug client-side scripts. +1. **Script debugger**: Use `gs.log()` in server scripts and check system logs. +1. **Jelly debugging**: Jelly errors appear in system logs - check for XML syntax issues. +1. **Incremental testing**: Test HTML, then add Jelly, then add scripts incrementally. +1. **Cross-browser**: Test UI Pages in different browsers for compatibility. +1. **Mobile testing**: Test responsiveness if page will be accessed from mobile devices. + +## Common Pitfalls + +1. **Missing .do extension**: Always include `.do` in endpoint - pages won't load without it. +1. **XML syntax errors**: Invalid XML in Jelly templates will break the page - validate carefully. +1. **Namespace conflicts**: Declare all required Jelly namespaces or tags won't work. +1. **Script scope issues**: Client script variables are global - avoid naming conflicts. +1. **Direct page authentication**: Direct pages bypass login - implement security checks if needed. +1. **Form submission without processing**: Set `method="POST"` on forms and provide processingScript. +1. **Missing Script Include**: GlideAjax calls fail silently if Script Include doesn't exist or isn't client-callable. +1. **Jelly variable naming**: Always prefix Jelly variables with `jvar_` to avoid conflicts. +1. **Client/server confusion**: Remember Jelly runs server-side before clientScript runs. + +## Maintenance Considerations + +1. **Documentation**: Add comprehensive `description` to explain page purpose and usage. +1. **Code comments**: Comment complex logic in both client and server scripts. +1. **Version control**: UI Pages are code - use source control best practices. +1. **Update management**: Consider impact on users when updating frequently accessed pages. +1. **Deprecation path**: If replacing a UI Page, provide redirect or migration notice. +1. **Dependencies**: Document any external libraries, Script Includes, or UI Macros used. + +## Advanced Techniques + +1. **Custom CSS**: Include ` + + +
+

Welcome to Our Application

+

This is a custom landing page without ServiceNow chrome.

+ +
+ + + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0003.md b/res/snippet/fluent_snippet_ui-page_0003.md new file mode 100644 index 0000000..940520c --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0003.md @@ -0,0 +1,47 @@ +# Create a UI Page with Jelly template for dynamic content + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['dynamic_user_info_page'], + endpoint: 'x_myapp_user_info.do', + description: 'A UI page using Jelly to display dynamic user information', + category: 'general', + html: ` + + + + var user = gs.getUser(); + user; + + +
+

User Information

+ + + + + + + + + + + + + + + + + + + + + +
User Name:${jvar_user.getName()}
User ID:${jvar_user.getUserID()}
Email:${jvar_user.getEmail()}
First Name:${jvar_user.getFirstName()}
Last Name:${jvar_user.getLastName()}
+
+
+ `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0004.md b/res/snippet/fluent_snippet_ui-page_0004.md new file mode 100644 index 0000000..c21e441 --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0004.md @@ -0,0 +1,64 @@ +# Create a UI Page with client-side JavaScript + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['interactive_calculator_page'], + endpoint: 'x_myapp_calculator.do', + description: 'A UI page with interactive client-side JavaScript functionality', + category: 'general', + html: ` +
+

Simple Calculator

+
+ + + + +
+
+
+ `, + clientScript: ` + function calculate() { + var num1 = parseFloat(document.getElementById('num1').value); + var num2 = parseFloat(document.getElementById('num2').value); + var operator = document.getElementById('operator').value; + var resultDiv = document.getElementById('result'); + + if (isNaN(num1) || isNaN(num2)) { + resultDiv.innerHTML = 'Please enter valid numbers'; + return; + } + + var result; + switch(operator) { + case '+': + result = num1 + num2; + break; + case '-': + result = num1 - num2; + break; + case '*': + result = num1 * num2; + break; + case '/': + if (num2 === 0) { + resultDiv.innerHTML = 'Cannot divide by zero'; + return; + } + result = num1 / num2; + break; + } + + resultDiv.innerHTML = 'Result: ' + result; + } + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0005.md b/res/snippet/fluent_snippet_ui-page_0005.md new file mode 100644 index 0000000..026091a --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0005.md @@ -0,0 +1,52 @@ +# Create a UI Page with form submission and processing script + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['feedback_form_page'], + endpoint: 'x_myapp_feedback.do', + description: 'A UI page with form submission and server-side processing', + category: 'general', + html: ` +
+

Submit Feedback

+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ `, + processingScript: ` + // Get form parameters + var name = g_request.getParameter('name'); + var email = g_request.getParameter('email'); + var feedback = g_request.getParameter('feedback'); + + if (name && email && feedback) { + // Create a record in a feedback table (example) + var gr = new GlideRecord('x_myapp_feedback'); + gr.initialize(); + gr.setValue('name', name); + gr.setValue('email', email); + gr.setValue('comments', feedback); + gr.insert(); + + gs.addInfoMessage('Thank you for your feedback!'); + } + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0006.md b/res/snippet/fluent_snippet_ui-page_0006.md new file mode 100644 index 0000000..2a87db8 --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0006.md @@ -0,0 +1,52 @@ +# Create a UI Page with AJAX calls using GlideAjax + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['ajax_data_loader_page'], + endpoint: 'x_myapp_ajax_loader.do', + description: 'A UI page demonstrating AJAX calls to load data dynamically', + category: 'general', + html: ` +
+

Load Data with AJAX

+ + +
+
+ `, + clientScript: ` + function loadData() { + var loading = document.getElementById('loading'); + var container = document.getElementById('dataContainer'); + + // Show loading indicator + loading.style.display = 'block'; + container.innerHTML = ''; + + // Make AJAX call using GlideAjax + var ga = new GlideAjax('MyScriptInclude'); // Replace with your Script Include name + ga.addParam('sysparm_name', 'getIncidentCount'); + ga.getXMLAnswer(function(answer) { + loading.style.display = 'none'; + + if (answer) { + var data = JSON.parse(answer); + var html = '
'; + html += '

Incident Statistics

'; + html += '

Total Incidents: ' + data.total + '

'; + html += '

Open Incidents: ' + data.open + '

'; + html += '

Closed Incidents: ' + data.closed + '

'; + html += '
'; + container.innerHTML = html; + } else { + container.innerHTML = '
Failed to load data
'; + } + }); + } + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0007.md b/res/snippet/fluent_snippet_ui-page_0007.md new file mode 100644 index 0000000..c86a414 --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0007.md @@ -0,0 +1,89 @@ +# Create a UI Page for custom dashboard with charts + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['custom_dashboard_page'], + endpoint: 'x_myapp_dashboard.do', + description: 'A custom dashboard UI page with charts and data visualization', + category: 'homepages', + html: ` + + + + // Server-side logic to gather statistics + var stats = {}; + + var incGr = new GlideAggregate('incident'); + incGr.addAggregate('COUNT'); + incGr.query(); + if (incGr.next()) { + stats.totalIncidents = incGr.getAggregate('COUNT'); + } + + var openGr = new GlideAggregate('incident'); + openGr.addQuery('active', true); + openGr.addAggregate('COUNT'); + openGr.query(); + if (openGr.next()) { + stats.openIncidents = openGr.getAggregate('COUNT'); + } + + JSON.stringify(stats); + + +
+

Custom Dashboard

+
+
+
+
Total Incidents
+
+ + +
+
+
+
+
+
Open Incidents
+
+ +
+
+
+
+
+ +
+
+
+ `, + clientScript: ` + // Initialize chart using Chart.js (if available) + window.addEventListener('load', function() { + var ctx = document.getElementById('myChart'); + if (ctx && typeof Chart !== 'undefined') { + new Chart(ctx, { + type: 'bar', + data: { + labels: ['Total', 'Open', 'Closed'], + datasets: [{ + label: 'Incidents', + data: [data.totalIncidents || 0, data.openIncidents || 0, + (data.totalIncidents - data.openIncidents) || 0], + backgroundColor: ['#3498db', '#f39c12', '#27ae60'] + }] + } + }); + } + }); + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0008.md b/res/snippet/fluent_snippet_ui-page_0008.md new file mode 100644 index 0000000..5f6ade9 --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0008.md @@ -0,0 +1,78 @@ +# Create a UI Page using AngularJS for dynamic content + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['angular_todo_page'], + endpoint: 'x_myapp_todo.do', + description: 'A UI page using AngularJS for interactive todo list', + category: 'general', + html: ` +
+

My Todo List

+
+ + +
+
    +
  • + + + {{todo.text}} + + +
  • +
+
+ Total: {{todos.length}} | + Completed: {{getCompletedCount()}} | + Remaining: {{getRemainingCount()}} +
+
+ `, + clientScript: ` + var app = angular.module('todoApp', []); + + app.controller('TodoController', function($scope) { + $scope.todos = []; + $scope.newTodo = ''; + + $scope.addTodo = function() { + if ($scope.newTodo.trim()) { + $scope.todos.push({ + text: $scope.newTodo, + completed: false + }); + $scope.newTodo = ''; + } + }; + + $scope.deleteTodo = function(index) { + $scope.todos.splice(index, 1); + }; + + $scope.updateTodo = function(todo) { + // Update logic (e.g., save to server) + }; + + $scope.getCompletedCount = function() { + return $scope.todos.filter(function(todo) { + return todo.completed; + }).length; + }; + + $scope.getRemainingCount = function() { + return $scope.todos.length - $scope.getCompletedCount(); + }; + }); + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0009.md b/res/snippet/fluent_snippet_ui-page_0009.md new file mode 100644 index 0000000..554e4f6 --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0009.md @@ -0,0 +1,55 @@ +# Create a UI Page with UI Macro integration + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['ui_macro_demo_page'], + endpoint: 'x_myapp_macro_demo.do', + description: 'A UI page demonstrating UI Macro integration for reusable components', + category: 'general', + html: ` + + +
+

UI Macro Integration Demo

+ + + + +
+ + +
+
+
+
+

Reference Field Example

+
+
+

Select an incident using the reference field above.

+ +
+
+
+
+
+
+
+
+
+ `, + clientScript: ` + function getSelectedIncident() { + var incidentRef = document.getElementById('incident_ref'); + if (incidentRef && incidentRef.value) { + document.getElementById('selectedInfo').innerHTML = + '
Selected Incident: ' + incidentRef.value + '
'; + } else { + document.getElementById('selectedInfo').innerHTML = + '
No incident selected
'; + } + } + `, +}) +``` diff --git a/res/snippet/fluent_snippet_ui-page_0010.md b/res/snippet/fluent_snippet_ui-page_0010.md new file mode 100644 index 0000000..54721d9 --- /dev/null +++ b/res/snippet/fluent_snippet_ui-page_0010.md @@ -0,0 +1,96 @@ +# Create a UI Page for knowledge base article display + +```typescript +import { UiPage } from '@servicenow/sdk/core' + +UiPage({ + $id: Now.ID['kb_article_viewer_page'], + endpoint: 'x_myapp_kb_viewer.do', + description: 'A UI page for displaying knowledge base articles with search functionality', + category: 'kb', + html: ` + + + + g_request.getParameter('article') || ''; + + +
+
+ + +
+ + + + var gr = new GlideRecord('kb_knowledge'); + if (gr.get('${jvar_article_sys_id}')) { + var article = { + number: gr.getValue('number'), + short_description: gr.getValue('short_description'), + text: gr.getValue('text'), + author: gr.getDisplayValue('author'), + created: gr.getDisplayValue('sys_created_on') + }; + JSON.stringify(article); + } else { + '{}'; + } + + +
+
+

+ +

+
+
+ +
+ +
+
+ + +
+ Please search for an article or select one from the list. +
+
+
+
+ `, + clientScript: ` + function searchArticles() { + var searchTerm = document.getElementById('searchBox').value; + if (searchTerm) { + // Navigate to search results or use AJAX to load results + window.location.href = 'x_myapp_kb_search.do?query=' + encodeURIComponent(searchTerm); + } + } + + // Add enter key support for search + document.addEventListener('DOMContentLoaded', function() { + var searchBox = document.getElementById('searchBox'); + if (searchBox) { + searchBox.addEventListener('keypress', function(e) { + if (e.key === 'Enter') { + searchArticles(); + } + }); + } + }); + `, +}) +``` diff --git a/res/spec/fluent_spec_acl.md b/res/spec/fluent_spec_acl.md index f5cd3d6..d560900 100644 --- a/res/spec/fluent_spec_acl.md +++ b/res/spec/fluent_spec_acl.md @@ -9,13 +9,13 @@ const specAcl = Acl({ operation: 'read', // mandatory, typed string: `execute`, `create`, `read`, `write`, `delete`, `edit_task_relations`, `edit_ci_relations`, `save_as_template`, `add_to_list`, `report_on`, `list_edit`, `report_view`, `personalize_choices` table: '', // mandatory if `type` is `record` field: '*', // mandatory if `type` is `record`: `*` or comma delimited list of field names - applies_to: '', // ServiceNow encoded query, only applicable if `type` is `record` + appliesTo: '', // ServiceNow encoded query, only applicable if `type` is `record` roles: [get_sys_id('sys_user_role', '')], // array of Record<'sys_user_role'>, either sys_id for existing roles or Role object for new roles - decision_type: 'allow', // typed string, `allow`|`deny` + decisionType: 'allow', // typed string, `allow`|`deny` condition: '', // ServiceNow encoded query script: '', // ServiceNow script to fullfil the functional request in scripting, - admin_overrides: true, // boolean, default is true - security_attribute: 'user_is_authenticated', // typed string, `user_is_authenticated`|`has_admin_role`, - local_or_existing: 'Local', // typed string, 'Local'|'Exisiting': if `Local`: A security attribute based on the `condition` property that is saved only for the ACL it is created in; if `Exisiting`: An existing security attribute to reference in the `security_attribute` property + adminOverrides: true, // boolean, default is true + securityAttribute: 'LoggedIn', // typed string, `LoggedIn`|`Group`|`GroupExplicit`|`HasAdminRole`|`Impersonating`|`InteractiveSession`|`NetworkCriteria`|`Role`|`RoleExplicit`, additional security attributes may be available based on installed plugins, ex. com.glide.client_session_security_attributes + localOrExisting: 'Local', // typed string, 'Local'|'Exisiting': if `Local`: A security attribute based on the `condition` property that is saved only for the ACL it is created in; if `Exisiting`: An existing security attribute to reference in the `security_attribute` property }): Acl; // returns an Acl object ``` diff --git a/res/spec/fluent_spec_application-menu.md b/res/spec/fluent_spec_application-menu.md index 11fcb05..00b2da1 100644 --- a/res/spec/fluent_spec_application-menu.md +++ b/res/spec/fluent_spec_application-menu.md @@ -22,23 +22,23 @@ const applicationSubMenu = Record({ active: true, //default is true, unless specified to make it inactive application: applicationMenu, // applicationMenu object assessment: get_sys_id('asmt_metric_type', ''), // String, guid, second paramemter as per user instructions or prompts or devrequest - device_type: '', // '' | 'any' | 'browser' | 'mobile' + deviceType: '', // '' | 'any' | 'browser' | 'mobile' filter: '', // String, conditions applied to list view for visibility in application navigator, Servicenow encoded query hint: '', // String, max length is 255 characters - link_type: '', // '' | 'SEPARATOR' | 'TIMELINE' | 'DETAIL' | 'HTML' | 'ASSESSMENT' | 'LIST' | 'FILTER' | 'SCRIPT' | 'CONTENT_PAGE' | 'SEARCH' | 'SURVEY' | 'DOC_LINK' | 'NEW' | 'MAP' | 'REPORT' | 'DIRECT' - map_page: get_sys_id('cmn_map_page', ''), // String, guid, second paramemter as per user instructions or prompts or devrequest - mobile_title: '', // String, max length is 80 characters - mobile_view_name: '', // String, max length is 40 characters + linkType: '', // '' | 'SEPARATOR' | 'TIMELINE' | 'DETAIL' | 'HTML' | 'ASSESSMENT' | 'LIST' | 'FILTER' | 'SCRIPT' | 'CONTENT_PAGE' | 'SEARCH' | 'SURVEY' | 'DOC_LINK' | 'NEW' | 'MAP' | 'REPORT' | 'DIRECT' + mapPage: get_sys_id('cmn_map_page', ''), // String, guid, second paramemter as per user instructions or prompts or devrequest + mobileTitle: '', // String, max length is 80 characters + mobileViewName: '', // String, max length is 40 characters name: '', // table name order: 100, // number - override_menu_roles: false, // boolean, default false + overrideMenuRoles: false, // boolean, default false query: '', // String, max length is 3500 characters, is link type arguments - require_confirmation: true, // boolean, default is true + requireConfirmation: true, // boolean, default is true uncancelable: false, // boolean, default is false - view_name: '', // String - window_name: '', // String + viewName: '', // String + windowName: '', // String report: '', // String - timeline_page: get_sys_id('cmn_timeline_page', ''), // String, guid, second paramemter as per user instructions or prompts or devrequest + timelinePage: get_sys_id('cmn_timeline_page', ''), // String, guid, second paramemter as per user instructions or prompts or devrequest } }) ``` diff --git a/res/spec/fluent_spec_atf-catalog-action.md b/res/spec/fluent_spec_atf-catalog-action.md index d94cc35..683e834 100644 --- a/res/spec/fluent_spec_atf-catalog-action.md +++ b/res/spec/fluent_spec_atf-catalog-action.md @@ -10,8 +10,8 @@ atf.catalog.openCatalogItem({ atf.catalog.addItemToShoppingCart({ $id: Now.ID[''], // string | guid, mandatory assert: '' // '' | 'form_submission_cancelled_in_browser' | 'form_submitted_to_server'; -}): { - cart_item_id: '' // sys_id of the item added to the cart +}): { + cartItemId: '' // sys_id of the item added to the cart }; // Sets quantity value on the current catalog item after a call to atf.catalog.openCatalogItem @@ -25,7 +25,7 @@ atf.catalog.orderCatalogItem({ $id: Now.ID[''], // string | guid, mandatory assert: '', // 'form_submitted_to_server' | 'form_submission_cancelled_in_browser' }): { - request_id: '', // sys_id + requestId: '', // sys_id cart: '' }; diff --git a/res/spec/fluent_spec_atf-catalog-variable.md b/res/spec/fluent_spec_atf-catalog-variable.md index a6186e1..e6592f5 100644 --- a/res/spec/fluent_spec_atf-catalog-variable.md +++ b/res/spec/fluent_spec_atf-catalog-variable.md @@ -18,6 +18,6 @@ atf.catalog.submitRecordProducer({ $id: Now.ID[''], // string | guid, mandatory assert: '' // '' | 'form_submitted_to_server' | 'form_submission_cancelled_in_browser' }): { - record_id: '' // sys_id + recordId: '' // sys_id }; ``` \ No newline at end of file diff --git a/res/spec/fluent_spec_atf-email.md b/res/spec/fluent_spec_atf-email.md index 503cac2..2acb76a 100644 --- a/res/spec/fluent_spec_atf-email.md +++ b/res/spec/fluent_spec_atf-email.md @@ -27,7 +27,7 @@ atf.email.generateInboundEmail({ to: '', subject: '', body: '' -}): { output_email_record: ''}; +}): { outputEmailRecord: ''}; // generates an Email [sys_email] record that looks like an email sent in reply to a system notification. This step also creates an email.read event upon step completion. atf.email.generateInboundReplyEmail({ @@ -38,11 +38,11 @@ atf.email.generateInboundReplyEmail({ body: '', from: '', to: '', -}): { output_reply_email_record: ''}; // recordId of the inbound reply email +}): { outputReplyEmailRecord: ''}; // recordId of the inbound reply email // Generates a string that can be used as test data for another test step. By default, the string is 10 characters long. The maximum length of the string is 10,000 characters. atf.email.generateRandomString({ $id: Now.ID[''], // string | guid, mandatory length: 1024, // number -}): { random_string: '' }; +}): { randomString: '' }; ``` \ No newline at end of file diff --git a/res/spec/fluent_spec_atf-form-action.md b/res/spec/fluent_spec_atf-form-action.md index 426bb3b..94c2095 100644 --- a/res/spec/fluent_spec_atf-form-action.md +++ b/res/spec/fluent_spec_atf-form-action.md @@ -18,6 +18,6 @@ atf.form.clickUIAction({ // all props are mandatory actionType: '' // 'ui_action' | 'declarative_action' declarativeAction: get_sys_id('sys_declarative_action_assignment', ''), // sys_id | Record<'sys_declarative_action_assignment'> formUI: 'standard_ui', // 'standard_ui' | 'service_operations_workspace' | 'asset_workspace' | 'cmdb_workspace' -}): { record_id: string; table: string } +}): { recordId: string; table: string } ``` diff --git a/res/spec/fluent_spec_atf-form-declarative-action.md b/res/spec/fluent_spec_atf-form-declarative-action.md index 3c629f3..62e93d0 100644 --- a/res/spec/fluent_spec_atf-form-declarative-action.md +++ b/res/spec/fluent_spec_atf-form-declarative-action.md @@ -16,5 +16,5 @@ atf.form.clickDeclarativeAction({ // all props are mandatory declarativeAction: get_sys_id('sys_declarative_action_assignment', ''), // sys_id | Record<'sys_declarative_action_assignment'> assert: 'form_submitted_to_server' //'form_submitted_to_server' | 'form_submission_canceled_in_browser' | 'page_reloaded_or_redirected' formUI: 'standard_ui', // 'standard_ui' | 'service_operations_workspace' | 'asset_workspace' | 'cmdb_workspace' -}): { record_id: string; table: string } +}): { recordId: string; table: string } ``` \ No newline at end of file diff --git a/res/spec/fluent_spec_atf-form.md b/res/spec/fluent_spec_atf-form.md index 9fc65af..31ab869 100644 --- a/res/spec/fluent_spec_atf-form.md +++ b/res/spec/fluent_spec_atf-form.md @@ -24,7 +24,7 @@ atf.form.submitForm({ // all props are mandatory $id: Now.ID[''], // string | guid, mandatory assert: '', // '' | 'form_submitted_to_server' | 'form_submission_canceled_in_browser' formUI: 'standard_ui', // 'standard_ui' | 'service_operations_workspace' | 'asset_workspace' | 'cmdb_workspace' -}): { table: string; record_id: string }; +}): { table: string; recordId: string }; // Clicks a button within a modal in the specified Form UI atf.form.clickModalButton({ // all props are mandatory @@ -62,6 +62,6 @@ atf.form.clickUIAction({ // all props are mandatory uiAction: get_sys_id('sys_ui_action', ''), // sys_id | Record<'sys_ui_action'> declarativeAction: get_sys_id('sys_declarative_action_assignment', ''), // sys_id | Record<'sys_declarative_action_assignment'> assert: 'form_submitted_to_server' // 'form_submitted_to_server' | 'form_submission_canceled_in_browser' | 'page_reloaded_or_redirected' -}): { record_id: string; table: string } +}): { recordId: string; table: string } ``` \ No newline at end of file diff --git a/res/spec/fluent_spec_atf-server-catalog-item.md b/res/spec/fluent_spec_atf-server-catalog-item.md index 189df92..eb8494f 100644 --- a/res/spec/fluent_spec_atf-server-catalog-item.md +++ b/res/spec/fluent_spec_atf-server-catalog-item.md @@ -9,7 +9,7 @@ atf.server.searchForCatalogItem({ // all props are mandatory category: get_sys_id('sc_category', ''), // sys_id | Record<'sc_category'>; assertItem: get_sys_id('sc_cat_item', ''), // sys_id | Record<'sc_cat_item'>; assert: '', // 'assert_item_present' | 'assert_item_not_present'; -}): { catalog_item_id: string; }; +}): { catalogItemId: string; }; // Checkout the Shopping Cart and generates a new request. atf.server.checkoutShoppingCart({ // all props are mandatory @@ -18,14 +18,14 @@ atf.server.checkoutShoppingCart({ // all props are mandatory requestedFor: get_sys_id('sys_user', ''), // sys_id | Record<'sys_user'> deliveryAddress: '123 main st', // string specialInstructions: 'none', // string -}): { request_id: string; }; +}): { requestId: string; }; // Replays a previously created request item with the same values and options. atf.server.replayRequestItem({ $id: Now.ID[''], // string | guid, mandatory - request_item: get_sys_id('sc_req_item', ''), // sys_id | Record<'sc_req_item'>; -}): { - table: string; - req_item: sys_id | Record<'sc_req_item'>; + requestItem: get_sys_id('sc_req_item', ''), // sys_id | Record<'sc_req_item'>; +}): { + table: string; + reqItem: sys_id | Record<'sc_req_item'>; }; ``` \ No newline at end of file diff --git a/res/spec/fluent_spec_atf-server-record.md b/res/spec/fluent_spec_atf-server-record.md index b566d60..228031b 100644 --- a/res/spec/fluent_spec_atf-server-record.md +++ b/res/spec/fluent_spec_atf-server-record.md @@ -8,7 +8,7 @@ atf.server.recordQuery({ // all props are mandatory enforceSecurity: false, // boolean; assert: 'records_match_query', // 'records_match_query' | 'no_records_match_query'; }): { table: string; - first_record: string; // sys_id of the first record + firstRecord: string; // sys_id of the first record }; // Validates that a given record meets the specified conditions on the server-side. @@ -29,7 +29,7 @@ atf.server.recordInsert({ // all props are mandatory assert: '', // 'record_successfully_inserted' | 'record_not_inserted'; enforceSecurity: false, // boolean; }): { table: string; - record_id: string; // sys_id of the new record + recordId: string; // sys_id of the new record }; // Changes field values of a record on the server. diff --git a/res/spec/fluent_spec_atf-server.md b/res/spec/fluent_spec_atf-server.md index 8b02aa0..ac591d1 100644 --- a/res/spec/fluent_spec_atf-server.md +++ b/res/spec/fluent_spec_atf-server.md @@ -33,7 +33,7 @@ atf.server.recordQuery({ // all props are mandatory enforceSecurity: false, // boolean; assert: 'records_match_query', // 'records_match_query' | 'no_records_match_query'; }): { table: string; - first_record: string; // sys_id of the first record + firstRecord: string; // sys_id of the first record }; // Inserts a record into a table. Specify the field values to set on the new record, outputs the table and the sys_id of the new record. @@ -44,6 +44,6 @@ atf.server.recordInsert({ // all props are mandatory assert: '', // 'record_successfully_inserted' | 'record_not_inserted'; enforceSecurity: false, // boolean; }): { table: string; - record_id: string; // sys_id of the new record + recordId: string; // sys_id of the new record }; ``` \ No newline at end of file diff --git a/res/spec/fluent_spec_business-rule.md b/res/spec/fluent_spec_business-rule.md index 2e3c41c..17e45aa 100644 --- a/res/spec/fluent_spec_business-rule.md +++ b/res/spec/fluent_spec_business-rule.md @@ -1,22 +1,23 @@ -# **Context**: Business Rule spec: Used to create a new Business Rule in ServiceNow, its `script` property defines the business logic, `table` property defines the table to which the Business Rule applies. +# **Context**: Business Rule spec: Used to create a new Business Rule in ServiceNow, its `script` property defines the business logic, `table` property defines the table to which the Business Rule applies + ```typescript // Creates a new Business Rule (`sys_script`) BusinessRule({ - $id: '', // string | guid, mandatory - name: '', // string, mandatory - table: '', // string, mandatory - condition: '', // string, condition string that must be true for BusinessRule to run, for example: `current.parent !== 'NULL'` - when: 'before', // 'before' | 'after' | 'async' | 'display', mandatory - abort_action: false, // boolean - action: [], // ("insert" | "update" | "delete" | "query")[] - active: false, // boolean - add_message: false, // boolean - description: '', // string - filter_condition: '', // ServiceNow encoded query - message: '', // string - order: 100, // number - role_conditions: [], // array of string | array of Role objects indicating that the user needs to have all Roles listed to execute this Business Rule, see Role spec - script: '', // ServiceNow script to fullfil the functional request in scripting, - set_field_value: '', // string, sets a field name to a value, for example `name='new_name'` + $id: '', // string | guid, mandatory + name: '', // string, mandatory + table: '', // string, mandatory + condition: '', // string, condition string that must be true for BusinessRule to run, for example: `current.parent !== 'NULL'` + when: 'before', // 'before' | 'after' | 'async' | 'display', mandatory + abortAction: false, // boolean + action: [], // ("insert" | "update" | "delete" | "query")[] + active: false, // boolean + addMessage: false, // boolean + description: '', // string + filterCondition: '', // ServiceNow encoded query + message: '', // string + order: 100, // number + roleConditions: [], // array of string | array of Role objects indicating that the user needs to have all Roles listed to execute this Business Rule, see Role spec + script: '', // ServiceNow script to fullfil the functional request in scripting, + setFieldValue: '', // string, sets a field name to a value, for example `name='new_name'` }): BusinessRule // returns a BusinessRule object ``` diff --git a/res/spec/fluent_spec_client-script.md b/res/spec/fluent_spec_client-script.md index 7d44c59..c251690 100644 --- a/res/spec/fluent_spec_client-script.md +++ b/res/spec/fluent_spec_client-script.md @@ -5,16 +5,16 @@ ClientScript({ $id: '', // string | guid, mandatory name: '', // string, name of the client script table: '', // string, name of the table on which the client script runs - ui_type: 'desktop', // string, user interface to which the client script applies: `desktop`|`mobile_or_service_portal`|`all`. Default is `desktop`. + uiType: 'desktop', // string, user interface to which the client script applies: `desktop`|`mobile_or_service_portal`|`all`. Default is `desktop`. type: '', // string, optional, type of client script, which defines when it runs: `onCellEdit`|`onChange`|`onLoad`|`onSubmit` field: '', // string, optional, field on the table that the client script applies to. This property applies only when the type property is set to `onChange` or `onCellEdit`. description: '', // string, optional, description of the functionality and purpose of the client script messages: '', // string, optional, strings that are available to the client script as localized messages using `getmessage('[message]')`. active: true, // boolean, optional, whether the record is enabled, default true script: '', // ServiceNow script to fullfil the functional request in scripting, - applies_extended: false, // boolean, optional, indicates whether the client script applies to tables extended from the specified table, default false + appliesExtended: false, // boolean, optional, indicates whether the client script applies to tables extended from the specified table, default false global: true, // boolean, optional, indicates whether the client script runs on all views of the table or only on specific views. Default is true. view: '', // string, optional, views of the table on which the client script runs. This property applies only when the `global` property is set to `false` - isolate_script: false, // boolean, optional, indicates whether scripts run in strict mode, with access to direct DOM, `jQuery`, `prototype`, and the `window` object turned off. Default is false. + isolateScript: false, // boolean, optional, indicates whether scripts run in strict mode, with access to direct DOM, `jQuery`, `prototype`, and the `window` object turned off. Default is false. }) ``` diff --git a/res/spec/fluent_spec_column-generic.md b/res/spec/fluent_spec_column-generic.md index d1737da..3b57ace 100644 --- a/res/spec/fluent_spec_column-generic.md +++ b/res/spec/fluent_spec_column-generic.md @@ -1,35 +1,36 @@ -#**Context:** Generic Column API spec: Used to create a new Generic Column (`sys_dictionary`) in a Table schema at ServiceNow, Column is also referenced as Field in ServiceNow. This API is closely related to the Table API for its schema property definition. +# **Context:** Generic Column API spec: Used to create a new Generic Column (`sys_dictionary`) in a Table schema at ServiceNow, Column is also referenced as Field in ServiceNow. This API is closely related to the Table API for its schema property definition. + ```typescript GenericColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - column_type: '', // see internal_types list, mandatory - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + columnType: '', // see internal_types list, mandatory + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): GenericColumn // returns a GenericColumn object // dynamic_value_definition examples const example1 = dynamic_value_definitions: { type: "dynamic_default", // constant, mandatory - dynamic_default: '' // string, function from sys_filter_option_dynamic table, mandatory + dynamicDefault: '' // string, function from sys_filter_option_dynamic table, mandatory }; const example2 = dynamic_value_definitions: { type: "dependent_field", // constant, mandatory - column_name: get_column_name("") // string, column name from the same table, mandatory + columnName: get_column_name("") // string, column name from the same table, mandatory } const example3 = dynamic_value_definitions: { type: "calculated_value", // constant, mandatory - calculated_value: '' // string, function for calculating the value, mandatory + calculatedValue: '' // string, function for calculating the value, mandatory } const example4 = dynamic_value_definitions: { diff --git a/res/spec/fluent_spec_column.md b/res/spec/fluent_spec_column.md index 8fc4a5e..687e59b 100644 --- a/res/spec/fluent_spec_column.md +++ b/res/spec/fluent_spec_column.md @@ -1,388 +1,388 @@ -#**Context:** Column API for table schema spec: Used to create a typed column object for a table schema. This group of API is working closely with the Table API to create table schema property. +# **Context:** Column API for table schema spec: Used to create a typed column object for a table schema. This group of API is working closely with the Table API to create table schema property. + ```typescript // Creates a new Column (`sys_dictionary`) StringColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): StringColumn // returns a StringColumn object BooleanColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string | boolean - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string | boolean + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): BooleanColumn // returns an BooleanColumn object ChoiceColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string | number - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string | number + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): ChoiceColumn // returns a ChoiceColumn object ReferenceColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - cascadeRule: 'none', // "none" | "cascade" | "delete_no_workflow" | "delete" | "restrict" | "clear" - default: '', // undefined | string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean - referenceTable?: '', // undefined | string + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + cascadeRule: 'none', // "none" | "cascade" | "delete_no_workflow" | "delete" | "restrict" | "clear" + default: '', // undefined | string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean + referenceTable?: '', // undefined | string }): ReferenceColumn // returns a ReferenceColumn object DateTimeColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DateTimeColumn // returns a DateTimeColumn object DateColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DateColumn // returns a DateColumn object IntegerColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - max: 0, // number - maxLength: 0, // number - min: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + max: 0, // number + maxLength: 0, // number + min: 0, // number + readOnly: false // boolean }): IntegerColumn // returns an IntegerColumn object DecimalColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string | number - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string | number + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DecimalColumn // returns a DecimalColumn object ListColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // undefined | string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean - referenceTable?: '', // undefined | string + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // undefined | string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean + referenceTable?: '', // undefined | string }): ListColumn // returns a ListColumn object FieldNameColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): FieldNameColumn // returns a FieldNameColumn object ScriptColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // undefined | string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean - signature: '', // undefined | string + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // undefined | string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean + signature: '', // undefined | string }): ScriptColumn // returns a ScriptColumn object UserRolesColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string | Role object see spec - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string | Role object see spec + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): UserRolesColumn // returns a UserRolesColumn object TranslatedTextColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): TranslatedTextColumn // returns a TranslatedTextColumn object ConditionsColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // undefined | string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // undefined | string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): ConditionsColumn // returns a ConditionsColumn object TranslatedFieldColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): TranslatedFieldColumn // returns a TranslatedFieldColumn object BasicImageColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): BasicImageColumn // returns a BasicImageColumn object IntegerDateColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string | number - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string | number + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): IntegerDateColumn // returns a IntegerDateColumn object VersionColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): VersionColumn // returns a VersionColumn object BasicDateTimeColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): BasicDateTimeColumn // returns a BasicDateTimeColumn object CalendarDateTime({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): CalendarDateTime // returns a CalendarDateTime object DueDateColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DueDateColumn // returns a DueDateColumn object ScheduleDateTimeColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): ScheduleDateTimeColumn // returns a ScheduleDateTimeColumn object OtherDateColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): OtherDateColumn // returns a OtherDateColumn object RadioColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): RadioColumn // returns a RadioColumn object DomainIdColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DomainIdColumn // returns an DomainIdColumn object DomainPathColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DomainPathColumn // returns a DomainPathColumn object TableNameColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string | (string & {}) - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string | (string & {}) + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): TableNameColumn // returns a TableNameColumn object SystemClassNameColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } - default: '', // string - dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' - dynamic_value_definitions: {}, // object, see dynamic_value_definition examples - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + choices: {}, // object, snake_case name value pairs, for example { choice_1: { label: 'Choice1' }, choice_2: { label: 'Choice2' } } + default: '', // string + dropdown: 'none', // 'none' | 'dropdown_with_none' | 'suggestion' | 'dropdown_without_none' + dynamicValueDefinitions: {}, // object, see dynamic_value_definition examples + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): SystemClassNameColumn // returns a SystemClassNameColumn object DocumentIdColumn({ - active: false, // boolean - attributes: {}, // object, snake_case name value pairs, see attribute list - audit: false, // boolean - default: '', // string - dependent: {}, // object TableNameColumn see above spec - function_definition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation - label: '', // string or array of Documentation object - mandatory: false, // boolean - maxLength: 0, // number - read_only: false // boolean + active: false, // boolean + attributes: {}, // object, snake_case name value pairs, see attribute list + audit: false, // boolean + default: '', // string + dependent: {}, // object TableNameColumn see above spec + functionDefinition: `glidefunction:${""}`, // string, definition of a function that the field performs, such as a mathematical operation, field length computation, or day of the week calculation + label: '', // string or array of Documentation object + mandatory: false, // boolean + maxLength: 0, // number + readOnly: false // boolean }): DocumentIdColumn // returns a DocumentIdColumn object ``` - diff --git a/res/spec/fluent_spec_cross-scope-privilege.md b/res/spec/fluent_spec_cross-scope-privilege.md index a646ddf..0ae6d85 100644 --- a/res/spec/fluent_spec_cross-scope-privilege.md +++ b/res/spec/fluent_spec_cross-scope-privilege.md @@ -3,9 +3,9 @@ // spec to create CrossScopePrivilege in Fluent CrossScopePrivilege({ $id: '', // string | guid, mandatory - target_name: '', // string, name of the table, script include, or script object being requested - target_scope: '', // string, application whose resources are being requested - target_type: 'sys_script_include', // string, type of request: `sys_script_include`|`scriptable`|`sys_db_object` + targetName: '', // string, name of the table, script include, or script object being requested + targetScope: '', // string, application whose resources are being requested + targetType: 'sys_script_include', // string, type of request: `sys_script_include`|`scriptable`|`sys_db_object` operation: 'read', // string, operation the script performs on the target: `create`|`read`|`write`|`delete`|`execute` status: 'allowed', // string, authorization for this record: `allowed`|`denied`|`requested` }) diff --git a/res/spec/fluent_spec_form.md b/res/spec/fluent_spec_form.md index 7339ebe..5970487 100644 --- a/res/spec/fluent_spec_form.md +++ b/res/spec/fluent_spec_form.md @@ -1,13 +1,14 @@ -#**Context:** Form API spec: Used to create a new Form (`sys_ui_form`) object, which specifies how to view a record in a table, including which Sections (`sys_ui_section`) and fields (`sys_ui_element`) to display. This Form can be a part of a new View (`sys_ui_view`) or existing default view (`default_view`). +# **Context:** Form API spec: Used to create a new Form (`sys_ui_form`) object, which specifies how to view a record in a table, including which Sections (`sys_ui_section`) and fields (`sys_ui_element`) to display. This Form can be a part of a new View (`sys_ui_view`) or existing default view (`default_view`). + ```typescript // spec to configure a Form (`sys_ui_form`) in Fluent using the Record Plugin const example_form = Record({ $id: '', // string, unique id for the record, typically using Now.ID["value"] table: 'sys_ui_form', // string, must always leave as 'sys_ui_form' - data: { + data: { name: '', // string, name of the table the form is for view: get_sys_id('sys_ui_view', ''), // Record<'sys_ui_view'>, The UI view (`sys_ui_view`) to contain the form. Can create a new view using Record plugin, use the sys_id of an existing view, or import and use `default_view` - sys_user: '' // String, optional, the user to apply the form view to + sysUser: '' // String, optional, the user to apply the form view to } }); @@ -31,8 +32,8 @@ Record({ element: '', // string, the name of the field to display. Must match a valid field name for the associated table, or be a special name like '.split' position: 0, // number, the position of the element in the section type: 'element', // string, optional, the type of element: 'element'|'list'|'chart'|'annotation'|'formatter'|'.split'|'.begin_split'|'.end_split'. - sys_ui_section: example_section, // Record<'sys_ui_section'> that references either a new or existing sys_ui_section record - sys_ui_formatter: get_sys_id('sys_ui_formatter', '') // optional, sys_id | Record<'sys_ui_formatter'> + sysUiSection: example_section, // Record<'sys_ui_section'> that references either a new or existing sys_ui_section record + sysUiFormatter: get_sys_id('sys_ui_formatter', '') // optional, sys_id | Record<'sys_ui_formatter'> } }) @@ -41,8 +42,8 @@ const example_form_section = Record({ $id: '', // string, unique id for the record, typically using Now.ID["value"] table: 'sys_ui_form_section', // string, must always leave as 'sys_ui_form_section' data: { - sys_ui_form: example_form, // string, the form to display the section on - sys_ui_section: example_section, // string, the section to display + sysUiForm: example_form, // string, the form to display the section on + sysUiSection: example_section, // string, the section to display position: 0 // number, the position of the section on the form } }) @@ -58,4 +59,4 @@ const example_view = Record({ roles: '' // string, optional, comma-separated list of the roles to apply the view to } }); -``` \ No newline at end of file +``` diff --git a/res/spec/fluent_spec_list.md b/res/spec/fluent_spec_list.md index 294051b..63c7ef2 100644 --- a/res/spec/fluent_spec_list.md +++ b/res/spec/fluent_spec_list.md @@ -2,7 +2,6 @@ ```typescript // spec to configure a List in Fluent List({ - $id: '', // string, unique id for the record, typically using Now.ID["value"] table: '', // string, name of the table the list is for view: get_sys_id('sys_ui_view', ''), // Record<'sys_ui_view'>, The UI view (sys_ui_view) to apply to the list. Can import and use default_view, or can define a custom view using Record plugin. columns: [ // array of {element, position} objects representing the columns to be displayed in the List and their order @@ -10,6 +9,6 @@ List({ element: '', // string, column name of the table position: 0, // number, column order } - ], + ] }); ``` diff --git a/res/spec/fluent_spec_role.md b/res/spec/fluent_spec_role.md index 15f078d..6bcc3bd 100644 --- a/res/spec/fluent_spec_role.md +++ b/res/spec/fluent_spec_role.md @@ -1,15 +1,14 @@ #**Context:** Role API spec: define Roles [sys_user_role] for users of an application. Roles are closely working with ACLs to control user's access to applications and their features. ```typescript // Creates a new Role (`sys_user_role`) -Role({ - $id: '', // string | guid, mandatory +Role({ name: '', // string, mandatory description: '', // string, mandatory - assignable_by: '', // string, mandatory - can_delegate: true, // boolean, mandatory - elevated_privilege: false, // boolean, mandatory + assignableBy: '', // string, mandatory + canDelegate: true, // boolean, mandatory + elevatedPrivilege: false, // boolean, mandatory grantable: true, // boolean, mandatory - contains_roles: [get_sys_id('sys_user_role', '')], // array of Record<'sys_user_role'>, optional, either sys_id or Role object - scoped_admin: false, // boolean, mandatory + containsRoles: [get_sys_id('sys_user_role', '')], // array of Record<'sys_user_role'>, optional, either sys_id or Role object + scopedAdmin: false, // boolean, mandatory }): Role; // returns a Role object ``` diff --git a/res/spec/fluent_spec_scheduled-script.md b/res/spec/fluent_spec_scheduled-script.md index 0833648..f8584cb 100644 --- a/res/spec/fluent_spec_scheduled-script.md +++ b/res/spec/fluent_spec_scheduled-script.md @@ -9,14 +9,14 @@ Record({ active: true, // boolean conditional: false, // boolean condition: '', // string, a ServiceNow server side script that returns a boolean (i.e. `GlidePluginManager.isActive('sn_generative_ai');`), mandatory only if `conditional` is `true` - run_type: 'daily', // string - time_zone: '', // string, the time zone for the job, mandatory only if `run_type` is `daily` or `weekly` or `monthly` - run_dayofweek: 1, // number, mandatory if `run_type` is `weekly` - run_dayofmonth: 1, // number, mandatory if `run_type` is `monthly`, can take any number between `1` and `31` which represents the specific calender day - run_period: '1970-01-01 00:00:00', // string, mandatory only if `run_type` is `periodically` - run_start: '', // string, job starting time, default value should be the user's current time, mandatory if `run_type` is `periodically` or `once` - run_time: '1970-01-01 00:00:00', // string, the execution time per job occurence, mandatory only if `run_type` is `daily`, `weekly`, or `monthly` - business_calendar: get_sys_id('business_calendar', ''), // string, mandatory only if `run_type` is `business_calendar_start` or `business_calendar_end` + runType: 'daily', // string + timeZone: '', // string, the time zone for the job, mandatory only if `runType` is `daily` or `weekly` or `monthly` + runDayofweek: 1, // number, mandatory if `runType` is `weekly` + runDayofmonth: 1, // number, mandatory if `runType` is `monthly`, can take any number between `1` and `31` which represents the specific calender day + runPeriod: '1970-01-01 00:00:00', // string, mandatory only if `runType` is `periodically` + runStart: '', // string, job starting time, default value should be the user's current time, mandatory if `runType` is `periodically` or `once` + runTime: '1970-01-01 00:00:00', // string, the execution time per job occurence, mandatory only if `runType` is `daily`, `weekly`, or `monthly` + businessCalendar: get_sys_id('business_calendar', ''), // string, mandatory only if `runType` is `business_calendar_start` or `business_calendar_end` script: '', // ServiceNow script to fullfil the functional request in scripting, } }) diff --git a/res/spec/fluent_spec_script-action.md b/res/spec/fluent_spec_script-action.md new file mode 100644 index 0000000..0a521aa --- /dev/null +++ b/res/spec/fluent_spec_script-action.md @@ -0,0 +1,16 @@ +#**Context:** Script Action API spec: Used to create a new Script Action (`sysevent_script_action`) in ServiceNow. Script Actions are server-side scripts that run in response to events. +```typescript +import { ScriptAction } from '@servicenow/sdk/core'; + +// Creates a new Script Action (`sysevent_script_action`) +ScriptAction({ + $id: '', // string | guid, mandatory. A unique identifier for the script action. + name: '', // string, mandatory. The name of the script action. + eventName: '', // string, mandatory. The name of the event that triggers this script action. + script: '', // mandatory. A server-side script that runs when triggered by an event. This property supports a function from a JavaScript module, a reference to another file in the application that contains a script, or inline JavaScript. Format:- For functions, use the name of a function, function expression, or default function exported from a JavaScript module and import it into the .now.ts file. For information about JavaScript modules, see JavaScript modules and third-party libraries. - To use text content from another file, refer to a file in the application using the following format: Now.include('path/to/file'). - To provide an inline script, use string literals or template literals for multiple lines of code: 'Script' or `Script`. + active: true, // boolean, optional. Whether the script action is active. Defaults to true. + description: '', // string, optional. A description of what the script action does. + order: 100, // number, optional. The order of execution for script actions on the same event. Lower numbers execute first. Defaults to 100. + conditionScript: '', // string, optional. A server-side script that must evaluate to true for the script action to run. For example: "gs.hasRole('admin')" +}); +``` \ No newline at end of file diff --git a/res/spec/fluent_spec_script-include.md b/res/spec/fluent_spec_script-include.md index 9a6668d..d6310ad 100644 --- a/res/spec/fluent_spec_script-include.md +++ b/res/spec/fluent_spec_script-include.md @@ -1,22 +1,18 @@ -#**Context:** Script Include API spec: Create script includes to store JavaScript functions and classes for use by server scripts. Each script include defines either an object class or a function. Although Script Inlcudes are primarily intended for server side usage, they can be used at client level IF `client_callable` is true. +#**Context:** Script Include API spec: Define a Script Include to store JavaScript functions and classes that can be resued in different script modules. Each script include defines either an object class or a function. Although Script Inlcudes are primarily intended for server side usage, they can be used at client IF `clientCallable` is true. ```typescript -// spec to create a script include in Fluent using the Record plugin -Record({ +import { ScriptInclude } from '@servicenow/sdk/core'; + +ScriptInclude({ $id: '',// string, unique id for the record, typically using Now.ID["value"] - table: 'sys_script_include', // string, must always leave as 'sys_script_include' - data: { - name: '', // string, the name of the script include - sys_name: '', // string, optional, the system name of the script include. Default is same as name - api_name: '', // string, optional, the API path to call the script include. Default is [app_name].[sys_name] - description: '', // string, optional, short description of the script include - script: '', // ServiceNow script to fullfil the functional request in scripting, - access: 'package_private', // string, optional, 'public'|'package_private', 'public' if the script include is accessible from all application scopes, 'package_private' if accessible from this application scope only - caller_access: '', // string, optional, '1' for caller tracking, '2' for caller restriction, '' for none - active: true, // boolean, optional, default true - client_callable: false, // boolean, optional, whether Glide AJAX is enabled, default false - mobile_callable: false, // boolean, optional, whether the script include is callable from mobile, default false - sandbox_callable: false, // boolean, optional, whether the script include is callable from sandbox, default false - sys_policy: '', // string, optional, protection policy: ''|'read'|'protected', 'read' for read-only, 'protected' for protected - }, + name: '', // string, the name of the script include + apiName: '', // string, optional, the API path to call the script include. Default is [scope].[sysName] + description: '', // string, optional, short description of the script include + script: '', // ServiceNow script to fullfil the functional request in scripting, + accessibleFrom: 'package_private', // string, optional, 'public'|'package_private', 'public' if the script include is accessible from all application scopes, 'package_private' if accessible from this application scope only + callerAccess: '', // string, optional, 'tracking' for caller tracking, 'restriction' for caller restriction, '' for none + active: true, // boolean, optional, default true + clientCallable: false, // boolean, optional, whether GlideAJAX is enabled to enable it runnable from browser client, default false + mobileCallable: false, // boolean, optional, whether the script include is callable from mobile, default false + sandboxCallable: false, // boolean, optional, whether the script include is callable from sandbox, default false }) -``` +``` \ No newline at end of file diff --git a/res/spec/fluent_spec_scripted-rest.md b/res/spec/fluent_spec_scripted-rest.md index e806920..ac8ed18 100644 --- a/res/spec/fluent_spec_scripted-rest.md +++ b/res/spec/fluent_spec_scripted-rest.md @@ -4,15 +4,15 @@ const specRestApi = RestApi({ $id: '', // string | guid, mandatory name: '', // string, mandatory - service_id: '', // string, mandatory + serviceId: '', // string, mandatory active: true, // boolean consumes: '', // string, comma delimited MIME types, ex. 'application/json,application/xml,text/xml' - doc_link: '', // string - enforce_acl: [], // array of strings that represent sys_ids of ACLs to enforce | array of ACL objects (see ACL object spec) to enforce + docLink: '', // string + enforceAcl: [], // array of strings that represent sys_ids of ACLs to enforce | array of ACL objects (see ACL object spec) to enforce policy: '', // '' | 'read' | 'protected' produces: '', // string, comma delimited MIME types, ex. 'application/json,application/xml,text/xml' routes: [], // array of Routes, see the Route spec - short_description, '', // string + shortDescription, '', // string versions: [], // array of Versions, see the Version spec }): RestApi; // returns a RestApi object @@ -25,17 +25,17 @@ const Route = { name: '', // string, defaults to the value of the path property active: true, // boolean path: '/', // string, path of the resource relative to the base API path, can contain parameters, for example: '/abc/{id}' - short_description: '', // string + shortDescription: '', // string consumes: '', // string, defines what the route will consume, defaults to the `consumes` property of the RestApi object - enforce_acl, [], // array of strings that represent sys_ids of ACLs to enforce | array of ACL objects (see ACL object spec) to enforce + enforceAcl, [], // array of strings that represent sys_ids of ACLs to enforce | array of ACL objects (see ACL object spec) to enforce produces: '', // string, ist of media types that the resource can produce, defaults to the `produces` property of the RestApi object - request_example: '', // string, valid sample request body payload for the route + requestExample: '', // string, valid sample request body payload for the route method: 'GET', // 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' authorization: true, // boolean, determines whether users must be authenticated to access the route authentication: true, // boolean, determines whether ACLs are enforced when accessing the route internalRole: true, // boolean, determines whether the route requires the user to have the 'snc_internal' role policy: '', // '' | 'read' | 'protected' - version: 0, // number, this is required if the `versions` property of the RestApi is populated, used to generate the URI with a version, for example this would be generated is version = 1: '/api/management/v1/table/{tableName}' + version: 0, // number, this is required if the `versions` property of the RestApi is populated, used to generate the URI with a version, for example this would be generated is version = 1: '/api/management/v1/table/{tableName}' } // spec to create Parameters and Headers in Fluent @@ -43,8 +43,8 @@ const specParameterAndHeader = { $id: '', // string | guid, mandatory name: '', // string, name of the parameter or header, mandatory required: false, // boolean - example_value: '', // string, example of a valid value - short_description: '', // string + exampleValue: '', // string, example of a valid value + shortDescription: '', // string } // spec to create Versions in Fluent @@ -53,7 +53,7 @@ const specVersion = { version: 0, // number, version of the rest api, mandatory active: true, // boolean deprecated: false, // boolean - short_description: '', // string - is_default: false, // boolean, determines if this version is the default for the rest api + shortDescription: '', // string + isDefault: false, // boolean, determines if this version is the default for the rest api } ``` diff --git a/res/spec/fluent_spec_service-portal.md b/res/spec/fluent_spec_service-portal.md new file mode 100644 index 0000000..93f92b5 --- /dev/null +++ b/res/spec/fluent_spec_service-portal.md @@ -0,0 +1,66 @@ +# **Context**: Service Portal API spec: defines custom widgets, widget dependencies, and Angular providers for Service Portal pages + +## SpWidget API + +Creates a custom widget (`sp_widget`) to include on a portal page. Widgets are reusable UI components that display data and provide interactivity in Service Portal. + +```typescript +// Creates a new Service Portal Widget (sp_widget) +SpWidget({ + $id: '', // string | guid, mandatory + name: '', // string, mandatory, name of the widget + description: '', // string, optional, description of the widget's functionality + htmlTemplate: '', // string, optional, HTML template for the widget's client-side view + cssTemplate: '', // string, optional, CSS styling for the widget + clientScript: '', // string, optional, client-side controller script (AngularJS controller function) + serverScript: '', // string, optional, server-side script that runs before the widget is rendered + controllerAs: '', // string, optional, alias for the controller in the template (default: 'c') + demoData: '', // string, optional, JSON data used for widget preview/demo in Service Portal Designer + optionSchema: '', // string, optional, JSON schema defining configurable options for the widget + dataTable: '', // string, optional, primary table the widget interacts with + scriptIncludes: [], // string[], optional, array of script include sys_ids or names to be used in server script + sassSrc: '', // string, optional, SASS source for advanced styling with variables and nesting + linkFunction: '', // string, optional, AngularJS link function for direct DOM manipulation + controllable: false, // boolean, optional, whether the widget can be controlled by other widgets via events, default false + hasPreview: false, // boolean, optional, whether the widget has a preview template, default false + servicenowNative: false, // boolean, optional, indicates if this is a ServiceNow native widget, default false + internal: false, // boolean, optional, whether the widget is for internal use only, default false + public: false, // boolean, optional, whether the widget is available for public access, default false + roles: '', // string, optional, comma-separated list of roles required to view the widget + category: '', // string, optional, widget category for organization in Service Portal Designer + field_list: '', // string, optional, comma-separated list of fields from dataTable to be available in the widget +}) +``` + +## SPWidgetDependency API + +Creates a widget dependency (`sp_dependency`) to link JavaScript and CSS files to widgets and use third-party libraries, external style sheets, or Angular modules. + +```typescript +// Creates a new Service Portal Widget Dependency (sp_dependency) +SPWidgetDependency({ + $id: '', // string | guid, mandatory + name: '', // string, mandatory, name of the dependency + angularModuleName: '', // string, optional, name of the Angular module to be injected (for Angular dependencies) + jsIncludes: '', // string, optional, JavaScript code or URLs to include (multiple URLs separated by newlines) + cssIncludes: '', // string, optional, CSS code or URLs to include (multiple URLs separated by newlines) + source: '', // string, optional, source URL of the dependency (e.g., CDN URL) + version: '', // string, optional, version of the library/dependency for tracking + order: 100, // number, optional, load order for the dependency (lower numbers load first), default 100 +}) +``` + +## SpAngularProvider API + +Creates an Angular Provider (`sp_angular_provider`) to reuse components in multiple widgets and improve portal performance by centralizing common functionality. + +```typescript +// Creates a new Service Portal Angular Provider (sp_angular_provider) +SpAngularProvider({ + $id: '', // string | guid, mandatory + name: '', // string, mandatory, name of the Angular provider (used to inject into widgets) + type: '', // string, mandatory, type of Angular provider: 'service'|'factory'|'directive'|'filter'|'value'|'constant'|'provider' + script: '', // string, mandatory, JavaScript code defining the Angular provider implementation + restricted: false, // boolean, optional, whether access to the provider is restricted by roles, default false + roles: '', // string, optional, comma-separated list of roles required to use the provider (only applies when restricted=true) +}) diff --git a/res/spec/fluent_spec_table.md b/res/spec/fluent_spec_table.md index 87c16f3..543a54d 100644 --- a/res/spec/fluent_spec_table.md +++ b/res/spec/fluent_spec_table.md @@ -1,25 +1,25 @@ #**Context:** Table API spec: Used to create a new Table (`sys_db_object`) in ServiceNow, Table is also referenced as Dictionary or data model in ServiceNow. This API is closely related to the Column API for its schema property definition. ```typescript // Creates a new Table (`sys_db_object`) -Table({ +Table({ name: '', // string, table name schema: {},// object, snake_case name values pairs, ex. { column_name1: Column object, column_name2: Column object } see Column spec extends: '', // undefined | string label: '', // string or array of Documentation object - licensing_config: {}, // LicensingConfig object + licensingConfig: {}, // LicensingConfig object display: '', // string extensible: false, // boolean - live_feed: false, // boolean - accessible_from: 'package_private', // 'public' | 'package_private' - caller_access: 'none', // 'none' | 'tracking' | 'restricted' + liveFeed: false, // boolean + accessibleFrom: 'package_private', // 'public' | 'package_private' + callerAccess: 'none', // 'none' | 'tracking' | 'restricted' actions: [], // array of 'read' | 'update' | 'delete' | 'create' - allow_web_service_access: false, // boolean - allow_new_fields: false, // boolean - allow_ui_actions: false, // boolean - allow_client_scripts: false, // boolean + allowWebServiceAccess: false, // boolean + allowNewFields: false, // boolean + allowUiActions: false, // boolean + allowClientScripts: false, // boolean audit: false, // boolean - read_only: false, // boolean - text_index: false, // boolean + readOnly: false, // boolean + textIndex: false, // boolean attributes: {}, // object, snake_case name value pairs of any supported dictionary attributes in ServiceNow [sys_schema_attribute], ex. { update_sync_custom: false, update_synch: true } index: [ // Array of index definitions { @@ -28,35 +28,35 @@ Table({ element: '', // string | string[], mandatory } ], - auto_number: { // Auto-numbering configuration + autoNumber: { // Auto-numbering configuration prefix: '', // string number: 0, // number - number_of_digits: 0, // number + numberOfDigits: 0, // number }, - scriptable_table: false, // boolean + scriptableTable: false, // boolean }): Table; // returns a Table object // Creates a new LicensingConfig object LicensingConfig({ - license_model: 'none', // 'none' | 'fulfiller' | 'producer' - owner_condition: '', // string - license_condition: '', // string - is_fulfillment: false, // boolean - op_delete: false, // boolean - op_update: false, // boolean - op_insert: false, // boolean - license_roles: [], // string[] + licenseModel: 'none', // 'none' | 'fulfiller' | 'producer' + ownerCondition: '', // string + licenseCondition: '', // string + isFulfillment: false, // boolean + opDelete: false, // boolean + opUpdate: false, // boolean + opInsert: false, // boolean + licenseRoles: [], // string[] }): LicensingConfig // returns a LicensingConfig object // Creates a new Documentation (`sys_documentation`) Documentation({ - hint: '', // string - help: '', // string - label: '', // string - plural: '', // string - language: '', // string - url: '', // string - url_target: '', // string + hint: '', // string + help: '', // string + label: '', // string + plural: '', // string + language: '', // string + url: '', // string + urlTarget: '', // string }): Documentation // returns a Documentation object ``` diff --git a/res/spec/fluent_spec_ui-action.md b/res/spec/fluent_spec_ui-action.md index 2269c3d..ac2c965 100644 --- a/res/spec/fluent_spec_ui-action.md +++ b/res/spec/fluent_spec_ui-action.md @@ -1,51 +1,72 @@ -#**Context:** UI Action spec: define UI Actions [sys_ui_action] to enhance interactivity and customization in user interfaces. UI Actions include buttons, context menu items and related links of forms. +#**Context:** UI Action API spec: define UI Actions [sys_ui_action] to enhance interactivity and customization in user interfaces. UI Actions include buttons, context menu items and related links on forms and lists. Use the dedicated `UiAction` construct for cleaner, type-safe UI Action definitions. + ```typescript -// Creates a new UI Action (`sys_ui_action`) -const uiAction = Record({ - $id: '', // string | guid, mandatory - table: 'sys_ui_action', // string, mandatory, should always be 'sys_ui_action' - data: { - name: '', // string, mandatory - script: '', // ServiceNow script to fullfil the functional request in scripting, // string, inline ServiceNow client side scripting, function to be referenced for onClick action for workspace form button and workspace form menu. The script is based on devrequest. Example of function definition - /* - function onClickFunction(g_form) {} - */ - table: '', // string, mandatory - action_name: '', // string, mandatory , should always begin with 'sysverb_' - active: true, //boolean - client: false, //boolean. Default is false. Set to true only when onclick function specified - form_action: false, // boolean - form_button: false, // boolean - form_button_v2: false, // boolean - form_context_menu: false, // boolean - form_link: false, // boolean - form_menu_button_v2: false, // boolean - format_for_configurable_workspace: false, // boolean - isolate_script: false, // boolean - list_action: false, // boolean - list_banner_button: false, // boolean - list_button: false, // boolean - list_choice: false, // boolean - list_context_menu: false, // boolean - list_link: false, // boolean - list_save_with_form_button: false, // boolean - show_insert: false, // boolean - show_multiple_update: false, // boolean - show_query: false, // boolean - show_update: false, // boolean - ui16_compatible: false, // boolean - client_script_v2: '', // ServiceNow script to fullfil the functional request in scripting, // string, inline ServiceNow client side scripting, function to be referenced for onClick action. The script is based on devrequest. Example of function deinifition - /* - function onClickFunction(g_form) {} - */ - comments: '', // string, max length is 4000 characters - condition: '', // String, max length 254 characters, condition string is inline glide scripting expression or logic, ex: current.active == true && current.type == 'internal' && new sn_ais.StatusApi().isAisEnabled() - hint: '', // string, max length is 254 characters - messages: '', //string, max length is 4000 characters - onclick: '', // a referenced function defined in current module under client_script_v2 or script, based on devrequest. eg. onClickFunction() - sys_overrides: '', // string | guid - order: 100, // Integer, default is 100 - sys_policy: '', //string, 'read' | 'protected'. This is the protection policy. +import { UiAction } from '@servicenow/sdk/core'; + +// Creates a new UI Action (`sys_ui_action`) using the UiAction construct +UiAction({ + $id: '', // string | guid, mandatory - Unique identifier for the UI Action + table: '', // string, mandatory - Table on which UI Action appears + name: '', // string, mandatory - Name of the UI Action. It must be unique within the table + actionName: '', // string, optional - Unique string that can be referenced in scripts + active: true, // boolean, optional - If true, the UI Action is enabled + + // UI action on form view and related properties + form: { // object, optional - UI action on form view and related properties + showButton: false, // boolean, optional - Display as form button + showLink: false, // boolean, optional - Display as form link + showContextMenu: false, // boolean, optional - Display in form context menu + style: '', // string, optional - 'primary' | 'destructive' | 'unstyled' }, -}) -``` \ No newline at end of file + + // UI action on list view and related properties + list: { // object, optional - UI action on list view and related properties + showButton: false, // boolean, optional - Display as list button + showLink: false, // boolean, optional - Display as list link + showContextMenu: false, // boolean, optional - Display in list context menu + style: '', // string, optional - 'primary' | 'destructive' | 'unstyled' + showListChoice: false, // boolean, optional - Display in list choice menu + showBannerButton: false, // boolean, optional - Display as banner button on list + showSaveWithFormButton: false, // boolean, optional - Display as save with form button + }, + + // Client side script and related properties + client: { // object, optional - Client side script and related properties + isClient: false, // boolean, optional - Set to true when using client-side script + isUi11Compatible: false, // boolean, optional - Compatible with UI11 (List V2) + isUi16Compatible: false, // boolean, optional - Compatible with UI16/Next Experience (List V3) + onClick: '', // string, optional - Client-side function to execute on click + }, + + // UI action on workspace configuration and related properties + workspace: { // object, optional - UI action on workspace configuration and related properties + isConfigurableWorkspace: false, // boolean, optional - Enable for configurable workspace + showFormButtonV2: false, // boolean, optional - Display as workspace form button + showFormMenuButtonV2: false, // boolean, optional - Display as workspace form menu button + clientScriptV2: '', // string, optional - Client-side script for workspace + }, + + // Display conditions - Control when UI Action is visible + showInsert: false, // boolean, optional - Checked, the UI Action appears in insert + showUpdate: false, // boolean, optional - Checked, the UI Action appears in update + showQuery: false, // boolean, optional - Checked, the UI Action appears in insert, update, query or update multiple(bulk edit) mode + showMultipleUpdate: false, // boolean, optional - Checked, the UI Action appears in insert, update, query or update multiple(bulk edit) mode + + // Scripts and conditions + condition: '', // string, optional - A script or condition that determines whether the UI Action is visible + script: '', // string | function, optional - Script runs automatically as part of the UI Action when the client calls it + // Note: server module scripts (sys_module) can only be used on server-side UI Actions + // Example: function(current) { gs.addInfoMessage('Action executed'); } + + // Additional properties + comments: '', // string, optional - Text field used by developers and admins to add internal notes + messages: [], // string[], optional - Messages field holds user facing messages or notification text that the UI Action may display when it executes + hint: '', // string, optional - A tooltip or hover text that appears when users hover their mouse pointer over + order: 100, // number, optional - Determines the order in which the UI Action appears. Lower values show first + isolateScript: false, // boolean, optional - Checked, script in a UI Action runs in an isolated script + overrides: '', // string | Record<'sys_ui_action'>, optional - Action being overridden by the current record + roles: [], // (string | Role)[], optional - Stores roles associated with a UI Action, defining which users can see or execute that UI Action based on their roles + includeInViews: [], // string[], optional - Specifies views in which UI action to be included + excludeFromViews: [], // string[], optional - Specifies views from which UI action to be excluded +}): UiAction; // returns a UiAction object +``` diff --git a/res/spec/fluent_spec_ui-page.md b/res/spec/fluent_spec_ui-page.md new file mode 100644 index 0000000..33fecbf --- /dev/null +++ b/res/spec/fluent_spec_ui-page.md @@ -0,0 +1,58 @@ +# **Context**: UI Page API spec: define custom UI Pages [sys_ui_page] for custom user interfaces and landing pages. UI Pages provide flexible HTML/XHTML interfaces that can include static content, dynamic Jelly templates, or custom scripts. Use the dedicated `UiPage` construct for cleaner, type-safe UI Page definitions. + +```typescript +import { UiPage } from '@servicenow/sdk/core'; + +// Creates a new UI Page (`sys_ui_page`) using the UiPage construct +UiPage({ + $id: '', // string | guid, mandatory - Unique identifier for the UI Page + + // Core properties + endpoint: '', // string, mandatory - Endpoint for the page, must end with '.do' + // Format: `_.do` + // Example: 'x_myapp_custom_page.do' + + description: '', // string, optional - Description about the UI page's purpose and functionality + + // Page type configuration + direct: false, // boolean, optional - If true, creates a direct UI page that loads without ServiceNow UI wrapper + // Direct pages bypass standard ServiceNow chrome/navigation + // Default: false (page loads with standard UI wrapper) + + // Content definition + html: '', // string, optional - Define what is rendered when the page is shown + // Can contain: + // - Static XHTML/HTML markup + // - Dynamically generated content using Jelly tags + // - Calls to UI Macros and Script Includes + // - AngularJS directives and templates + // Example: '
Hello World
' or Jelly template + + // Categorization + category: 'general', // string, optional - Category for organizing UI pages + // Valid values: 'general' | 'homepages' | 'htmleditor' | 'kb' | 'cms' | 'catalog' + // Default: 'general' + + // Client-side scripting + clientScript: '', // string, optional - Client-side JavaScript that runs in the browser + // Used for: + // - Event handlers for buttons and form elements + // - DOM manipulation and DHTML features + // - Setting focus to fields + // - Client-side validation + // - AJAX calls and async operations + // Note: Runs after the page is loaded + + // Server-side scripting + processingScript: '', // string | function, optional - Script that runs on the server when the page is submitted + // Executes on form submission or page POST + // Used for: + // - Form data processing + // - Database operations + // - Server-side validation + // - Business logic execution + // Can be a string or function + // Example as string: 'gs.addInfoMessage("Processed");' + // Example as function: function() { gs.addInfoMessage("Processed"); } +}): UiPage; // returns a UiPage object +``` diff --git a/src/types/index.ts b/src/types/index.ts index 368e98c..f903ed8 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -33,10 +33,13 @@ export enum ServiceNowMetadataType { PROPERTY = 'property', ROLE = 'role', SCHEDULED_SCRIPT = 'scheduled-script', + SCRIPT_ACTION = 'script-action', SCRIPT_INCLUDE = 'script-include', SCRIPTED_REST = 'scripted-rest', + SERVICE_PORTAL = 'service-portal', TABLE = 'table', UI_ACTION = 'ui-action', + UI_PAGE = 'ui-page', USER_PREFERENCE = 'user-preference', } diff --git a/test/res/resourceManager.test.ts b/test/res/resourceManager.test.ts index e82b93d..eb5e4e6 100644 --- a/test/res/resourceManager.test.ts +++ b/test/res/resourceManager.test.ts @@ -24,8 +24,12 @@ jest.mock("../../src/utils/resourceLoader.js", () => { // Create a mock implementation with controlled behavior const mockGetAvailableMetadataTypes = jest.fn().mockResolvedValue([ "business-rule", + "script-action", "script-include", - "table" + "service-portal", + "table", + "ui-action", + "ui-page" ]); const mockGetResource = jest.fn().mockImplementation((resourceType, metadataType, id) => { @@ -72,8 +76,12 @@ describe("ResourceManager", () => { await resourceManager.initialize(); expect(resourceManager.getMetadataTypes()).toEqual([ "business-rule", + "script-action", "script-include", - "table" + "service-portal", + "table", + "ui-action", + "ui-page" ]); }); @@ -81,20 +89,20 @@ describe("ResourceManager", () => { await resourceManager.initialize(); const resources = await resourceManager.listResources(); - // Should have 3 metadata types * (1 spec + 1 instruct + 1 snippet) = 9 resources - expect(resources.length).toBe(9); + // Should have 7 metadata types * (1 spec + 1 instruct + 1 snippet) = 21 resources + expect(resources.length).toBe(21); // Check for spec resources const specResources = resources.filter(r => r.uri.startsWith('sn-spec://')); - expect(specResources.length).toBe(3); + expect(specResources.length).toBe(7); // Check for instruction resources const instructResources = resources.filter(r => r.uri.startsWith('sn-instruct://')); - expect(instructResources.length).toBe(3); + expect(instructResources.length).toBe(7); // Check for snippet resources const snippetResources = resources.filter(r => r.uri.startsWith('sn-snippet://')); - expect(snippetResources.length).toBe(3); + expect(snippetResources.length).toBe(7); // Check that each resource has the required properties resources.forEach(resource => {