@napi-rs/cli 3.0.0-alpha.1 → 3.0.0-alpha.11
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/dist/api/artifacts.js +5 -2
- package/dist/api/artifacts.js.map +1 -0
- package/dist/api/build.d.ts +1 -1
- package/dist/api/build.js +185 -35
- package/dist/api/build.js.map +1 -0
- package/dist/api/create-npm-dirs.js +1 -0
- package/dist/api/create-npm-dirs.js.map +1 -0
- package/dist/api/load-wasi-template.d.ts +1 -0
- package/dist/api/load-wasi-template.js +60 -0
- package/dist/api/load-wasi-template.js.map +1 -0
- package/dist/api/new.js +31 -12
- package/dist/api/new.js.map +1 -0
- package/dist/api/pre-publish.js +1 -0
- package/dist/api/pre-publish.js.map +1 -0
- package/dist/api/rename.js +1 -0
- package/dist/api/rename.js.map +1 -0
- package/dist/api/templates/.gitignore.d.ts +1 -1
- package/dist/api/templates/.gitignore.js +2 -0
- package/dist/api/templates/.gitignore.js.map +1 -0
- package/dist/api/templates/.npmignore.js +1 -0
- package/dist/api/templates/.npmignore.js.map +1 -0
- package/dist/api/templates/build.rs.js +1 -0
- package/dist/api/templates/build.rs.js.map +1 -0
- package/dist/api/templates/cargo.toml.js +1 -0
- package/dist/api/templates/cargo.toml.js.map +1 -0
- package/dist/api/templates/ci-template.js +64 -57
- package/dist/api/templates/ci-template.js.map +1 -0
- package/dist/api/templates/ci.yml.d.ts +1 -1
- package/dist/api/templates/ci.yml.js +10 -3
- package/dist/api/templates/ci.yml.js.map +1 -0
- package/dist/api/templates/index.js +1 -0
- package/dist/api/templates/index.js.map +1 -0
- package/dist/api/templates/js-binding.d.ts +1 -1
- package/dist/api/templates/js-binding.js +278 -109
- package/dist/api/templates/js-binding.js.map +1 -0
- package/dist/api/templates/lib.rs.js +2 -4
- package/dist/api/templates/lib.rs.js.map +1 -0
- package/dist/api/templates/package.json.js +30 -28
- package/dist/api/templates/package.json.js.map +1 -0
- package/dist/api/universalize.js +1 -0
- package/dist/api/universalize.js.map +1 -0
- package/dist/api/version.js +1 -0
- package/dist/api/version.js.map +1 -0
- package/dist/api/wasi-worker-template.d.ts +1 -0
- package/dist/api/wasi-worker-template.js +53 -0
- package/dist/api/wasi-worker-template.js.map +1 -0
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/artifacts.js +1 -0
- package/dist/commands/artifacts.js.map +1 -0
- package/dist/commands/build.js +1 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/create-npm-dirs.js +1 -0
- package/dist/commands/create-npm-dirs.js.map +1 -0
- package/dist/commands/help.js +1 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/new.js +2 -4
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pre-publish.js +1 -0
- package/dist/commands/pre-publish.js.map +1 -0
- package/dist/commands/rename.js +1 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/universalize.js +1 -0
- package/dist/commands/universalize.js.map +1 -0
- package/dist/commands/version.js +1 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/def/artifacts.js +1 -0
- package/dist/def/artifacts.js.map +1 -0
- package/dist/def/build.d.ts +24 -0
- package/dist/def/build.js +17 -0
- package/dist/def/build.js.map +1 -0
- package/dist/def/create-npm-dirs.js +1 -0
- package/dist/def/create-npm-dirs.js.map +1 -0
- package/dist/def/new.js +1 -0
- package/dist/def/new.js.map +1 -0
- package/dist/def/pre-publish.js +1 -0
- package/dist/def/pre-publish.js.map +1 -0
- package/dist/def/rename.js +1 -0
- package/dist/def/rename.js.map +1 -0
- package/dist/def/universalize.js +1 -0
- package/dist/def/universalize.js.map +1 -0
- package/dist/def/version.js +1 -0
- package/dist/def/version.js.map +1 -0
- package/dist/index.cjs +3307 -8030
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/__tests__/target.spec.js +1 -0
- package/dist/utils/__tests__/target.spec.js.map +1 -0
- package/dist/utils/__tests__/typegen.spec.js +9 -4
- package/dist/utils/__tests__/typegen.spec.js.map +1 -0
- package/dist/utils/__tests__/version.spec.js +1 -0
- package/dist/utils/__tests__/version.spec.js.map +1 -0
- package/dist/utils/cargo.js +1 -0
- package/dist/utils/cargo.js.map +1 -0
- package/dist/utils/ci.js +10 -0
- package/dist/utils/ci.js.map +1 -0
- package/dist/utils/config.d.ts +14 -2
- package/dist/utils/config.js +4 -3
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/log.js +1 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/metadata.js +1 -0
- package/dist/utils/metadata.js.map +1 -0
- package/dist/utils/misc.js +7 -1
- package/dist/utils/misc.js.map +1 -0
- package/dist/utils/target.d.ts +6 -5
- package/dist/utils/target.js +15 -3
- package/dist/utils/target.js.map +1 -0
- package/dist/utils/typegen.d.ts +4 -1
- package/dist/utils/typegen.js +27 -6
- package/dist/utils/typegen.js.map +1 -0
- package/dist/utils/version.js +3 -2
- package/dist/utils/version.js.map +1 -0
- package/package.json +48 -15
- package/src/api/artifacts.ts +7 -4
- package/src/api/build.ts +278 -44
- package/src/api/load-wasi-template.ts +62 -0
- package/src/api/new.ts +37 -14
- package/src/api/pre-publish.ts +8 -5
- package/src/api/templates/.gitignore.ts +1 -0
- package/src/api/templates/ci-template.ts +63 -57
- package/src/api/templates/ci.yml.ts +9 -6
- package/src/api/templates/js-binding.ts +270 -104
- package/src/api/templates/lib.rs.ts +1 -4
- package/src/api/templates/package.json.ts +31 -27
- package/src/api/wasi-worker-template.ts +52 -0
- package/src/commands/new.ts +1 -5
- package/src/def/build.ts +38 -0
- package/src/index.ts +2 -0
- package/src/utils/__tests__/__snapshots__/target.spec.ts.md +7 -0
- package/src/utils/__tests__/__snapshots__/target.spec.ts.snap +0 -0
- package/src/utils/__tests__/__snapshots__/typegen.spec.ts.md +555 -0
- package/src/utils/__tests__/__snapshots__/typegen.spec.ts.snap +0 -0
- package/src/utils/__tests__/__snapshots__/version.spec.ts.md +7 -7
- package/src/utils/__tests__/__snapshots__/version.spec.ts.snap +0 -0
- package/src/utils/__tests__/typegen.spec.ts +19 -4
- package/src/utils/ci.ts +9 -0
- package/src/utils/config.ts +21 -5
- package/src/utils/misc.ts +6 -1
- package/src/utils/target.ts +22 -10
- package/src/utils/typegen.ts +30 -5
- package/src/utils/version.ts +1 -1
- package/dist/def/commands/artifacts.d.ts +0 -15
- package/dist/def/commands/artifacts.js +0 -29
- package/dist/def/commands/build.d.ts +0 -53
- package/dist/def/commands/build.js +0 -105
- package/dist/def/commands/create-npm-dirs.d.ts +0 -15
- package/dist/def/commands/create-npm-dirs.js +0 -29
- package/dist/def/commands/new.d.ts +0 -27
- package/dist/def/commands/new.js +0 -53
- package/dist/def/commands/pre-publish.d.ts +0 -23
- package/dist/def/commands/pre-publish.js +0 -45
- package/dist/def/commands/rename.d.ts +0 -25
- package/dist/def/commands/rename.js +0 -49
- package/dist/def/commands/universalize.d.ts +0 -13
- package/dist/def/commands/universalize.js +0 -25
- package/dist/def/commands/version.d.ts +0 -13
- package/dist/def/commands/version.js +0 -25
- package/dist/def/options/artifacts.d.ts +0 -35
- package/dist/def/options/artifacts.js +0 -11
- package/dist/def/options/build.d.ts +0 -97
- package/dist/def/options/build.js +0 -3
- package/dist/def/options/create-npm-dirs.d.ts +0 -35
- package/dist/def/options/create-npm-dirs.js +0 -11
- package/dist/def/options/new.d.ts +0 -79
- package/dist/def/options/new.js +0 -15
- package/dist/def/options/pre-publish.d.ts +0 -65
- package/dist/def/options/pre-publish.js +0 -13
- package/dist/def/options/rename.d.ts +0 -75
- package/dist/def/options/rename.js +0 -11
- package/dist/def/options/universalize.d.ts +0 -28
- package/dist/def/options/universalize.js +0 -10
- package/dist/def/options/version.d.ts +0 -28
- package/dist/def/options/version.js +0 -10
|
@@ -1,130 +1,296 @@
|
|
|
1
|
-
|
|
1
|
+
export function createCjsBinding(
|
|
2
|
+
localName: string,
|
|
3
|
+
pkgName: string,
|
|
4
|
+
idents: string[],
|
|
5
|
+
): string {
|
|
6
|
+
return `// prettier-ignore
|
|
7
|
+
/* eslint-disable */
|
|
8
|
+
/* auto-generated by NAPI-RS */
|
|
2
9
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const { join } = require('path')
|
|
6
|
-
const { platform, arch } = process
|
|
10
|
+
const { existsSync, readFileSync } = require('fs')
|
|
11
|
+
const { join } = require('path')
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
const { platform, arch } = process
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// @ts-expect-error
|
|
24
|
-
const { glibcVersionRuntime } = process.report.getReport().header
|
|
25
|
-
return !glibcVersionRuntime
|
|
15
|
+
let nativeBinding = null
|
|
16
|
+
let localFileExisted = false
|
|
17
|
+
let loadError = null
|
|
18
|
+
|
|
19
|
+
const isMusl = () => {
|
|
20
|
+
let musl = false
|
|
21
|
+
if (process.platform === 'linux') {
|
|
22
|
+
musl = isMuslFromFilesystem()
|
|
23
|
+
if (musl === null) {
|
|
24
|
+
musl = isMuslFromReport()
|
|
25
|
+
}
|
|
26
|
+
if (musl === null) {
|
|
27
|
+
musl = isMuslFromChildProcess()
|
|
26
28
|
}
|
|
27
29
|
}
|
|
30
|
+
return musl
|
|
31
|
+
}
|
|
28
32
|
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
33
|
+
const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
|
|
34
|
+
|
|
35
|
+
const isMuslFromFilesystem = () => {
|
|
36
|
+
try {
|
|
37
|
+
return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
|
|
38
|
+
} catch {
|
|
39
|
+
return null
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const isMuslFromReport = () => {
|
|
44
|
+
const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null
|
|
45
|
+
if (!report) {
|
|
46
|
+
return null
|
|
47
|
+
}
|
|
48
|
+
if (report.header && report.header.glibcVersionRuntime) {
|
|
49
|
+
return false
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(report.sharedObjects)) {
|
|
52
|
+
if (report.sharedObjects.some(isFileMusl)) {
|
|
53
|
+
return true
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return false
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const isMuslFromChildProcess = () => {
|
|
60
|
+
try {
|
|
61
|
+
return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
|
|
62
|
+
} catch (e) {
|
|
63
|
+
// If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
|
|
64
|
+
return false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
switch (platform) {
|
|
69
|
+
case 'android':
|
|
70
|
+
switch (arch) {
|
|
71
|
+
case 'arm64':
|
|
72
|
+
localFileExisted = existsSync(join(__dirname, '${localName}.android-arm64.node'))
|
|
73
|
+
try {
|
|
74
|
+
if (localFileExisted) {
|
|
75
|
+
nativeBinding = require('./${localName}.android-arm64.node')
|
|
76
|
+
} else {
|
|
77
|
+
nativeBinding = require('${pkgName}-android-arm64')
|
|
78
|
+
}
|
|
79
|
+
} catch (e) {
|
|
80
|
+
loadError = e
|
|
81
|
+
}
|
|
82
|
+
break
|
|
83
|
+
case 'arm':
|
|
84
|
+
localFileExisted = existsSync(join(__dirname, '${localName}.android-arm-eabi.node'))
|
|
85
|
+
try {
|
|
86
|
+
if (localFileExisted) {
|
|
87
|
+
nativeBinding = require('./${localName}.android-arm-eabi.node')
|
|
88
|
+
} else {
|
|
89
|
+
nativeBinding = require('${pkgName}-android-arm-eabi')
|
|
90
|
+
}
|
|
91
|
+
} catch (e) {
|
|
92
|
+
loadError = e
|
|
93
|
+
}
|
|
94
|
+
break
|
|
95
|
+
default:
|
|
96
|
+
throw new Error(\`Unsupported architecture on Android \${arch}\`)
|
|
97
|
+
}
|
|
98
|
+
break
|
|
99
|
+
case 'win32':
|
|
100
|
+
switch (arch) {
|
|
101
|
+
case 'x64':
|
|
102
|
+
localFileExisted = existsSync(
|
|
103
|
+
join(__dirname, '${localName}.win32-x64-msvc.node')
|
|
104
|
+
)
|
|
105
|
+
try {
|
|
106
|
+
if (localFileExisted) {
|
|
107
|
+
nativeBinding = require('./${localName}.win32-x64-msvc.node')
|
|
74
108
|
} else {
|
|
75
|
-
|
|
109
|
+
nativeBinding = require('${pkgName}-win32-x64-msvc')
|
|
76
110
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
111
|
+
} catch (e) {
|
|
112
|
+
loadError = e
|
|
113
|
+
}
|
|
114
|
+
break
|
|
115
|
+
case 'ia32':
|
|
116
|
+
localFileExisted = existsSync(
|
|
117
|
+
join(__dirname, '${localName}.win32-ia32-msvc.node')
|
|
118
|
+
)
|
|
119
|
+
try {
|
|
120
|
+
if (localFileExisted) {
|
|
121
|
+
nativeBinding = require('./${localName}.win32-ia32-msvc.node')
|
|
81
122
|
} else {
|
|
82
|
-
|
|
123
|
+
nativeBinding = require('${pkgName}-win32-ia32-msvc')
|
|
83
124
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
125
|
+
} catch (e) {
|
|
126
|
+
loadError = e
|
|
127
|
+
}
|
|
128
|
+
break
|
|
129
|
+
case 'arm64':
|
|
130
|
+
localFileExisted = existsSync(
|
|
131
|
+
join(__dirname, '${localName}.win32-arm64-msvc.node')
|
|
132
|
+
)
|
|
133
|
+
try {
|
|
134
|
+
if (localFileExisted) {
|
|
135
|
+
nativeBinding = require('./${localName}.win32-arm64-msvc.node')
|
|
136
|
+
} else {
|
|
137
|
+
nativeBinding = require('${pkgName}-win32-arm64-msvc')
|
|
138
|
+
}
|
|
139
|
+
} catch (e) {
|
|
140
|
+
loadError = e
|
|
141
|
+
}
|
|
142
|
+
break
|
|
143
|
+
default:
|
|
144
|
+
throw new Error(\`Unsupported architecture on Windows: \${arch}\`)
|
|
145
|
+
}
|
|
146
|
+
break
|
|
147
|
+
case 'darwin':
|
|
148
|
+
localFileExisted = existsSync(join(__dirname, '${localName}.darwin-universal.node'))
|
|
149
|
+
try {
|
|
150
|
+
if (localFileExisted) {
|
|
151
|
+
nativeBinding = require('./${localName}.darwin-universal.node')
|
|
152
|
+
} else {
|
|
153
|
+
nativeBinding = require('${pkgName}-darwin-universal')
|
|
88
154
|
}
|
|
89
155
|
break
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
156
|
+
} catch {}
|
|
157
|
+
switch (arch) {
|
|
158
|
+
case 'x64':
|
|
159
|
+
localFileExisted = existsSync(join(__dirname, '${localName}.darwin-x64.node'))
|
|
160
|
+
try {
|
|
161
|
+
if (localFileExisted) {
|
|
162
|
+
nativeBinding = require('./${localName}.darwin-x64.node')
|
|
163
|
+
} else {
|
|
164
|
+
nativeBinding = require('${pkgName}-darwin-x64')
|
|
165
|
+
}
|
|
166
|
+
} catch (e) {
|
|
167
|
+
loadError = e
|
|
168
|
+
}
|
|
169
|
+
break
|
|
170
|
+
case 'arm64':
|
|
171
|
+
localFileExisted = existsSync(
|
|
172
|
+
join(__dirname, '${localName}.darwin-arm64.node')
|
|
173
|
+
)
|
|
174
|
+
try {
|
|
175
|
+
if (localFileExisted) {
|
|
176
|
+
nativeBinding = require('./${localName}.darwin-arm64.node')
|
|
177
|
+
} else {
|
|
178
|
+
nativeBinding = require('${pkgName}-darwin-arm64')
|
|
179
|
+
}
|
|
180
|
+
} catch (e) {
|
|
181
|
+
loadError = e
|
|
182
|
+
}
|
|
183
|
+
break
|
|
184
|
+
default:
|
|
185
|
+
throw new Error(\`Unsupported architecture on macOS: \${arch}\`)
|
|
186
|
+
}
|
|
187
|
+
break
|
|
188
|
+
case 'freebsd':
|
|
189
|
+
if (arch !== 'x64') {
|
|
190
|
+
throw new Error(\`Unsupported architecture on FreeBSD: \${arch}\`)
|
|
191
|
+
}
|
|
192
|
+
localFileExisted = existsSync(join(__dirname, '${localName}.freebsd-x64.node'))
|
|
99
193
|
try {
|
|
100
|
-
if (
|
|
101
|
-
nativeBinding = require(
|
|
194
|
+
if (localFileExisted) {
|
|
195
|
+
nativeBinding = require('./${localName}.freebsd-x64.node')
|
|
102
196
|
} else {
|
|
103
|
-
nativeBinding = require(
|
|
197
|
+
nativeBinding = require('${pkgName}-freebsd-x64')
|
|
104
198
|
}
|
|
105
199
|
} catch (e) {
|
|
106
200
|
loadError = e
|
|
107
|
-
continue
|
|
108
201
|
}
|
|
109
|
-
|
|
110
|
-
loadError = null
|
|
111
202
|
break
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
203
|
+
case 'linux':
|
|
204
|
+
switch (arch) {
|
|
205
|
+
case 'x64':
|
|
206
|
+
if (isMusl()) {
|
|
207
|
+
localFileExisted = existsSync(
|
|
208
|
+
join(__dirname, '${localName}.linux-x64-musl.node')
|
|
209
|
+
)
|
|
210
|
+
try {
|
|
211
|
+
if (localFileExisted) {
|
|
212
|
+
nativeBinding = require('./${localName}.linux-x64-musl.node')
|
|
213
|
+
} else {
|
|
214
|
+
nativeBinding = require('${pkgName}-linux-x64-musl')
|
|
215
|
+
}
|
|
216
|
+
} catch (e) {
|
|
217
|
+
loadError = e
|
|
218
|
+
}
|
|
219
|
+
} else {
|
|
220
|
+
localFileExisted = existsSync(
|
|
221
|
+
join(__dirname, '${localName}.linux-x64-gnu.node')
|
|
222
|
+
)
|
|
223
|
+
try {
|
|
224
|
+
if (localFileExisted) {
|
|
225
|
+
nativeBinding = require('./${localName}.linux-x64-gnu.node')
|
|
226
|
+
} else {
|
|
227
|
+
nativeBinding = require('${pkgName}-linux-x64-gnu')
|
|
228
|
+
}
|
|
229
|
+
} catch (e) {
|
|
230
|
+
loadError = e
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
break
|
|
234
|
+
case 'arm64':
|
|
235
|
+
if (isMusl()) {
|
|
236
|
+
localFileExisted = existsSync(
|
|
237
|
+
join(__dirname, '${localName}.linux-arm64-musl.node')
|
|
238
|
+
)
|
|
239
|
+
try {
|
|
240
|
+
if (localFileExisted) {
|
|
241
|
+
nativeBinding = require('./${localName}.linux-arm64-musl.node')
|
|
242
|
+
} else {
|
|
243
|
+
nativeBinding = require('${pkgName}-linux-arm64-musl')
|
|
244
|
+
}
|
|
245
|
+
} catch (e) {
|
|
246
|
+
loadError = e
|
|
247
|
+
}
|
|
248
|
+
} else {
|
|
249
|
+
localFileExisted = existsSync(
|
|
250
|
+
join(__dirname, '${localName}.linux-arm64-gnu.node')
|
|
251
|
+
)
|
|
252
|
+
try {
|
|
253
|
+
if (localFileExisted) {
|
|
254
|
+
nativeBinding = require('./${localName}.linux-arm64-gnu.node')
|
|
255
|
+
} else {
|
|
256
|
+
nativeBinding = require('${pkgName}-linux-arm64-gnu')
|
|
257
|
+
}
|
|
258
|
+
} catch (e) {
|
|
259
|
+
loadError = e
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
break
|
|
263
|
+
case 'arm':
|
|
264
|
+
localFileExisted = existsSync(
|
|
265
|
+
join(__dirname, '${localName}.linux-arm-gnueabihf.node')
|
|
266
|
+
)
|
|
267
|
+
try {
|
|
268
|
+
if (localFileExisted) {
|
|
269
|
+
nativeBinding = require('./${localName}.linux-arm-gnueabihf.node')
|
|
270
|
+
} else {
|
|
271
|
+
nativeBinding = require('${pkgName}-linux-arm-gnueabihf')
|
|
272
|
+
}
|
|
273
|
+
} catch (e) {
|
|
274
|
+
loadError = e
|
|
275
|
+
}
|
|
276
|
+
break
|
|
277
|
+
default:
|
|
278
|
+
throw new Error(\`Unsupported architecture on Linux: \${arch}\`)
|
|
117
279
|
}
|
|
280
|
+
break
|
|
281
|
+
default:
|
|
282
|
+
throw new Error(\`Unsupported OS: \${platform}, architecture: \${arch}\`)
|
|
283
|
+
}
|
|
118
284
|
|
|
119
|
-
|
|
285
|
+
if (!nativeBinding) {
|
|
286
|
+
if (loadError) {
|
|
287
|
+
throw loadError
|
|
120
288
|
}
|
|
121
|
-
|
|
122
|
-
return nativeBinding
|
|
289
|
+
throw new Error(\`Failed to load native binding\`)
|
|
123
290
|
}
|
|
124
291
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
module.exports = loadNapiModule('${localName}', '${pkgName}')
|
|
292
|
+
${idents
|
|
293
|
+
.map((ident) => `module.exports.${ident} = nativeBinding.${ident}`)
|
|
294
|
+
.join('\n')}
|
|
129
295
|
`
|
|
130
296
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { CommonPackageJsonFields } from '../../utils/config.js'
|
|
2
|
+
|
|
1
3
|
export const createPackageJson = ({
|
|
2
4
|
name,
|
|
3
5
|
binaryName,
|
|
@@ -13,32 +15,34 @@ export const createPackageJson = ({
|
|
|
13
15
|
engineRequirement: string
|
|
14
16
|
cliVersion: string
|
|
15
17
|
}) => {
|
|
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
|
-
|
|
18
|
+
const content: CommonPackageJsonFields = {
|
|
19
|
+
name,
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
license,
|
|
22
|
+
engines: {
|
|
23
|
+
node: engineRequirement,
|
|
24
|
+
},
|
|
25
|
+
type: 'commonjs',
|
|
26
|
+
main: 'index.js',
|
|
27
|
+
types: 'index.d.ts',
|
|
28
|
+
module: undefined,
|
|
29
|
+
exports: undefined,
|
|
30
|
+
napi: {
|
|
31
|
+
binaryName,
|
|
32
|
+
targets,
|
|
33
|
+
},
|
|
34
|
+
scripts: {
|
|
35
|
+
test: 'node -e "assert(require(\'.\').sum(1, 2) === 3)"',
|
|
36
|
+
build: 'napi build --release --platform --strip',
|
|
37
|
+
'build:debug': 'napi build',
|
|
38
|
+
prepublishOnly: 'napi prepublish -t npm',
|
|
39
|
+
artifacts: 'napi artifacts',
|
|
40
|
+
version: 'napi version',
|
|
41
|
+
},
|
|
42
|
+
devDependencies: {
|
|
43
|
+
'@napi-rs/cli': `^${cliVersion}`,
|
|
44
|
+
},
|
|
42
45
|
}
|
|
43
|
-
|
|
46
|
+
|
|
47
|
+
return JSON.stringify(content, null, 2)
|
|
44
48
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export const WASI_WORKER_TEMPLATE = `import fs from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { parentPort, Worker } from "node:worker_threads";
|
|
4
|
+
|
|
5
|
+
import { instantiateNapiModuleSync, MessageHandler } from "@emnapi/core";
|
|
6
|
+
import { WASI } from "@tybys/wasm-util";
|
|
7
|
+
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
|
|
10
|
+
if (parentPort) {
|
|
11
|
+
parentPort.on("message", (data) => {
|
|
12
|
+
globalThis.onmessage({ data });
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
Object.assign(globalThis, {
|
|
17
|
+
self: globalThis,
|
|
18
|
+
require,
|
|
19
|
+
Worker,
|
|
20
|
+
importScripts: function (f) {
|
|
21
|
+
;(0, eval)(fs.readFileSync(f, "utf8") + "//# sourceURL=" + f);
|
|
22
|
+
},
|
|
23
|
+
postMessage: function (msg) {
|
|
24
|
+
if (parentPort) {
|
|
25
|
+
parentPort.postMessage(msg);
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const handler = new MessageHandler({
|
|
31
|
+
onLoad({ wasmModule, wasmMemory }) {
|
|
32
|
+
const wasi = new WASI({ fs });
|
|
33
|
+
|
|
34
|
+
return instantiateNapiModuleSync(wasmModule, {
|
|
35
|
+
childThread: true,
|
|
36
|
+
wasi,
|
|
37
|
+
overwriteImports(importObject) {
|
|
38
|
+
importObject.env = {
|
|
39
|
+
...importObject.env,
|
|
40
|
+
...importObject.napi,
|
|
41
|
+
...importObject.emnapi,
|
|
42
|
+
memory: wasmMemory
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
globalThis.onmessage = function (e) {
|
|
50
|
+
handler.handle(e);
|
|
51
|
+
};
|
|
52
|
+
`
|
package/src/commands/new.ts
CHANGED
|
@@ -94,10 +94,6 @@ export class NewCommand extends BaseNewCommand {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
private async fetchTargets(): Promise<TargetTriple[]> {
|
|
97
|
-
if (this.enableDefaultTargets) {
|
|
98
|
-
return DEFAULT_TARGETS.concat()
|
|
99
|
-
}
|
|
100
|
-
|
|
101
97
|
if (this.enableAllTargets) {
|
|
102
98
|
return AVAILABLE_TARGETS.concat()
|
|
103
99
|
}
|
|
@@ -107,7 +103,7 @@ export class NewCommand extends BaseNewCommand {
|
|
|
107
103
|
type: 'checkbox',
|
|
108
104
|
loop: false,
|
|
109
105
|
message: 'Choose target(s) your crate will be compiled to',
|
|
110
|
-
default: DEFAULT_TARGETS,
|
|
106
|
+
default: this.enableDefaultTargets ? DEFAULT_TARGETS : [],
|
|
111
107
|
choices: AVAILABLE_TARGETS,
|
|
112
108
|
})
|
|
113
109
|
|
package/src/def/build.ts
CHANGED
|
@@ -47,6 +47,10 @@ export abstract class BaseBuildCommand extends Command {
|
|
|
47
47
|
'Package name in generated js binding file. Only works with `--platform` flag',
|
|
48
48
|
})
|
|
49
49
|
|
|
50
|
+
constEnum?: boolean = Option.Boolean('--const-enum', {
|
|
51
|
+
description: 'Whether generate const enum for typescript bindings',
|
|
52
|
+
})
|
|
53
|
+
|
|
50
54
|
jsBinding?: string = Option.String('--js', {
|
|
51
55
|
description:
|
|
52
56
|
'Path and filename of generated JS binding file. Only works with `--platform` flag. Relative to `--output_dir`.',
|
|
@@ -92,11 +96,25 @@ export abstract class BaseBuildCommand extends Command {
|
|
|
92
96
|
description: 'Build the specified library or the one at cwd',
|
|
93
97
|
})
|
|
94
98
|
|
|
99
|
+
profile?: string = Option.String('--profile', {
|
|
100
|
+
description: 'Build artifacts with the specified profile',
|
|
101
|
+
})
|
|
102
|
+
|
|
95
103
|
crossCompile?: boolean = Option.Boolean('--cross-compile,-x', {
|
|
96
104
|
description:
|
|
97
105
|
'[experimental] cross-compile for the specified target with `cargo-xwin` on windows and `cargo-zigbuild` on other platform',
|
|
98
106
|
})
|
|
99
107
|
|
|
108
|
+
useCross?: boolean = Option.Boolean('--use-cross', {
|
|
109
|
+
description:
|
|
110
|
+
'[experimental] use [cross](https://github.com/cross-rs/cross) instead of `cargo`',
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
useNapiCross?: boolean = Option.Boolean('--use-napi-cross', {
|
|
114
|
+
description:
|
|
115
|
+
'[experimental] use @napi-rs/cross-toolchain to cross-compile Linux arm/arm64/x64 gnu targets',
|
|
116
|
+
})
|
|
117
|
+
|
|
100
118
|
watch?: boolean = Option.Boolean('--watch,-w', {
|
|
101
119
|
description:
|
|
102
120
|
'watch the crate changes and build continiously with `cargo-watch` crates',
|
|
@@ -124,6 +142,7 @@ export abstract class BaseBuildCommand extends Command {
|
|
|
124
142
|
outputDir: this.outputDir,
|
|
125
143
|
platform: this.platform,
|
|
126
144
|
jsPackageName: this.jsPackageName,
|
|
145
|
+
constEnum: this.constEnum,
|
|
127
146
|
jsBinding: this.jsBinding,
|
|
128
147
|
noJsBinding: this.noJsBinding,
|
|
129
148
|
dts: this.dts,
|
|
@@ -134,7 +153,10 @@ export abstract class BaseBuildCommand extends Command {
|
|
|
134
153
|
verbose: this.verbose,
|
|
135
154
|
bin: this.bin,
|
|
136
155
|
package: this.package,
|
|
156
|
+
profile: this.profile,
|
|
137
157
|
crossCompile: this.crossCompile,
|
|
158
|
+
useCross: this.useCross,
|
|
159
|
+
useNapiCross: this.useNapiCross,
|
|
138
160
|
watch: this.watch,
|
|
139
161
|
features: this.features,
|
|
140
162
|
allFeatures: this.allFeatures,
|
|
@@ -179,6 +201,10 @@ export interface BuildOptions {
|
|
|
179
201
|
* Package name in generated js binding file. Only works with `--platform` flag
|
|
180
202
|
*/
|
|
181
203
|
jsPackageName?: string
|
|
204
|
+
/**
|
|
205
|
+
* Whether generate const enum for typescript bindings
|
|
206
|
+
*/
|
|
207
|
+
constEnum?: boolean
|
|
182
208
|
/**
|
|
183
209
|
* Path and filename of generated JS binding file. Only works with `--platform` flag. Relative to `--output_dir`.
|
|
184
210
|
*/
|
|
@@ -219,10 +245,22 @@ export interface BuildOptions {
|
|
|
219
245
|
* Build the specified library or the one at cwd
|
|
220
246
|
*/
|
|
221
247
|
package?: string
|
|
248
|
+
/**
|
|
249
|
+
* Build artifacts with the specified profile
|
|
250
|
+
*/
|
|
251
|
+
profile?: string
|
|
222
252
|
/**
|
|
223
253
|
* [experimental] cross-compile for the specified target with `cargo-xwin` on windows and `cargo-zigbuild` on other platform
|
|
224
254
|
*/
|
|
225
255
|
crossCompile?: boolean
|
|
256
|
+
/**
|
|
257
|
+
* [experimental] use [cross](https://github.com/cross-rs/cross) instead of `cargo`
|
|
258
|
+
*/
|
|
259
|
+
useCross?: boolean
|
|
260
|
+
/**
|
|
261
|
+
* [experimental] use @napi-rs/cross-toolchain to cross-compile Linux arm/arm64/x64 gnu targets
|
|
262
|
+
*/
|
|
263
|
+
useNapiCross?: boolean
|
|
226
264
|
/**
|
|
227
265
|
* watch the crate changes and build continiously with `cargo-watch` crates
|
|
228
266
|
*/
|
package/src/index.ts
CHANGED
|
@@ -107,4 +107,11 @@ Generated by [AVA](https://avajs.dev).
|
|
|
107
107
|
platformArchABI: 'darwin-universal',
|
|
108
108
|
triple: 'universal-apple-darwin',
|
|
109
109
|
},
|
|
110
|
+
{
|
|
111
|
+
abi: 'gnu',
|
|
112
|
+
arch: 'riscv64',
|
|
113
|
+
platform: 'linux',
|
|
114
|
+
platformArchABI: 'linux-riscv64-gnu',
|
|
115
|
+
triple: 'riscv64gc-unknown-linux-gnu',
|
|
116
|
+
},
|
|
110
117
|
]
|
|
Binary file
|