From 79631dea91bddcc26b9ab635355f4e8a85e438d2 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:24:40 -0400 Subject: [PATCH] WIP: jest is the worst --- package.json | 6 +++ packages/cli-lib/src/extract.ts | 2 +- packages/cli-lib/src/gts_extractor.ts | 8 ++- packages/cli-lib/src/hbs_extractor.ts | 39 ++++++++++++--- .../cli-lib/tests/unit/gjs_extractor.test.ts | 2 +- .../cli-lib/tests/unit/gts_extractor.test.ts | 2 +- .../cli-lib/tests/unit/hbs_extractor.test.ts | 2 +- pnpm-lock.yaml | 50 +++---------------- 8 files changed, 55 insertions(+), 56 deletions(-) diff --git a/package.json b/package.json index 6806d4a20e..375535c313 100644 --- a/package.json +++ b/package.json @@ -145,6 +145,12 @@ "source-map-js": "1.0.2" }, "pnpm": { + "overrides": { + "ember-template-recast": "^6.1.4", + "@glimmer/reference": "^0.91.1", + "@glimmer/syntax": "^0.91.1", + "@glimmer/validator": "^0.91.1" + }, "packageExtensions": { "ts-jest": { "dependencies": { diff --git a/packages/cli-lib/src/extract.ts b/packages/cli-lib/src/extract.ts index 7fa6b3476f..ff8990de93 100644 --- a/packages/cli-lib/src/extract.ts +++ b/packages/cli-lib/src/extract.ts @@ -161,7 +161,7 @@ async function processFile( } else if (fn.endsWith('.hbs')) { debug('Processing %s using hbs extractor', fn) const {parseFile} = await import('./hbs_extractor.js') - parseFile(source, fn, opts) + await parseFile(source, fn, opts) } else if (fn.endsWith('.gts') || fn.endsWith('.gjs')) { debug('Processing %s as gts/gjs file', fn) const {parseFile} = await import('./gts_extractor.js') diff --git a/packages/cli-lib/src/gts_extractor.ts b/packages/cli-lib/src/gts_extractor.ts index 15e109f38c..56ce02963d 100644 --- a/packages/cli-lib/src/gts_extractor.ts +++ b/packages/cli-lib/src/gts_extractor.ts @@ -10,7 +10,11 @@ import {parseScript} from './parse_script' let {Preprocessor} = require('content-tag') let p = new Preprocessor() -export function parseFile(source: string, fileName: string, options: any) { +export async function parseFile( + source: string, + fileName: string, + options: any +) { const scriptParseFn = parseScript(options, fileName) const transformedSource = p.process(source, {filename: fileName}) @@ -20,6 +24,6 @@ export function parseFile(source: string, fileName: string, options: any) { const parseResult = p.parse(source, {filename: fileName}) for (let parsed of parseResult) { - parseHbsFile(parsed.contents, fileName, options) + await parseHbsFile(parsed.contents, fileName, options) } } diff --git a/packages/cli-lib/src/hbs_extractor.ts b/packages/cli-lib/src/hbs_extractor.ts index 450d54c976..fbb4e1832e 100644 --- a/packages/cli-lib/src/hbs_extractor.ts +++ b/packages/cli-lib/src/hbs_extractor.ts @@ -1,9 +1,13 @@ -import {transform} from 'ember-template-recast' -import type {AST} from '@glimmer/syntax' +// We can't import these types because @glimmer/syntax is ESM +// and our TS is compiled to CJS +// and TSC doesn't know how to ignore the compatibility problems with that +// when we're just doing type impotrs. +// import type {AST} from '@glimmer/syntax' import {Opts} from '@formatjs/ts-transformer' function extractText( - node: AST.MustacheStatement | AST.SubExpression, + // node: AST.MustacheStatement | AST.SubExpression, + node: any, fileName: string, options: Opts ) { @@ -41,13 +45,34 @@ function extractText( } } -export function parseFile(source: string, fileName: string, options: any) { +export async function parseFile( + source: string, + fileName: string, + options: any +) { + // ember-template-recast has ESM dependencies (@glimmer/syntax) + // even though ember-template-recast is usable in CJS environments... + // TSC doesn't agree. + // + // this repo is actually FAKE TS - it's actually compiled to CJS. + // so any dependency that uses types from an ESM-sub-dependency, must be + // await imported. + // + // Most of the problem is actually an incompatibility between CJS + MJS await imports + // and jest's poor-support of ESM (mjs extensions). + // as soon as this repo is off of jest, extract.ts can await import mts files + // with 0 issue. + // @ts-ignore + const {transform} = await (import('ember-template-recast') as any) + let visitor = function () { return { - MustacheStatement(node: AST.MustacheStatement) { + // MustacheStatement(node: AST.MustacheStatement) { + MustacheStatement(node: any) { extractText(node, fileName, options) }, - SubExpression(node: AST.SubExpression) { + // SubExpression(node: AST.SubExpression) { + SubExpression(node: any) { extractText(node, fileName, options) }, } @@ -55,5 +80,5 @@ export function parseFile(source: string, fileName: string, options: any) { // SAFETY: ember-template-recast's types are out of date, // but it does not affect runtime - transform(source, visitor as any) + transform(source, visitor) } diff --git a/packages/cli-lib/tests/unit/gjs_extractor.test.ts b/packages/cli-lib/tests/unit/gjs_extractor.test.ts index 44b8908b37..96205e2229 100644 --- a/packages/cli-lib/tests/unit/gjs_extractor.test.ts +++ b/packages/cli-lib/tests/unit/gjs_extractor.test.ts @@ -6,7 +6,7 @@ import {join} from 'path' test('gts_extractor', async function () { let messages: MessageDescriptor[] = [] const fixturePath = join(__dirname, './fixtures/comp.gjs') - parseFile(await readFile(fixturePath, 'utf8'), fixturePath, { + await parseFile(await readFile(fixturePath, 'utf8'), fixturePath, { onMsgExtracted(_: any, msgs: any) { messages = messages.concat(msgs) }, diff --git a/packages/cli-lib/tests/unit/gts_extractor.test.ts b/packages/cli-lib/tests/unit/gts_extractor.test.ts index a389419c7f..3a1066632b 100644 --- a/packages/cli-lib/tests/unit/gts_extractor.test.ts +++ b/packages/cli-lib/tests/unit/gts_extractor.test.ts @@ -6,7 +6,7 @@ import {join} from 'path' test('gts_extractor', async function () { let messages: MessageDescriptor[] = [] const fixturePath = join(__dirname, './fixtures/comp.gts') - parseFile(await readFile(fixturePath, 'utf8'), fixturePath, { + await parseFile(await readFile(fixturePath, 'utf8'), fixturePath, { onMsgExtracted(_: any, msgs: any) { messages = messages.concat(msgs) }, diff --git a/packages/cli-lib/tests/unit/hbs_extractor.test.ts b/packages/cli-lib/tests/unit/hbs_extractor.test.ts index 4a437e6082..a39eb0c91a 100644 --- a/packages/cli-lib/tests/unit/hbs_extractor.test.ts +++ b/packages/cli-lib/tests/unit/hbs_extractor.test.ts @@ -6,7 +6,7 @@ import {join} from 'path' test('hbs_extractor', async function () { let messages: MessageDescriptor[] = [] const fixturePath = join(__dirname, './fixtures/comp.hbs') - parseFile(await readFile(fixturePath, 'utf8'), fixturePath, { + await parseFile(await readFile(fixturePath, 'utf8'), fixturePath, { onMsgExtracted(_: any, msgs: any) { messages = messages.concat(msgs) }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6499fe7e98..f239fc6285 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: overrides: terser: 5.27.0 source-map-js: 1.0.2 + ember-template-recast: ^6.1.4 + '@glimmer/reference': ^0.91.1 + '@glimmer/syntax': ^0.91.1 + '@glimmer/validator': ^0.91.1 packageExtensionsChecksum: 76b703b906c4715da3c7dad71f1ddd63 @@ -5062,33 +5066,14 @@ packages: /@glimmer/env@0.1.7: resolution: {integrity: sha512-JKF/a9I9jw6fGoz8kA7LEQslrwJ5jms5CXhu/aqkBWk+PmZ6pTl8mlb/eJ/5ujBGTiQzBhy5AIWF712iA+4/mw==} - /@glimmer/global-context@0.84.3: - resolution: {integrity: sha512-8Oy9Wg5IZxMEeAnVmzD2NkObf89BeHoFSzJgJROE/deutd3rxg83mvlOez4zBBGYwnTb+VGU2LYRpet92egJjA==} - dependencies: - '@glimmer/env': 0.1.7 - /@glimmer/global-context@0.91.1: resolution: {integrity: sha512-iSTUasIo00zeHQ2467eja98EzQxTPIQzkoRB4Cb258HSnwfuzxrfUUGIdz5dlXIx7dYN9RaY5QstSZ+b4GtV9w==} - /@glimmer/interfaces@0.84.3: - resolution: {integrity: sha512-dk32ykoNojt0mvEaIW6Vli5MGTbQo58uy3Epj7ahCgTHmWOKuw/0G83f2UmFprRwFx689YTXG38I/vbpltEjzg==} - dependencies: - '@simple-dom/interface': 1.4.0 - /@glimmer/interfaces@0.91.1: resolution: {integrity: sha512-yUCpAC28UZUxzr5WK8bfx9z4MbSpOV6pAJ/XmJibzx4+un9Is+5ZvZ0t3QHMHs2Qi9N606412qLjLJ/HLgsd4w==} dependencies: '@simple-dom/interface': 1.4.0 - /@glimmer/reference@0.84.3: - resolution: {integrity: sha512-lV+p/aWPVC8vUjmlvYVU7WQJsLh319SdXuAWoX/SE3pq340BJlAJiEcAc6q52y9JNhT57gMwtjMX96W5Xcx/qw==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.84.3 - '@glimmer/interfaces': 0.84.3 - '@glimmer/util': 0.84.3 - '@glimmer/validator': 0.84.3 - /@glimmer/reference@0.91.1: resolution: {integrity: sha512-qgRLjIRadnN4Ct2FQOwQL8L/xYcJoC8tVf16eLdnYI+ZyhRnpIwZmzbgbx9ylt1/ciYHBVyy2itQVwaswxtLAg==} dependencies: @@ -5098,14 +5083,6 @@ packages: '@glimmer/util': 0.91.1 '@glimmer/validator': 0.91.1 - /@glimmer/syntax@0.84.3: - resolution: {integrity: sha512-ioVbTic6ZisLxqTgRBL2PCjYZTFIwobifCustrozRU2xGDiYvVIL0vt25h2c1ioDsX59UgVlDkIK4YTAQQSd2A==} - dependencies: - '@glimmer/interfaces': 0.84.3 - '@glimmer/util': 0.84.3 - '@handlebars/parser': 2.0.0 - simple-html-tokenizer: 0.5.11 - /@glimmer/syntax@0.91.1: resolution: {integrity: sha512-/US6/yxgBlyw/etw7ptmQvbg134th2JJg6EJYp1Y8oIsFkjkB+huYkSxidcG0ENUNwy6FMefg/XjiSq/C9qrqw==} dependencies: @@ -5115,25 +5092,12 @@ packages: '@handlebars/parser': 2.0.0 simple-html-tokenizer: 0.5.11 - /@glimmer/util@0.84.3: - resolution: {integrity: sha512-qFkh6s16ZSRuu2rfz3T4Wp0fylFj3HBsONGXQcrAdZjdUaIS6v3pNj6mecJ71qRgcym9Hbaq/7/fefIwECUiKw==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/interfaces': 0.84.3 - '@simple-dom/interface': 1.4.0 - /@glimmer/util@0.91.1: resolution: {integrity: sha512-Wc4wCsaPpDZnUx33B8NGDwV+ee0h6XRPABvTBFW0Z+jehJO/aEiWVMEA6zjuH8B1rq+/RQYY7gvZR2/g+mxIGw==} dependencies: '@glimmer/env': 0.1.7 '@glimmer/interfaces': 0.91.1 - /@glimmer/validator@0.84.3: - resolution: {integrity: sha512-RTBV4TokUB0vI31UC7ikpV7lOYpWUlyqaKV//pRC4pexYMlmqnVhkFrdiimB/R1XyNdUOQUmnIAcdic39NkbhQ==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.84.3 - /@glimmer/validator@0.91.1: resolution: {integrity: sha512-RH9RTiOixw+IpBZybBlomoJnMtMWDIcJh1ae0qT1BguVBnPywTvsSw5b1MBLWOyhM2NfAfAeucG16bswXkDCCA==} dependencies: @@ -10395,9 +10359,9 @@ packages: engines: {node: 12.* || 14.* || >= 16.*} hasBin: true dependencies: - '@glimmer/reference': 0.84.3 - '@glimmer/syntax': 0.84.3 - '@glimmer/validator': 0.84.3 + '@glimmer/reference': 0.91.1 + '@glimmer/syntax': 0.91.1 + '@glimmer/validator': 0.91.1 async-promise-queue: 1.0.5 colors: 1.4.0 commander: 8.3.0