@mistlog/typetype
Version:
A programming language designed for typescript type generation
106 lines (105 loc) • 4.67 kB
JavaScript
;
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;