Skip to content

Commit

Permalink
Generate space accessors in build step
Browse files Browse the repository at this point in the history
  • Loading branch information
jgerigmeyer committed Jan 31, 2024
1 parent 07d8512 commit 80233dc
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 101 deletions.
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,14 @@
"test": "npx htest ./test",
"dtslint": "dtslint --expectOnly types",
"eslint": "eslint . --ext .js --ext .ts --ext .cjs",
"lint": "run-s build:coord-accessors \"eslint -- --fix\" dtslint",
"lint:ci": "run-s build:coord-accessors \"eslint -- --max-warnings 0\" dtslint",
"lint": "run-s build:space-accessors \"eslint -- --fix\" dtslint",
"lint:ci": "run-s build:space-accessors \"eslint -- --max-warnings 0\" dtslint",
"build:css": "npx postcss \"**/*.postcss\" --base . --dir . --ext .css --config postcss.config.cjs",
"build:html": "npx @11ty/eleventy --config=.eleventy.cjs",
"build:js": "rollup -c",
"build:js:legacy": "rollup -c rollup.legacy.config.js",
"build:coord-accessors": "node ./scripts/generate-coord-accessors.js",
"build": "run-s build:html build:css build:js build:js:legacy build:coord-accessors",
"build:space-accessors": "node ./scripts/generate-space-accessor-types.js",
"build": "run-s build:html build:css build:js build:js:legacy build:space-accessors",
"watch:css": "npx postcss \"**/*.postcss\" --base . --dir . --ext .css --config postcss.config.cjs --watch",
"watch:html": "npx @11ty/eleventy --config=.eleventy.cjs --watch",
"watch:js": "rollup -c --watch",
Expand Down
31 changes: 0 additions & 31 deletions scripts/generate-coord-accessors.js

This file was deleted.

45 changes: 45 additions & 0 deletions scripts/generate-space-accessor-types.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";

import * as spaces from "../src/spaces/index-fn.js";

const coords = new Set();
const spaceIds = new Set();
for (const spaceModule in spaces) {
const space = spaces[spaceModule];
spaceIds.add(space.id.replace(/-/g, "_"));
for (const alias of (space.aliases || [])) {
spaceIds.add(alias.replace(/-/g, "_"));
}
for (const coord in space.coords) {
coords.add(coord);
}
}

let template = `// DO NOT EDIT. This file is generated with \`npm run build:space-accessors\`.
/** Proxy used for space accessors */
export type SpaceAccessor = Record<string, number> & number[];
declare class SpaceAccessors {`;
for (const spaceId of Array.from(spaceIds).sort()) {
template += `\n\t${spaceId}: SpaceAccessor;`;
}
for (const coord of Array.from(coords).sort()) {
template += `\n\t${coord}: number;`;
}
template += `
}
export default SpaceAccessors;
`;

try {
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const filePath = path.resolve(__dirname, "../types/src/space-coord-accessors.d.ts");
fs.writeFileSync(filePath, template);
}
catch (err) {
console.error(err);
}
42 changes: 4 additions & 38 deletions types/src/color.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import defaults from "./defaults.js";
import hooks from "./hooks.js";
import * as util from "./util.js";
import ColorSpace from "./space.js";
import CoordAccessors from "./coord-accessors.js";
import SpaceAccessors from "./space-coord-accessors.js";

