All Projects → claylo → yaml-include

claylo / yaml-include

Licence: ISC license
Valid, modular YAML documents with js-yaml. Seriously.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to yaml-include

KaiZen-OpenApi-Parser
High-performance Parser, Validator, and Java Object Model for OpenAPI 3.x
Stars: ✭ 119 (+205.13%)
Mutual labels:  yaml, openapi
yamlinc
Compose multiple YAML files into one with $include tag. Split Swagger/OpenAPI into multiple YAML files.
Stars: ✭ 103 (+164.1%)
Mutual labels:  yaml, openapi
openapi-specification
Pinnacle REST API Open API Specification (swagger)
Stars: ✭ 20 (-48.72%)
Mutual labels:  yaml, openapi
Swaggen
OpenAPI/Swagger 3.0 Parser and Swift code generator
Stars: ✭ 385 (+887.18%)
Mutual labels:  yaml, openapi
Datamodel Code Generator
Pydantic model generator for easy conversion of JSON, OpenAPI, JSON Schema, and YAML data sources.
Stars: ✭ 393 (+907.69%)
Mutual labels:  yaml, openapi
Kaizen Openapi Editor
Eclipse Editor for the Swagger-OpenAPI Description Language
Stars: ✭ 97 (+148.72%)
Mutual labels:  yaml, openapi
Swurg
Parse OpenAPI documents into Burp Suite for automating OpenAPI-based APIs security assessments (approved by PortSwigger for inclusion in their official BApp Store).
Stars: ✭ 94 (+141.03%)
Mutual labels:  yaml, openapi
Swagger meqa
Auto generate and run tests using swagger/OpenAPI spec, no coding needed
Stars: ✭ 151 (+287.18%)
Mutual labels:  yaml, openapi
Ubigeo-Peru
Base de datos de departamentos, provincias y distritos del Perú (UBIGEO) actualizada al 2019 (El INEI ha actualizado hasta el 2016). SQL, JSON, XML, CSV, Arreglos PHP, YAML.
Stars: ✭ 113 (+189.74%)
Mutual labels:  yaml
loopback-next
LoopBack makes it easy to build modern API applications that require complex integrations.
Stars: ✭ 4,412 (+11212.82%)
Mutual labels:  openapi
yaml-runtimes
YAML processor runtimes via docker
Stars: ✭ 28 (-28.21%)
Mutual labels:  yaml
cube
Common LISP Kubernetes Client
Stars: ✭ 33 (-15.38%)
Mutual labels:  openapi
pytest-variables
Plugin for providing variables to pytest tests/fixtures
Stars: ✭ 69 (+76.92%)
Mutual labels:  yaml
Rocket
Define your release steps 🚀
Stars: ✭ 99 (+153.85%)
Mutual labels:  yaml
daf-dataportal-backend
Backend per il nuovo frontend (in sviluppo) di dati.gov.it
Stars: ✭ 17 (-56.41%)
Mutual labels:  openapi
reedelk-runtime
Reedelk Runtime Platform Community Edition
Stars: ✭ 25 (-35.9%)
Mutual labels:  openapi
awesome-integration
A curated list of awesome system integration software and resources.
Stars: ✭ 117 (+200%)
Mutual labels:  openapi
config-cpp
C++ Configuration management library inspired by the Viper package for golang.
Stars: ✭ 21 (-46.15%)
Mutual labels:  yaml
fix2json
A command-line utility to present FIX protocol messages as JSON or YAML
Stars: ✭ 44 (+12.82%)
Mutual labels:  yaml
ADLES
Automated Deployment of Lab Environments System (ADLES)
Stars: ✭ 28 (-28.21%)
Mutual labels:  yaml

yaml-include

Build Status Coverage Status Dependency Status devDependency Status Commitizen friendly Greenkeeper badge

This package provides support custom tags in a YAML document that facilitate inclusion of external .yaml files, or directories of .yaml files. This functionality is of course frowned upon by the YAML core team, but I find YAML too damn useful as a configuration format to not support inclusions. If you feel the same way, these tags will be helpful to you.

Installation

$ npm install yaml-include

Usage

A very small script can be created to leverage the yaml-include tags. The script would look something like this:

var yaml = require('js-yaml');
var yamlinc = require('yaml-include');
var fs = require('fs');
var p = require('path');

// set the base file for relative includes
yamlinc.setBaseFile(p.join(__dirname, 'yaml-dir', 'base.yaml'));

var src = fs.readFileSync(yamlinc.basefile, 'utf8');

