Skip to content

Commit

Permalink
lib: use primordials for navigator.userAgent
Browse files Browse the repository at this point in the history
PR-URL: #50467
Reviewed-By: Geoffrey Booth <[email protected]>
Reviewed-By: Vinícius Lourenço Claro Cardoso <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Ethan Arrowood <[email protected]>
  • Loading branch information
Uzlopak authored and UlisesGascon committed Dec 15, 2023
1 parent 3d97e77 commit 057e37c
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions lib/internal/navigator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
'use strict';

const {
ObjectDefineProperties,
StringPrototypeIndexOf,
StringPrototypeSlice,
Symbol,
} = primordials;

const {
ERR_ILLEGAL_CONSTRUCTOR,
} = require('internal/errors').codes;

const {
kEnumerableProperty,
} = require('internal/util');

const {
getAvailableParallelism,
} = internalBinding('os');

const kInitialize = Symbol('kInitialize');
const nodeVersion = process.version;

class Navigator {
// Private properties are used to avoid brand validations.
#availableParallelism;
#userAgent = `Node.js/${StringPrototypeSlice(nodeVersion, 1, StringPrototypeIndexOf(nodeVersion, '.'))}`;

constructor() {
if (arguments[0] === kInitialize) {
return;
}
throw new ERR_ILLEGAL_CONSTRUCTOR();
}

/**
* @return {number}
*/
get hardwareConcurrency() {
this.#availableParallelism ??= getAvailableParallelism();
return this.#availableParallelism;
}

/**
* @return {string}
*/
get userAgent() {
return this.#userAgent;
}
}

ObjectDefineProperties(Navigator.prototype, {
hardwareConcurrency: kEnumerableProperty,
userAgent: kEnumerableProperty,
});

module.exports = {
navigator: new Navigator(kInitialize),
Navigator,
};

0 comments on commit 057e37c

Please sign in to comment.