import {
to,
Expand All @@ -20,6 +20,8 @@ import {
display,
} from "./index-fn.js";

export type { SpaceAccessor } from "./space-coord-accessors.js";

export type Coords = [number, number, number];

export interface ColorObject {
Expand Down Expand Up @@ -67,9 +69,6 @@ export type ToColorPrototype<T extends (...args: any[]) => any> = T extends (
: (...args: A) => R
: never;

/** Proxy used for space accessors */
export type SpaceAccessor = Record<string, number> & number[];

declare namespace Color {
export {
getAll,
Expand All @@ -86,7 +85,7 @@ declare namespace Color {
export const spaces: typeof ColorSpace["registry"];
}

declare class Color extends CoordAccessors implements PlainColorObject {
declare class Color extends SpaceAccessors implements PlainColorObject {
constructor (color: ColorTypes);
constructor (space: string | ColorSpace, coords: Coords, alpha?: number);

Expand Down Expand Up @@ -139,39 +138,6 @@ declare class Color extends CoordAccessors implements PlainColorObject {
toGamut: ToColorPrototype<typeof toGamut>;
distance: ToColorPrototype<typeof distance>;
toString: ToColorPrototype<typeof serialize>;

// Space accessors
// A property should technically be added every time a new ColorSpace is initialized,
// but I don't know that there's any good way to do that with TypeScript
a98rgb: SpaceAccessor;
a98rgb_linear: SpaceAccessor;
acescc: SpaceAccessor;
acescg: SpaceAccessor;
hsl: SpaceAccessor;
hsv: SpaceAccessor;
hwb: SpaceAccessor;
ictcp: SpaceAccessor;
jzazbz: SpaceAccessor;
jzczhz: SpaceAccessor;
lab: SpaceAccessor;
lab_d65: SpaceAccessor;
lch: SpaceAccessor;
oklab: SpaceAccessor;
oklch: SpaceAccessor;
p3: SpaceAccessor;
p3_linear: SpaceAccessor;
prophoto: SpaceAccessor;
prophoto_linear: SpaceAccessor;
rec2020: SpaceAccessor;
rec2020_linear: SpaceAccessor;
rec2100hlg: SpaceAccessor;
rec2100pq: SpaceAccessor;
srgb: SpaceAccessor;
srgb_linear: SpaceAccessor;
xyz: SpaceAccessor;
xyz_abs_d65: SpaceAccessor;
xyz_d50: SpaceAccessor;
xyz_d65: SpaceAccessor;
}

export default Color;
28 changes: 0 additions & 28 deletions types/src/coord-accessors.d.ts

This file was deleted.

64 changes: 64 additions & 0 deletions types/src/space-coord-accessors.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// DO NOT EDIT. This file is generated with `npm run build:space-accessors`.

/** Proxy used for space accessors */
export type SpaceAccessor = Record<string, number> & number[];

declare class SpaceAccessors {
a98rgb: SpaceAccessor;
a98rgb_linear: SpaceAccessor;
acescc: SpaceAccessor;
acescg: SpaceAccessor;
cam16_jmh: SpaceAccessor;
hct: SpaceAccessor;
hsl: SpaceAccessor;
hsv: SpaceAccessor;
hwb: SpaceAccessor;
ictcp: SpaceAccessor;
jzazbz: SpaceAccessor;
jzczhz: SpaceAccessor;
lab: SpaceAccessor;
lab_d65: SpaceAccessor;
lch: SpaceAccessor;
oklab: SpaceAccessor;
oklch: SpaceAccessor;
p3: SpaceAccessor;
p3_linear: SpaceAccessor;
prophoto: SpaceAccessor;
prophoto_linear: SpaceAccessor;
rec2020: SpaceAccessor;
rec2020_linear: SpaceAccessor;
rec2100hlg: SpaceAccessor;
rec2100pq: SpaceAccessor;
srgb: SpaceAccessor;
srgb_linear: SpaceAccessor;
xyz: SpaceAccessor;
xyz_abs_d65: SpaceAccessor;
xyz_d50: SpaceAccessor;
xyz_d65: SpaceAccessor;
a: number;
az: number;
b: number;
bz: number;
c: number;
cp: number;
ct: number;
cz: number;
g: number;
h: number;
hz: number;
i: number;
j: number;
jz: number;
l: number;
m: number;
r: number;
s: number;
t: number;
v: number;
w: number;
x: number;
y: number;
z: number;
}

export default SpaceAccessors;

0 comments on commit 80233dc

Please sign in to comment.