@napi-rs/cli 3.0.0-alpha.62 → 3.0.0-alpha.64

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 (38) hide show
  1. package/dist/api/build.js +7 -6
  2. package/dist/api/build.js.map +1 -1
  3. package/dist/api/create-npm-dirs.js +1 -1
  4. package/dist/api/create-npm-dirs.js.map +1 -1
  5. package/dist/api/templates/cargo.toml.js +1 -0
  6. package/dist/api/templates/cargo.toml.js.map +1 -1
  7. package/dist/api/templates/ci-template.js +26 -13
  8. package/dist/api/templates/ci-template.js.map +1 -1
  9. package/dist/api/templates/js-binding.d.ts +1 -0
  10. package/dist/api/templates/js-binding.js +28 -10
  11. package/dist/api/templates/js-binding.js.map +1 -1
  12. package/dist/commands/new.js +12 -34
  13. package/dist/commands/new.js.map +1 -1
  14. package/dist/def/build.d.ts +6 -0
  15. package/dist/def/build.js +4 -0
  16. package/dist/def/build.js.map +1 -1
  17. package/dist/index.cjs +2376 -2667
  18. package/dist/utils/cargo.js +1 -1
  19. package/dist/utils/cargo.js.map +1 -1
  20. package/dist/utils/config.d.ts +1 -1
  21. package/dist/utils/typegen.js +25 -11
  22. package/dist/utils/typegen.js.map +1 -1
  23. package/package.json +15 -15
  24. package/src/api/build.ts +7 -6
  25. package/src/api/create-npm-dirs.ts +1 -1
  26. package/src/api/templates/cargo.toml.ts +1 -0
  27. package/src/api/templates/ci-template.ts +26 -13
  28. package/src/api/templates/js-binding.ts +35 -10
  29. package/src/commands/new.ts +30 -52
  30. package/src/def/build.ts +10 -0
  31. package/src/utils/__tests__/__snapshots__/config.spec.ts.snap +0 -0
  32. package/src/utils/__tests__/__snapshots__/target.spec.ts.snap +0 -0
  33. package/src/utils/__tests__/__snapshots__/typegen.spec.ts.md +0 -2
  34. package/src/utils/__tests__/__snapshots__/typegen.spec.ts.snap +0 -0
  35. package/src/utils/__tests__/__snapshots__/version.spec.ts.snap +0 -0
  36. package/src/utils/cargo.ts +1 -1
  37. package/src/utils/config.ts +1 -1
  38. package/src/utils/typegen.ts +48 -32
@@ -26,7 +26,7 @@ function detectCargoBinary(bin) {
26
26
  debug('Cargo binary detected: %s', bin);
27
27
  return true;
28
28
  }
