Skip to content

Commit 0dfacc5

Browse files
Merge pull request #193 from studiometa/feature/cjs-esm-exports
[Feature] Add support for CommonJS usage
2 parents f8382f3 + f3fb548 commit 0dfacc5

File tree

11 files changed

+642
-2250
lines changed

11 files changed

+642
-2250
lines changed

package-lock.json

Lines changed: 569 additions & 2229 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,12 @@
1616
"lint:docs": "prettier --check 'packages/docs/**/*.{md,js,html,vue}'",
1717
"lint:types": "tsc --build tsconfig.lint.json",
1818
"fix:docs": "prettier --write 'packages/docs/**/*.{md,js,html,vue}'",
19-
"build": "npm run build:babel && npm run build:types && npm run build:bundle && npm run build:cp-files",
19+
"build": "rm -rf dist && npm run build:pkg && npm run build:types && npm run build:cp-files",
2020
"build:cp-files": "cp packages/js-toolkit/package.json dist/ && cp LICENSE dist/ && cp README.md dist",
2121
"build:types": "tsc --build tsconfig.build.json",
22-
"build:babel": "babel --no-comments --delete-dir-on-start --out-dir dist/ packages/js-toolkit",
23-
"build:bundle": "npm run build:bundle:modern && npm run build:bundle:umd",
24-
"build:bundle:modern": "NODE_TARGET=bundle microbundle -i packages/js-toolkit/index.js -o dist/index.modern.js -f modern --no-sourcemap --no-pkg-main --external none",
25-
"build:bundle:umd": "NODE_TARGET=bundle microbundle -i packages/js-toolkit/index.js -o dist/index.umd.js -f umd --no-sourcemap --name Base --no-pkg-main --external none"
22+
"build:pkg": "node scripts/build.js"
2623
},
2724
"devDependencies": {
28-
"@babel/cli": "^7.16.7",
29-
"@babel/core": "^7.16.5",
30-
"@babel/plugin-proposal-class-properties": "^7.16.7",
31-
"@babel/plugin-transform-runtime": "^7.16.5",
32-
"@babel/preset-env": "^7.16.5",
33-
"@studiometa/browserslist-config": "^1.0.1",
3425
"@studiometa/eslint-config": "^2.1.3",
3526
"@studiometa/prettier-config": "^2.1.1",
3627
"@studiometa/stylelint-config": "^2.0.0",
@@ -39,10 +30,10 @@
3930
"@types/node": "^16.11.13",
4031
"@typescript-eslint/eslint-plugin": "^4.29.3",
4132
"@typescript-eslint/parser": "^4.29.3",
42-
"babel-plugin-add-import-extension": "^1.6.0",
33+
"esbuild": "^0.14.12",
4334
"eslint": "^7.32.0",
4435
"eslint-plugin-jest": "^24.4.0",
45-
"microbundle": "^0.13.3",
36+
"fast-glob": "^3.2.11",
4637
"prettier": "^2.5.1",
4738
"typescript": "^4.5.4"
4839
}

packages/docs/utils/collision/collideCircleCircle.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Test if two circles collide with one another.
55
## Usage
66

