📄 tsup.config.ts
D-OPEN SOVEREIGN
1import { defineConfig } from 'tsup';
2import { existsSync } from 'node:fs';
3
4const vueExternalPlugin = {
5 name: 'vue-external',
6 setup(build: any) {
7 build.onResolve({ filter: /^vue$/ }, (args: any) => ({ path: args.path, namespace: 'vue-external' }));
8 build.onLoad({ filter: /.*/, namespace: 'vue-external' }, () => ({
9 contents: 'module.exports = window.Vue;',
10 }));
11 }
12};
13
14const entries: Record<string, string> = {
15 'branding/index': 'src/branding/index.ts',
16 'downloader/index': 'src/downloader/index.ts',
17 'downloader/vue': 'src/downloader/adapters/vue.ts',
18 'downloader/react': 'src/downloader/adapters/react.ts',
19 'downloader/solid': 'src/downloader/adapters/solid.ts',
20 'downloader/sw': 'src/downloader/sw/register.ts',
21 'models/index': 'src/models/index.ts',
22 'models/vue': 'src/models/adapters/vue.ts',
23 'models/react': 'src/models/adapters/react.ts',
24 'models/solid': 'src/models/adapters/solid.ts',
25 'models/astro': 'src/models/adapters/astro.ts',
26 'web3/index': 'src/web3/index.ts',
27 'web3/vue': 'src/web3/vue/index.ts',
28 'web3/registry': 'src/web3/registry/index.ts',
29};
30
31if (existsSync('src/models/generated-src/index.ts')) {
32 entries['models/models'] = 'src/models/generated-src/index.ts';
33}
34
35export default defineConfig([
36 // 1. Core ESM builds
37 {
38 entry: entries,
39 format: ['esm'],
40 dts: {
41 resolve: true,
42 },
43 clean: true,
44 sourcemap: true,
45 splitting: true,
46 external: [
47 'vue',
48 'react',
49 'solid-js',
50 'viem',
51 'idb-keyval',
52 '@the_library/public/models',
53 ],
54 noExternal: [
55 '@the_library/db_schemas',
56 '@the_library/standard-adapters',
57 ],
58 esbuildOptions(opts) {
59 opts.sourcesContent = false;
60 },
61 },
62 // 2. Downloader Workers (File Worker, Mu Worker, SW)
63 {
64 entry: {
65 'downloader/file-worker-v2': 'src/downloader/worker/file-worker.ts',
66 'downloader/mu-worker-v2': 'src/downloader/worker/mu-worker.ts',
67 'downloader/dl2-sw': 'src/downloader/sw/sw.ts',
68 },
69 format: ['esm'],
70 dts: false,
71 clean: false,
72 sourcemap: true,
73 splitting: false,
74 platform: 'browser',
75 external: ['mupdf'],
76 define: {
77 '__DL2_SW_VERSION__': JSON.stringify(Date.now().toString()),
78 },
79 esbuildOptions(opts) {
80 opts.conditions = ['worker', 'browser'];
81 opts.sourcesContent = false;
82 },
83 },
84 // 3. Models Patch Worker
85 {
86 entry: {
87 'models/patch-worker': 'src/models/worker/index.ts',
88 },
89 format: ['esm'],
90 dts: false,
91 clean: false,
92 sourcemap: true,
93 splitting: false,
94 noExternal: [/.*/],
95 esbuildOptions(opts) {
96 opts.sourcesContent = false;
97 },
98 },
99 // 4. Models IIFE (for global browser script loading)
100 ...(existsSync('src/models/generated-src/index.ts') ? [{
101 entry: { 'models/models_v2': 'src/models/global.ts' },
102 format: ['iife'] as const,
103 globalName: 'Web3ModelsV2',
104 dts: false,
105 clean: false,
106 sourcemap: false,
107 minify: true,
108 splitting: false,
109 noExternal: [/^@the_library\//],
110 esbuildPlugins: [vueExternalPlugin],
111 }] : []),
112]);
113