diff --git a/.gitignore b/.gitignore index c2658d7..6863e97 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ node_modules/ +sftp-config.json +.vscode diff --git a/index.js b/index.js index ded7e18..bba6f1e 100755 --- a/index.js +++ b/index.js @@ -1,28 +1,68 @@ #! /usr/bin/env node -var stripJsonComments = require('strip-json-comments'); -var fs = require('fs'); +const stripJsonComments = require("strip-json-comments"); +const fs = require("fs"); +const path = require("path"); -var sublimeJson = fs.readFileSync('./sftp-config.json', 'utf8'); -var sublimeJson = stripJsonComments(sublimeJson).replace(/\,(?!\s*?[\{\[\"\'\w])/g, ''); -var sublimeJson = JSON.parse(sublimeJson); +let sublimeJson = fs.readFileSync("./sftp-config.json", "utf8"); +sublimeJson = stripJsonComments(sublimeJson).replace( + /\,(?!\s*?[\{\[\"\'\w])/g, + "" +); +sublimeJson = JSON.parse(sublimeJson); console.log("Source file: ", sublimeJson); -var codeJson = { - "host": sublimeJson.host, - "protocol": sublimeJson.type, - "port": parseInt(sublimeJson.port), - "username": sublimeJson.user, - "password": sublimeJson.password, - "remotePath": sublimeJson.remote_path, - "uploadOnSave": sublimeJson.upload_on_save +let type = sublimeJson.type; +let secure = false; +if (["ftp", "ftps", "sftp"].indexOf(sublimeJson.type) === -1) { + throw new Error("Invalid type"); } + +if (type === 'ftps') { + secure = true; + type = 'ftp'; +} + +let codeJson = { + name: path.basename(__dirname), + host: sublimeJson.host, + protocol: type, + port: parseInt(sublimeJson.port), + username: sublimeJson.user, + password: sublimeJson.password, + remotePath: sublimeJson.remote_path, + uploadOnSave: sublimeJson.upload_on_save, + secure, + ignore: [".vscode", ".git", ".DS_Store"], +}; + +if (sublimeJson.ssh_key_file) { + codeJson.privateKeyPath = sublimeJson.ssh_key_file; +} + +if ( + sublimeJson.remote_time_offset_in_hours && + sublimeJson.remote_time_offset_in_hours != 0 +) { + codeJson.remoteTimeOffsetInHours = sublimeJson.remote_time_offset_in_hours; +} + +if (sublimeJson.ignore_regexes) { + const values = sublimeJson.ignore_regexes.map((item) => + item.replaceAll("\\", "") + ); + + codeJson.ignore = codeJson.ignore + .concat(values) + .filter((value, index, self) => self.indexOf(value) === index); +} + codeJson = JSON.stringify(codeJson, null, 4); console.log("Target content: ", codeJson); -var codeDir = './.vscode'; +const codeDir = "./.vscode"; if (!fs.existsSync(codeDir)) { - fs.mkdirSync(codeDir); + fs.mkdirSync(codeDir); } -fs.writeFileSync('./.vscode/sftp.json', codeJson); +fs.writeFileSync("./.vscode/sftp.json", codeJson); console.log("All done!"); diff --git a/package-lock.json b/package-lock.json index 21ff170..70e4d8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,29 @@ { "name": "@copperdust/sublime-visual-studio-code-sftp-copy", - "version": "1.0.0", - "lockfileVersion": 1, + "version": "1.0.2", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@copperdust/sublime-visual-studio-code-sftp-copy", + "version": "1.0.2", + "license": "ISC", + "dependencies": { + "strip-json-comments": "^3.0.1" + }, + "bin": { + "sublime-sftp-to-vs-code": "index.js" + } + }, + "node_modules/strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "engines": { + "node": ">=8" + } + } + }, "dependencies": { "strip-json-comments": { "version": "3.0.1",