@napi-rs/cli 3.0.0-alpha.90 → 3.0.0-alpha.92

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 (133) hide show
  1. package/dist/api/create-npm-dirs.d.ts +5 -0
  2. package/dist/api/templates/index.d.ts +0 -7
  3. package/dist/cli.js +3892 -15
  4. package/dist/index.cjs +9212 -8791
  5. package/dist/index.js +3643 -32
  6. package/package.json +10 -8
  7. package/src/api/build.ts +15 -15
  8. package/src/api/create-npm-dirs.ts +4 -2
  9. package/src/api/templates/index.ts +0 -7
  10. package/src/api/templates/load-wasi-template.ts +23 -0
  11. package/src/utils/config.ts +9 -0
  12. package/dist/api/__tests__/new.spec.js +0 -283
  13. package/dist/api/__tests__/new.spec.js.map +0 -1
  14. package/dist/api/artifacts.js +0 -74
  15. package/dist/api/artifacts.js.map +0 -1
  16. package/dist/api/build.js +0 -707
  17. package/dist/api/build.js.map +0 -1
  18. package/dist/api/create-npm-dirs.js +0 -101
  19. package/dist/api/create-npm-dirs.js.map +0 -1
  20. package/dist/api/new.js +0 -360
  21. package/dist/api/new.js.map +0 -1
  22. package/dist/api/pre-publish.js +0 -160
  23. package/dist/api/pre-publish.js.map +0 -1
  24. package/dist/api/rename.js +0 -91
  25. package/dist/api/rename.js.map +0 -1
  26. package/dist/api/templates/.gitignore.d.ts +0 -1
  27. package/dist/api/templates/.gitignore.js +0 -200
  28. package/dist/api/templates/.gitignore.js.map +0 -1
  29. package/dist/api/templates/.npmignore.d.ts +0 -1
  30. package/dist/api/templates/.npmignore.js +0 -15
  31. package/dist/api/templates/.npmignore.js.map +0 -1
  32. package/dist/api/templates/build.rs.d.ts +0 -1
  33. package/dist/api/templates/build.rs.js +0 -5
  34. package/dist/api/templates/build.rs.js.map +0 -1
  35. package/dist/api/templates/cargo.toml.d.ts +0 -6
  36. package/dist/api/templates/cargo.toml.js +0 -27
  37. package/dist/api/templates/cargo.toml.js.map +0 -1
  38. package/dist/api/templates/ci-template.d.ts +0 -3
  39. package/dist/api/templates/ci-template.js +0 -593
  40. package/dist/api/templates/ci-template.js.map +0 -1
  41. package/dist/api/templates/ci.yml.d.ts +0 -3
  42. package/dist/api/templates/ci.yml.js +0 -115
  43. package/dist/api/templates/ci.yml.js.map +0 -1
  44. package/dist/api/templates/index.js +0 -9
  45. package/dist/api/templates/index.js.map +0 -1
  46. package/dist/api/templates/js-binding.js +0 -213
  47. package/dist/api/templates/js-binding.js.map +0 -1
  48. package/dist/api/templates/lib.rs.d.ts +0 -1
  49. package/dist/api/templates/lib.rs.js +0 -8
  50. package/dist/api/templates/lib.rs.js.map +0 -1
  51. package/dist/api/templates/load-wasi-template.js +0 -168
  52. package/dist/api/templates/load-wasi-template.js.map +0 -1
  53. package/dist/api/templates/package.json.d.ts +0 -15
  54. package/dist/api/templates/package.json.js +0 -54
  55. package/dist/api/templates/package.json.js.map +0 -1
  56. package/dist/api/templates/wasi-worker-template.js +0 -122
  57. package/dist/api/templates/wasi-worker-template.js.map +0 -1
  58. package/dist/api/universalize.js +0 -39
  59. package/dist/api/universalize.js.map +0 -1
  60. package/dist/api/version.js +0 -17
  61. package/dist/api/version.js.map +0 -1
  62. package/dist/cli.js.map +0 -1
  63. package/dist/commands/artifacts.js +0 -20
  64. package/dist/commands/artifacts.js.map +0 -1
  65. package/dist/commands/build.js +0 -35
  66. package/dist/commands/build.js.map +0 -1
  67. package/dist/commands/create-npm-dirs.js +0 -8
  68. package/dist/commands/create-npm-dirs.js.map +0 -1
  69. package/dist/commands/help.js +0 -13
  70. package/dist/commands/help.js.map +0 -1
  71. package/dist/commands/new.js +0 -110
  72. package/dist/commands/new.js.map +0 -1
  73. package/dist/commands/pre-publish.js +0 -9
  74. package/dist/commands/pre-publish.js.map +0 -1
  75. package/dist/commands/rename.js +0 -8
  76. package/dist/commands/rename.js.map +0 -1
  77. package/dist/commands/universalize.js +0 -8
  78. package/dist/commands/universalize.js.map +0 -1
  79. package/dist/commands/version.js +0 -8
  80. package/dist/commands/version.js.map +0 -1
  81. package/dist/def/artifacts.js +0 -47
  82. package/dist/def/artifacts.js.map +0 -1
  83. package/dist/def/build.js +0 -140
  84. package/dist/def/build.js.map +0 -1
  85. package/dist/def/create-npm-dirs.js +0 -43
  86. package/dist/def/create-npm-dirs.js.map +0 -1
  87. package/dist/def/new.js +0 -77
  88. package/dist/def/new.js.map +0 -1
  89. package/dist/def/pre-publish.js +0 -61
  90. package/dist/def/pre-publish.js.map +0 -1
  91. package/dist/def/rename.js +0 -63
  92. package/dist/def/rename.js.map +0 -1
  93. package/dist/def/universalize.js +0 -38
  94. package/dist/def/universalize.js.map +0 -1
  95. package/dist/def/version.js +0 -38
  96. package/dist/def/version.js.map +0 -1
  97. package/dist/index.js.map +0 -1
  98. package/dist/utils/__tests__/config.spec.js +0 -63
  99. package/dist/utils/__tests__/config.spec.js.map +0 -1
  100. package/dist/utils/__tests__/target.spec.js +0 -11
  101. package/dist/utils/__tests__/target.spec.js.map +0 -1
  102. package/dist/utils/__tests__/typegen.spec.js +0 -42
  103. package/dist/utils/__tests__/typegen.spec.js.map +0 -1
  104. package/dist/utils/__tests__/version.spec.js +0 -6
  105. package/dist/utils/__tests__/version.spec.js.map +0 -1
  106. package/dist/utils/cargo.js +0 -34
  107. package/dist/utils/cargo.js.map +0 -1
  108. package/dist/utils/config.js +0 -75
  109. package/dist/utils/config.js.map +0 -1
  110. package/dist/utils/index.js +0 -10
  111. package/dist/utils/index.js.map +0 -1
  112. package/dist/utils/log.js +0 -15
  113. package/dist/utils/log.js.map +0 -1
  114. package/dist/utils/metadata.js +0 -40
  115. package/dist/utils/metadata.js.map +0 -1
  116. package/dist/utils/misc.js +0 -43
  117. package/dist/utils/misc.js.map +0 -1
  118. package/dist/utils/read-config.js +0 -8
  119. package/dist/utils/read-config.js.map +0 -1
  120. package/dist/utils/target.js +0 -135
  121. package/dist/utils/target.js.map +0 -1
  122. package/dist/utils/typegen.js +0 -210
  123. package/dist/utils/typegen.js.map +0 -1
  124. package/dist/utils/version.js +0 -62
  125. package/dist/utils/version.js.map +0 -1
  126. package/src/api/templates/.gitignore.ts +0 -199
  127. package/src/api/templates/.npmignore.ts +0 -14
  128. package/src/api/templates/build.rs.ts +0 -4
  129. package/src/api/templates/cargo.toml.ts +0 -36
  130. package/src/api/templates/ci-template.ts +0 -602
  131. package/src/api/templates/ci.yml.ts +0 -140
  132. package/src/api/templates/lib.rs.ts +0 -7
  133. package/src/api/templates/package.json.ts +0 -90
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@napi-rs/cli",
3
- "version": "3.0.0-alpha.90",
3
+ "version": "3.0.0-alpha.92",
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",
@@ -70,12 +70,14 @@
70
70
  "@inquirer/prompts": "^7.4.0",
