@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
- "name": "@rebuildjs/tailwindcss",
3
- "version": "0.1.1",
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
- "scripts": {
38
- "build": ":",
39
- "clean": ":",
40
- "exec": "$@",
41
- "prepublishOnly": "pnpm clean && pnpm build && pnpm test",
42
- "test": "pnpm test:unit && pnpm test:types",
43
- "test:types": "check-dts",
44
- "test:unit": "NODE_OPTIONS=--loader=esmock tsx node_modules/uvu/bin.js . '\\.test\\.(ts|js)$'",
45
- "test:unit:coverage": "c8 pnpm test:unit"
46
- },
47
- "dependencies": {
48
- "ctx-core": "^5.10.0",
49
- "esbuild": "^0.19.11",
50
- "postcss": "^8.4.32",
51
- "rebuildjs": "^0.29.1",
52
- "tailwindcss": "^3.4.0"
53
- },
54
- "devDependencies": {
55
- "c8": "^8.0.1",
56
- "check-dts": "^0.7.2",
57
- "esmock": "^2.6.0",
58
- "tsx": "^4.7.0",
59
- "typescript": "next",
60
- "uvu": "^0.5.6"
61
- },
62
- "publishConfig": {
63
- "access": "public",
64
- "cache": "~/.npm"
65
- },
66
- "sideEffects": false
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 { Cancel, nullish__none_, run, tup } from 'ctx-core/function'
2
- import { be, memo_ } from 'ctx-core/rmemo'
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: 'tailwind', setup: setup_() }
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 (!relysjs__ready_(ctx)) return
55
+ if (!rebuildjs__ready_(ctx)) return
36
56
  nullish__none_(tup(
37
57
  build_id_(ctx),
38
- relysjs__build_id_(ctx),
58
+ rebuildjs__build_id_(ctx),
39
59
  server__output__relative_path_M_middleware_ctx_(app_ctx),
40
60
  ), async (
41
61
  build_id,
42
- relysjs__build_id,
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 result = await cmd(postcss[
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(cssBundle)),
99
+ await cmd(readFile(esbuild_cssBundle_path)),
69
100
  {
70
- from: cssBundle,
71
- to: cssBundle,
72
- })
73
- await cmd(writeFile(cssBundle, result.css))
74
- await cmd(writeFile(cssBundle + '.map', JSON.stringify(result.map)))
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
- || relysjs__build_id_(ctx) !== relysjs__build_id
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()