Skip to content

Commit

Permalink
Support Both require & es6 import
Browse files Browse the repository at this point in the history
  • Loading branch information
skycloud1030 committed Dec 26, 2019
1 parent 7c69d71 commit 59288d6
Show file tree
Hide file tree
Showing 13 changed files with 1,124 additions and 40 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ JavaScript Check if array contains any of another array
npm install --save array-includes-any
```

## Usage
## Examples

```js
//CommonJS
Expand All @@ -34,6 +34,10 @@ array_includes_any([1, 2, 2], [1, 2, 2], "equal"); //true
array_includes_any([1, 2, 2], [1, 2, 2]); //true
```

## WebAssembly

The folder [wasm](https://github.com/skycloud1030/array-includes-any/tree/master/wasm) demonstrates how to compile the original function to WebAssembly.

## License

```sh
Expand Down
136 changes: 135 additions & 1 deletion dist/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,135 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("arrayIA",[],t):"object"==typeof exports?exports.arrayIA=t():e.arrayIA=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){if("equal"===(arguments.length>2&&void 0!==arguments[2]?arguments[2]:"any"))return function(e,t){if(f(e,t))return!0;if("object"!==n(e)||null===e||"object"!==n(t)||null===t)return!1;var r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(var i=0;i<r.length;i++)if(!u.call(t,r[i])||!f(e[r[i]],t[r[i]]))return!1;return!0}(e,t);if(f(e,t))return!0;if("object"!==n(e)||null===t||"object"!==n(t)||null===t)return!1;for(var r={},o=0,i=e.length;o<i;o++)r[e[o]]=void 0;for(var l=0,c=t.length;l<c;l++)if(r.hasOwnProperty(t[l]))return!0;return!1}r.r(t);var u=Object.prototype.hasOwnProperty;function f(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}r.d(t,"array_includes_any",(function(){return o}));t.default=o}])}));
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("arrayIA", [], factory);
else if(typeof exports === 'object')
exports["arrayIA"] = factory();
else
root["arrayIA"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./index.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./index.js":
/*!******************!*\
!*** ./index.js ***!
\******************/
/*! exports provided: array_includes_any, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _src_array_includes_any__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/array_includes_any */ \"./src/array_includes_any.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"array_includes_any\", function() { return _src_array_includes_any__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_src_array_includes_any__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=webpack://arrayIA/./index.js?");

/***/ }),

/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
/*!*******************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\n\n//# sourceURL=webpack://arrayIA/./node_modules/@babel/runtime/helpers/typeof.js?");

/***/ }),

/***/ "./src/array_includes_any.js":
/*!***********************************!*\
!*** ./src/array_includes_any.js ***!
\***********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return array_includes_any; });\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n\n\n/*array_includes_any.js*/\nfunction array_includes_any(array1, array2) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"any\";\n if (type === \"equal\") return shallowEqual(array1, array2);\n if (is(array1, array2)) return true;\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(array1) !== \"object\" || array1 === null || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(array2) !== \"object\" || array2 === null) {\n return false;\n } // dictionary O(n)\n\n\n var dictionary = {};\n\n for (var i = 0, len = array1.length; i < len; i++) {\n dictionary[array1[i]] = undefined;\n } // Compare State\n\n\n for (var _i = 0, _len = array2.length; _i < _len; _i++) {\n if (dictionary.hasOwnProperty(array2[_i])) {\n return true;\n }\n }\n\n return false;\n}\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n *\n */\n\n/*eslint-disable no-self-compare */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\n\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(objA) !== \"object\" || objA === null || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(objB) !== \"object\" || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false; // Test for A's keys different from B.\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\n//# sourceURL=webpack://arrayIA/./src/array_includes_any.js?");

/***/ })

/******/ });
});
24 changes: 0 additions & 24 deletions dist/wasm/array-includes-any.js

This file was deleted.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
"url": "https://github.com/skycloud1030/array-includes-any"
},
"files": [
"dist"
"dist",
"wasm"
],
"scripts": {
"start": "webpack --progress --colors --watch --mode development",
Expand Down
40 changes: 38 additions & 2 deletions wasm/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,42 @@
### Build
# Examples

## Node

```js
const Module = require("../dist/array-includes-any.js").default;

Module().then(({ array_includes_any }) => {
console.log(array_includes_any([1, 2], [1]));
console.log(array_includes_any([1, 2], [10]));
console.log(array_includes_any([1, 2], [3]));
});
```

## TS

```ts
import Module from "../dist/array-includes-any.js";

Module().then(({ array_includes_any }) => {
console.log(array_includes_any([1, 2], [1]));
console.log(array_includes_any([1, 2], [10]));
console.log(array_includes_any([1, 2], [3]));
});
```

# Build

## C to Wasm

```sh
emcc compare.c -o "../dist/wasm/array-includes-any.js" --post-js post.js -O3 -s MODULARIZE=1
emcc compare.c -o ./dist/array-includes-any.js --post-js post.js -s MODULARIZE=1 -s EXPORT_ES6=1 -s ALLOW_MEMORY_GROWTH=1 -O3

```

## Babel wasm js to es2015

- Support Both node.js & webpack

```sh
babel ./dist/array-includes-any.js -o ./dist/array-includes-any.js
```
7 changes: 2 additions & 5 deletions wasm/compare.test.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
/**
* @jest-environment node
*/
const Module = require("../dist/wasm/array-includes-any.js");
import Module from "./dist/array-includes-any.js";
const library = new Module();
const moduleReady = () => {
return new Promise(resolve => {
library.onRuntimeInitialized = function() {
resolve();
};
library.then(() => resolve());
});
};


describe("Wasm Tests", () => {
beforeAll(async () => {
await moduleReady();
Expand Down
7 changes: 7 additions & 0 deletions wasm/demo/node-demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const Module = require("../dist/array-includes-any.js").default;

Module().then(({ array_includes_any }) => {
console.log(array_includes_any([1, 2], [1]));
console.log(array_includes_any([1, 2], [10]));
console.log(array_includes_any([1, 2], [3]));
});
7 changes: 7 additions & 0 deletions wasm/demo/ts-demo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Module from "../dist/array-includes-any.js";

Module().then(({array_includes_any}) => {
console.log(array_includes_any([1,2],[1]));
console.log(array_includes_any([1,2],[10]));
console.log(array_includes_any([1,2],[3]));
});
11 changes: 11 additions & 0 deletions wasm/demo/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"module": "CommonJS",
"noImplicitAny": false,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": false,
"outDir": "build",
"allowJs": false
}
}
Loading

0 comments on commit 59288d6

Please sign in to comment.