@akinon/next 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/utils/deep-merge.js +24 -0
- package/with-pz-config.js +94 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function isObject(item) {
|
|
2
|
+
return item && typeof item === 'object' && !Array.isArray(item);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function deepMerge(target, ...sources) {
|
|
6
|
+
if (!sources.length) return target;
|
|
7
|
+
|
|
8
|
+
const source = sources.shift();
|
|
9
|
+
|
|
10
|
+
if (isObject(target) && isObject(source)) {
|
|
11
|
+
for (const key in source) {
|
|
12
|
+
if (isObject(source[key])) {
|
|
13
|
+
if (!target[key]) Object.assign(target, { [key]: {} });
|
|
14
|
+
deepMerge(target[key], source[key]);
|
|
15
|
+
} else {
|
|
16
|
+
Object.assign(target, { [key]: source[key] });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return deepMerge(target, ...sources);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = deepMerge;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const pzPlugins = require('./plugins');
|
|
2
|
+
const deepMerge = require('./utils/deep-merge');
|
|
3
|
+
|
|
4
|
+
/** @type {import('next').NextConfig} */
|
|
5
|
+
const defaultConfig = {
|
|
6
|
+
experimental: { serverActions: true },
|
|
7
|
+
reactStrictMode: true,
|
|
8
|
+
transpilePackages: ['@akinon/next', ...pzPlugins],
|
|
9
|
+
skipTrailingSlashRedirect: true,
|
|
10
|
+
poweredByHeader: false,
|
|
11
|
+
env: {
|
|
12
|
+
NEXT_PUBLIC_SENTRY_DSN: process.env.SENTRY_DSN
|
|
13
|
+
},
|
|
14
|
+
images: {
|
|
15
|
+
remotePatterns: [
|
|
16
|
+
{
|
|
17
|
+
protocol: 'https',
|
|
18
|
+
hostname: '**.akinoncloud.com'
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
protocol: 'https',
|
|
22
|
+
hostname: '**.akinoncdn.com'
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
modularizeImports: {
|
|
27
|
+
components: {
|
|
28
|
+
transform: 'components/{{ kebabCase member }}',
|
|
29
|
+
skipDefaultConversion: true
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
async headers() {
|
|
33
|
+
return [
|
|
34
|
+
{
|
|
35
|
+
source: '/(.*)',
|
|
36
|
+
headers: [
|
|
37
|
+
{
|
|
38
|
+
key: 'X-Content-Type-Options',
|
|
39
|
+
value: 'nosniff'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
key: 'Strict-Transport-Security',
|
|
43
|
+
value: 'max-age=63072000; includeSubDomains; preload'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: 'X-Frame-Options',
|
|
47
|
+
value: 'SAMEORIGIN'
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
];
|
|
52
|
+
},
|
|
53
|
+
webpack: (config, options) => {
|
|
54
|
+
config.resolve.fallback = {
|
|
55
|
+
...config.resolve.fallback,
|
|
56
|
+
...pzPlugins.reduce((acc, plugin) => {
|
|
57
|
+
acc[plugin] = false;
|
|
58
|
+
return acc;
|
|
59
|
+
}, {})
|
|
60
|
+
};
|
|
61
|
+
return config;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const withPzConfig = (myNextConfig = {}) => {
|
|
66
|
+
let extendedConfig = deepMerge({}, defaultConfig, myNextConfig);
|
|
67
|
+
|
|
68
|
+
const originalPzHeadersFunction = defaultConfig.headers;
|
|
69
|
+
extendedConfig.headers = async () => {
|
|
70
|
+
const pzHeaders = (await originalPzHeadersFunction?.()) ?? [];
|
|
71
|
+
const myHeaders = (await myNextConfig.headers?.()) ?? [];
|
|
72
|
+
return [...pzHeaders, ...myHeaders];
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const originalPzWebpack = defaultConfig.webpack;
|
|
76
|
+
extendedConfig.webpack = (config, options) => {
|
|
77
|
+
let modifiedConfig = originalPzWebpack(config, options);
|
|
78
|
+
if (myNextConfig.webpack) {
|
|
79
|
+
modifiedConfig = myNextConfig.webpack(modifiedConfig, options);
|
|
80
|
+
}
|
|
81
|
+
return modifiedConfig;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const originalPzRewrites = defaultConfig.rewrites;
|
|
85
|
+
extendedConfig.rewrites = async () => {
|
|
86
|
+
const pzRewrites = (await originalPzRewrites?.()) ?? [];
|
|
87
|
+
const myRewrites = (await myNextConfig.rewrites?.()) ?? [];
|
|
88
|
+
return [...pzRewrites, ...myRewrites];
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return extendedConfig;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
module.exports = withPzConfig;
|