Skip to content

Commit

Permalink
Merge branch 'argyleink:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian-Pob authored Feb 29, 2024
2 parents 53e8631 + 40d08de commit 4e4dfd3
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 7 deletions.
92 changes: 92 additions & 0 deletions build/bundle-sizes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import path from 'node:path';
import postcss from 'postcss';
import fs from 'node:fs/promises';
import pkg from '../postcss.config.cjs';
import { createRequire } from 'node:module';
import { sync as brotli } from 'brotli-size';
import { gzipSizeSync as gzip } from 'gzip-size';

// Comes in handy later when we run postcss
const { plugins } = pkg;

// @ts-ignore
const require = createRequire(import.meta.url);
const { scripts } = require('../package.json');
/**
* We build up an object with script:command pairs from package.json
*
* @type {Object.<string, string>}
*/
const filtered = Object.keys(scripts)
.filter((key) => key.startsWith('lib:'))
.reduce((obj, key) => {
obj[key] = scripts[key];
return obj;
}, {});

/**
* The regex captures a filepath and filename group from an npm command.
*
* Captures for the command `postcss src/extra/normalize.light.css -o normalize.light.min.css` yields
* {
* groups: {
* filepath: 'src/extra/normalize.light.css',
* filename: 'normalize.light.min.css'
* }
* }
*/
const regex = /postcss\s(?<filepath>\S+)\s\-[o]\s(?<filename>.*\.css)(?:.*$)/;

/**
* @typedef {Object} Size
* @propety {number} raw - Unminified size in bytes
* @property {string} size - Unminified size in KiB
* @property {string} minified - Minified size in KiB
* @property {string} brotli - Brotli compressed minified size in KiB
* @property {string} gzip - Gzip compressed minified size in KiB
*/
/** @type {Object.<string, Size>} sizes */
let sizes = {}

for (const [_, script] of Object.entries(filtered)) {
const found = script.match(regex);

if (!found) continue;

/**
* @typedef {object} CaptureGroup
* @property {string} filepath
* @property {string} filename
*/
/** @type {CaptureGroup} */
const { filepath, filename } = found.groups;

/**
* @type {import('postcss').ProcessOptions}
*/
const options = { from: path.resolve(`../${filepath}`), to: undefined };
const css = await fs.readFile(path.resolve(`../${filepath}`), 'utf-8');
/**
* Run the css through PostCSS (just like Open-Props).
* plugins.slice(0, -1) remove `cssnano` plugin so we can get the size of the unminified code
*/
const code = await postcss(plugins.slice(0, -1)).process(css, options);
/**
* This time we want to get the minified size.
*/
const minified = await postcss(plugins).process(css, options);

/**
* Build the sizes object.
* Strip `.min` from the filename
*/
sizes[filename.replace('.min', '')] = {
raw: code.css.length, // in bytes
size: (code.css.length / 1024).toFixed(2), // in KiB
minified: (minified.css.length / 1024).toFixed(2), // KiB
brotli: (brotli(minified.css) / 1024).toFixed(2), // in KiB
gzip: (gzip(minified.css) / 1024).toFixed(2), // in KiB
}
}

await fs.writeFile('bundle-sizes.json', JSON.stringify(sizes, null, 2), { encoding: 'utf8' });
6 changes: 3 additions & 3 deletions docsite/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
<meta charset="utf-8">

<title>Open Props: sub-atomic styles</title>
<meta name="og:title" content="Open Props: sub-atomic styles">
<meta property="og:title" content="Open Props: sub-atomic styles">
<meta name="twitter:title" content="Open Props: sub-atomic styles">

<meta name="description" content="Open source CSS custom properties to help accelerate adaptive and consistent design. Available from a CDN or NPM, as CSS or Javascript.">
<meta name="og:description" content="Open source CSS custom properties to help accelerate adaptive and consistent design. Available from a CDN or NPM, as CSS or Javascript.">
<meta property="og:description" content="Open source CSS custom properties to help accelerate adaptive and consistent design. Available from a CDN or NPM, as CSS or Javascript.">
<meta name="twitter:description" content="Open source CSS custom properties to help accelerate adaptive and consistent design. Available from a CDN or NPM, as CSS or Javascript.">

