Comparing version
39
index.js
@@ -1,2 +0,1 @@ | ||
'use strict'; | ||
@@ -9,25 +8,23 @@ | ||
class Xpipe { | ||
/** | ||
* Return a cross-platform IPC path | ||
* @return {string} | ||
*/ | ||
static eq(path) { | ||
const prefix = Xpipe.prefix; | ||
if (prefix.endsWith('/') && path.startsWith('/')) { | ||
return prefix + path.substring(1); | ||
} | ||
return prefix + path; | ||
} | ||
/** | ||
* Return a cross-platform IPC path | ||
* @return {string} | ||
*/ | ||
static eq(path) { | ||
const prefix = Xpipe.prefix; | ||
if (prefix.endsWith('/') && path.startsWith('/')) { | ||
return prefix + path.substr(1); | ||
} | ||
return prefix + path; | ||
} | ||
/** | ||
* Returns the prefix on Windows and empty string otherwise | ||
* @return {string} | ||
*/ | ||
static get prefix() { | ||
return process.platform === 'win32' ? '//./pipe/' : ''; | ||
} | ||
/** | ||
* Returns the prefix on Windows and empty string otherwise | ||
* @return {string} | ||
*/ | ||
static get prefix() { | ||
return process.platform === 'win32' ? '//./pipe/' : ''; | ||
} | ||
} | ||
module.exports = Xpipe; |
{ | ||
"name": "xpipe", | ||
"version": "1.0.6", | ||
"description": "Use cross-platform IPC paths in node.js.", | ||
"version": "1.0.7", | ||
"description": "Use cross-platform IPC paths in Node.js.", | ||
"main": "index.js", | ||
@@ -6,0 +6,0 @@ "scripts": { |
@@ -0,60 +1,66 @@ | ||
# xpipe<sup>[^1]</sup> | ||
xpipe<sup>[1]</sup> | ||
=================== | ||
Use cross-platform IPC paths in Node.js. | ||
Use cross-platform IPC paths in node. | ||
## Background | ||
Background | ||
---------- | ||
In Node.js - instead of using TCP - you also can take IPC<sup>[^2]</sup> to communicate to services like | ||
In node - instead of using TCP - you can also take IPC<sup>[2]</sup> to communicate to services like | ||
- web servers (NGINX) | ||
- data structure stores (redis) | ||
- databases (MongoDB, Cassandra) | ||
- web servers (NGINX, Caddy) | ||
- databases (redis, PostgreSQL, MongoDB) | ||
- etc. | ||
or to interconnect node apps, Electron frontends/backends etc. | ||
or to interconnect Node.js apps, Electron frontends/backends and so on. | ||
**This can lead to large speed gains.** | ||
On unixoid operating systems - e.g. Linux and OS X - we use [Unix domain sockets](https://en.wikipedia.org/wiki/Unix_domain_socket) | ||
that are referred by file descriptors. | ||
Windows has [named pipes](https://en.wikipedia.org/wiki/Named_pipe) for it, living | ||
in the root directory of the NPFS<sup>[3]</sup>, mounted under the special path \\\\.\\pipe\\. | ||
On unixoid operating systems - e.g. Linux and OS X - we use [Unix domain sockets](https://en.wikipedia.org/wiki/Unix_domain_socket) | ||
that are referred by file descriptors. | ||
Windows has [named pipes](https://en.wikipedia.org/wiki/Named_pipe) for it, living | ||
in the root directory of the NPFS<sup>[^3]</sup>, mounted under the special path \\\\.\\pipe\\. | ||
**To mitigate these differences and to to support writing portable code, xpipe was born...** | ||
Installation | ||
------------ | ||
## Installation | ||
npm install xpipe | ||
## Usage | ||
Usage | ||
----- | ||
```javascript | ||
// CommonJS (CJS) require | ||
const xpipe = require('xpipe'); | ||
``` | ||
```javascript | ||
// ECMAScript Modules (ESM) import | ||
import xpipe from 'xpipe'; | ||
``` | ||
### xpipe.prefix | ||
```javascript | ||
let prefix = xpipe.prefix; | ||
console.log( `prefix: ${prefix}` ); | ||
/* | ||
[empty string] on Linux and OS X | ||
"//./pipe/" on Windows | ||
*/ | ||
console.log(`prefix: ${prefix}`); | ||
// [empty string] on Linux and macOS | ||
// "//./pipe/" on Windows | ||
``` | ||
### xpipe.eq | ||
```javascript | ||
let ipcPath = xpipe.eq('/tmp/my.sock'); | ||
console.log( `ipcPath: ${ipcPath}` ); | ||
/* | ||
"/tmp/my.sock" on Linux and OS X | ||
"//./pipe/tmp/my.sock" on Windows | ||
*/ | ||
console.log(`ipcPath: ${ipcPath}`); | ||
// Returns a cross-platform IPC path: | ||
// "/tmp/my.sock" on Linux and OS X | ||
// "//./pipe/tmp/my.sock" on Windows | ||
``` | ||
When did Windows start accepting forward slash as a path separator? | ||
------------------------------------------------------------------- | ||
## When did Windows start accepting forward slash as a path separator? | ||
Every Windows API/kernel ever has accepted "/" as a path separator. | ||
So has every version of MS-DOS beginning with DOS 2.0 (the first version | ||
So has every version of MS-DOS beginning with DOS 2.0 (the first version | ||
to support subdirectories). | ||
@@ -65,8 +71,10 @@ | ||
This behaviour could be bypassed (at least on modern Windows systems) by including | ||
This behaviour could be bypassed (at least on modern Windows systems) by including | ||
the path in double quotation marks: | ||
- **cd c:/Windows** and **cd /Windows** work<sup>[4]</sup> | ||
- **cd c:/Windows** and **cd /Windows** work<sup>[^4]</sup> | ||
- **dir ./ /B** fails but **dir "./" /B** works | ||
Further articles: | ||
Further articles: | ||
- https://en.m.wikipedia.org/wiki/Path_(computing) | ||
@@ -76,5 +84,5 @@ | ||
[1]: xpipe stands for **xp (cross-platform) IPC path equalizer** | ||
[2]: inter-process communication, see https://en.wikipedia.org/wiki/Inter-process_communication | ||
[3]: named pipe file system (in-memory) | ||
[4]: on Windows "/" without a leading drive letter represents the root of the current drive | ||
[^1]: xpipe stands for **xp (cross-platform) IPC path equalizer** | ||
[^2]: inter-process communication, see [https://en.wikipedia.org/wiki/Inter-process_communication](https://en.wikipedia.org/wiki/Inter-process_communication) | ||
[^3]: named pipe file system (in-memory) | ||
[^4]: on Windows "/" without a leading drive letter represents the root of the current drive |
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
4811
0.19%87
10.13%0
-100%