UNPKG

882 BJavaScriptView Raw
1'use strict';
2const YAML = require('js-yaml');
3const _ = require('lodash');
4const functionNames = [
5 'Ref',
6 'GetAtt'
7];
8const yamlType = (name, kind) => {
9 const functionName = _.includes(['Ref'], name) ? name : `Fn::${name}`;
10 return new YAML.Type(`!${name}`, {
11 kind,
12 construct: data => {
13 if (name === 'GetAtt') {
14 if (typeof data === 'string') {
15 const [first, ...tail] = data.split('.');
16 data = [first, tail.join('.')];
17 }
18 }
19 return { [functionName]: data };
20 }
21 });
22};
23const createSchema = () => {
24 const types = _.flatten(_.map(functionNames, functionName => _.map(['mapping', 'scalar', 'sequence'], kind => yamlType(functionName, kind))));
25 return YAML.Schema.create(types);
26};
27module.exports = {
28 schema: createSchema()
29};