executor: node

parameters:
  path:
    type: string
    default: .
  cache-version:
    type: string
  cache-name:
    type: string
    default: dependencies
  before-install:
    type: steps
    default: []
  after-install:
    type: steps
    default: []

steps:
  - dependencies:
      path: << parameters.path >>
      before-install:
        - restore-cache:
            version: << parameters.cache-version >>
            cache-name: << parameters.cache-name >>
        - steps: << parameters.before-install >>
      after-install:
        - save-cache:
            version: << parameters.cache-version >>
            cache-name: << parameters.cache-name >>
            lockfile-parent-path: << parameters.path >>
            path: << parameters.path >>/node_modules
        - steps: << parameters.after-install >>
