@ffflorian/mock-udp 1.3.0 → 1.4.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
@@ -2,14 +2,21 @@
2
2
 
3
3
  Mock dgram udp requests. Based on [node-mock-udp](https://github.com/mattrobenolt/node-mock-udp).
4
4
 
5
+ ## Prerequisites
6
+
7
+ - [Node.js](https://nodejs.org) >= 14
8
+ - npm (preinstalled) or [yarn](https://classic.yarnpkg.com)
9
+
5
10
  ## Installation
6
11
 
12
+ ℹ️ This is a hybrid [CommonJS](https://nodejs.org/docs/latest/api/modules.html#modules-commonjs-modules) / [ESM](https://nodejs.org/api/esm.html#introduction) module.
13
+
7
14
  Run `yarn add @ffflorian/mock-udp` or `npm i @ffflorian/mock-udp`.
8
15
 
9
16
  ## Usage
10
17
 
11
18
  ```ts
12
- import * as dgram from 'dgram';
19
+ import dgram from 'node:dgram';
13
20
  import mockudp from '@ffflorian/mock-udp';
14
21
  // When imported, Socket gets patched immediately.
15
22
 
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Scope = exports.isMocked = exports.clean = exports.intercept = exports.revert = exports.add = void 0;
4
- const dgram_1 = require("dgram");
1
+ import { Socket } from 'node:dgram';
5
2
  let intercepts = {};
6
- const originalSocketSend = dgram_1.Socket.prototype.send;
3
+ const originalSocketSend = Socket.prototype.send;
7
4
  class Scope {
8
5
  constructor() {
9
6
  this._done = false;
@@ -12,7 +9,6 @@ class Scope {
12
9
  return this._done;
13
10
  }
14
11
  }
15
- exports.Scope = Scope;
16
12
  function overriddenSocketSend(msg, offsetOrPortOrCallback, lengthOrAddressOrCallback, portOrCallback, addressOrCallback, callbackOrUndefined) {
17
13
  const hasLengthAndOffset = typeof portOrCallback === 'number';
18
14
  const address = (hasLengthAndOffset ? addressOrCallback : lengthOrAddressOrCallback) || 'localhost';
@@ -54,23 +50,19 @@ function add(path) {
54
50
  intercepts[path].push(scope);
55
51
  return scope;
56
52
  }
57
- exports.add = add;
58
53
  function cleanInterceptions() {
59
54
  intercepts = {};
60
55
  }
61
- exports.clean = cleanInterceptions;
62
56
  function interceptSocketSend() {
63
- dgram_1.Socket.prototype.send = overriddenSocketSend;
57
+ Socket.prototype.send = overriddenSocketSend;
64
58
  }
65
- exports.intercept = interceptSocketSend;
66
59
  function isMocked() {
67
- return dgram_1.Socket.prototype.send.hasOwnProperty('_mocked');
60
+ return Socket.prototype.send.hasOwnProperty('_mocked');
68
61
  }
69
- exports.isMocked = isMocked;
70
62
  function restoreSocketSend() {
71
- dgram_1.Socket.prototype.send = originalSocketSend;
63
+ Socket.prototype.send = originalSocketSend;
72
64
  }
73
- exports.revert = restoreSocketSend;
74
65
  interceptSocketSend();
75
- exports.default = add;
66
+ export default add;
67
+ export { add, restoreSocketSend as revert, interceptSocketSend as intercept, cleanInterceptions as clean, isMocked, Scope, };
76
68
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ declare class Scope {
3
+ _done: boolean;
4
+ address?: string;
5
+ buffer?: Buffer | string | Uint8Array | any[];
6
+ length?: number;
7
+ offset?: number;
8
+ port?: number;
9
+ constructor();
10
+ done(): boolean;
11
+ }
12
+ declare function add(path: string): Scope;
13
+ declare function cleanInterceptions(): void;
14
+ declare function interceptSocketSend(): void;
15
+ declare function isMocked(): boolean;
16
+ declare function restoreSocketSend(): void;
17
+ export default add;
18
+ export { add, restoreSocketSend as revert, interceptSocketSend as intercept, cleanInterceptions as clean, isMocked, Scope, };
@@ -0,0 +1,68 @@
1
+ import { Socket } from 'node:dgram';
2
+ let intercepts = {};
3
+ const originalSocketSend = Socket.prototype.send;
4
+ class Scope {
5
+ constructor() {
6
+ this._done = false;
7
+ }
8
+ done() {
9
+ return this._done;
10
+ }
11
+ }
12
+ function overriddenSocketSend(msg, offsetOrPortOrCallback, lengthOrAddressOrCallback, portOrCallback, addressOrCallback, callbackOrUndefined) {
13
+ const hasLengthAndOffset = typeof portOrCallback === 'number';
14
+ const address = (hasLengthAndOffset ? addressOrCallback : lengthOrAddressOrCallback) || 'localhost';
15
+ const callback = hasLengthAndOffset ? callbackOrUndefined : portOrCallback;
16
+ const length = hasLengthAndOffset ? lengthOrAddressOrCallback || 0 : 0;
17
+ const offset = hasLengthAndOffset ? offsetOrPortOrCallback : 0;
18
+ const port = hasLengthAndOffset ? portOrCallback : offsetOrPortOrCallback;
19
+ if (offset >= msg.length) {
20
+ throw new Error('Offset into buffer too large.');
21
+ }
22
+ if (offset + length > msg.length) {
23
+ throw new Error('Offset + length beyond buffer length.');
24
+ }
25
+ const newBuffer = msg.slice(offset, offset + length);
26
+ const host = `${address}:${port}`;
27
+ if (intercepts.hasOwnProperty(host)) {
28
+ intercepts[host].forEach(scope => {
29
+ scope._done = true;
30
+ scope.address = address;
31
+ scope.buffer = newBuffer;
32
+ scope.length = length;
33
+ scope.offset = offset;
34
+ scope.port = port;
35
+ });
36
+ delete intercepts[host];
37
+ if (callback) {
38
+ setImmediate(() => callback(null, length));
39
+ }
40
+ return;
41
+ }
42
+ throw new Error(`Request sent to unmocked path: ${host}.`);
43
+ }
44
+ overriddenSocketSend._mocked = true;
45
+ function add(path) {
46
+ if (!intercepts.hasOwnProperty(path)) {
47
+ intercepts[path] = [];
48
+ }
49
+ const scope = new Scope();
50
+ intercepts[path].push(scope);
51
+ return scope;
52
+ }
53
+ function cleanInterceptions() {
54
+ intercepts = {};
55
+ }
56
+ function interceptSocketSend() {
57
+ Socket.prototype.send = overriddenSocketSend;
58
+ }
59
+ function isMocked() {
60
+ return Socket.prototype.send.hasOwnProperty('_mocked');
61
+ }
62
+ function restoreSocketSend() {
63
+ Socket.prototype.send = originalSocketSend;
64
+ }
65
+ interceptSocketSend();
66
+ export default add;
67
+ export { add, restoreSocketSend as revert, interceptSocketSend as intercept, cleanInterceptions as clean, isMocked, Scope, };
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/package.json CHANGED
@@ -2,31 +2,36 @@
2
2
  "author": "Florian Imdahl <git@ffflorian.de>",
3
3
  "description": "Mock dgram udp requests.",
4
4
  "devDependencies": {
5
- "rimraf": "5.0.0",
6
- "typescript": "5.0.4"
5
+ "rimraf": "5.0.5",
6
+ "typescript": "5.2.2"
7
7
  },
8
8
  "engines": {
9
- "node": ">= 10.9"
9
+ "node": ">= 14.16"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/mjs/index.js",
14
+ "require": "./dist/cjs/index.js"
15
+ }
10
16
  },
11
17
  "files": [
12
- "index.d.ts",
13
- "index.js",
14
- "index.js.map"
18
+ "dist"
15
19
  ],
16
20
  "license": "GPL-3.0",
17
- "main": "index.js",
21
+ "main": "dist/cjs/index.js",
22
+ "module": "dist/mjs/index.js",
18
23
  "name": "@ffflorian/mock-udp",
19
- "publishConfig": {
20
- "directory": "flattened"
21
- },
22
24
  "repository": "https://github.com/ffflorian/node-packages/tree/main/packages/mock-udp",
23
25
  "scripts": {
24
- "build": "tsc",
26
+ "build": "yarn build:cjs && yarn build:mjs && yarn generate:packagejson",
27
+ "build:cjs": "tsc -p tsconfig.cjs.json",
28
+ "build:mjs": "tsc -p tsconfig.json",
25
29
  "clean": "rimraf dist",
26
30
  "dist": "yarn clean && yarn build",
27
- "flatten": "node ../publish-flat/dist/cli.js -o flattened",
28
- "postversion": "node ../publish-flat/dist/cli-copy.js -o flattened/package.json version",
29
- "test": "ts-node -P tsconfig.jasmine.json ../../node_modules/jasmine/bin/jasmine.js"
31
+ "generate:packagejson": "../../bin/generate-hybrid-package-json.sh",
32
+ "test": "ts-node-esm -P tsconfig.jasmine.json ../../node_modules/.bin/jasmine"
30
33
  },
31
- "version": "1.3.0"
34
+ "type": "module",
35
+ "version": "1.4.0",
36
+ "gitHead": "e7bb24502cde477597fa401ea467f8d463323cda"
32
37
  }
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
File without changes