napi-postinstall 0.2.5 → 0.3.0

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/README.md CHANGED
@@ -76,6 +76,7 @@ This will check and prepare the napi binding packages for you automatically.
76
76
  #### Types
77
77
 
78
78
  ```ts
79
+ // napi-postinstall
79
80
  export interface PackageJson {
80
81
  name: string
81
82
  version: string
@@ -85,16 +86,30 @@ export declare function checkAndPreparePackage(
85
86
  packageNameOrPackageJson: PackageJson | string,
86
87
  checkVersion?: boolean,
87
88
  ): Promise<void>
89
+
90
+ // napi-postinstall/fallback
91
+ declare function fallback<T = unknown>(
92
+ packageJsonPath: string,
93
+ checkVersion?: boolean,
94
+ ): T
95
+ export = fallback
88
96
  ```
89
97
 
90
98
  #### Example
91
99
 
92
100
  ```js
93
- import { checkAndPreparePackage, isNpm } from 'napi-postinstall'
101
+ // index.js
102
+ const { checkAndPreparePackage, isNpm } = require('napi-postinstall')
94
103
 
95
104
  if (isNpm()) {
96
- checkAndPreparePackage('unrs-resolver' /* <napi-package-name> */)
105
+ void checkAndPreparePackage('unrs-resolver' /* <napi-package-name> */)
97
106
  }
107
+
108
+ // fallback.js
109
+ module.exports = require('napi-postinstall/fallback')(
110
+ require.resolve('../package.json') /* <napi-package-json-path> */,
111
+ true /* <check-version> */,
112
+ )
98
113
  ```
99
114
 
100
115
  ## Sponsors and Backers
@@ -1,4 +1,4 @@
1
- import { PackageJson } from './types.js';
1
+ import type { PackageJson } from './types.js';
2
2
  export declare const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org/";
3
3
  export declare const meta: PackageJson;
4
4
  export declare const LOG_PREFIX: string;
@@ -0,0 +1,2 @@
1
+ declare function fallback<T = unknown>(packageJsonPath: string, checkVersion?: boolean): T;
2
+ export = fallback;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ const node_child_process_1 = require("node:child_process");
3
+ const fs = require("node:fs");
4
+ const os = require("node:os");
5
+ const path = require("node:path");
6
+ const constants_js_1 = require("./constants.js");
7
+ const helpers_js_1 = require("./helpers.js");
8
+ const EXECUTORS = {
9
+ npm: 'npx',
10
+ pnpm: 'pnpm',
11
+ yarn: 'yarn',
12
+ bun: 'bun',
13
+ deno: (args) => ['deno', 'run', `npm:${args[0]}`, ...args.slice(1)],
14
+ };
15
+ function constructCommand(value, args) {
16
+ const list = typeof value === 'function'
17
+ ? value(args)
18
+ :
19
+ [].concat(value, args);
20
+ return {
21
+ command: list[0],
22
+ args: list.slice(1),
23
+ };
24
+ }
25
+ function fallback(packageJsonPath, checkVersion) {
26
+ const packageJson = require(packageJsonPath);
27
+ const { name, version: pkgVersion, optionalDependencies } = packageJson;
28
+ const { napi, version = pkgVersion } = (0, helpers_js_1.getNapiInfoFromPackageJson)(packageJson, checkVersion);
29
+ if (checkVersion && pkgVersion !== version) {
30
+ throw new Error((0, helpers_js_1.errorMessage)(`Inconsistent package versions found for \`${name}\` v${pkgVersion} vs \`${napi.packageName}\` v${version}.`));
31
+ }
32
+ if (process.versions.webcontainer) {
33
+ const bindingPkgName = `${napi.packageName}-${constants_js_1.WASM32_WASI}`;
34
+ if (!optionalDependencies?.[bindingPkgName]) {
35
+ throw new Error((0, helpers_js_1.errorMessage)(`\`${constants_js_1.WASM32_WASI}\` target is unavailable for \`${name}\` v${version}`));
36
+ }
37
+ const baseDir = path.resolve(os.tmpdir(), `${name}-${version}`);
38
+ const bindingEntry = path.resolve(baseDir, `node_modules/${bindingPkgName}/${napi.binaryName}.wasi.cjs`);
39
+ if (!fs.existsSync(bindingEntry)) {
40
+ fs.rmSync(baseDir, { recursive: true, force: true });
41
+ fs.mkdirSync(baseDir, { recursive: true });
42
+ const bindingPkg = `${bindingPkgName}@${version}`;
43
+ console.log((0, helpers_js_1.errorMessage)(`Downloading \`${bindingPkg}\` on WebContainer...`));
44
+ (0, node_child_process_1.execFileSync)('pnpm', ['i', bindingPkg], {
45
+ cwd: baseDir,
46
+ stdio: 'inherit',
47
+ });
48
+ }
49
+ return require(bindingEntry);
50
+ }
51
+ const userAgent = ((process.env.npm_config_user_agent || '').split('/')[0] ||
52
+ 'npm');
53
+ const executor = EXECUTORS[userAgent];
54
+ if (!executor) {
55
+ throw new Error((0, helpers_js_1.errorMessage)(`Unsupported package manager: ${userAgent}. Supported managers are: ${Object.keys(EXECUTORS).join(', ')}.`));
56
+ }
57
+ const { command, args } = constructCommand(executor, [
58
+ 'napi-postinstall',
59
+ name,
60
+ version,
61
+ checkVersion ? '1' : '0',
62
+ ]);
63
+ const pkgDir = path.dirname(packageJsonPath);
64
+ (0, node_child_process_1.execFileSync)(command, args, {
65
+ cwd: pkgDir,
66
+ stdio: 'inherit',
67
+ });
68
+ process.env[`SKIP_${name.replace(/-/g, '_').toUpperCase()}_FALLBACK`] = '1';
69
+ const PKG_RESOLVED_PATH = require.resolve(pkgDir);
70
+ delete require.cache[PKG_RESOLVED_PATH];
71
+ return require(pkgDir);
72
+ }
73
+ module.exports = fallback;
74
+ //# sourceMappingURL=fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../src/fallback.ts"],"names":[],"mappings":"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"}
package/lib/helpers.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { NapiInfo, PackageJson } from './types.js';
1
+ import type { NapiInfo, PackageJson } from './types.js';
2
2
  export declare function getGlobalNpmRegistry(): string;
3
3
  export declare function removeRecursive(dir: string): void;
4
4
  export declare function downloadedNodePath(name: string, subpath: string): string;
package/lib/target.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { Target } from './types.js';
1
+ import type { Target } from './types.js';
2
2
  export declare function parseTriple(rawTriple: string): Target;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "napi-postinstall",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "type": "commonjs",
5
5
  "description": "The `postinstall` script helper for handling native bindings in legacy `npm` versions",
6
6
  "repository": "git+https://github.com/un-ts/napi-postinstall.git",
@@ -18,6 +18,10 @@
18
18
  "types": "./lib/index.d.ts",
19
19
  "default": "./lib/index.js"
20
20
  },
21
+ "./fallback": {
22
+ "types": "./lib/fallback.d.ts",
23
+ "default": "./lib/fallback.js"
24
+ },
21
25
  "./package.json": "./package.json"
22
26
  },
23
27
  "files": [