71
71
  "@napi-rs/cross-toolchain": "^0.0.19",
72
72
  "@napi-rs/wasm-tools": "^0.0.3",
73
+ "@octokit/rest": "^22.0.0",
73
74
  "clipanion": "^4.0.0-rc.4",
74
75
  "colorette": "^2.0.20",
75
76
  "debug": "^4.4.0",
76
77
  "emnapi": "^1.4.0",
77
78
  "find-up": "^7.0.0",
78
79
  "js-yaml": "^4.1.0",
80
+ "lodash-es": "^4.17.21",
79
81
  "semver": "^7.7.1",
80
82
  "typanion": "^3.14.0",
81
83
  "wasm-sjlj": "^1.0.6"
@@ -83,7 +85,6 @@
83
85
  "devDependencies": {
84
86
  "@emnapi/core": "^1.4.0",
85
87
  "@emnapi/runtime": "^1.4.0",
86
- "@octokit/rest": "^22.0.0",
87
88
  "@oxc-node/core": "^0.0.29",
88
89
  "@std/toml": "npm:@jsr/std__toml@^1.0.8",
89
90
  "@types/debug": "^4.1.12",
@@ -94,9 +95,8 @@
94
95
  "@types/semver": "^7.7.0",
95
96
  "ava": "^6.2.0",
96
97
  "env-paths": "^3.0.0",
97
- "esbuild": "^0.25.2",
98
- "lodash-es": "^4.17.21",
99
98
  "prettier": "^3.5.3",
99
+ "rolldown": "^1.0.0-beta.23",
100
100
  "tslib": "^2.8.1",
101
101
  "typescript": "^5.8.2"
102
102
  },
