From 561ecf28ff03bc0f9f41c45393fe7a2b3f42038c Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Thu, 11 May 2023 14:03:05 +0200 Subject: [PATCH] do a bunch of easy ones by hand --- src/compiler/parse/errors.js | 1 + src/compiler/parse/index.js | 55 +++++++++++-------- .../parse/read/{context.ts => context.js} | 18 +++--- .../{css_tree_parse.ts => css_tree_parse.js} | 0 .../node/{comparison.ts => comparison.js} | 0 ...re_style.ts => container_feature_style.js} | 0 ...{container_query.ts => container_query.js} | 0 .../css-tree-cq/node/{index.ts => index.js} | 0 ...head_is_range.ts => lookahead_is_range.js} | 0 .../node/{media_query.ts => media_query.js} | 0 ..._css_function.ts => query_css_function.js} | 0 .../{query_feature.ts => query_feature.js} | 0 ...eature_range.ts => query_feature_range.js} | 0 .../read/{expression.ts => expression.js} | 18 +++--- src/compiler/parse/state/fragment.js | 18 ++++++ src/compiler/parse/state/fragment.ts | 16 ------ src/compiler/parse/state/{text.ts => text.js} | 8 ++- .../parse/utils/{bracket.ts => bracket.js} | 0 .../parse/utils/{entities.ts => entities.js} | 0 src/compiler/parse/utils/{node.ts => node.js} | 7 ++- 20 files changed, 80 insertions(+), 61 deletions(-) rename src/compiler/parse/read/{context.ts => context.js} (85%) rename src/compiler/parse/read/css-tree-cq/{css_tree_parse.ts => css_tree_parse.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{comparison.ts => comparison.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{container_feature_style.ts => container_feature_style.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{container_query.ts => container_query.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{index.ts => index.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{lookahead_is_range.ts => lookahead_is_range.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{media_query.ts => media_query.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{query_css_function.ts => query_css_function.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{query_feature.ts => query_feature.js} (100%) rename src/compiler/parse/read/css-tree-cq/node/{query_feature_range.ts => query_feature_range.js} (100%) rename src/compiler/parse/read/{expression.ts => expression.js} (63%) create mode 100644 src/compiler/parse/state/fragment.js delete mode 100644 src/compiler/parse/state/fragment.ts rename src/compiler/parse/state/{text.ts => text.js} (69%) rename src/compiler/parse/utils/{bracket.ts => bracket.js} (100%) rename src/compiler/parse/utils/{entities.ts => entities.js} (100%) rename src/compiler/parse/utils/{node.ts => node.js} (85%) diff --git a/src/compiler/parse/errors.js b/src/compiler/parse/errors.js index 9b41c9455d..3cf99ad849 100644 --- a/src/compiler/parse/errors.js +++ b/src/compiler/parse/errors.js @@ -1,5 +1,6 @@ // All parser errors should be listed and accessed from here import list from '../utils/list.js'; + /** * @internal */ diff --git a/src/compiler/parse/index.js b/src/compiler/parse/index.js index 55a5d7b872..a03c43dace 100644 --- a/src/compiler/parse/index.js +++ b/src/compiler/parse/index.js @@ -6,7 +6,7 @@ import full_char_code_at from '../utils/full_char_code_at'; import error from '../utils/error'; import parser_errors from './errors'; const regex_position_indicator = / \(\d+:\d+\)$/; -/** */ + export class Parser { /** * @readonly @@ -32,39 +32,39 @@ export class Parser { */ css_mode = undefined; - /** - * @default 0 */ index = 0; /** - * @default [] - * @type {TemplateNode[]} + * @type {import('../interfaces.js').TemplateNode[]} */ stack = []; /** - * @type {Fragment} */ + * @type {import('../interfaces.js').Fragment} + */ html = undefined; /** - * @default [] - * @type {Style[]} + * @type {import('../interfaces.js').Style[]} */ css = []; /** - * @default [] - * @type {Script[]} + * @type {import('../interfaces.js').Script[]} */ js = []; - /** - * @default {} */ meta_tags = {}; /** - * @type {LastAutoClosedTag} */ + * @type {LastAutoClosedTag} + */ last_auto_closed_tag = undefined; + + /** + * @param {string} template + * @param {import('../interfaces.js').ParserOptions} options + */ constructor(template, options) { if (typeof template !== 'string') { throw new TypeError('Template must be a string'); @@ -80,6 +80,7 @@ export class Parser { children: [] }; this.stack.push(this.html); + /** @type {ParserState} */ let state = fragment; while (this.index < this.template.length) { state = state(this) || fragment; @@ -118,7 +119,8 @@ export class Parser { } /** - * @param {any} err */ + * @param {any} err + */ acorn_error(err) { this.error( { @@ -130,7 +132,8 @@ export class Parser { } /** - * @param {{ code: string; message: string }} */ + * @param {{ code: string; message: string }} err + */ error({ code, message }, index = this.index) { error(message, { name: 'ParseError', @@ -143,8 +146,8 @@ export class Parser { /** * @param {string} str - * @param {boolean} required - * @param {{ code: string; message: string }} error + * @param {boolean} [required] + * @param {{ code: string; message: string }} [error] */ eat(str, required, error) { if (this.match(str)) { @@ -163,7 +166,8 @@ export class Parser { } /** - * @param {string} str */ + * @param {string} str + */ match(str) { return this.template.slice(this.index, this.index + str.length) === str; } @@ -216,7 +220,7 @@ export class Parser { /** * @param {RegExp} pattern - * @param {Parameters[0]} error_message + * @param {Parameters[0]} [error_message] */ read_until(pattern, error_message) { if (this.index >= this.template.length) { @@ -249,8 +253,8 @@ export class Parser { /** * @param {string} template - * @param {ParserOptions} options - * @returns {Ast} + * @param {import('../interfaces.js').ParserOptions} options + * @returns {import('../interfaces.js').Ast} */ export default function parse(template, options = {}) { const parser = new Parser(template, options); @@ -275,9 +279,14 @@ export default function parse(template, options = {}) { }; } -/** @typedef {(parser: Parser) => ParserState | void} ParserState */ +/** + * @internal + * @typedef {(parser: Parser) => ParserState | void} ParserState + */ -/** @typedef {Object} LastAutoClosedTag +/** + * @internal + * @typedef {Object} LastAutoClosedTag * @property {string} tag * @property {string} reason * @property {number} depth diff --git a/src/compiler/parse/read/context.ts b/src/compiler/parse/read/context.js similarity index 85% rename from src/compiler/parse/read/context.ts rename to src/compiler/parse/read/context.js index de794aa9ef..00f424b1e4 100644 --- a/src/compiler/parse/read/context.ts +++ b/src/compiler/parse/read/context.js @@ -1,18 +1,20 @@ -import { Parser } from '../index'; import { isIdentifierStart } from 'acorn'; -import full_char_code_at from '../../utils/full_char_code_at'; +import full_char_code_at from '../../utils/full_char_code_at.js'; import { is_bracket_open, is_bracket_close, is_bracket_pair, get_bracket_close -} from '../utils/bracket'; -import { parse_expression_at } from '../acorn'; -import { Pattern } from 'estree'; -import parser_errors from '../errors'; -import { regex_not_newline_characters } from '../../utils/patterns'; +} from '../utils/bracket.js'; +import { parse_expression_at } from '../acorn.js'; +import parser_errors from '../errors.js'; +import { regex_not_newline_characters } from '../../utils/patterns.js'; -export default function read_context(parser: Parser): Pattern & { start: number; end: number } { +/** + * @param {import('../index.js').Parser} parser + * @returns {Pattern & { start: number; end: number }} + */ +export default function read_context(parser) { const start = parser.index; let i = parser.index; diff --git a/src/compiler/parse/read/css-tree-cq/css_tree_parse.ts b/src/compiler/parse/read/css-tree-cq/css_tree_parse.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/css_tree_parse.ts rename to src/compiler/parse/read/css-tree-cq/css_tree_parse.js diff --git a/src/compiler/parse/read/css-tree-cq/node/comparison.ts b/src/compiler/parse/read/css-tree-cq/node/comparison.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/comparison.ts rename to src/compiler/parse/read/css-tree-cq/node/comparison.js diff --git a/src/compiler/parse/read/css-tree-cq/node/container_feature_style.ts b/src/compiler/parse/read/css-tree-cq/node/container_feature_style.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/container_feature_style.ts rename to src/compiler/parse/read/css-tree-cq/node/container_feature_style.js diff --git a/src/compiler/parse/read/css-tree-cq/node/container_query.ts b/src/compiler/parse/read/css-tree-cq/node/container_query.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/container_query.ts rename to src/compiler/parse/read/css-tree-cq/node/container_query.js diff --git a/src/compiler/parse/read/css-tree-cq/node/index.ts b/src/compiler/parse/read/css-tree-cq/node/index.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/index.ts rename to src/compiler/parse/read/css-tree-cq/node/index.js diff --git a/src/compiler/parse/read/css-tree-cq/node/lookahead_is_range.ts b/src/compiler/parse/read/css-tree-cq/node/lookahead_is_range.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/lookahead_is_range.ts rename to src/compiler/parse/read/css-tree-cq/node/lookahead_is_range.js diff --git a/src/compiler/parse/read/css-tree-cq/node/media_query.ts b/src/compiler/parse/read/css-tree-cq/node/media_query.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/media_query.ts rename to src/compiler/parse/read/css-tree-cq/node/media_query.js diff --git a/src/compiler/parse/read/css-tree-cq/node/query_css_function.ts b/src/compiler/parse/read/css-tree-cq/node/query_css_function.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/query_css_function.ts rename to src/compiler/parse/read/css-tree-cq/node/query_css_function.js diff --git a/src/compiler/parse/read/css-tree-cq/node/query_feature.ts b/src/compiler/parse/read/css-tree-cq/node/query_feature.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/query_feature.ts rename to src/compiler/parse/read/css-tree-cq/node/query_feature.js diff --git a/src/compiler/parse/read/css-tree-cq/node/query_feature_range.ts b/src/compiler/parse/read/css-tree-cq/node/query_feature_range.js similarity index 100% rename from src/compiler/parse/read/css-tree-cq/node/query_feature_range.ts rename to src/compiler/parse/read/css-tree-cq/node/query_feature_range.js diff --git a/src/compiler/parse/read/expression.ts b/src/compiler/parse/read/expression.js similarity index 63% rename from src/compiler/parse/read/expression.ts rename to src/compiler/parse/read/expression.js index 935574440f..42fc3bce6f 100644 --- a/src/compiler/parse/read/expression.ts +++ b/src/compiler/parse/read/expression.js @@ -1,10 +1,12 @@ -import { parse_expression_at } from '../acorn'; -import { Parser } from '../index'; -import { Node } from 'estree'; -import { regex_whitespace } from '../../utils/patterns'; -import parser_errors from '../errors'; - -export default function read_expression(parser: Parser): Node { +import { parse_expression_at } from '../acorn.js'; +import { regex_whitespace } from '../../utils/patterns.js'; +import parser_errors from '../errors.js'; + +/** + * @param {import('../index.js').Parser} parser + * @returns {import('estree').Node | undefined} + */ +export default function read_expression(parser) { try { const node = parse_expression_at(parser.template, parser.index); @@ -29,7 +31,7 @@ export default function read_expression(parser: Parser): Node { parser.index = index; - return node as Node; + return node; } catch (err) { parser.acorn_error(err); } diff --git a/src/compiler/parse/state/fragment.js b/src/compiler/parse/state/fragment.js new file mode 100644 index 0000000000..5daa826876 --- /dev/null +++ b/src/compiler/parse/state/fragment.js @@ -0,0 +1,18 @@ +import tag from './tag.js'; +import mustache from './mustache.js'; +import text from './text.js'; + +/** + * @param {import('../index.js').Parser} parser + */ +export default function fragment(parser) { + if (parser.match('<')) { + return tag; + } + + if (parser.match('{')) { + return mustache; + } + + return text; +} diff --git a/src/compiler/parse/state/fragment.ts b/src/compiler/parse/state/fragment.ts deleted file mode 100644 index 41275a1738..0000000000 --- a/src/compiler/parse/state/fragment.ts +++ /dev/null @@ -1,16 +0,0 @@ -import tag from './tag'; -import mustache from './mustache'; -import text from './text'; -import { Parser } from '../index'; - -export default function fragment(parser: Parser) { - if (parser.match('<')) { - return tag; - } - - if (parser.match('{')) { - return mustache; - } - - return text; -} diff --git a/src/compiler/parse/state/text.ts b/src/compiler/parse/state/text.js similarity index 69% rename from src/compiler/parse/state/text.ts rename to src/compiler/parse/state/text.js index dc07c4aa9e..d3d2724e46 100644 --- a/src/compiler/parse/state/text.ts +++ b/src/compiler/parse/state/text.js @@ -1,7 +1,9 @@ -import { decode_character_references } from '../utils/html'; -import { Parser } from '../index'; +import { decode_character_references } from '../utils/html.js'; -export default function text(parser: Parser) { +/** + * @param {import('../index.js').Parser} parser + */ +export default function text(parser) { const start = parser.index; let data = ''; diff --git a/src/compiler/parse/utils/bracket.ts b/src/compiler/parse/utils/bracket.js similarity index 100% rename from src/compiler/parse/utils/bracket.ts rename to src/compiler/parse/utils/bracket.js diff --git a/src/compiler/parse/utils/entities.ts b/src/compiler/parse/utils/entities.js similarity index 100% rename from src/compiler/parse/utils/entities.ts rename to src/compiler/parse/utils/entities.js diff --git a/src/compiler/parse/utils/node.ts b/src/compiler/parse/utils/node.js similarity index 85% rename from src/compiler/parse/utils/node.ts rename to src/compiler/parse/utils/node.js index 944bdb4c58..3bd59969ef 100644 --- a/src/compiler/parse/utils/node.ts +++ b/src/compiler/parse/utils/node.js @@ -1,6 +1,7 @@ -import { TemplateNode } from '../../interfaces'; - -export function to_string(node: TemplateNode) { +/** + * @param {import("../../interfaces.js").TemplateNode} node + */ +export function to_string(node) { switch (node.type) { case 'IfBlock': return '{#if} block';