From 4b83ea582c1ccd3d7e24ac71dee29dccce00bfe5 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Sat, 15 Oct 2022 10:43:37 +0100 Subject: [PATCH] fix (labs/ssr): move to enhanced-resolve for package exports support The resolve package doesn't support package exports and various other more modern resolution features. It seems `enhanced-resolve` (from webpack) introduces this support. --- package-lock.json | 91 +++++++++++++++------- packages/labs/ssr/package.json | 6 +- packages/labs/ssr/src/lib/module-loader.ts | 23 ++---- 3 files changed, 74 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index c13ff6baa2..0829525bad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9707,6 +9707,18 @@ } } }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -21351,6 +21363,14 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -23837,7 +23857,7 @@ }, "packages/labs/analyzer": { "name": "@lit-labs/analyzer", - "version": "0.2.2", + "version": "0.3.0", "license": "BSD-3-Clause", "dependencies": { "package-json-type": "^1.0.3", @@ -23856,10 +23876,10 @@ }, "packages/labs/cli": { "name": "@lit-labs/cli", - "version": "0.1.0", + "version": "0.2.0", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0", "@lit/localize-tools": "^0.6.1", "chalk": "^5.0.1", @@ -23882,7 +23902,8 @@ } }, "packages/labs/cli-localize": { - "version": "0.0.1", + "name": "@lit-labs/cli-localize", + "version": "0.1.0", "license": "BSD-3-Clause", "dependencies": { "@lit/localize-tools": "^0.6.3" @@ -23950,10 +23971,10 @@ }, "packages/labs/gen-utils": { "name": "@lit-labs/gen-utils", - "version": "0.1.0", + "version": "0.1.1", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/analyzer": "^0.2.0" + "@lit-labs/analyzer": "^0.3.0" }, "devDependencies": { "@lit-internal/tests": "^0.0.0" @@ -23964,10 +23985,10 @@ }, "packages/labs/gen-wrapper-angular": { "name": "@lit-labs/gen-wrapper-angular", - "version": "0.0.1", + "version": "0.0.2", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0" }, "devDependencies": { @@ -23982,10 +24003,10 @@ }, "packages/labs/gen-wrapper-react": { "name": "@lit-labs/gen-wrapper-react", - "version": "0.1.0", + "version": "0.2.0", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0" }, "devDependencies": { @@ -23997,10 +24018,10 @@ }, "packages/labs/gen-wrapper-vue": { "name": "@lit-labs/gen-wrapper-vue", - "version": "0.1.1", + "version": "0.2.0", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0", "@lit-labs/vue-utils": "^0.1.0" }, @@ -24025,7 +24046,7 @@ }, "packages/labs/observers": { "name": "@lit-labs/observers", - "version": "1.0.2", + "version": "1.1.0", "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^1.1.0" @@ -24037,7 +24058,7 @@ }, "packages/labs/react": { "name": "@lit-labs/react", - "version": "1.0.8", + "version": "1.0.9", "license": "BSD-3-Clause", "devDependencies": { "@lit-internal/scripts": "^1.0.0", @@ -24084,12 +24105,12 @@ "@lit-labs/ssr-client": "^1.0.0", "@lit/reactive-element": "^1.4.0", "@types/node": "^16.0.0", + "enhanced-resolve": "^5.10.0", "lit": "^2.3.0", "lit-element": "^3.1.0", "lit-html": "^2.3.0", "node-fetch": "^3.2.8", - "parse5": "^6.0.1", - "resolve": "^1.10.1" + "parse5": "^6.0.1" }, "devDependencies": { "@koa/router": "^12.0.0", @@ -24146,7 +24167,7 @@ }, "packages/labs/task": { "name": "@lit-labs/task", - "version": "1.1.3", + "version": "2.0.0", "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^1.1.0" @@ -24208,12 +24229,12 @@ } }, "packages/lit": { - "version": "2.3.1", + "version": "2.4.0", "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^1.4.0", "lit-element": "^3.2.0", - "lit-html": "^2.3.0" + "lit-html": "^2.4.0" }, "devDependencies": { "@lit-internal/scripts": "^1.0.0", @@ -24239,7 +24260,7 @@ } }, "packages/lit-html": { - "version": "2.3.1", + "version": "2.4.0", "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -26430,7 +26451,7 @@ "version": "file:packages/labs/cli", "requires": { "@lit-internal/tests": "^0.0.0", - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0", "@lit/localize-tools": "^0.6.1", "@types/command-line-args": "^5.2.0", @@ -26488,7 +26509,7 @@ "version": "file:packages/labs/gen-utils", "requires": { "@lit-internal/tests": "^0.0.0", - "@lit-labs/analyzer": "^0.2.0" + "@lit-labs/analyzer": "^0.3.0" } }, "@lit-labs/gen-wrapper-angular": { @@ -26496,7 +26517,7 @@ "requires": { "@esm-bundle/chai": "^4.1.5", "@lit-internal/tests": "0.0.0", - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0", "@types/chai": "^4.0.1", "@types/mocha": "^9.0.0" @@ -26506,7 +26527,7 @@ "version": "file:packages/labs/gen-wrapper-react", "requires": { "@lit-internal/tests": "^0.0.0", - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0" } }, @@ -26514,7 +26535,7 @@ "version": "file:packages/labs/gen-wrapper-vue", "requires": { "@lit-internal/tests": "^0.0.0", - "@lit-labs/analyzer": "^0.2.0", + "@lit-labs/analyzer": "^0.3.0", "@lit-labs/gen-utils": "^0.1.0", "@lit-labs/vue-utils": "^0.1.0" } @@ -26585,6 +26606,7 @@ "@webcomponents/template-shadowroot": "^0.1.0", "command-line-args": "^5.1.1", "deepmerge": "^4.2.2", + "enhanced-resolve": "*", "koa": "^2.7.0", "koa-cors": "^0.0.16", "koa-node-resolve": "^1.0.0-pre.5", @@ -26593,8 +26615,7 @@ "lit-element": "^3.1.0", "lit-html": "^2.3.0", "node-fetch": "^3.2.8", - "parse5": "^6.0.1", - "resolve": "^1.10.1" + "parse5": "^6.0.1" }, "dependencies": { "node-fetch": { @@ -32514,6 +32535,15 @@ "has-binary2": "~1.0.2" } }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -36228,7 +36258,7 @@ "@webcomponents/template": "^1.4.4", "@webcomponents/webcomponentsjs": "^2.6.0", "lit-element": "^3.2.0", - "lit-html": "^2.3.0", + "lit-html": "^2.4.0", "tslib": "^2.0.3" } }, @@ -41472,6 +41502,11 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + }, "tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", diff --git a/packages/labs/ssr/package.json b/packages/labs/ssr/package.json index 1793699975..bb16a9cf10 100644 --- a/packages/labs/ssr/package.json +++ b/packages/labs/ssr/package.json @@ -134,9 +134,9 @@ "@open-wc/testing-karma": "^4.0.9", "@types/command-line-args": "^5.0.0", "@types/koa": "^2.0.49", + "@types/koa__router": "^8.0.2", "@types/koa-cors": "*", "@types/koa-static": "^4.0.1", - "@types/koa__router": "^8.0.2", "@types/parse5": "^6.0.1", "@types/resolve": "^1.20.2", "@webcomponents/template-shadowroot": "^0.1.0", @@ -151,12 +151,12 @@ "@lit-labs/ssr-client": "^1.0.0", "@lit/reactive-element": "^1.4.0", "@types/node": "^16.0.0", + "enhanced-resolve": "^5.10.0", "lit": "^2.3.0", "lit-element": "^3.1.0", "lit-html": "^2.3.0", "node-fetch": "^3.2.8", - "parse5": "^6.0.1", - "resolve": "^1.10.1" + "parse5": "^6.0.1" }, "engines": { "node": ">=13.9.0" diff --git a/packages/labs/ssr/src/lib/module-loader.ts b/packages/labs/ssr/src/lib/module-loader.ts index b6b6e00e3a..8b939d5e57 100644 --- a/packages/labs/ssr/src/lib/module-loader.ts +++ b/packages/labs/ssr/src/lib/module-loader.ts @@ -8,11 +8,9 @@ import * as path from 'path'; import {promises as fs} from 'fs'; import {URL, fileURLToPath, pathToFileURL} from 'url'; import * as vm from 'vm'; -import resolveAsync from 'resolve'; +import enhancedResolve from 'enhanced-resolve'; import {builtinModules} from 'module'; -type PackageJSON = {main?: string; module?: string; 'jsnext:main'?: string}; - const builtIns = new Set(builtinModules); const specifierMatches = (specifier: string, match: string) => @@ -276,17 +274,10 @@ export const resolveSpecifier = async ( // a single version. referrerPath = fileURLToPath(import.meta.url); } - const modulePath = await resolve(specifier, { - basedir: path.dirname(referrerPath), - moduleDirectory: ['node_modules'], + const modulePath = await resolve(specifier, path.dirname(referrerPath), { + modules: ['node_modules'], extensions: ['.js'], - // Some packages use a non-standard alternative to the "main" field - // in their package.json to differentiate their ES module version. - packageFilter: (packageJson: PackageJSON) => { - packageJson.main = - packageJson.module ?? packageJson['jsnext:main'] ?? packageJson.main; - return packageJson; - }, + mainFields: ['module', 'jsnext:main', 'main'], }); return pathToFileURL(modulePath); } @@ -301,10 +292,12 @@ const initializeImportMeta = (meta: {url: string}, module: vm.Module) => { const resolve = async ( id: string, - opts: resolveAsync.AsyncOpts + path: string, + opts: Partial ): Promise => { + const resolver = enhancedResolve.create(opts); return new Promise((res, rej) => { - resolveAsync(id, opts, (err, resolved) => { + resolver({}, path, id, {}, (err: unknown, resolved?: string) => { if (err != null) { rej(err); } else {