@@ -117,18 +117,20 @@
117
117
  "url": "https://github.com/sponsors/Brooooooklyn"
118
118
  },
119
119
  "scripts": {
120
+ "clean": "node --import @oxc-node/core/register ./clean.ts",
120
121
  "codegen": "node --import @oxc-node/core/register ./codegen/index.ts",
121
- "build": "tsc && yarn build:cjs",
122
- "build:cjs": "node ./esbuild.mjs",
122
+ "build": "tsc && yarn clean && rolldown -c rolldown.config.js",
123
123
  "test": "node --import @oxc-node/core/register ../node_modules/ava/entrypoints/cli.mjs"
124
124
  },
125
125
  "ava": {
126
126
  "extensions": {
127
127
  "ts": "module"
128
128
  },
129
+ "timeout": "1m",
129
130
  "files": [
130
- "**/__tests__/**/*.spec.ts"
131
+ "**/__tests__/**/*.spec.ts",
132
+ "e2e/**/*.spec.ts"
131
133
  ]
132
134
  },
133
- "gitHead": "aeefd091b10e59e6eee8cae01337d19daee679f1"
135
+ "gitHead": "e9e806e92092e05bb5ed0c7fb9a30705bd09760e"
134
136
  }
package/src/api/build.ts CHANGED
@@ -270,16 +270,14 @@ class Builder {
270
270
  'include/',
271
271
  )
272
272
  }
