UNPKG

@mistlog/typetype

Version:

A programming language designed for typescript type generation

106 lines (105 loc) 4.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Initializer = exports.TypeVariableDeclarator = exports.TypeVariableDeclaration = exports.TypeFunctionDeclarator = exports.TypeFunctionDeclaration = exports.ImportSpecifier = exports.ImportDeclaration = void 0; const react_peg_1 = require("react-peg"); const common_1 = require("../common"); const basic_1 = require("../basic"); const string_1 = require("../basic/string"); const expression_1 = require("../expression"); function ImportDeclaration() { const action = ({ source, specifiers }) => { return { kind: "ImportDeclaration", source, specifiers }; }; return (react_peg_1.ReactPeg.createChunk("pattern", { action: action }, common_1.Text("import"), common_1.Text("{"), react_peg_1.ReactPeg.createChunk("list", { label: "specifiers" }, react_peg_1.ReactPeg.createChunk("pattern", { action: ({ head, tail }) => [head, ...tail] }, react_peg_1.ReactPeg.createChunk(ImportSpecifier, { label: "head" }), react_peg_1.ReactPeg.createChunk("repeat", { type: "*", label: "tail" }, react_peg_1.ReactPeg.createChunk("pattern", { action: ({ specifier }) => specifier }, common_1.Text(","), react_peg_1.ReactPeg.createChunk(ImportSpecifier, { label: "specifier" }))))), common_1.Text("}"), common_1.Text("from"), react_peg_1.ReactPeg.createChunk(string_1.String, { label: "source" }))); } exports.ImportDeclaration = ImportDeclaration; function ImportSpecifier() { const action = ({ imported }) => { return { kind: "ImportSpecifier", imported }; }; return (react_peg_1.ReactPeg.createChunk("pattern", { action: action }, react_peg_1.ReactPeg.createChunk(common_1._, null), react_peg_1.ReactPeg.createChunk(basic_1.Identifier, { label: "imported" }), react_peg_1.ReactPeg.createChunk(common_1._, null))); } exports.ImportSpecifier = ImportSpecifier; function TypeFunctionDeclaration() { const action = ({ declarator, _export }) => { return { kind: "TypeFunctionDeclaration", declarator, export: Boolean(_export) }; }; return (react_peg_1.ReactPeg.createChunk("pattern", { action: action }, react_peg_1.ReactPeg.createChunk("opt", { label: "_export" }, common_1.Text("export")), common_1.Text("type"), common_1.Text("function"), react_peg_1.ReactPeg.createChunk(TypeFunctionDeclarator, { label: "declarator" }))); } exports.TypeFunctionDeclaration = TypeFunctionDeclaration; function TypeFunctionDeclarator() { const action = ({ name, initializer }) => { return { kind: "TypeFunctionDeclarator", name, initializer }; }; return (react_peg_1.ReactPeg.createChunk("pattern", { action: action }, react_peg_1.ReactPeg.createChunk(basic_1.Identifier, { label: "name" }), common_1.Text("="), react_peg_1.ReactPeg.createChunk(expression_1.TypeArrowFunctionExpression, { label: "initializer" }))); } exports.TypeFunctionDeclarator = TypeFunctionDeclarator; function TypeVariableDeclaration() { const action = ({ declarator, _export }) => { return { kind: "TypeVariableDeclaration", declarator, export: Boolean(_export) }; }; return (react_peg_1.ReactPeg.createChunk("pattern", { action: action }, react_peg_1.ReactPeg.createChunk("opt", { label: "_export" }, common_1.Text("export")), common_1.Text("type"), react_peg_1.ReactPeg.createChunk(TypeVariableDeclarator, { label: "declarator" }))); } exports.TypeVariableDeclaration = TypeVariableDeclaration; function TypeVariableDeclarator() { const action = ({ name, initializer }) => { return { kind: "TypeVariableDeclarator", name, initializer }; }; return (react_peg_1.ReactPeg.createChunk("pattern", { action: action }, react_peg_1.ReactPeg.createChunk(basic_1.Identifier, { label: "name" }), common_1.Text("="), react_peg_1.ReactPeg.createChunk(Initializer, { label: "initializer" }))); } exports.TypeVariableDeclarator = TypeVariableDeclarator; function Initializer() { return (react_peg_1.ReactPeg.createChunk(expression_1.TypeExpression, null)); } exports.Initializer = Initializer;