From 9d09a78b09d24b940c97fc9583a8d6aef3a36fce Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 27 Nov 2023 17:13:33 +0100 Subject: [PATCH 1/3] Update blaze-tool deps --- packages/blaze-tools/package.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/blaze-tools/package.js b/packages/blaze-tools/package.js index 7e9722bfd..836a003ce 100644 --- a/packages/blaze-tools/package.js +++ b/packages/blaze-tools/package.js @@ -6,7 +6,7 @@ Package.describe({ }); Package.onUse(function (api) { - api.use('ecmascript@0.15.1'); + api.use('ecmascript@0.16.7'); api.use('htmljs@1.1.1'); api.export('BlazeTools'); @@ -14,7 +14,7 @@ Package.onUse(function (api) { }); Package.onTest(function (api) { - api.use('tinytest@1.1.0'); + api.use('tinytest@1.2.2'); api.use('ecmascript'); api.use('blaze-tools'); From 049a8f53fa9ecbc80aa33dcc9d85459d50aa7b31 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 27 Nov 2023 17:14:12 +0100 Subject: [PATCH 2/3] Migrate variable names in blaze-tool --- packages/blaze-tools/tojs.js | 34 ++++++++--------- packages/blaze-tools/token_tests.js | 18 ++++----- packages/blaze-tools/tokens.js | 58 ++++++++++++++--------------- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/packages/blaze-tools/tojs.js b/packages/blaze-tools/tojs.js index d50bce98c..ac55afc5b 100644 --- a/packages/blaze-tools/tojs.js +++ b/packages/blaze-tools/tojs.js @@ -28,7 +28,7 @@ export function toJSLiteral (obj) { -var jsReservedWordSet = (function (set) { +const jsReservedWordSet = (function (set) { "abstract else instanceof super boolean enum int switch break export interface synchronized byte extends let this case false long throw catch final native throws char finally new transient class float null true const for package try continue function private typeof debugger goto protected var default if public void delete implements return volatile do import short while double in static with".split(' ').forEach(function (w) { set[w] = 1; }); @@ -41,7 +41,7 @@ export function toObjectLiteralKey (k) { return toJSLiteral(k); } -var hasToJS = function (x) { +const hasToJS = function (x) { return x.toJS && (typeof (x.toJS) === 'function'); }; @@ -54,8 +54,8 @@ ToJSVisitor.def({ return toJSLiteral(stringBooleanOrNumber); }, visitArray: function (array) { - var parts = []; - for (var i = 0; i < array.length; i++) + const parts = []; + for (let i = 0; i < array.length; i++) parts.push(this.visit(array[i])); return '[' + parts.join(', ') + ']'; }, @@ -80,7 +80,7 @@ ToJSVisitor.def({ throw new Error("Unexpected object in HTMLjs in toJS: " + x); }, generateCall: function (name, attrs, children) { - var tagSymbol; + let tagSymbol; if (name.indexOf('.') >= 0) { tagSymbol = name; } else if (HTML.isTagEnsured(name)) { @@ -89,19 +89,19 @@ ToJSVisitor.def({ tagSymbol = 'HTML.getTag(' + toJSLiteral(name) + ')'; } - var attrsArray = null; + let attrsArray = null; if (attrs) { attrsArray = []; - var needsHTMLAttrs = false; + let needsHTMLAttrs = false; if (HTML.isArray(attrs)) { - var attrsArray = []; - for (var i = 0; i < attrs.length; i++) { - var a = attrs[i]; + attrsArray = []; + for (let i = 0; i < attrs.length; i++) { + const a = attrs[i]; if (hasToJS(a)) { attrsArray.push(a.toJS(this)); needsHTMLAttrs = true; } else { - var attrsObjStr = this.generateAttrsDictionary(attrs[i]); + const attrsObjStr = this.generateAttrsDictionary(attrs[i]); if (attrsObjStr !== null) attrsArray.push(attrsObjStr); } @@ -113,7 +113,7 @@ ToJSVisitor.def({ attrsArray.push(this.generateAttrsDictionary(attrs)); } } - var attrsStr = null; + let attrsStr = null; if (attrsArray && attrsArray.length) { if (attrsArray.length === 1 && ! needsHTMLAttrs) { attrsStr = attrsArray[0]; @@ -122,12 +122,12 @@ ToJSVisitor.def({ } } - var argStrs = []; + const argStrs = []; if (attrsStr !== null) argStrs.push(attrsStr); if (children) { - for (var i = 0; i < children.length; i++) + for (let i = 0; i < children.length; i++) argStrs.push(this.visit(children[i])); } @@ -139,12 +139,12 @@ ToJSVisitor.def({ return attrsDict.toJS(this); } - var kvStrs = []; - for (var k in attrsDict) { + const kvStrs = []; + Object.getOwnPropertyNames(attrsDict).forEach((k) => { if (! HTML.isNully(attrsDict[k])) kvStrs.push(toObjectLiteralKey(k) + ': ' + this.visit(attrsDict[k])); - } + }); if (kvStrs.length) return '{' + kvStrs.join(', ') + '}'; return null; diff --git a/packages/blaze-tools/token_tests.js b/packages/blaze-tools/token_tests.js index 530be1dd3..c2e7d30b0 100644 --- a/packages/blaze-tools/token_tests.js +++ b/packages/blaze-tools/token_tests.js @@ -3,11 +3,11 @@ import { HTMLTools } from 'meteor/html-tools'; Tinytest.add("blaze-tools - token parsers", function (test) { - var run = function (func, input, expected) { - var scanner = new HTMLTools.Scanner('z' + input); + const run = function (func, input, expected) { + const scanner = new HTMLTools.Scanner('z' + input); // make sure the parse function respects `scanner.pos` scanner.pos = 1; - var result = func(scanner); + const result = func(scanner); if (expected === null) { test.equal(scanner.pos, 1); test.equal(result, null); @@ -17,8 +17,8 @@ Tinytest.add("blaze-tools - token parsers", function (test) { } }; - var runValue = function (func, input, expectedValue) { - var expected; + const runValue = function (func, input, expectedValue) { + let expected; if (expectedValue === null) expected = null; else @@ -26,10 +26,10 @@ Tinytest.add("blaze-tools - token parsers", function (test) { run(func, input, expected); }; - var parseNumber = BlazeTools.parseNumber; - var parseIdentifierName = BlazeTools.parseIdentifierName; - var parseExtendedIdentifierName = BlazeTools.parseExtendedIdentifierName; - var parseStringLiteral = BlazeTools.parseStringLiteral; + const parseNumber = BlazeTools.parseNumber; + const parseIdentifierName = BlazeTools.parseIdentifierName; + const parseExtendedIdentifierName = BlazeTools.parseExtendedIdentifierName; + const parseStringLiteral = BlazeTools.parseStringLiteral; runValue(parseNumber, "0", 0); runValue(parseNumber, "-0", 0); diff --git a/packages/blaze-tools/tokens.js b/packages/blaze-tools/tokens.js index 3f13d6793..3b965e9e3 100644 --- a/packages/blaze-tools/tokens.js +++ b/packages/blaze-tools/tokens.js @@ -1,6 +1,6 @@ // Adapted from source code of http://xregexp.com/plugins/#unicode -var unicodeCategories = { +const unicodeCategories = { Ll: "0061-007A00B500DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1D2B1D6B-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7B2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7FAFB00-FB06FB13-FB17FF41-FF5A", Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D6A1D781D9B-1DBF2071207F2090-209C2C7C2C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A7F8A7F9A9CFAA70AADDAAF3AAF4FF70FF9EFF9F", Lo: "00AA00BA01BB01C0-01C3029405D0-05EA05F0-05F20620-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150840-085808A008A2-08AC0904-0939093D09500958-09610972-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA10FD-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF11CF51CF62135-21382D30-2D672D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCAAE0-AAEAAAF2AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", @@ -13,7 +13,7 @@ var unicodeCategories = { Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F" }; -var unicodeClass = function (abbrev) { +const unicodeClass = function (abbrev) { return '[' + unicodeCategories[abbrev].replace(/[0-9A-F]{4}/ig, "\\u$&") + ']'; }; @@ -21,7 +21,7 @@ var unicodeClass = function (abbrev) { // See ECMA-262 spec, 3rd edition, Section 7.6 // Match one or more characters that can start an identifier. // This is IdentifierStart+. -var rIdentifierPrefix = new RegExp( +const rIdentifierPrefix = new RegExp( "^([a-zA-Z$_]+|\\\\u[0-9a-fA-F]{4}|" + [unicodeClass('Lu'), unicodeClass('Ll'), unicodeClass('Lt'), unicodeClass('Lm'), unicodeClass('Lo'), unicodeClass('Nl')].join('|') + @@ -30,62 +30,62 @@ var rIdentifierPrefix = new RegExp( // This is (IdentifierPart and not IdentifierStart)+. // To match a full identifier, match rIdentifierPrefix, then // match rIdentifierMiddle followed by rIdentifierPrefix until they both fail. -var rIdentifierMiddle = new RegExp( +const rIdentifierMiddle = new RegExp( "^([0-9]|" + [unicodeClass('Mn'), unicodeClass('Mc'), unicodeClass('Nd'), unicodeClass('Pc')].join('|') + ")+"); // See ECMA-262 spec, 3rd edition, Section 7.8.3 -var rHexLiteral = /^0[xX][0-9a-fA-F]+(?!\w)/; -var rDecLiteral = +const rHexLiteral = /^0[xX][0-9a-fA-F]+(?!\w)/; +const rDecLiteral = /^(((0|[1-9][0-9]*)(\.[0-9]*)?)|\.[0-9]+)([Ee][+-]?[0-9]+)?(?!\w)/; // Section 7.8.4 -var rStringQuote = /^["']/; +const rStringQuote = /^["']/; // Match one or more characters besides quotes, backslashes, or line ends -var rStringMiddle = /^(?=.)[^"'\\]+?((?!.)|(?=["'\\]))/; +const rStringMiddle = /^(?=.)[^"'\\]+?((?!.)|(?=["'\\]))/; // Match one escape sequence, including the backslash. -var rEscapeSequence = +const rEscapeSequence = /^\\(['"\\bfnrtv]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/; // Match one ES5 line continuation -var rLineContinuation = +const rLineContinuation = /^\\(\r\n|[\u000A\u000D\u2028\u2029])/; export function parseNumber (scanner) { - var startPos = scanner.pos; + const startPos = scanner.pos; - var isNegative = false; + let isNegative = false; if (scanner.peek() === '-') { scanner.pos++; isNegative = true; } // Note that we allow `"-0xa"`, unlike `Number(...)`. - var rest = scanner.rest(); - var match = rDecLiteral.exec(rest) || rHexLiteral.exec(rest); + const rest = scanner.rest(); + const match = rDecLiteral.exec(rest) || rHexLiteral.exec(rest); if (! match) { scanner.pos = startPos; return null; } - var matchText = match[0]; + const matchText = match[0]; scanner.pos += matchText.length; - var text = (isNegative ? '-' : '') + matchText; - var value = Number(matchText); + const text = (isNegative ? '-' : '') + matchText; + let value = Number(matchText); value = (isNegative ? -value : value); return { text: text, value: value }; } export function parseIdentifierName (scanner) { - var startPos = scanner.pos; - var rest = scanner.rest(); - var match = rIdentifierPrefix.exec(rest); + const startPos = scanner.pos; + let rest = scanner.rest(); + let match = rIdentifierPrefix.exec(rest); if (! match) return null; scanner.pos += match[0].length; rest = scanner.rest(); - var foundMore = true; + let foundMore = true; while (foundMore) { foundMore = false; @@ -112,7 +112,7 @@ export function parseExtendedIdentifierName (scanner) { // parse an identifier name optionally preceded by '@' if (scanner.peek() === '@') { scanner.pos++; - var afterAt = parseIdentifierName(scanner); + const afterAt = parseIdentifierName(scanner); if (afterAt) { return '@' + afterAt; } else { @@ -125,17 +125,17 @@ export function parseExtendedIdentifierName (scanner) { } export function parseStringLiteral (scanner) { - var startPos = scanner.pos; - var rest = scanner.rest(); - var match = rStringQuote.exec(rest); + const startPos = scanner.pos; + let rest = scanner.rest(); + let match = rStringQuote.exec(rest); if (! match) return null; - var quote = match[0]; + const quote = match[0]; scanner.pos++; rest = scanner.rest(); - var jsonLiteral = '"'; + let jsonLiteral = '"'; while (match) { match = rStringMiddle.exec(rest); @@ -187,7 +187,7 @@ export function parseStringLiteral (scanner) { scanner.fatal("Unterminated string literal"); jsonLiteral += '"'; - var text = scanner.input.substring(startPos, scanner.pos); - var value = JSON.parse(jsonLiteral); + const text = scanner.input.substring(startPos, scanner.pos); + const value = JSON.parse(jsonLiteral); return { text: text, value: value }; } From 5e79818ad93bc40cb0df1cdc042acd0fba806c91 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 28 Nov 2023 14:37:53 +0100 Subject: [PATCH 3/3] Fix scoping issue in tojs --- packages/blaze-tools/tojs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blaze-tools/tojs.js b/packages/blaze-tools/tojs.js index ac55afc5b..09beae311 100644 --- a/packages/blaze-tools/tojs.js +++ b/packages/blaze-tools/tojs.js @@ -90,9 +90,9 @@ ToJSVisitor.def({ } let attrsArray = null; + let needsHTMLAttrs = false; if (attrs) { attrsArray = []; - let needsHTMLAttrs = false; if (HTML.isArray(attrs)) { attrsArray = []; for (let i = 0; i < attrs.length; i++) {