diff --git a/packages/core/cjsBuild.js b/packages/core/cjsBuild.js new file mode 100644 index 0000000..f4e0427 --- /dev/null +++ b/packages/core/cjsBuild.js @@ -0,0 +1,33 @@ +const path = require("path") + +const isProd = process.argv[2] === "--prod" + +const fixCjsPlugin = { + name: "fixCJS", + setup(build) { + build.onResolve({ filter: /useSyncExternalStore/ }, (args) => { + return { + path: path.join(args.resolveDir, args.path + "Cjs.ts"), + } + }) + }, +} + +require("esbuild") + .build({ + entryPoints: ["src/index.tsx"], + bundle: true, + outfile: isProd + ? "./dist/core.cjs.production.min.js" + : "./dist/core.cjs.development.js", + target: "es2015", + minify: isProd, + external: ["react", "rxjs", "use-sync-external-store"], + format: "cjs", + sourcemap: true, + plugins: [fixCjsPlugin], + }) + .catch((error) => { + console.error(error) + process.exit(1) + }) diff --git a/packages/core/package.json b/packages/core/package.json index 99feab5..a649f07 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -27,8 +27,8 @@ "build": "yarn build:ts && yarn build:esm2017 && yarn build:esm2019 && yarn build:cjs:dev && yarn build:cjs:prod", "build:esm2019": "esbuild src/index.tsx --bundle --outfile=./dist/core.es2019.mjs --target=es2019 --external:react --external:rxjs --external:use-sync-external-store --format=esm --sourcemap", "build:esm2017": "esbuild src/index.tsx --bundle --outfile=./dist/core.es2017.js --target=es2017 --external:react --external:rxjs --external:use-sync-external-store --format=esm --sourcemap", - "build:cjs:dev": "esbuild src/index.tsx --bundle --outfile=./dist/core.cjs.development.js --target=es2015 --external:react --external:rxjs --external:use-sync-external-store --format=cjs --sourcemap", - "build:cjs:prod": "esbuild src/index.tsx --bundle --outfile=./dist/core.cjs.production.min.js --target=es2015 --external:react --external:rxjs --external:use-sync-external-store --format=cjs --minify --sourcemap", + "build:cjs:dev": "node cjsBuild.js", + "build:cjs:prod": "node cjsBuild.js --prod", "build:ts": "tsc -p ./tsconfig-build.json --outDir ./dist --skipLibCheck --emitDeclarationOnly", "test": "jest --coverage", "lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"", diff --git a/packages/core/src/internal/useObservable.ts b/packages/core/src/internal/useObservable.ts index e9a0794..bdb1e66 100644 --- a/packages/core/src/internal/useObservable.ts +++ b/packages/core/src/internal/useObservable.ts @@ -1,9 +1,9 @@ import { Subscription } from "rxjs" -import { useSyncExternalStore } from "use-sync-external-store/shim/index.js" import { useRef, useState } from "react" import { SUSPENSE, filterOutSuspense } from "../SUSPENSE" import { DefaultedStateObservable, StateObservable } from "@josepot/rxjs-state" import { EMPTY_VALUE } from "./empty-value" +import useSyncExternalStore from "./useSyncExternalStore" type VoidCb = () => void diff --git a/packages/core/src/internal/useSyncExternalStore.ts b/packages/core/src/internal/useSyncExternalStore.ts new file mode 100644 index 0000000..38f041f --- /dev/null +++ b/packages/core/src/internal/useSyncExternalStore.ts @@ -0,0 +1 @@ +export { useSyncExternalStore as default } from "use-sync-external-store/shim/index.js" diff --git a/packages/core/src/internal/useSyncExternalStoreCjs.ts b/packages/core/src/internal/useSyncExternalStoreCjs.ts new file mode 100644 index 0000000..65ca0cd --- /dev/null +++ b/packages/core/src/internal/useSyncExternalStoreCjs.ts @@ -0,0 +1 @@ +export { useSyncExternalStore as default } from "use-sync-external-store/shim"