From e963d68f423df0421d22a0e3d96b48ae37461894 Mon Sep 17 00:00:00 2001 From: Brad Cornes Date: Mon, 14 Dec 2020 13:59:22 +0000 Subject: [PATCH] fix pnp config module resolution --- .../src/class-names/environment.js | 59 +++++++++---------- .../src/class-names/index.js | 4 +- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/packages/tailwindcss-intellisense/src/class-names/environment.js b/packages/tailwindcss-intellisense/src/class-names/environment.js index 2eb5dbd..c18806c 100644 --- a/packages/tailwindcss-intellisense/src/class-names/environment.js +++ b/packages/tailwindcss-intellisense/src/class-names/environment.js @@ -1,13 +1,27 @@ import * as path from 'path' -import Module from 'module' import findUp from 'find-up' import resolveFrom from 'resolve-from' import importFrom from 'import-from' +let isPnp +let pnpApi + export function withUserEnvironment(base, root, cb) { + if (isPnp === true) { + return withPnpEnvironment(base, cb) + } + + if (isPnp === false) { + return withNonPnpEnvironment(base, cb) + } + const pnpPath = findUp.sync( (dir) => { - const pnpFile = path.join(dir, '.pnp.js') + let pnpFile = path.join(dir, '.pnp.js') + if (findUp.sync.exists(pnpFile)) { + return pnpFile + } + pnpFile = path.join(dir, '.pnp.cjs') if (findUp.sync.exists(pnpFile)) { return pnpFile } @@ -17,62 +31,47 @@ export function withUserEnvironment(base, root, cb) { }, { cwd: base } ) + if (pnpPath) { - return withPnpEnvironment(pnpPath, cb) + isPnp = true + pnpApi = __non_webpack_require__(pnpPath) + pnpApi.setup() + } else { + isPnp = false } - return withNonPnpEnvironment(base, cb) + + return withUserEnvironment(base, root, cb) } -function withPnpEnvironment(pnpPath, cb) { - const basePath = path.dirname(pnpPath) - - // pnp will patch `module` and `fs` to load package in pnp environment - // backup the functions which will be patched here - const originalModule = Object.create(null) - originalModule._load = Module._load - originalModule._resolveFilename = Module._resolveFilename - originalModule._findPath = Module._findPath - - const pnpapi = __non_webpack_require__(pnpPath) - - // get into pnp environment - pnpapi.setup() - - // restore the patched function, we can not load any package after called this - const restore = () => Object.assign(Module, originalModule) - - const pnpResolve = (request, from = basePath) => { - return pnpapi.resolveRequest(request, from + '/') +function withPnpEnvironment(base, cb) { + const pnpResolve = (request, from = base) => { + return pnpApi.resolveRequest(request, from.replace(/\/$/, '') + '/') } const pnpRequire = (request, from) => { return __non_webpack_require__(pnpResolve(request, from)) } - const res = cb({ isPnP: true, resolve: pnpResolve, require: pnpRequire }) + const res = cb({ isPnp: true, resolve: pnpResolve, require: pnpRequire }) // check if it return a thenable if (res != null && res.then) { return res.then( (x) => { - restore() return x }, (err) => { - restore() throw err } ) } - restore() - return res } function withNonPnpEnvironment(base, cb) { return cb({ - isPnP: false, + isPnp: false, require(request, from = base) { return importFrom(from, request) }, diff --git a/packages/tailwindcss-intellisense/src/class-names/index.js b/packages/tailwindcss-intellisense/src/class-names/index.js index 98d3dc0..7dedcdf 100644 --- a/packages/tailwindcss-intellisense/src/class-names/index.js +++ b/packages/tailwindcss-intellisense/src/class-names/index.js @@ -259,7 +259,7 @@ function withPackages(configDir, root, cb) { return withUserEnvironment( configDir, root, - async ({ isPnP, require, resolve }) => { + async ({ isPnp, require, resolve }) => { const tailwindBase = path.dirname(resolve('tailwindcss/package.json')) const postcss = require('postcss', tailwindBase) const tailwindcss = require('tailwindcss') @@ -274,7 +274,7 @@ function withPackages(configDir, root, cb) { ), tailwindBase ) - if (isPnP) { + if (isPnp) { browserslistCommand = 'yarn' browserslistArgs = ['node', browserslistBin] } else {