Skip to content

Commit a834db5

Browse files
committed
using rollup to build tiptap
1 parent bf98114 commit a834db5

File tree

9 files changed

+3475
-756
lines changed

9 files changed

+3475
-756
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,5 @@ packages/*/lib
112112
packages/*/out
113113
packages/*/.next
114114
packages/*/storybook
115-
packages/*/index.js
115+
components/*/lib
116+
components/*/dist

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
strict-peer-dependencies=true
22
auto-install-peers=false
33
legacy-peer-deps=false
4+
registry=https://registry.npmmirror.com/

components/wener-tiptap/.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
*.tsbuildinfo
2+
dist/report

components/wener-tiptap/package.json

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
"description": "Collection of useful tiptap extensions",
55
"type": "module",
66
"sideEffects": false,
7+
"types": "src/index.ts",
8+
"module": "lib/index.js",
79
"exports": {
810
".": {
911
"import": "./lib/index.js",
12+
"require": "./dist/cjs/index.js",
1013
"types": "./src/index.ts"
1114
},
1215
"./package.json": "./package.json"
@@ -73,6 +76,8 @@
7376
"@tiptap/starter-kit": "^2.0.0-beta.185",
7477
"@tiptap/suggestion": "^2.0.0-beta.92",
7578
"classnames": "^2.3.1",
79+
"linkify-it": "^4.0.1",
80+
"mdurl": "^1.0.1",
7681
"prosemirror-markdown": "^1.8.0",
7782
"prosemirror-model": "^1.18.0",
7883
"prosemirror-state": "^1.4.0",
@@ -88,11 +93,12 @@
8893
"@types/react": "^18",
8994
"@types/react-dom": "^18",
9095
"esbuild": "^0.14",
91-
"typescript": "^4",
9296
"react": ">=18",
93-
"react-dom": ">=18"
97+
"react-dom": ">=18",
98+
"typescript": "^4"
9499
},
95100
"optionalDependencies": {
96101
"markdown-it": "*"
97-
}
102+
},
103+
"rollup": {}
98104
}
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
import { readFile } from 'node:fs/promises';
2+
import type { MergedRollupOptions, RollupOptions } from 'rollup';
3+
import { terser } from 'rollup-plugin-terser';
4+
import { visualizer } from 'rollup-plugin-visualizer';
5+
import commonjs from '@rollup/plugin-commonjs';
6+
import nodeResolve from '@rollup/plugin-node-resolve';
7+
import replace from '@rollup/plugin-replace';
8+
import typescript from '@rollup/plugin-typescript';
9+
import json from '@rollup/plugin-json';
10+
11+
const pkg = JSON.parse((await readFile(new URL('./package.json', import.meta.url))).toString());
12+
// missing types
13+
const { default: size } = await import('rollup-plugin-size' as any);
14+
15+
const buildCjs = pkg.main || pkg.exports?.['.']?.['require'];
16+
const buildSystem = pkg.system || pkg.exports?.['.']?.['system'];
17+
18+
const cfg = pkg.rollup ?? {
19+
externals: [],
20+
dev: {
21+
externals: [],
22+
},
23+
};
24+
25+
// more consistent & intuitive output name
26+
const outputName = 'index';
27+
// const outputName = pkg.name.replaceAll('@', '').replaceAll('/', '-');
28+
29+
const external = [
30+
'react/jsx-runtime',
31+
...(cfg.externals || []),
32+
...Object.keys(pkg.peerDependencies || {}),
33+
...Object.keys(pkg.optionalDependencies || {}),
34+
];
35+
const externalDev = [...external, ...(cfg?.dev?.externals || []), ...Object.keys(pkg.dependencies || {})];
36+
37+
console.debug(`Building`, { cjs: buildCjs, system: buildSystem });
38+
39+
const env = process.env['NODE_ENV'] ?? 'production';
40+
const isProduction = env === 'production';
41+
const replaceProd = replace({
42+
'process.env.NODE_ENV': JSON.stringify(env),
43+
__DEV__: String(!isProduction),
44+
preventAssignment: true,
45+
});
46+
const replaceDev = replace({
47+
'process.env.NODE_ENV': JSON.stringify('development'),
48+
__DEV__: String(true),
49+
preventAssignment: true,
50+
});
51+
const ts = typescript({
52+
noForceEmit: true,
53+
});
54+
export default function (): RollupOptions[] {
55+
let prod: MergedRollupOptions = {
56+
input: 'src/index.ts',
57+
output: [
58+
{
59+
file: `dist/esm/${outputName}.min.js`,
60+
format: 'esm',
61+
interop: 'esModule',
62+
sourcemap: true,
63+
},
64+
],
65+
plugins: [
66+
replaceProd,
67+
ts,
68+
json(),
69+
commonjs(),
70+
nodeResolve({ extensions: ['.ts', '.tsx'], browser: true }),
71+
terser({
72+
mangle: true,
73+
compress: true,
74+
}),
75+
size({}),
76+
visualizer({
77+
filename: `dist/report/stats.html`,
78+
gzipSize: true,
79+
}),
80+
visualizer({
81+
filename: `dist/report/stats.json`,
82+
template: 'raw-data',
83+
gzipSize: true,
84+
}),
85+
],
86+
external,
87+
};
88+
let dev: MergedRollupOptions = {
89+
input: 'src/index.ts',
90+
output: [
91+
{
92+
file: `dist/esm/${outputName}.development.js`,
93+
format: 'esm',
94+
interop: 'esModule',
95+
sourcemap: true,
96+
},
97+
],
98+
plugins: [replaceDev, ts, json(), commonjs(), nodeResolve({ extensions: ['.ts', '.tsx'] })],
99+
external: externalDev,
100+
};
101+
let neutral: MergedRollupOptions = {
102+
input: 'src/index.ts',
103+
output: [
104+
{
105+
entryFileNames: '[name].mjs',
106+
exports: 'named',
107+
preserveModules: true,
108+
dir: 'lib',
109+
format: 'esm',
110+
interop: 'esModule',
111+
sourcemap: true,
112+
},
113+
],
114+
plugins: [ts, json(), commonjs(), nodeResolve({ extensions: ['.ts', '.tsx'] })],
115+
external: externalDev,
116+
};
117+
118+
if (buildSystem) {
119+
prod.output.push({
120+
file: `dist/system/${outputName}.min.js`,
121+
format: 'system',
122+
interop: 'esModule',
123+
sourcemap: true,
124+
});
125+
dev.output.push({
126+
file: `dist/system/${outputName}.development.js`,
127+
format: 'system',
128+
sourcemap: true,
129+
interop: 'esModule',
130+
});
131+
}
132+
if (buildCjs) {
133+
neutral.output.push({
134+
file: `dist/cjs/${outputName}.js`,
135+
format: 'cjs',
136+
sourcemap: true,
137+
});
138+
}
139+
140+
return [
141+
prod,
142+
dev,
143+
neutral,
144+
// types - failed
145+
// {
146+
// input: 'src/index.ts',
147+
// output: [
148+
// {
149+
// file: 'dist/types/index.d.ts',
150+
// format: 'esm',
151+
// interop: 'esModule',
152+
// },
153+
// ],
154+
// plugins: [nodeResolve({ extensions: ['.ts', '.tsx'] }), dts()],
155+
// external: externalDev,
156+
// },
157+
];
158+
}

components/wener-tiptap/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@
2929
"checkJs": true,
3030
"allowJs": true,
3131
"jsx": "react",
32-
"incremental": true
32+
"incremental": false
3333
},
3434
"include": [
35+
"rollup.config.ts",
3536
"src/**/*.ts",
3637
"src/**/*.tsx"
3738
],

