Skip to content

Commit 30bcf33

Browse files
authored
Merge pull request #52 from aylonmuramatsu/master
feat: add tailwind v4 to TS
2 parents e205c22 + a1ce6d6 commit 30bcf33

File tree

7 files changed

+95
-11
lines changed

7 files changed

+95
-11
lines changed

index.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@ inquirer.prompt([
2828
i18n.template.blank,
2929
i18n.template.blankTs,
3030
i18n.template.tawild,
31+
i18n.template.tawildv4,
3132
i18n.template.tawildTs,
33+
i18n.template.tawildv4Ts,
3234
],
3335
},
3436
])
3537
.then((answers) => {
3638
let isTS = false;
3739
let isTailwind = false;
40+
let tailwindVersion = 'v3'
41+
3842

3943
switch (answers.template) {
4044
case i18n.template.blankTs:
@@ -45,13 +49,25 @@ inquirer.prompt([
4549
isTailwind = true;
4650
break;
4751

52+
case i18n.template.tawildv4:
53+
isTailwind = true;
54+
tailwindVersion = "v4";
55+
break;
56+
4857
case i18n.template.tawildTs:
4958
isTS = true;
5059
isTailwind = true;
60+
tailwindVersion = 'v3'
61+
break;
62+
63+
case i18n.template.tawildv4Ts:
64+
isTS = true;
65+
isTailwind = true;
66+
tailwindVersion = 'v4';
5167
break;
5268
}
5369

5470
projectName = (projectName || answers.projectName).replace(/ /g, '_').trim();
5571

56-
Nulla.tryRun(projectName, isTS, isTailwind);
72+
Nulla.tryRun(projectName, isTS, isTailwind, tailwindVersion);
5773
});

src/locales/en-US.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
"blank": "Blank (JavaScript)",
66
"blankTs": "Blank (TypeScript) - blank app with TypeScript enabled",
77
"tawild": "Tailwind (JavaScript)",
8-
"tawildTs": "Tailwind (TypeScript) - Tailwind app with TypeScript enabled"
8+
"tawildv4": "Tailwind (Javascript) - Tailwind v4 app",
9+
"tawildTs": "Tailwind v3 (TypeScript) - Tailwind v3 app with TypeScript enabled",
10+
"tawildv4Ts": "Tailwind v4 (TypeScript) - Tailwind v4 app with TypeScript enabled"
911
},
1012
"error": {
1113
"default": "error:",

src/locales/pt-BR.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
"blank": "Blank (JavaScript)",
66
"blankTs": "Blank (TypeScript) - App em branco com TypeScript habilitado",
77
"tawild": "Tailwind (JavaScript)",
8-
"tawildTs": "Tailwind (TypeScript) - App Tailwind com TypeScript habilitado"
8+
"tawildv4": "Tailwind (Javascript) - App Tailwind v4",
9+
"tawildTs": "Tailwind v3 (TypeScript) - App Tailwind v3 com TypeScript habilitado",
10+
"tawildv4Ts": "Tailwind v4 (TypeScript) - App Tailwind v4 com TypeScript habilitado"
911
},
1012
"error": {
1113
"default": "erro:",

src/modules.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const fs = require('fs');
44
const path = require('path');
55
const packageFolder = __dirname;
6+
const whitelist = ['package', 'webpack', 'tailwind.config']
67

78
let lang = Intl.DateTimeFormat().resolvedOptions().locale;
89
lang = (lang === 'pt-BR' || lang === 'en-US')
@@ -72,7 +73,7 @@ const replaceLangs = (content) => {
7273
return content;
7374
};
7475

75-
Nulla.run = (names, isTS, isTailwind) => {
76+
Nulla.run = (names, isTS, isTailwind, tailwindVersion = 'v3') => {
7677
const { projectSlug, projectName } = names;
7778
const projectPath = path.join(process.cwd(), projectSlug);
7879

@@ -92,23 +93,27 @@ Nulla.run = (names, isTS, isTailwind) => {
9293
// Tailwind check, remove all default files and replace them with Tailwind defaults
9394
if (isTailwind)
9495
for (const file of Files.files) {
95-
if (file.includes(".tailwind")) {
96+
if (file.includes(".tailwind") && tailwindVersion === 'v3' && !file.includes('-v4')) {
9697
tailwindReplace.push(file.replace(".tailwind", ""))
9798
}
99+
else if(file.includes('.tailwind') && tailwindVersion === 'v4' && (file.includes('-v4') ||!whitelist.some(x => file.includes(x))) )
100+
tailwindReplace.push(file.replace(".tailwind-v4", "").replace(".tailwind", ""))
98101
}
99-
102+
100103
for (const file of Files.files) {
101104
if (file.match(new RegExp(`.${isTS ? 'js' : 'ts'}x?$`)) && file.indexOf('.config.') === -1) continue;
102105
if (!isTS && /tsconfig.json/.test(file)) continue;
103106

104107
// Tailwind replacer
105108
if (isTailwind) {
106-
109+
if(tailwindVersion === 'v3' && file.includes('-v4')) continue;
110+
if(tailwindVersion === 'v4' && whitelist.some(x => file.includes(x) && !file.includes('-v4')) ) continue;
107111
// Check if the file is going to be replaced by tailwind file
108112
if (tailwindReplace.includes(file)) continue;
109113

110114
// Do not include css files unless they're supposed to be included
111-
if (file.endsWith(".css") && !file.includes("tailwind.")) continue;
115+
if (file.endsWith(".css") && !file.includes("tailwind.") && tailwindVersion === 'v3') continue;
116+
if(file.endsWith(".css") && tailwindVersion === 'v4' && !file.includes('-v4')) continue
112117

113118
} else if (file.includes("tailwind")) continue; // If it is not tailwind, do not add tailwind files to the bundle
114119

@@ -118,7 +123,7 @@ Nulla.run = (names, isTS, isTailwind) => {
118123
);
119124
content = Nulla.contentReplacer(content, 'NAME', projectName);
120125
content = Nulla.contentReplacer(content, 'SLUG', projectSlug);
121-
const target = path.join(projectPath, file.replace('_', '.').replace('.tailwind', ''));
126+
const target = path.join(projectPath, file.replace('_', '.').replace('.tailwind-v4', '').replace('.tailwind', '').replace("-v4", ""));
122127
content = Nulla.contentReplacer(content, 'SRC', srcFolder);
123128
content = Nulla.contentReplacer(content, 'LANG', lang);
124129
content = replaceLangs(content);
@@ -181,10 +186,10 @@ Nulla.errorHandler = (e) => {
181186
}
182187
};
183188

184-
Nulla.tryRun = (name, isTS, isTailwind) => {
189+
Nulla.tryRun = (name, isTS, isTailwind, tailwindVersion) => {
185190
try {
186191
const names = Nulla.storeNames(name);
187-
Nulla.run(names, isTS, isTailwind);
192+
Nulla.run(names, isTS, isTailwind, tailwindVersion);
188193
} catch (e) {
189194
Nulla.errorHandler(e);
190195
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": ":!PROJECT_SLUG!:",
3+
"version": "0.0.1",
4+
"description": "",
5+
"author": "",
6+
"license": "ISC",
7+
"devDependencies": {
8+
"nullstack": "~0.20.0",
9+
"tailwindcss": "^4.1.13",
10+
"postcss-loader": "^8.2.0",
11+
"postcss": "^8.5.6",
12+
"@tailwindcss/postcss": "^4.1.13"
13+
},
14+
"scripts": {
15+
"start": "npx nullstack start",
16+
"build": "npx nullstack build"
17+
}
18+
}

src/template/tailwind-v4.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@import "tailwindcss";
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const [server, client] = require('nullstack/webpack.config')
2+
3+
function customClient(...args) {
4+
const config = client(...args)
5+
const rule = config.module.rules.find((rule) => rule.test && rule.test.test('.css'))
6+
rule.use.push({
7+
loader: require.resolve('postcss-loader'),
8+
options: {
9+
postcssOptions: {
10+
plugins: {
11+
'@tailwindcss/postcss': {},
12+
},
13+
},
14+
},
15+
})
16+
17+
// Configurar minimizer CSS mais compatível para build
18+
if (config.optimization && config.optimization.minimizer) {
19+
config.optimization.minimizer = config.optimization.minimizer.map((minimizer) => {
20+
if (minimizer.constructor.name === 'CssMinimizerPlugin') {
21+
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
22+
return new CssMinimizerPlugin({
23+
minimizerOptions: {
24+
preset: [
25+
'default',
26+
{
27+
discardComments: { removeAll: true },
28+
},
29+
],
30+
},
31+
})
32+
}
33+
return minimizer
34+
})
35+
}
36+
37+
return config
38+
}
39+
40+
module.exports = [server, customClient]

0 commit comments

Comments
 (0)