diff --git a/implementations/javascript/bin/preserves-schema-ts.js b/implementations/javascript/bin/preserves-schema-ts.js new file mode 100755 index 0000000..34b1f07 --- /dev/null +++ b/implementations/javascript/bin/preserves-schema-ts.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node +require('../dist/bin/preserves-schema-ts.js').main(process.argv.slice(2)); + diff --git a/implementations/javascript/package.json b/implementations/javascript/package.json index f7588fc..d5da5e2 100644 --- a/implementations/javascript/package.json +++ b/implementations/javascript/package.json @@ -30,5 +30,8 @@ "veryclean": "npm run clean && rm -rf node_modules", "watch": "npx tsc -w" }, + "bin": { + "preserves-schema-ts": "./bin/preserves-schema-ts.js" + }, "dependencies": {} } diff --git a/implementations/javascript/rollup.config.js b/implementations/javascript/rollup.config.js index ea85fdd..9051233 100644 --- a/implementations/javascript/rollup.config.js +++ b/implementations/javascript/rollup.config.js @@ -23,7 +23,7 @@ function es6(insertion, extra) { }; } -export default { +export default [{ input: 'lib/index.js', output: [ umd(''), @@ -31,4 +31,15 @@ export default { es6(''), es6('.min', { plugins: [terser()] }), ], -} +}, { + input: 'lib/bin/preserves-schema-ts.js', + output: [{ + file: 'dist/bin/preserves-schema-ts.js', + format: 'umd', + name: 'PreservesC_TS', + globals: { + 'fs': 'fs', + }, + }], + external: ['fs'], +}] diff --git a/implementations/javascript/src/bin/preserves-schema-ts.ts b/implementations/javascript/src/bin/preserves-schema-ts.ts new file mode 100644 index 0000000..8b6760e --- /dev/null +++ b/implementations/javascript/src/bin/preserves-schema-ts.ts @@ -0,0 +1,12 @@ +import { BASE, compile, readSchema } from '../schema/index'; +import fs from 'fs'; + +export function main(argv: Array) { + console.log('// ' + JSON.stringify(argv)); + const src = fs.readFileSync(__dirname + '/../../../../schema/schema.txt', 'utf-8'); + const sch = readSchema(src); + console.log(compile( + [{ moduleName: 'BASE', modulePath: 'BASE', schema: BASE, inline: true }], + sch, + '..')); +} diff --git a/implementations/javascript/src/index.ts b/implementations/javascript/src/index.ts index e15c7a4..9cb5d7d 100644 --- a/implementations/javascript/src/index.ts +++ b/implementations/javascript/src/index.ts @@ -1,21 +1,6 @@ -export * from './annotated'; -export * from './bytes'; -export * from './codec'; -export * from './decoder'; -export * from './dictionary'; -export * from './encoder'; -export * from './flex'; -export * from './float'; -export * from './fold'; -export * from './fromjs'; -export * from './is'; -export * from './reader'; -export * from './record'; -export * from './strip'; -export * from './symbols'; -export * from './text'; -export * from './values'; +export * from './runtime'; export * as Constants from './constants'; +export * as Schema from './schema/index'; const _Array = Array; type _Array = Array; diff --git a/implementations/javascript/src/runtime.ts b/implementations/javascript/src/runtime.ts new file mode 100644 index 0000000..654ac42 --- /dev/null +++ b/implementations/javascript/src/runtime.ts @@ -0,0 +1,17 @@ +export * from './annotated'; +export * from './bytes'; +export * from './codec'; +export * from './decoder'; +export * from './dictionary'; +export * from './encoder'; +export * from './flex'; +export * from './float'; +export * from './fold'; +export * from './fromjs'; +export * from './is'; +export * from './reader'; +export * from './record'; +export * from './strip'; +export * from './symbols'; +export * from './text'; +export * from './values'; diff --git a/implementations/javascript/src/schema/base.ts b/implementations/javascript/src/schema/base.ts index 2867805..33c2793 100644 --- a/implementations/javascript/src/schema/base.ts +++ b/implementations/javascript/src/schema/base.ts @@ -1,4 +1,4 @@ -import { Record, KeyedDictionary } from '..'; +import { Record, KeyedDictionary } from '../runtime'; import { AtomKind, Pattern, Schema } from './meta'; import * as M from './meta'; diff --git a/implementations/javascript/src/schema/compiler.ts b/implementations/javascript/src/schema/compiler.ts index c6e257e..59bd046 100644 --- a/implementations/javascript/src/schema/compiler.ts +++ b/implementations/javascript/src/schema/compiler.ts @@ -1,6 +1,6 @@ import { Pattern, NamedPattern, Schema, Input } from "./meta"; import * as M from './meta'; -import { Annotated, Bytes, Dictionary, Fold, fold, preserves, Record, Tuple, Value } from ".."; +import { Annotated, Bytes, Dictionary, Fold, fold, preserves, Record, Tuple, Value } from "../runtime"; import { Formatter, parens, seq, Item, opseq, block, commas, brackets, anglebrackets, braces } from "./block"; function fnblock(... items: Item[]): Item { @@ -302,14 +302,3 @@ export function sourceCodeFor(v: Value): Item { }, }); } - -import fs from 'fs'; -import { readSchema } from "./reader"; -import { BASE } from "./base"; -function main() { - const src = fs.readFileSync(__dirname + '/../../../../schema/schema.txt', 'utf-8'); - const sch = readSchema(src); - console.log(compile([{ moduleName: 'BASE', modulePath: 'BASE', schema: BASE, inline: true }], sch, '..')); -} - -main(); diff --git a/implementations/javascript/src/schema/index.ts b/implementations/javascript/src/schema/index.ts new file mode 100644 index 0000000..8bcfa46 --- /dev/null +++ b/implementations/javascript/src/schema/index.ts @@ -0,0 +1,3 @@ +export * from './reader'; +export * from './compiler'; +export * from './base'; diff --git a/implementations/javascript/src/schema/interpreter.ts b/implementations/javascript/src/schema/interpreter.ts index 9c746e9..21e75a0 100644 --- a/implementations/javascript/src/schema/interpreter.ts +++ b/implementations/javascript/src/schema/interpreter.ts @@ -1,6 +1,6 @@ import { Environment, Pattern, NamedPattern, lookup } from "./meta"; import * as M from './meta'; -import { Value, Float, Bytes, is, isPointer, Record, Dictionary, Set } from ".."; +import { Value, Float, Bytes, is, isPointer, Record, Dictionary, Set } from "../runtime"; export function validator(env: Environment, p: Pattern): (v: Value) => boolean { function walk(p: Pattern, v: Value, recordOkAsTuple = false): boolean { diff --git a/implementations/javascript/src/schema/meta.ts b/implementations/javascript/src/schema/meta.ts index e4c106f..6f45af1 100644 --- a/implementations/javascript/src/schema/meta.ts +++ b/implementations/javascript/src/schema/meta.ts @@ -1,4 +1,4 @@ -import { Dictionary, KeyedDictionary, Record, Value, preserves } from '..'; +import { Dictionary, KeyedDictionary, Record, Value, preserves } from '../runtime'; export type Input = Value; diff --git a/implementations/javascript/src/schema/reader.ts b/implementations/javascript/src/schema/reader.ts index 1941438..a723f75 100644 --- a/implementations/javascript/src/schema/reader.ts +++ b/implementations/javascript/src/schema/reader.ts @@ -1,4 +1,4 @@ -import { Annotated, Dictionary, is, KeyedDictionary, peel, preserves, Record, strip, Tuple } from '..'; +import { Annotated, Dictionary, is, KeyedDictionary, peel, preserves, Record, strip, Tuple } from '../runtime'; import { Input, NamedPattern, Pattern, Schema } from './meta'; import * as M from './meta';