From 36ec57ba43e697b098eeaf31c447720195454cac Mon Sep 17 00:00:00 2001 From: Jaryd Carolin Date: Fri, 5 Oct 2018 23:25:11 +1000 Subject: [PATCH 1/2] Allow functions to be declared within the root serverless.yml Resolves #4 --- lib/symlinkHook.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/symlinkHook.js b/lib/symlinkHook.js index 8c3612b..c684df1 100644 --- a/lib/symlinkHook.js +++ b/lib/symlinkHook.js @@ -17,6 +17,7 @@ function writeTempServerlessConfig(folder, name, service, config) { provider: _.omit(service.provider, 'iamRoleStatements'), service: service.serviceObject, resources: service.resources, + functions: service.functions, plugins, }, config); if (tmpYamlData.provider.iamRoleStatements) { From ab43b59835d86c92122c474e74b2a9496c0802f8 Mon Sep 17 00:00:00 2001 From: Jaryd Carolin Date: Tue, 30 Oct 2018 15:01:04 +1100 Subject: [PATCH 2/2] Update symlinkHook.js Prevent service from being mutated --- lib/symlinkHook.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/symlinkHook.js b/lib/symlinkHook.js index c684df1..8f7ab99 100644 --- a/lib/symlinkHook.js +++ b/lib/symlinkHook.js @@ -11,17 +11,19 @@ function writeTempServerlessConfig(folder, name, service, config) { if (index >= 0) { plugins.splice(index, 1); } - const tmpYamlData = _.merge({ - custom: service.custom, - package: service.package, - provider: _.omit(service.provider, 'iamRoleStatements'), - service: service.serviceObject, - resources: service.resources, - functions: service.functions, + const serviceClone = _.cloneDeep(service); + + const tmpYamlData = _.merge({ + custom: serviceClone.custom, + package: serviceClone.package, + provider: _.omit(serviceClone.provider, 'iamRoleStatements'), + service: serviceClone.serviceObject, + resources: serviceClone.resources, + functions: serviceClone.functions, plugins, }, config); if (tmpYamlData.provider.iamRoleStatements) { - const roles = service.provider.iamRoleStatements; + const roles = serviceClone.provider.iamRoleStatements; roles.forEach((role) => { const exists = tmpYamlData.provider.iamRoleStatements.find(existingRole => _.isEqual(existingRole, role)); if (!exists) { @@ -29,14 +31,14 @@ function writeTempServerlessConfig(folder, name, service, config) { } }); } else { - tmpYamlData.provider.iamRoleStatements = service.provider.iamRoleStatements; + tmpYamlData.provider.iamRoleStatements = serviceClone.provider.iamRoleStatements; } // for custom domain names plugin if (tmpYamlData.custom.customDomain && !_.get(config, 'custom.customDomain.basePath')) { tmpYamlData.custom.customDomain.basePath = _.kebabCase(name); } // rename based on directory and base config - const mainServiceName = typeof service.service === 'string' ? service.service : service.service.name; + const mainServiceName = typeof serviceClone.service === 'string' ? serviceClone.service : serviceClone.serviceClone.name; tmpYamlData.service = `${mainServiceName}-${name}`; const tempYamlPath = path.join(folder, 'serverless.yaml'); fs.writeFileSync(tempYamlPath, yaml.safeDump(tmpYamlData, { skipInvalid: true }));