lookml-parser
Version:
95 lines (69 loc) • 3.33 kB
Markdown
# CLI Usage
```
npm install -g lookml-parser
git clone <your-lookml-repo>
cd <your-lookml-repo>
lookml-parser --input="*.{view,model}.lkml" --whitespace=2 >> output.json
```
## CLI with REPL
```
lookml-parser --interactive
```
## CLI tranformation flags
```
lookml-parser --transform=fps
```
| Flag | Description |
|---|---|
| f | Drop repetitive file metadata (`$file_rel`, `$file_type`, `$file_name`) |
| p | Add position data |
| s | Remove whitespace information (`$strings` property) |
# Node API
```
const lookmlParser = require('lookml-parser')
const lookml = lookmlParser.parse("view: foo{}")
const positions = lookmlParser.getPositions(lookml)
let project = lookmlParser.parseFiles({
// The source parameter can be a glob string, or an array of objects
// with path (for matching includes) and content properties
source: "*.{view,model,explore}.lkml",
fileOutput: "by-name" // or "array" or "by-type",
globOptions: {},
readFileOptions: {encoding:"utf-8"},
readFileConcurrency: 4,
console: console
})
transformations.addPositions(project)
```
# Output & Features
parseFiles outputs a collection of files, each with their
own parsed contents, as well as models resulting from following `include`s from model files.
The collection of files is an object by file name, but can be requested in other formats.
If position data is requested, it is added under a separate top-level property named `positions`,
containing separate sub entries for `file` and `model`. Each node in the tree for which position data
is available will have a `$p` property with the data for that node. In the `file` section, the property
contains an array consisting of [start line, start character, end line, end character]. In the `model`
section the property contains an array consisting of [file index, start line, start character, end line, end character].
In this context, the file index refers to an entry in the the model's `$file_path` array.
## Conditional Comments
If you want to leverage LookML syntax to embed arbitrary other markup/objects that would
be rejected by the native IDE, the CLI and parseFiles function now allow this
with conditional comments:
```
view: foo {
# PARSE-ME!
# owner: "Fabio"
# version: {major:1 minor:4 date:"2018-01-01"}
dimension: bar {}
}
> lookml-parser --conditional-comment="PARSE-ME!"
```
## Project Imports
The parseFiles method and CLI will resolve any include statements of the style "//project_foo/..." as "/imported_projects/project_foo/...". Therefore, the parser supports project imports, assuming you have previously copied/cloned the remote project to the appropriate location ahead of invoking the parser.
## LookML Dashboard support
Since LookML Dashboards are actually YAML, `lookml-parser` does not handle parsing them. However, this module accepts `js-yaml` as an optional dependency. If you install `js-yaml`, `lookml-parser` will use it to parse LookML dashboards and will include the dashboards into any including models. To use this functionality, make sure to also specify an `input` argument, as the default input pattern does not include dashboard files.
```
npm install -g lookml-parser
npm install -g js-yaml
lookml-parser --interactive --file-output=by-name --input="{*.,}{manifest,model,view,explore,dashboard}.{lkml,lookml}"
```