@sitecore-content-sdk/nextjs 1.3.0-canary.9 → 1.4.0-canary.2
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/README.md +11 -11
- package/dist/cjs/client/index.js +10 -10
- package/dist/cjs/client/models.js +2 -2
- package/dist/cjs/client/sitecore-nextjs-client.js +160 -156
- package/dist/cjs/components/BYOCWrapper.js +31 -30
- package/dist/cjs/components/ComponentPropsContext.js +66 -59
- package/dist/cjs/components/FEaaSWrapper.js +33 -32
- package/dist/cjs/components/Link.js +117 -90
- package/dist/cjs/components/NextImage.js +66 -62
- package/dist/cjs/components/Placeholder.js +55 -50
- package/dist/cjs/components/RichText.js +133 -128
- package/dist/cjs/config/define-config.js +26 -25
- package/dist/cjs/config/index.js +5 -5
- package/dist/cjs/config-cli/define-cli-config.js +40 -39
- package/dist/cjs/config-cli/index.js +5 -5
- package/dist/cjs/editing/codegen/import-map.js +129 -118
- package/dist/cjs/editing/codegen/index.js +6 -6
- package/dist/cjs/editing/constants.js +10 -10
- package/dist/cjs/editing/editing-config-middleware.js +70 -69
- package/dist/cjs/editing/editing-render-middleware.js +145 -144
- package/dist/cjs/editing/feaas-render-middleware.js +102 -101
- package/dist/cjs/editing/index.js +19 -19
- package/dist/cjs/editing/render-middleware.js +46 -46
- package/dist/cjs/editing/utils.js +260 -257
- package/dist/cjs/index.js +132 -131
- package/dist/cjs/middleware/app-router-multisite-middleware.js +41 -20
- package/dist/cjs/middleware/index.js +30 -30
- package/dist/cjs/middleware/locale-middleware.js +85 -84
- package/dist/cjs/middleware/middleware.js +195 -192
- package/dist/cjs/middleware/multisite-middleware.js +141 -118
- package/dist/cjs/middleware/personalize-middleware.js +240 -236
- package/dist/cjs/middleware/redirects-middleware.js +323 -297
- package/dist/cjs/middleware/robots-middleware.js +45 -44
- package/dist/cjs/middleware/sitemap-middleware.js +50 -49
- package/dist/cjs/monitoring/healthcheck-middleware.js +31 -30
- package/dist/cjs/monitoring/index.js +5 -5
- package/dist/cjs/route-handler/editing-config-route-handler.js +110 -106
- package/dist/cjs/route-handler/editing-render-route-handler.js +270 -165
- package/dist/cjs/route-handler/index.js +11 -11
- package/dist/cjs/route-handler/robots-route-handler.js +69 -68
- package/dist/cjs/route-handler/sitemap-route-handler.js +66 -65
- package/dist/cjs/search/index.js +17 -0
- package/dist/cjs/services/component-props-service.js +142 -138
- package/dist/cjs/sharedTypes/component-props.js +2 -2
- package/dist/cjs/sharedTypes/sitecore-page-props.js +2 -2
- package/dist/cjs/site/index.js +5 -5
- package/dist/cjs/tools/codegen/import-map.js +15 -0
- package/dist/cjs/tools/component-props.loader.js +95 -95
- package/dist/cjs/tools/generate-map.js +317 -317
- package/dist/cjs/tools/index.js +14 -13
- package/dist/cjs/tools/templating/byoc-component.js +36 -36
- package/dist/cjs/tools/templating/constants.js +7 -7
- package/dist/cjs/tools/templating/default-component.js +35 -35
- package/dist/cjs/tools/templating/utils.js +200 -0
- package/dist/cjs/utils/index.js +14 -14
- package/dist/cjs/utils/utils.js +82 -73
- package/dist/esm/client/index.js +2 -2
- package/dist/esm/client/models.js +1 -1
- package/dist/esm/client/sitecore-nextjs-client.js +156 -152
- package/dist/esm/components/BYOCWrapper.js +27 -26
- package/dist/esm/components/ComponentPropsContext.js +28 -21
- package/dist/esm/components/FEaaSWrapper.js +29 -28
- package/dist/esm/components/Link.js +78 -51
- package/dist/esm/components/NextImage.js +60 -56
- package/dist/esm/components/Placeholder.js +18 -13
- package/dist/esm/components/RichText.js +96 -91
- package/dist/esm/config/define-config.js +21 -20
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/config-cli/define-cli-config.js +36 -35
- package/dist/esm/config-cli/index.js +1 -1
- package/dist/esm/editing/codegen/import-map.js +92 -81
- package/dist/esm/editing/codegen/index.js +1 -1
- package/dist/esm/editing/constants.js +7 -7
- package/dist/esm/editing/editing-config-middleware.js +66 -65
- package/dist/esm/editing/editing-render-middleware.js +141 -140
- package/dist/esm/editing/feaas-render-middleware.js +98 -97
- package/dist/esm/editing/index.js +6 -6
- package/dist/esm/editing/render-middleware.js +42 -42
- package/dist/esm/editing/utils.js +246 -243
- package/dist/esm/index.js +25 -25
- package/dist/esm/middleware/app-router-multisite-middleware.js +37 -16
- package/dist/esm/middleware/index.js +11 -11
- package/dist/esm/middleware/locale-middleware.js +81 -80
- package/dist/esm/middleware/middleware.js +189 -186
- package/dist/esm/middleware/multisite-middleware.js +137 -114
- package/dist/esm/middleware/personalize-middleware.js +236 -232
- package/dist/esm/middleware/redirects-middleware.js +316 -290
- package/dist/esm/middleware/robots-middleware.js +41 -40
- package/dist/esm/middleware/sitemap-middleware.js +46 -45
- package/dist/esm/monitoring/healthcheck-middleware.js +27 -26
- package/dist/esm/monitoring/index.js +1 -1
- package/dist/esm/route-handler/editing-config-route-handler.js +106 -102
- package/dist/esm/route-handler/editing-render-route-handler.js +265 -160
- package/dist/esm/route-handler/index.js +4 -4
- package/dist/esm/route-handler/robots-route-handler.js +65 -64
- package/dist/esm/route-handler/sitemap-route-handler.js +63 -62
- package/dist/esm/search/index.js +1 -0
- package/dist/esm/services/component-props-service.js +135 -131
- package/dist/esm/sharedTypes/component-props.js +1 -1
- package/dist/esm/sharedTypes/sitecore-page-props.js +1 -1
- package/dist/esm/site/index.js +1 -1
- package/dist/esm/tools/codegen/import-map.js +11 -0
- package/dist/esm/tools/component-props.loader.js +59 -59
- package/dist/esm/tools/generate-map.js +279 -279
- package/dist/esm/tools/index.js +3 -2
- package/dist/esm/tools/templating/byoc-component.js +30 -30
- package/dist/esm/tools/templating/constants.js +4 -4
- package/dist/esm/tools/templating/default-component.js +29 -29
- package/dist/esm/tools/templating/utils.js +190 -0
- package/dist/esm/utils/index.js +3 -3
- package/dist/esm/utils/utils.js +74 -65
- package/package.json +87 -13
- package/search.d.ts +1 -0
- package/types/client/index.d.ts +3 -2
- package/types/client/index.d.ts.map +1 -0
- package/types/client/models.d.ts +9 -8
- package/types/client/models.d.ts.map +1 -0
- package/types/client/sitecore-nextjs-client.d.ts +68 -63
- package/types/client/sitecore-nextjs-client.d.ts.map +1 -0
- package/types/components/BYOCWrapper.d.ts +16 -14
- package/types/components/BYOCWrapper.d.ts.map +1 -0
- package/types/components/ComponentPropsContext.d.ts +30 -18
- package/types/components/ComponentPropsContext.d.ts.map +1 -0
- package/types/components/FEaaSWrapper.d.ts +17 -15
- package/types/components/FEaaSWrapper.d.ts.map +1 -0
- package/types/components/Link.d.ts +25 -15
- package/types/components/Link.d.ts.map +1 -0
- package/types/components/NextImage.d.ts +11 -6
- package/types/components/NextImage.d.ts.map +1 -0
- package/types/components/Placeholder.d.ts +14 -8
- package/types/components/Placeholder.d.ts.map +1 -0
- package/types/components/RichText.d.ts +35 -25
- package/types/components/RichText.d.ts.map +1 -0
- package/types/config/define-config.d.ts +42 -38
- package/types/config/define-config.d.ts.map +1 -0
- package/types/config/index.d.ts +2 -1
- package/types/config/index.d.ts.map +1 -0
- package/types/config-cli/define-cli-config.d.ts +10 -8
- package/types/config-cli/define-cli-config.d.ts.map +1 -0
- package/types/config-cli/index.d.ts +2 -1
- package/types/config-cli/index.d.ts.map +1 -0
- package/types/editing/codegen/import-map.d.ts +15 -3
- package/types/editing/codegen/import-map.d.ts.map +1 -0
- package/types/editing/codegen/index.d.ts +3 -2
- package/types/editing/codegen/index.d.ts.map +1 -0
- package/types/editing/constants.d.ts +8 -7
- package/types/editing/constants.d.ts.map +1 -0
- package/types/editing/editing-config-middleware.d.ts +37 -31
- package/types/editing/editing-config-middleware.d.ts.map +1 -0
- package/types/editing/editing-render-middleware.d.ts +47 -44
- package/types/editing/editing-render-middleware.d.ts.map +1 -0
- package/types/editing/feaas-render-middleware.d.ts +35 -32
- package/types/editing/feaas-render-middleware.d.ts.map +1 -0
- package/types/editing/index.d.ts +7 -6
- package/types/editing/index.d.ts.map +1 -0
- package/types/editing/render-middleware.d.ts +26 -25
- package/types/editing/render-middleware.d.ts.map +1 -0
- package/types/editing/utils.d.ts +110 -106
- package/types/editing/utils.d.ts.map +1 -0
- package/types/index.d.ts +25 -24
- package/types/index.d.ts.map +1 -0
- package/types/middleware/app-router-multisite-middleware.d.ts +28 -13
- package/types/middleware/app-router-multisite-middleware.d.ts.map +1 -0
- package/types/middleware/index.d.ts +12 -11
- package/types/middleware/index.d.ts.map +1 -0
- package/types/middleware/locale-middleware.d.ts +35 -32
- package/types/middleware/locale-middleware.d.ts.map +1 -0
- package/types/middleware/middleware.d.ts +135 -127
- package/types/middleware/middleware.d.ts.map +1 -0
- package/types/middleware/multisite-middleware.d.ts +54 -37
- package/types/middleware/multisite-middleware.d.ts.map +1 -0
- package/types/middleware/personalize-middleware.d.ts +81 -65
- package/types/middleware/personalize-middleware.d.ts.map +1 -0
- package/types/middleware/redirects-middleware.d.ts +68 -65
- package/types/middleware/redirects-middleware.d.ts.map +1 -0
- package/types/middleware/robots-middleware.d.ts +15 -13
- package/types/middleware/robots-middleware.d.ts.map +1 -0
- package/types/middleware/sitemap-middleware.d.ts +16 -14
- package/types/middleware/sitemap-middleware.d.ts.map +1 -0
- package/types/monitoring/healthcheck-middleware.d.ts +14 -12
- package/types/monitoring/healthcheck-middleware.d.ts.map +1 -0
- package/types/monitoring/index.d.ts +2 -1
- package/types/monitoring/index.d.ts.map +1 -0
- package/types/route-handler/editing-config-route-handler.d.ts +30 -24
- package/types/route-handler/editing-config-route-handler.d.ts.map +1 -0
- package/types/route-handler/editing-render-route-handler.d.ts +33 -25
- package/types/route-handler/editing-render-route-handler.d.ts.map +1 -0
- package/types/route-handler/index.d.ts +5 -4
- package/types/route-handler/index.d.ts.map +1 -0
- package/types/route-handler/robots-route-handler.d.ts +30 -28
- package/types/route-handler/robots-route-handler.d.ts.map +1 -0
- package/types/route-handler/sitemap-route-handler.d.ts +30 -28
- package/types/route-handler/sitemap-route-handler.d.ts.map +1 -0
- package/types/search/index.d.ts +2 -0
- package/types/search/index.d.ts.map +1 -0
- package/types/services/component-props-service.d.ts +62 -57
- package/types/services/component-props-service.d.ts.map +1 -0
- package/types/sharedTypes/component-props.d.ts +62 -47
- package/types/sharedTypes/component-props.d.ts.map +1 -0
- package/types/sharedTypes/sitecore-page-props.d.ts +14 -9
- package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -0
- package/types/site/index.d.ts +2 -1
- package/types/site/index.d.ts.map +1 -0
- package/types/tools/codegen/import-map.d.ts +10 -0
- package/types/tools/codegen/import-map.d.ts.map +1 -0
- package/types/tools/component-props.loader.d.ts +8 -7
- package/types/tools/component-props.loader.d.ts.map +1 -0
- package/types/tools/generate-map.d.ts +26 -24
- package/types/tools/generate-map.d.ts.map +1 -0
- package/types/tools/index.d.ts +4 -2
- package/types/tools/index.d.ts.map +1 -0
- package/types/tools/templating/byoc-component.d.ts +3 -2
- package/types/tools/templating/byoc-component.d.ts.map +1 -0
- package/types/tools/templating/constants.d.ts +5 -4
- package/types/tools/templating/constants.d.ts.map +1 -0
- package/types/tools/templating/default-component.d.ts +3 -2
- package/types/tools/templating/default-component.d.ts.map +1 -0
- package/types/tools/templating/utils.d.ts +44 -0
- package/types/tools/templating/utils.d.ts.map +1 -0
- package/types/utils/index.d.ts +4 -3
- package/types/utils/index.d.ts.map +1 -0
- package/types/utils/utils.d.ts +34 -24
- package/types/utils/utils.d.ts.map +1 -0
- package/client.js +0 -1
- package/codegen.js +0 -1
- package/config-cli.js +0 -1
- package/config.js +0 -1
- package/editing.js +0 -1
- package/middleware.js +0 -1
- package/monitoring.js +0 -1
- package/route-handler.js +0 -1
- package/site.js +0 -1
- package/tools.js +0 -1
- package/utils.js +0 -1
|
@@ -1,295 +1,295 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
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
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
const builtInImports = options.builtInImports ||
|
|
1
|
+
import { filterComponentsByType, } from '@sitecore-content-sdk/core/tools';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { detectRouterType, getComponentListWithTypes } from './templating/utils';
|
|
5
|
+
// Common builder for Next.js component map content
|
|
6
|
+
const prepareComponentsForMap = (components, opts) => {
|
|
7
|
+
const groups = new Map();
|
|
8
|
+
const getPrefix = (name) => {
|
|
9
|
+
const index = name.indexOf('.');
|
|
10
|
+
return index === -1 ? name : name.slice(0, index);
|
|
11
|
+
};
|
|
12
|
+
for (const file of components) {
|
|
13
|
+
const dir = path.dirname(file.filePath).replace(/\\/g, '/');
|
|
14
|
+
const prefix = getPrefix(file.componentName);
|
|
15
|
+
const key = `${dir}::${prefix}`;
|
|
16
|
+
let group = groups.get(key);
|
|
17
|
+
if (!group) {
|
|
18
|
+
group = { dir, prefix, neighbors: [] };
|
|
19
|
+
groups.set(key, group);
|
|
20
|
+
}
|
|
21
|
+
if (file.componentName === prefix)
|
|
22
|
+
group.base = file;
|
|
23
|
+
else
|
|
24
|
+
group.neighbors.push(file);
|
|
25
|
+
}
|
|
26
|
+
const entries = [];
|
|
27
|
+
for (const group of groups.values()) {
|
|
28
|
+
const imports = [];
|
|
29
|
+
if (opts.includeVariants) {
|
|
30
|
+
const spreads = [];
|
|
31
|
+
for (const neighbor of group.neighbors) {
|
|
32
|
+
imports.push(`import * as ${neighbor.moduleName} from '${neighbor.importPath}';`);
|
|
33
|
+
spreads.push(`...${neighbor.moduleName}`);
|
|
34
|
+
}
|
|
35
|
+
if (group.base) {
|
|
36
|
+
imports.push(`import * as ${group.base.moduleName} from '${group.base.importPath}';`);
|
|
37
|
+
spreads.push(`...${group.base.moduleName}`);
|
|
38
|
+
}
|
|
39
|
+
const annotateClient = !!group.base && 'componentType' in group.base && group.base.componentType === 'client';
|
|
40
|
+
let valueExpr;
|
|
41
|
+
if (spreads.length) {
|
|
42
|
+
valueExpr = spreads.join(', ');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
valueExpr = group.base ? group.base.moduleName : group.neighbors[0].moduleName;
|
|
46
|
+
}
|
|
47
|
+
entries.push({
|
|
48
|
+
key: group.prefix,
|
|
49
|
+
imports,
|
|
50
|
+
valueExpr,
|
|
51
|
+
annotateClient,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Variants disabled: single entry per group
|
|
56
|
+
if (group.base) {
|
|
57
|
+
imports.push(`import * as ${group.base.moduleName} from '${group.base.importPath}';`);
|
|
58
|
+
const annotateClient = 'componentType' in group.base && group.base.componentType === 'client';
|
|
59
|
+
entries.push({
|
|
60
|
+
key: group.prefix,
|
|
61
|
+
imports,
|
|
62
|
+
valueExpr: group.base.moduleName,
|
|
63
|
+
annotateClient,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else if (group.neighbors.length) {
|
|
67
|
+
const first = group.neighbors[0];
|
|
68
|
+
imports.push(`import * as ${first.moduleName} from '${first.importPath}';`);
|
|
69
|
+
entries.push({
|
|
70
|
+
key: group.prefix,
|
|
71
|
+
imports,
|
|
72
|
+
valueExpr: first.moduleName,
|
|
73
|
+
annotateClient: false,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return entries;
|
|
79
|
+
};
|
|
80
|
+
const buildNextjsMapContent = (entries, componentImports, options = {}) => {
|
|
81
|
+
const { headerComment = "Below are built-in components that are available in the app, it's recommended to keep them as is", isClientMap = false, } = options;
|
|
82
|
+
const wildcardImports = [];
|
|
83
|
+
const namedImports = [];
|
|
84
|
+
const builtInImports = options.builtInImports ||
|
|
86
85
|
`
|
|
87
86
|
import { BYOCWrapper, NextjsContentSdkComponent, FEaaSWrapper } from '@sitecore-content-sdk/nextjs';
|
|
88
87
|
import { Form } from '@sitecore-content-sdk/nextjs';
|
|
89
|
-
`;
|
|
90
|
-
const builtInMapEntries = options.builtInMapEntries || [
|
|
91
|
-
`['BYOCWrapper', BYOCWrapper]`,
|
|
92
|
-
`['FEaaSWrapper', FEaaSWrapper]`,
|
|
93
|
-
`['Form', Form]`,
|
|
94
|
-
];
|
|
95
|
-
// Add per-entry imports
|
|
96
|
-
entries.forEach((e) => wildcardImports.push(...e.imports));
|
|
97
|
-
// Handle package imports
|
|
98
|
-
componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
|
|
99
|
-
if (pkg.importInfo.namedImports) {
|
|
100
|
-
namedImports.push(`import { ${pkg.importInfo.namedImports.join(', ')} } from '${pkg.importInfo.importFrom}';`);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
wildcardImports.push(`import * as ${pkg.importName} from '${pkg.importInfo.importFrom}';`);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
const importLines = [
|
|
107
|
-
headerComment.includes('built-in') ? '// end of built-in components' : null,
|
|
108
|
-
...wildcardImports,
|
|
109
|
-
...namedImports,
|
|
110
|
-
].filter(Boolean);
|
|
111
|
-
const importsSection = importLines.length ? `\n${importLines.join('\n')}` : '';
|
|
112
|
-
// Build entry lines (package named imports are appended below)
|
|
113
|
-
const componentMapEntries = builtInMapEntries;
|
|
114
|
-
for (const e of entries) {
|
|
115
|
-
const value = !isClientMap && e.annotateClient
|
|
116
|
-
? `{ ${e.valueExpr}, componentType: 'client' }`
|
|
117
|
-
: e.valueExpr.includes('...')
|
|
118
|
-
? `{ ${e.valueExpr} }`
|
|
119
|
-
: e.valueExpr;
|
|
120
|
-
componentMapEntries.push(`['${e.key}', ${value}]`);
|
|
121
|
-
}
|
|
122
|
-
// Add package-based entries
|
|
123
|
-
componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
|
|
124
|
-
if (pkg.importInfo.namedImports) {
|
|
125
|
-
pkg.importInfo.namedImports.forEach((name) => {
|
|
126
|
-
componentMapEntries.push(`['${name}', ${name}]`);
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
componentMapEntries.push(`['${pkg.importName}', ${pkg.importName}]`);
|
|
131
|
-
}
|
|
132
|
-
});
|
|
88
|
+
`;
|
|
89
|
+
const builtInMapEntries = options.builtInMapEntries || [
|
|
90
|
+
`['BYOCWrapper', BYOCWrapper]`,
|
|
91
|
+
`['FEaaSWrapper', FEaaSWrapper]`,
|
|
92
|
+
`['Form', Form]`,
|
|
93
|
+
];
|
|
94
|
+
// Add per-entry imports
|
|
95
|
+
entries.forEach((e) => wildcardImports.push(...e.imports));
|
|
96
|
+
// Handle package imports
|
|
97
|
+
componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
|
|
98
|
+
if (pkg.importInfo.namedImports) {
|
|
99
|
+
namedImports.push(`import { ${pkg.importInfo.namedImports.join(', ')} } from '${pkg.importInfo.importFrom}';`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
wildcardImports.push(`import * as ${pkg.importName} from '${pkg.importInfo.importFrom}';`);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const importLines = [
|
|
106
|
+
headerComment.includes('built-in') ? '// end of built-in components' : null,
|
|
107
|
+
...wildcardImports,
|
|
108
|
+
...namedImports,
|
|
109
|
+
].filter(Boolean);
|
|
110
|
+
const importsSection = importLines.length ? `\n${importLines.join('\n')}` : '';
|
|
111
|
+
// Build entry lines (package named imports are appended below)
|
|
112
|
+
const componentMapEntries = builtInMapEntries;
|
|
113
|
+
for (const e of entries) {
|
|
114
|
+
const value = !isClientMap && e.annotateClient
|
|
115
|
+
? `{ ${e.valueExpr}, componentType: 'client' }`
|
|
116
|
+
: e.valueExpr.includes('...')
|
|
117
|
+
? `{ ${e.valueExpr} }`
|
|
118
|
+
: e.valueExpr;
|
|
119
|
+
componentMapEntries.push(`['${e.key}', ${value}]`);
|
|
120
|
+
}
|
|
121
|
+
// Add package-based entries
|
|
122
|
+
componentImports === null || componentImports === void 0 ? void 0 : componentImports.forEach((pkg) => {
|
|
123
|
+
if (pkg.importInfo.namedImports) {
|
|
124
|
+
pkg.importInfo.namedImports.forEach((name) => {
|
|
125
|
+
componentMapEntries.push(`['${name}', ${name}]`);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
componentMapEntries.push(`['${pkg.importName}', ${pkg.importName}]`);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
133
132
|
return `// ${headerComment}
|
|
134
133
|
${builtInImports}${importsSection}
|
|
135
134
|
|
|
136
135
|
export const componentMap = new Map<string, NextjsContentSdkComponent>([
|
|
137
|
-
${componentMapEntries
|
|
138
|
-
.map((component) => {
|
|
139
|
-
return ` ${component},\n`;
|
|
140
|
-
})
|
|
136
|
+
${componentMapEntries
|
|
137
|
+
.map((component) => {
|
|
138
|
+
return ` ${component},\n`;
|
|
139
|
+
})
|
|
141
140
|
.join('')}]);
|
|
142
141
|
|
|
143
142
|
export default componentMap;
|
|
144
|
-
`;
|
|
145
|
-
};
|
|
146
|
-
// default client template
|
|
147
|
-
export const defaultClientMapTemplate = (components, componentImports, ctx) => {
|
|
148
|
-
var _a, _b;
|
|
143
|
+
`;
|
|
144
|
+
};
|
|
145
|
+
// default client template
|
|
146
|
+
export const defaultClientMapTemplate = (components, componentImports, ctx) => {
|
|
147
|
+
var _a, _b;
|
|
149
148
|
const builtInImports = `
|
|
150
149
|
import { BYOCClientWrapper, NextjsContentSdkComponent, FEaaSClientWrapper } from '@sitecore-content-sdk/nextjs';
|
|
151
150
|
import { Form } from '@sitecore-content-sdk/nextjs';
|
|
152
|
-
`;
|
|
153
|
-
const builtInMapEntries = [
|
|
154
|
-
`['BYOCWrapper', BYOCClientWrapper]`,
|
|
155
|
-
`['FEaaSWrapper', FEaaSClientWrapper]`,
|
|
156
|
-
`['Form', Form]`,
|
|
157
|
-
];
|
|
158
|
-
const entries = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.entries) !== null && _a !== void 0 ? _a : prepareComponentsForMap(components, {
|
|
159
|
-
includeVariants: (_b = ctx === null || ctx === void 0 ? void 0 : ctx.includeVariants) !== null && _b !== void 0 ? _b : true,
|
|
160
|
-
});
|
|
161
|
-
return buildNextjsMapContent(entries, componentImports, {
|
|
162
|
-
headerComment: 'Client-safe component map for App Router',
|
|
163
|
-
isClientMap: true,
|
|
164
|
-
builtInImports,
|
|
165
|
-
builtInMapEntries,
|
|
166
|
-
});
|
|
167
|
-
};
|
|
168
|
-
// Collect components from specified paths, apply exclude and type filter, and prepare map entries.
|
|
169
|
-
const collectComponents = (opts) => {
|
|
170
|
-
const withTypes = getComponentListWithTypes(opts.paths, opts.exclude, opts.includeVariants);
|
|
171
|
-
const filtered = opts.filter === 'client'
|
|
172
|
-
? filterComponentsByType(withTypes, ['client', 'universal'])
|
|
173
|
-
: withTypes;
|
|
174
|
-
for (const file of filtered) {
|
|
175
|
-
console.debug(`Registering Content SDK component ${file.componentName}`);
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
raw: filtered,
|
|
179
|
-
entries: prepareComponentsForMap(filtered, { includeVariants: opts.includeVariants }),
|
|
180
|
-
};
|
|
181
|
-
};
|
|
182
|
-
/**
|
|
183
|
-
* Generate and write componentMap.ts files based on provided params.
|
|
184
|
-
*
|
|
185
|
-
* When clientComponentMap is true, generates:
|
|
186
|
-
* - component-map.ts : Full component map with all components (server, client, universal)
|
|
187
|
-
* - component-map.client.ts : Client-safe map with only client + universal components
|
|
188
|
-
*
|
|
189
|
-
* When clientComponentMap is false, generates:
|
|
190
|
-
* - component-map.ts : Single component map (traditional behavior)
|
|
191
|
-
*
|
|
192
|
-
* When includeVariants is true (in either mode):
|
|
193
|
-
* - Includes component **variants** in the generated map(s) alongside base components
|
|
194
|
-
* - Preserves the same client/server filtering rules (variants obey clientComponentMap filtering)
|
|
195
|
-
* - Variant entries are emitted using the same naming/keys convention as their base components
|
|
196
|
-
*
|
|
197
|
-
* Template Customization:
|
|
198
|
-
* - mapTemplate: Custom template for main component map (works for both single and dual map modes)
|
|
199
|
-
* - clientMapTemplate: Custom template for client component map (only used when clientComponentMap is true)
|
|
200
|
-
* @param {GenerateMapArgs}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
151
|
+
`;
|
|
152
|
+
const builtInMapEntries = [
|
|
153
|
+
`['BYOCWrapper', BYOCClientWrapper]`,
|
|
154
|
+
`['FEaaSWrapper', FEaaSClientWrapper]`,
|
|
155
|
+
`['Form', Form]`,
|
|
156
|
+
];
|
|
157
|
+
const entries = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.entries) !== null && _a !== void 0 ? _a : prepareComponentsForMap(components, {
|
|
158
|
+
includeVariants: (_b = ctx === null || ctx === void 0 ? void 0 : ctx.includeVariants) !== null && _b !== void 0 ? _b : true,
|
|
159
|
+
});
|
|
160
|
+
return buildNextjsMapContent(entries, componentImports, {
|
|
161
|
+
headerComment: 'Client-safe component map for App Router',
|
|
162
|
+
isClientMap: true,
|
|
163
|
+
builtInImports,
|
|
164
|
+
builtInMapEntries,
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
// Collect components from specified paths, apply exclude and type filter, and prepare map entries.
|
|
168
|
+
const collectComponents = (opts) => {
|
|
169
|
+
const withTypes = getComponentListWithTypes(opts.paths, opts.exclude, opts.includeVariants);
|
|
170
|
+
const filtered = opts.filter === 'client'
|
|
171
|
+
? filterComponentsByType(withTypes, ['client', 'universal'])
|
|
172
|
+
: withTypes;
|
|
173
|
+
for (const file of filtered) {
|
|
174
|
+
console.debug(`Registering Content SDK component ${file.componentName}`);
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
raw: filtered,
|
|
178
|
+
entries: prepareComponentsForMap(filtered, { includeVariants: opts.includeVariants }),
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Generate and write componentMap.ts files based on provided params.
|
|
183
|
+
*
|
|
184
|
+
* When clientComponentMap is true, generates:
|
|
185
|
+
* - component-map.ts : Full component map with all components (server, client, universal)
|
|
186
|
+
* - component-map.client.ts : Client-safe map with only client + universal components
|
|
187
|
+
*
|
|
188
|
+
* When clientComponentMap is false, generates:
|
|
189
|
+
* - component-map.ts : Single component map (traditional behavior)
|
|
190
|
+
*
|
|
191
|
+
* When includeVariants is true (in either mode):
|
|
192
|
+
* - Includes component **variants** in the generated map(s) alongside base components
|
|
193
|
+
* - Preserves the same client/server filtering rules (variants obey clientComponentMap filtering)
|
|
194
|
+
* - Variant entries are emitted using the same naming/keys convention as their base components
|
|
195
|
+
*
|
|
196
|
+
* Template Customization:
|
|
197
|
+
* - mapTemplate: Custom template for main component map (works for both single and dual map modes)
|
|
198
|
+
* - clientMapTemplate: Custom template for client component map (only used when clientComponentMap is true)
|
|
199
|
+
* @param {GenerateMapArgs} params - The parameters for the generateMap function.
|
|
200
|
+
* @public
|
|
201
|
+
*/
|
|
202
|
+
export const generateMap = ({ paths, destination = '.sitecore', exclude, componentImports, mapTemplate, clientMapTemplate, clientComponentMap, includeVariants = true, }) => {
|
|
203
|
+
const isAppRouter = detectRouterType() === 'app';
|
|
204
|
+
const shouldGenerateClientMap = clientComponentMap !== null && clientComponentMap !== void 0 ? clientComponentMap : isAppRouter;
|
|
205
|
+
if (shouldGenerateClientMap) {
|
|
206
|
+
// App Router case, main map
|
|
207
|
+
const getComponents = collectComponents({ paths, exclude, includeVariants, filter: 'all' });
|
|
208
|
+
let mainContent;
|
|
209
|
+
if (mapTemplate) {
|
|
210
|
+
mainContent = mapTemplate(getComponents.raw, componentImports, {
|
|
211
|
+
entries: getComponents.entries,
|
|
212
|
+
includeVariants,
|
|
213
|
+
isClientMap: false,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// default app router server map
|
|
218
218
|
const builtInImports = `
|
|
219
219
|
import { BYOCServerWrapper, NextjsContentSdkComponent, FEaaSServerWrapper } from '@sitecore-content-sdk/nextjs';
|
|
220
220
|
import { Form } from '@sitecore-content-sdk/nextjs';
|
|
221
|
-
`;
|
|
222
|
-
const builtInMapEntries = [
|
|
223
|
-
`['BYOCWrapper', BYOCServerWrapper]`,
|
|
224
|
-
`['FEaaSWrapper', FEaaSServerWrapper]`,
|
|
225
|
-
`['Form', Form]`,
|
|
226
|
-
];
|
|
227
|
-
mainContent = buildNextjsMapContent(getComponents.entries, componentImports, {
|
|
228
|
-
headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
|
|
229
|
-
isClientMap: false,
|
|
230
|
-
builtInImports,
|
|
231
|
-
builtInMapEntries,
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), mainContent, 'utf8');
|
|
235
|
-
// App Router, client map
|
|
236
|
-
const clientComponents = collectComponents({
|
|
237
|
-
paths,
|
|
238
|
-
exclude,
|
|
239
|
-
includeVariants,
|
|
240
|
-
filter: 'client',
|
|
241
|
-
});
|
|
242
|
-
const clientTemplate = clientMapTemplate || defaultClientMapTemplate;
|
|
243
|
-
let clientContent;
|
|
244
|
-
if (clientTemplate.length >= 2) {
|
|
245
|
-
clientContent = clientTemplate(clientComponents.raw, componentImports);
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
clientContent = clientTemplate(clientComponents.raw, componentImports, {
|
|
249
|
-
entries: clientComponents.entries,
|
|
250
|
-
includeVariants,
|
|
251
|
-
isClientMap: true,
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.client.ts'), clientContent, 'utf8');
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
// Either in pages/app router or clientComponentMap = false
|
|
258
|
-
const components = collectComponents({
|
|
259
|
-
paths,
|
|
260
|
-
exclude,
|
|
261
|
-
includeVariants,
|
|
262
|
-
filter: 'all',
|
|
263
|
-
}).entries;
|
|
264
|
-
const content = buildNextjsMapContent(components, componentImports, {
|
|
265
|
-
headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
|
|
266
|
-
isClientMap: false,
|
|
267
|
-
});
|
|
268
|
-
fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), content, 'utf8');
|
|
269
|
-
// For App Router compatibility, always generate client map file even when clientComponentMap is false
|
|
270
|
-
// When clientComponentMap is false, only include built-in components (no custom client components)
|
|
271
|
-
if (shouldGenerateClientMap || isAppRouter) {
|
|
272
|
-
const clientMapTemplateToUse = clientMapTemplate || defaultClientMapTemplate;
|
|
273
|
-
const components = collectComponents({ paths: [], includeVariants, filter: 'all' });
|
|
274
|
-
let clientMapContent;
|
|
275
|
-
if (clientMapTemplateToUse.length >= 2) {
|
|
276
|
-
clientMapContent = clientMapTemplateToUse([], componentImports);
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
clientMapContent = clientMapTemplateToUse([], componentImports, {
|
|
280
|
-
entries: components.entries,
|
|
281
|
-
includeVariants,
|
|
282
|
-
isClientMap: true,
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
const clientMapFile = path.join(process.cwd(), destination, 'component-map.client.ts');
|
|
286
|
-
try {
|
|
287
|
-
fs.writeFileSync(clientMapFile, clientMapContent, { encoding: 'utf8' });
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
console.error(`Client Component Map generation failed. Error writing to file ${destination}:`, error);
|
|
291
|
-
throw error;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
};
|
|
221
|
+
`;
|
|
222
|
+
const builtInMapEntries = [
|
|
223
|
+
`['BYOCWrapper', BYOCServerWrapper]`,
|
|
224
|
+
`['FEaaSWrapper', FEaaSServerWrapper]`,
|
|
225
|
+
`['Form', Form]`,
|
|
226
|
+
];
|
|
227
|
+
mainContent = buildNextjsMapContent(getComponents.entries, componentImports, {
|
|
228
|
+
headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
|
|
229
|
+
isClientMap: false,
|
|
230
|
+
builtInImports,
|
|
231
|
+
builtInMapEntries,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), mainContent, 'utf8');
|
|
235
|
+
// App Router, client map
|
|
236
|
+
const clientComponents = collectComponents({
|
|
237
|
+
paths,
|
|
238
|
+
exclude,
|
|
239
|
+
includeVariants,
|
|
240
|
+
filter: 'client',
|
|
241
|
+
});
|
|
242
|
+
const clientTemplate = clientMapTemplate || defaultClientMapTemplate;
|
|
243
|
+
let clientContent;
|
|
244
|
+
if (clientTemplate.length >= 2) {
|
|
245
|
+
clientContent = clientTemplate(clientComponents.raw, componentImports);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
clientContent = clientTemplate(clientComponents.raw, componentImports, {
|
|
249
|
+
entries: clientComponents.entries,
|
|
250
|
+
includeVariants,
|
|
251
|
+
isClientMap: true,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.client.ts'), clientContent, 'utf8');
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Either in pages/app router or clientComponentMap = false
|
|
258
|
+
const components = collectComponents({
|
|
259
|
+
paths,
|
|
260
|
+
exclude,
|
|
261
|
+
includeVariants,
|
|
262
|
+
filter: 'all',
|
|
263
|
+
}).entries;
|
|
264
|
+
const content = buildNextjsMapContent(components, componentImports, {
|
|
265
|
+
headerComment: "Below are built-in components that are available in the app, it's recommended to keep them as is",
|
|
266
|
+
isClientMap: false,
|
|
267
|
+
});
|
|
268
|
+
fs.writeFileSync(path.join(process.cwd(), destination, 'component-map.ts'), content, 'utf8');
|
|
269
|
+
// For App Router compatibility, always generate client map file even when clientComponentMap is false
|
|
270
|
+
// When clientComponentMap is false, only include built-in components (no custom client components)
|
|
271
|
+
if (shouldGenerateClientMap || isAppRouter) {
|
|
272
|
+
const clientMapTemplateToUse = clientMapTemplate || defaultClientMapTemplate;
|
|
273
|
+
const components = collectComponents({ paths: [], includeVariants, filter: 'all' });
|
|
274
|
+
let clientMapContent;
|
|
275
|
+
if (clientMapTemplateToUse.length >= 2) {
|
|
276
|
+
clientMapContent = clientMapTemplateToUse([], componentImports);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
clientMapContent = clientMapTemplateToUse([], componentImports, {
|
|
280
|
+
entries: components.entries,
|
|
281
|
+
includeVariants,
|
|
282
|
+
isClientMap: true,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
const clientMapFile = path.join(process.cwd(), destination, 'component-map.client.ts');
|
|
286
|
+
try {
|
|
287
|
+
fs.writeFileSync(clientMapFile, clientMapContent, { encoding: 'utf8' });
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.error(`Client Component Map generation failed. Error writing to file ${destination}:`, error);
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
};
|
package/dist/esm/tools/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { generateSites, generateMetadata, getComponentList, generatePlugins, ModuleType, extractFiles,
|
|
2
|
-
export { generateMap } from './generate-map';
|
|
1
|
+
export { generateSites, generateMetadata, getComponentList, generatePlugins, ModuleType, extractFiles, } from '@sitecore-content-sdk/core/tools';
|
|
2
|
+
export { generateMap } from './generate-map';
|
|
3
|
+
export { writeImportMap } from './codegen/import-map';
|