fix for canary releases

master
Brad Cornes 2021-06-04 15:07:32 +01:00
parent 52ae09b4fa
commit cf7bb68e35
1 changed files with 44 additions and 15 deletions

View File

@ -69,6 +69,7 @@ import { getDocumentColors } from 'tailwindcss-language-service/src/documentColo
import { fromRatio, names as namedColors } from '@ctrl/tinycolor' import { fromRatio, names as namedColors } from '@ctrl/tinycolor'
import { debounce } from 'debounce' import { debounce } from 'debounce'
import { getModuleDependencies } from './util/getModuleDependencies' import { getModuleDependencies } from './util/getModuleDependencies'
import assert from 'assert'
// import postcssLoadConfig from 'postcss-load-config' // import postcssLoadConfig from 'postcss-load-config'
const CONFIG_FILE_GLOB = '{tailwind,tailwind.config}.{js,cjs}' const CONFIG_FILE_GLOB = '{tailwind,tailwind.config}.{js,cjs}'
@ -132,6 +133,19 @@ function getConfigId(configPath: string, configDependencies: string[]): string {
) )
} }
function first<T>(...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 { interface ProjectService {
state: State state: State
tryInit: () => Promise<void> tryInit: () => Promise<void>
@ -442,23 +456,38 @@ async function createProjectService(
let tailwindDirectives = new Set() let tailwindDirectives = new Set()
let root = postcss.root() let root = postcss.root()
let result = { opts: {}, messages: [] } let result = { opts: {}, messages: [] }
let registerDependency = () => {}
try { try {
let createContext let createContext = first(
() => {
try { let createContextFn = __non_webpack_require__(
let createContextFn = __non_webpack_require__( resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContextUtils')
resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContextUtils') ).createContext
).createContext assert.strictEqual(typeof createContextFn, 'function')
createContext = (state) => createContextFn(state.config) return (state) => createContextFn(state.config)
} catch (_) { },
// TODO: only for canary releases so can probably remove // TODO: the next two are canary releases only so can probably be removed
let setupContext = __non_webpack_require__( () => {
resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContext') let setupTrackingContext = __non_webpack_require__(
).default resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupTrackingContext')
createContext = (state) => ).default
setupContext(state.configPath, tailwindDirectives)(result, root) 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 = { jitModules = {
generateRules: { generateRules: {