GitXplorerGitXplorer
k

lamos.js

public
9 stars
1 forks
1 issues

Commits

List of commits on branch main.
Unverified
39ab81eae83e02f6b9cb61f7dfd5ead406069305

Add comments

kkemitchell committed a year ago
Unverified
4f1bceb8053de337399d545164b39e7e494a1569

Rename `token.value` to `token.text`

kkemitchell committed a year ago
Unverified
9ea20dd3f64384b041752aededdcbfc8de4b645e

License BlueOak-1.0.0

kkemitchell committed a year ago
Unverified
1aa634dcdcaeddaf498701c5372575f87f5a09ba

README: Add indented comment lines

kkemitchell committed a year ago
Unverified
6032e394c44e458a216bcb72db417258d303f470

Use shared constants for token types

kkemitchell committed a year ago
Unverified
b6b7b9f10d1f82ac9d83ee93734c8b5d54cabd51

Rename `in` and `out` tokens to `open` and `close`

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