diff --git a/CHANGELOG.md b/CHANGELOG.md index f2fb127..969191b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.10.1 (Preview) 2025-12-12 + +- Update to Cedar SDK 4.8.2 + ## v0.10.0 (Preview) 2025-11-12 - Update to Cedar SDK 4.7.0 diff --git a/package-lock.json b/package-lock.json index a846cfc..cc0d66c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-cedar", - "version": "0.10.0", + "version": "0.10.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-cedar", - "version": "0.10.0", + "version": "0.10.1", "license": "Apache-2.0", "dependencies": { "jsonc-parser": "^3.3.1", @@ -16,13 +16,13 @@ "@types/mocha": "^10.0.10", "@types/node": "=18.15.0", "@types/vscode": "=1.83.0", - "@typescript-eslint/eslint-plugin": "^8.46.4", - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/eslint-plugin": "^8.49.0", + "@typescript-eslint/parser": "^8.49.0", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", - "@vscode/vsce": "^3.7.0", + "@vscode/vsce": "^3.7.1", "eslint": "^9.39.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "mocha": "^11.7.5", "typescript": "^5.9.3" }, @@ -179,22 +179,22 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.26.1.tgz", - "integrity": "sha512-GGCIsZXxyNm5QcQZ4maA9q+9UWmM+/87G+ybvPkrE32el1URSa9WYt0t67ks3/P0gspZX9RoEqyLqJ/X/JDnBQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", + "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.13.1" + "@azure/msal-common": "15.13.3" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.13.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.1.tgz", - "integrity": "sha512-vQYQcG4J43UWgo1lj7LcmdsGUKWYo28RfEvDQAEMmQIMjSFufvb+pS0FJ3KXmrPmnWlt1vHDl3oip6mIDUQ4uA==", + "version": "15.13.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", + "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", "dev": true, "license": "MIT", "engines": { @@ -202,13 +202,13 @@ } }, "node_modules/@azure/msal-node": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.1.tgz", - "integrity": "sha512-HszfqoC+i2C9+BRDQfuNUGp15Re7menIhCEbFCQ49D3KaqEDrgZIgQ8zSct4T59jWeUIL9N/Dwiv4o2VueTdqQ==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.4.tgz", + "integrity": "sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.13.1", + "@azure/msal-common": "15.13.3", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -346,9 +346,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -358,7 +358,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -857,27 +857,27 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.3.0.tgz", - "integrity": "sha512-y61yQXWRVEpUozPUoDUx3Qw8YO86LTU9+LMB23UbPKadM2W2XjKLkKxzzP8A/m0aw4EXozW098E+y55ZmNVZ1w==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.0.tgz", + "integrity": "sha512-K0LEuuTo4rza8yDrlYkRdXLao8Iz/QBMsQdIxRrOOrLYb4HAtZaypZ78c+J6rDA1UlGxadZVLmkkiv4KV5fMKQ==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.3.0.tgz", - "integrity": "sha512-MfSgfmN4QCdgVy1s0HttpsjsfXRYpB4QWXHCsxX/OVEcNOHhwEKrDzlyS6Osb74VpQSzSiWMtX1oY++iVw0l0w==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.0.tgz", + "integrity": "sha512-DPTm2+VXKID41qKQWagg/4JynM6hEEpvbq0PlGsEoC4Xm7IqXIxFym3mSf5+ued0cuiIV1hR9kgXjqGdP035tw==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.3.0", - "@textlint/resolver": "15.3.0", - "@textlint/types": "15.3.0", + "@textlint/module-interop": "15.5.0", + "@textlint/resolver": "15.5.0", + "@textlint/types": "15.5.0", "chalk": "^4.1.2", "debug": "^4.4.3", - "js-yaml": "^3.14.1", + "js-yaml": "^4.1.1", "lodash": "^4.17.21", "pluralize": "^2.0.0", "string-width": "^4.2.3", @@ -896,30 +896,6 @@ "node": ">=8" } }, - "node_modules/@textlint/linter-formatter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@textlint/linter-formatter/node_modules/pluralize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", @@ -941,27 +917,27 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.3.0.tgz", - "integrity": "sha512-SzJLo3SBd526I+RI69+DCj0TpS2C40VxgI52uv2Q31qENaa2xHCI7JXV37J26bVyYBZMA4uwRwj74GWeaZD5rA==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.0.tgz", + "integrity": "sha512-rqfouEhBEgZlR9umswWXXRBcmmSM28Trpr9b0duzgehKYVc7wSQCuQMagr6YBJa2NRMfRNinupusbJXMg0ij2A==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.3.0.tgz", - "integrity": "sha512-utvrWoc9X0PaF/yzA3IpSDHWKlA/iTsuWRJ9gKzDLTz+ErgHcB2aV97YvhMDdE8qtHpOp4MGjVK1cw4BviRQBQ==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.0.tgz", + "integrity": "sha512-kK5nFbg5N3kVoZExQI/dnYjCInmTltvXDnuCRrBxHI01i6kO/o8R7Lc2aFkAZ6/NUZuRPalkyDdwZJke4/R2wg==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.3.0.tgz", - "integrity": "sha512-pOlYZ0TWS5XFek2axLK2KOQJCXC4zEj57u4/YTkN3CU1DtvUsvLQUs5oGSrxTyAGtYPFCYOrSqEzER6252732A==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.0.tgz", + "integrity": "sha512-EjAPbuA+3NyQ9WyFP7iUlddi35F3mGrf4tb4cZM0nWywbtEJ3+XAYqL+5RsF0qFeSguxGir09NdZOWrG9wVOUQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.3.0" + "@textlint/ast-node-types": "15.5.0" } }, "node_modules/@types/estree": { @@ -1021,18 +997,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", - "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.49.0.tgz", + "integrity": "sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/type-utils": "8.46.4", - "@typescript-eslint/utils": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", - "graphemer": "^1.4.0", + "@typescript-eslint/scope-manager": "8.49.0", + "@typescript-eslint/type-utils": "8.49.0", + "@typescript-eslint/utils": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" @@ -1045,22 +1020,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/parser": "^8.49.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", - "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.49.0.tgz", + "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.49.0", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0", "debug": "^4.3.4" }, "engines": { @@ -1076,14 +1051,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", - "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.49.0.tgz", + "integrity": "sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.4", - "@typescript-eslint/types": "^8.46.4", + "@typescript-eslint/tsconfig-utils": "^8.49.0", + "@typescript-eslint/types": "^8.49.0", "debug": "^4.3.4" }, "engines": { @@ -1098,14 +1073,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.49.0.tgz", + "integrity": "sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1116,9 +1091,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", - "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz", + "integrity": "sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==", "dev": true, "license": "MIT", "engines": { @@ -1133,15 +1108,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", - "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.49.0.tgz", + "integrity": "sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0", + "@typescript-eslint/utils": "8.49.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1158,9 +1133,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.49.0.tgz", + "integrity": "sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==", "dev": true, "license": "MIT", "engines": { @@ -1172,21 +1147,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.49.0.tgz", + "integrity": "sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.49.0", + "@typescript-eslint/tsconfig-utils": "8.49.0", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -1201,16 +1175,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.49.0.tgz", + "integrity": "sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.49.0", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1225,13 +1199,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.49.0.tgz", + "integrity": "sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.49.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1312,9 +1286,9 @@ } }, "node_modules/@vscode/vsce": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.0.tgz", - "integrity": "sha512-LY9r2T4joszRjz4d92ZPl6LTBUPS4IWH9gG/3JUv+1QyBJrveZlcVISuiaq0EOpmcgFh0GgVgKD4rD/21Tu8sA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", "dev": true, "license": "MIT", "dependencies": { @@ -1359,17 +1333,17 @@ } }, "node_modules/@vscode/vsce-sign": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.8.tgz", - "integrity": "sha512-H7p8E11cZMj6mt8xIi3QXZ7dSU/2MH3Y7c+5JfUhHAV4xfaPNc8ozwLVK282c6ah596KoIJIdPUlNHV7Qs/5JA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", "dev": true, "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.txt", "optionalDependencies": { "@vscode/vsce-sign-alpine-arm64": "2.0.6", "@vscode/vsce-sign-alpine-x64": "2.0.6", - "@vscode/vsce-sign-darwin-arm64": "2.0.2", - "@vscode/vsce-sign-darwin-x64": "2.0.2", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", "@vscode/vsce-sign-linux-arm": "2.0.6", "@vscode/vsce-sign-linux-arm64": "2.0.6", "@vscode/vsce-sign-linux-x64": "2.0.6", @@ -1406,9 +1380,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-arm64": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz", - "integrity": "sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", "cpu": [ "arm64" ], @@ -1420,9 +1394,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-x64": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz", - "integrity": "sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", "cpu": [ "x64" ], @@ -1515,15 +1489,15 @@ } }, "node_modules/@vscode/vsce/node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -1571,11 +1545,11 @@ } }, "node_modules/@vscode/vsce/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -2410,9 +2384,9 @@ "license": "MIT" }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "dev": true, "license": "MIT", "dependencies": { @@ -2427,9 +2401,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "dev": true, "license": "MIT", "engines": { @@ -2940,20 +2914,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -3178,9 +3138,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -3313,9 +3273,9 @@ "optional": true }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -3400,13 +3360,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3918,9 +3871,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -3984,13 +3937,13 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "dev": true, "license": "MIT", "dependencies": { - "jws": "^3.2.2", + "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -4020,9 +3973,9 @@ } }, "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "dev": true, "license": "MIT", "dependencies": { @@ -4032,13 +3985,13 @@ } }, "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "dev": true, "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -4521,9 +4474,9 @@ "license": "MIT" }, "node_modules/node-abi": { - "version": "3.80.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.80.0.tgz", - "integrity": "sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA==", + "version": "3.85.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", + "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", "dev": true, "license": "MIT", "optional": true, @@ -4543,9 +4496,9 @@ "optional": true }, "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", - "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz", + "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==", "dev": true, "license": "MIT", "dependencies": { @@ -4553,7 +4506,7 @@ "fs-extra": "^11.1.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/normalize-package-data": { @@ -5710,13 +5663,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/stdin-discarder": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", @@ -6087,6 +6033,54 @@ "url": "https://bevry.me/fund" } }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -6630,7 +6624,7 @@ }, "vscode-cedar-wasm/pkg": { "name": "vscode-cedar-wasm", - "version": "0.10.0", + "version": "0.10.1", "license": "SEE LICENSE IN LICENSE" } } diff --git a/package.json b/package.json index baf7c55..b5e1dea 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/cedar-policy/vscode-cedar/issues" }, "qna": "https://github.com/cedar-policy/vscode-cedar/issues", - "version": "0.10.0", + "version": "0.10.1", "preview": true, "icon": "icons/cedar-policy.png", "engines": { @@ -303,13 +303,13 @@ "@types/mocha": "^10.0.10", "@types/node": "=18.15.0", "@types/vscode": "=1.83.0", - "@typescript-eslint/eslint-plugin": "^8.46.4", - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/eslint-plugin": "^8.49.0", + "@typescript-eslint/parser": "^8.49.0", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", - "@vscode/vsce": "^3.7.0", + "@vscode/vsce": "^3.7.1", "eslint": "^9.39.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "mocha": "^11.7.5", "typescript": "^5.9.3" } diff --git a/src/diagnostics.ts b/src/diagnostics.ts index e4e145c..b607810 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -49,7 +49,7 @@ const addDiagnosticsError = ( diagnostics.push(diagnostic); }; -const determineRangeFromPolicyError = ( +const determineRangeFromPolicyMessage = ( vpm: cedar.ValidateMessage, policy: string, defaultErrorRange: vscode.Range, @@ -509,18 +509,19 @@ export const addValidationDiagnosticWarning = ( diagnostics.push(diagnostic); }; -export const addPolicyResultErrors = ( +export const addPolicyResultMessages = ( diagnostics: vscode.Diagnostic[], - errors: cedar.ValidateMessage[], + messages: cedar.ValidateMessage[], policy: string, effectRange: vscode.Range, - startLine: number + startLine: number, + areWarnings: boolean ) => { // create an error for each of the errors - errors.forEach((vpm) => { + messages.forEach((vpm) => { let e = vpm.message; let diagnosticCode = undefined; - let range = determineRangeFromPolicyError( + let range = determineRangeFromPolicyMessage( vpm, policy, effectRange, @@ -564,7 +565,9 @@ export const addPolicyResultErrors = ( const diagnostic = new vscode.Diagnostic( range, e, - vscode.DiagnosticSeverity.Error + areWarnings + ? vscode.DiagnosticSeverity.Warning + : vscode.DiagnosticSeverity.Error ); diagnostic.source = SOURCE_CEDAR; if (diagnosticCode) { diff --git a/src/test/suite/validation.test.ts b/src/test/suite/validation.test.ts index 83f8e35..fe3fd12 100644 --- a/src/test/suite/validation.test.ts +++ b/src/test/suite/validation.test.ts @@ -14,7 +14,6 @@ import { MISMATCH_ATTR_REGEX, NOTALLOWED_PARENT_REGEX, NOTDECLARED_TYPE_REGEX, - OFFSET_POLICY_REGEX, UNDECLARED_REGEX, UNDECLARED_ACTION_REGEX, UNRECOGNIZED_REGEX, @@ -36,6 +35,43 @@ suite('Validation Schema Cedar Test Suite', () => { // The name `ipaddr` shadows a builtin Cedar name. You'll have to refer to the builtin as `__cedar::ipaddr`. // The name `String` shadows a builtin Cedar name. You'll have to refer to the builtin as `__cedar::String`. assert.equal(result.warnings?.length, 2); + result.free(); + }); + + test('validate __cedar reserved', async () => { + const schema = readTestDataFile('reserved', '__cedar.cedarschema'); + const result: cedar.ValidateSchemaResult = + cedar.validateSchemaCedar(schema); + assert.equal(result.success, false); + // error parsing schema: use of the reserved `__cedar` namespace + assert.equal(result.errors?.length, 1); + if (result.errors) { + let e = result.errors[0]; + assert.ok(e.message.includes('use of the reserved `__cedar` namespace')); + assert.equal(e.offset, 180); + assert.equal(e.length, 7); + } + + result.free(); + }); + + test('validate Set reserved', async () => { + const schema = readTestDataFile('reserved', 'set.cedarschema'); + const result: cedar.ValidateSchemaResult = + cedar.validateSchemaCedar(schema); + assert.equal(result.success, false); + // error parsing schema: this uses a reserved schema keyword: `Set` + assert.equal(result.errors?.length, 1); + if (result.errors) { + let e = result.errors[0]; + assert.ok( + e.message.includes('this uses a reserved schema keyword: `Set`') + ); + assert.equal(e.offset, 188); + assert.equal(e.length, 3); + } + + result.free(); }); }); @@ -56,26 +92,21 @@ suite('Validation RegEx Test Suite', () => { result.free(); }); - test('validate policy error "offset"', async () => { - const policy = readTestDataFile('offset', 'policy.cedar'); - const schema = readTestDataFile('offset', 'cedarschema.json'); + test('validate policy warning "impossible"', async () => { + const policy = readTestDataFile('impossible', 'policy.cedar'); + const schema = readTestDataFile('impossible', 'cedarschema.json'); const result: cedar.ValidatePolicyResult = cedar.validatePolicySchemaJSON( schema, policy ); - assert.equal(result.success, false); + assert.equal(result.success, true); + assert.equal(result.warnings?.length, 1); - if (result.errors) { - // the types __cedar::internal::True and Long are not compatible\nfor policy `policy0`, both operands to a `==` expression must have compatible types. Types must be exactly equal to be compatible - let e: cedar.ValidateMessage = result.errors[0]; - assert.ok( - e.message.startsWith( - 'the types __cedar::internal::True and Long are not compatible' - ) - ); - assert.equal(e.offset, 44); - assert.equal(e.length, 9); + if (result.warnings) { + // for policy `policy0`, policy is impossible: the policy expression evaluates to false for all valid requests + let e: cedar.ValidateMessage = result.warnings[0]; + assert.ok(e.message.includes('policy is impossible:')); } result.free(); diff --git a/src/validate.ts b/src/validate.ts index 02b91e1..1896698 100644 --- a/src/validate.ts +++ b/src/validate.ts @@ -4,7 +4,7 @@ import * as vscode from 'vscode'; import * as cedar from 'vscode-cedar-wasm'; import { - addPolicyResultErrors, + addPolicyResultMessages, addSyntaxDiagnosticErrors, addValidationDiagnosticWarning, determineRangeFromOffset, @@ -253,13 +253,24 @@ export const validateCedarDoc = async ( policyText ); } + if (policyResult.warnings) { + addPolicyResultMessages( + diagnostics, + policyResult.warnings, + policyText, + policyRange.effectRange, + policyRange.range.start.line, + true + ); + } if (policyResult.success === false && policyResult.errors) { - addPolicyResultErrors( + addPolicyResultMessages( diagnostics, policyResult.errors, policyText, policyRange.effectRange, - policyRange.range.start.line + policyRange.range.start.line, + false ); } policyResult.free(); diff --git a/testdata/offset/cedarschema.json b/testdata/impossible/cedarschema.json similarity index 100% rename from testdata/offset/cedarschema.json rename to testdata/impossible/cedarschema.json diff --git a/testdata/offset/policy.cedar b/testdata/impossible/policy.cedar similarity index 100% rename from testdata/offset/policy.cedar rename to testdata/impossible/policy.cedar diff --git a/testdata/reserved/__cedar.cedarschema b/testdata/reserved/__cedar.cedarschema new file mode 100644 index 0000000..285f5bd --- /dev/null +++ b/testdata/reserved/__cedar.cedarschema @@ -0,0 +1,5 @@ +// error parsing schema: use of the reserved `__cedar` namespace +// Names containing `__cedar` (for example: `__cedar::A`, `A::__cedar`, or `A::__cedar::B`) are reserved +namespace __cedar { + entity foo; +} \ No newline at end of file diff --git a/testdata/reserved/set.cedarschema b/testdata/reserved/set.cedarschema new file mode 100644 index 0000000..d8e4cd0 --- /dev/null +++ b/testdata/reserved/set.cedarschema @@ -0,0 +1,5 @@ +// error parsing schema: this uses a reserved schema keyword: `Set` +// Keywords such as `entity`, `extension`, `set` and `record` cannot be used as common type names +namespace NS { + type Set = Long; +} \ No newline at end of file diff --git a/vscode-cedar-wasm/Cargo.lock b/vscode-cedar-wasm/Cargo.lock index abd767e..6489745 100644 --- a/vscode-cedar-wasm/Cargo.lock +++ b/vscode-cedar-wasm/Cargo.lock @@ -119,9 +119,9 @@ dependencies = [ [[package]] name = "cedar-policy" -version = "4.7.0" +version = "4.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec59e2364d36d767fe2be9a38040087746b1db20b27868701f4356d9fc589736" +checksum = "c8c84f46d7feed570e52cd93b0f1e3ce7f57e2ac61712fba0d1318f84c96a99b" dependencies = [ "cedar-policy-core", "cedar-policy-formatter", @@ -139,9 +139,9 @@ dependencies = [ [[package]] name = "cedar-policy-core" -version = "4.7.0" +version = "4.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9d9a9691e7429fc89b447222688bbe2ef052a2c9b1e1f3a1d3f169cae080a6" +checksum = "8011d10d2ffa8ee4497d4d7234d0d4e97f52a6e6e66a1150c5c3409ba7fe1b5c" dependencies = [ "chrono", "educe", @@ -167,9 +167,9 @@ dependencies = [ [[package]] name = "cedar-policy-formatter" -version = "4.7.0" +version = "4.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22c837a7c5e55828c73ea468ba368aa1c74fb151ff8110ff94fb97bebcb5d095" +checksum = "f29faad4ed540d812bc213b1228de39a34731730bca6dd51a8086796461415c0" dependencies = [ "cedar-policy-core", "itertools", @@ -541,9 +541,9 @@ dependencies = [ [[package]] name = "linked_hash_set" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +checksum = "984fb35d06508d1e69fc91050cceba9c0b748f983e6739fa2c7a9237154c52c8" dependencies = [ "linked-hash-map", ] @@ -968,9 +968,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.1" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" +checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" dependencies = [ "base64", "chrono", @@ -987,9 +987,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.1" +version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" +checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ "darling", "proc-macro2", @@ -1262,7 +1262,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vscode-cedar-wasm" -version = "0.10.0" +version = "0.10.1" dependencies = [ "cedar-policy", "cedar-policy-core", diff --git a/vscode-cedar-wasm/Cargo.toml b/vscode-cedar-wasm/Cargo.toml index 62cf79d..0b220ed 100644 --- a/vscode-cedar-wasm/Cargo.toml +++ b/vscode-cedar-wasm/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "vscode-cedar-wasm" -version = "0.10.0" +version = "0.10.1" edition = "2021" -description = "WASM bindgen bindings for cedar-policy 4.7.0" +description = "WASM bindgen bindings for cedar-policy 4.8.2" license-file = "LICENSE" homepage = "https://cedarpolicy.com" repository = "https://github.com/cedar-policy/vscode-cedar" @@ -30,9 +30,9 @@ serde_json = "1.0.96" console_error_panic_hook = { version = "0.1.6", optional = true } # cedar -cedar-policy = { version = "=4.7.0" } -cedar-policy-core = { version = "=4.7.0" } -cedar-policy-formatter = { version = "=4.7.0" } +cedar-policy = { version = "=4.8.2" } +cedar-policy-core = { version = "=4.8.2" } +cedar-policy-formatter = { version = "=4.8.2" } miette = "7.2.0" [dev-dependencies] diff --git a/vscode-cedar-wasm/src/policy_validator.rs b/vscode-cedar-wasm/src/policy_validator.rs index 78f8830..93a0b63 100644 --- a/vscode-cedar-wasm/src/policy_validator.rs +++ b/vscode-cedar-wasm/src/policy_validator.rs @@ -14,6 +14,7 @@ const VALIDATE_POLICY_RESULT: &'static str = r#" export class ValidatePolicyResult { free(): void; readonly success: boolean; + readonly warnings: Array | undefined; readonly errors: Array | undefined; }"#; @@ -22,6 +23,7 @@ export class ValidatePolicyResult { pub struct ValidatePolicyResult { #[wasm_bindgen(readonly)] pub success: bool, + warnings: Option>, errors: Option>, } @@ -31,6 +33,11 @@ impl ValidatePolicyResult { pub fn errors(&self) -> Option { self.errors.as_ref().map(convert_messages_to_js_array) } + + #[wasm_bindgen(getter)] + pub fn warnings(&self) -> Option { + self.warnings.as_ref().map(convert_messages_to_js_array) + } } #[wasm_bindgen(js_name = validatePolicySchemaJSON)] @@ -45,6 +52,7 @@ pub fn validate_policy_schema_json( // JSON Schema file could not be parsed: expected `,` or `}` at line 8 column 38' return ValidatePolicyResult { success: false, + warnings: None, errors: Some(vec![ValidateMessage { message: String::from(&format!("{e}")), offset: 0, @@ -66,6 +74,7 @@ pub fn validate_policy_schema_cedar( Err(e) => { return ValidatePolicyResult { success: false, + warnings: None, errors: Some(vec![ValidateMessage { message: String::from(&format!("{e}")), offset: 0, @@ -84,14 +93,40 @@ fn validate_policy_schema(schema: Schema, input_policies_str: &str) -> ValidateP Err(_e) => { return ValidatePolicyResult { success: false, + warnings: None, errors: None, } } }; let result = validator.validate(&pset, ValidationMode::Strict); + + let mut validate_warnings = Vec::new(); + result.validation_warnings().for_each(|w| { + w.labels().iter_mut().for_each(|labels| { + labels.as_mut().for_each(|labeled_span| { + let vpm = ValidateMessage { + message: match labeled_span.label() { + None => match w.help() { + None => w.to_string(), + Some(help) => format!("{}\n{}", w, help), + }, + Some(msg) => match w.help() { + None => format!("{}\n{}", w, msg), + Some(help) => format!("{}\n{}\n{}", w, msg, help), + }, + }, + offset: labeled_span.offset(), + length: labeled_span.len(), + }; + validate_warnings.push(vpm); + }); + }); + }); + if result.validation_passed() { return ValidatePolicyResult { success: true, + warnings: if validate_warnings.is_empty() { None } else { Some(validate_warnings) }, errors: None, }; } else { @@ -117,8 +152,10 @@ fn validate_policy_schema(schema: Schema, input_policies_str: &str) -> ValidateP }); }); }); + return ValidatePolicyResult { success: false, + warnings: if validate_warnings.is_empty() { None } else { Some(validate_warnings) }, errors: Some(validate_errs), }; } @@ -138,6 +175,7 @@ mod test { result, ValidatePolicyResult { success: false, + warnings: _, errors: _, } )); diff --git a/vscode-cedar-wasm/src/schema_validator.rs b/vscode-cedar-wasm/src/schema_validator.rs index 6756467..d4f1b30 100644 --- a/vscode-cedar-wasm/src/schema_validator.rs +++ b/vscode-cedar-wasm/src/schema_validator.rs @@ -55,12 +55,18 @@ fn format_diagnostic_message(diagnostic: &T) -> String { pub fn validate_schema_json(input_schema_str: &str) -> ValidateSchemaResult { let result = match ValidatorSchema::from_json_str(&input_schema_str, Extensions::all_available()) { - Ok(_schema) => ValidateSchemaResult { - success: true, - warnings: None, - errors: None, - }, + Ok(_schema) => { + // TODO: Check if there's a way to get warnings from successful schema validation in Cedar 4.8.2 + ValidateSchemaResult { + success: true, + warnings: None, + errors: None, + } + } Err(e) => { + let mut warnings = Vec::new(); + let mut errors = Vec::new(); + let (offset, length) = if let Some(labels) = e.labels() { if let Some(label) = labels.into_iter().next() { (label.offset(), label.len()) @@ -71,14 +77,21 @@ pub fn validate_schema_json(input_schema_str: &str) -> ValidateSchemaResult { (0, 0) }; + let message = ValidateMessage { + message: format_diagnostic_message(&e), + offset, + length, + }; + + match e.severity() { + Some(miette::Severity::Warning) => warnings.push(message), + _ => errors.push(message), + } + ValidateSchemaResult { - success: false, - warnings: None, - errors: Some(vec![ValidateMessage { - message: format_diagnostic_message(&e), - offset, - length, - }]), + success: errors.is_empty(), + warnings: if warnings.is_empty() { None } else { Some(warnings) }, + errors: if errors.is_empty() { None } else { Some(errors) }, } } }; @@ -90,35 +103,43 @@ pub fn validate_schema_cedar(input_schema_str: &str) -> ValidateSchemaResult { let result = match ValidatorSchema::from_cedarschema_str(&input_schema_str, Extensions::all_available()) { - Ok(_schema) => { + Ok((_schema, warnings_iter)) => { let mut warnings_vec = Vec::new(); - for warning in _schema.1.into_iter() { - match HasOffsetLength::offset_length(&warning) { - offset_length => warnings_vec.push(ValidateMessage { - message: format_diagnostic_message(&warning), - offset: offset_length.offset, - length: offset_length.length, - }), - }; + for warning in warnings_iter { + let offset_length = HasOffsetLength::offset_length(&warning); + warnings_vec.push(ValidateMessage { + message: format_diagnostic_message(&warning), + offset: offset_length.offset, + length: offset_length.length, + }); } ValidateSchemaResult { success: true, - warnings: Some(warnings_vec), + warnings: if warnings_vec.is_empty() { None } else { Some(warnings_vec) }, errors: None, } } Err(e) => { - let error = match HasOffsetLength::offset_length(&e) { + let mut warnings = Vec::new(); + let mut errors = Vec::new(); + + let message = match HasOffsetLength::offset_length(&e) { offset_length => ValidateMessage { message: format_diagnostic_message(&e), offset: offset_length.offset, length: offset_length.length, }, }; + + match e.severity() { + Some(miette::Severity::Warning) => warnings.push(message), + _ => errors.push(message), + } + ValidateSchemaResult { - success: false, - warnings: None, - errors: Some(vec![error]), + success: errors.is_empty(), + warnings: if warnings.is_empty() { None } else { Some(warnings) }, + errors: if errors.is_empty() { None } else { Some(errors) }, } } };