📄 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