diff --git a/CHANGELOG.md b/CHANGELOG.md index e92762d..b2bbd8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - Pin `domain-browser` to 4.22.0 - Add `require` check for path resolver +- Proxy `process` with additional exports + ([#34](https://github.com/niksy/node-stdlib-browser/pull/34)) ## [1.2.1][] - 2024-09-16 @@ -19,7 +21,7 @@ ### Added - Support for `node:` protocol in Webpack - ([#12](https://github.com/niksy/node-stdlib-browser/)) + ([#12](https://github.com/niksy/node-stdlib-browser/issues/12)) - Rollup warning helper function ## [1.1.0][] - 2021-11-16 diff --git a/README.md b/README.md index dfdaada..6be0ccd 100644 --- a/README.md +++ b/README.md @@ -271,7 +271,7 @@ const b = browserify( | `net` | | [net](mock/net.js) | | `os` | [os-browserify](https://github.com/CoderPuppy/os-browserify) | | | `path` | [path-browserify](https://github.com/browserify/path-browserify) | | -| `process` | [process](https://github.com/defunctzombie/node-process) | [process](mock/process.js) | +| `process` | [process](https://github.com/defunctzombie/node-process) | [process](mock/process.js) | Contains additional exports from newer Node | | `punycode` | [punycode](https://github.com/bestiejs/punycode.js) | | `punycode@1` for browser support | | `querystring` | [querystring-es3](https://github.com/mike-spainhower/querystring) | | Contains additional exports from newer Node versions | | `readline` | | | diff --git a/index.js b/index.js index b646c98..36c93ba 100644 --- a/index.js +++ b/index.js @@ -40,7 +40,7 @@ const net = resolvePath('./mock/empty.js'); const os = resolvePath('os-browserify/browser.js'); const path = resolvePath('path-browserify'); const punycode = resolvePath('punycode/'); -const _process = resolvePath('process/browser.js'); +const _process = resolvePath('./proxy/process').replace('.js', ''); const querystring = resolvePath('./proxy/querystring.js'); const readline = resolvePath('./mock/empty.js'); const repl = resolvePath('./mock/empty.js'); diff --git a/package.json b/package.json index a731df1..cdedf00 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "README.md" ], "scripts": { - "build": "rollup --config rollup.config.js && babel helpers/esbuild/shim.src.js --out-file=helpers/esbuild/shim.js", + "build": "del '{esm/,cjs/}' && rollup --config rollup.config.js && babel helpers/esbuild/shim.src.js --out-file=helpers/esbuild/shim.js", "lint": "eslint '{index,lib/**/*,test/**/*,helpers/**/*,example/**/*}.{js,mjs}'", "lint:types": "tsc", "module-check": "node -e 'require(\"node-stdlib-browser\"); require(\"node-stdlib-browser/helpers/esbuild/plugin\");' && node --input-type=module -e 'import \"node-stdlib-browser\"; import \"node-stdlib-browser/helpers/esbuild/plugin\";'", @@ -94,6 +94,7 @@ "core-js": "^2.6.5", "cpy": "^8.1.2", "del": "^6.0.0", + "del-cli": "^3.0.1", "esbuild": "^0.13.14", "eslint": "^7.31.0", "eslint-config-niksy": "^10.0.0", diff --git a/proxy/process.js b/proxy/process.js new file mode 100644 index 0000000..63f41ba --- /dev/null +++ b/proxy/process.js @@ -0,0 +1,119 @@ +import { + nextTick, + title, + env as environment, + argv, + version, + versions, + on, + addListener, + once, + off, + removeListener, + removeAllListeners, + emit, + prependListener, + prependOnceListener, + listeners, + cwd, + chdir, + umask, + // @ts-ignore + browser as _browser, + // @ts-ignore + binding as _binding +} from 'process/browser.js'; + +function noop() {} + +const browser = /** @type {boolean} */ (_browser); +const emitWarning = noop; +const binding = /** @type {Function} */ (_binding); +const exit = noop; +const pid = 1; +const features = {}; +const kill = noop; +const dlopen = noop; +const uptime = noop; +const memoryUsage = noop; +const uvCounters = noop; +const platform = 'browser'; +const arch = 'browser'; +const execPath = 'browser'; +const execArgv = /** @type {string[]} */ ([]); + +const api = { + nextTick, + title, + browser, + env: environment, + argv, + version, + versions, + on, + addListener, + once, + off, + removeListener, + removeAllListeners, + emit, + emitWarning, + prependListener, + prependOnceListener, + listeners, + binding, + cwd, + chdir, + umask, + exit, + pid, + features, + kill, + dlopen, + uptime, + memoryUsage, + uvCounters, + platform, + arch, + execPath, + execArgv +}; + +export default api; + +export { + nextTick, + title, + browser, + environment as env, + argv, + version, + versions, + on, + addListener, + once, + off, + removeListener, + removeAllListeners, + emit, + emitWarning, + prependListener, + prependOnceListener, + listeners, + binding, + cwd, + chdir, + umask, + exit, + pid, + features, + kill, + dlopen, + uptime, + memoryUsage, + uvCounters, + platform, + arch, + execPath, + execArgv +}; diff --git a/proxy/process/browser.js b/proxy/process/browser.js new file mode 100644 index 0000000..5781d5b --- /dev/null +++ b/proxy/process/browser.js @@ -0,0 +1,5 @@ +import api from '../process.js'; + +export default api; + +export * from '../process.js'; diff --git a/rollup.config.js b/rollup.config.js index 87c2e80..8f8a143 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -34,6 +34,9 @@ function getConfig(filename, options = {}) { if (source === 'url') { return require.resolve('url/'); } + if (source === 'process/browser.js') { + return require.resolve('process/browser.js'); + } if ( source === 'path' && importer.includes('proxy/url.js') @@ -163,6 +166,14 @@ module.exports = [ [ 'proxy/querystring.js', { cjsOutro: 'exports = module.exports = api;', cjsExports: 'named' } + ], + [ + 'proxy/process.js', + { cjsOutro: 'exports = module.exports = api;', cjsExports: 'named' } + ], + [ + 'proxy/process/browser.js', + { cjsOutro: 'exports = module.exports = api;', cjsExports: 'named' } ] ].map((entry) => { const [filename, options = {}] = [].concat(entry); diff --git a/test/index.js b/test/index.js index 9aa8db5..b0280c2 100644 --- a/test/index.js +++ b/test/index.js @@ -7,6 +7,7 @@ import parseNodeVersion from 'parse-node-version'; import api from '../index'; import url from '../proxy/url'; import qs from '../proxy/querystring'; +import _process from '../proxy/process'; /** @typedef {import('../index').PackageNames} PackageNames */ @@ -37,7 +38,7 @@ const packages = { net: 'mock/empty.js', os: 'node_modules/os-browserify', path: 'node_modules/path-browserify', - process: 'node_modules/process', + process: 'proxy/process', punycode: 'node_modules/punycode', querystring: 'proxy/querystring.js', readline: 'mock/empty.js', @@ -415,6 +416,17 @@ describe('`querystring` additional exports', function () { }); }); +describe('`process` additional exports', function () { + it('has exports for browser environment', function () { + assert.equal(_process.title, 'browser'); + assert.equal(_process.browser, true); + assert.equal(_process.arch, 'browser'); + assert.equal(_process.platform, 'browser'); + assert.ok(Array.isArray(_process.execArgv)); + assert.ok(typeof _process.emitWarning !== 'undefined'); + }); +}); + const nodeVersion = parseNodeVersion(process.version); const shouldBundle = nodeVersion.major >= 12; const shouldBundleESM = nodeVersion.major >= 16; diff --git a/types/lib.d.ts b/types/lib.d.ts index 56757e7..04f5e05 100644 --- a/types/lib.d.ts +++ b/types/lib.d.ts @@ -2,3 +2,8 @@ declare module 'querystring-es3' { import { decode, encode, parse, stringify } from 'querystring'; export { decode, encode, parse, stringify }; }; + +declare module 'process/browser.js' { + const process: NodeJS.Process; + export = process; +};