Skip to content
Snippets Groups Projects

Replace ruby-sass with dart-sass (node)

Merged Muhammed Ali requested to merge gitlab-community/gitlab:replace-sass into master
2 unresolved threads
1 file
+ 42
17
Compare changes
  • Side-by-side
  • Inline
+ 42
17
@@ -56,6 +56,7 @@ const defaultOptions = {
loadPaths: SASS_LOAD_PATHS,
}
// Source => Destination
let inputFiles = new Map([
['app/assets/stylesheets/application.scss', 'app/assets/builds/application.css'],
['app/assets/stylesheets/application_dark.scss', 'app/assets/builds/application_dark.css'],
@@ -106,33 +107,57 @@ function writeContentToFile(content, src, dest) {
writeFileSync(outputFile, content.css);
}
function resolveSources(source) {
function resolveSources(base, source, dest) {
console.log("Resolving source", source);
const fullPath = path.resolve(ROOT_PATH.pathname, source)
const destPath = path.resolve(base, dest)
const fullPath = path.resolve(base, source);
// If single scss file, then return single object
if (statSync(fullPath).isFile() && path.extname(source) == '.scss') {
console.log("Source is a file, Dest is: ", dest, fullPath)
return [{source: source, dest: destPath}]
}
const paths = new Set();
if (statSync(fullPath).isDirectory()) {
readdirSync(fullPath).forEach((relativePath) => {
const file = path.resolve(fullPath, relativePath)
console.log(file, relativePath);
if (statSync(file).isFile() && !relativePath.startsWith('_')) {
// relativePath is the filename of the file in the directory
paths.add({ fullPath: file, relativePath: relativePath })
// Filter out any scss files that start with _
// Only keep files and directories
readdirSync(fullPath).filter((f) => statSync(path.resolve(fullPath, f)).isDirectory() || (f.endsWith('.scss') && !f.startsWith('_')) ).forEach((relativeFile) => {
// Full Path to each immediate item in this directory
let file = path.resolve(fullPath, relativeFile);
console.log('resolved file: ', file)
// Return early, don't resolve this directory as a destination
if (statSync(file).isDirectory()) {
console.log("Recursing into subdir", file);
let newSource = path.relative(fullPath, file)
let newDest = path.resolve(destPath, newSource)
console.log(fullPath, newSource, newDest)
// Add each resolved source to paths
resolveSources(fullPath, newSource, newDest).forEach((x) => paths.add(x))
} else {
// Expect files here
const destFileName = relativeFile.replace(/\.[^.]+$/, '.css');
// Assuming dest is a directory
paths.add({source: file, dest: path.resolve(base, dest, destFileName)})
console.log('resolved destination file: ', path.resolve(base, dest, destFileName))
}
});
return paths
})
}
// relativePath is unused here, as single files have an explicit destination
paths.add({ fullPath: fullPath })
return paths
return [...paths]
}
inputFiles.forEach((dest, source, _) => {
console.log("processing source", source);
const sources = resolveSources(source);
const sources = resolveSources(ROOT_PATH.pathname, source, dest);
console.log(`${source} resolved to:`, sources)
sources.forEach((src) => {
const content = compile(src.fullPath, defaultOptions)
writeContentToFile(content, src, dest)
sources.forEach(({ source, dest }) => {
console.log(`compiling source ${source} to ${dest}`)
const content = compile(source, defaultOptions)
writeContentToFile(content, source, dest)
});
console.log("processed source", source);
});
Loading