@vendure-platform/create 0.1.0 → 0.2.1-nightly.202605190703
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 +37 -27
- package/dist/assets/storefront/.env.example +14 -14
- package/dist/assets/storefront/messages/de.json +2 -3
- package/dist/assets/storefront/messages/en.json +2 -3
- package/dist/assets/storefront/next.config.ts +22 -21
- package/dist/assets/storefront/package.json +75 -75
- package/dist/assets/storefront/public/scenarios/customer/logo.svg +4 -0
- package/dist/assets/storefront/src/app/[locale]/layout.tsx +0 -4
- package/dist/assets/storefront/src/app/[locale]/sign-in/login-form.tsx +70 -102
- package/dist/assets/storefront/src/app/[locale]/sign-in/page.tsx +2 -3
- package/dist/assets/storefront/src/config/scenario-meta.ts +3 -7
- package/dist/assets/storefront/src/config/scenario.ts +14 -30
- package/dist/assets/storefront/src/graphql-env.d.ts +456 -0
- package/dist/assets/storefront/src/scenarios/customer/branding.ts +142 -0
- package/dist/assets/storefront/src/scenarios/customer/hero.tsx +76 -0
- package/dist/assets/storefront/src/scenarios/{default → customer}/index.ts +3 -3
- package/dist/assets/storefront/src/scenarios/{default → customer}/meta.ts +1 -1
- package/dist/assets/storefront/src/schema.graphql +5852 -0
- package/dist/assets/storefront/tsconfig.json +17 -8
- package/dist/assets/templates/README.md.hbs +1 -1
- package/dist/assets/templates/docker-compose.yml.hbs +0 -4
- package/dist/assets/templates/env.hbs +13 -7
- package/dist/assets/templates/environment.d.ts.hbs +1 -5
- package/dist/assets/templates/npmrc.hbs +1 -1
- package/dist/assets/templates/populate.ts.hbs +17 -0
- package/dist/assets/templates/server-package.json.hbs +3 -2
- package/dist/bin/run.js +17 -3
- package/dist/bin/run.js.map +1 -1
- package/dist/cli.d.ts +6 -1
- package/dist/cli.js +147 -25
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/plugin-registry.d.ts +43 -6
- package/dist/plugin-registry.js +139 -421
- package/dist/plugin-registry.js.map +1 -1
- package/dist/registry.d.ts +18 -0
- package/dist/registry.js +29 -0
- package/dist/registry.js.map +1 -0
- package/dist/scaffold-shared.d.ts +19 -0
- package/dist/scaffold-shared.js +114 -0
- package/dist/scaffold-shared.js.map +1 -0
- package/dist/scaffold-storefront-only.d.ts +6 -0
- package/dist/scaffold-storefront-only.js +101 -0
- package/dist/scaffold-storefront-only.js.map +1 -0
- package/dist/scaffolder.js +22 -42
- package/dist/scaffolder.js.map +1 -1
- package/dist/storefront-copier.d.ts +26 -3
- package/dist/storefront-copier.js +63 -12
- package/dist/storefront-copier.js.map +1 -1
- package/dist/template-renderer.d.ts +24 -7
- package/dist/template-renderer.js +32 -64
- package/dist/template-renderer.js.map +1 -1
- package/dist/types.d.ts +46 -27
- package/package.json +3 -1
- package/dist/assets/storefront/.env.local +0 -1
- package/dist/assets/storefront/public/scenarios/b2b-wholesale/hero/hero-bg.webp +0 -0
- package/dist/assets/storefront/public/scenarios/b2b-wholesale/logo.svg +0 -4
- package/dist/assets/storefront/public/scenarios/default/logo.svg +0 -4
- package/dist/assets/storefront/public/scenarios/kaminpro/hero/hero-bg.webp +0 -0
- package/dist/assets/storefront/public/scenarios/kaminpro/logo.svg +0 -7
- package/dist/assets/storefront/src/components/shared/scenario-paused.tsx +0 -80
- package/dist/assets/storefront/src/scenarios/b2b-wholesale/branding.ts +0 -180
- package/dist/assets/storefront/src/scenarios/b2b-wholesale/hero.tsx +0 -122
- package/dist/assets/storefront/src/scenarios/b2b-wholesale/index.ts +0 -21
- package/dist/assets/storefront/src/scenarios/b2b-wholesale/meta.ts +0 -3
- package/dist/assets/storefront/src/scenarios/default/branding.ts +0 -148
- package/dist/assets/storefront/src/scenarios/default/hero.tsx +0 -107
- package/dist/assets/storefront/src/scenarios/kaminpro/auth-gate.tsx +0 -36
- package/dist/assets/storefront/src/scenarios/kaminpro/branding.ts +0 -238
- package/dist/assets/storefront/src/scenarios/kaminpro/cart-items.tsx +0 -359
- package/dist/assets/storefront/src/scenarios/kaminpro/hero.tsx +0 -123
- package/dist/assets/storefront/src/scenarios/kaminpro/index.ts +0 -50
- package/dist/assets/storefront/src/scenarios/kaminpro/meta.ts +0 -9
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/banners.tsx +0 -21
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/bom-basket.tsx +0 -221
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/btn.tsx +0 -38
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/chip.tsx +0 -35
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/config-header.tsx +0 -72
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/field-row.tsx +0 -126
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/info-dot.tsx +0 -38
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/login-notice.tsx +0 -81
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/module-panel.tsx +0 -144
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/quote-dialog.tsx +0 -110
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/schematic.tsx +0 -674
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/components/why-panel.tsx +0 -66
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/configurator-pdp.tsx +0 -43
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/configurator-shell.tsx +0 -320
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/lib/data.ts +0 -150
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/lib/types.ts +0 -30
- package/dist/assets/storefront/src/scenarios/kaminpro/pdp/styles.css +0 -104
- package/dist/assets/storefront/src/scenarios/kaminpro/shop-by-system.tsx +0 -97
- package/dist/assets/storefront/src/scenarios/kaminpro/system-finder/decision-tree.ts +0 -261
- package/dist/assets/storefront/src/scenarios/kaminpro/system-finder/page.tsx +0 -21
- package/dist/assets/storefront/src/scenarios/kaminpro/system-finder/wizard.tsx +0 -600
- package/dist/assets/storefront/src/schema.graphql.placeholder +0 -5
|
@@ -3,25 +3,42 @@ import { PluginDefinition } from './types';
|
|
|
3
3
|
export interface TemplateContext {
|
|
4
4
|
projectName: string;
|
|
5
5
|
companyName: string;
|
|
6
|
+
/**
|
|
7
|
+
* The full set of plugin keys whose imports, env vars, etc. should appear
|
|
8
|
+
* in the generated project. Includes all always-active (core) plugins plus
|
|
9
|
+
* the user's selected optional/requires-config plugins.
|
|
10
|
+
*/
|
|
6
11
|
resolvedPluginKeys: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Same plugins as `resolvedPluginKeys`, materialised as `PluginDefinition`
|
|
14
|
+
* objects. Used by templates that iterate via `{{#each resolvedPlugins}}`
|
|
15
|
+
* to render `displayName` / `packageName` (see `README.md.hbs`,
|
|
16
|
+
* `CLAUDE.md.hbs`).
|
|
17
|
+
*/
|
|
7
18
|
resolvedPlugins: PluginDefinition[];
|
|
19
|
+
/**
|
|
20
|
+
* Optional plugins the user explicitly deselected. For each one, we emit
|
|
21
|
+
* `platformKey: false` inside `VendurePlatform.init({...})` to override
|
|
22
|
+
* its default-on behaviour.
|
|
23
|
+
*/
|
|
24
|
+
disabledPluginKeys: string[];
|
|
8
25
|
includeStorefront: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Private registry URL baked into the project's `.npmrc` scope mapping.
|
|
28
|
+
* Resolved from `VENDURE_REGISTRY_URL` if set, otherwise the production
|
|
29
|
+
* default. See `registry.ts`.
|
|
30
|
+
*/
|
|
31
|
+
registryUrl: string;
|
|
9
32
|
}
|
|
10
33
|
export interface TemplateContextResult {
|
|
11
34
|
context: TemplateContext;
|
|
12
35
|
hbs: typeof Handlebars;
|
|
13
36
|
}
|
|
14
|
-
export declare function buildTemplateContext(projectName: string, companyName: string,
|
|
37
|
+
export declare function buildTemplateContext(projectName: string, companyName: string, selectedPluginKeys: ReadonlyArray<string>, includeStorefront: boolean): TemplateContextResult;
|
|
15
38
|
/**
|
|
16
39
|
* Render a Handlebars template file with the given context.
|
|
17
40
|
*/
|
|
18
41
|
export declare function renderTemplate(templatePath: string, context: TemplateContext, hbs: typeof Handlebars): string;
|
|
19
|
-
/**
|
|
20
|
-
* Get the path to a bundled asset file.
|
|
21
|
-
* At runtime these live in dist/assets/.
|
|
22
|
-
* During development they live in assets/.
|
|
23
|
-
*/
|
|
24
|
-
export declare function getAssetPath(assetName: string): string;
|
|
25
42
|
/**
|
|
26
43
|
* Get the path to a bundled template file.
|
|
27
44
|
* At runtime these live in dist/assets/templates/.
|
|
@@ -38,13 +38,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.buildTemplateContext = buildTemplateContext;
|
|
40
40
|
exports.renderTemplate = renderTemplate;
|
|
41
|
-
exports.getAssetPath = getAssetPath;
|
|
42
41
|
exports.getTemplatePath = getTemplatePath;
|
|
43
42
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
44
43
|
const fs = __importStar(require("fs"));
|
|
45
44
|
const path = __importStar(require("path"));
|
|
46
45
|
const plugin_registry_1 = require("./plugin-registry");
|
|
47
|
-
|
|
46
|
+
const registry_1 = require("./registry");
|
|
47
|
+
function createHandlebarsInstance(resolvedPluginKeys, disabledPluginKeys) {
|
|
48
48
|
const hbs = handlebars_1.default.create();
|
|
49
49
|
const resolvedSet = new Set(resolvedPluginKeys);
|
|
50
50
|
hbs.registerHelper('ifPlugin', function (pluginKey, options) {
|
|
@@ -53,37 +53,8 @@ function createHandlebarsInstance(resolvedPluginKeys) {
|
|
|
53
53
|
}
|
|
54
54
|
return options.inverse(this);
|
|
55
55
|
});
|
|
56
|
-
hbs.registerHelper('pluginImports', function () {
|
|
57
|
-
const lines = [];
|
|
58
|
-
for (const key of resolvedPluginKeys) {
|
|
59
|
-
const plugin = (0, plugin_registry_1.getPlugin)(key);
|
|
60
|
-
if (!plugin || plugin.imports.length === 0)
|
|
61
|
-
continue;
|
|
62
|
-
const names = plugin.imports.join(', ');
|
|
63
|
-
lines.push(`import { ${names} } from '${plugin.packageName}';`);
|
|
64
|
-
}
|
|
65
|
-
return new hbs.SafeString(lines.join('\n'));
|
|
66
|
-
});
|
|
67
|
-
hbs.registerHelper('pluginConfigBlocks', function () {
|
|
68
|
-
const blocks = [];
|
|
69
|
-
for (const key of resolvedPluginKeys) {
|
|
70
|
-
const plugin = (0, plugin_registry_1.getPlugin)(key);
|
|
71
|
-
if (!plugin)
|
|
72
|
-
continue;
|
|
73
|
-
// Compile configBlock through Handlebars so it can use {{#ifPlugin}} guards
|
|
74
|
-
const compiled = hbs.compile(plugin.configBlock, { noEscape: true });
|
|
75
|
-
blocks.push(` ${compiled({})},`);
|
|
76
|
-
}
|
|
77
|
-
return new hbs.SafeString(blocks.join('\n'));
|
|
78
|
-
});
|
|
79
56
|
hbs.registerHelper('pluginDependencies', function () {
|
|
80
|
-
const lines =
|
|
81
|
-
for (const key of resolvedPluginKeys) {
|
|
82
|
-
const plugin = (0, plugin_registry_1.getPlugin)(key);
|
|
83
|
-
if (!plugin || plugin.internal)
|
|
84
|
-
continue;
|
|
85
|
-
lines.push(` "${plugin.packageName}": "nightly"`);
|
|
86
|
-
}
|
|
57
|
+
const lines = resolvedPluginKeys.map((key) => ` "${(0, plugin_registry_1.getPlugin)(key).packageName}": "nightly"`);
|
|
87
58
|
if (lines.length === 0) {
|
|
88
59
|
return new hbs.SafeString('');
|
|
89
60
|
}
|
|
@@ -92,38 +63,54 @@ function createHandlebarsInstance(resolvedPluginKeys) {
|
|
|
92
63
|
hbs.registerHelper('platformPluginImports', function () {
|
|
93
64
|
const lines = [`import { VendurePlatform } from '@vendure-platform/platform';`];
|
|
94
65
|
for (const key of resolvedPluginKeys) {
|
|
95
|
-
const
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
lines.push(...plugin.platformImports);
|
|
66
|
+
const imports = (0, plugin_registry_1.getPlugin)(key).platformImports;
|
|
67
|
+
if (imports)
|
|
68
|
+
lines.push(...imports);
|
|
99
69
|
}
|
|
100
70
|
return new hbs.SafeString(lines.join('\n'));
|
|
101
71
|
});
|
|
72
|
+
/**
|
|
73
|
+
* Emit the options body for `VendurePlatform.init({...})`. Two kinds of
|
|
74
|
+
* entries appear here:
|
|
75
|
+
*
|
|
76
|
+
* 1. Options blocks for active plugins that ship a non-empty
|
|
77
|
+
* `platformOptionsBlock` (e.g. core plugins with required config,
|
|
78
|
+
* or `requires-config` plugins the user selected).
|
|
79
|
+
* 2. `platformKey: false` lines for any `optional` plugin the user
|
|
80
|
+
* deselected — because `VendurePlatform` enables them by default.
|
|
81
|
+
*/
|
|
102
82
|
hbs.registerHelper('platformPluginOptions', function () {
|
|
103
83
|
const blocks = [];
|
|
104
84
|
for (const key of resolvedPluginKeys) {
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
85
|
+
const block = (0, plugin_registry_1.getPlugin)(key).platformOptionsBlock;
|
|
86
|
+
if (block)
|
|
87
|
+
blocks.push(` ${block},`);
|
|
88
|
+
}
|
|
89
|
+
for (const key of disabledPluginKeys) {
|
|
90
|
+
blocks.push(` ${(0, plugin_registry_1.getPlugin)(key).platformKey}: false,`);
|
|
109
91
|
}
|
|
110
92
|
return new hbs.SafeString(blocks.join('\n'));
|
|
111
93
|
});
|
|
112
94
|
return hbs;
|
|
113
95
|
}
|
|
114
|
-
function buildTemplateContext(projectName, companyName,
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
96
|
+
function buildTemplateContext(projectName, companyName, selectedPluginKeys, includeStorefront) {
|
|
97
|
+
const resolvedPluginKeys = (0, plugin_registry_1.resolveActivePluginKeys)(selectedPluginKeys);
|
|
98
|
+
const resolvedPlugins = resolvedPluginKeys.map((key) => (0, plugin_registry_1.getPlugin)(key));
|
|
99
|
+
const resolvedSet = new Set(resolvedPluginKeys);
|
|
100
|
+
const disabledPluginKeys = plugin_registry_1.pluginRegistry
|
|
101
|
+
.filter((p) => p.tier === 'optional' && !resolvedSet.has(p.key))
|
|
102
|
+
.map((p) => p.key);
|
|
118
103
|
return {
|
|
119
104
|
context: {
|
|
120
105
|
projectName,
|
|
121
106
|
companyName,
|
|
122
107
|
resolvedPluginKeys,
|
|
123
108
|
resolvedPlugins,
|
|
109
|
+
disabledPluginKeys,
|
|
124
110
|
includeStorefront,
|
|
111
|
+
registryUrl: (0, registry_1.getRegistryUrl)(),
|
|
125
112
|
},
|
|
126
|
-
hbs: createHandlebarsInstance(resolvedPluginKeys),
|
|
113
|
+
hbs: createHandlebarsInstance(resolvedPluginKeys, disabledPluginKeys),
|
|
127
114
|
};
|
|
128
115
|
}
|
|
129
116
|
/**
|
|
@@ -134,25 +121,6 @@ function renderTemplate(templatePath, context, hbs) {
|
|
|
134
121
|
const template = hbs.compile(source, { noEscape: true });
|
|
135
122
|
return template(context);
|
|
136
123
|
}
|
|
137
|
-
/**
|
|
138
|
-
* Get the path to a bundled asset file.
|
|
139
|
-
* At runtime these live in dist/assets/.
|
|
140
|
-
* During development they live in assets/.
|
|
141
|
-
*/
|
|
142
|
-
function getAssetPath(assetName) {
|
|
143
|
-
const candidates = [
|
|
144
|
-
path.join(__dirname, 'assets', assetName),
|
|
145
|
-
path.join(__dirname, '..', 'assets', assetName),
|
|
146
|
-
];
|
|
147
|
-
for (const candidate of candidates) {
|
|
148
|
-
if (fs.existsSync(candidate)) {
|
|
149
|
-
return candidate;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
throw new Error(`Asset not found: ${assetName}\n` +
|
|
153
|
-
` __dirname: ${__dirname}\n` +
|
|
154
|
-
` Searched:\n${candidates.map((c) => ` - ${c} (exists: ${fs.existsSync(path.dirname(c))})`).join('\n')}`);
|
|
155
|
-
}
|
|
156
124
|
/**
|
|
157
125
|
* Get the path to a bundled template file.
|
|
158
126
|
* At runtime these live in dist/assets/templates/.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../src/template-renderer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../src/template-renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PluginMeta } from '@vendure-platform/plugin-meta';
|
|
1
2
|
export interface ScaffoldOptions {
|
|
2
3
|
projectName: string;
|
|
3
4
|
companyName: string;
|
|
@@ -5,6 +6,23 @@ export interface ScaffoldOptions {
|
|
|
5
6
|
includeStorefront: boolean;
|
|
6
7
|
createGithubRepo: boolean;
|
|
7
8
|
githubOrg?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Package manager used for the install step. Defaults to `bun` to match
|
|
11
|
+
* the recommended invocation `bunx @vendure-platform/create`.
|
|
12
|
+
*/
|
|
13
|
+
packageManager?: PackageManager;
|
|
14
|
+
skipInstall?: boolean;
|
|
15
|
+
skipGit?: boolean;
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type PackageManager = 'bun' | 'npm' | 'pnpm';
|
|
19
|
+
export interface StorefrontOnlyOptions {
|
|
20
|
+
projectName: string;
|
|
21
|
+
/** Vendure Shop API URL written to `.env.local`. */
|
|
22
|
+
apiUrl?: string;
|
|
23
|
+
/** Scenario baked into `NEXT_PUBLIC_SCENARIO`. Default: `customer`. */
|
|
24
|
+
scenario: string;
|
|
25
|
+
packageManager: PackageManager;
|
|
8
26
|
skipInstall?: boolean;
|
|
9
27
|
skipGit?: boolean;
|
|
10
28
|
dryRun?: boolean;
|
|
@@ -18,43 +36,44 @@ export interface CliFlags {
|
|
|
18
36
|
install?: boolean;
|
|
19
37
|
git?: boolean;
|
|
20
38
|
dryRun?: boolean;
|
|
39
|
+
storefrontOnly?: boolean;
|
|
40
|
+
apiUrl?: string;
|
|
41
|
+
scenario?: string;
|
|
42
|
+
pm?: PackageManager;
|
|
21
43
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
imports: string[];
|
|
35
|
-
/** Environment variables this plugin needs */
|
|
44
|
+
/**
|
|
45
|
+
* Scaffolder-specific data for a plugin — env vars, options-block template
|
|
46
|
+
* snippets, additional imports. Keyed by the same `key` (kebab-case) used in
|
|
47
|
+
* `@vendure-platform/plugin-meta` so the two halves can be joined at runtime.
|
|
48
|
+
*
|
|
49
|
+
* The shared `PluginMeta` defines what every consumer agrees on (key, tier,
|
|
50
|
+
* dependencies, etc.); this interface holds the bits only the scaffolder
|
|
51
|
+
* needs and which would be dead weight in `@vendure-platform/platform` or
|
|
52
|
+
* any other consumer.
|
|
53
|
+
*/
|
|
54
|
+
export interface ScaffolderPluginExtras {
|
|
55
|
+
/** Environment variables to add to the generated `.env` file. */
|
|
36
56
|
envVars: EnvVar[];
|
|
37
|
-
/** The .init({...}) or plugin expression code for vendure-config.ts (legacy, individual plugin mode) */
|
|
38
|
-
configBlock: string;
|
|
39
57
|
/**
|
|
40
|
-
*
|
|
41
|
-
* Compiled through Handlebars so it can
|
|
58
|
+
* Options fragment emitted under this plugin's key in
|
|
59
|
+
* `VendurePlatform.init({...})`. Compiled through Handlebars so it can
|
|
60
|
+
* use `{{#ifPlugin}}` guards. Empty string means the plugin activates
|
|
61
|
+
* with just defaults — no entry will be emitted.
|
|
42
62
|
*/
|
|
43
63
|
platformOptionsBlock: string;
|
|
44
64
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* references in their options).
|
|
65
|
+
* Extra named imports the options block needs (e.g. strategy classes
|
|
66
|
+
* referenced inside `platformOptionsBlock`).
|
|
48
67
|
*/
|
|
49
68
|
platformImports?: string[];
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The joined view used by the scaffolder: shared metadata + scaffolder extras.
|
|
72
|
+
* Each `pluginRegistry` entry has this shape — see `plugin-registry.ts`.
|
|
73
|
+
*/
|
|
74
|
+
export interface PluginDefinition extends PluginMeta, ScaffolderPluginExtras {
|
|
55
75
|
}
|
|
56
76
|
export interface EnvVar {
|
|
57
77
|
name: string;
|
|
58
78
|
defaultValue: string;
|
|
59
|
-
comment?: string;
|
|
60
79
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vendure-platform/create",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.2.1-nightly.202605190703",
|
|
4
4
|
"description": "CLI tool to scaffold a Vendure demo project with Vendure Platform plugins",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
|
+
"CHANGELOG.md",
|
|
25
26
|
"dist/**/*",
|
|
26
27
|
"!**/*.tsbuildinfo",
|
|
27
28
|
"!**/*.spec.*",
|
|
@@ -36,6 +37,7 @@
|
|
|
36
37
|
},
|
|
37
38
|
"dependencies": {
|
|
38
39
|
"@clack/prompts": "^0.10.0",
|
|
40
|
+
"@vendure-platform/plugin-meta": "0.2.0",
|
|
39
41
|
"commander": "^13.1.0",
|
|
40
42
|
"fs-extra": "^11.3.0",
|
|
41
43
|
"handlebars": "^4.7.8",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# NEXT_PUBLIC_SCENARIO=b2b-wholesale
|
|
Binary file
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
|
|
2
|
-
<rect x="2" y="2" width="28" height="28" rx="5" fill="#e07a00"/>
|
|
3
|
-
<text x="16" y="22.5" font-family="Arial Black, Impact, sans-serif" font-size="14" font-weight="900" fill="white" text-anchor="middle" letter-spacing="-0.5">BD</text>
|
|
4
|
-
</svg>
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 40 27">
|
|
2
|
-
<path fill="#17C1FF" d="M10.746 12.008v9.263c0 .166.093.323.237.404l8.407 4.763c.302.17.671.17.973 0l8.407-4.762a.466.466 0 0 0 .237-.405v-9.263a.476.476 0 0 0-.714-.405l-7.93 4.491a.996.996 0 0 1-.973 0l-7.93-4.49a.476.476 0 0 0-.714.404Z"/>
|
|
3
|
-
<path fill="#17C1FF" d="M8.893.072.486 4.832A.948.948 0 0 0 0 5.657v9.522c0 .166.092.323.237.405l8.176 4.633a.476.476 0 0 0 .714-.405V10.83c0-.341.185-.655.487-.824l7.93-4.491a.463.463 0 0 0 0-.81L9.366.072a.48.48 0 0 0-.477 0h.003ZM30.86.063l8.407 4.76c.301.17.486.486.486.825v9.522a.469.469 0 0 1-.237.405l-8.176 4.633a.476.476 0 0 1-.714-.405v-8.982a.945.945 0 0 0-.486-.824l-7.93-4.491a.463.463 0 0 1 0-.81L30.386.063a.48.48 0 0 1 .477 0h-.003Z"/>
|
|
4
|
-
</svg>
|
|
Binary file
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
|
|
2
|
-
<rect x="2" y="2" width="28" height="28" rx="5" fill="#1c1917"/>
|
|
3
|
-
<path d="M16 6c-.5 2.8-3.2 4.3-3.2 7.8 0 2 1.4 3.6 3.2 3.6s3.2-1.6 3.2-3.6c0-1.2-.4-2-1.1-3 .3 1.4-.4 2.4-1.1 2.4-.7 0-1.1-.6-1.1-1.5C15.9 10 16.9 8.6 16 6z" fill="#dc2626"/>
|
|
4
|
-
<rect x="12" y="18" width="8" height="1.6" fill="#a8a29e"/>
|
|
5
|
-
<rect x="12" y="20.8" width="8" height="1.6" fill="#a8a29e"/>
|
|
6
|
-
<rect x="12" y="23.6" width="8" height="1.6" fill="#a8a29e"/>
|
|
7
|
-
</svg>
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import Image from 'next/image';
|
|
2
|
-
import {getTranslations} from 'next-intl/server';
|
|
3
|
-
import {Button} from '@/components/ui/button';
|
|
4
|
-
import {getBranding} from '@/config/branding';
|
|
5
|
-
import {isBackendReachable} from '@/lib/backend-health';
|
|
6
|
-
|
|
7
|
-
const CONTACT_URL = 'https://vendure.io/contact/';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Suspense-wrappable server component that renders nothing when the Vendure
|
|
11
|
-
* backend is reachable, or a full-screen "Demo Paused" overlay when it isn't.
|
|
12
|
-
*
|
|
13
|
-
* Must be used inside a <Suspense> boundary — it awaits isBackendReachable(),
|
|
14
|
-
* which would otherwise block layout prerender under cacheComponents.
|
|
15
|
-
*/
|
|
16
|
-
export async function BackendHealthGate({locale}: {locale: string}) {
|
|
17
|
-
const reachable = await isBackendReachable();
|
|
18
|
-
if (reachable) return null;
|
|
19
|
-
return <ScenarioPausedOverlay locale={locale} />;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async function ScenarioPausedOverlay({locale}: {locale: string}) {
|
|
23
|
-
const t = await getTranslations({locale, namespace: 'ScenarioPaused'});
|
|
24
|
-
const {logo, logoInverted, siteName} = getBranding();
|
|
25
|
-
const displayLogo = logoInverted ?? logo;
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<div className="fixed inset-0 z-[9999] flex flex-col items-center justify-center px-4 py-12 bg-background overflow-auto">
|
|
29
|
-
<div className="max-w-lg w-full text-center space-y-8">
|
|
30
|
-
<div className="flex justify-center">
|
|
31
|
-
<Image
|
|
32
|
-
src={displayLogo.src}
|
|
33
|
-
alt={displayLogo.alt}
|
|
34
|
-
width={displayLogo.width}
|
|
35
|
-
height={displayLogo.height}
|
|
36
|
-
className="h-16 w-auto"
|
|
37
|
-
priority
|
|
38
|
-
/>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<div className="inline-flex items-center gap-2 rounded-full border border-border bg-muted/60 px-4 py-1.5 text-xs font-medium text-muted-foreground">
|
|
42
|
-
<span className="relative flex h-2 w-2">
|
|
43
|
-
<span className="absolute inline-flex h-full w-full rounded-full bg-primary/40 animate-ping" />
|
|
44
|
-
<span className="relative inline-flex h-2 w-2 rounded-full bg-primary" />
|
|
45
|
-
</span>
|
|
46
|
-
{t('badge')}
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
|
-
<div className="space-y-4">
|
|
50
|
-
<h1 className="text-3xl sm:text-4xl font-bold tracking-tight text-foreground">
|
|
51
|
-
{t('title', {siteName})}
|
|
52
|
-
</h1>
|
|
53
|
-
<p className="text-base text-muted-foreground leading-relaxed">
|
|
54
|
-
{t('description')}
|
|
55
|
-
</p>
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
<div className="flex flex-col sm:flex-row gap-3 justify-center pt-2">
|
|
59
|
-
<Button asChild size="lg">
|
|
60
|
-
<a href={CONTACT_URL} target="_blank" rel="noopener noreferrer">
|
|
61
|
-
{t('contactCta')}
|
|
62
|
-
</a>
|
|
63
|
-
</Button>
|
|
64
|
-
<Button asChild size="lg" variant="outline">
|
|
65
|
-
<a href="https://vendure.io" target="_blank" rel="noopener noreferrer">
|
|
66
|
-
{t('learnMore')}
|
|
67
|
-
</a>
|
|
68
|
-
</Button>
|
|
69
|
-
</div>
|
|
70
|
-
|
|
71
|
-
<p className="text-xs text-muted-foreground pt-4">
|
|
72
|
-
{t('poweredBy')}{' '}
|
|
73
|
-
<a href="https://vendure.io" target="_blank" rel="noopener noreferrer" className="underline hover:text-foreground transition-colors">
|
|
74
|
-
Vendure
|
|
75
|
-
</a>
|
|
76
|
-
</p>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
);
|
|
80
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import type { StorefrontBranding } from '@/config/branding';
|
|
2
|
-
|
|
3
|
-
/* =============================================================
|
|
4
|
-
Color palettes — Construction Orange + Warm Stone
|
|
5
|
-
============================================================= */
|
|
6
|
-
|
|
7
|
-
const baseVars: Record<string, string> = {
|
|
8
|
-
'--radius': '0.375rem',
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const heroColors: Record<string, string> = {
|
|
12
|
-
'--hero-gradient-from': '#1c1917',
|
|
13
|
-
'--hero-gradient-via': '#292524',
|
|
14
|
-
'--hero-gradient-to': '#1c1917',
|
|
15
|
-
'--hero-accent': '#fb923c',
|
|
16
|
-
'--hero-accent-bg': '#e07a00',
|
|
17
|
-
'--hero-accent-bg-hover': '#c96e00',
|
|
18
|
-
'--hero-accent-foreground': '#ffffff',
|
|
19
|
-
'--hero-text': '#f5f5f4',
|
|
20
|
-
'--hero-text-muted': '#d6d3d1',
|
|
21
|
-
'--hero-border': 'rgba(214, 211, 209, 0.25)',
|
|
22
|
-
'--hero-badge-bg': 'rgba(224, 122, 0, 0.18)',
|
|
23
|
-
'--hero-badge-border': 'rgba(251, 146, 60, 0.4)',
|
|
24
|
-
'--hero-bg-image': 'url(/scenarios/b2b-wholesale/hero/hero-bg.webp)',
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const darkColors: Record<string, string> = {
|
|
28
|
-
...baseVars,
|
|
29
|
-
|
|
30
|
-
'--background': '#1c1917',
|
|
31
|
-
'--foreground': '#f5f5f4',
|
|
32
|
-
|
|
33
|
-
'--card': '#292524',
|
|
34
|
-
'--card-foreground': '#f5f5f4',
|
|
35
|
-
'--popover': '#292524',
|
|
36
|
-
'--popover-foreground': '#f5f5f4',
|
|
37
|
-
|
|
38
|
-
'--primary': '#e07a00',
|
|
39
|
-
'--primary-foreground': '#ffffff',
|
|
40
|
-
|
|
41
|
-
'--secondary': '#292524',
|
|
42
|
-
'--secondary-foreground': '#f5f5f4',
|
|
43
|
-
|
|
44
|
-
'--muted': '#292524',
|
|
45
|
-
'--muted-foreground': '#a8a29e',
|
|
46
|
-
|
|
47
|
-
'--accent': '#292524',
|
|
48
|
-
'--accent-foreground': '#f5f5f4',
|
|
49
|
-
|
|
50
|
-
'--destructive': '#dc2626',
|
|
51
|
-
|
|
52
|
-
'--border': '#44403c',
|
|
53
|
-
'--input': '#292524',
|
|
54
|
-
'--ring': '#e07a00',
|
|
55
|
-
|
|
56
|
-
'--chart-1': '#e07a00',
|
|
57
|
-
'--chart-2': '#22c55e',
|
|
58
|
-
'--chart-3': '#eab308',
|
|
59
|
-
'--chart-4': '#f97316',
|
|
60
|
-
'--chart-5': '#dc2626',
|
|
61
|
-
|
|
62
|
-
'--sidebar': '#1c1917',
|
|
63
|
-
'--sidebar-foreground': '#f5f5f4',
|
|
64
|
-
'--sidebar-primary': '#e07a00',
|
|
65
|
-
'--sidebar-primary-foreground': '#ffffff',
|
|
66
|
-
'--sidebar-accent': '#292524',
|
|
67
|
-
'--sidebar-accent-foreground': '#f5f5f4',
|
|
68
|
-
'--sidebar-border': '#44403c',
|
|
69
|
-
'--sidebar-ring': '#e07a00',
|
|
70
|
-
|
|
71
|
-
...heroColors,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const lightColors: Record<string, string> = {
|
|
75
|
-
...baseVars,
|
|
76
|
-
|
|
77
|
-
'--background': '#ffffff',
|
|
78
|
-
'--foreground': '#1c1917',
|
|
79
|
-
|
|
80
|
-
'--card': '#fafaf9',
|
|
81
|
-
'--card-foreground': '#1c1917',
|
|
82
|
-
'--popover': '#ffffff',
|
|
83
|
-
'--popover-foreground': '#1c1917',
|
|
84
|
-
|
|
85
|
-
'--primary': '#d97706',
|
|
86
|
-
'--primary-foreground': '#ffffff',
|
|
87
|
-
|
|
88
|
-
'--secondary': '#f5f5f4',
|
|
89
|
-
'--secondary-foreground': '#1c1917',
|
|
90
|
-
|
|
91
|
-
'--muted': '#f5f5f4',
|
|
92
|
-
'--muted-foreground': '#78716c',
|
|
93
|
-
|
|
94
|
-
'--accent': '#f5f5f4',
|
|
95
|
-
'--accent-foreground': '#1c1917',
|
|
96
|
-
|
|
97
|
-
'--destructive': '#dc2626',
|
|
98
|
-
|
|
99
|
-
'--border': '#e7e5e4',
|
|
100
|
-
'--input': '#e7e5e4',
|
|
101
|
-
'--ring': '#d97706',
|
|
102
|
-
|
|
103
|
-
'--chart-1': '#d97706',
|
|
104
|
-
'--chart-2': '#16a34a',
|
|
105
|
-
'--chart-3': '#ca8a04',
|
|
106
|
-
'--chart-4': '#ea580c',
|
|
107
|
-
'--chart-5': '#dc2626',
|
|
108
|
-
|
|
109
|
-
'--sidebar': '#fafaf9',
|
|
110
|
-
'--sidebar-foreground': '#1c1917',
|
|
111
|
-
'--sidebar-primary': '#d97706',
|
|
112
|
-
'--sidebar-primary-foreground': '#ffffff',
|
|
113
|
-
'--sidebar-accent': '#f5f5f4',
|
|
114
|
-
'--sidebar-accent-foreground': '#1c1917',
|
|
115
|
-
'--sidebar-border': '#e7e5e4',
|
|
116
|
-
'--sidebar-ring': '#d97706',
|
|
117
|
-
|
|
118
|
-
...heroColors,
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
export const branding: StorefrontBranding = {
|
|
122
|
-
siteName: 'BauDirekt',
|
|
123
|
-
siteDescription: 'Baustoffe. Direkt. Der Baustoffgroßhandel für DACH-Profis.',
|
|
124
|
-
|
|
125
|
-
logo: { src: '/scenarios/b2b-wholesale/logo.svg', alt: 'BauDirekt', width: 32, height: 32 },
|
|
126
|
-
|
|
127
|
-
colors: {
|
|
128
|
-
dark: darkColors,
|
|
129
|
-
light: lightColors,
|
|
130
|
-
},
|
|
131
|
-
|
|
132
|
-
demoAccounts: [
|
|
133
|
-
{
|
|
134
|
-
email: 'buyer@berger-bau.demo',
|
|
135
|
-
label: 'Einkäufer',
|
|
136
|
-
description: 'Berger Bau GmbH · Bestellt Baumaterial (Freigabe >€500)',
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
email: 'approver@berger-bau.demo',
|
|
140
|
-
label: 'Freigeber',
|
|
141
|
-
description: 'Berger Bau GmbH · Genehmigt Bestellungen',
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
email: 'admin@berger-bau.demo',
|
|
145
|
-
label: 'Firmenadmin',
|
|
146
|
-
description: 'Berger Bau GmbH · Verwaltet Nutzer & Adressen',
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
email: 'admin@klein-handwerk.demo',
|
|
150
|
-
label: 'Inhaber',
|
|
151
|
-
description: 'Klein Handwerk · Einzelunternehmer, kein Workflow',
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
email: 'buyer@huber-baustoffe.demo',
|
|
155
|
-
label: 'Einkaufsleitung',
|
|
156
|
-
description: 'Huber Baustoffe GmbH · Großabnehmer (DE)',
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
email: 'admin@huber-baustoffe.demo',
|
|
160
|
-
label: 'Firmenadmin',
|
|
161
|
-
description: 'Huber Baustoffe GmbH · Unternehmensverwaltung',
|
|
162
|
-
},
|
|
163
|
-
],
|
|
164
|
-
|
|
165
|
-
footer: {
|
|
166
|
-
copyright: 'BauDirekt GmbH',
|
|
167
|
-
poweredByLinks: [
|
|
168
|
-
{ label: 'Vendure Commerce', href: 'https://vendure.io' },
|
|
169
|
-
],
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
metadata: {
|
|
173
|
-
themeColor: '#1c1917',
|
|
174
|
-
defaultDescription:
|
|
175
|
-
'Baustoffe, Werkzeuge & Arbeitsschutz zum Großhandelspreis. Für Baufirmen, Handwerker und Fachhändler im DACH-Raum.',
|
|
176
|
-
homepageTitle: 'Baustoffgroßhandel für DACH-Profis',
|
|
177
|
-
homepageDescription:
|
|
178
|
-
'Dämmstoffe, Befestigungstechnik, Werkzeuge & PSA zum Fachhandelspreis. Zuverlässig. Direkt. BauDirekt.',
|
|
179
|
-
},
|
|
180
|
-
};
|