<meta name="viewport" content="width=device-width, initial-scale=1">
Expand Down Expand Up @@ -119,7 +119,7 @@ <h1><span>CSS</span> <span>variables.</span></h1>
</li>
</ul>
<small>
v1.6.19
v1.6.20
<span class="license">
<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16">
<path fill-rule="evenodd" d="M8.75.75a.75.75 0 00-1.5 0V2h-.984c-.305 0-.604.08-.869.23l-1.288.737A.25.25 0 013.984 3H1.75a.75.75 0 000 1.5h.428L.066 9.192a.75.75 0 00.154.838l.53-.53-.53.53v.001l.002.002.002.002.006.006.016.015.045.04a3.514 3.514 0 00.686.45A4.492 4.492 0 003 11c.88 0 1.556-.22 2.023-.454a3.515 3.515 0 00.686-.45l.045-.04.016-.015.006-.006.002-.002.001-.002L5.25 9.5l.53.53a.75.75 0 00.154-.838L3.822 4.5h.162c.305 0 .604-.08.869-.23l1.289-.737a.25.25 0 01.124-.033h.984V13h-2.5a.75.75 0 000 1.5h6.5a.75.75 0 000-1.5h-2.5V3.5h.984a.25.25 0 01.124.033l1.29.736c.264.152.563.231.868.231h.162l-2.112 4.692a.75.75 0 00.154.838l.53-.53-.53.53v.001l.002.002.002.002.006.006.016.015.045.04a3.517 3.517 0 00.686.45A4.492 4.492 0 0013 11c.88 0 1.556-.22 2.023-.454a3.512 3.512 0 00.686-.45l.045-.04.01-.01.006-.005.006-.006.002-.002.001-.002-.529-.531.53.53a.75.75 0 00.154-.838L13.823 4.5h.427a.75.75 0 000-1.5h-2.234a.25.25 0 01-.124-.033l-1.29-.736A1.75 1.75 0 009.735 2H8.75V.75zM1.695 9.227c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327l-1.305 2.9zm10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327l-1.305 2.9z"></path>
Expand Down
77 changes: 75 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "open-props",
"author": "Adam Argyle",
"license": "MIT",
"version": "1.6.19",
"version": "1.6.20",
"repository": {
"type": "git",
"url": "https://github.com/argyleink/open-props"
Expand Down Expand Up @@ -186,6 +186,7 @@
"build": "concurrently npm:gen:op npm:gen:shadowdom && npm run gen:types",
"test": "ava test/basic.test.cjs",
"bundle": "concurrently npm:lib:* -m 25 && concurrently npm:shadow:* -m 25",
"bundle:sizes": "cd build && node bundle-sizes.js",
"gen:op": "cd build && node props.js \"\" true",
"gen:nowhere": "cd build && node props \"\" false",
"gen:shadowdom": "cd build && node props \"\" false \":host\" \"shadow\"",
Expand Down Expand Up @@ -313,9 +314,11 @@
},
"devDependencies": {
"ava": "^3.15.0",
"brotli-size": "^4.0.0",
"colorjs.io": "^0.4.1-patch.1",
"concurrently": "^7.2.2",
"cssnano": "^5.1.10",
"gzip-size": "^7.0.0",
"json": "^11.0.0",
"open-color": "^1.9.1",
"postcss": "^8.3.9",
Expand Down
3 changes: 2 additions & 1 deletion src/extra/durations.css
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
--month: calc( 30 * var(--day));
--quarter: calc( 13 * var(--week));
--year: calc(365 * var(--day));
--leap-year: calc( 4 * var(--year));
--leap-year: calc(366 * var(--day));
--olympiad: calc( 4 * var(--year));
--decade: calc( 10 * var(--year));
--generation: calc( 3 * var(--decade));
--lifetime: calc( 8 * var(--decade));
Expand Down

0 comments on commit 4e4dfd3

Please sign in to comment.