commit 0b1a1ac0383036b189097a967fa6acabcdf12582
Author: finwo <finwo@pm.me>
Date: Tue, 27 Nov 2018 13:00:26 +0100
Project init
Diffstat:
6 files changed, 304 insertions(+), 0 deletions(-)
diff --git a/.babelrc b/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets" : ['env']
+}
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,4 @@
+/.idea/
+/node_modules/
+/coverage/
+/.gtm/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
@@ -0,0 +1,28 @@
+image: node:10-alpine
+
+cache:
+ paths:
+ - node_modules/
+
+stages:
+ - test
+ - deploy
+
+tests:
+ stage: test
+ retry: 1
+ script:
+ - node -v
+ - npm -v
+ - npm rebuild
+ - npm install
+ - npm test
+
+publish to npmjs.com:
+ stage: deploy
+ retry: 2
+ only:
+ - master
+ script:
+ - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
+ - if [ $(npm view $(node -p "require('./package.json').name") version) != $(node -p "require('./package.json').version") ]; then npm publish ; fi
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
@@ -0,0 +1,5 @@
+# Contributor Code of Conduct
+
+This project adheres to No Code of Conduct. We are all adults. We accept anyone's contributions. Nothing else matters.
+
+For more information please visit the [No Code of Conduct](https://github.com/domgetter/NCoC) homepage.
diff --git a/README.md b/README.md
@@ -0,0 +1,83 @@
+# rpc-duplex
+
+[](https://nodei.co/npm/rpc-duplex/)
+
+> Streamed RPC library for both Node.JS and the browser
+
+## Important notes
+
+This implementation **DOES NOT** follow the [msgpack-rpc][msgpack-rpc] specification. It intends to provide a stable
+stand-alone solution for remote-procedure-calling over websockets in both Node.JS and the browser.
+
+The protocol is **NOT** versioned (yet), updates may break your application until it is. No major version will be
+released until the protocol is versioned & updates should not break applications.
+
+## Install
+
+```bash
+npm install --save rpc-duplex
+```
+
+## Usage
+
+### Node.JS
+
+```js
+const rpc = require('rpc-duplex');
+
+// Creating a provider
+const provider = rpc({}, {
+ capitalize( str ) {
+ return str.toUpperCase();
+ },
+ throwError( arg ) {
+ throw new Error(arg);
+ }
+});
+
+// Creating a consumer
+const consumer = rpc();
+
+// Connect consumer & provider
+// Normally this goes through a network of sorts
+provider.pipe(consumer).pipe(provider);
+
+// Use provided functions
+const remote = rpc.remote(consumer);
+
+// Go async so you can copy-paste this code
+(async () => {
+
+ // Wait for functions to appear
+ while(remote.capitalize) await new Promise(r=>setTimeout(r,100));
+
+ // Call a remote function
+ let result = await remote.capitalize('foobar');
+ console.log(result); // FOOBAR
+
+ // Errors are re-thrown
+ try {
+ await remote.throwError('hello world');
+ } catch(e) {
+ console.log(e.message); // hello world
+ }
+
+})();
+```
+
+### Browser
+
+Browser usage is possible through the use of [browserify][browserify].
+
+This package makes use of ES6 features. If you want to use this module in older browsers you'll need to use a plugin
+like [esmify][esmify] to ensure it works.
+
+## TODO
+
+- version the protocol
+- document the resulting protocol (like a spec)
+- automatic reconnect?
+
+[browserify]: https://npmjs.com/package/browserify
+[esmify]: https://npmjs.com/package/esmify
+[msgpack-rpc]: https://github.com/msgpack-rpc/msgpack-rpc
diff --git a/jest.config.js b/jest.config.js
@@ -0,0 +1,181 @@
+// For a detailed explanation regarding each configuration property, visit:
+// https://jestjs.io/docs/en/configuration.html
+
+module.exports = {
+ // All imported modules in your tests should be mocked automatically
+ // automock: false,
+
+ // Stop running tests after the first failure
+ // bail: false,
+
+ // Respect "browser" field in package.json when resolving modules
+ // browser: false,
+
+ // The directory where Jest should store its cached dependency information
+ // cacheDirectory: "/tmp/jest_rs",
+
+ // Automatically clear mock calls and instances between every test
+ // clearMocks: false,
+
+ // Indicates whether the coverage information should be collected while executing the test
+ collectCoverage: true,
+
+ // An array of glob patterns indicating a set of files for which coverage information should be collected
+ // collectCoverageFrom: null,
+
+ // The directory where Jest should output its coverage files
+ coverageDirectory: "coverage",
+
+ // An array of regexp pattern strings used to skip coverage collection
+ coveragePathIgnorePatterns: [
+ "/node_modules/"
+ ],
+
+ // A list of reporter names that Jest uses when writing coverage reports
+ // coverageReporters: [
+ // "json",
+ // "text",
+ // "lcov",
+ // "clover"
+ // ],
+
+ // An object that configures minimum threshold enforcement for coverage results
+ // coverageThreshold: null,
+
+ // Make calling deprecated APIs throw helpful error messages
+ // errorOnDeprecated: false,
+
+ // Force coverage collection from ignored files usin a array of glob patterns
+ // forceCoverageMatch: [],
+
+ // A path to a module which exports an async function that is triggered once before all test suites
+ // globalSetup: '<rootDir>/jest.extend.js',
+
+ // A path to a module which exports an async function that is triggered once after all test suites
+ // globalTeardown: null,
+
+ // A set of global variables that need to be available in all test environments
+ // globals: {},
+
+ // An array of directory names to be searched recursively up from the requiring module's location
+ // moduleDirectories: [
+ // "node_modules"
+ // ],
+
+ // An array of file extensions your modules use
+ // moduleFileExtensions: [
+ // "js",
+ // "json",
+ // "jsx",
+ // "node"
+ // ],
+
+ // A map from regular expressions to module names that allow to stub out resources with a single module
+ // moduleNameMapper: {},
+
+ // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
+ // modulePathIgnorePatterns: [],
+
+ // Activates notifications for test results
+ // notify: false,
+
+ // An enum that specifies notification mode. Requires { notify: true }
+ // notifyMode: "always",
+
+ // A preset that is used as a base for Jest's configuration
+ // preset: null,
+
+ // Run tests from one or more projects
+ // projects: null,
+
+ // Use this configuration option to add custom reporters to Jest
+ // reporters: undefined,
+
+ // Automatically reset mock state between every test
+ // resetMocks: false,
+
+ // Reset the module registry before running each individual test
+ // resetModules: false,
+
+ // A path to a custom resolver
+ // resolver: null,
+
+ // Automatically restore mock state between every test
+ // restoreMocks: false,
+
+ // The root directory that Jest should scan for tests and modules within
+ // rootDir: null,
+
+ // A list of paths to directories that Jest should use to search for files in
+ // roots: [
+ // "<rootDir>"
+ // ],
+
+ // Allows you to use a custom runner instead of Jest's default test runner
+ // runner: "jest-runner",
+
+ // The paths to modules that run some code to configure or set up the testing environment before each test
+ // setupFiles: [],
+
+ // The path to a module that runs some code to configure or set up the testing framework before each test
+ // setupTestFrameworkScriptFile: '<rootDir>/jest.extend.js',
+
+ // A list of paths to snapshot serializer modules Jest should use for snapshot testing
+ // snapshotSerializers: [],
+
+ // The test environment that will be used for testing
+ testEnvironment: "node",
+
+ // Options that will be passed to the testEnvironment
+ // testEnvironmentOptions: {},
+
+ // Adds a location field to test results
+ // testLocationInResults: false,
+
+ // The glob patterns Jest uses to detect test files
+ // testMatch: [
+ // "**/__tests__/**/*.js?(x)",
+ // "**/?(*.)+(spec|test).js?(x)"
+ // ],
+
+ // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
+ testPathIgnorePatterns: [
+ "/node_modules/",
+ "<rootDir>/frontend/docroot/assets/riot/",
+ ],
+
+ // The regexp pattern Jest uses to detect test files
+ // testRegex: "",
+
+ // This option allows the use of a custom results processor
+ // testResultsProcessor: null,
+
+ // This option allows use of a custom test runner
+ // testRunner: "jasmine2",
+
+ // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
+ // testURL: "http://localhost",
+
+ // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
+ // timers: "real",
+
+ // A map from regular expressions to paths to transformers
+ // transform: null,
+
+ // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
+ transformIgnorePatterns: [
+ "<rootDir>/node_modules/(?!timeago\\.js)/",
+ ],
+
+ // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
+ // unmockedModulePathPatterns: undefined,
+
+ // Indicates whether each individual test should be reported during the run
+ // verbose: null,
+
+ // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
+ // watchPathIgnorePatterns: [],
+
+ // Whether to use watchman for file crawling
+ // watchman: true,
+};