Skip to content

Commit ea02759

Browse files
authored
Merge pull request #63 from getditto/pv/esm-export
feat: publish both ESM and CommonJS
2 parents faf5ffa + 38c9928 commit ea02759

22 files changed

+243
-63
lines changed

.eslintrc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,27 @@
3131
"simple-import-sort/exports": "error",
3232
"sort-imports": "off",
3333
"semi": 0,
34+
"import/extensions": ["error", "ignorePackages"],
3435
"prettier/prettier": [
3536
"error",
3637
{
3738
"semi": false
3839
}
3940
]
4041
},
42+
"overrides": [{
43+
"files": ["*.spec.*"],
44+
"rules": {
45+
"import/extensions": "off",
46+
}
47+
}],
4148
"plugins": [
4249
"@typescript-eslint",
4350
"prettier",
4451
"simple-import-sort",
4552
"react-hooks",
46-
"deprecation"
53+
"deprecation",
54+
"eslint-plugin-import"
4755
],
4856
"settings": {
4957
"react": {

package.json

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,29 @@
22
"name": "@dittolive/react-ditto",
33
"version": "0.11.1",
44
"description": "React wrappers for Ditto",
5-
"main": "dist/index.js",
6-
"types": "dist/index.d.ts",
5+
"main": "dist/cjs/index.js",
6+
"module": "dist/esm/index.js",
7+
"types": "dist/esm/index.d.ts",
8+
"exports": {
9+
".": {
10+
"require": "./dist/cjs/index.js",
11+
"import": "./dist/esm/index.js",
12+
"types": "./dist/esm/index.d.ts"
13+
}
14+
},
715
"scripts": {
8-
"build": "rimraf dist && tsc",
16+
"build": "rimraf dist && npm run build:esm && npm run build:cjs && npm run build:static-files && scripts/fix-exports-type.js",
17+
"build:esm": "tsc -p tsconfig.esm.json",
18+
"build:cjs": "tsc -p tsconfig.json",
19+
"build:static-files": "cp package.json CHANGELOG.md README.md dist/",
920
"test": "karma start",
10-
"types": "tsc -p tsconfig.json",
21+
"types": "tsc -p tsconfig.esm.json",
1122
"lint": "eslint . --ext .ts,.tsx",
1223
"lint:fix": "eslint . --ext .ts,.tsx --fix",
1324
"docs:generate": "rimraf documentation-website/* && typedoc",
1425
"docs:serve": "live-server ./documentation-website"
1526
},
16-
"author": "",
27+
"author": "DittoLive Inc.",
1728
"license": "ISC",
1829
"repository": {
1930
"type": "git",
@@ -45,6 +56,7 @@
4556
"eslint": "^8.27.0",
4657
"eslint-config-prettier": "^9.1.0",
4758
"eslint-plugin-deprecation": "^2.0.0",
59+
"eslint-plugin-import": "^2.30.0",
4860
"eslint-plugin-prettier": "^5.1.3",
4961
"eslint-plugin-react": "^7.31.10",
5062
"eslint-plugin-react-hooks": "^4.6.0",

scripts/fix-exports-type.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env node
2+
// This script defines the type of exports in the dist directory using minimal
3+
// package.json files. Setting the type in the main package.json file does not
4+
// work because we want to support both CommonJS and ES Module exports in the
5+
// same package.
6+
7+
const FS = require('node:fs')
8+
9+
const DIST_DIR = 'dist'
10+
11+
FS.writeFileSync(
12+
`${DIST_DIR}/cjs/package.json`,
13+
JSON.stringify({
14+
type: 'commonjs',
15+
}),
16+
)
17+
18+
FS.writeFileSync(
19+
`${DIST_DIR}/esm/package.json`,
20+
JSON.stringify({
21+
type: 'module',
22+
}),
23+
)

src/DittoLazyProvider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import {
66
DittoHash,
77
RegisterDitto,
88
UnregisterDitto,
9-
} from './DittoContext'
10-
import { ProviderState, RenderFunction } from './DittoProvider'
9+
} from './DittoContext.js'
10+
import { ProviderState, RenderFunction } from './DittoProvider.js'
1111

1212
export interface DittoLazyProviderProps {
1313
initOptions?: InitOptions

src/DittoProvider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import React, {
77
useState,
88
} from 'react'
99

10-
import { DittoHash, RegisterDitto, UnregisterDitto } from '.'
11-
import { DittoContext } from './DittoContext'
10+
import { DittoContext } from './DittoContext.js'
11+
import { DittoHash, RegisterDitto, UnregisterDitto } from './index.js'
1212

1313
export type RenderFunction = (providerState: ProviderState) => ReactNode
1414

src/identity/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
export * from './useOfflinePlaygroundIdentity'
2-
export * from './useOnlineIdentity'
3-
export * from './useOnlinePlaygroundIdentity'
1+
export * from './useOfflinePlaygroundIdentity.js'
2+
export * from './useOnlineIdentity.js'
3+
export * from './useOnlinePlaygroundIdentity.js'

src/index.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
export * from './DittoContext'
2-
export * from './DittoLazyProvider'
3-
export * from './DittoProvider'
4-
export * from './identity'
5-
export * from './mutations'
6-
export * from './presence'
7-
export * from './queries'
8-
export * from './useDitto'
1+
export * from './DittoContext.js'
2+
export * from './DittoLazyProvider.js'
3+
export * from './DittoProvider.js'
4+
export * from './identity/index.js'
5+
export * from './mutations/index.js'
6+
export * from './presence/index.js'
7+
export * from './queries/index.js'
8+
export * from './useDitto.js'

src/mutations/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from './useMutations'
1+
export * from './useMutations.js'

src/mutations/useMutations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from '@dittolive/ditto'
1414
import { useCallback } from 'react'
1515

16-
import { useDitto } from '../useDitto'
16+
import { useDitto } from '../useDitto.js'
1717

1818
export interface UpdateParams {
1919
/**

src/presence/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from './useConnectionStatus'
1+
export * from './useConnectionStatus.js'

0 commit comments

Comments
 (0)