create-brainerce-store 1.18.0 → 1.19.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/dist/index.js +31 -9
- package/messages/en.json +366 -362
- package/messages/he.json +366 -362
- package/package.json +45 -45
- package/templates/nextjs/base/next.config.ts +31 -31
- package/templates/nextjs/base/scripts/fetch-store-info.mjs +81 -81
- package/templates/nextjs/base/src/app/.well-known/apple-developer-merchantid-domain-association/route.ts +26 -26
- package/templates/nextjs/base/src/app/account/layout.tsx +9 -9
- package/templates/nextjs/base/src/app/account/page.tsx +122 -122
- package/templates/nextjs/base/src/app/api/auth/logout/route.ts +14 -14
- package/templates/nextjs/base/src/app/api/auth/me/route.ts +56 -56
- package/templates/nextjs/base/src/app/api/auth/oauth-callback/route.ts +59 -59
- package/templates/nextjs/base/src/app/api/auth/reset-callback/route.ts +41 -41
- package/templates/nextjs/base/src/app/api/auth/reset-password/route.ts +77 -77
- package/templates/nextjs/base/src/app/api/store/[...path]/route.ts +198 -198
- package/templates/nextjs/base/src/app/auth/callback/page.tsx +92 -92
- package/templates/nextjs/base/src/app/cart/layout.tsx +9 -9
- package/templates/nextjs/base/src/app/cart/page.tsx +204 -204
- package/templates/nextjs/base/src/app/checkout/layout.tsx +9 -9
- package/templates/nextjs/base/src/app/checkout/page.tsx +860 -860
- package/templates/nextjs/base/src/app/forgot-password/page.tsx +112 -112
- package/templates/nextjs/base/src/app/layout.tsx.ejs +75 -0
- package/templates/nextjs/base/src/app/login/layout.tsx +9 -9
- package/templates/nextjs/base/src/app/login/page.tsx +59 -59
- package/templates/nextjs/base/src/app/order-confirmation/layout.tsx +9 -9
- package/templates/nextjs/base/src/app/order-confirmation/page.tsx +254 -254
- package/templates/nextjs/base/src/app/products/[slug]/page.tsx +67 -67
- package/templates/nextjs/base/src/app/products/[slug]/product-client-section.tsx +486 -486
- package/templates/nextjs/base/src/app/products/layout.tsx +18 -18
- package/templates/nextjs/base/src/app/products/page.tsx +431 -431
- package/templates/nextjs/base/src/app/register/layout.tsx +9 -9
- package/templates/nextjs/base/src/app/register/page.tsx +65 -65
- package/templates/nextjs/base/src/app/reset-password/page.tsx +132 -132
- package/templates/nextjs/base/src/app/robots.ts +14 -14
- package/templates/nextjs/base/src/app/sitemap.ts +25 -25
- package/templates/nextjs/base/src/app/verify-email/page.tsx +258 -258
- package/templates/nextjs/base/src/components/account/address-book.tsx +432 -432
- package/templates/nextjs/base/src/components/account/order-history.tsx +350 -350
- package/templates/nextjs/base/src/components/auth/oauth-buttons.tsx +137 -137
- package/templates/nextjs/base/src/components/auth/register-form.tsx +232 -232
- package/templates/nextjs/base/src/components/cart/cart-bundle-offer.tsx +247 -111
- package/templates/nextjs/base/src/components/cart/cart-item.tsx +153 -153
- package/templates/nextjs/base/src/components/cart/cart-upgrade-banner.tsx +142 -142
- package/templates/nextjs/base/src/components/cart/free-shipping-bar.tsx +59 -59
- package/templates/nextjs/base/src/components/checkout/checkout-form.tsx +415 -415
- package/templates/nextjs/base/src/components/checkout/order-bump-card.tsx +243 -83
- package/templates/nextjs/base/src/components/checkout/payment-step.tsx +519 -519
- package/templates/nextjs/base/src/components/layout/footer.tsx +41 -41
- package/templates/nextjs/base/src/components/layout/header.tsx +336 -336
- package/templates/nextjs/base/src/components/layout/language-switcher.tsx.ejs +63 -0
- package/templates/nextjs/base/src/components/products/discount-badge.tsx +22 -22
- package/templates/nextjs/base/src/components/products/frequently-bought-together.tsx +202 -202
- package/templates/nextjs/base/src/components/products/product-card.tsx +218 -218
- package/templates/nextjs/base/src/components/products/recommendation-section.tsx +107 -107
- package/templates/nextjs/base/src/components/products/stock-badge.tsx +63 -63
- package/templates/nextjs/base/src/components/products/variant-selector.tsx +292 -292
- package/templates/nextjs/base/src/components/seo/product-json-ld.tsx +72 -72
- package/templates/nextjs/base/src/i18n.ts.ejs +21 -0
- package/templates/nextjs/base/src/lib/auth.ts +149 -149
- package/templates/nextjs/base/src/lib/brainerce.ts.ejs +9 -0
- package/templates/nextjs/base/src/lib/translations.ts.ejs +31 -0
- package/templates/nextjs/base/src/middleware.ts.ejs +81 -0
- package/templates/nextjs/base/src/providers/store-provider.tsx.ejs +41 -0
- package/templates/nextjs/base/src/lib/translations.ts +0 -11
- package/templates/nextjs/base/src/middleware.ts +0 -25
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ var require_package = __commonJS({
|
|
|
31
31
|
"package.json"(exports2, module2) {
|
|
32
32
|
module2.exports = {
|
|
33
33
|
name: "create-brainerce-store",
|
|
34
|
-
version: "1.
|
|
34
|
+
version: "1.19.0",
|
|
35
35
|
description: "Scaffold a production-ready e-commerce storefront connected to Brainerce",
|
|
36
36
|
bin: {
|
|
37
37
|
"create-brainerce-store": "dist/index.js"
|
|
@@ -289,6 +289,9 @@ async function scaffold(options) {
|
|
|
289
289
|
const direction = getDirection(options.language);
|
|
290
290
|
const fontConfig = getFontConfig(options.language);
|
|
291
291
|
const ogLocale = options.language === "he" ? "he_IL" : "en_US";
|
|
292
|
+
const isMultiLocale = options.i18n?.enabled === true && options.i18n.supportedLocales.length > 1;
|
|
293
|
+
const supportedLocales = options.i18n?.supportedLocales || [options.language];
|
|
294
|
+
const defaultLocale = options.i18n?.defaultLocale || options.language;
|
|
292
295
|
const templateVars = {
|
|
293
296
|
projectName: options.projectName,
|
|
294
297
|
connectionId: options.connectionId,
|
|
@@ -299,16 +302,32 @@ async function scaffold(options) {
|
|
|
299
302
|
fontImport: fontConfig.fontImport,
|
|
300
303
|
fontVariable: fontConfig.fontVariable,
|
|
301
304
|
ogLocale,
|
|
302
|
-
apiBaseUrl: "https://api.brainerce.com"
|
|
305
|
+
apiBaseUrl: "https://api.brainerce.com",
|
|
306
|
+
i18nEnabled: isMultiLocale,
|
|
307
|
+
supportedLocales: JSON.stringify(supportedLocales),
|
|
308
|
+
defaultLocale
|
|
303
309
|
};
|
|
304
310
|
await copyWithEjs(baseDir, targetDir, templateVars);
|
|
305
311
|
const messagesRoot = findMessagesDir(__dirname);
|
|
306
312
|
const targetMessages = import_path.default.join(targetDir, "messages");
|
|
307
313
|
await import_fs_extra.default.ensureDir(targetMessages);
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
314
|
+
if (isMultiLocale) {
|
|
315
|
+
for (const locale of supportedLocales) {
|
|
316
|
+
const srcFile = import_path.default.join(messagesRoot, `${locale}.json`);
|
|
317
|
+
if (await import_fs_extra.default.pathExists(srcFile)) {
|
|
318
|
+
await import_fs_extra.default.copy(srcFile, import_path.default.join(targetMessages, `${locale}.json`));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const defaultFile = import_path.default.join(targetMessages, `${defaultLocale}.json`);
|
|
322
|
+
if (!await import_fs_extra.default.pathExists(defaultFile)) {
|
|
323
|
+
await import_fs_extra.default.copy(import_path.default.join(messagesRoot, `${options.language}.json`), defaultFile);
|
|
324
|
+
}
|
|
325
|
+
} else {
|
|
326
|
+
await import_fs_extra.default.copy(
|
|
327
|
+
import_path.default.join(messagesRoot, `${options.language}.json`),
|
|
328
|
+
import_path.default.join(targetMessages, `${options.language}.json`)
|
|
329
|
+
);
|
|
330
|
+
}
|
|
312
331
|
if (await import_fs_extra.default.pathExists(themeDir)) {
|
|
313
332
|
const themeCss = import_path.default.join(themeDir, "globals.css");
|
|
314
333
|
if (await import_fs_extra.default.pathExists(themeCss)) {
|
|
@@ -392,7 +411,8 @@ async function fetchStoreInfo(connectionId, baseUrl = "https://api.brainerce.com
|
|
|
392
411
|
resolve({
|
|
393
412
|
name: json.name || json.storeName || "My Store",
|
|
394
413
|
currency: json.currency || "USD",
|
|
395
|
-
language: json.language || "en"
|
|
414
|
+
language: json.language || "en",
|
|
415
|
+
...json.i18n ? { i18n: json.i18n } : {}
|
|
396
416
|
});
|
|
397
417
|
} catch {
|
|
398
418
|
reject(new Error("Invalid response from API"));
|
|
@@ -530,8 +550,9 @@ program.name("create-brainerce-store").description("Scaffold a production-ready
|
|
|
530
550
|
let storeInfo;
|
|
531
551
|
try {
|
|
532
552
|
storeInfo = await fetchStoreInfo(connectionId);
|
|
553
|
+
const i18nStatus = storeInfo.i18n?.enabled && storeInfo.i18n.supportedLocales.length > 1 ? ` | i18n: ${storeInfo.i18n.supportedLocales.join(", ")}` : "";
|
|
533
554
|
spinner.succeed(
|
|
534
|
-
`Store: "${storeInfo.name}" | ${storeInfo.currency} | ${storeInfo.language}`
|
|
555
|
+
`Store: "${storeInfo.name}" | ${storeInfo.currency} | ${storeInfo.language}${i18nStatus}`
|
|
535
556
|
);
|
|
536
557
|
} catch (err) {
|
|
537
558
|
spinner.fail("Could not fetch store info");
|
|
@@ -552,7 +573,8 @@ program.name("create-brainerce-store").description("Scaffold a production-ready
|
|
|
552
573
|
theme,
|
|
553
574
|
storeName: storeInfo.name,
|
|
554
575
|
currency: storeInfo.currency,
|
|
555
|
-
language: language || storeInfo.language
|
|
576
|
+
language: language || storeInfo.language,
|
|
577
|
+
i18n: storeInfo.i18n
|
|
556
578
|
});
|
|
557
579
|
scaffoldSpinner.succeed(`Scaffolded into ./${projectName}`);
|
|
558
580
|
if (!skipGit) {
|