forked from Shopify/hydrogen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtsup.config.ts
103 lines (93 loc) · 2.83 KB
/
tsup.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import path from 'node:path';
import fs from 'node:fs/promises';
import {defineConfig} from 'tsup';
const outDir = 'dist';
const cjsEntryContent = `module.exports = process.env.NODE_ENV === 'development' ? require('./development/index.cjs') : require('./production/index.cjs');`;
const cjsEntryFile = path.resolve(process.cwd(), outDir, 'index.cjs');
const commonConfig = defineConfig({
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
treeshake: true,
sourcemap: true,
});
export default defineConfig([
{
...commonConfig,
env: {NODE_ENV: 'development'},
outDir: path.join(outDir, 'development'),
},
{
...commonConfig,
env: {NODE_ENV: 'production'},
// Bundle types from hydrogen-codgen so that we
// don't need to add it as a dependency in Hydrogen.
dts: {resolve: ['@shopify/hydrogen-codegen']},
outDir: path.join(outDir, 'production'),
minify: true,
onSuccess: async () => {
await fs.writeFile(cjsEntryFile, cjsEntryContent, 'utf-8');
const hydrogenReact = path.resolve('..', 'hydrogen-react');
const sfSchemaFile = 'storefront.schema.json';
const sfTypeFile = 'storefront-api-types.d.ts';
await fs.copyFile(
path.resolve(hydrogenReact, sfSchemaFile),
path.resolve(outDir, sfSchemaFile),
);
await fs.copyFile(
path.resolve(hydrogenReact, 'src', sfTypeFile),
path.resolve(outDir, sfTypeFile),
);
console.log(
'\n',
'Storefront API types copied from hydrogen-react',
'\n',
);
const caSchemaFile = 'customer-account.schema.json';
const caTypeFile = 'customer-account-api-types.d.ts';
await fs.copyFile(
path.resolve(hydrogenReact, caSchemaFile),
path.resolve(outDir, caSchemaFile),
);
await fs.copyFile(
path.resolve(hydrogenReact, 'src', caTypeFile),
path.resolve(outDir, caTypeFile),
);
console.log('\n', 'Customer API types copied from hydrogen-react', '\n');
},
},
{
entry: [
'src/vite/**/*.ts',
'!src/vite/**/*.test.ts',
'!src/vite/virtual-routes/**/*',
],
outDir: 'dist/vite',
format: 'esm',
minify: false,
bundle: true,
sourcemap: false,
dts: true,
},
{
entry: ['src/vite/virtual-routes/**/*.tsx'],
outDir: `${outDir}/vite/virtual-routes`,
outExtension: () => ({js: '.jsx'}),
format: 'esm',
minify: false,
bundle: false,
splitting: false,
treeshake: false,
sourcemap: false,
publicDir: false,
dts: false,
clean: false, // Avoid deleting the assets folder
async onSuccess() {
await fs.cp(
'src/vite/virtual-routes/assets',
`${outDir}/vite/virtual-routes/assets`,
{recursive: true},
);
console.log('\n', 'Copied virtual route assets to build directory', '\n');
},
},
]);