diff --git a/.changeset/wet-beans-hunt.md b/.changeset/wet-beans-hunt.md new file mode 100644 index 000000000..574e0486c --- /dev/null +++ b/.changeset/wet-beans-hunt.md @@ -0,0 +1,7 @@ +--- +"@marko/compiler": patch +"marko": patch +"@marko/translator-default": patch +--- + +fix: modify/remove some inefficient regexes diff --git a/packages/compiler/src/taglib/loader/scanTagsDir.js b/packages/compiler/src/taglib/loader/scanTagsDir.js index 82f9fce1f..502eb7ce1 100644 --- a/packages/compiler/src/taglib/loader/scanTagsDir.js +++ b/packages/compiler/src/taglib/loader/scanTagsDir.js @@ -3,10 +3,7 @@ const nodePath = require("path"); const taglibConfig = require("../config"); const jsonFileReader = require("./json-file-reader"); -const tagDefFromCode = require("./tag-def-from-code"); const loaders = require("./loaders"); -const fsReadOptions = { encoding: "utf8" }; -const extend = require("raptor-util/extend"); const types = require("./types"); const tagFileTypes = [ @@ -188,19 +185,6 @@ module.exports = function scanTagsDir( } } } - - if (!hasTagJson && (tagDef.renderer || tagDef.template)) { - let templateCode = String( - taglibConfig.fs.readFileSync( - tagDef.renderer || tagDef.template, - fsReadOptions - ) - ); - let extractedTagDef = tagDefFromCode.extractTagDef(templateCode); - if (extractedTagDef) { - extend(tagDef, extractedTagDef); - } - } } let tagDependencyChain; diff --git a/packages/compiler/src/taglib/loader/tag-def-from-code.js b/packages/compiler/src/taglib/loader/tag-def-from-code.js deleted file mode 100644 index 7d8a79d0b..000000000 --- a/packages/compiler/src/taglib/loader/tag-def-from-code.js +++ /dev/null @@ -1,58 +0,0 @@ -// Rather than using a full-blown JavaScript parser, we are going to use a few regular expressions -// to tokenize the code and find what we are interested in -var tagStartRegExp = /(^\s*(?:(?:exports.(?:tag|TAG))|(?:TAG))\s*=\s*)\{/m; - -// Tokens: "", '', /*, {, }, ; -var tokensRegExp = - /"(?:[^"]|\\")*"|'(?:[^'])|(\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)|(\/\/.*)|[{};]/g; - -function extractTagDef(code) { - var startMatches = tagStartRegExp.exec(code); - - var tagDefStart; - var tagDefEnd; - - if (startMatches) { - tagDefStart = startMatches.index + startMatches[1].length; - var nextTokenMatches; - tokensRegExp.lastIndex = tagDefStart; - var depth = 0; - - while ((nextTokenMatches = tokensRegExp.exec(code))) { - if (nextTokenMatches[0] === "{") { - depth++; - continue; - } else if (nextTokenMatches[0] === "}") { - if (--depth === 0) { - tagDefEnd = tokensRegExp.lastIndex; - break; - } - } else if (nextTokenMatches[0] === ";") { - tagDefEnd = nextTokenMatches.index; - break; - } - } - - if (tagDefStart != null && tagDefEnd != null) { - var jsTagDef = code.substring(tagDefStart, tagDefEnd); - var tagDefObject; - - try { - // Try parsing it as JSON - tagDefObject = JSON.parse(jsTagDef); - } catch (e) { - // Try parsing it as JavaScript - try { - tagDefObject = eval("(" + jsTagDef + ")"); - } catch (e) { - tagDefObject = {}; - } - } - return tagDefObject; - } - } else { - return null; - } -} - -exports.extractTagDef = extractTagDef; diff --git a/packages/marko/src/runtime/html/AsyncStream.js b/packages/marko/src/runtime/html/AsyncStream.js index 205dbe506..ab3d89381 100644 --- a/packages/marko/src/runtime/html/AsyncStream.js +++ b/packages/marko/src/runtime/html/AsyncStream.js @@ -36,7 +36,7 @@ function State(root, stream, writer, events) { } function escapeEndingComment(text) { - return text.replace(/-->/g, "-->"); + return text.replace(/(--!?)>/g, "$1>"); } function AsyncStream(global, writer, parentOut) { diff --git a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/marko-tag.json b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/marko-tag.json new file mode 100644 index 000000000..9bd89b0c8 --- /dev/null +++ b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/marko-tag.json @@ -0,0 +1,8 @@ +{ + "attributes": { + "name": { + "type": "string", + "target-property": "NAME" + } + } +} diff --git a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/template.marko b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/template.marko index 33a049ae8..c2b5f890f 100644 --- a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/template.marko +++ b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-d/template.marko @@ -1,13 +1,3 @@ - --- scanned-d: Hello ${input.NAME} --- \ No newline at end of file diff --git a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/marko-tag.json b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/marko-tag.json new file mode 100644 index 000000000..9bd89b0c8 --- /dev/null +++ b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/marko-tag.json @@ -0,0 +1,8 @@ +{ + "attributes": { + "name": { + "type": "string", + "target-property": "NAME" + } + } +} diff --git a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/renderer.js b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/renderer.js index 319207fe4..95c00d442 100644 --- a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/renderer.js +++ b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-e/renderer.js @@ -1,12 +1,3 @@ -exports.TAG = { - attributes: { - name: { - type: "string", - "target-property": "NAME" - } - } -}; - module.exports = function render(input, out) { out.write("scanned-e: Hello " + input.NAME); }; diff --git a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/marko-tag.json b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/marko-tag.json new file mode 100644 index 000000000..9bd89b0c8 --- /dev/null +++ b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/marko-tag.json @@ -0,0 +1,8 @@ +{ + "attributes": { + "name": { + "type": "string", + "target-property": "NAME" + } + } +} diff --git a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/renderer.js b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/renderer.js index 1e6013389..db3245a3a 100644 --- a/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/renderer.js +++ b/packages/marko/test/render/fixtures/scanned-tags/tags/scanned-f/renderer.js @@ -1,14 +1,3 @@ -/* -TAG = { - "attributes": { - "name": { - "type": "string", - "target-property": "NAME" - } - } -} -*/ - module.exports = function render(input, out) { out.write("scanned-f: Hello " + input.NAME); }; diff --git a/packages/translator-default/src/taglib/core/transform-style.js b/packages/translator-default/src/taglib/core/transform-style.js index 93892fa60..f24bd89e3 100644 --- a/packages/translator-default/src/taglib/core/transform-style.js +++ b/packages/translator-default/src/taglib/core/transform-style.js @@ -1,7 +1,7 @@ import path from "path"; import getComponentFiles from "../../util/get-component-files"; -const STYLE_REG = /^style((?:\.[^\s\\/:*?"<>|({]+)+)?\s*\{/; +const STYLE_REG = /^style((?:\.[^.\s\\/:*?"<>|({]+)+)?\s*\{/; export default function (tag) { const { hub, node } = tag;