273
- if (!process.env.CC && !process.env.TARGET_CC) {
274
- this.envs[`CC`] = join(toolchainPath, 'bin', `${crossTargetName}-gcc`)
273
+ if (!process.env.TARGET_CC) {
275
274
  this.envs[`TARGET_CC`] = join(
276
275
  toolchainPath,
277
276
  'bin',
278
277
  `${crossTargetName}-gcc`,
279
278
  )
280
279
  }
281
- if (!process.env.CXX && !process.env.TARGET_CXX) {
282
- this.envs[`CXX`] = join(toolchainPath, 'bin', `${crossTargetName}-g++`)
280
+ if (!process.env.TARGET_CXX) {
283
281
  this.envs[`TARGET_CXX`] = join(
284
282
  toolchainPath,
285
283
  'bin',
@@ -287,22 +285,18 @@ class Builder {
287
285
  )
288
286
  }
289
287
  if (
290
- (process.env.CC?.startsWith('clang') &&
291
- (process.env.TARGET_CC?.startsWith('clang') ||
292
- !process.env.TARGET_CC)) ||
293
- process.env.TARGET_CC?.startsWith('clang')
288
+ process.env.TARGET_CC?.startsWith('clang') ||
289
+ (process.env.CC?.startsWith('clang') && !process.env.TARGET_CC)
294
290
  ) {
295
- const CFLAGS = process.env.CFLAGS ?? ''
296
- this.envs.CFLAGS = `--sysroot=${this.envs.TARGET_SYSROOT} --gcc-toolchain=${toolchainPath} ${CFLAGS}`
291
+ const TARGET_CFLAGS = process.env.TARGET_CFLAGS ?? ''
292
+ this.envs.TARGET_CFLAGS = `--sysroot=${this.envs.TARGET_SYSROOT} --gcc-toolchain=${toolchainPath} ${TARGET_CFLAGS}`
297
293
  }
298
294
  if (
299
- (process.env.CXX?.startsWith('clang++') &&
300
- (process.env.TARGET_CXX?.startsWith('clang++') ||
301
- !process.env.TARGET_CXX)) ||
295
+ (process.env.CXX?.startsWith('clang++') && !process.env.TARGET_CXX) ||
302
296
  process.env.TARGET_CXX?.startsWith('clang++')
303
297
  ) {
304
- const CXXFLAGS = process.env.CXXFLAGS ?? ''
305
- this.envs.CXXFLAGS = `--sysroot=${this.envs.TARGET_SYSROOT} --gcc-toolchain=${toolchainPath} ${CXXFLAGS} ${CXXFLAGS}`
298
+ const TARGET_CXXFLAGS = process.env.TARGET_CXXFLAGS ?? ''
299
+ this.envs.TARGET_CXXFLAGS = `--sysroot=${this.envs.TARGET_SYSROOT} --gcc-toolchain=${toolchainPath} ${TARGET_CXXFLAGS}`
306
300
  }
307
301
  this.envs.PATH = this.envs.PATH
308
302
  ? `${toolchainPath}/bin:${this.envs.PATH}:${process.env.PATH}`
@@ -905,6 +899,12 @@ export declare class ExternalObject<T> {
905
899
  `
906
900
  }
907
901
 
902
+ if (dts.indexOf('TypedArray') > -1) {
903
+ header += `
904
+ export type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array
905
+ `
906
+ }
907
+
908
908
  dts = header + dts
909
909
 
910
910
  try {
@@ -15,10 +15,12 @@ import {
15
15
  Target,
16
16
  } from '../utils/index.js'
17
17
 
18
- import type { PackageMeta } from './templates/package.json.js'
19
-
20
18
  const debug = debugFactory('create-npm-dirs')
21
19
 
20
+ export interface PackageMeta {
21
+ 'dist-tags': { [index: string]: string }
22
+ }
23
+
22
24
  export async function createNpmDirs(userOptions: CreateNpmDirsOptions) {
23
25
  const options = applyDefaultCreateNpmDirsOptions(userOptions)
24
26
 
@@ -1,8 +1 @@
1
- export * from './.gitignore.js'
2
- export * from './.npmignore.js'
3
- export * from './build.rs.js'
4
- export * from './cargo.toml.js'
5
- export * from './ci.yml.js'
6
- export * from './lib.rs.js'
7
- export * from './package.json.js'
8
1
  export * from './js-binding.js'
@@ -160,6 +160,29 @@ const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule
160
160
  worker.onmessage = ({ data }) => {
161
161
  __wasmCreateOnMessageForFsProxy(__nodeFs)(data)
162
162
  }
163
+
164
+ // The main thread of Node.js waits for all the active handles before exiting.
165
+ // But Rust threads are never waited without \`thread::join\`.
166
+ // So here we hack the code of Node.js to prevent the workers from being referenced (active).
167
+ // According to https://github.com/nodejs/node/blob/19e0d472728c79d418b74bddff588bea70a403d0/lib/internal/worker.js#L415,
168
+ // a worker is consist of two handles: kPublicPort and kHandle.
169
+ {
170
+ const kPublicPort = Object.getOwnPropertySymbols(worker).find(s =>
171
+ s.toString().includes("kPublicPort")
172
+ );
173
+ if (kPublicPort) {
174
+ worker[kPublicPort].ref = () => {};
175
+ }
176
+
177
+ const kHandle = Object.getOwnPropertySymbols(worker).find(s =>
178
+ s.toString().includes("kHandle")
179
+ );
180
+ if (kPublicPort) {
181
+ worker[kHandle].ref = () => {};
182
+ }
183
+
184
+ worker.unref();
185
+ }
163
186
  return worker
164
187
  },
165
188
  overwriteImports(importObject) {
@@ -234,6 +234,15 @@ export async function readNapiConfig(
234
234
  }
235
235
  }
236
236
 
237
+ // find duplicate targets
238
+ const uniqueTargets = new Set(targets)
239
+ if (uniqueTargets.size !== targets.length) {
240
+ const duplicateTarget = targets.find(
241
+ (target, index) => targets.indexOf(target) !== index,
242
+ )
243
+ throw new Error(`Duplicate targets are not allowed: ${duplicateTarget}`)
244
+ }
245
+
237
246
  napiConfig.targets = targets.map(parseTriple)
238
247
 
239
248
  return napiConfig
@@ -1,283 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { readFile, rm } from 'node:fs/promises';
3
- import { tmpdir } from 'node:os';
4
- import { join } from 'node:path';
5
- import ava from 'ava';
6
- import { load as yamlLoad } from 'js-yaml';
7
- import { newProject } from '../new.js';
8
- const test = ava;
9
- test.beforeEach(async (t) => {
10
- // Create a unique temp directory for tests
11
- const timestamp = Date.now();
12
- const random = Math.random().toString(36).substring(7);
13
- const tmpDir = join(tmpdir(), 'napi-rs-test', `new-project-${timestamp}-${random}`);
14
- t.context = { tmpDir };
15
- });
16
- test.afterEach.always(async (t) => {
17
- // Clean up any created directories
18
- if (existsSync(t.context.tmpDir)) {
19
- await rm(t.context.tmpDir, { recursive: true, force: true });
20
- }
21
- });
22
- test('create a new project with default options', async (t) => {
23
- const projectPath = join(t.context.tmpDir, 'default-project');
24
- await newProject({
25
- path: projectPath,
26
- enableDefaultTargets: true,
27
- });
28
- t.true(existsSync(projectPath));
29
- t.true(existsSync(join(projectPath, 'package.json')));
30
- t.true(existsSync(join(projectPath, 'Cargo.toml')));
31
- t.true(existsSync(join(projectPath, 'src')));
32
- t.true(existsSync(join(projectPath, '.github', 'workflows', 'CI.yml')));
33
- // Check package.json
34
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
35
- t.is(pkgJson.name, 'default-project');
36
- t.is(pkgJson.napi.binaryName, 'default-project');
37
- t.is(pkgJson.license, 'MIT');
38
- t.truthy(pkgJson.engines.node);
39
- t.falsy(existsSync(join(projectPath, 'default-project.wasi-browser.js')));
40
- const gitAttributes = await readFile(join(projectPath, '.gitattributes'), 'utf-8');
41
- t.truthy(gitAttributes.includes('default-project.wasi-browser.js'));
42
- t.truthy(gitAttributes.includes('default-project.wasi.cjs'));
43
- t.truthy(gitAttributes.includes('wasi-worker-browser.mjs'));
44
- t.truthy(gitAttributes.includes('wasi-worker.mjs'));
45
- const ciYaml = await readFile(join(projectPath, '.github', 'workflows', 'CI.yml'), 'utf-8');
46
- const yamlObject = yamlLoad(ciYaml);
47
- t.is(yamlObject.env.APP_NAME, 'default-project');
48
- t.falsy(yamlObject.jobs.publish.needs.includes('wasm32-wasip1-threads'));
49
- t.falsy(yamlObject.jobs['test-linux-binding'].strategy.matrix.target.includes('aarch64-unknown-linux-musl'));
50
- });
51
- test('create a new project with custom name', async (t) => {
52
- const projectPath = join(t.context.tmpDir, 'custom-name-dir');
53
- await newProject({
54
- path: projectPath,
55
- name: '@my-scope/custom-package',
56
- enableDefaultTargets: true,
57
- });
58
- t.true(existsSync(projectPath));
59
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
60
- t.is(pkgJson.name, '@my-scope/custom-package');
61
- t.is(pkgJson.napi.binaryName, 'custom-package');
62
- const cargoToml = await readFile(join(projectPath, 'Cargo.toml'), 'utf-8');
63
- // Verify that the package name was properly renamed to follow Rust naming conventions
64
- t.true(cargoToml.includes('name = "custom_package"'));
65
- });
66
- test('create a new project with custom path', async (t) => {
67
- const customPath = join(t.context.tmpDir, 'nested', 'folders', 'my-project');
68
- await newProject({
69
- path: customPath,
70
- enableDefaultTargets: true,
71
- });
72
- t.true(existsSync(customPath));
73
- t.true(existsSync(join(customPath, 'package.json')));
74
- const pkgJson = JSON.parse(await readFile(join(customPath, 'package.json'), 'utf-8'));
75
- t.is(pkgJson.name, 'my-project');
76
- });
77
- test('create a new project with custom path and name', async (t) => {
78
- const projectPath = join(t.context.tmpDir, 'custom-dir');
79
- await newProject({
80
- path: projectPath,
81
- name: 'custom-project-name',
82
- enableDefaultTargets: true,
83
- });
84
- t.true(existsSync(projectPath));
85
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
86
- t.is(pkgJson.name, 'custom-project-name');
87
- t.is(pkgJson.napi.binaryName, 'custom-project-name');
88
- });
89
- test('create a new project with custom path, name, and targets', async (t) => {
90
- const projectPath = join(t.context.tmpDir, 'full-custom');
91
- const customTargets = [
92
- 'x86_64-unknown-linux-gnu',
93
- 'x86_64-apple-darwin',
94
- 'aarch64-apple-darwin',
95
- 'wasm32-wasip1-threads',
96
- 'x86_64-unknown-freebsd',
97
- ];
98
- await newProject({
99
- path: projectPath,
100
- name: '@custom/full-project',
101
- targets: customTargets,
102
- enableDefaultTargets: false,
103
- license: 'Apache-2.0',
104
- minNodeApiVersion: 6,
105
- });
106
- t.true(existsSync(projectPath));
107
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
108
- t.is(pkgJson.name, '@custom/full-project');
109
- t.is(pkgJson.napi.binaryName, 'full-project');
110
- t.is(pkgJson.license, 'Apache-2.0');
111
- t.true(pkgJson.engines.node.includes('>= 14.0.0'));
112
- // Check that CI workflow only includes the specified targets
113
- const ciYaml = await readFile(join(projectPath, '.github', 'workflows', 'CI.yml'), 'utf-8');
114
- const yamlObject = yamlLoad(ciYaml);
115
- t.true(yamlObject.jobs.build.strategy.matrix.settings.some((setting) => setting.target === 'x86_64-unknown-linux-gnu'));
116
- t.true(yamlObject.jobs.build.strategy.matrix.settings.some((setting) => setting.target === 'x86_64-apple-darwin'));
117
- t.true(yamlObject.jobs.build.strategy.matrix.settings.some((setting) => setting.target === 'aarch64-apple-darwin'));
118
- t.false(yamlObject.jobs.build.strategy.matrix.settings.some((setting) => setting.target === 'x86_64-pc-windows-msvc'));
119
- t.true(yamlObject.jobs.build.strategy.matrix.settings.some((setting) => setting.target === 'wasm32-wasip1-threads'));
120
- t.truthy(yamlObject.jobs['build-freebsd']);
121
- t.truthy(yamlObject.jobs['test-wasi']);
122
- t.falsy(yamlObject.jobs['test-macOS-windows-binding'].strategy.matrix.settings.some((setting) => setting.target === 'x86_64-pc-windows-msvc'));
123
- t.truthy(yamlObject.jobs['test-macOS-windows-binding'].strategy.matrix.settings.some((setting) => setting.target === 'aarch64-apple-darwin'));
124
- });
125
- test('non Windows and macOS targets should remove test-macOS-windows-binding job', async (t) => {
126
- const projectPath = join(t.context.tmpDir, 'no-windows-macos');
127
- const targets = [
128
- 'x86_64-unknown-linux-gnu',
129
- 'aarch64-unknown-linux-gnu',
130
- 'wasm32-wasip1-threads',
131
- 'x86_64-unknown-freebsd',
132
- ];
133
- await newProject({
134
- path: projectPath,
135
- targets,
136
- enableDefaultTargets: false,
137
- });
138
- t.true(existsSync(projectPath));
139
- const ciYaml = await readFile(join(projectPath, '.github', 'workflows', 'CI.yml'), 'utf-8');
140
- const yamlObject = yamlLoad(ciYaml);
141
- t.falsy(yamlObject.jobs['test-macOS-windows-binding']);
142
- t.falsy(yamlObject.jobs.publish.needs.includes('test-macOS-windows-binding'));
143
- });
144
- test('should remove test-linux-binding job if no Linux targets are enabled', async (t) => {
145
- const projectPath = join(t.context.tmpDir, 'no-linux');
146
- const targets = ['x86_64-apple-darwin', 'aarch64-apple-darwin'];
147
- await newProject({
148
- path: projectPath,
149
- targets,
150
- enableDefaultTargets: false,
151
- });
152
- t.true(existsSync(projectPath));
153
- const ciYaml = await readFile(join(projectPath, '.github', 'workflows', 'CI.yml'), 'utf-8');
154
- const yamlObject = yamlLoad(ciYaml);
155
- t.falsy(yamlObject.jobs['test-linux-binding']);
156
- t.falsy(yamlObject.jobs.publish.needs.includes('test-linux-binding'));
157
- });
158
- test('should fail when no path is provided', async (t) => {
159
- await t.throwsAsync(async () => {
160
- await newProject({
161
- enableDefaultTargets: true,
162
- });
163
- }, { message: /Please provide the path as the argument/ });
164
- });
165
- test('should fail when path already exists and is not empty', async (t) => {
166
- const projectPath = join(t.context.tmpDir, 'existing-project');
167
- // Create directory with a file
168
- await rm(projectPath, { recursive: true, force: true }).catch(() => { });
169
- const { mkdirSync, writeFileSync } = await import('node:fs');
170
- mkdirSync(projectPath, { recursive: true });
171
- writeFileSync(join(projectPath, 'existing-file.txt'), 'content');
172
- await t.throwsAsync(async () => {
173
- await newProject({
174
- path: projectPath,
175
- enableDefaultTargets: true,
176
- });
177
- }, { message: /already exists and it's not empty/ });
178
- });
179
- test('should fail when path is a file', async (t) => {
180
- const filePath = join(t.context.tmpDir, 'file.txt');
181
- // Create a file
182
- const { writeFileSync } = await import('node:fs');
183
- const { mkdirSync } = await import('node:fs');
184
- mkdirSync(t.context.tmpDir, { recursive: true });
185
- writeFileSync(filePath, 'content');
186
- await t.throwsAsync(async () => {
187
- await newProject({
188
- path: filePath,
189
- enableDefaultTargets: true,
190
- });
191
- }, { message: /already exists and it's not a directory/ });
192
- });
193
- test('dry run should not create any files', async (t) => {
194
- const projectPath = join(t.context.tmpDir, 'dry-run-project');
195
- await newProject({
196
- path: projectPath,
197
- name: 'dry-run-test',
198
- enableDefaultTargets: true,
199
- dryRun: true,
200
- });
201
- t.false(existsSync(projectPath));
202
- });
203
- test('create project without GitHub Actions', async (t) => {
204
- const projectPath = join(t.context.tmpDir, 'no-github-actions');
205
- await newProject({
206
- path: projectPath,
207
- enableDefaultTargets: true,
208
- enableGithubActions: false,
209
- });
210
- t.true(existsSync(projectPath));
211
- t.true(existsSync(join(projectPath, 'package.json')));
212
- t.false(existsSync(join(projectPath, '.github')));
213
- });
214
- test('create a new project with pnpm package manager', async (t) => {
215
- const projectPath = join(t.context.tmpDir, 'pnpm-project');
216
- await newProject({
217
- path: projectPath,
218
- name: 'pnpm-test-project',
219
- packageManager: 'pnpm',
220
- enableDefaultTargets: true,
221
- });
222
- t.true(existsSync(projectPath));
223
- t.true(existsSync(join(projectPath, 'package.json')));
224
- t.true(existsSync(join(projectPath, 'Cargo.toml')));
225
- // Check package.json
226
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
227
- t.is(pkgJson.name, 'pnpm-test-project');
228
- t.is(pkgJson.napi.binaryName, 'pnpm-test-project');
229
- // Verify that the Cargo.toml has the correct sanitized name
230
- const cargoToml = await readFile(join(projectPath, 'Cargo.toml'), 'utf-8');
231
- t.true(cargoToml.includes('name = "pnpm_test_project"'));
232
- // Check for pnpm-specific files or configurations if any
233
- // The template might have different structure for pnpm
234
- });
235
- test('create a new project with pnpm and custom name', async (t) => {
236
- const projectPath = join(t.context.tmpDir, 'pnpm-custom-name');
237
- await newProject({
238
- path: projectPath,
239
- name: '@my-org/custom-pnpm-package',
240
- packageManager: 'pnpm',
241
- enableDefaultTargets: true,
242
- });
243
- t.true(existsSync(projectPath));
244
- t.true(existsSync(join(projectPath, 'package.json')));
245
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
246
- t.is(pkgJson.name, '@my-org/custom-pnpm-package');
247
- t.is(pkgJson.napi.binaryName, 'custom-pnpm-package');
248
- const cargoToml = await readFile(join(projectPath, 'Cargo.toml'), 'utf-8');
249
- t.true(cargoToml.includes('name = "custom_pnpm_package"'));
250
- });
251
- test('create a new project with pnpm and custom path/name combination', async (t) => {
252
- const projectPath = join(t.context.tmpDir, 'deep', 'nested', 'pnpm-dir');
253
- await newProject({
254
- path: projectPath,
255
- name: '@scoped/pnpm-custom-name',
256
- packageManager: 'pnpm',
257
- enableDefaultTargets: true,
258
- license: 'Apache-2.0',
259
- });
260
- t.true(existsSync(projectPath));
261
- t.true(existsSync(join(projectPath, 'package.json')));
262
- t.true(existsSync(join(projectPath, 'Cargo.toml')));
263
- // Check package.json
264
- const pkgJson = JSON.parse(await readFile(join(projectPath, 'package.json'), 'utf-8'));
265
- t.is(pkgJson.name, '@scoped/pnpm-custom-name');
266
- t.is(pkgJson.napi.binaryName, 'pnpm-custom-name');
267
- t.is(pkgJson.license, 'Apache-2.0');
268
- // Check Cargo.toml has sanitized name
269
- const cargoToml = await readFile(join(projectPath, 'Cargo.toml'), 'utf-8');
270
- t.true(cargoToml.includes('name = "pnpm_custom_name"'));
271
- });
272
- test('should fail when no targets are enabled', async (t) => {
273
- const projectPath = join(t.context.tmpDir, 'no-targets');
274
- await t.throwsAsync(async () => {
275
- await newProject({
276
- path: projectPath,
277
- enableDefaultTargets: false,
278
- enableAllTargets: false,
279
- targets: [],
280
- });
281
- }, { message: /At least one target must be enabled/ });
282
- });
283
- //# sourceMappingURL=new.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"new.spec.js","sourceRoot":"","sources":["../../../src/api/__tests__/new.spec.ts"],"names":[],"mappings":"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"}
@@ -1,74 +0,0 @@
1
- import { join, parse } from 'node:path';
2
- import * as colors from 'colorette';
3
- import { applyDefaultArtifactsOptions, } from '../def/artifacts.js';
4
- import { readNapiConfig, debugFactory, readFileAsync, writeFileAsync, UniArchsByPlatform, readdirAsync, } from '../utils/index.js';
5
- const debug = debugFactory('artifacts');
6
- export async function collectArtifacts(userOptions) {
7
- const options = applyDefaultArtifactsOptions(userOptions);
8
- const packageJsonPath = join(options.cwd, options.packageJsonPath);
9
- const { targets, binaryName, packageName } = await readNapiConfig(packageJsonPath);
10
- const distDirs = targets.map((platform) => join(options.cwd, options.npmDir, platform.platformArchABI));
11
- const universalSourceBins = new Set(targets
12
- .filter((platform) => platform.arch === 'universal')
13
- .flatMap((p) => UniArchsByPlatform[p.platform]?.map((a) => `${p.platform}-${a}`))
14
- .filter(Boolean));
15
- await collectNodeBinaries(join(options.cwd, options.outputDir)).then((output) => Promise.all(output.map(async (filePath) => {
16
- debug.info(`Read [${colors.yellowBright(filePath)}]`);
17
- const sourceContent = await readFileAsync(filePath);
18
- const parsedName = parse(filePath);
19
- const terms = parsedName.name.split('.');
20
- const platformArchABI = terms.pop();
21
- const _binaryName = terms.join('.');
22
- if (_binaryName !== binaryName) {
23
- debug.warn(`[${_binaryName}] is not matched with [${binaryName}], skip`);
24
- return;
25
- }
26
- const dir = distDirs.find((dir) => dir.includes(platformArchABI));
27
- if (!dir && universalSourceBins.has(platformArchABI)) {
28
- debug.warn(`[${platformArchABI}] has no dist dir but it is source bin for universal arch, skip`);
29
- return;
30
- }
31
- if (!dir) {
32
- throw new Error(`No dist dir found for ${filePath}`);
33
- }
34
- const distFilePath = join(dir, parsedName.base);
35
- debug.info(`Write file content to [${colors.yellowBright(distFilePath)}]`);
36
- await writeFileAsync(distFilePath, sourceContent);
37
- const distFilePathLocal = join(parse(packageJsonPath).dir, parsedName.base);
38
- debug.info(`Write file content to [${colors.yellowBright(distFilePathLocal)}]`);
39
- await writeFileAsync(distFilePathLocal, sourceContent);
40
- })));
41
- const wasiTarget = targets.find((t) => t.platform === 'wasi');
42
- if (wasiTarget) {
43
- const wasiDir = join(options.cwd, options.npmDir, wasiTarget.platformArchABI);
44
- const cjsFile = join(options.buildOutputDir ?? options.cwd, `${binaryName}.wasi.cjs`);
45
- const workerFile = join(options.buildOutputDir ?? options.cwd, `wasi-worker.mjs`);
46
- const browserEntry = join(options.buildOutputDir ?? options.cwd, `${binaryName}.wasi-browser.js`);
47
- const browserWorkerFile = join(options.buildOutputDir ?? options.cwd, `wasi-worker-browser.mjs`);
48
- debug.info(`Move wasi binding file [${colors.yellowBright(cjsFile)}] to [${colors.yellowBright(wasiDir)}]`);
49
- await writeFileAsync(join(wasiDir, `${binaryName}.wasi.cjs`), await readFileAsync(cjsFile));
50
- debug.info(`Move wasi worker file [${colors.yellowBright(workerFile)}] to [${colors.yellowBright(wasiDir)}]`);
51
- await writeFileAsync(join(wasiDir, `wasi-worker.mjs`), await readFileAsync(workerFile));
52
- debug.info(`Move wasi browser entry file [${colors.yellowBright(browserEntry)}] to [${colors.yellowBright(wasiDir)}]`);
53
- await writeFileAsync(join(wasiDir, `${binaryName}.wasi-browser.js`),
54
- // https://github.com/vitejs/vite/issues/8427
55
- (await readFileAsync(browserEntry, 'utf8')).replace(`new URL('./wasi-worker-browser.mjs', import.meta.url)`, `new URL('${packageName}-wasm32-wasi/wasi-worker-browser.mjs', import.meta.url)`));
56
- debug.info(`Move wasi browser worker file [${colors.yellowBright(browserWorkerFile)}] to [${colors.yellowBright(wasiDir)}]`);
57
- await writeFileAsync(join(wasiDir, `wasi-worker-browser.mjs`), await readFileAsync(browserWorkerFile));
58
- }
59
- }
60
- async function collectNodeBinaries(root) {
61
- const files = await readdirAsync(root, { withFileTypes: true });
62
- const nodeBinaries = files
63
- .filter((file) => file.isFile() &&
64
- (file.name.endsWith('.node') || file.name.endsWith('.wasm')))
65
- .map((file) => join(root, file.name));
66
- const dirs = files.filter((file) => file.isDirectory());
67
- for (const dir of dirs) {
68
- if (dir.name !== 'node_modules') {
69
- nodeBinaries.push(...(await collectNodeBinaries(join(root, dir.name))));
70
- }
71
- }
72
- return nodeBinaries;
73
- }
74
- //# sourceMappingURL=artifacts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/api/artifacts.ts"],"names":[],"mappings":"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"}