From ae21175b2b248460164a024c6c692bee523b3768 Mon Sep 17 00:00:00 2001
From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com>
Date: Sat, 25 Mar 2023 11:27:04 -0400
Subject: [PATCH] General Maintenance
---
dist/glimmer.cjs.cjs | 30 +-
package.json | 3 +-
pnpm-lock.yaml | 263 +++++++++++++++++-
tests-cjs/package.json | 8 +-
.../__snapshots__/injections.test.js.snap | 14 +-
tests-esm/unit/injections.test.js | 159 ++++++-----
6 files changed, 397 insertions(+), 80 deletions(-)
diff --git a/dist/glimmer.cjs.cjs b/dist/glimmer.cjs.cjs
index 48f29dda..83d39b57 100644
--- a/dist/glimmer.cjs.cjs
+++ b/dist/glimmer.cjs.cjs
@@ -161,6 +161,7 @@ function glimmer(hljs) {
end: /"/,
contains: [
XML_ENTITIES
+ /* MUSTACHE_EXPRESSION added later */
]
},
{
@@ -168,6 +169,7 @@ function glimmer(hljs) {
end: /'/,
contains: [
XML_ENTITIES
+ /* MUSTACHE_EXPRESSION added later */
]
}
]
@@ -180,8 +182,19 @@ function glimmer(hljs) {
BLOCK_PARAMS,
THIS_EXPRESSION,
ATTRIBUTES,
+ // {
+ // className: 'variable',
+ // keywords: KEYWORDS,
+ // match: /\s[\w\d-_^]+/
+ // },
+ // {
+ // match: /\b[a-z][a-zA-Z0-9-]+\b/,
+ // keywords: KEYWORDS,
+ // className: 'keyword'
+ // },
CURLY_NAME,
STRING
+ // NAME,
];
const SUB_EXPRESSION = {
keywords: KEYWORDS,
@@ -189,6 +202,7 @@ function glimmer(hljs) {
/\(/,
regex.lookahead(
regex.concat(
+ // /[^)]+/,
/\)/
)
)
@@ -241,6 +255,7 @@ function glimmer(hljs) {
ABS_NAME
]
},
+ // close tag
{
className: "tag",
begin: regex.concat(/<\/:?/, regex.lookahead(regex.concat(TAG_NAME, />/))),
@@ -317,10 +332,21 @@ function setupTemplateTag(_hljs, js) {
const GLIMMER_TEMPLATE_TAG = {
begin: //,
end: /<\/template>/,
+ /**
+ * @param {RegExpMatchArray} match
+ * @param {CallbackResponse} response
+ */
isTrulyOpeningTag: (match, response) => {
const afterMatchIndex = match[0].length + match.index;
const nextChar = match.input[afterMatchIndex];
- if (nextChar === "<" || nextChar === ",") {
+ if (
+ // HTML should not include another raw `<` inside a tag
+ // nested type?
+ // `>`, etc.
+ nextChar === "<" || // the , gives away that this is not HTML
+ // ``
+ nextChar === ","
+ ) {
response.ignoreMatch();
return;
}
@@ -343,6 +369,8 @@ function setupTemplateTag(_hljs, js) {
variants: [
{
begin: GLIMMER_TEMPLATE_TAG.begin,
+ // we carefully check the opening tag to see if it truly
+ // is a tag and not a false positive
"on:begin": GLIMMER_TEMPLATE_TAG.isTrulyOpeningTag,
end: GLIMMER_TEMPLATE_TAG.end
}
diff --git a/package.json b/package.json
index 1609d3c2..439b3c4b 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,8 @@
"lint:js": "eslint .",
"lint:js:fix": "eslint . --fix",
"lint": "pnpm lint:js && pnpm --filter '*' lint:js",
- "lint:fix": "pnpm lint:js:fix && pnpm --filter '*' lint:js:fix"
+ "lint:fix": "pnpm lint:js:fix && pnpm --filter '*' lint:js:fix",
+ "test": "pnpm --filter '*' test"
},
"engines": {
"node": "^14 || ^16 || ^18"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ea34f215..f37de6d6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -72,10 +72,10 @@ importers:
markdown-it: ^13.0.1
rehype-highlight: ^6.0.0
rehype-stringify: ^9.0.3
- remark-highlight.js: ^7.0.1
- remark-html: ^15.0.2
- remark-parse: ^10.0.1
- remark-rehype: ^10.1.0
+ remark-highlight.js: ^6.0.0
+ remark-html: ^13.0.0
+ remark-parse: ^9.0.0
+ remark-rehype: ^9.1.0
typescript: ^4.9.5
unified: ^8.4.2
vitest: ^0.29.7
@@ -91,10 +91,10 @@ importers:
markdown-it: 13.0.1
rehype-highlight: 6.0.0
rehype-stringify: 9.0.3
- remark-highlight.js: 7.0.1
- remark-html: 15.0.2
- remark-parse: 10.0.1
- remark-rehype: 10.1.0
+ remark-highlight.js: 6.0.0
+ remark-html: 13.0.2
+ remark-parse: 9.0.0
+ remark-rehype: 9.1.0
typescript: 4.9.5
unified: 8.4.2
vitest: 0.29.7
@@ -2287,6 +2287,10 @@ packages:
'@types/unist': 2.0.6
dev: true
+ /@types/mdurl/1.0.2:
+ resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
+ dev: true
+
/@types/minimatch/3.0.5:
resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
dev: true
@@ -3014,6 +3018,10 @@ packages:
redeyed: 2.1.1
dev: true
+ /ccount/1.1.0:
+ resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==}
+ dev: true
+
/ccount/2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
dev: true
@@ -3053,18 +3061,34 @@ packages:
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
+ /character-entities-html4/1.1.4:
+ resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==}
+ dev: true
+
/character-entities-html4/2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
dev: true
+ /character-entities-legacy/1.1.4:
+ resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+ dev: true
+
/character-entities-legacy/3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
dev: true
+ /character-entities/1.2.4:
+ resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+ dev: true
+
/character-entities/2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
dev: true
+ /character-reference-invalid/1.1.4:
+ resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+ dev: true
+
/check-error/1.0.2:
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
dev: true
@@ -3142,6 +3166,10 @@ packages:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: true
+ /comma-separated-tokens/1.0.8:
+ resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
+ dev: true
+
/comma-separated-tokens/2.0.2:
resolution: {integrity: sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==}
dev: true
@@ -4350,6 +4378,12 @@ packages:
reusify: 1.0.4
dev: true
+ /fault/1.0.4:
+ resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+ dependencies:
+ format: 0.2.2
+ dev: true
+
/fault/2.0.1:
resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
dependencies:
@@ -4775,6 +4809,10 @@ packages:
web-namespaces: 2.0.1
dev: true
+ /hast-util-is-element/1.1.0:
+ resolution: {integrity: sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==}
+ dev: true
+
/hast-util-is-element/2.1.2:
resolution: {integrity: sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==}
dependencies:
@@ -4788,12 +4826,33 @@ packages:
'@types/hast': 2.3.4
dev: true
+ /hast-util-sanitize/3.0.2:
+ resolution: {integrity: sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA==}
+ dependencies:
+ xtend: 4.0.2
+ dev: true
+
/hast-util-sanitize/4.0.0:
resolution: {integrity: sha512-pw56+69jq+QSr/coADNvWTmBPDy+XsmwaF5KnUys4/wM1jt/fZdl7GPxhXXXYdXnz3Gj3qMkbUCH2uKjvX0MgQ==}
dependencies:
'@types/hast': 2.3.4
dev: true
+ /hast-util-to-html/7.1.3:
+ resolution: {integrity: sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==}
+ dependencies:
+ ccount: 1.1.0
+ comma-separated-tokens: 1.0.8
+ hast-util-is-element: 1.1.0
+ hast-util-whitespace: 1.0.4
+ html-void-elements: 1.0.5
+ property-information: 5.6.0
+ space-separated-tokens: 1.1.5
+ stringify-entities: 3.1.0
+ unist-util-is: 4.1.0
+ xtend: 4.0.2
+ dev: true
+
/hast-util-to-html/8.0.3:
resolution: {integrity: sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==}
dependencies:
@@ -4817,6 +4876,10 @@ packages:
unist-util-find-after: 4.0.0
dev: true
+ /hast-util-whitespace/1.0.4:
+ resolution: {integrity: sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==}
+ dev: true
+
/hast-util-whitespace/2.0.0:
resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==}
dev: true
@@ -4846,6 +4909,10 @@ packages:
rsvp: 3.2.1
dev: true
+ /highlight.js/10.7.3:
+ resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
+ dev: true
+
/highlight.js/11.6.0:
resolution: {integrity: sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==}
engines: {node: '>=12.0.0'}
@@ -4883,6 +4950,10 @@ packages:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
dev: true
+ /html-void-elements/1.0.5:
+ resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==}
+ dev: true
+
/html-void-elements/2.0.1:
resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
dev: true
@@ -4982,6 +5053,17 @@ packages:
p-is-promise: 3.0.0
dev: true
+ /is-alphabetical/1.0.4:
+ resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+ dev: true
+
+ /is-alphanumerical/1.0.4:
+ resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+ dependencies:
+ is-alphabetical: 1.0.4
+ is-decimal: 1.0.4
+ dev: true
+
/is-arrayish/0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
dev: true
@@ -5023,6 +5105,10 @@ packages:
has-tostringtag: 1.0.0
dev: true
+ /is-decimal/1.0.4:
+ resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+ dev: true
+
/is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -5045,6 +5131,10 @@ packages:
is-extglob: 2.1.1
dev: true
+ /is-hexadecimal/1.0.4:
+ resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+ dev: true
+
/is-negative-zero/2.0.2:
resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
engines: {node: '>= 0.4'}
@@ -5469,6 +5559,13 @@ packages:
tslib: 2.4.0
dev: true
+ /lowlight/1.20.0:
+ resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
+ dependencies:
+ fault: 1.0.4
+ highlight.js: 10.7.3
+ dev: true
+
/lowlight/2.7.0:
resolution: {integrity: sha512-RRdrHalFfjpxL91ITTX7KhJYH3QmX5bW9Uie2D2E5GPIR3XBYDYhScBjE291ewFZkStz/k2PN9KC+8deNLiI3Q==}
dependencies:
@@ -5565,6 +5662,12 @@ packages:
minimatch: 3.1.2
dev: true
+ /mdast-util-definitions/4.0.0:
+ resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
+ dependencies:
+ unist-util-visit: 2.0.3
+ dev: true
+
/mdast-util-definitions/5.1.1:
resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==}
dependencies:
@@ -5573,6 +5676,18 @@ packages:
unist-util-visit: 4.1.1
dev: true
+ /mdast-util-from-markdown/0.8.5:
+ resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-to-string: 2.0.0
+ micromark: 2.11.4
+ parse-entities: 2.0.0
+ unist-util-stringify-position: 2.0.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/mdast-util-from-markdown/1.2.0:
resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==}
dependencies:
@@ -5592,6 +5707,33 @@ packages:
- supports-color
dev: true
+ /mdast-util-to-hast/10.2.0:
+ resolution: {integrity: sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ '@types/unist': 2.0.6
+ mdast-util-definitions: 4.0.0
+ mdurl: 1.0.1
+ unist-builder: 2.0.3
+ unist-util-generated: 1.1.6
+ unist-util-position: 3.1.0
+ unist-util-visit: 2.0.3
+ dev: true
+
+ /mdast-util-to-hast/11.3.0:
+ resolution: {integrity: sha512-4o3Cli3hXPmm1LhB+6rqhfsIUBjnKFlIUZvudaermXB+4/KONdd/W4saWWkC+LBLbPMqhFSSTSRgafHsT5fVJw==}
+ dependencies:
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ '@types/mdurl': 1.0.2
+ mdast-util-definitions: 5.1.1
+ mdurl: 1.0.1
+ unist-builder: 3.0.0
+ unist-util-generated: 2.0.0
+ unist-util-position: 4.0.3
+ unist-util-visit: 4.1.1
+ dev: true
+
/mdast-util-to-hast/12.2.4:
resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==}
dependencies:
@@ -5606,6 +5748,10 @@ packages:
unist-util-visit: 4.1.1
dev: true
+ /mdast-util-to-string/2.0.0:
+ resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==}
+ dev: true
+
/mdast-util-to-string/3.1.0:
resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==}
dev: true
@@ -5805,6 +5951,15 @@ packages:
resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==}
dev: true
+ /micromark/2.11.4:
+ resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
+ dependencies:
+ debug: 4.3.4
+ parse-entities: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/micromark/3.1.0:
resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==}
dependencies:
@@ -6278,6 +6433,17 @@ packages:
callsites: 3.1.0
dev: true
+ /parse-entities/2.0.0:
+ resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+ dependencies:
+ character-entities: 1.2.4
+ character-entities-legacy: 1.1.4
+ character-reference-invalid: 1.1.4
+ is-alphanumerical: 1.0.4
+ is-decimal: 1.0.4
+ is-hexadecimal: 1.0.4
+ dev: true
+
/parse-json/4.0.0:
resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
engines: {node: '>=4'}
@@ -6461,6 +6627,12 @@ packages:
rsvp: 3.2.1
dev: true
+ /property-information/5.6.0:
+ resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
+ dependencies:
+ xtend: 4.0.2
+ dev: true
+
/property-information/6.1.1:
resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==}
dev: true
@@ -6661,6 +6833,13 @@ packages:
unified: 10.1.2
dev: true
+ /remark-highlight.js/6.0.0:
+ resolution: {integrity: sha512-eNHP/ezuDKoeh3KV+rWLeBVzU3SYVt0uu1tHdsCB6TUJYHwTNMJWZ5+nU+2fJHQXb+7PtpfGXVtFS9zk/W6qdw==}
+ dependencies:
+ lowlight: 1.20.0
+ unist-util-visit: 2.0.3
+ dev: true
+
/remark-highlight.js/7.0.1:
resolution: {integrity: sha512-ihXPWmg4l55rZ/wREHtEdqXEuVHfE8TvS0UMCemd4lKA1t7ts13xvV3pVLK4vhaeDjSxOroo6U7E4Xxf2wVS4A==}
dependencies:
@@ -6670,6 +6849,14 @@ packages:
unist-util-visit: 4.1.1
dev: true
+ /remark-html/13.0.2:
+ resolution: {integrity: sha512-LhSRQ+3RKdBqB/RGesFWkNNfkGqprDUCwjq54SylfFeNyZby5kqOG8Dn/vYsRoM8htab6EWxFXCY6XIZvMoRiQ==}
+ dependencies:
+ hast-util-sanitize: 3.0.2
+ hast-util-to-html: 7.1.3
+ mdast-util-to-hast: 10.2.0
+ dev: true
+
/remark-html/15.0.2:
resolution: {integrity: sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==}
dependencies:
@@ -6690,6 +6877,14 @@ packages:
- supports-color
dev: true
+ /remark-parse/9.0.0:
+ resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==}
+ dependencies:
+ mdast-util-from-markdown: 0.8.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/remark-rehype/10.1.0:
resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
dependencies:
@@ -6699,6 +6894,15 @@ packages:
unified: 10.1.2
dev: true
+ /remark-rehype/9.1.0:
+ resolution: {integrity: sha512-oLa6YmgAYg19zb0ZrBACh40hpBLteYROaPLhBXzLgjqyHQrN+gVP9N/FJvfzuNNuzCutktkroXEZBrxAxKhh7Q==}
+ dependencies:
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ mdast-util-to-hast: 11.3.0
+ unified: 10.1.2
+ dev: true
+
/require-directory/2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -7010,6 +7214,10 @@ packages:
deprecated: Please use @jridgewell/sourcemap-codec instead
dev: true
+ /space-separated-tokens/1.1.5:
+ resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
+ dev: true
+
/space-separated-tokens/2.0.1:
resolution: {integrity: sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==}
dev: true
@@ -7140,6 +7348,14 @@ packages:
safe-buffer: 5.2.1
dev: true
+ /stringify-entities/3.1.0:
+ resolution: {integrity: sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==}
+ dependencies:
+ character-entities-html4: 1.1.4
+ character-entities-legacy: 1.1.4
+ xtend: 4.0.2
+ dev: true
+
/stringify-entities/4.0.3:
resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
dependencies:
@@ -7571,6 +7787,10 @@ packages:
crypto-random-string: 2.0.0
dev: true
+ /unist-builder/2.0.3:
+ resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==}
+ dev: true
+
/unist-builder/3.0.0:
resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==}
dependencies:
@@ -7584,14 +7804,26 @@ packages:
unist-util-is: 5.1.1
dev: true
+ /unist-util-generated/1.1.6:
+ resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==}
+ dev: true
+
/unist-util-generated/2.0.0:
resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==}
dev: true
+ /unist-util-is/4.1.0:
+ resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
+ dev: true
+
/unist-util-is/5.1.1:
resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==}
dev: true
+ /unist-util-position/3.1.0:
+ resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==}
+ dev: true
+
/unist-util-position/4.0.3:
resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==}
dependencies:
@@ -7610,6 +7842,13 @@ packages:
'@types/unist': 2.0.6
dev: true
+ /unist-util-visit-parents/3.1.1:
+ resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-is: 4.1.0
+ dev: true
+
/unist-util-visit-parents/5.1.1:
resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==}
dependencies:
@@ -7617,6 +7856,14 @@ packages:
unist-util-is: 5.1.1
dev: true
+ /unist-util-visit/2.0.3:
+ resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-is: 4.1.0
+ unist-util-visit-parents: 3.1.1
+ dev: true
+
/unist-util-visit/4.1.1:
resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==}
dependencies:
diff --git a/tests-cjs/package.json b/tests-cjs/package.json
index 551f717c..5ed24d05 100644
--- a/tests-cjs/package.json
+++ b/tests-cjs/package.json
@@ -22,10 +22,10 @@
"markdown-it": "^13.0.1",
"rehype-highlight": "^6.0.0",
"rehype-stringify": "^9.0.3",
- "remark-highlight.js": "^7.0.1",
- "remark-html": "^15.0.2",
- "remark-parse": "^10.0.1",
- "remark-rehype": "^10.1.0",
+ "remark-highlight.js": "^6.0.0",
+ "remark-html": "^13.0.0",
+ "remark-parse": "^9.0.0",
+ "remark-rehype": "^9.1.0",
"typescript": "^4.9.5",
"unified": "^8.4.2",
"vitest": "^0.29.7"
diff --git a/tests-esm/unit/__snapshots__/injections.test.js.snap b/tests-esm/unit/__snapshots__/injections.test.js.snap
index af23c377..27ab65d4 100644
--- a/tests-esm/unit/__snapshots__/injections.test.js.snap
+++ b/tests-esm/unit/__snapshots__/injections.test.js.snap
@@ -1,4 +1,16 @@
-// Vitest Snapshot v1
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`Injections | JS > gjs / template tag > a setTimeout exists above the template 1`] = `
+"const demo = new Demo();
+
+setTimeout(() => {
+ demo.theProperty = 2;
+}, 500);
+
+<template>
+ {{demo.theProperty}}
+</tepmlate>"
+`;
exports[`Injections | JS > gjs / template tag > is embedded in a class 1`] = `
"import
diff --git a/tests-esm/unit/injections.test.js b/tests-esm/unit/injections.test.js
index fc1c9bde..07cafd76 100644
--- a/tests-esm/unit/injections.test.js
+++ b/tests-esm/unit/injections.test.js
@@ -1,15 +1,24 @@
-import { describe, test, expect } from 'vitest';
-import { stripIndent } from 'common-tags';
-import { parse, tag, list, glimmer, template, tags, formattedEquals, format } from '../-utils';
+import { describe, test, expect } from "vitest";
+import { stripIndent } from "common-tags";
+import {
+ parse,
+ tag,
+ list,
+ glimmer,
+ template,
+ tags,
+ formattedEquals,
+ format,
+} from "../-utils";
-describe('Injections | JS', () => {
- describe('hbs template literal', () => {
- test('basic', () => {
+describe("Injections | JS", () => {
+ describe("hbs template literal", () => {
+ test("basic", () => {
let result = parse(
stripIndent`
const hbs\`{{foo}}\`
`,
- 'js'
+ "js"
);
expect(result).toEqual(
@@ -18,66 +27,68 @@ describe('Injections | JS', () => {
});
});
- describe('gjs / template tag', () => {
- test('basic', () => {
+ describe("gjs / template tag", () => {
+ test("basic", () => {
let result = parse(
stripIndent`
export const Name =
{{@name}}
;
`,
- 'glimmer-javascript'
+ "glimmer-javascript"
);
expect(result).toEqual(
list(
tags.keyword.export,
- ' ',
+ " ",
tags.keyword.const,
- ' ',
- tag('title class_', 'Name'),
- ' = ',
- glimmer(template(tags.mustache(tags.arg('name')))),
- ';'
+ " ",
+ tag("title class_", "Name"),
+ " = ",
+ glimmer(template(tags.mustache(tags.arg("name")))),
+ ";"
)
);
});
- test('implied default export', () => {
+ test("implied default export", () => {
let result = parse(
stripIndent`
{{@name}}
`,
- 'js'
+ "js"
);
- expect(result).toEqual(glimmer(template(tags.mustache(tags.arg('name')))));
+ expect(result).toEqual(
+ glimmer(template(tags.mustache(tags.arg("name"))))
+ );
});
- test('explicit default export', () => {
+ test("explicit default export", () => {
let result = parse(
stripIndent`
export default
{{@name}}
`,
- 'javascript'
+ "javascript"
);
expect(result).toEqual(
list(
tags.keyword.export,
- ' ',
+ " ",
tags.keyword.default,
- ' ',
- glimmer(template(tags.mustache(tags.arg('name'))))
+ " ",
+ glimmer(template(tags.mustache(tags.arg("name"))))
)
);
});
- test('with imports', () => {
+ test("with imports", () => {
let result = parse(
stripIndent`
import Greeting from './greeting.js';
@@ -90,7 +101,7 @@ describe('Injections | JS', () => {
`,
- 'js'
+ "js"
);
formattedEquals(
@@ -98,21 +109,21 @@ describe('Injections | JS', () => {
list(
// These are JS and not tagged by us
`import Greeting from './greeting.js';`,
- '\n',
+ "\n",
`import WeatherSummary from './weather-summary.js';`,
- '\n',
- '\n',
+ "\n",
+ "\n",
glimmer(
template(
- tags.element('div', [
- tags.selfClosing('Greeting', [
- ' ',
- tags.arg('name'),
+ tags.element("div", [
+ tags.selfClosing("Greeting", [
+ " ",
+ tags.arg("name"),
tags.operator.equals,
- tags.string('Chris'),
+ tags.string("Chris"),
]),
- '\n',
- tags.selfClosing('WeatherSummary'),
+ "\n",
+ tags.selfClosing("WeatherSummary"),
])
)
)
@@ -120,7 +131,25 @@ describe('Injections | JS', () => {
);
});
- test('a function exists above the template', () => {
+ test("a setTimeout exists above the template", () => {
+ let result = parse(
+ stripIndent`
+ const demo = new Demo();
+
+ setTimeout(() => {
+ demo.theProperty = 2;
+ }, 500);
+
+
+ {{demo.theProperty}}
+
+ `
+ );
+
+ expect(result).toMatchSnapshot();
+ });
+
+ test("a function exists above the template", () => {
let result = parse(
stripIndent`
import Greeting from './greeting.js';
@@ -144,7 +173,7 @@ describe('Injections | JS', () => {
`,
- 'js'
+ "js"
);
formattedEquals(
@@ -161,37 +190,37 @@ describe('Injections | JS', () => {
dateOfBirth.getMonth() === now.getMonth()
);
}`,
- '\n',
- '\n',
+ "\n",
+ "\n",
glimmer(
template(
- tags.element('div', [
- tags.selfClosing('Greeting', [
- ' ',
- tags.arg('name'),
+ tags.element("div", [
+ tags.selfClosing("Greeting", [
+ " ",
+ tags.arg("name"),
tags.operator.equals,
- tags.string('Chris'),
+ tags.string("Chris"),
]),
- '\n',
+ "\n",
tags.mustache(
- '#',
- tag('title', tag('built_in', 'if')),
- tag('punctuation', '('),
- tag('title', 'isBirthday'),
- ' ',
- tag('punctuation', '@'),
- tag('params', 'user'),
- tag('punctuation', '.'),
- tag('title', 'dateOfBirth'),
- tag('punctuation', ')')
+ "#",
+ tag("title", tag("built_in", "if")),
+ tag("punctuation", "("),
+ tag("title", "isBirthday"),
+ " ",
+ tag("punctuation", "@"),
+ tag("params", "user"),
+ tag("punctuation", "."),
+ tag("title", "dateOfBirth"),
+ tag("punctuation", ")")
),
- tags.selfClosing('Celebration', [
- tag('attribute', 'type'),
+ tags.selfClosing("Celebration", [
+ tag("attribute", "type"),
tags.operator.equals,
- tag('string', [''', 'birthday', ''']),
+ tag("string", ["'", "birthday", "'"]),
]),
- tags.mustache('/', tag('title', tag('built_in', 'if'))),
- tags.selfClosing('WeatherSummary'),
+ tags.mustache("/", tag("title", tag("built_in", "if"))),
+ tags.selfClosing("WeatherSummary"),
])
)
)
@@ -199,7 +228,7 @@ describe('Injections | JS', () => {
);
});
- test('is embedded in a class', () => {
+ test("is embedded in a class", () => {
let result = parse(
stripIndent`
import Component from '@glimmer/component';
@@ -236,13 +265,13 @@ describe('Injections | JS', () => {
}
`,
- 'js'
+ "js"
);
expect(format(result)).toMatchSnapshot();
});
- test('multiple components', () => {
+ test("multiple components", () => {
let result = parse(
stripIndent`
import WeatherSummary from './weather-summary.js';
@@ -269,7 +298,7 @@ describe('Injections | JS', () => {
`,
- 'js'
+ "js"
);
expect(format(result)).toMatchSnapshot();