var obj = yaml.load(src, { schema: yamlinc.YAML_INCLUDE_SCHEMA, filename: yamlinc.basefile });

// use your loaded object!

A YAML file using these tags might look like this (this file is in example/swagger/spec.yaml):

swagger: "2.0"
info:
  description: |
    This is a sample server Petstore server.

    [Learn about Swagger](http://swagger.wordnik.com) or join the IRC channel `#swagger` on irc.freenode.net.

    For this sample, you can use the api key `special-key` to test the authorization filters
  version: "1.0.0"
  title: Swagger Petstore
  termsOfService: http://helloreverb.com/terms/
  contact:
    name: [email protected]
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
host: petstore.swagger.wordnik.com
basePath: /v2
schemes:
  - http

paths: !!inc/dir [ 'paths' ]

securityDefinitions: !!inc/file security.yaml

definitions: !!inc/dir [ 'definitions', { recursive: false, allowEmpty: false }]

How It Works

Documents and files discovered during inclusion using the !!inc/dir tag are added to a generated YAML segment. Processing considers directory names and file names (before the .ext) to be keys, and the contents are mapped onto them. The easiest way to explain is with an example.

Given base.yaml looks like this...

name: Include Test
included: !!inc/dir [ 'inc' ]

with the default settings, you'd wind up with the following:

Directory Structure						Resulting YAML Equivalent
-------------------                     -------------------------
somedir/								name: Include Test
|-- base.yaml							included:
`-- inc/								  /:
    |-- -alt-ignore-prefix.yaml			    foo:
    |-- ToLower.yaml                          ... YAML contents of foo.yaml
    |-- _ignored/                           ToLower:
    |   |-- batman.yaml                       ... YAML contents of ToLower.yaml
    |   `-- captain-america.yaml            '-alt-ignore-prefix':
    |-- empty.yaml                            ... YAML contents of -alt-ignore-prefix.yaml
    |-- foo.yaml                          /sub:
    |-- sub/                                StillUpper:
    |   |-- StillUpper.yaml					  ... contents of StillUpper.yaml
    |   |-- _SomeVar/					  '/{alter-ego}':
    |   |   `-- hello.yaml			        Superman:
    |   `-- skip.data						  ... contents of Superman.yaml
    `-- ~alter-ego/
        `-- Superman.yaml

For a bunch of different examples on each of the subdirectories in this example, look in the test/fixtures/options directory.

YAML API

Please note: There's not much an API at all within the JavaScript files. This package extends the js-yaml package, and the descriptions that follow are related to usage of the custom YAML tags this package exposes.

!!inc/dir [ path [, options] ]

Parses path as a single directory pathname. options is a mapping YAML type.

options:

  • allowEmpty (default: false) - allow an empty file to appear in the generated result. When set to true, an empty file named empty.yaml will be represented as empty: {}.
  • recursive (default: true) - Specifies whether or not to recurse into subdirectories.
  • extensions (default: ['.yaml', '.yml']) - Determines file extensions to consider for inclusion.
  • lowerKeys (default: false) - Force all keys gleaned from the directory hierarchy to lower case.
  • variableIndicator (default: '~') - When a file or directory name is prefixed with this character, the representation in the generated output will be wrapped in the variablePrefix and variableSuffix strings.
  • variablePrefix (default: '{') - When representing a variable, this string will precede the variable name.
  • variableSuffix (default: '}') - When representing a variable, this string will follow the variable name.
  • ignoreIndicator (default: '_') - When a file or directory name is prefixed with this character, it and whatever contents it may hold will be ignored. NOTE: A whitelisted file path overrides this setting.
  • ignoreTopLevelDir (default: true) - Specifies if the directory being included use its own name as the initial key.
  • whitelist (default: []) - An array of paths to include regardless of any other settings.
  • blacklist (default: []) - An array of paths to skip regardless of any other settings.
  • excludeTopLevelDirSeparator (default: false) - Specifies if documents in the top level of the include path should be put under a key with an empty dir separator, or be added to the top level of the returned result.
  • pathSeparator (default: '/') - Determines path separator to use when joining subdirectory include paths together.

NOTE: if you want to use an !!inc/dir tag within an included file, make sure the inclusion path you enter is relative to the top-level included file.

!!inc/file path

Parses path as a path to a single YAML document. The contents of that document will be a mapping under the key the tag is used on.

NOTE: Files are permitted to include other files or directories. Just make sure any paths within those files are relative to the top-level document.

License

View the LICENSE file (ISC).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].