@tarojs/parse-css-to-stylesheet 0.0.1

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.
Files changed (4) hide show
  1. package/README.md +25 -0
  2. package/index.d.ts +6 -0
  3. package/index.js +257 -0
  4. package/package.json +73 -0
package/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # parse-css-to-stylesheet
2
+
3
+ ## 简介
4
+
5
+ 解析 React 组件与对应的 CSS 文件,为每一个 React 节点计算样式层叠与继承之后的最终样式,应用于 React Native 、鸿蒙等不支持 CSS 写法的场景。
6
+
7
+ ## 实现思路
8
+
9
+ 1. 解析 React 语法树,并将其中的 JSX 部分转为类 DOM 结构的树
10
+ 2. 解析样式文件
11
+ 3. 利用解析后的样式文件中的选择器去反查出第一步 DOM 树中的节点,并收集节点对应的样式块
12
+ 4. 根据节点上的选择器特异性及样式顺序、import 等计算节点样式层叠
13
+ 5. 遍历节点的所有父节点,计算样式继承
14
+
15
+ ## 功能特性
16
+
17
+ ### JSX DOM 树构造
18
+ - [x] 支持函数组件
19
+ - [x] 支持类组件
20
+ - [x] 支持 JSX 分离的写法
21
+ - [ ] 支持遍历子组件
22
+
23
+ ### 样式计算
24
+ - [x] 样式层叠
25
+ - [x] 样式继承
package/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ export function parse(component: string, styles: Array<string>): string
package/index.js ADDED
@@ -0,0 +1,257 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
24
+ }
25
+ } else {
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
28
+ }
29
+ }
30
+
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'parse-css-to-stylesheet.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./parse-css-to-stylesheet.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'parse-css-to-stylesheet.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./parse-css-to-stylesheet.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'parse-css-to-stylesheet.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./parse-css-to-stylesheet.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'parse-css-to-stylesheet.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./parse-css-to-stylesheet.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'parse-css-to-stylesheet.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./parse-css-to-stylesheet.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'parse-css-to-stylesheet.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./parse-css-to-stylesheet.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'parse-css-to-stylesheet.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./parse-css-to-stylesheet.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'parse-css-to-stylesheet.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./parse-css-to-stylesheet.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'parse-css-to-stylesheet.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./parse-css-to-stylesheet.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'parse-css-to-stylesheet.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./parse-css-to-stylesheet.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'parse-css-to-stylesheet.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./parse-css-to-stylesheet.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'parse-css-to-stylesheet.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./parse-css-to-stylesheet.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'parse-css-to-stylesheet.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./parse-css-to-stylesheet.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ localFileExisted = existsSync(
228
+ join(__dirname, 'parse-css-to-stylesheet.linux-arm-gnueabihf.node')
229
+ )
230
+ try {
231
+ if (localFileExisted) {
232
+ nativeBinding = require('./parse-css-to-stylesheet.linux-arm-gnueabihf.node')
233
+ } else {
234
+ nativeBinding = require('@tarojs/parse-css-to-stylesheet-linux-arm-gnueabihf')
235
+ }
236
+ } catch (e) {
237
+ loadError = e
238
+ }
239
+ break
240
+ default:
241
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
242
+ }
243
+ break
244
+ default:
245
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
246
+ }
247
+
248
+ if (!nativeBinding) {
249
+ if (loadError) {
250
+ throw loadError
251
+ }
252
+ throw new Error(`Failed to load native binding`)
253
+ }
254
+
255
+ const { parse } = nativeBinding
256
+
257
+ module.exports.parse = parse
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@tarojs/parse-css-to-stylesheet",
3
+ "version": "0.0.1",
4
+ "main": "index.js",
5
+ "types": "index.d.ts",
6
+ "napi": {
7
+ "name": "parse-css-to-stylesheet",
8
+ "triples": {
9
+ "additional": [
10
+ "aarch64-apple-darwin",
11
+ "aarch64-linux-android",
12
+ "aarch64-unknown-linux-gnu",
13
+ "aarch64-unknown-linux-musl",
14
+ "aarch64-pc-windows-msvc",
15
+ "armv7-unknown-linux-gnueabihf",
16
+ "x86_64-unknown-linux-musl",
17
+ "x86_64-unknown-freebsd",
18
+ "i686-pc-windows-msvc",
19
+ "armv7-linux-androideabi",
20
+ "universal-apple-darwin"
21
+ ]
22
+ }
23
+ },
24
+ "files": [
25
+ "index.js",
26
+ "index.d.ts"
27
+ ],
28
+ "license": "MIT",
29
+ "devDependencies": {
30
+ "@napi-rs/cli": "^2.16.3",
31
+ "ava": "^5.1.1",
32
+ "conventional-changelog-cli": "2.2.2",
33
+ "npm-run-all": "4.1.5",
34
+ "prettier": "2.8.8",
35
+ "typescript": "5.0.4"
36
+ },
37
+ "ava": {
38
+ "timeout": "3m"
39
+ },
40
+ "engines": {
41
+ "node": ">= 10"
42
+ },
43
+ "scripts": {
44
+ "artifacts": "napi artifacts",
45
+ "build": "napi build --platform --release",
46
+ "build:debug": "napi build --platform",
47
+ "prepublishOnly": "napi prepublish -t npm",
48
+ "test": "ava",
49
+ "universal": "napi universal",
50
+ "format": "run-p format:source format:rs",
51
+ "format:rs": "cargo fmt",
52
+ "format:source": "prettier . -w",
53
+ "version": "napi version && conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"
54
+ },
55
+ "packageManager": "yarn@3.6.4",
56
+ "repository": "https://github.com/NervJS/parse-css-to-stylesheet",
57
+ "optionalDependencies": {
58
+ "@tarojs/parse-css-to-stylesheet-win32-x64-msvc": "0.0.1",
59
+ "@tarojs/parse-css-to-stylesheet-darwin-x64": "0.0.1",
60
+ "@tarojs/parse-css-to-stylesheet-linux-x64-gnu": "0.0.1",
61
+ "@tarojs/parse-css-to-stylesheet-darwin-arm64": "0.0.1",
62
+ "@tarojs/parse-css-to-stylesheet-android-arm64": "0.0.1",
63
+ "@tarojs/parse-css-to-stylesheet-linux-arm64-gnu": "0.0.1",
64
+ "@tarojs/parse-css-to-stylesheet-linux-arm64-musl": "0.0.1",
65
+ "@tarojs/parse-css-to-stylesheet-win32-arm64-msvc": "0.0.1",
66
+ "@tarojs/parse-css-to-stylesheet-linux-arm-gnueabihf": "0.0.1",
67
+ "@tarojs/parse-css-to-stylesheet-linux-x64-musl": "0.0.1",
68
+ "@tarojs/parse-css-to-stylesheet-freebsd-x64": "0.0.1",
69
+ "@tarojs/parse-css-to-stylesheet-win32-ia32-msvc": "0.0.1",
70
+ "@tarojs/parse-css-to-stylesheet-android-arm-eabi": "0.0.1",
71
+ "@tarojs/parse-css-to-stylesheet-darwin-universal": "0.0.1"
72
+ }
73
+ }