@rebuildjs/tailwindcss 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
2
|
+
"name": "@rebuildjs/tailwindcss",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Tailwindcss integration with rebuildjs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"tailwindcss",
|
|
7
|
+
"reactive",
|
|
8
|
+
"multi page apps",
|
|
9
|
+
"web app",
|
|
10
|
+
"web server",
|
|
11
|
+
"esbuild",
|
|
12
|
+
"rmemo",
|
|
13
|
+
"ctx-core"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://github.com/rebuildjs/tailwindcss#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/rebuildjs/tailwindcss/issues"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/rebuildjs/tailwindcss.git"
|
|
22
|
+
},
|
|
23
|
+
"license": "Apache-2.0",
|
|
24
|
+
"author": "Brian Takita",
|
|
25
|
+
"type": "module",
|
|
26
|
+
"files": [
|
|
27
|
+
"*.d.ts",
|
|
28
|
+
"*.js",
|
|
29
|
+
"*.json",
|
|
30
|
+
"rebuild_tailwind_plugin"
|
|
31
|
+
],
|
|
32
|
+
"types": "./index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": "./index.js",
|
|
35
|
+
"./package.json": "./package.json"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"ctx-core": "^5.10.0",
|
|
39
|
+
"esbuild": "^0.19.11",
|
|
40
|
+
"postcss": "^8.4.32",
|
|
41
|
+
"rebuildjs": "^0.29.2",
|
|
42
|
+
"tailwindcss": "^3.4.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"c8": "^8.0.1",
|
|
46
|
+
"check-dts": "^0.7.2",
|
|
47
|
+
"esmock": "^2.6.0",
|
|
48
|
+
"relementjs": "^0.39.0",
|
|
49
|
+
"tsx": "^4.7.0",
|
|
50
|
+
"typescript": "next",
|
|
51
|
+
"uvu": "^0.5.6"
|
|
52
|
+
},
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public",
|
|
55
|
+
"cache": "~/.npm"
|
|
56
|
+
},
|
|
57
|
+
"sideEffects": false,
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": ":",
|
|
60
|
+
"clean": ":",
|
|
61
|
+
"exec": "$@",
|
|
62
|
+
"test": "pnpm test:unit && pnpm test:types",
|
|
63
|
+
"test:types": "check-dts",
|
|
64
|
+
"test:unit": "NODE_OPTIONS=--loader=esmock tsx node_modules/uvu/bin.js . '\\.test\\.(ts|js)$'",
|
|
65
|
+
"test:unit:coverage": "c8 pnpm test:unit"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import type { Plugin } from 'esbuild'
|
|
2
|
+
import type { ctx__be_T, ctx__get_T, ctx__set_T, has_app_T, sig_T } from 'rebuildjs'
|
|
3
|
+
export declare const rebuild_tailwind_plugin__build_id$_:ctx__be_T<has_app_T, sig_T<string|undefined>, 'app'>
|
|
4
|
+
export declare const rebuild_tailwind_plugin__build_id_:ctx__get_T<has_app_T, string|undefined>
|
|
5
|
+
export declare const rebuild_tailwind_plugin__build_id__set:ctx__set_T<has_app_T, string|undefined>
|
|
6
|
+
export declare const rebuild_tailwind_plugin__ready$_:ctx__be_T<has_app_T, sig_T<boolean>, 'app'>
|
|
7
|
+
export declare const rebuild_tailwind_plugin__ready_:ctx__get_T<has_app_T, boolean>
|
|
2
8
|
export declare function rebuild_tailwind_plugin_():Plugin
|
|
@@ -1,18 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { file_exists_, file_exists__waitfor } from 'ctx-core/fs'
|
|
2
|
+
import { Cancel, nullish__none_, run, sleep, tup } from 'ctx-core/function'
|
|
3
|
+
import { be, be_memo_pair_, be_sig_triple_, memo_ } from 'ctx-core/rmemo'
|
|
3
4
|
import { readFile, writeFile } from 'node:fs/promises'
|
|
5
|
+
import { join } from 'path'
|
|
4
6
|
import postcss from 'postcss'
|
|
5
7
|
import {
|
|
6
8
|
app_ctx,
|
|
7
9
|
browser__output_,
|
|
8
10
|
build_id_,
|
|
11
|
+
cwd_,
|
|
12
|
+
rebuildjs__build_id_,
|
|
13
|
+
rebuildjs__ready_,
|
|
9
14
|
server__output_,
|
|
10
15
|
server__output__relative_path_M_middleware_ctx_
|
|
11
16
|
} from 'rebuildjs'
|
|
12
|
-
import { relysjs__build_id_, relysjs__ready_ } from 'relysjs'
|
|
13
17
|
import tailwind from 'tailwindcss'
|
|
18
|
+
export const [
|
|
19
|
+
rebuild_tailwind_plugin__build_id$_,
|
|
20
|
+
rebuild_tailwind_plugin__build_id_,
|
|
21
|
+
rebuild_tailwind_plugin__build_id__set,
|
|
22
|
+
] = be_sig_triple_(
|
|
23
|
+
()=>undefined,
|
|
24
|
+
{ id: 'rebuild_tailwind_plugin__build_id', ns: 'app' })
|
|
25
|
+
export const [
|
|
26
|
+
rebuild_tailwind_plugin__ready$_,
|
|
27
|
+
rebuild_tailwind_plugin__ready_,
|
|
28
|
+
] = be_memo_pair_(ctx=>
|
|
29
|
+
!!(
|
|
30
|
+
build_id_(ctx)
|
|
31
|
+
&& rebuildjs__ready_(ctx)
|
|
32
|
+
&& build_id_(ctx) === rebuild_tailwind_plugin__build_id_(ctx)),
|
|
33
|
+
{ id: 'rebuild_tailwind_plugin__ready', ns: 'app' })
|
|
14
34
|
export function rebuild_tailwind_plugin_() {
|
|
15
|
-
return { name: '
|
|
35
|
+
return { name: 'rebuild_tailwind_plugin', setup: setup_() }
|
|
16
36
|
function setup_() {
|
|
17
37
|
/**
|
|
18
38
|
* @param {import('esbuild').PluginBuild}build
|
|
@@ -32,14 +52,14 @@ export function rebuild_tailwind_plugin_() {
|
|
|
32
52
|
r()
|
|
33
53
|
return tailwind__build$
|
|
34
54
|
function r() {
|
|
35
|
-
if (!
|
|
55
|
+
if (!rebuildjs__ready_(ctx)) return
|
|
36
56
|
nullish__none_(tup(
|
|
37
57
|
build_id_(ctx),
|
|
38
|
-
|
|
58
|
+
rebuildjs__build_id_(ctx),
|
|
39
59
|
server__output__relative_path_M_middleware_ctx_(app_ctx),
|
|
40
60
|
), async (
|
|
41
61
|
build_id,
|
|
42
|
-
|
|
62
|
+
rebuildjs__build_id,
|
|
43
63
|
server__output__relative_path_M_middleware_ctx,
|
|
44
64
|
)=>{
|
|
45
65
|
try {
|
|
@@ -47,6 +67,7 @@ export function rebuild_tailwind_plugin_() {
|
|
|
47
67
|
await output__process(server__output_(middleware_ctx))
|
|
48
68
|
await output__process(browser__output_(middleware_ctx))
|
|
49
69
|
}
|
|
70
|
+
rebuild_tailwind_plugin__build_id__set(ctx, build_id)
|
|
50
71
|
} catch (err) {
|
|
51
72
|
if (err instanceof Cancel) return
|
|
52
73
|
throw err
|
|
@@ -60,18 +81,35 @@ export function rebuild_tailwind_plugin_() {
|
|
|
60
81
|
) {
|
|
61
82
|
const cssBundle = output?.cssBundle
|
|
62
83
|
if (!cssBundle) return
|
|
63
|
-
const
|
|
84
|
+
const cssBundle_path = join(cwd_(ctx), cssBundle)
|
|
85
|
+
const esbuild_cssBundle = output.esbuild_cssBundle ?? cssBundle
|
|
86
|
+
const esbuild_cssBundle_path = join(cwd_(ctx), esbuild_cssBundle)
|
|
87
|
+
await file_exists__waitfor(
|
|
88
|
+
esbuild_cssBundle_path,
|
|
89
|
+
1000,
|
|
90
|
+
()=>cmd(sleep(0)))
|
|
91
|
+
const esbuild_cssBundle_map_path = esbuild_cssBundle_path + '.map'
|
|
92
|
+
const esbuild_cssBundle_map_exists = await cmd(file_exists_(esbuild_cssBundle_map_path))
|
|
93
|
+
const result = await cmd(postcss([
|
|
64
94
|
tailwind({
|
|
65
|
-
content: output.cssBundle_content
|
|
95
|
+
content: output.cssBundle_content.map(content__relative_path=>
|
|
96
|
+
join(cwd_(ctx), content__relative_path))
|
|
66
97
|
})
|
|
67
98
|
]).process(
|
|
68
|
-
await cmd(readFile(
|
|
99
|
+
await cmd(readFile(esbuild_cssBundle_path)),
|
|
69
100
|
{
|
|
70
|
-
from:
|
|
71
|
-
to:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
101
|
+
from: esbuild_cssBundle_path,
|
|
102
|
+
to: cssBundle_path,
|
|
103
|
+
map: esbuild_cssBundle_map_exists
|
|
104
|
+
? {
|
|
105
|
+
prev: JSON.parse(await cmd(readFile(esbuild_cssBundle_path + '.map')))
|
|
106
|
+
}
|
|
107
|
+
: false,
|
|
108
|
+
}))
|
|
109
|
+
await cmd(writeFile(cssBundle_path, result.css))
|
|
110
|
+
if (result.map) {
|
|
111
|
+
await cmd(writeFile(cssBundle_path + '.map', JSON.stringify(result.map)))
|
|
112
|
+
}
|
|
75
113
|
}
|
|
76
114
|
async function cmd(promise) {
|
|
77
115
|
if (cancel_()) throw new Cancel()
|
|
@@ -85,7 +123,7 @@ export function rebuild_tailwind_plugin_() {
|
|
|
85
123
|
function cancel_() {
|
|
86
124
|
return (
|
|
87
125
|
build_id_(ctx) !== build_id
|
|
88
|
-
||
|
|
126
|
+
|| rebuildjs__build_id_(ctx) !== rebuildjs__build_id
|
|
89
127
|
|| server__output__relative_path_M_middleware_ctx_(
|
|
90
128
|
ctx) !== server__output__relative_path_M_middleware_ctx
|
|
91
129
|
)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { BuildContext } from 'esbuild'
|
|
2
|
+
import { readFile } from 'fs/promises'
|
|
3
|
+
import { rm } from 'node:fs/promises'
|
|
4
|
+
import { dirname, join } from 'path'
|
|
5
|
+
import {
|
|
6
|
+
app_ctx,
|
|
7
|
+
browser__build,
|
|
8
|
+
browser__metafile_,
|
|
9
|
+
browser__metafile__set,
|
|
10
|
+
build_id__set,
|
|
11
|
+
ctx_,
|
|
12
|
+
cwd_,
|
|
13
|
+
cwd__set,
|
|
14
|
+
rebuildjs__build_id__set,
|
|
15
|
+
rebuildjs__ready_,
|
|
16
|
+
rebuildjs__ready__wait,
|
|
17
|
+
rmemo__wait,
|
|
18
|
+
server__build,
|
|
19
|
+
server__metafile_,
|
|
20
|
+
server__metafile__set
|
|
21
|
+
} from 'rebuildjs'
|
|
22
|
+
import { test } from 'uvu'
|
|
23
|
+
import { equal, throws } from 'uvu/assert'
|
|
24
|
+
import { browser__metafile0, server__metafile0 } from '../_fixtures/metafiles.js'
|
|
25
|
+
import {
|
|
26
|
+
rebuild_tailwind_plugin_,
|
|
27
|
+
rebuild_tailwind_plugin__build_id$_,
|
|
28
|
+
rebuild_tailwind_plugin__build_id_,
|
|
29
|
+
rebuild_tailwind_plugin__build_id__set,
|
|
30
|
+
rebuild_tailwind_plugin__ready$_,
|
|
31
|
+
rebuild_tailwind_plugin__ready_
|
|
32
|
+
} from './index.js'
|
|
33
|
+
test.after.each(()=>{
|
|
34
|
+
app_ctx.s.app.clear()
|
|
35
|
+
})
|
|
36
|
+
test('rebuild_tailwind_plugin__build_id', ()=>{
|
|
37
|
+
equal(rebuild_tailwind_plugin__build_id$_(app_ctx)(), undefined)
|
|
38
|
+
equal(rebuild_tailwind_plugin__build_id_(app_ctx), undefined)
|
|
39
|
+
rebuild_tailwind_plugin__build_id__set(app_ctx, 'test_build_id')
|
|
40
|
+
equal(rebuild_tailwind_plugin__build_id$_(app_ctx)(), 'test_build_id')
|
|
41
|
+
equal(rebuild_tailwind_plugin__build_id_(app_ctx), 'test_build_id')
|
|
42
|
+
// @ts-expect-error TS2345
|
|
43
|
+
throws(()=>rebuild_tailwind_plugin__build_id$_(ctx_()))
|
|
44
|
+
// @ts-expect-error TS2345
|
|
45
|
+
throws(()=>rebuild_tailwind_plugin__build_id_(ctx_()))
|
|
46
|
+
})
|
|
47
|
+
test('rebuild_tailwind_plugin__ready', ()=>{
|
|
48
|
+
equal(rebuild_tailwind_plugin__ready$_(app_ctx)(), false)
|
|
49
|
+
equal(rebuild_tailwind_plugin__ready_(app_ctx), false)
|
|
50
|
+
const build_id = server__metafile0.build_id!
|
|
51
|
+
build_id__set(app_ctx, build_id)
|
|
52
|
+
equal(rebuildjs__ready_(app_ctx), false)
|
|
53
|
+
equal(rebuild_tailwind_plugin__ready$_(app_ctx)(), false)
|
|
54
|
+
equal(rebuild_tailwind_plugin__ready_(app_ctx), false)
|
|
55
|
+
server__metafile__set(app_ctx, server__metafile0)
|
|
56
|
+
equal(rebuildjs__ready_(app_ctx), false)
|
|
57
|
+
equal(rebuild_tailwind_plugin__ready$_(app_ctx)(), false)
|
|
58
|
+
equal(rebuild_tailwind_plugin__ready_(app_ctx), false)
|
|
59
|
+
browser__metafile__set(app_ctx, browser__metafile0)
|
|
60
|
+
equal(rebuildjs__ready_(app_ctx), false)
|
|
61
|
+
equal(rebuild_tailwind_plugin__ready$_(app_ctx)(), false)
|
|
62
|
+
equal(rebuild_tailwind_plugin__ready_(app_ctx), false)
|
|
63
|
+
rebuildjs__build_id__set(app_ctx, build_id)
|
|
64
|
+
equal(rebuildjs__ready_(app_ctx), true)
|
|
65
|
+
equal(rebuild_tailwind_plugin__ready$_(app_ctx)(), false)
|
|
66
|
+
equal(rebuild_tailwind_plugin__ready_(app_ctx), false)
|
|
67
|
+
rebuild_tailwind_plugin__build_id__set(app_ctx, build_id)
|
|
68
|
+
equal(rebuildjs__ready_(app_ctx), true)
|
|
69
|
+
equal(rebuild_tailwind_plugin__ready$_(app_ctx)(), true)
|
|
70
|
+
equal(rebuild_tailwind_plugin__ready_(app_ctx), true)
|
|
71
|
+
})
|
|
72
|
+
test('rebuild_tailwind_plugin_', async ()=>{
|
|
73
|
+
const test_dir = dirname(new URL(import.meta.url).pathname)
|
|
74
|
+
const cwd = join(test_dir, '../_fixtures')
|
|
75
|
+
cwd__set(app_ctx, cwd)
|
|
76
|
+
await rm(join(cwd, 'dist'), { recursive: true, force: true })
|
|
77
|
+
let server__build_context:BuildContext|undefined = undefined
|
|
78
|
+
let browser__build_context:BuildContext|undefined = undefined
|
|
79
|
+
try {
|
|
80
|
+
const rebuild_tailwind_plugin = rebuild_tailwind_plugin_()
|
|
81
|
+
server__build_context = await server__build({ plugins: [rebuild_tailwind_plugin] })
|
|
82
|
+
browser__build_context = await browser__build({ plugins: [rebuild_tailwind_plugin] })
|
|
83
|
+
await rebuildjs__ready__wait()
|
|
84
|
+
const server__metafile = server__metafile_(app_ctx)!
|
|
85
|
+
const server__output__relative_path =
|
|
86
|
+
Object.keys(server__metafile.outputs)
|
|
87
|
+
.find(server__output__relative_path=>
|
|
88
|
+
server__metafile.outputs[server__output__relative_path].entryPoint)!
|
|
89
|
+
const server__entryPoint__output =
|
|
90
|
+
server__metafile.outputs[server__output__relative_path]
|
|
91
|
+
const browser__metafile = browser__metafile_(app_ctx)!
|
|
92
|
+
const browser__output__relative_path =
|
|
93
|
+
Object.keys(browser__metafile.outputs)
|
|
94
|
+
.find(browser__output__relative_path=>
|
|
95
|
+
browser__metafile.outputs[browser__output__relative_path].entryPoint)!
|
|
96
|
+
const browser__entryPoint__output =
|
|
97
|
+
browser__metafile.outputs[browser__output__relative_path]
|
|
98
|
+
equal(typeof server__entryPoint__output.cssBundle, 'string')
|
|
99
|
+
equal(typeof browser__entryPoint__output.cssBundle, 'string')
|
|
100
|
+
equal(typeof server__entryPoint__output.esbuild_cssBundle, 'string')
|
|
101
|
+
equal(typeof browser__entryPoint__output.esbuild_cssBundle, 'string')
|
|
102
|
+
equal(server__entryPoint__output.cssBundle !== server__entryPoint__output.esbuild_cssBundle, true)
|
|
103
|
+
equal(browser__entryPoint__output.cssBundle !== browser__entryPoint__output.esbuild_cssBundle, true)
|
|
104
|
+
await rmemo__wait(rebuild_tailwind_plugin__ready$_(app_ctx), $=>$, 2000)
|
|
105
|
+
const cssBundle_text =
|
|
106
|
+
await readFile(join(cwd_(app_ctx), server__entryPoint__output.cssBundle!))
|
|
107
|
+
.then(buf=>buf + '')
|
|
108
|
+
const esbuild_cssBundle_text =
|
|
109
|
+
await readFile(join(cwd_(app_ctx), server__entryPoint__output.esbuild_cssBundle!))
|
|
110
|
+
.then(buf=>buf + '')
|
|
111
|
+
equal(cssBundle_text.includes('@tailwind base;'), false)
|
|
112
|
+
equal(cssBundle_text.includes('@tailwind components;'), false)
|
|
113
|
+
equal(cssBundle_text.includes('@tailwind utilities;'), false)
|
|
114
|
+
equal(cssBundle_text.includes('.text-green-500'), true)
|
|
115
|
+
equal(cssBundle_text.includes('.font-bold'), true)
|
|
116
|
+
equal(cssBundle_text.includes('.text-red'), false)
|
|
117
|
+
equal(cssBundle_text.includes('.font-light'), false)
|
|
118
|
+
equal(esbuild_cssBundle_text.includes('@tailwind base;'), true)
|
|
119
|
+
equal(esbuild_cssBundle_text.includes('@tailwind components;'), true)
|
|
120
|
+
equal(esbuild_cssBundle_text.includes('@tailwind utilities;'), true)
|
|
121
|
+
equal(esbuild_cssBundle_text.includes('.text-green-500'), false)
|
|
122
|
+
equal(esbuild_cssBundle_text.includes('.font-bold'), false)
|
|
123
|
+
equal(esbuild_cssBundle_text.includes('.text-red'), false)
|
|
124
|
+
equal(esbuild_cssBundle_text.includes('.font-light'), false)
|
|
125
|
+
} finally {
|
|
126
|
+
await rebuildjs__ready__wait()
|
|
127
|
+
server__build_context?.dispose?.()
|
|
128
|
+
browser__build_context?.dispose?.()
|
|
129
|
+
}
|
|
130
|
+
})
|
|
131
|
+
test.run()
|