Skip to content

Commit 8f28514

Browse files
committed
feat: (WIP) generator for static/typed tailwind styles with custom config
1 parent 5c73934 commit 8f28514

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

generate.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {program} from 'commander';
2+
import fs from 'fs';
3+
import path from 'path';
4+
import rewiremock from 'rewiremock';
5+
6+
program
7+
.option('-c, --config <tailwind.config.js>', 'tailwind config file input')
8+
.option(
9+
'-o, --output <file>',
10+
'generated react-native-tailwind output (default: rn-tailwind.ts)'
11+
);
12+
13+
program.parse(process.argv);
14+
15+
const configFile = program.config || 'simpleConfig.stub.js';
16+
const outputFile = program.output || 'rn-tailwind.ts';
17+
18+
const config = require(path.isAbsolute(configFile)
19+
? configFile
20+
: path.join(process.cwd(), configFile));
21+
if (!config || !config.theme) {
22+
throw new Error('Tailwind config appears to be invalid');
23+
}
24+
25+
const outputPath = path.isAbsolute(outputFile)
26+
? outputFile
27+
: path.join(process.cwd(), outputFile);
28+
if (fs.existsSync(outputPath)) {
29+
throw new Error('Output file already exists - refusing to overwrite.');
30+
}
31+
32+
// Override internal require in `configHandler.js` with commandline input
33+
rewiremock('../../../tailwind.config').with(config);
34+
// Mock StyleSheet.create to just return input object, to get "bare" output from `tailwind.js`
35+
rewiremock('react-native').with({StyleSheet: {create: o => o}});
36+
37+
// Run tailwind and color generators
38+
const tailwind = rewiremock.proxy('./tailwind').default;
39+
const color = rewiremock.proxy('./color').default;
40+
41+
// Hack: template together a TypeScript file for use in RN project
42+
const output = `
43+
import { StyleSheet } from 'react-native';
44+
export const t = StyleSheet.create(${JSON.stringify(tailwind)});
45+
export const color = ${JSON.stringify(color)};`;
46+
fs.writeFileSync(outputPath, output);

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@
2828
},
2929
"devDependencies": {
3030
"@babel/core": "^7.10.5",
31+
"@babel/node": "^7.10.5",
3132
"@babel/preset-env": "^7.10.4",
3233
"babel-jest": "^26.1.0",
34+
"commander": "^6.0.0",
3335
"jest": "^26.1.0",
3436
"react": "^16.13.1",
3537
"react-native": "^0.63.2",
36-
"react-test-renderer": "^16.13.1"
38+
"react-test-renderer": "^16.13.1",
39+
"rewiremock": "^3.14.3"
3740
}
3841
}

0 commit comments

Comments
 (0)