@napi-rs/cli 3.0.0-alpha.1 → 3.0.0-alpha.100

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 (176) hide show
  1. package/cli.mjs +1 -1
  2. package/dist/api/__tests__/create-npm-dirs.spec.d.ts +1 -0
  3. package/dist/api/__tests__/new.spec.d.ts +1 -0
  4. package/dist/api/build.d.ts +2 -2
  5. package/dist/api/create-npm-dirs.d.ts +5 -0
  6. package/dist/api/templates/index.d.ts +0 -7
  7. package/dist/api/templates/js-binding.d.ts +2 -1
  8. package/dist/api/templates/load-wasi-template.d.ts +2 -0
  9. package/dist/api/templates/wasi-worker-template.d.ts +2 -0
  10. package/dist/cli.js +3961 -14
  11. package/dist/def/artifacts.d.ts +21 -1
  12. package/dist/def/build.d.ts +167 -4
  13. package/dist/def/create-npm-dirs.d.ts +10 -0
  14. package/dist/def/new.d.ts +25 -7
  15. package/dist/def/pre-publish.d.ts +21 -2
  16. package/dist/def/rename.d.ts +16 -6
  17. package/dist/def/universalize.d.ts +10 -0
  18. package/dist/def/version.d.ts +10 -0
  19. package/dist/index.cjs +10142 -20524
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.js +3711 -29
  22. package/dist/utils/__tests__/config.spec.d.ts +1 -0
  23. package/dist/utils/config.d.ts +70 -6
  24. package/dist/utils/index.d.ts +1 -1
  25. package/dist/utils/metadata.d.ts +13 -1
  26. package/dist/utils/misc.d.ts +3 -3
  27. package/dist/utils/read-config.d.ts +7 -0
  28. package/dist/utils/target.d.ts +9 -6
  29. package/dist/utils/typegen.d.ts +4 -1
  30. package/dist/utils/version.d.ts +2 -1
  31. package/package.json +60 -24
  32. package/src/api/__tests__/create-npm-dirs.spec.ts +210 -0
  33. package/src/api/__tests__/new.spec.ts +429 -0
  34. package/src/api/artifacts.ts +83 -8
  35. package/src/api/build.ts +682 -134
  36. package/src/api/create-npm-dirs.ts +64 -13
  37. package/src/api/new.ts +389 -125
  38. package/src/api/pre-publish.ts +27 -16
  39. package/src/api/rename.ts +103 -17
  40. package/src/api/templates/index.ts +0 -7
  41. package/src/api/templates/js-binding.ts +212 -107
  42. package/src/api/templates/load-wasi-template.ts +216 -0
  43. package/src/api/templates/wasi-worker-template.ts +122 -0
  44. package/src/api/universalize.ts +13 -8
  45. package/src/api/version.ts +5 -2
  46. package/src/commands/artifacts.ts +2 -2
  47. package/src/commands/build.ts +1 -1
  48. package/src/commands/new.ts +46 -49
  49. package/src/def/artifacts.ts +22 -3
  50. package/src/def/build.ts +83 -8
  51. package/src/def/create-npm-dirs.ts +9 -0
  52. package/src/def/new.ts +28 -3
  53. package/src/def/pre-publish.ts +24 -3
  54. package/src/def/rename.ts +11 -2
  55. package/src/def/universalize.ts +9 -0
  56. package/src/def/version.ts +9 -0
  57. package/src/index.ts +2 -0
  58. package/src/utils/__tests__/__fixtures__/napi_type_def +130 -130
  59. package/src/utils/__tests__/__snapshots__/config.spec.ts.md +97 -0
  60. package/src/utils/__tests__/__snapshots__/config.spec.ts.snap +0 -0
  61. package/src/utils/__tests__/__snapshots__/target.spec.ts.md +56 -0
  62. package/src/utils/__tests__/__snapshots__/target.spec.ts.snap +0 -0
  63. package/src/utils/__tests__/__snapshots__/typegen.spec.ts.md +703 -164
  64. package/src/utils/__tests__/__snapshots__/typegen.spec.ts.snap +0 -0
  65. package/src/utils/__tests__/__snapshots__/version.spec.ts.md +9 -8
  66. package/src/utils/__tests__/__snapshots__/version.spec.ts.snap +0 -0
  67. package/src/utils/__tests__/config.spec.ts +81 -0
  68. package/src/utils/__tests__/typegen.spec.ts +19 -4
  69. package/src/utils/cargo.ts +2 -2
  70. package/src/utils/config.ts +147 -13
  71. package/src/utils/index.ts +1 -1
  72. package/src/utils/log.ts +1 -1
  73. package/src/utils/metadata.ts +52 -14
  74. package/src/utils/misc.ts +21 -7
  75. package/src/utils/read-config.ts +20 -0
  76. package/src/utils/target.ts +53 -9
  77. package/src/utils/typegen.ts +100 -40
  78. package/src/utils/version.ts +11 -9
  79. package/dist/api/artifacts.js +0 -50
  80. package/dist/api/build.js +0 -404
  81. package/dist/api/create-npm-dirs.js +0 -63
  82. package/dist/api/new.js +0 -154
  83. package/dist/api/pre-publish.js +0 -157
  84. package/dist/api/rename.js +0 -28
  85. package/dist/api/templates/.gitignore.d.ts +0 -1
  86. package/dist/api/templates/.gitignore.js +0 -198
  87. package/dist/api/templates/.npmignore.d.ts +0 -1
  88. package/dist/api/templates/.npmignore.js +0 -14
  89. package/dist/api/templates/build.rs.d.ts +0 -1
  90. package/dist/api/templates/build.rs.js +0 -4
  91. package/dist/api/templates/cargo.toml.d.ts +0 -6
  92. package/dist/api/templates/cargo.toml.js +0 -25
  93. package/dist/api/templates/ci-template.d.ts +0 -1
  94. package/dist/api/templates/ci-template.js +0 -566
  95. package/dist/api/templates/ci.yml.d.ts +0 -1
  96. package/dist/api/templates/ci.yml.js +0 -92
  97. package/dist/api/templates/index.js +0 -8
  98. package/dist/api/templates/js-binding.js +0 -124
  99. package/dist/api/templates/lib.rs.d.ts +0 -1
  100. package/dist/api/templates/lib.rs.js +0 -10
  101. package/dist/api/templates/package.json.d.ts +0 -8
  102. package/dist/api/templates/package.json.js +0 -30
  103. package/dist/api/universalize.js +0 -38
  104. package/dist/api/version.js +0 -16
  105. package/dist/commands/artifacts.js +0 -19
  106. package/dist/commands/build.js +0 -34
  107. package/dist/commands/create-npm-dirs.js +0 -7
  108. package/dist/commands/help.js +0 -12
  109. package/dist/commands/new.js +0 -112
  110. package/dist/commands/pre-publish.js +0 -8
  111. package/dist/commands/rename.js +0 -7
  112. package/dist/commands/universalize.js +0 -7
  113. package/dist/commands/version.js +0 -7
  114. package/dist/def/artifacts.js +0 -38
  115. package/dist/def/build.js +0 -105
  116. package/dist/def/commands/artifacts.d.ts +0 -15
  117. package/dist/def/commands/artifacts.js +0 -29
  118. package/dist/def/commands/build.d.ts +0 -53
  119. package/dist/def/commands/build.js +0 -105
  120. package/dist/def/commands/create-npm-dirs.d.ts +0 -15
  121. package/dist/def/commands/create-npm-dirs.js +0 -29
  122. package/dist/def/commands/new.d.ts +0 -27
  123. package/dist/def/commands/new.js +0 -53
  124. package/dist/def/commands/pre-publish.d.ts +0 -23
  125. package/dist/def/commands/pre-publish.js +0 -45
  126. package/dist/def/commands/rename.d.ts +0 -25
  127. package/dist/def/commands/rename.js +0 -49
  128. package/dist/def/commands/universalize.d.ts +0 -13
  129. package/dist/def/commands/universalize.js +0 -25
  130. package/dist/def/commands/version.d.ts +0 -13
  131. package/dist/def/commands/version.js +0 -25
  132. package/dist/def/create-npm-dirs.js +0 -38
  133. package/dist/def/new.js +0 -66
  134. package/dist/def/options/artifacts.d.ts +0 -35
  135. package/dist/def/options/artifacts.js +0 -11
  136. package/dist/def/options/build.d.ts +0 -97
  137. package/dist/def/options/build.js +0 -3
  138. package/dist/def/options/create-npm-dirs.d.ts +0 -35
  139. package/dist/def/options/create-npm-dirs.js +0 -11
  140. package/dist/def/options/new.d.ts +0 -79
  141. package/dist/def/options/new.js +0 -15
  142. package/dist/def/options/pre-publish.d.ts +0 -65
  143. package/dist/def/options/pre-publish.js +0 -13
  144. package/dist/def/options/rename.d.ts +0 -75
  145. package/dist/def/options/rename.js +0 -11
  146. package/dist/def/options/universalize.d.ts +0 -28
  147. package/dist/def/options/universalize.js +0 -10
  148. package/dist/def/options/version.d.ts +0 -28
  149. package/dist/def/options/version.js +0 -10
  150. package/dist/def/pre-publish.js +0 -56
  151. package/dist/def/rename.js +0 -58
  152. package/dist/def/universalize.js +0 -33
  153. package/dist/def/version.js +0 -33
  154. package/dist/utils/__tests__/target.spec.js +0 -10
  155. package/dist/utils/__tests__/typegen.spec.js +0 -37
  156. package/dist/utils/__tests__/version.spec.js +0 -5
  157. package/dist/utils/cargo.js +0 -33
  158. package/dist/utils/ci.d.ts +0 -11
  159. package/dist/utils/ci.js +0 -86
  160. package/dist/utils/config.js +0 -42
  161. package/dist/utils/index.js +0 -9
  162. package/dist/utils/log.js +0 -14
  163. package/dist/utils/metadata.js +0 -19
  164. package/dist/utils/misc.js +0 -35
  165. package/dist/utils/target.js +0 -109
  166. package/dist/utils/typegen.js +0 -158
  167. package/dist/utils/version.js +0 -59
  168. package/src/api/templates/.gitignore.ts +0 -198
  169. package/src/api/templates/.npmignore.ts +0 -14
  170. package/src/api/templates/build.rs.ts +0 -4
  171. package/src/api/templates/cargo.toml.ts +0 -35
  172. package/src/api/templates/ci-template.ts +0 -566
  173. package/src/api/templates/ci.yml.ts +0 -116
  174. package/src/api/templates/lib.rs.ts +0 -10
  175. package/src/api/templates/package.json.ts +0 -44
  176. package/src/utils/ci.ts +0 -102
