Skip to content

Commit 24fe4bf

Browse files
authored
refactor: rework and type stylesheet package (#3082)
1 parent 700535c commit 24fe4bf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+3606
-2746
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@react-pdf/stylesheet": major
3+
"@react-pdf/types": minor
4+
"@react-pdf/layout": patch
5+
"@react-pdf/fns": patch
6+
---
7+
8+
feat: rework and type stylesheet package

β€Žpackages/fns/src/compose.tsβ€Ž

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
import reverse from './reverse';
1+
type Fn = (arg: any, ...args: any[]) => any;
2+
3+
type FirstFnParameterType<T extends Fn[]> = T extends [
4+
...any,
5+
(arg: infer A, ...args: any[]) => any,
6+
]
7+
? A
8+
: never;
9+
10+
type LastFnReturnType<T extends Fn[]> = T extends [
11+
(arg: any, ...args: any[]) => infer R,
12+
...any,
13+
]
14+
? R
15+
: never;
216

317
/**
418
* Performs right-to-left function composition
@@ -7,17 +21,18 @@ import reverse from './reverse';
721
* @returns Composed function
822
*/
923
const compose =
10-
(...fns: any[]) =>
11-
(value: any, ...args: any[]) => {
12-
let result = value;
13-
const reversedFns = reverse(fns);
24+
<T extends Fn[]>(...fns: T) =>
25+
(value: FirstFnParameterType<T>, ...args: any[]): LastFnReturnType<T> => {
26+
let result: unknown = value;
27+
28+
const reversedFns = fns.slice().reverse();
1429

1530
for (let i = 0; i < reversedFns.length; i += 1) {
1631
const fn = reversedFns[i];
1732
result = fn(result, ...args);
1833
}
1934

20-
return result;
35+
return result as LastFnReturnType<T>;
2136
};
2237

2338
export default compose;

β€Žpackages/layout/src/steps/resolveSvg.jsβ€Ž

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as P from '@react-pdf/primitives';
2-
import { transformColor, processTransform } from '@react-pdf/stylesheet';
2+
import resolveStyle, { transformColor } from '@react-pdf/stylesheet';
33
import { pick, evolve, compose, mapValues, matchPercent } from '@react-pdf/fns';
44

55
import layoutText from '../svg/layoutText';
@@ -59,6 +59,10 @@ const parsePercent = (value) => {
5959
return match ? match.percent : parseFloat(value);
6060
};
6161

62+
const parseTransform = (container) => (value) => {
63+
return resolveStyle(container, { transform: value }).transform;
64+
};
65+
6266
const parseProps = (container) => (node) => {
6367
let props = transformPercent(container)(node.props);
6468

@@ -83,7 +87,7 @@ const parseProps = (container) => (node) => {
8387
stroke: transformColor,
8488
stopOpacity: parsePercent,
8589
stopColor: transformColor,
86-
transform: processTransform,
90+
transform: parseTransform(container),
8791
},
8892
props,
8993
);

β€Žpackages/stylesheet/babel.config.jsβ€Ž

Lines changed: 0 additions & 1 deletion
This file was deleted.

β€Žpackages/stylesheet/package.jsonβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"homepage": "https://github.com/diegomura/react-pdf#readme",
88
"type": "module",
99
"main": "./lib/index.js",
10+
"types": "./lib/index.d.ts",
1011
"repository": {
1112
"type": "git",
1213
"url": "https://github.com/diegomura/react-pdf.git",
@@ -18,7 +19,6 @@
1819
"watch": "rimraf ./lib && rollup -c -w"
1920
},
2021
"dependencies": {
21-
"@babel/runtime": "^7.20.13",
2222
"@react-pdf/fns": "3.1.0",
2323
"@react-pdf/types": "^2.7.1",
2424
"color-string": "^1.9.1",
Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
1+
import { dts } from 'rollup-plugin-dts';
2+
import del from 'rollup-plugin-delete';
3+
import typescript from '@rollup/plugin-typescript';
14
import localResolve from 'rollup-plugin-local-resolve';
2-
import babel from '@rollup/plugin-babel';
35

46
import pkg from './package.json' with { type: 'json' };
57

6-
const input = 'src/index.js';
7-
8-
const getExternal = () => [
9-
...Object.keys(pkg.dependencies),
10-
/@babel\/runtime/,
11-
/@react-pdf/,
12-
];
13-
14-
const getPlugins = () => [
15-
localResolve(),
16-
babel({
17-
babelrc: true,
18-
babelHelpers: 'runtime',
19-
exclude: 'node_modules/**',
20-
}),
21-
];
22-
238
const config = {
24-
input,
9+
input: 'src/index.ts',
2510
output: { format: 'es', file: 'lib/index.js' },
26-
external: getExternal(),
27-
plugins: getPlugins(),
11+
external: [...Object.keys(pkg.dependencies), /@react-pdf/],
12+
plugins: [typescript(), localResolve()],
13+
};
14+
15+
const dtsConfig = {
16+
input: './lib/types/index.d.ts',
17+
output: [{ file: 'lib/index.d.ts', format: 'es' }],
18+
plugins: [dts(), del({ targets: 'lib/types', hook: 'buildEnd' })],
2819
};
2920

30-
export default config;
21+
export default [config, dtsConfig];

β€Žpackages/stylesheet/src/expand/borders.jsβ€Ž

Lines changed: 0 additions & 77 deletions
This file was deleted.

β€Žpackages/stylesheet/src/expand/flex.jsβ€Ž

Lines changed: 0 additions & 29 deletions
This file was deleted.

β€Žpackages/stylesheet/src/expand/gap.jsβ€Ž

Lines changed: 0 additions & 10 deletions
This file was deleted.

β€Žpackages/stylesheet/src/expand/index.jsβ€Ž

Lines changed: 0 additions & 89 deletions
This file was deleted.

0 commit comments

Comments
Β (0)