0.1.1 • Published 3 years ago

oraclejs v0.1.1

Weekly downloads
2
License
MIT
Repository
-
Last release
3 years ago

OracleJS

TypeScript code style: prettier version

require("packages") in the browser without the need to compile first.

OracleJS can fetch packages using either of the following patterns:

  • its name (pkg), to get the latest version
  • a fixed version (pkg@3.2.1)
  • a semver range (pkg^2)
  • or a tag (pkg@2.0.1-beta)

To learn more about how to do this, visit www.unpkg.com. Alternatively, you may specify the address to the JS file directly, whether hosted on your personal website, GitHub or a Content Delivery Network (CDN).


Install

npm i oraclejs

Browser

<script src="https://unpkg.com/oraclejs"></script>
<script>window.test = { }; // dummy object</script>

Oracle returns a promise, therefore it can be used with .then() and .catch() methods

<script>
  oracle({
    deepObject: "deep-object",
    setValue: "set-value@3.0.2",
  }).then(function (imports) {
    const { deepObject, setValue } = imports;
    deepObject.set(test, "a", 1)
    setValue(test, "b", 2)
  })
</script>

Also, rather than using the default CDN, you may specify another as a replacement for fetching named packages. The formula is CDN + package_name, so make sure to cross-check the URL resolution result in a browser before using.

<script>
  oracle(
    {
      lodash_set: "lodash.set@4.3.2/index.js",
      setPath:
        "https://raw.githubusercontent.com/skratchdot/object-path-set/master/index.js",
    },
    "https://cdn.jsdelivr.net/npm/"
  ).then((imports) => {
    const { lodash_set, setPath } = imports;
    lodash_set(test, "c", 3)
    setPath(test, "d", 4)
  })
</script>

Alternatively, it can be run using async-await

<script>
  (async () => {
    const imports = await oracle({ deepProp: "deep-property" })
    imports.deepProp.set(test, "e", 5)
  })()
</script>

Import

// For strict browser use
import oracle from "oraclejs/browser";

// ES6 Import
import oracle from "oraclejs";
import { convertExports, convertImports } from "oraclejs";

// NodeJS Require
const oracle = require("oraclejs");
const { convertAll } = require("oraclejs");

API

oracle({ typeOf: "@ibnlanre/typeof" })
  .then(() => { typeOf(null) } // "null"

.convertAll(code)

This converts all static imports and exports to NodeJS requires

import { convertAll } from "oraclejs";

.convertExports(code)

This converts all static export syntax to module.exports and it comes with three methods.

import { convertExports } from "oraclejs";

.defaultExports(code)

const { defaultExports } = convertExports;

// module.exports = function* myGenFunc() {}
defaultExports("export function* myGenFunc() {}");

.namedExports(code)

const { namedExports } = convertExports;

// module.exports.myGenFunc = function* myGenFunc() {}
namedExports("export function* myGenFunc() {}");

.reExports(code)

const { reExports } = convertExports;

// const { foo: default } = require('src/other_module');
// module.exports.default = default;
reExports("export { foo as default } from 'src/other_module'");

.convertImports(code)

This converts all static import syntax to require and it comes with the following methods.

import { convertImports } from "oraclejs";

.combinedImports(code)

const { combinedImports } = convertImports;

// const theDefault = require('src/my_lib');
// const my_lib = Object.entries(require('src/my_lib'))
//  .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {})
combinedImports("import theDefault, * as my_lib from 'src/my_lib'");

.defaultImports(code)

const { defaultImports } = convertImports;

// const localName = require('src/my_lib');
combinedImports("import localName from 'src/my_lib'");

.emptyImports(code)

const { emptyImports } = convertImports;

// new Function("require('src/my_lib')")()
emptyImports("import 'src/my_lib'");

.namedImports(code)

const { namedImports } = convertImports;

// const { name1, name2 } = require('src/my_lib');
namedImports("import { name1, name2 } from 'src/my_lib'");

.namespaceImports(code)

const { namespaceImports } = convertImports;

// const my_lib = Object.entries(require('src/my_lib'))
//   .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {})
namespaceImports("import * as my_lib from 'src/my_lib'");