From 6d4e7306c25810c9ecd048be205701e4f3ea1dc4 Mon Sep 17 00:00:00 2001 From: Slava Bereza Date: Thu, 30 Nov 2023 20:17:57 +0300 Subject: [PATCH] feat: module --- .github/workflows/coverage.yml | 2 +- babel.config.cjs | 6 ++++++ client/index.js | 4 ---- client/index.mjs | 9 +++++++++ client/package.json | 7 ++++--- index.js => index.mjs | 22 ++++++++++------------ jest.config.cjs | 14 ++++++++++++++ jest.config.js | 8 -------- package.json | 16 +++++++++------- server/index.js | 4 ---- server/index.mjs | 9 +++++++++ server/package.json | 7 ++++--- 12 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 babel.config.cjs delete mode 100644 client/index.js create mode 100644 client/index.mjs rename index.js => index.mjs (88%) create mode 100644 jest.config.cjs delete mode 100644 jest.config.js delete mode 100644 server/index.js create mode 100644 server/index.mjs diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index ba1bca5..26329b0 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - node: [12] + node: [18] os: [ubuntu-latest] steps: diff --git a/babel.config.cjs b/babel.config.cjs new file mode 100644 index 0000000..9ba90d5 --- /dev/null +++ b/babel.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + presets: [ + ['@babel/preset-env', {targets: {node: 'current'}}], + '@babel/preset-typescript', + ], +}; \ No newline at end of file diff --git a/client/index.js b/client/index.js deleted file mode 100644 index 47e1039..0000000 --- a/client/index.js +++ /dev/null @@ -1,4 +0,0 @@ -const - { factory } = require('provi') - -module.exports = factory() \ No newline at end of file diff --git a/client/index.mjs b/client/index.mjs new file mode 100644 index 0000000..0b4af3c --- /dev/null +++ b/client/index.mjs @@ -0,0 +1,9 @@ +import { factory } from 'provi'; + +const { provide, destroy, isolate } = factory(); + +export { + provide, + destroy, + isolate +} \ No newline at end of file diff --git a/client/package.json b/client/package.json index 101a999..06e97f9 100644 --- a/client/package.json +++ b/client/package.json @@ -1,13 +1,14 @@ { "name": "provi-client", - "version": "0.0.0", + "version": "2.0.0", "description": "Service Provider for client side", "private": true, "license": "MIT", - "main": "index.js", + "type": "module", + "main": "index.mjs", "types": "index.d.ts", "peerDependencies": { - "provi": ">=0.9.0" + "provi": "2.x.x" }, "author": "Slava Bereza (http://betula.co)", "sideEffects": false diff --git a/index.js b/index.mjs similarity index 88% rename from index.js rename to index.mjs index e60cd6f..50d7196 100644 --- a/index.js +++ b/index.mjs @@ -1,13 +1,6 @@ -const - { unsubscriber, collect, run } = require('unsubscriber'), - - async_hooks = typeof global !== 'undefined' - && require( - [97, 115, 121, 110, 99, 95, 104, 111, 111, 107, 115] - .map(code => String.fromCharCode(code)) - .join('') - ), +import { unsubscriber, collect, run } from 'unsubscriber'; +const factory = () => { let zone_id = 0, // root zone @@ -19,11 +12,16 @@ const zones = new Map(), - isolate = (fn) => { - if (!async_hooks) { + isolate = async (fn) => { + const is_node = typeof global !== 'undefined' + && typeof process !== 'undefined' && process.env; + + if (!is_node) { throw new Error('Isolate only possible on node environment') } + const async_hooks = await import('node:async_hooks'); + if (!hook) { hook = async_hooks.createHook({ init(async_id, _type, trigger_async_id) { @@ -116,6 +114,6 @@ const } } -module.exports = { +export { factory } \ No newline at end of file diff --git a/jest.config.cjs b/jest.config.cjs new file mode 100644 index 0000000..d0e7e0a --- /dev/null +++ b/jest.config.cjs @@ -0,0 +1,14 @@ +module.exports = { + transform: { + "^.+\\.mjs$": "babel-jest", + "^.+\\.ts$": "babel-jest", + }, + transformIgnorePatterns: [ + "node_modules/(?!unsubscriber)" + ], + moduleNameMapper: { + "^provi$": "", + "^provi/client$": "/client", + "^provi/server$": "/server", + } +} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index e669a8f..0000000 --- a/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - moduleNameMapper: { - "^provi$": "", - } -}; \ No newline at end of file diff --git a/package.json b/package.json index fe04d09..0f77aec 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "name": "provi", - "version": "1.5.3", + "version": "2.0.0", "description": "Minimalistic and cute Service Provider", - "main": "index.js", + "type": "module", + "main": "index.mjs", "types": "index.d.ts", "scripts": { "test": "jest" }, "dependencies": { - "unsubscriber": ">=1.0.0" + "unsubscriber": "2.x.x" }, "repository": { "type": "git", @@ -35,9 +36,10 @@ }, "homepage": "https://github.com/re-js/provi#readme", "devDependencies": { - "@types/jest": "28.1.6", - "jest": "28.1.3", - "ts-jest": "28.0.7", - "typescript": "4.7.4" + "@babel/preset-env": "7.23.5", + "@babel/preset-typescript": "7.23.3", + "@types/jest": "29.5.10", + "jest": "29.7.0", + "typescript": "5.3.2" } } diff --git a/server/index.js b/server/index.js deleted file mode 100644 index 47e1039..0000000 --- a/server/index.js +++ /dev/null @@ -1,4 +0,0 @@ -const - { factory } = require('provi') - -module.exports = factory() \ No newline at end of file diff --git a/server/index.mjs b/server/index.mjs new file mode 100644 index 0000000..0b4af3c --- /dev/null +++ b/server/index.mjs @@ -0,0 +1,9 @@ +import { factory } from 'provi'; + +const { provide, destroy, isolate } = factory(); + +export { + provide, + destroy, + isolate +} \ No newline at end of file diff --git a/server/package.json b/server/package.json index ccbbe53..1d5e8e7 100644 --- a/server/package.json +++ b/server/package.json @@ -1,13 +1,14 @@ { "name": "provi-server", - "version": "0.0.0", + "version": "2.0.0", "description": "Service Provider for server side", "private": true, "license": "MIT", - "main": "index.js", + "type": "module", + "main": "index.mjs", "types": "index.d.ts", "peerDependencies": { - "provi": ">=0.9.0" + "provi": "2.x.x" }, "author": "Slava Bereza (http://betula.co)", "sideEffects": false