node.mk

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ SOURCE_FILES?=$(shell ls 2>/dev/null src/**/*.js src/**/*.ts src/**/*.tsx | egre
6565
ESBUILD_BUILD_FLAGS?=--charset=utf8 --target=chrome90 --sourcemap --platform=neutral
6666
build:
6767
ifneq ($(wildcard rollup.config.*),)
68-
$(EXEC) rollup -c
68+
$(MAKE) rollup
6969
else ifneq ($(wildcard esbuild.build.*),)
7070
$(EXEC) $(wildcard esbuild.build.*)
7171
else
@@ -109,7 +109,10 @@ else
109109
@$(EXEC) esbuild --format=esm --outfile=dist/esm/$(OUT_NAME).min.js $(ESBUILD_PRODUCTION_FLAGS) $(ESBUILD_BUNDLE_FLAGS) src/index.ts
110110
endif
111111

112-
ifneq ($(wildcard rollup.config.js),)
112+
ifneq ($(wildcard rollup.config.ts),)
113+
rollup:
114+
$(EXEC) rollup -c --configPlugin @rollup/plugin-typescript
115+
else ifneq ($(wildcard rollup.config.js),)
113116
rollup:
114117
$(EXEC) rollup -c
115118
endif

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,19 @@
2626
},
2727
"homepage": "https://github.com/wenerme/wode#readme",
2828
"devDependencies": {
29+
"@rollup/plugin-commonjs": "^22.0.2",
30+
"@rollup/plugin-json": "^4.1.0",
31+
"@rollup/plugin-node-resolve": "^14.1.0",
2932
"@rollup/plugin-replace": "^4.0.0",
3033
"@rollup/plugin-typescript": "^8.5.0",
34+
"@types/node": "^16",
3135
"ava": "^4.3.3",
3236
"prettier": "latest",
3337
"rollup": "3.0.0-6",
38+
"rollup-plugin-dts": "^4.2.2",
39+
"rollup-plugin-size": "^0.2.2",
3440
"rollup-plugin-terser": "^7.0.2",
41+
"rollup-plugin-visualizer": "^5.8.1",
3542
"tsx": "^3.8.2",
3643
"turbo": "^1.2.9",
3744
"typescript": "^4"

0 commit comments

Comments
 (0)