mirror of
https://github.com/atom/atom.git
synced 2026-04-06 03:02:13 -04:00
Provide importedFilePathsByRelativeImportPath to LessCache
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
'use strict'
|
||||
|
||||
const fs = require('fs')
|
||||
const klawSync = require('klaw-sync')
|
||||
const glob = require('glob')
|
||||
const path = require('path')
|
||||
const LessCache = require('less-cache')
|
||||
@@ -29,13 +30,17 @@ module.exports = function () {
|
||||
}
|
||||
|
||||
CONFIG.snapshotAuxiliaryData.lessSourcesByRelativeFilePath = {}
|
||||
function saveIntoSnapshotAuxiliaryData (absoluteFilePath, contents) {
|
||||
function saveIntoSnapshotAuxiliaryData (absoluteFilePath, content) {
|
||||
const relativeFilePath = path.relative(CONFIG.intermediateAppPath, absoluteFilePath)
|
||||
if (!CONFIG.snapshotAuxiliaryData.lessSourcesByRelativeFilePath.hasOwnProperty(relativeFilePath)) {
|
||||
CONFIG.snapshotAuxiliaryData.lessSourcesByRelativeFilePath[relativeFilePath] = contents
|
||||
CONFIG.snapshotAuxiliaryData.lessSourcesByRelativeFilePath[relativeFilePath] = {
|
||||
content: content,
|
||||
digest: LessCache.digestForContent(content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CONFIG.snapshotAuxiliaryData.importedFilePathsByRelativeImportPath = {}
|
||||
// Warm cache for every combination of the default UI and syntax themes,
|
||||
// because themes assign variables which may be used in any style sheet.
|
||||
for (let uiTheme of uiThemes) {
|
||||
@@ -54,6 +59,19 @@ module.exports = function () {
|
||||
]
|
||||
})
|
||||
|
||||
// Store file paths located at the import paths so that we can avoid scanning them at runtime.
|
||||
for (const absoluteImportPath of lessCache.getImportPaths()) {
|
||||
const relativeImportPath = path.relative(CONFIG.intermediateAppPath, absoluteImportPath)
|
||||
if (!CONFIG.snapshotAuxiliaryData.importedFilePathsByRelativeImportPath.hasOwnProperty(relativeImportPath)) {
|
||||
CONFIG.snapshotAuxiliaryData.importedFilePathsByRelativeImportPath[relativeImportPath] = []
|
||||
for (const importedFile of klawSync(absoluteImportPath, {nodir: true})) {
|
||||
CONFIG.snapshotAuxiliaryData.importedFilePathsByRelativeImportPath[relativeImportPath].push(
|
||||
path.relative(CONFIG.intermediateAppPath, importedFile.path)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function cacheCompiledCSS(lessFilePath, importFallbackVariables) {
|
||||
let lessSource = fs.readFileSync(lessFilePath, 'utf8')
|
||||
if (importFallbackVariables) {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"fs-extra": "0.30.0",
|
||||
"glob": "7.0.3",
|
||||
"joanna": "0.0.8",
|
||||
"klaw-sync": "^1.1.2",
|
||||
"legal-eagle": "0.14.0",
|
||||
"lodash.template": "4.4.0",
|
||||
"minidump": "0.9.0",
|
||||
|
||||
@@ -6,7 +6,7 @@ module.exports =
|
||||
class LessCompileCache
|
||||
@cacheDir: path.join(process.env.ATOM_HOME, 'compile-cache', 'less')
|
||||
|
||||
constructor: ({resourcePath, importPaths, lessSourcesByRelativeFilePath}) ->
|
||||
constructor: ({resourcePath, importPaths, lessSourcesByRelativeFilePath, importedFilePathsByRelativeImportPath}) ->
|
||||
@lessSearchPaths = [
|
||||
path.join(resourcePath, 'static', 'variables')
|
||||
path.join(resourcePath, 'static')
|
||||
@@ -17,12 +17,14 @@ class LessCompileCache
|
||||
else
|
||||
importPaths = @lessSearchPaths
|
||||
|
||||
@cache = new LessCache
|
||||
cacheDir: @constructor.cacheDir
|
||||
importPaths: importPaths
|
||||
resourcePath: resourcePath
|
||||
lessSourcesByRelativeFilePath: lessSourcesByRelativeFilePath
|
||||
@cache = new LessCache({
|
||||
importPaths,
|
||||
resourcePath,
|
||||
lessSourcesByRelativeFilePath,
|
||||
importedFilePathsByRelativeImportPath,
|
||||
cacheDir: @constructor.cacheDir,
|
||||
fallbackDir: path.join(resourcePath, 'less-compile-cache')
|
||||
})
|
||||
|
||||
setImportPaths: (importPaths=[]) ->
|
||||
@cache.setImportPaths(importPaths.concat(@lessSearchPaths))
|
||||
@@ -30,5 +32,5 @@ class LessCompileCache
|
||||
read: (stylesheetPath) ->
|
||||
@cache.readFileSync(stylesheetPath)
|
||||
|
||||
cssForFile: (stylesheetPath, lessContent) ->
|
||||
@cache.cssForFile(stylesheetPath, lessContent)
|
||||
cssForFile: (stylesheetPath, lessContent, digest) ->
|
||||
@cache.cssForFile(stylesheetPath, lessContent, digest)
|
||||
|
||||
@@ -21,8 +21,10 @@ class ThemeManager
|
||||
@lessSourcesByRelativeFilePath = null
|
||||
if typeof snapshotAuxiliaryData is 'undefined'
|
||||
@lessSourcesByRelativeFilePath = {}
|
||||
@importedFilePathsByRelativeImportPath = {}
|
||||
else
|
||||
@lessSourcesByRelativeFilePath = snapshotAuxiliaryData.lessSourcesByRelativeFilePath
|
||||
@importedFilePathsByRelativeImportPath = snapshotAuxiliaryData.importedFilePathsByRelativeImportPath
|
||||
|
||||
initialize: ({@resourcePath, @configDirPath, @safeMode}) ->
|
||||
|
||||
@@ -202,7 +204,12 @@ class ThemeManager
|
||||
loadLessStylesheet: (lessStylesheetPath, importFallbackVariables=false) ->
|
||||
unless @lessCache?
|
||||
LessCompileCache = require './less-compile-cache'
|
||||
@lessCache = new LessCompileCache({@resourcePath, @lessSourcesByRelativeFilePath, importPaths: @getImportPaths()})
|
||||
@lessCache = new LessCompileCache({
|
||||
@resourcePath,
|
||||
@lessSourcesByRelativeFilePath,
|
||||
@importedFilePathsByRelativeImportPath,
|
||||
importPaths: @getImportPaths()
|
||||
})
|
||||
|
||||
try
|
||||
if importFallbackVariables
|
||||
@@ -211,8 +218,15 @@ class ThemeManager
|
||||
@import "variables/syntax-variables";
|
||||
"""
|
||||
relativeFilePath = path.relative(@resourcePath, lessStylesheetPath)
|
||||
less = @lessSourcesByRelativeFilePath[relativeFilePath] ? fs.readFileSync(lessStylesheetPath, 'utf8')
|
||||
@lessCache.cssForFile(lessStylesheetPath, [baseVarImports, less].join('\n'))
|
||||
lessSource = @lessSourcesByRelativeFilePath[relativeFilePath]
|
||||
if lessSource?
|
||||
content = lessSource.content
|
||||
digest = lessSource.digest
|
||||
else
|
||||
content = baseVarImports + '\n' + fs.readFileSync(lessStylesheetPath, 'utf8')
|
||||
digest = null
|
||||
|
||||
@lessCache.cssForFile(lessStylesheetPath, content, digest)
|
||||
else
|
||||
@lessCache.read(lessStylesheetPath)
|
||||
catch error
|
||||
|
||||
Reference in New Issue
Block a user