nicolasdao / sls-config-parser

Parses serverless.yml files so that their values can be use locally in JS code during development.
BSD 3-Clause "New" or "Revised" License
3 stars 4 forks source link

Error when parsing severless.yml #6

Open JarnoRFB opened 3 years ago

JarnoRFB commented 3 years ago

Hi and thanks for this package! I want to parse my serverless.yml mainly to set tables for testing with https://github.com/freshollie/jest-dynalite . To test things I put a script readTables.js next to my serverless.yml.

const { Config } = require("sls-config-parser");
const cfg = new Config({});
console.log(cfg.config());

Howerver when I run it I get the following stack trace

/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:471
                        throw new Error(err.stack)
                        ^

Error: Error: Error: Error: Error: 'self' variable provider.stage located under Conditions.CreateTableAlarms.Fn::Equals[0] not found. Check if there are typos.
    at _resolveTokenRef (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:364:11)
    at /home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:36
    at Array.map (<anonymous>)
    at _injectTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:20)
    at _replaceTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:294:27)
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:461:25)
    at _resolveTokenRef (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:378:27)
    at /home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:36
    at Array.map (<anonymous>)
    at _injectTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:20)
    at _replaceTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:301:10)
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:461:25)
    at _resolveTokenRef (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:378:27)
    at /home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:36
    at Array.map (<anonymous>)
    at _injectTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:20)
    at _replaceTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:294:27)
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:461:25)
    at Config.config (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:599:13)
    at Object.<anonymous> (/home/rbusche/projects/digitalhumani/digitalhumani/api/readTables.js:36:17)
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:471:10)
    at _resolveTokenRef (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:378:27)
    at /home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:36
    at Array.map (<anonymous>)
    at _injectTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:404:20)
    at _replaceTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:294:27)
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:461:25)
    at Config.config (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:599:13)
    at Object.<anonymous> (/home/rbusche/projects/digitalhumani/digitalhumani/api/readTables.js:36:17)
    at Module._compile (node:internal/modules/cjs/loader:1083:30)
    at _replaceTokens (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:301:10)
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:461:25)
    at Config.config (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:599:13)
    at Object.<anonymous> (/home/rbusche/projects/digitalhumani/digitalhumani/api/readTables.js:36:17)
    at Module._compile (node:internal/modules/cjs/loader:1083:30)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
    at Module.load (node:internal/modules/cjs/loader:948:32)
    at Function.Module._load (node:internal/modules/cjs/loader:789:14)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:72:12)
    at node:internal/main/run_main_module:17:47
    at _parse (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:471:10)
    at Config.config (/home/rbusche/projects/digitalhumani/digitalhumani/node_modules/sls-config-parser/src/index.js:599:13)
    at Object.<anonymous> (/home/rbusche/projects/digitalhumani/digitalhumani/api/readTables.js:36:17)
    at Module._compile (node:internal/modules/cjs/loader:1083:30)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
    at Module.load (node:internal/modules/cjs/loader:948:32)
    at Function.Module._load (node:internal/modules/cjs/loader:789:14)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:72:12)
    at node:internal/main/run_main_module:17:47

The serverless.yml is split acrross different files that reference each other via ${file()}. Not sure if this is an obvious error, otherwise I am happy to share more or try to produce a minimal example of the error.

nicolasdao commented 3 years ago

Hi @JarnoRFB,

Thanks a lot for reporting this issue. I tried your code sample with a few variations and it worked on my side. Would you mind to provide some code sample that would help me reproduce your issue (maybe a dummy git repo that can be cloned safely).

nopol10 commented 1 year ago

Hi, this happens when a file referenced from serverless.yml references self:custom.

serverless.yml

service: serverless-test
frameworkVersion: "3"

custom:
  wow: "heh"
  documentation:
    version: "1"
    title: "Test API"
    description: "An api for testing"

provider:
  name: aws
  runtime: nodejs18.x
  environment:
    SECRET_0: haha
    SECRET_1: overridden

package:
  individually: true

functions:
  cool:
    name: ${file(./sls/a.yml):self_ref}
    handler: src/functions/cool-function.handler
    environment:
      SECRET_1: haha
      WOW: noway
      HUH: ${self:custom.wow}
    events:
      - http:
          path: cool
          method: get
          cors: true

./sls/a.yml

self_ref: ${self:custom.wow}