29
- catch (e) {
29
+ catch {
30
30
  debug('Cargo binary not detected: %s', bin);
31
31
  return false;
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cargo.js","sourceRoot":"","sources":["../../src/utils/cargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,GAAW;IAC7D,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAA;QAC1C,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,EAAE;YACzD,KAAK,EAAE,CAAC;SACT,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;IACxC,IAAI,CAAC;QACH,QAAQ,CAAC,cAAc,GAAG,EAAE,EAAE;YAC5B,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAA;QACF,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;QAC3C,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cargo.js","sourceRoot":"","sources":["../../src/utils/cargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,GAAW;IAC7D,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAA;QAC1C,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE;YAChC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,EAAE;YACzD,KAAK,EAAE,CAAC;SACT,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;IACxC,IAAI,CAAC;QACH,QAAQ,CAAC,cAAc,GAAG,EAAE,EAAE;YAC5B,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAA;QACF,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;QAC3C,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -110,7 +110,7 @@ export interface CommonPackageJsonFields {
110
110
  timeout?: string;
111
111
  };
112
112
  }
113
- export type NapiConfig = Required<Pick<UserNapiConfig, 'binaryName' | 'packageName' | 'npmClient'>> & Pick<UserNapiConfig, 'wasm' | 'dtsHeader' | 'dtsHeaderFile'> & {
113
+ export type NapiConfig = Required<Pick<UserNapiConfig, 'binaryName' | 'packageName' | 'npmClient'>> & Pick<UserNapiConfig, 'wasm' | 'dtsHeader' | 'dtsHeaderFile' | 'constEnum'> & {
114
114
  targets: Target[];
115
115
  packageJson: CommonPackageJsonFields;
116
116
  };
@@ -10,6 +10,7 @@ var TypeDefKind;
10
10
  TypeDefKind["Enum"] = "enum";
11
11
  TypeDefKind["StringEnum"] = "string_enum";
12
12
  TypeDefKind["Interface"] = "interface";
13
+ TypeDefKind["Type"] = "type";
13
14
  TypeDefKind["Fn"] = "fn";
14
15
  TypeDefKind["Struct"] = "struct";
15
16
  TypeDefKind["Impl"] = "impl";
@@ -20,6 +21,9 @@ function prettyPrint(line, constEnum, ident, ambient = false) {
20
21
  case TypeDefKind.Interface:
21
22
  s += `export interface ${line.name} {\n${line.def}\n}`;
22
23
  break;
24
+ case TypeDefKind.Type:
25
+ s += `export type ${line.name} = \n${line.def}`;
26
+ break;
23
27
  case TypeDefKind.Enum:
24
28
  const enumName = constEnum ? 'const enum' : 'enum';
25
29
  s += `${exportDeclare(ambient)} ${enumName} ${line.name} {\n${line.def}\n}`;
@@ -57,11 +61,11 @@ export async function processTypeDef(intermediateTypeFile, constEnum, header) {
57
61
  const defs = await readIntermediateTypeFile(intermediateTypeFile);
58
62
  const groupedDefs = preprocessTypeDef(defs);
59
63
  header = header ?? '';
60
- let dts = '';
61
- sortBy(Array.from(groupedDefs), ([namespace]) => namespace).forEach(([namespace, defs]) => {
64
+ const dts = sortBy(Array.from(groupedDefs), ([namespace]) => namespace)
65
+ .map(([namespace, defs]) => {
62
66
  if (namespace === TOP_LEVEL_NAMESPACE) {
63
- for (const def of defs) {
64
- dts += prettyPrint(def, constEnum, 0) + '\n\n';
67
+ return defs
68
+ .map((def) => {
65
69
  switch (def.kind) {
66
70
  case TypeDefKind.Const:
67
71
  case TypeDefKind.Enum:
@@ -77,17 +81,22 @@ export async function processTypeDef(intermediateTypeFile, constEnum, header) {
77
81
  default:
78
82
  break;
79
83
  }
80
- }
84
+ return prettyPrint(def, constEnum, 0);
85
+ })
86
+ .join('\n\n');
81
87
  }
82
88
  else {
83
89
  exports.push(namespace);
84
- dts += `export declare namespace ${namespace} {\n`;
90
+ let declaration = '';
91
+ declaration += `export declare namespace ${namespace} {\n`;
85
92
  for (const def of defs) {
86
- dts += prettyPrint(def, constEnum, 2, true) + '\n';
93
+ declaration += prettyPrint(def, constEnum, 2, true) + '\n';
87
94
  }
88
- dts += '}\n\n';
95
+ declaration += '}';
96
+ return declaration;
89
97
  }
90
- });
98
+ })
99
+ .join('\n\n') + '\n';
91
100
  if (dts.indexOf('ExternalObject<') > -1) {
92
101
  header += `
93
102
  export declare class ExternalObject<T> {
@@ -175,13 +184,18 @@ export function correctStringIdent(src, ident) {
175
184
  const isInMultilineComment = line.startsWith('*');
176
185
  const isClosingBracket = line.endsWith('}');
177
186
  const isOpeningBracket = line.endsWith('{');
187
+ const isTypeDeclaration = line.endsWith('=');
188
+ const isTypeVariant = line.startsWith('|');
178
189
  let rightIndent = ident;
179
- if (isOpeningBracket && !isInMultilineComment) {
190
+ if ((isOpeningBracket || isTypeDeclaration) && !isInMultilineComment) {
180
191
  bracketDepth += 1;
181
192
  rightIndent += (bracketDepth - 1) * 2;
182
193
  }
183
194
  else {
184
- if (isClosingBracket && bracketDepth > 0 && !isInMultilineComment) {
195
+ if (isClosingBracket &&
196
+ bracketDepth > 0 &&
197
+ !isInMultilineComment &&
198
+ !isTypeVariant) {
185
199
  bracketDepth -= 1;
186
200
  }
187
201
  rightIndent += bracketDepth * 2;
@@ -1 +1 @@
1
- {"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/utils/typegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/utils/typegen.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@napi-rs/cli",
3
- "version": "3.0.0-alpha.62",
3
+ "version": "3.0.0-alpha.64",
4
4
  "description": "Cli tools for napi-rs",
5
5
  "author": "LongYinan <lynweklm@gmail.com>",
6
6
  "homepage": "https://github.com/napi-rs/napi-rs",
@@ -67,37 +67,37 @@
67
67
  "url": "https://github.com/napi-rs/napi-rs/issues"
68
68
  },
69
69
  "dependencies": {
70
+ "@inquirer/prompts": "^7.0.0",
70
71
  "@napi-rs/cross-toolchain": "^0.0.16",
71
72
  "@napi-rs/wasm-tools": "^0.0.2",
72
- "@octokit/rest": "^21.0.0",
73
+ "@octokit/rest": "^21.0.2",
73
74
  "clipanion": "^3.2.1",
74
75
  "colorette": "^2.0.20",
75
- "debug": "^4.3.4",
76
- "emnapi": "^1.2.0",
77
- "inquirer": "^10.0.0",
76
+ "debug": "^4.3.7",
77
+ "emnapi": "^1.3.1",
78
78
  "js-yaml": "^4.1.0",
79
79
  "lodash-es": "^4.17.21",
80
- "semver": "^7.5.4",
80
+ "semver": "^7.6.3",
81
81
  "toml": "^3.0.0",
82
82
  "typanion": "^3.14.0",
83
83
  "wasm-sjlj": "^1.0.5"
84
84
  },
85
85
  "devDependencies": {
86
- "@emnapi/core": "^1.1.0",
87
- "@emnapi/runtime": "^1.1.0",
86
+ "@emnapi/core": "^1.3.1",
87
+ "@emnapi/runtime": "^1.3.1",
88
88
  "@types/debug": "^4.1.12",
89
89
  "@types/inquirer": "^9.0.7",
90
90
  "@types/js-yaml": "^4.0.9",
91
91
  "@types/lodash-es": "^4.17.12",
92
- "@types/node": "^20.11.13",
92
+ "@types/node": "^22.7.5",
93
93
  "@types/semver": "^7.5.8",
94
- "ava": "^6.1.1",
94
+ "ava": "^6.1.3",
95
95
  "env-paths": "^3.0.0",
96
- "esbuild": "^0.23.0",
97
- "prettier": "^3.2.4",
96
+ "esbuild": "^0.24.0",
97
+ "prettier": "^3.3.3",
98
98
  "ts-node": "^10.9.2",
99
- "tslib": "^2.6.2",
100
- "typescript": "^5.4.4"
99
+ "tslib": "^2.7.0",
100
+ "typescript": "^5.6.3"
101
101
  },
102
102
  "peerDependencies": {
103
103
  "@emnapi/runtime": "^1.1.0",
@@ -129,5 +129,5 @@
129
129
  "**/__tests__/**/*.spec.ts"
130
130
  ]
131
131
  },
132
- "gitHead": "09ad8e762e7f7955187cb1123ec9efd89ac99263"
132
+ "gitHead": "909c7fb06400261d6a5f8317efaa5c9c034ef464"
133
133
  }
package/src/api/build.ts CHANGED
@@ -32,7 +32,7 @@ import {
32
32
  writeFileAsync,
33
33
  } from '../utils/index.js'
34
34
 
35
- import { createCjsBinding } from './templates/index.js'
35
+ import { createCjsBinding, createEsmBinding } from './templates/index.js'
36
36
  import {
37
37
  createWasiBinding,
38
38
  createWasiBrowserBinding,
@@ -840,9 +840,9 @@ class Builder {
840
840
 
841
841
  const { dts, exports } = await processTypeDef(
842
842
  this.envs.TYPE_DEF_TMP_PATH,
843
- this.options.constEnum ?? true,
843
+ this.options.constEnum ?? this.config.constEnum ?? true,
844
844
  !this.options.noDtsHeader
845
- ? this.options.dtsHeader ??
845
+ ? (this.options.dtsHeader ??
846
846
  (this.config.dtsHeaderFile
847
847
  ? await readFileAsync(
848
848
  join(this.cwd, this.config.dtsHeaderFile),
@@ -855,7 +855,7 @@ class Builder {
855
855
  })
856
856
  : null) ??
857
857
  this.config.dtsHeader ??
858
- DEFAULT_TYPE_DEF_HEADER
858
+ DEFAULT_TYPE_DEF_HEADER)
859
859
  : '',
860
860
  )
861
861
 
@@ -887,7 +887,8 @@ class Builder {
887
887
 
888
888
  const name = this.options.jsBinding ?? 'index.js'
889
889
 
890
- const cjs = createCjsBinding(
890
+ const createBinding = this.options.esm ? createEsmBinding : createCjsBinding
891
+ const binding = createBinding(
891
892
  this.config.binaryName,
892
893
  this.config.packageName,
893
894
  idents,
@@ -897,7 +898,7 @@ class Builder {
897
898
  const dest = join(this.outputDir, name)
898
899
  debug('Writing js binding to:')
899
900
  debug(' %i', dest)
900
- await writeFileAsync(dest, cjs, 'utf-8')
901
+ await writeFileAsync(dest, binding, 'utf-8')
901
902
  return {
902
903
  kind: 'js',
903
904
  path: dest,
@@ -136,7 +136,7 @@ export async function createNpmDirs(userOptions: CreateNpmDirsOptions) {
136
136
  const targetPackageJson = join(targetDir, 'package.json')
137
137
  await writeFileAsync(
138
138
  targetPackageJson,
139
- JSON.stringify(scopedPackageJson, null, 2),
139
+ JSON.stringify(scopedPackageJson, null, 2) + '\n',
140
140
  )
141
141
  const targetReadme = join(targetDir, 'README.md')
142
142
  await writeFileAsync(targetReadme, readme(packageName, target))
@@ -32,4 +32,5 @@ napi-build = "2"
32
32
 
33
33
  [profile.release]
34
34
  lto = true
35
+ strip = "symbols"
35
36
  `
@@ -122,7 +122,7 @@ jobs:
122
122
  targets: \${{ matrix.settings.target }}
123
123
 
124
124
  - name: Cache cargo
125
- uses: actions/cache@v3
125
+ uses: actions/cache@v4
126
126
  with:
127
127
  path: |
128
128
  ~/.cargo/registry/index/
@@ -136,7 +136,15 @@ jobs:
136
136
  - uses: goto-bus-stop/setup-zig@v2
137
137
  if: \${{ contains(matrix.settings.target, 'musl') }}
138
138
  with:
139
- version: 0.12.0
139
+ version: 0.13.0
140
+
141
+ - name: Install cargo-zigbuild
142
+ uses: taiki-e/install-action@v2
143
+ if: \${{ contains(matrix.settings.target, 'musl') }}
144
+ env:
145
+ GITHUB_TOKEN: \${{ github.token }}
146
+ with:
147
+ tool: cargo-zigbuild
140
148
 
141
149
  - name: Setup toolchain
142
150
  run: \${{ matrix.settings.setup }}
@@ -179,20 +187,19 @@ jobs:
179
187
  if-no-files-found: error
180
188
 
181
189
  build-freebsd:
182
- runs-on: macos-12
190
+ runs-on: ubuntu-latest
183
191
  name: Build FreeBSD
184
192
  steps:
185
193
  - uses: actions/checkout@v4
186
194
  - name: Build
187
195
  id: build
188
- uses: cross-platform-actions/action@v0.23.0
189
- timeout-minutes: 30
196
+ uses: cross-platform-actions/action@v0.25.0
190
197
  env:
191
198
  DEBUG: 'napi:*'
192
199
  RUSTUP_IO_THREADS: 1
193
200
  with:
194
201
  operating_system: freebsd
195
- version: '13.2'
202
+ version: '14.1'
196
203
  memory: 8G
197
204
  cpu_count: 3
198
205
  environment_variables: 'DEBUG RUSTUP_IO_THREADS'
@@ -238,8 +245,13 @@ jobs:
238
245
  settings:
239
246
  - host: macos-latest
240
247
  target: 'x86_64-apple-darwin'
248
+ architecture: x64
249
+ - host: macos-latest
250
+ target: 'aarch64-apple-darwin'
251
+ architecture: arm64
241
252
  - host: windows-latest
242
253
  target: 'x86_64-pc-windows-msvc'
254
+ architecture: x64
243
255
  node: ['18', '20']
244
256
  runs-on: \${{ matrix.settings.host }}
245
257
 
@@ -251,6 +263,7 @@ jobs:
251
263
  with:
252
264
  node-version: \${{ matrix.node }}
253
265
  cache: '${packageManager}'
266
+ architecture: \${{ matrix.settings.architecture }}
254
267
 
255
268
  - name: 'Install dependencies'
256
269
  run: ${packageManager} install
@@ -266,7 +279,7 @@ jobs:
266
279
  shell: bash
267
280
 
268
281
  - name: Test bindings
269
- run: ${packageManager} test
282
+ run: ${packageManager} run test
270
283
 
271
284
  test-linux-x64-gnu-binding:
272
285
  name: Test bindings on Linux-x64-gnu - node@\${{ matrix.node }}
@@ -301,7 +314,7 @@ jobs:
301
314
  shell: bash
302
315
 
303
316
  - name: Test bindings
304
- run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-slim yarn test
317
+ run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-slim ${packageManager} run test
305
318
 
306
319
  test-linux-x64-musl-binding:
307
320
  name: Test bindings on x86_64-unknown-linux-musl - node@\${{ matrix.node }}
@@ -320,7 +333,7 @@ jobs:
320
333
  uses: actions/setup-node@v4
321
334
  with:
322
335
  node-version: \${{ matrix.node }}
323
- cache: 'yarn'
336
+ cache: '${packageManager}'
324
337
 
325
338
  - name: 'Install dependencies'
326
339
  run: |
@@ -338,7 +351,7 @@ jobs:
338
351
  shell: bash
339
352
 
340
353
  - name: Test bindings
341
- run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-alpine yarn test
354
+ run: docker run --rm -v $(pwd):/build -w /build node:\${{ matrix.node }}-alpine ${packageManager} run test
342
355
 
343
356
  test-linux-aarch64-gnu-binding:
344
357
  name: Test bindings on aarch64-unknown-linux-gnu - node@\${{ matrix.node }}
@@ -380,7 +393,7 @@ jobs:
380
393
  with:
381
394
  image: node:\${{ matrix.node }}-slim
382
395
  options: --platform linux/arm64 -v \${{ github.workspace }}:/build -w /build
383
- run: yarn test
396
+ run: ${packageManager} run test
384
397
 
385
398
  test-linux-aarch64-musl-binding:
386
399
  name: Test bindings on aarch64-unknown-linux-musl - node@\${{ matrix.node }}
@@ -423,7 +436,7 @@ jobs:
423
436
  with:
424
437
  image: node:\${{ matrix.node }}-alpine
425
438
  options: --platform linux/arm64 -v \${{ github.workspace }}:/build -w /build
426
- run: yarn test
439
+ run: ${packageManager} run test
427
440
 
428
441
  test-linux-arm-gnueabihf-binding:
429
442
  name: Test bindings on armv7-unknown-linux-gnueabihf - node@\${{ matrix.node }}
@@ -566,7 +579,7 @@ jobs:
566
579
  path: artifacts
567
580
 
568
581
  - name: Move artifacts
569
- run: yarn artifacts
582
+ run: ${packageManager} artifacts
570
583
 
571
584
  - name: List packages
572
585
  run: ls -R ./npm
@@ -3,6 +3,40 @@ export function createCjsBinding(
3
3
  pkgName: string,
4
4
  idents: string[],
5
5
  ): string {
6
+ return `${bindingHeader}
7
+ const { createRequire } = require('node:module')
8
+ require = createRequire(__filename)
9
+
10
+ ${createCommonBinding(localName, pkgName)}
11
+ ${idents
12
+ .map((ident) => `module.exports.${ident} = nativeBinding.${ident}`)
13
+ .join('\n')}
14
+ `
15
+ }
16
+
17
+ export function createEsmBinding(
18
+ localName: string,
19
+ pkgName: string,
20
+ idents: string[],
21
+ ): string {
22
+ return `${bindingHeader}
23
+ import { createRequire } from 'node:module'
24
+ const require = createRequire(import.meta.url)
25
+ const __dirname = new URL('.', import.meta.url).pathname
26
+
27
+ ${createCommonBinding(localName, pkgName)}
28
+ const { ${idents.join(', ')} } = nativeBinding
29
+ ${idents.map((ident) => `export { ${ident} }`).join('\n')}
30
+ `
31
+ }
32
+
33
+ const bindingHeader = `// prettier-ignore
34
+ /* eslint-disable */
35
+ // @ts-nocheck
36
+ /* auto-generated by NAPI-RS */
37
+ `
38
+
39
+ function createCommonBinding(localName: string, pkgName: string): string {
6
40
  function requireTuple(tuple: string) {
7
41
  return `try {
8
42
  return require('./${localName}.${tuple}.node')
@@ -17,12 +51,7 @@ export function createCjsBinding(
17
51
  `
18
52
  }
19
53
 
20
- return `// prettier-ignore
21
- /* eslint-disable */
22
- /* auto-generated by NAPI-RS */
23
-
24
- const { readFileSync } = require('fs')
25
-
54
+ return `const { readFileSync } = require('node:fs')
26
55
  let nativeBinding = null
27
56
  const loadErrors = []
28
57
 
@@ -179,9 +208,5 @@ if (!nativeBinding) {
179
208
  }
180
209
  throw new Error(\`Failed to load native binding\`)
181
210
  }
182
-
183
- ${idents
184
- .map((ident) => `module.exports.${ident} = nativeBinding.${ident}`)
185
- .join('\n')}
186
211
  `
187
212
  }
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
2
 
3
+ import { input, select, checkbox, confirm } from '@inquirer/prompts'
3
4
  import { Option } from 'clipanion'
4
- import inquirer from 'inquirer'
5
5
 
6
6
  import { newProject } from '../api/new.js'
7
7
  import { BaseNewCommand } from '../def/new.js'
@@ -58,43 +58,31 @@ export class NewCommand extends BaseNewCommand {
58
58
  private async fetchName(defaultName: string): Promise<string> {
59
59
  return (
60
60
  this.$$name ??
61
- inquirer
62
- .prompt({
63
- type: 'input',
64
- name: 'name',
65
- message: 'Package name (the name field in your package.json file)',
66
- default: defaultName,
67
- })
68
- .then(({ name }) => name)
61
+ input({
62
+ message: 'Package name (the name field in your package.json file)',
63
+ default: defaultName,
64
+ })
69
65
  )
70
66
  }
71
67
 
72
68
  private async fetchLicense(): Promise<string> {
73
- return inquirer
74
- .prompt({
75
- type: 'input',
76
- name: 'license',
77
- message: 'License for open-sourced project',
78
- default: this.license,
79
- })
80
- .then(({ license }) => license)
69
+ return input({
70
+ message: 'License for open-sourced project',
71
+ default: this.license,
72
+ })
81
73
  }
82
74
 
83
75
  private async fetchNapiVersion(): Promise<number> {
84
- return inquirer
85
- .prompt({
86
- type: 'list',
87
- name: 'minNodeApiVersion',
88
- message: 'Minimum node-api version (with node version requirement)',
89
- loop: false,
90
- choices: Array.from({ length: 8 }, (_, i) => ({
91
- name: `napi${i + 1} (${napiEngineRequirement(i + 1)})`,
92
- value: i + 1,
93
- })),
94
- // choice index
95
- default: this.minNodeApiVersion - 1,
96
- })
97
- .then(({ minNodeApiVersion }) => minNodeApiVersion)
76
+ return select({
77
+ message: 'Minimum node-api version (with node version requirement)',
78
+ loop: false,
79
+ choices: Array.from({ length: 8 }, (_, i) => ({
80
+ name: `napi${i + 1} (${napiEngineRequirement(i + 1)})`,
81
+ value: i + 1,
82
+ })),
83
+ // choice index
84
+ default: this.minNodeApiVersion - 1,
85
+ })
98
86
  }
99
87
 
100
88
  private async fetchTargets(): Promise<TargetTriple[]> {
@@ -102,9 +90,7 @@ export class NewCommand extends BaseNewCommand {
102
90
  return AVAILABLE_TARGETS.concat()
103
91
  }
104
92
 
105
- const { targets } = await inquirer.prompt({
106
- name: 'targets',
107
- type: 'checkbox',
93
+ const targets = await checkbox({
108
94
  loop: false,
109
95
  message: 'Choose target(s) your crate will be compiled to',
110
96
  choices: AVAILABLE_TARGETS.map((target) => ({
@@ -119,9 +105,7 @@ export class NewCommand extends BaseNewCommand {
119
105
  }
120
106
 
121
107
  private async fetchTypeDef(): Promise<boolean> {
122
- const { enableTypeDef } = await inquirer.prompt({
123
- name: 'enableTypeDef',
124
- type: 'confirm',
108
+ const enableTypeDef = await confirm({
125
109
  message: 'Enable type definition auto-generation',
126
110
  default: this.enableTypeDef,
127
111
  })
@@ -130,9 +114,7 @@ export class NewCommand extends BaseNewCommand {
130
114
  }
131
115
 
132
116
  private async fetchGithubActions(): Promise<boolean> {
133
- const { enableGithubActions } = await inquirer.prompt({
134
- name: 'enableGithubActions',
135
- type: 'confirm',
117
+ const enableGithubActions = await confirm({
136
118
  message: 'Enable Github Actions CI',
137
119
  default: this.enableGithubActions,
138
120
  })
@@ -142,16 +124,12 @@ export class NewCommand extends BaseNewCommand {
142
124
  }
143
125
 
144
126
  async function inquirerProjectPath(): Promise<string> {
145
- return inquirer
146
- .prompt({
147
- type: 'input',
148
- name: 'path',
149
- message: 'Target path to create the project, relative to cwd.',
150
- })
151
- .then(({ path }) => {
152
- if (!path) {
153
- return inquirerProjectPath()
154
- }
155
- return path
156
- })
127
+ return input({
128
+ message: 'Target path to create the project, relative to cwd.',
129
+ }).then((path) => {
130
+ if (!path) {
131
+ return inquirerProjectPath()
132
+ }
133
+ return path
134
+ })
157
135
  }
package/src/def/build.ts CHANGED
@@ -65,6 +65,11 @@ export abstract class BaseBuildCommand extends Command {
65
65
  'Whether to disable the generation JS binding file. Only works with `--platform` flag.',
66
66
  })
67
67
 
68
+ esm?: boolean = Option.Boolean('--esm', {
69
+ description:
70
+ 'Whether to emit an ESM JS binding file instead of CJS format. Only works with `--platform` flag.',
71
+ })
72
+
68
73
  dts?: string = Option.String('--dts', {
69
74
  description:
70
75
  'Path and filename of generated type def file. Relative to `--output-dir`',
@@ -150,6 +155,7 @@ export abstract class BaseBuildCommand extends Command {
150
155
  constEnum: this.constEnum,
151
156
  jsBinding: this.jsBinding,
152
157
  noJsBinding: this.noJsBinding,
158
+ esm: this.esm,
153
159
  dts: this.dts,
154
160
  dtsHeader: this.dtsHeader,
155
161
  noDtsHeader: this.noDtsHeader,
@@ -222,6 +228,10 @@ export interface BuildOptions {
222
228
  * Whether to disable the generation JS binding file. Only works with `--platform` flag.
223
229
  */
224
230
  noJsBinding?: boolean
231
+ /**
232
+ * Whether to emit an ESM JS binding file. Only works with `--platform` flag.
233
+ */
234
+ esm?: boolean
225
235
  /**
226
236
  * Path and filename of generated type def file. Relative to `--output-dir`
227
237
  */
@@ -614,7 +614,6 @@ Generated by [AVA](https://avajs.dev).
614
614
  export function xxh128(input: Buffer): bigint␊
615
615
  export function xxh3_64(input: Buffer): bigint␊
616
616
  }␊
617
- ␊
618
617
  `
619
618
 
620
619
  ## should process type def with noConstEnum correctly
@@ -1169,5 +1168,4 @@ Generated by [AVA](https://avajs.dev).
1169
1168
  export function xxh128(input: Buffer): bigint␊
1170
1169
  export function xxh3_64(input: Buffer): bigint␊
1171
1170
  }␊
1172
- ␊
1173
1171
  `
@@ -28,7 +28,7 @@ function detectCargoBinary(bin: string) {
28
28
  })
29
29
  debug('Cargo binary detected: %s', bin)
30
30
  return true
31
- } catch (e) {
31
+ } catch {
32
32
  debug('Cargo binary not detected: %s', bin)
33
33
  return false
34
34
  }