@napi-rs/cli 3.0.0-alpha.0 → 3.0.0-alpha.10
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/cli.mjs +6 -3
- 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 +129 -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 +2 -1
- 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 +69 -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.d.ts +1 -0
- package/dist/cli.js +2 -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 +18 -0
- package/dist/def/build.js +13 -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 +3205 -7977
- 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 +14 -2
- 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 +47 -15
- package/src/api/artifacts.ts +7 -4
- package/src/api/build.ts +180 -44
- package/src/api/load-wasi-template.ts +62 -0
- package/src/api/new.ts +1 -4
- package/src/api/pre-publish.ts +8 -5
- package/src/api/templates/.gitignore.ts +1 -0
- package/src/api/templates/ci-template.ts +68 -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/cli.ts +2 -0
- package/src/commands/new.ts +1 -5
- package/src/def/build.ts +28 -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 +21 -9
- 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/cli.ts
CHANGED
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,20 @@ 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
|
+
|
|
100
113
|
watch?: boolean = Option.Boolean('--watch,-w', {
|
|
101
114
|
description:
|
|
102
115
|
'watch the crate changes and build continiously with `cargo-watch` crates',
|
|
@@ -124,6 +137,7 @@ export abstract class BaseBuildCommand extends Command {
|
|
|
124
137
|
outputDir: this.outputDir,
|
|
125
138
|
platform: this.platform,
|
|
126
139
|
jsPackageName: this.jsPackageName,
|
|
140
|
+
constEnum: this.constEnum,
|
|
127
141
|
jsBinding: this.jsBinding,
|
|
128
142
|
noJsBinding: this.noJsBinding,
|
|
129
143
|
dts: this.dts,
|
|
@@ -134,7 +148,9 @@ export abstract class BaseBuildCommand extends Command {
|
|
|
134
148
|
verbose: this.verbose,
|
|
135
149
|
bin: this.bin,
|
|
136
150
|
package: this.package,
|
|
151
|
+
profile: this.profile,
|
|
137
152
|
crossCompile: this.crossCompile,
|
|
153
|
+
useCross: this.useCross,
|
|
138
154
|
watch: this.watch,
|
|
139
155
|
features: this.features,
|
|
140
156
|
allFeatures: this.allFeatures,
|
|
@@ -179,6 +195,10 @@ export interface BuildOptions {
|
|
|
179
195
|
* Package name in generated js binding file. Only works with `--platform` flag
|
|
180
196
|
*/
|
|
181
197
|
jsPackageName?: string
|
|
198
|
+
/**
|
|
199
|
+
* Whether generate const enum for typescript bindings
|
|
200
|
+
*/
|
|
201
|
+
constEnum?: boolean
|
|
182
202
|
/**
|
|
183
203
|
* Path and filename of generated JS binding file. Only works with `--platform` flag. Relative to `--output_dir`.
|
|
184
204
|
*/
|
|
@@ -219,10 +239,18 @@ export interface BuildOptions {
|
|
|
219
239
|
* Build the specified library or the one at cwd
|
|
220
240
|
*/
|
|
221
241
|
package?: string
|
|
242
|
+
/**
|
|
243
|
+
* Build artifacts with the specified profile
|
|
244
|
+
*/
|
|
245
|
+
profile?: string
|
|
222
246
|
/**
|
|
223
247
|
* [experimental] cross-compile for the specified target with `cargo-xwin` on windows and `cargo-zigbuild` on other platform
|
|
224
248
|
*/
|
|
225
249
|
crossCompile?: boolean
|
|
250
|
+
/**
|
|
251
|
+
* [experimental] use [cross](https://github.com/cross-rs/cross) instead of `cargo`
|
|
252
|
+
*/
|
|
253
|
+
useCross?: boolean
|
|
226
254
|
/**
|
|
227
255
|
* watch the crate changes and build continiously with `cargo-watch` crates
|
|
228
256
|
*/
|
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
|