docsonnet/load.libsonnet
sh0rez 4e4d4a7170
feat: faster parser (#3)
* fix(load): support nested objects

* feat: initial golang parser

Moves most of load.libsonnet to a Golang app for hopefully much faster
parsing (fingers crossed)

* feat(fast): nested objects, subpackages

* feat: incorporate fast mode into main binary

Moves the work done in the fast directory into the main executable,
removing the Jsonnet based parser in favor of the much faster Golang one.
2020-05-10 23:09:12 +02:00

24 lines
595 B
Jsonnet

local lib = {
scan(obj)::
local aux(old, key) =
if std.startsWith(key, '#') then
true
else if std.isObject(obj[key]) then
old || $.scan(obj[key])
else old;
std.foldl(aux, std.objectFieldsAll(obj), false),
load(pkg)::
local aux(old, key) =
if !std.isObject(pkg[key]) then
old
else if std.startsWith(key, '#') then
old { [key]: pkg[key] }
else if self.scan(pkg[key]) then
old { [key]: $.load(pkg[key]) }
else old;
std.foldl(aux, std.objectFieldsAll(pkg), {}),
};
lib.load(std.extVar('main'))