From f52e3cf49da3584bbe4a315ef2872eafe17134e2 Mon Sep 17 00:00:00 2001 From: Shane McLaughlin Date: Mon, 7 Feb 2022 15:38:50 -0800 Subject: [PATCH] fix: stat will follow symlinks (#559) * fix: stat will follow symlinks * test: another mock of lstat * chore: adding types for SDR * chore: bump and caret core * chore: bump kit * chore: adding types for SDR --- package.json | 4 +-- src/resolve/treeContainers.ts | 5 +-- test/client/retrieve.test.ts | 2 +- test/resolve/treeContainers.test.ts | 2 +- yarn.lock | 49 +++++++++++++++++++---------- 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 9fa49a84c8..1ccfea4c1a 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "node": ">=12.0.0" }, "dependencies": { - "@salesforce/core": "2.33.1", - "@salesforce/kit": "^1.5.0", + "@salesforce/core": "^2.35.0", + "@salesforce/kit": "^1.5.32", "@salesforce/ts-types": "^1.4.2", "archiver": "^5.3.0", "fast-xml-parser": "^3.17.4", diff --git a/src/resolve/treeContainers.ts b/src/resolve/treeContainers.ts index 5a4b5ab38b..c9d8bdd1c5 100644 --- a/src/resolve/treeContainers.ts +++ b/src/resolve/treeContainers.ts @@ -6,7 +6,7 @@ */ import { join, dirname, basename, normalize, sep } from 'path'; import { Readable } from 'stream'; -import { lstatSync, existsSync, readdirSync, createReadStream, readFileSync } from 'graceful-fs'; +import { statSync, existsSync, readdirSync, createReadStream, readFileSync } from 'graceful-fs'; import * as unzipper from 'unzipper'; import { baseName, parseMetadataXml } from '../utils'; import { LibraryError } from '../errors'; @@ -86,7 +86,8 @@ export abstract class TreeContainer { */ export class NodeFSTreeContainer extends TreeContainer { public isDirectory(fsPath: SourcePath): boolean { - return lstatSync(fsPath).isDirectory(); + // use stat instead of lstat to follow symlinks + return statSync(fsPath).isDirectory(); } public exists(fsPath: SourcePath): boolean { diff --git a/test/client/retrieve.test.ts b/test/client/retrieve.test.ts index 31e29ef40c..e08015943b 100644 --- a/test/client/retrieve.test.ts +++ b/test/client/retrieve.test.ts @@ -68,7 +68,7 @@ describe('Tooling Retrieve', () => { }); sandboxStub.stub(fs, 'existsSync').returns(true); // @ts-ignore - sandboxStub.stub(fs, 'lstatSync').returns({ isDirectory: () => false }); + sandboxStub.stub(fs, 'statSync').returns({ isDirectory: () => false }); const mockFS = sandboxStub.stub(fs, 'readFileSync'); mockFS .withArgs(path.join('file', 'path', 'MyTestClass.cls'), 'utf8') diff --git a/test/resolve/treeContainers.test.ts b/test/resolve/treeContainers.test.ts index 9b399a8c29..dd5e9bed1d 100644 --- a/test/resolve/treeContainers.test.ts +++ b/test/resolve/treeContainers.test.ts @@ -78,7 +78,7 @@ describe('Tree Containers', () => { }); it('should use expected Node API for isDirectory', () => { - const statStub = env.stub(fs, 'lstatSync'); + const statStub = env.stub(fs, 'statSync'); // @ts-ignore lstat returns more than isDirectory function statStub.withArgs(path).returns({ isDirectory: () => true }); expect(tree.isDirectory(path)).to.be.true; diff --git a/yarn.lock b/yarn.lock index e8608aabce..174355c700 100644 --- a/yarn.lock +++ b/yarn.lock @@ -555,21 +555,23 @@ mv "~2" safe-json-stringify "~1" -"@salesforce/core@2.33.1": - version "2.33.1" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-2.33.1.tgz#23c22953174ad0e809b2f1c7b2881b5ba8a89d9c" - integrity sha512-jKVFYEvlV+loBoau5heBOVXmzsPO+RbYh6SPybJK6xF7khQmzu7+WAQbikY2eY8VaXcded2kka8L/FKuD/LKBg== +"@salesforce/core@^2.35.0": + version "2.35.0" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-2.35.0.tgz#15890d5b0294c56b5b435a4803f37f6a0c177893" + integrity sha512-eqBZtaHn3s3FsASjsrZ8T9e/TE+aHuB2DkuKDEierDYW5cSVqJyZ0ccMi9QKI7oQuPO1UHhcUyWmyezkdEjYzg== dependencies: "@salesforce/bunyan" "^2.0.0" - "@salesforce/kit" "^1.5.0" + "@salesforce/kit" "^1.5.17" "@salesforce/schemas" "^1.0.1" - "@salesforce/ts-types" "^1.5.13" + "@salesforce/ts-types" "^1.5.20" "@types/graceful-fs" "^4.1.5" - "@types/jsforce" "^1.9.35" + "@types/jsforce" "^1.9.38" "@types/mkdirp" "^1.0.1" + archiver "^5.3.0" debug "^3.1.0" faye "^1.4.0" graceful-fs "^4.2.4" + js2xmlparser "^4.0.1" jsen "0.6.6" jsforce "^1.11.0" jsonwebtoken "8.5.0" @@ -622,13 +624,14 @@ typedoc-plugin-external-module-name "~4.0.0" typescript "^4.1.3" -"@salesforce/kit@^1.5.0": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.5.8.tgz#7a1abb46ffd6af8f35d4af8ee08a80eee9bcdbb1" - integrity sha512-tBq4eJfLvmtQT/jJElEN8bSJzKbVkY5yh9W/0CASTVw+aSOQ46Z8jYDtnYhRo+u5gDS4EiUQJKcq1J6xfkY7ZQ== +"@salesforce/kit@^1.5.17", "@salesforce/kit@^1.5.32": + version "1.5.32" + resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.5.32.tgz#ed5925ea6cca23ef7cdef8086d9e663e50f98e93" + integrity sha512-5MIYLLx1Ee3eTcqEoqFXDCKXwtU8J5wo1QWyzb+BjReNGLVUuSc6Qi5JoCZtYGXeZpdBJmM3s9Y14QXr53ZmQw== dependencies: - "@salesforce/ts-types" "^1.5.13" - tslib "^1.10.0" + "@salesforce/ts-types" "^1.5.20" + shx "^0.3.3" + tslib "^2.2.0" "@salesforce/prettier-config@^0.0.2": version "0.0.2" @@ -649,7 +652,7 @@ sinon "^5.1.1" tslib "^2.2.0" -"@salesforce/ts-types@^1.4.2", "@salesforce/ts-types@^1.5.13", "@salesforce/ts-types@^1.5.20": +"@salesforce/ts-types@^1.4.2", "@salesforce/ts-types@^1.5.20": version "1.5.20" resolved "https://registry.yarnpkg.com/@salesforce/ts-types/-/ts-types-1.5.20.tgz#f6875a710ceca48223b240026a14af6d3b39882f" integrity sha512-Ov6um4CWd63EvkRavkHG0J/P9XYL55sdkDWPMr7+AIgqh5flHxDRz09/C4e9M94aX30rzJxW4TVX6EBf4Cu2BQ== @@ -806,7 +809,7 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -"@types/jsforce@^1.9.35", "@types/jsforce@^1.9.38": +"@types/jsforce@^1.9.38": version "1.9.40" resolved "https://registry.yarnpkg.com/@types/jsforce/-/jsforce-1.9.40.tgz#fc83fd4b5d8b67f19543cf8b86d24653e3f13ede" integrity sha512-Zj53GKHjmrpbVmItS+XlenPFHtQAntADjt8g1zEs05dVfvfCHEty9NnlKTjwYA49BRNi4tD3S8TZb/gRgC0FyA== @@ -3890,6 +3893,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js2xmlparser@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== + dependencies: + xmlcreate "^2.0.4" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -5692,7 +5702,7 @@ shelljs@0.8.5, shelljs@^0.8.4, shelljs@^0.8.5, shelljs@~0.8.4: interpret "^1.0.0" rechoir "^0.6.2" -shx@^0.3.2: +shx@^0.3.2, shx@^0.3.3: version "0.3.4" resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.4.tgz#74289230b4b663979167f94e1935901406e40f02" integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== @@ -6257,7 +6267,7 @@ tsconfig-paths@^3.11.0, tsconfig-paths@^3.12.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -6619,6 +6629,11 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlcreate@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== + xmldom-sfdx-encoding@^0.1.29: version "0.1.30" resolved "https://registry.yarnpkg.com/xmldom-sfdx-encoding/-/xmldom-sfdx-encoding-0.1.30.tgz#bc075757788573b8988facd6f7e7f073440b20b9"