77
```js
8-
import { collideCircleCircle } from '@studiometa/js-toolkit/utils/collide';
8+
import { collideCircleCircle } from '@studiometa/js-toolkit/utils';
99

1010
const circle1 = {
1111
x: 40,

packages/docs/utils/math/ease.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,12 @@ Select an easing function below to see how it will transform the given progress
7171
const fn = computed(() => (name.value === 'linear' ? linear : easingFunctions.value[name.value]));
7272
const count = 100;
7373

74-
import('@studiometa/js-toolkit/utils/math/ease.js').then((mod) => {
75-
easingFunctions.value = mod;
74+
import('@studiometa/js-toolkit/utils').then((mod) => {
75+
for (const [key, value] of Object.entries(mod)) {
76+
if (key.startsWith('ease')) {
77+
easingFunctions.value[key] = value;
78+
}
79+
}
7680
});
7781
</script>
7882

packages/js-toolkit/package.json

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,27 @@
1717
"homepage": "https://github.com/studiometa/js-toolkit#readme",
1818
"type": "module",
1919
"sideEffects": false,
20-
"unpkg": "./index.umd.js",
2120
"main": "./index.js",
2221
"module": "./index.js",
22+
"types": "./index.d.ts",
23+
"exports": {
24+
".": {
25+
"import": "./index.js",
26+
"require": "./index.cjs",
27+
"types": "./index.d.ts"
28+
},
29+
"./utils": {
30+
"import": "./utils/index.js",
31+
"require": "./utils/index.cjs",
32+
"types": "./utils/index.d.ts"
33+
}
34+
},
2335
"keywords": [
2436
"js-toolkit",
2537
"component",
2638
"studiometa",
2739
"toolkit"
2840
],
29-
"types": "index.d.ts",
3041
"dependencies": {
3142
"@babel/runtime": "^7.15.4",
3243
"deepmerge": "^4.2.2"

packages/js-toolkit/utils/collide/boundingRectToCircle.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* @param {Boolean} force Force usage of non-square DOMElements
1313
* @return {Circle} Circle object that can be used in collides functions
1414
*/
15-
export default function collidePointRect({ x, y, width, height }, force = false) {
15+
export default function boundingRectToCircle({ x, y, width, height }, force = false) {
1616
if (width !== height && !force)
1717
throw new Error('Initial DOMElement is not a square. Please use the force mode.');
1818
return {

packages/js-toolkit/utils/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export { default as keyCodes } from './keyCodes.js';
44
export { default as memoize } from './memoize.js';
55
export { default as nextFrame } from './nextFrame.js';
66
export { default as throttle } from './throttle.js';
7+
export { default as scrollTo } from './scrollTo.js';
78
export { matrix, transition } from './css/index.js';
89
export {
910
objectToURLSearchParams,

packages/tests/utils/__snapshots__/index.spec.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Array [
4747
"nextFrame",
4848
"objectToURLSearchParams",
4949
"round",
50+
"scrollTo",
5051
"throttle",
5152
"transition",
5253
"withLeadingCharacters",

scripts/build.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const path = require('path');
2+
const glob = require('fast-glob');
3+
const esbuild = require('esbuild');
4+
5+
const entryPoints = glob.sync(['packages/js-toolkit/**/*.js', '!**/node_modules/**'], {
6+
cwd: path.resolve(__dirname, '..'),
7+
});
8+
9+
const outdir = path.resolve(__dirname, '../dist');
10+
11+
const defaultOptions = {
12+
entryPoints,
13+
write: true,
14+
outdir,
15+
};
16+
17+
/**
18+
* Build with esbuild.
19+
*
20+
* @param {require('esbuild').BuildOptions} opts
21+
* @returns {Promise<void>}
22+
*/
23+
async function build(opts) {
24+
console.log(`Building ${opts.format}...`);
25+
const { errors, warnings } = await esbuild.build({
26+
...defaultOptions,
27+
...opts,
28+
});
29+
30+
errors.forEach(console.error);
31+
warnings.forEach(console.warn);
32+
console.log(`Done building ${opts.format}!`);
33+
}
34+
35+
build({
36+
format: 'esm',
37+
// bundle: true,
38+
// splitting: true,
39+
// chunkNames: '__chunks/[name]-[hash]',
40+
});
41+
42+
build({
43+
format: 'cjs',
44+
outExtension: { '.js': '.cjs' },
45+
});

tsconfig.build.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"compilerOptions": {
44
"noEmit": false,
55
"declaration": true,
6-
"declarationDir": "dist",
6+
"outDir": "dist/",
77
"emitDeclarationOnly": true
88
}
99
}

0 commit comments

Comments
 (0)