@@ -1,4 +1,6 @@
1
- import { join, resolve } from 'path'
1
+ import { join, resolve } from 'node:path'
2
+
3
+ import { parse } from 'semver'
2
4
 
3
5
  import {
4
6
  applyDefaultCreateNpmDirsOptions,
@@ -11,10 +13,15 @@ import {
11
13
  pick,
12
14
  writeFileAsync as rawWriteFileAsync,
13
15
  Target,
16
+ type CommonPackageJsonFields,
14
17
  } from '../utils/index.js'
15
18
 
16
19
  const debug = debugFactory('create-npm-dirs')
17
20
 
21
+ export interface PackageMeta {
22
+ 'dist-tags': { [index: string]: string }
23
+ }
24
+
18
25
  export async function createNpmDirs(userOptions: CreateNpmDirsOptions) {
19
26
  const options = applyDefaultCreateNpmDirsOptions(userOptions)
20
27
 
@@ -43,20 +50,25 @@ export async function createNpmDirs(userOptions: CreateNpmDirsOptions) {
43
50
  const packageJsonPath = resolve(options.cwd, options.packageJsonPath)
44
51
  const npmPath = resolve(options.cwd, options.npmDir)
45
52
 
46
- debug(`Read content from [${packageJsonPath}]`)
53
+ debug(`Read content from [${options.configPath ?? packageJsonPath}]`)
47
54
 
48
55
  const { targets, binaryName, packageName, packageJson } =
49
- await readNapiConfig(packageJsonPath)
56
+ await readNapiConfig(
57
+ packageJsonPath,
58
+ options.configPath ? resolve(options.cwd, options.configPath) : undefined,
59
+ )
50
60
 
51
61
  for (const target of targets) {
52
62
  const targetDir = join(npmPath, `${target.platformArchABI}`)
53
63
  await mkdirAsync(targetDir)
54
64
 
55
- const binaryFileName = `${binaryName}.${target.platformArchABI}.node`
56
- const scopedPackageJson = {
65
+ const binaryFileName =
66
+ target.arch === 'wasm32'
67
+ ? `${binaryName}.${target.platformArchABI}.wasm`
68
+ : `${binaryName}.${target.platformArchABI}.node`
69
+ const scopedPackageJson: CommonPackageJsonFields = {
57
70
  name: `${packageName}-${target.platformArchABI}`,
58
71
  version: packageJson.version,
59
- os: [target.platform],
60
72
  cpu: target.arch !== 'universal' ? [target.arch] : undefined,
61
73
  main: binaryFileName,
62
74
  files: [binaryFileName],
@@ -69,31 +81,70 @@ export async function createNpmDirs(userOptions: CreateNpmDirsOptions) {
69
81
  'homepage',
70
82
  'license',
71
83
  'engines',
72
- 'publishConfig',
73
84
  'repository',
74
85
  'bugs',
75
86
  ),
76
87
  }
88
+ if (packageJson.publishConfig) {
89
+ scopedPackageJson.publishConfig = pick(
90
+ packageJson.publishConfig,
91
+ 'registry',
92
+ 'access',
93
+ )
94
+ }
95
+ if (target.arch !== 'wasm32') {
96
+ scopedPackageJson.os = [target.platform]
97
+ } else {
98
+ const entry = `${binaryName}.wasi.cjs`
99
+ scopedPackageJson.main = entry
100
+ scopedPackageJson.browser = `${binaryName}.wasi-browser.js`
101
+ scopedPackageJson.files?.push(
102
+ entry,
103
+ scopedPackageJson.browser,
104
+ `wasi-worker.mjs`,
105
+ `wasi-worker-browser.mjs`,
106
+ )
107
+ let needRestrictNodeVersion = true
108
+ if (scopedPackageJson.engines?.node) {
109
+ try {
110
+ const { major } = parse(scopedPackageJson.engines.node) ?? {
111
+ major: 0,
112
+ }
113
+ if (major >= 14) {
114
+ needRestrictNodeVersion = false
115
+ }
116
+ } catch {
117
+ // ignore
118
+ }
119
+ }
120
+ if (needRestrictNodeVersion) {
121
+ scopedPackageJson.engines = {
122
+ node: '>=14.0.0',
123
+ }
124
+ }
125
+ const wasmRuntime = await fetch(
126
+ `https://registry.npmjs.org/@napi-rs/wasm-runtime`,
127
+ ).then((res) => res.json() as Promise<PackageMeta>)
128
+ scopedPackageJson.dependencies = {
129
+ '@napi-rs/wasm-runtime': `^${wasmRuntime['dist-tags'].latest}`,
130
+ }
131
+ }
77
132
 
78
- // Only works with yarn 3.1+
79
- // https://github.com/yarnpkg/berry/pull/3981
80
133
  if (target.abi === 'gnu') {
81
- // @ts-expect-error
82
134
  scopedPackageJson.libc = ['glibc']
83
135
  } else if (target.abi === 'musl') {
84
- // @ts-expect-error
85
136
  scopedPackageJson.libc = ['musl']
86
137
  }
87
138
 
88
139
  const targetPackageJson = join(targetDir, 'package.json')
89
140
  await writeFileAsync(
90
141
  targetPackageJson,
91
- JSON.stringify(scopedPackageJson, null, 2),
142
+ JSON.stringify(scopedPackageJson, null, 2) + '\n',
92
143
  )
93
144
  const targetReadme = join(targetDir, 'README.md')
94
145
  await writeFileAsync(targetReadme, readme(packageName, target))
95
146
 
96
- debug.info(`${packageName}-${target.platformArchABI} created`)
147
+ debug.info(`${packageName} -${target.platformArchABI} created`)
97
148
  }
98
149
  }
99
150