serverless-package-external
Version:
Add external folders to the deploy package
2 lines (1 loc) • 2.46 kB
JavaScript
"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var e=_interopDefault(require("fs")),t=_interopDefault(require("path")),s=_interopDefault(require("rimraf")),i=_interopDefault(require("yesno"));var symlink_createFolder=(r,n)=>{const o=t.join(process.cwd(),t.basename(r));return((e,t)=>{let s=Promise.resolve();return e.length>0&&(s=new Promise((s,r)=>{let n="Folders";console.log(e),e.length<5&&(n=e.join(", ")),i.ask(`${n} from ${t} already exist${1==e.length?"s":""} in the service folder, do you want to overwrite files?`,!1,e=>e?s():r())})),s})((t=>{try{if(!e.lstatSync(t).isSymbolicLink())return!0}catch(e){}return!1})(o)?[o]:[],r).then(()=>{n.cli.log("[serverless-package-external] Symlinking "+r),s.sync(o),"win32"!==process.platform?e.symlinkSync(r,o):e.symlinkSync(r,o,"junction")})},symlink_removeFolder=e=>{s.sync(t.join(process.cwd(),e))};var r=class{constructor(e,t){this.serverless=e,this.options=Object.assign({external:[]},this.serverless.service.custom&&this.serverless.service.custom.packageExternal||{}),this.symlinked=!1,this.commands={packageExternal:{usage:"create external package symlinks",lifecycleEvents:["run"],commands:{run:{usage:"remove symlinks",lifecycleEvents:["init"]}}}},this.hooks={"before:package:createDeploymentArtifacts":this.beforeDeploy.bind(this),"before:deploy:function:packageFunction":this.beforeDeploy.bind(this),"after:deploy:function:packageFunction":this.afterDeploy.bind(this),"after:package:createDeploymentArtifacts":this.afterDeploy.bind(this),"before:offline:start:init":this.beforeDeploy.bind(this),"before:offline:start":this.beforeDeploy.bind(this),"before:offline:start:end":this.afterDeploy.bind(this),"invoke:local:loadEnvVars":this.beforeDeploy.bind(this),"invoke:local:invoke":this.afterDeploy.bind(this),"packageExternal:run:init":this.beforeDeploy.bind(this)},this.handleExit()}beforeDeploy(){return Promise.all(this.options.external.map(e=>{this.symlinked=!0;const t=e.split("*").join("");return symlink_createFolder(t,this.serverless)})).then(()=>{this.serverless.cli.log("[serverless-package-external] is complete")})}afterDeploy(){this.symlinked&&(this.serverless.cli.log("[serverless-package-external] cleaning up"),this.options.external.forEach(e=>{const s=e.split("*").join(""),i=t.basename(s);symlink_removeFolder(i)}))}handleExit(e){["SIGINT","SIGTERM","SIGQUIT"].forEach(e=>process.on(e,()=>{this.afterDeploy()}))}};module.exports=r;