Home / File/ minifiable-css-renderer.ts — astro Source File

minifiable-css-renderer.ts — astro Source File

Architecture documentation for minifiable-css-renderer.ts, a typescript file in the astro codebase. 2 imports, 0 dependents.

File typescript CoreAstro RenderingEngine 2 imports 4 functions 1 classes

Entity Profile

Dependency Diagram

graph LR
  4df2df7e_7b50_0a76_f17c_a22a7c396706["minifiable-css-renderer.ts"]
  e92fda44_4a5d_b83b_1a45_958cdae6c91b["./definitions.js"]
  4df2df7e_7b50_0a76_f17c_a22a7c396706 --> e92fda44_4a5d_b83b_1a45_958cdae6c91b
  ea387312_d0a2_bb52_dafc_3872f7307f95["../../src/assets/fonts/types.js"]
  4df2df7e_7b50_0a76_f17c_a22a7c396706 --> ea387312_d0a2_bb52_dafc_3872f7307f95
  style 4df2df7e_7b50_0a76_f17c_a22a7c396706 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { CssRenderer } from '../definitions.js';
import type { CssProperties } from '../types.js';

// TODO: consider making these public methods

export function renderFontFace(properties: CssProperties, minify: boolean): string {
	// Line feed
	const lf = minify ? '' : `\n`;
	// Space
	const sp = minify ? '' : ' ';

	return `@font-face${sp}{${lf}${Object.entries(properties)
		.filter(([, value]) => Boolean(value))
		.map(([key, value]) => `${sp}${sp}${key}:${sp}${value};`)
		.join(lf)}${lf}}${lf}`;
}

export function renderCssVariable(key: string, values: Array<string>, minify: boolean): string {
	// Line feed
	const lf = minify ? '' : `\n`;
	// Space
	const sp = minify ? '' : ' ';

	return `:root${sp}{${lf}${sp}${sp}${key}:${sp}${values.map((v) => handleValueWithSpaces(v)).join(`,${sp}`)};${lf}}${lf}`;
}

export function withFamily(family: string, properties: CssProperties): CssProperties {
	return {
		'font-family': handleValueWithSpaces(family),
		...properties,
	};
}

const SPACE_RE = /\s/;

/** If the value contains spaces (which would be incorrectly interpreted), we wrap it in quotes. */
export function handleValueWithSpaces(value: string): string {
	if (SPACE_RE.test(value)) {
		return JSON.stringify(value);
	}
	return value;
}

export class MinifiableCssRenderer implements CssRenderer {
	readonly #minify: boolean;

	constructor({ minify }: { minify: boolean }) {
		this.#minify = minify;
	}

	generateFontFace(family: string, properties: CssProperties): string {
		return renderFontFace(withFamily(family, properties), this.#minify);
	}

	generateCssVariable(key: string, values: Array<string>): string {
		return renderCssVariable(key, values, this.#minify);
	}
}

Domain

Subdomains

Dependencies

  • ../../src/assets/fonts/types.js
  • ./definitions.js

Frequently Asked Questions

What does minifiable-css-renderer.ts do?
minifiable-css-renderer.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What functions are defined in minifiable-css-renderer.ts?
minifiable-css-renderer.ts defines 4 function(s): handleValueWithSpaces, renderCssVariable, renderFontFace, withFamily.
What does minifiable-css-renderer.ts depend on?
minifiable-css-renderer.ts imports 2 module(s): ../../src/assets/fonts/types.js, ./definitions.js.
Where is minifiable-css-renderer.ts in the architecture?
minifiable-css-renderer.ts is located at packages/astro/src/assets/fonts/infra/minifiable-css-renderer.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/assets/fonts/infra).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free