UNPKG

@localnerve/sass-asset-functions

Version:

compass-style asset functions for dart-sass or other sass compilers

115 lines (114 loc) 3.87 kB
/** * Custom Functions for asynchronous, sass modern JS API (compileAsync). * * Copyright (c) 2023-2025 Alex Grant (@localnerve), LocalNerve LLC * Licensed under the MIT license. */ import { convertToSassTypesModern } from "./types.js"; export default function modernAPIAsync (sass, processor) { return { 'image-url($filename, $only_path: false)': args => { return new Promise((resolve, reject) => { try { const filename = args[0].assertString('filename').text; const only_path = args[1].assertBoolean('only_path').isTruthy; processor.image_url(filename, url => { if (!only_path) url = `url('${url}')`; resolve(new sass.SassString(url, { quotes: false })); }); } catch (err) { reject(err); } }); }, 'inline-image($filename, $mime_type: null)': args => { return new Promise((resolve, reject) => { try { const filename = args[0].assertString('filename').text; const mime_type = args[1].realNull === null ? null : args[1].assertString('mime_type').text; processor.inline_image(filename, mime_type, dataUrl => { resolve(new sass.SassString(`url('${dataUrl}')`, { quotes: false })); }); } catch (err) { reject(err); } }); }, 'image-width($filename)': args => { return new Promise((resolve, reject) => { try { const filename = args[0].assertString('filename').text; processor.image_width(filename, image_width => { resolve(new sass.SassNumber(image_width, 'px')); }); } catch (err) { reject(err); } }); }, 'image-height($filename)': args => { return new Promise((resolve, reject) => { try { const filename = args[0].assertString('filename').text; processor.image_height(filename, image_height => { resolve(new sass.SassNumber(image_height, 'px')); }); } catch (err) { reject(err); } }); }, 'font-url($filename, $only-path: false)': args => { return new Promise((resolve, reject) => { try { const filename = args[0].assertString('filename').text; const only_path = args[1].assertBoolean('only_path').isTruthy; processor.font_url(filename, url => { if (!only_path) url = `url('${url}')`; resolve(new sass.SassString(url, { quotes: false })); }); } catch (err) { reject(err); } }); }, 'font-files($filenames...)': args => { return new Promise((resolve, reject) => { try { const input = args[0].asList; const filenames = []; const result = []; for(let i = 0; i < input.size; ++i) { filenames[i] = input.get(i).assertString().text; } processor.font_files(filenames, files => { for (let i = 0; i < files.length; ++i) { result[i] = new sass.SassString(`url('${files[i].url}') format('${files[i].type}')`, { quotes: false }); } resolve(new sass.SassList(result)); }); } catch (err) { reject(err); } }); }, 'lookup($keys...)': args => { return new Promise((resolve, reject) => { try { const input = args[0].asList; const keys = []; for (let i = 0; i < input.size; ++i) { keys[i] = input.get(i).assertString().text; } let result = sass.sassNull; processor.lookup(keys, value => { result = convertToSassTypesModern(sass, value); resolve(result); }); } catch (err) { reject(err); } }); } }; }