GitXplorerGitXplorer
k

lamos.js

public
9 stars
1 forks
1 issues

Commits

List of commits on branch main.
Unverified
36bedd3c3c2fed32b3763264760279a0c79b77ed

Add shebangs to bin scripts

kkemitchell committed a year ago
Unverified
07e248a2105860c3c9117d1faf44434c8d69cabc

Add bin scripts

kkemitchell committed a year ago
Unverified
613ad2de5a8e09cdc2a5d40eea99e23af7a30e31

Set `main` in package.json

kkemitchell committed a year ago
Unverified
fb56665588b64684061b772ef0739f7820908d30

Rewrite npm description

kkemitchell committed a year ago
Unverified
e61d08aa41513418bd76502c995eb6b263ea7dc9

Obsessively reformat JSON

kkemitchell committed a year ago
Unverified
b256a41d3ccea7facb3ebe8fc4acebcfb6d54b1c

Treat leading tabs as two spaces

kkemitchell committed a year ago

README

The README file for this repository.

LAMOS

Lists and Maps of Strings (LAMOS) is a very simple, plain-text data serialization format.

Syntax

# This is a comment.

# The parser ignores blank lines.
format:
- plain-text
- line-delimited

indentation:
- spaces
- two at a time

structures:
- list item
- key:
    # Comments can also be indented.
    another key: another value
    yet another key: yet another value
  still another key:
  # Comments can go most anywhere.
  - containing a list!
  - of two items!

nesting:
- - - a:
      - x
  - b: y
- z

There is just one datatype: raw, non-empty string. Strings appear in just two structures: sequential lists and key-value maps.

That's it. There are no nulls. There are no booleans. There are no numbers. There are no references, type annotations, or alternative notations for the same structure. There are no empty strings, empty lists, or empty maps.

As a result, LAMOS is far easier to read and to type than JSON, but far easier to construct and parse than YAML.

API

This JavaScript implementation exposes an API like the built-in JSON object:

import { parse, stringify, stableStringify } from 'lamos'
import assert from 'assert'

assert.deepStrictEqual(
  parse(
    [
      'a: x',
      'b: y'
    ].join('\n')
  ),
  { a: 'x', b: 'y' }
)

assert.strictEqual(
  stringify({ a: 'x', b: 'y' }),
  [
    'a: x',
    'b: y'
  ].join('\n')
)

If you plan to hash, sign, or perform other bitwise operations on LAMOS markup, use stableStringify, inspired by json-stable-stringify, to sort map keys in stable order:

assert.equal(
  stableStringify(
    {
      c: 'z',
      b: 'y',
      a: 'x'
    }
  ),
  [
    'a: x',
    'b: y',
    'c: z'
  ].join('\n')
)

Command Line Utilities

npm install --global lamos
json-to-lamos < data.json > data.lamos
lamos-to-json < data.lamos