From cf7bb68e35762743655fbfd33d79431bcc7606e1 Mon Sep 17 00:00:00 2001 From: Brad Cornes Date: Fri, 4 Jun 2021 15:07:32 +0100 Subject: [PATCH] fix for canary releases --- .../tailwindcss-language-server/src/server.ts | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/packages/tailwindcss-language-server/src/server.ts b/packages/tailwindcss-language-server/src/server.ts index 94996ca..b706d15 100644 --- a/packages/tailwindcss-language-server/src/server.ts +++ b/packages/tailwindcss-language-server/src/server.ts @@ -69,6 +69,7 @@ import { getDocumentColors } from 'tailwindcss-language-service/src/documentColo import { fromRatio, names as namedColors } from '@ctrl/tinycolor' import { debounce } from 'debounce' import { getModuleDependencies } from './util/getModuleDependencies' +import assert from 'assert' // import postcssLoadConfig from 'postcss-load-config' const CONFIG_FILE_GLOB = '{tailwind,tailwind.config}.{js,cjs}' @@ -132,6 +133,19 @@ function getConfigId(configPath: string, configDependencies: string[]): string { ) } +function first(...options: Array<() => T>): T { + for (let i = 0; i < options.length; i++) { + let option = options[i] + if (i === options.length - 1) { + return option() + } else { + try { + return option() + } catch (_) {} + } + } +} + interface ProjectService { state: State tryInit: () => Promise @@ -442,23 +456,38 @@ async function createProjectService( let tailwindDirectives = new Set() let root = postcss.root() let result = { opts: {}, messages: [] } + let registerDependency = () => {} try { - let createContext - - try { - let createContextFn = __non_webpack_require__( - resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContextUtils') - ).createContext - createContext = (state) => createContextFn(state.config) - } catch (_) { - // TODO: only for canary releases so can probably remove - let setupContext = __non_webpack_require__( - resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContext') - ).default - createContext = (state) => - setupContext(state.configPath, tailwindDirectives)(result, root) - } + let createContext = first( + () => { + let createContextFn = __non_webpack_require__( + resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContextUtils') + ).createContext + assert.strictEqual(typeof createContextFn, 'function') + return (state) => createContextFn(state.config) + }, + // TODO: the next two are canary releases only so can probably be removed + () => { + let setupTrackingContext = __non_webpack_require__( + resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupTrackingContext') + ).default + assert.strictEqual(typeof setupTrackingContext, 'function') + return (state) => + setupTrackingContext( + state.configPath, + tailwindDirectives, + registerDependency + )(result, root) + }, + () => { + let setupContext = __non_webpack_require__( + resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContext') + ).default + assert.strictEqual(typeof setupContext, 'function') + return (state) => setupContext(state.configPath, tailwindDirectives)(result, root) + } + ) jitModules = { generateRules: {