npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@xan105/nodert

v2.2.1

Published

NodeRT but precompiled (use WinRT API directly from node)

Downloads

457

Readme

About

NodeRT but precompiled (use WinRT API directly from node).

Usage is similar to the original NodeRT package(s). For more details on NodeRT, please kindly see the corresponding NodeRT package.

📦 Scoped @xan105 packages are for my own personal use but feel free to use them.

Example

Dummy toast notification


import * as winRT from "@xan105/nodert";

const xml = new winRT.data.xml.dom.XmlDocument();
xml.loadXml(xmlString);

const toast = new winRT.ui.notifications.ToastNotification(xml);
const toaster = winRT.ui.notifications.ToastNotificationManager.createToastNotifier(appID);
toaster.show(toast);

setTimeout(() => {}, 100); //Keep alive

💡 Interested in toast notification ? check out powertoast.

Install

npm i @xan105/nodert

An internet connection is required to download the prebuilt binaries. They are hosted on github.

By default every NodeRT bindings will be installed. Similar to nodert-npm you can choose to only keep the NodeRT bindings you do need by:

  • passing a comma separated list of modules as argument
npm i @xan105/nodert --modules="windows.ui.notifications, windows.data.xml.dom"
  • or by adding a list of modules in your package.json file under the _nodert/modules path

For example, having the following section in your package.json will result with the installation of the "windows.devices.geolocation" and "windows.devices.sensors" modules:

"_nodert" : {
  "modules" : [
    "windows.devices.geolocation",
    "windows.device.sensors"
  ]
},

NodeRT scope used as a base is nodert-win11-22h2. XAML and *.preview WinRT namespaces are removed. Some namespaces have been kept back to win10-rs4 due to compilation failure (regression).

List of namespaces can be found here (GitHub).

ABI

NodeRT packages are not using n-api they must be compiled for every ABI. Unless exception, expect prebuilds for current and previous Node.js LTS releases (x64 / ARM64). ⚠️ Due to the fast Electron release cycle, do not expect this package to always keep up with the latest.

List of provided ABI can be found here (GitHub) or in the corresponding GitHub release.

ℹ️ You may want to check previous versions of this package if you are still using an older version of Node or Electron. Older versions are dropped over time due to usage of new features and the like.

Electron

Switching to Electron ABI instead of Node can be done by adding the --electron flag or the env. variable npm_config_runtime set to electron.

Alternatively in your package.json file under the _nodert path:

"_nodert" : {
  "runtime": "electron",
  "modules" : [
    "windows.devices.geolocation",
    "windows.device.sensors"
  ]
},

ℹ️ Electron's packages.json file will be read to determine Electron's ABI (I recommend you install it first to avoid any surprise).

💡 In case npm mutes the output of the install script; You can check inside node_modules/@xan105/nodeRT/prebuilds which runtime was downloaded: node or electron.

⚠️ NodeRT should be loaded in the main process NodeRT#158

API

Please see the NodeRT and Microsoft docs for more details.

⚠️ This module is only available as an ECMAScript module (ESM).

WinRT namespaces are also exported under their respective namespace:

import { ui } from "@xan105/nodert" 
const toast = new ui.notifications.ToastNotification(xml);

import { notifications } from "@xan105/nodert/ui" 
const toast = new notifications.ToastNotification(xml);

⚠️ Please be warned that in case of missing bindings the corresponding exports will be undefined. They are a couple of them due to compilation failure.

🐞 NB: Provided types are those from NodeRT packages. I know they have some errors but I haven't the courage to fix them up by hand.

Build Env

🆚 Visual Studio 2022:

  • Visual Studio Installer:

    • C++ core features
    • MSVC v143 - VS 2022 C++ x86/x64 build tools (latest)
    • MSVC v140 - VS 2015 C++ build tools (v14.00) //VS2015 build tools
    • C++ ATL for latest v143 (x86 & x64)
    • C++ MFC for latest v143 (x86 & x64)
    • MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (latest)
    • C++ ATL for latest v143 (ARM64/ARM64EC)
    • C++ MFC for latest v143 (ARM64/ARM64EC)
    • Windows 11 SDK 22h2 (10.0.22621.0)
  • Manual:

⬢ Node.js native addon:

  • Node.js v20.12.2
  • npm v10.5.0
  • node-gyp v10.1.0
  • nan v2.19.0
  • Python3 v3.11.3