@faststore/cli 4.1.2 → 4.2.0-dev.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 +34 -24
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -8,12 +8,13 @@ import { spawnSync as spawnSync2 } from "child_process";
|
|
|
8
8
|
import { existsSync as existsSync6 } from "fs";
|
|
9
9
|
import fsExtra4 from "fs-extra";
|
|
10
10
|
import path6 from "path";
|
|
11
|
-
import { fileURLToPath as fileURLToPath2, pathToFileURL } from "url";
|
|
11
|
+
import { fileURLToPath as fileURLToPath2, pathToFileURL as pathToFileURL5 } from "url";
|
|
12
12
|
|
|
13
13
|
// src/utils/commands.ts
|
|
14
14
|
import fsExtra from "fs-extra";
|
|
15
15
|
import { spawnSync } from "child_process";
|
|
16
16
|
import { join } from "path";
|
|
17
|
+
import { pathToFileURL } from "url";
|
|
17
18
|
import resolvePackage from "resolve-pkg";
|
|
18
19
|
var { existsSync } = fsExtra;
|
|
19
20
|
async function getPreferredPackageManager() {
|
|
@@ -43,7 +44,7 @@ async function loadPackageJsonAt(at) {
|
|
|
43
44
|
if (location === false)
|
|
44
45
|
throw new Error(`Invalid searching of ${file} at ${at}`);
|
|
45
46
|
if (!existsSync(location)) return;
|
|
46
|
-
const content = await import(location, {
|
|
47
|
+
const content = await import(pathToFileURL(location).href, {
|
|
47
48
|
with: { type: "json" }
|
|
48
49
|
});
|
|
49
50
|
return content.default ?? content ?? {};
|
|
@@ -56,6 +57,7 @@ async function getDepPackageJSON(pkg) {
|
|
|
56
57
|
import chalk from "chalk";
|
|
57
58
|
import { existsSync as existsSync2 } from "fs";
|
|
58
59
|
import path2 from "path";
|
|
60
|
+
import { pathToFileURL as pathToFileURL2 } from "url";
|
|
59
61
|
|
|
60
62
|
// src/utils/directory.ts
|
|
61
63
|
import path from "path";
|
|
@@ -142,7 +144,7 @@ async function getDiscoveryConfig(basePath) {
|
|
|
142
144
|
for (const configPath of configPaths) {
|
|
143
145
|
if (existsSync2(configPath)) {
|
|
144
146
|
try {
|
|
145
|
-
const discoveryConfig = await import(configPath);
|
|
147
|
+
const discoveryConfig = await import(pathToFileURL2(configPath).href);
|
|
146
148
|
return discoveryConfig?.default ?? discoveryConfig;
|
|
147
149
|
} catch (error) {
|
|
148
150
|
logger.warn(
|
|
@@ -215,6 +217,7 @@ import chalk4 from "chalk";
|
|
|
215
217
|
import fsExtra3 from "fs-extra";
|
|
216
218
|
import path5 from "path";
|
|
217
219
|
import ora from "ora";
|
|
220
|
+
import { pathToFileURL as pathToFileURL4 } from "url";
|
|
218
221
|
|
|
219
222
|
// src/utils/createNextjsPages.ts
|
|
220
223
|
import fs from "fs";
|
|
@@ -420,6 +423,7 @@ async function installDependencies({
|
|
|
420
423
|
// src/utils/plugins.ts
|
|
421
424
|
import fsExtra2 from "fs-extra";
|
|
422
425
|
import path4 from "path";
|
|
426
|
+
import { pathToFileURL as pathToFileURL3 } from "url";
|
|
423
427
|
var { copySync, existsSync: existsSync4, mkdirSync, readdirSync, writeFileSync } = fsExtra2;
|
|
424
428
|
var PLUGIN_CONFIG_FILE = "plugin.config.js";
|
|
425
429
|
var sanitizePluginName = (pluginName, pascalCase = false) => {
|
|
@@ -450,7 +454,7 @@ var getPluginsList = async (basePath) => {
|
|
|
450
454
|
try {
|
|
451
455
|
const {
|
|
452
456
|
default: { plugins = [] }
|
|
453
|
-
} = await import(tmpStoreConfigFile);
|
|
457
|
+
} = await import(pathToFileURL3(tmpStoreConfigFile).href);
|
|
454
458
|
return plugins;
|
|
455
459
|
} catch (error) {
|
|
456
460
|
logger.error(`Could not load plugins from store config`);
|
|
@@ -527,7 +531,7 @@ var generatePluginPages = async (basePath, plugins) => {
|
|
|
527
531
|
plugins.forEach(async (plugin) => {
|
|
528
532
|
const pluginName = getPluginName(plugin);
|
|
529
533
|
const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE);
|
|
530
|
-
const { default: pluginConfig } = await import(pluginConfigPath);
|
|
534
|
+
const { default: pluginConfig } = await import(pathToFileURL3(pluginConfigPath).href);
|
|
531
535
|
const { pages: pagesCustom } = getPluginCustomConfig(plugin);
|
|
532
536
|
const pagesConfig = {
|
|
533
537
|
...pluginConfig.pages ?? {},
|
|
@@ -607,7 +611,9 @@ var addPluginsTheme = async (basePath, plugins) => {
|
|
|
607
611
|
(plugin) => existsSync4(
|
|
608
612
|
getPackagePath(getPluginName(plugin), "src", "themes", "index.scss")
|
|
609
613
|
)
|
|
610
|
-
).map(
|
|
614
|
+
).map(
|
|
615
|
+
(plugin) => `@use "${getPluginName(plugin)}/src/themes/index.scss" as *;`
|
|
616
|
+
).join("\n");
|
|
611
617
|
writeFileSync(tmpThemesPluginsFile, pluginImportsContent);
|
|
612
618
|
};
|
|
613
619
|
var getPluginAPIFileContent = (pluginName, apiName) => `
|
|
@@ -626,7 +632,7 @@ var generatePluginApis = async (basePath, plugins) => {
|
|
|
626
632
|
plugins.forEach(async (plugin) => {
|
|
627
633
|
const pluginName = getPluginName(plugin);
|
|
628
634
|
const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE);
|
|
629
|
-
const { default: pluginConfig } = await import(pluginConfigPath);
|
|
635
|
+
const { default: pluginConfig } = await import(pathToFileURL3(pluginConfigPath).href);
|
|
630
636
|
const { apis: apisCustom } = getPluginCustomConfig(plugin);
|
|
631
637
|
const apisConfig = {
|
|
632
638
|
...pluginConfig.apis ?? {},
|
|
@@ -784,9 +790,9 @@ async function copyCypressFiles(basePath) {
|
|
|
784
790
|
}
|
|
785
791
|
let userStoreConfig;
|
|
786
792
|
if (existsSync5(userStoreConfigFile)) {
|
|
787
|
-
userStoreConfig = (await import(path5.resolve(userStoreConfigFile)))?.default;
|
|
793
|
+
userStoreConfig = (await import(pathToFileURL4(path5.resolve(userStoreConfigFile)).href))?.default;
|
|
788
794
|
} else if (existsSync5(userLegacyStoreConfigFile)) {
|
|
789
|
-
userStoreConfig = (await import(path5.resolve(userLegacyStoreConfigFile)))?.default;
|
|
795
|
+
userStoreConfig = (await import(pathToFileURL4(path5.resolve(userLegacyStoreConfigFile)).href))?.default;
|
|
790
796
|
} else {
|
|
791
797
|
logger.info(
|
|
792
798
|
`${chalk4.blue(
|
|
@@ -851,9 +857,9 @@ async function createCmsWebhookUrlsJsonFile(basePath) {
|
|
|
851
857
|
} = withBasePath(basePath);
|
|
852
858
|
let userStoreConfig;
|
|
853
859
|
if (existsSync5(userStoreConfigFile)) {
|
|
854
|
-
userStoreConfig = (await import(path5.resolve(userStoreConfigFile)))?.default;
|
|
860
|
+
userStoreConfig = (await import(pathToFileURL4(path5.resolve(userStoreConfigFile)).href))?.default;
|
|
855
861
|
} else if (existsSync5(userLegacyStoreConfigFile)) {
|
|
856
|
-
userStoreConfig = (await import(path5.resolve(userLegacyStoreConfigFile)))?.default;
|
|
862
|
+
userStoreConfig = (await import(pathToFileURL4(path5.resolve(userLegacyStoreConfigFile)).href))?.default;
|
|
857
863
|
} else {
|
|
858
864
|
logger.info(
|
|
859
865
|
`${chalk4.blue(
|
|
@@ -882,7 +888,7 @@ async function copyTheme(basePath) {
|
|
|
882
888
|
} = withBasePath(basePath);
|
|
883
889
|
const storeConfigFile = existsSync5(userStoreConfigFile) && userStoreConfigFile || existsSync5(userLegacyStoreConfigFile) && userLegacyStoreConfigFile;
|
|
884
890
|
const userStoreConfigFilePath = storeConfigFile && path5.resolve(storeConfigFile);
|
|
885
|
-
const importedStoreConfig = userStoreConfigFilePath && await import(userStoreConfigFilePath);
|
|
891
|
+
const importedStoreConfig = userStoreConfigFilePath && await import(pathToFileURL4(userStoreConfigFilePath).href);
|
|
886
892
|
const storeConfig = userStoreConfigFilePath && (importedStoreConfig?.default || importedStoreConfig);
|
|
887
893
|
if (!storeConfig)
|
|
888
894
|
logger.info(
|
|
@@ -936,10 +942,10 @@ async function checkDependencies(basePath, packagesToCheck) {
|
|
|
936
942
|
const { coreDir, getRoot } = withBasePath(basePath);
|
|
937
943
|
const corePackageJsonPath = path5.join(coreDir, "package.json");
|
|
938
944
|
const rootPackageJsonPath = path5.join(getRoot(), "package.json");
|
|
939
|
-
const { default: corePackageJson } = await import(corePackageJsonPath, {
|
|
945
|
+
const { default: corePackageJson } = await import(pathToFileURL4(corePackageJsonPath).href, {
|
|
940
946
|
with: { type: "json" }
|
|
941
947
|
});
|
|
942
|
-
const { default: rootPackageJson } = await import(rootPackageJsonPath, {
|
|
948
|
+
const { default: rootPackageJson } = await import(pathToFileURL4(rootPackageJsonPath).href, {
|
|
943
949
|
with: { type: "json" }
|
|
944
950
|
});
|
|
945
951
|
packagesToCheck.forEach((packageName) => {
|
|
@@ -987,8 +993,8 @@ async function validateAndInstallMissingDependencies(basePath) {
|
|
|
987
993
|
if (!currentUserStoreConfigFile) {
|
|
988
994
|
return;
|
|
989
995
|
}
|
|
990
|
-
const { default: userStoreConfig } = await import(currentUserStoreConfigFile);
|
|
991
|
-
const { default: userPackageJson } = await import(path5.join(userDir, "package.json"), {
|
|
996
|
+
const { default: userStoreConfig } = await import(pathToFileURL4(currentUserStoreConfigFile).href);
|
|
997
|
+
const { default: userPackageJson } = await import(pathToFileURL4(path5.join(userDir, "package.json")).href, {
|
|
992
998
|
with: { type: "json" }
|
|
993
999
|
});
|
|
994
1000
|
const missingDependencies = [];
|
|
@@ -1040,7 +1046,7 @@ async function enableSearchSSR(basePath) {
|
|
|
1040
1046
|
if (!storeConfigPath) {
|
|
1041
1047
|
return;
|
|
1042
1048
|
}
|
|
1043
|
-
const { default: storeConfig } = await import(storeConfigPath);
|
|
1049
|
+
const { default: storeConfig } = await import(pathToFileURL4(storeConfigPath).href);
|
|
1044
1050
|
if (!storeConfig.experimental.enableSearchSSR) {
|
|
1045
1051
|
return;
|
|
1046
1052
|
}
|
|
@@ -1212,7 +1218,7 @@ async function checkDeps(basePath) {
|
|
|
1212
1218
|
);
|
|
1213
1219
|
}
|
|
1214
1220
|
try {
|
|
1215
|
-
const mod = await import(
|
|
1221
|
+
const mod = await import(pathToFileURL5(packageJsonPath).href, {
|
|
1216
1222
|
with: { type: "json" }
|
|
1217
1223
|
});
|
|
1218
1224
|
const pkg = mod.default ?? mod;
|
|
@@ -1248,10 +1254,11 @@ import { Args as Args2, Command as Command2, Flags as Flags2 } from "@oclif/core
|
|
|
1248
1254
|
import { spawn } from "child_process";
|
|
1249
1255
|
|
|
1250
1256
|
// src/utils/hcms.ts
|
|
1251
|
-
import path7 from "path";
|
|
1252
1257
|
import chalk6 from "chalk";
|
|
1258
|
+
import path7 from "path";
|
|
1253
1259
|
import { confirm } from "@inquirer/prompts";
|
|
1254
1260
|
import fsExtra5 from "fs-extra";
|
|
1261
|
+
import { pathToFileURL as pathToFileURL6 } from "url";
|
|
1255
1262
|
var { readFileSync: readFileSync2, existsSync: existsSync7, writeFileSync: writeFileSync3, mkdirSync: mkdirSync2 } = fsExtra5;
|
|
1256
1263
|
function splitCustomDefinitions(coreDefinitions, customDefinitions, primaryIdentifier) {
|
|
1257
1264
|
const coreDefinitionIdentifiers = new Set(
|
|
@@ -1316,7 +1323,7 @@ async function mergeCMSFile(fileName, basePath) {
|
|
|
1316
1323
|
getPackagePath,
|
|
1317
1324
|
userStoreConfigFile
|
|
1318
1325
|
} = withBasePath(basePath);
|
|
1319
|
-
const { default: userStoreConfig } = await import(path7.resolve(userStoreConfigFile));
|
|
1326
|
+
const { default: userStoreConfig } = await import(pathToFileURL6(path7.resolve(userStoreConfigFile)).href);
|
|
1320
1327
|
const cmsProjectName = userStoreConfig.contentSource?.project ?? "faststore";
|
|
1321
1328
|
const coreFilePath = path7.join(coreCMSDir, fileName);
|
|
1322
1329
|
const customFilePath = path7.join(userCMSDir, fileName);
|
|
@@ -1393,6 +1400,7 @@ async function mergeCMSFiles(basePath) {
|
|
|
1393
1400
|
|
|
1394
1401
|
// src/commands/cms-sync.ts
|
|
1395
1402
|
import path8 from "path";
|
|
1403
|
+
import { pathToFileURL as pathToFileURL7 } from "url";
|
|
1396
1404
|
var CmsSync = class _CmsSync extends Command2 {
|
|
1397
1405
|
static flags = {
|
|
1398
1406
|
["dry-run"]: Flags2.boolean({ char: "d" })
|
|
@@ -1407,7 +1415,7 @@ var CmsSync = class _CmsSync extends Command2 {
|
|
|
1407
1415
|
const { flags, args } = await this.parse(_CmsSync);
|
|
1408
1416
|
const basePath = getBasePath(args.path);
|
|
1409
1417
|
const { tmpDir, userStoreConfigFile } = withBasePath(basePath);
|
|
1410
|
-
const { default: userStoreConfig } = await import(path8.resolve(userStoreConfigFile));
|
|
1418
|
+
const { default: userStoreConfig } = await import(pathToFileURL7(path8.resolve(userStoreConfigFile)).href);
|
|
1411
1419
|
const cmsProjectName = userStoreConfig.contentSource?.project ?? "faststore";
|
|
1412
1420
|
await generate({ setup: true, basePath });
|
|
1413
1421
|
await mergeCMSFiles(basePath);
|
|
@@ -1973,9 +1981,10 @@ var Generate2 = class _Generate extends Command9 {
|
|
|
1973
1981
|
// src/commands/cache-graphql.ts
|
|
1974
1982
|
import { Args as Args10, Command as Command10, Flags as Flags4 } from "@oclif/core";
|
|
1975
1983
|
import chalk10 from "chalk";
|
|
1984
|
+
import fsExtra7 from "fs-extra";
|
|
1976
1985
|
import graphql from "graphql";
|
|
1977
1986
|
import path15 from "path";
|
|
1978
|
-
import
|
|
1987
|
+
import { pathToFileURL as pathToFileURL8 } from "url";
|
|
1979
1988
|
var { Kind: Kind2, OperationTypeNode, parse: parseGraphql } = graphql;
|
|
1980
1989
|
var persistedDocumentsName = "persisted-documents.json";
|
|
1981
1990
|
var configFileName2 = "discovery.config.default.js";
|
|
@@ -2034,7 +2043,7 @@ var CacheGraphql = class _CacheGraphql extends Command10 {
|
|
|
2034
2043
|
logger.info(
|
|
2035
2044
|
`${chalk10.blue("[Info]")} - Cached operations output: ${cachedOperationsPath}`
|
|
2036
2045
|
);
|
|
2037
|
-
const { default: persistedDocuments } = await import(persistedDocumentsPath, { with: { type: "json" } });
|
|
2046
|
+
const { default: persistedDocuments } = await import(pathToFileURL8(persistedDocumentsPath).href, { with: { type: "json" } });
|
|
2038
2047
|
const cachedQueries = getQueries(persistedDocuments);
|
|
2039
2048
|
saveCachedOperationsFile(
|
|
2040
2049
|
`${JSON.stringify(cachedQueries ?? [], null, 2)}
|
|
@@ -2115,6 +2124,7 @@ import fsExtra8 from "fs-extra";
|
|
|
2115
2124
|
import { existsSync as existsSync11 } from "fs";
|
|
2116
2125
|
import path16 from "path";
|
|
2117
2126
|
import { format } from "prettier";
|
|
2127
|
+
import { pathToFileURL as pathToFileURL9 } from "url";
|
|
2118
2128
|
var configFileName3 = "discovery.config.default.js";
|
|
2119
2129
|
var GenerateI18n = class _GenerateI18n extends Command11 {
|
|
2120
2130
|
static hidden = true;
|
|
@@ -2200,7 +2210,7 @@ var GenerateI18n = class _GenerateI18n extends Command11 {
|
|
|
2200
2210
|
if (fsExtra8.pathExistsSync(tmpDir))
|
|
2201
2211
|
logger.info(`${chalk11.blue("[Info]")} - .faststore Path at: ${tmpDir}`);
|
|
2202
2212
|
logger.info(`${chalk11.blue("[Info]")} - Config file location: ${configPath}`);
|
|
2203
|
-
const discoveryConfig = await import(configPath);
|
|
2213
|
+
const discoveryConfig = await import(pathToFileURL9(configPath).href);
|
|
2204
2214
|
const faststore = new FastStoreSDK({
|
|
2205
2215
|
account: VTEX_ACCOUNT,
|
|
2206
2216
|
appKey: FS_DISCOVERY_APP_KEY,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/build.ts","../src/utils/commands.ts","../src/utils/config.ts","../src/utils/directory.ts","../src/utils/logger.ts","../src/utils/deprecations.ts","../src/utils/generate.ts","../src/utils/createNextjsPages.ts","../src/utils/templates/myAccountPage.ts","../src/utils/runCommandSync.ts","../src/utils/dependencies.ts","../src/utils/plugins.ts","../src/commands/cms-sync.ts","../src/utils/hcms.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/generate.ts","../src/utils/file.ts","../src/utils/generate-types.ts","../src/commands/prepare.ts","../src/commands/start.ts","../src/commands/test.ts","../src/commands/generate-types.ts","../src/commands/cache-graphql.ts","../src/commands/generate-i18n.ts"],"sourcesContent":["export { run } from '@oclif/core'\n\nimport { default as Build } from './commands/build'\nimport { default as CmsSync } from './commands/cms-sync'\nimport { default as Create } from './commands/create'\nimport { default as Dev } from './commands/dev'\nimport { default as Generate } from './commands/generate'\nimport { default as Prepare } from './commands/prepare'\nimport { default as Serve } from './commands/start'\nimport { default as Test } from './commands/test'\nimport { default as GenerateTypes } from './commands/generate-types'\nimport { default as CacheGraphql } from './commands/cache-graphql'\nimport { default as GenerateI18n } from './commands/generate-i18n'\n\nexport const commands = {\n create: Create,\n prepare: Prepare,\n dev: Dev,\n build: Build,\n serve: Serve,\n 'cms-sync': CmsSync,\n test: Test,\n generate: Generate,\n 'generate-types': GenerateTypes,\n 'cache-graphql': CacheGraphql,\n 'generate-i18n': GenerateI18n,\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport { spawnSync } from 'child_process'\nimport { existsSync } from 'fs'\nimport fsExtra from 'fs-extra'\nimport path from 'path'\nimport { fileURLToPath, pathToFileURL } from 'url'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getDiscoveryConfig } from '../utils/config'\nimport { checkDeprecatedSecretFiles } from '../utils/deprecations'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { toggleProxyByLocalizationFlag } from '../utils/generate'\nimport { logger } from '../utils/logger'\n\nconst { copySync, moveSync, readdirSync, removeSync } = fsExtra\n\nexport default class Build extends Command {\n static args = {\n account: Args.string({\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n path: Args.string({\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n static flags = {\n ['no-verify']: Flags.boolean({\n description:\n 'Skips verification of faststore dependencies version string to prevent usage of packages outside npm registry.',\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(Build)\n\n const basePath = getBasePath(args.path)\n\n // Check for deprecated secret files\n checkDeprecatedSecretFiles(basePath)\n\n if (!flags['no-verify']) {\n const invalidPackages = await checkDeps(basePath)\n invalidPackages.forEach((pkg) =>\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Dependency ${pkg} has invalid version signature. Please use a semver like ^1.0.0 (check the official releases on https://github.com/vtex/faststore)`\n )\n )\n }\n\n const { tmpDir } = withBasePath(basePath)\n\n const packageManager = await getPreferredPackageManager()\n\n const binCli = path.join(\n fileURLToPath(\n import.meta.resolve('@faststore/cli/runner', import.meta.url)\n )\n )\n let scriptResult = spawnSync('node', [binCli, 'generate', basePath], {\n stdio: 'inherit',\n })\n\n if (scriptResult.error || scriptResult.status !== 0) {\n throw 'Error: Cant run generate' + (scriptResult.error?.message ?? '')\n }\n\n scriptResult = spawnSync('node', [binCli, 'cache-graphql', basePath], {\n stdio: 'inherit',\n })\n\n if (scriptResult.error || scriptResult.status !== 0) {\n throw (\n 'Error: Unable to run cache-graphql' +\n (scriptResult.error?.message ?? '')\n )\n }\n\n // generate-i18n will validate localization config and check if it's enabled\n scriptResult = spawnSync('node', [binCli, 'generate-i18n', basePath], {\n stdio: 'inherit',\n })\n\n if (scriptResult.error || scriptResult.status !== 0) {\n throw (\n 'Error: Unable to run generate-i18n' +\n (scriptResult.error?.message ?? '')\n )\n }\n\n const config = await getDiscoveryConfig(basePath)\n const localizationEnabled = config?.localization?.enabled === true\n toggleProxyByLocalizationFlag(basePath, localizationEnabled)\n\n scriptResult = spawnSync(`${packageManager} run build`, {\n shell: true,\n cwd: tmpDir,\n stdio: 'inherit',\n })\n\n if (scriptResult.status && scriptResult.status !== 0) {\n process.exit(scriptResult.status)\n }\n\n await normalizeStandaloneBuildDir(basePath)\n await copyResources(basePath)\n }\n}\n\nasync function copyResource(from: string, to: string) {\n try {\n if (existsSync(to)) {\n removeSync(to)\n }\n\n copySync(from, to)\n console.log(\n `${chalk.green('success')} - ${chalk.dim(from)} copied to ${chalk.dim(\n to\n )}`\n )\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nasync function normalizeStandaloneBuildDir(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n const isRunningFromMonorepo = process.cwd() !== basePath\n const prefix = isRunningFromMonorepo\n ? `${path.relative(process.cwd(), basePath).replace(/\\\\/g, '/')}/`\n : ''\n\n // Fix Next.js v13+ standalone build output directory\n if (existsSync(`${tmpDir}/.next/standalone/${prefix}.faststore`)) {\n const standaloneBuildFiles = readdirSync(\n `${tmpDir}/.next/standalone/${prefix}.faststore`\n )\n\n await Promise.all(\n standaloneBuildFiles.map((file) =>\n moveSync(\n `${tmpDir}/.next/standalone/${prefix}.faststore/${file}`,\n `${tmpDir}/.next/standalone/${file}`,\n { overwrite: true }\n )\n )\n )\n removeSync(`${tmpDir}/.next/standalone/${prefix}.faststore`)\n }\n}\n\nasync function copyResources(basePath: string) {\n const { tmpDir, userDir } = withBasePath(basePath)\n\n if (process.env.BUILD_CONTEXT === 'vercel') {\n const toDir = process.cwd()\n\n // Because of how copyResource works (delete the target directory if it exists),\n // if we're moving something to the same place it is it will break.\n const nextOutputDirectory = `${tmpDir}/.next`\n const expectedOutputDirectory = `${toDir}/.faststore/.next`\n if (nextOutputDirectory !== expectedOutputDirectory) {\n await copyResource(nextOutputDirectory, expectedOutputDirectory)\n }\n await copyResource(`${tmpDir}/public`, `${toDir}/public`)\n } else {\n await copyResource(`${tmpDir}/.next`, `${userDir}/.next`)\n await copyResource(\n `${tmpDir}/lighthouserc.js`,\n `${userDir}/lighthouserc.js`\n )\n await copyResource(`${tmpDir}/public`, `${userDir}/public`)\n }\n}\n\nasync function checkDeps(basePath: string): Promise<Array<string>> {\n const packageJsonPath = `${basePath}/package.json`\n if (!existsSync(packageJsonPath)) {\n console.log(\n `${chalk.yellow(\n 'warning'\n )} - package.json not found at ${packageJsonPath}`\n )\n }\n\n try {\n const mod = await import(pathToFileURL(packageJsonPath).href, {\n with: { type: 'json' },\n })\n const pkg = (mod.default ?? mod) as {\n devDependencies?: Record<string, string>\n dependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n }\n const {\n devDependencies = {},\n dependencies = {},\n peerDependencies = {},\n } = pkg\n\n const allDeps: Record<string, string> = Object.assign(\n {},\n peerDependencies,\n devDependencies,\n dependencies\n )\n\n const invalidPackages: Array<string> = []\n\n Object.entries(allDeps).forEach(([pkg, version]) => {\n if (/^@faststore\\/.+/i.test(pkg) === false) return\n\n if (version && /^(http|https|git):.+/.test(version) === true) {\n invalidPackages.push(pkg)\n }\n })\n\n return invalidPackages\n } catch (err) {\n console.log(\n `${chalk.yellow('warning')} - unable to check @faststore dependencies: ${err}`\n )\n\n return []\n }\n}\n","import fsExtra from 'fs-extra'\nimport { spawnSync } from 'node:child_process'\nimport { join } from 'node:path'\nimport resolvePackage from 'resolve-pkg'\n\nconst { existsSync } = fsExtra\n\n// Retrieves the package manager based on the developer lockfile, using `ni`.\nexport async function getPreferredPackageManager() {\n let agent = 'yarn' // Default to Yarn\n const binNA = join(\n await getPackageRootDir('@antfu/ni'),\n (await getDepPackageJSON('@antfu/ni'))?.bin?.['na'] ?? ''\n )\n\n if (!binNA || fsExtra.existsSync(binNA) == false) return agent\n\n agent = spawnSync('node', [binNA, '?'], { encoding: 'utf-8' })?.stdout.trim()\n\n return agent\n}\n\nexport async function getPackageRootDir(\n pkg: string,\n cwd: string | undefined = process.cwd(),\n depth = 30\n) {\n let pkgPath = resolvePackage(pkg, { cwd })\n\n if (!pkgPath) throw new Error(`Couldn't resolve package ${pkg}`)\n\n let pkgJson = await loadPackageJsonAt(pkgPath)\n while (pkgJson?.name !== pkg && --depth > 0) {\n pkgPath = join(pkgPath, '..')\n pkgJson = await loadPackageJsonAt(join(pkgPath, '..'))\n }\n\n if (pkgJson?.name !== pkg)\n throw new Error(`Maximum depth search for package ${pkg} root exceed`)\n\n return pkgPath\n}\n\nasync function loadPackageJsonAt(at?: string): Promise<\n | undefined\n | (Record<string, unknown> & {\n name: string\n dependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n bin?: Record<string, string>\n })\n> {\n const file = 'package.json',\n location = (at?.endsWith(file) && at) || (at && join(at, file)) || false\n\n if (location === false)\n throw new Error(`Invalid searching of ${file} at ${at}`)\n\n if (!existsSync(location)) return\n\n const content = await import(location, {\n with: { type: 'json' },\n })\n\n return content.default ?? content ?? {}\n}\n\nexport async function getDepPackageJSON(pkg: string) {\n return await loadPackageJsonAt(await getPackageRootDir(pkg))\n}\n","import chalk from 'chalk'\nimport { existsSync } from 'fs'\nimport path from 'path'\n\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\n\nconst configFileName = 'discovery.config.js'\n\n/**\n * Partial type for discovery config with only the properties used by this module\n */\ntype DiscoveryConfigSubset = {\n localization?: {\n enabled?: boolean\n }\n contentSource?: {\n type?: string\n }\n}\n\n/**\n * Reads and returns the discovery config from tmpDir or basePath.\n *\n * @param basePath - The base path where the FastStore is located\n * @returns Promise<DiscoveryConfigSubset | null> - The config object or null if not found\n */\nexport async function getDiscoveryConfig(\n basePath: string\n): Promise<DiscoveryConfigSubset | null> {\n const { tmpDir } = withBasePath(basePath)\n const configPaths = [\n path.join(tmpDir, configFileName),\n path.join(basePath, configFileName),\n ]\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n try {\n const discoveryConfig = await import(configPath)\n return discoveryConfig?.default ?? discoveryConfig\n } catch (error) {\n logger.warn(\n `${chalk.yellow('warning')} - Could not read config file: ${configPath}.`\n )\n }\n }\n }\n\n return null\n}\n\n/**\n * Checks if localization feature is enabled in the discovery config.\n *\n * @param config - The discovery config object\n * @returns boolean - true if localization.enabled === true, false otherwise\n */\nfunction isLocalizationEnabled(config: DiscoveryConfigSubset): boolean {\n return config?.localization?.enabled === true\n}\n\n/**\n * Validates if contentSource is set to \"CP\" when localization is enabled.\n * Exits the process with an error message if validation fails.\n *\n * @param config - The discovery config object\n */\nfunction validateContentSourceForLocalization(\n config: DiscoveryConfigSubset\n): void {\n if (!isLocalizationEnabled(config)) {\n return\n }\n\n const currentContentSourceType = config?.contentSource?.type?.toUpperCase()\n\n if (currentContentSourceType !== 'CP') {\n logger.error(\n `\\n${chalk.red('[Error]')} - Localization is enabled but contentSource is set to \"${currentContentSourceType}\".\\n\\n` +\n `${chalk.cyan('Required Action:')}\\n` +\n `Update your ${chalk.bold('discovery.config.js')} file:\\n\\n` +\n ` contentSource: {\\n` +\n ` type: ${chalk.green('\"CP\"')}\\n` +\n ` },\\n\\n` +\n `${chalk.dim('When localization is enabled, Content Platform (CP) is required.')}\\n`\n )\n\n process.exit(1)\n }\n}\n\n/**\n * Checks localization status and validates configuration.\n * Reads the config file once and performs both checks.\n *\n * @param basePath - The base path where the FastStore is located\n * @returns Promise<boolean> - true if localization is enabled and valid, false otherwise\n */\nexport async function checkAndValidateLocalization(\n basePath: string\n): Promise<boolean> {\n const config = await getDiscoveryConfig(basePath)\n\n // If we can't read the config, default to false (backward compatibility)\n if (!config) {\n return false\n }\n\n validateContentSourceForLocalization(config)\n\n return isLocalizationEnabled(config)\n}\n","import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport const getBasePath = (basePath?: string) => {\n if (basePath) {\n return path.resolve(basePath)\n }\n\n return process.cwd()\n}\n\nexport const withBasePath = (basepath: string) => {\n const tmpFolderName = '.faststore'\n\n // The basepath is where the discovery code is. It's either . or the path configured on faststore.json\n const getRoot = () => basepath\n\n /*\n * This will loop from the basepath until the process.cwd() looking for node_modules/@faststore/core\n *\n * If it reaches process.cwd() (or /, as a safeguard), without finding it, it will throw an exception\n */\n const getCorePackagePath = () =>\n path.dirname(\n fileURLToPath(import.meta.resolve('@faststore/core', import.meta.url))\n )\n\n const customizationsDir = getRoot()\n const tmpDir = path.join(getRoot(), tmpFolderName)\n const userSrcDir = path.join(customizationsDir, 'src')\n const getPackagePath = (...packagePath: string[]) =>\n path.join(customizationsDir, 'node_modules', ...packagePath)\n\n return {\n getRoot,\n getPackagePath,\n userDir: customizationsDir,\n userSrcDir,\n userThemesFileDir: path.join(userSrcDir, 'themes'),\n userCMSDir: path.join(customizationsDir, 'cms', 'faststore'),\n userLegacyStoreConfigFile: path.join(\n customizationsDir,\n 'faststore.config.js'\n ),\n userStoreConfigFile: path.join(customizationsDir, 'discovery.config.js'),\n\n tmpSeoConfig: path.join(tmpDir, 'next-seo.config.ts'),\n tmpFolderName,\n tmpDir,\n tmpCustomizationsSrcDir: path.join(tmpDir, 'src', 'customizations', 'src'),\n tmpThemesCustomizationsFile: path.join(\n tmpDir,\n 'src',\n 'customizations',\n 'src',\n 'themes',\n 'index.scss'\n ),\n tmpThemesPluginsFile: path.join(tmpDir, 'src', 'plugins', 'index.scss'),\n tmpCMSDir: (projectName = 'faststore') =>\n path.join(tmpDir, 'cms', projectName),\n tmpCMSWebhookUrlsFile: path.join(tmpDir, 'cms-webhook-urls.json'),\n tmpPagesDir: path.join(tmpDir, 'src', 'pages'),\n tmpApiDir: path.join(tmpDir, 'src', 'pages', 'api'),\n tmpPluginsDir: path.join(tmpDir, 'src', 'plugins'),\n tmpStoreConfigFile: path.join(\n tmpDir,\n 'src',\n 'customizations',\n 'discovery.config.js'\n ),\n\n coreDir: getCorePackagePath(),\n coreCMSDir: path.join(getCorePackagePath(), 'cms', 'faststore'),\n }\n}\n","export const logger = new Proxy(console, {\n get(target, prop: keyof Console) {\n if (prop === 'log') {\n return (...args: any[]) => {\n if (process.env.DISCOVERY_DEBUG === 'true') {\n target.log(...args)\n }\n }\n }\n return target[prop]\n },\n})\n","import { existsSync } from 'fs'\nimport chalk from 'chalk'\nimport { logger } from './logger'\n\n/**\n * Checks for the presence of deprecated secret files and logs a warning if found.\n *\n * @param basePath The base path where to look for the secret files\n */\nexport function checkDeprecatedSecretFiles(basePath: string) {\n const secretsFilePath = `${basePath}/secrets.hidden.json`\n const vtexEnvFilePath = `${basePath}/vtex.env`\n\n const secretsFileExists = existsSync(secretsFilePath)\n const vtexEnvFileExists = existsSync(vtexEnvFilePath)\n\n if (secretsFileExists || vtexEnvFileExists) {\n const filesFound = [\n secretsFileExists ? 'secrets.hidden.json' : null,\n vtexEnvFileExists ? 'vtex.env' : null,\n ]\n .filter(Boolean)\n .join(' and ')\n\n logger.warn(\n `${chalk.yellow('warning')} - Deprecated secret files detected: ${chalk.bold(filesFound)}\\n` +\n `Note: 'vtex.env' should only be used for local development and not in production.\\n` +\n `For production environments, please configure your secrets directly in the FastStore WebOps Settings page.`\n )\n logger.log('') // Add empty line for better readability\n }\n}\n","import chalk from 'chalk'\nimport fsExtra from 'fs-extra'\n\nimport path from 'path'\n\nimport ora from 'ora'\n\nimport { createNextJsPages } from './createNextjsPages'\nimport { installDependencies } from './dependencies'\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\nimport { installPlugins } from './plugins'\n\nconst {\n copyFileSync,\n copySync,\n existsSync,\n mkdirsSync,\n moveSync,\n readFileSync,\n readdirSync,\n removeSync,\n writeFileSync,\n writeJsonSync,\n} = fsExtra\ninterface GenerateOptions {\n setup?: boolean\n basePath: string\n}\n\n// package.json is copied manually after filtering its content\nconst ignorePaths = [\n 'package.json',\n 'node_modules',\n 'cypress.config.ts',\n 'base.jsonc', // CP special file, it must not be copied to the merchants' temp dir\n]\n\nfunction createTmpFolder(basePath: string) {\n const { tmpDir, tmpFolderName } = withBasePath(basePath)\n\n try {\n if (existsSync(tmpDir)) {\n removeSync(tmpDir)\n }\n\n mkdirsSync(tmpDir)\n logger.log(\n `${chalk.green('success')} - Temporary folder ${chalk.dim(\n tmpFolderName\n )} created`\n )\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\n/**\n * Prevents imports from @faststore/core from randomly conflicting\n * where sometimes the package.json from the .faststore folder\n * took precedence over @faststore/core's package.json.\n */\nfunction filterAndCopyPackageJson(basePath: string) {\n const { coreDir, tmpDir } = withBasePath(basePath)\n\n const { exports: _, ...filteredFileContent } = JSON.parse(\n readFileSync(path.join(coreDir, 'package.json'), 'utf8')\n )\n\n filteredFileContent.name = 'dot-faststore'\n filteredFileContent.scripts = {\n ...filteredFileContent.scripts,\n generate: 'faststore generate',\n build: 'next build --webpack',\n serve: 'next serve',\n dev: 'next dev --webpack',\n 'dev-only': 'next dev --webpack',\n predev: 'na run partytown',\n prebuild: 'na run partytown',\n }\n\n writeJsonSync(path.join(tmpDir, 'package.json'), filteredFileContent, {\n spaces: 2,\n })\n}\n\n// Temporary array of strict rules enabled so far.\nconst TS_CONFIG_STRICT_RULES_ENABLED = ['noImplicitAny'] as const\n\n/**\n * Modify TypeScript compilation settings (tsconfig.json) to disable specific strict\n * type checking rules when files are moved to the .faststore folder.\n * TODO: The idea is to change the strict to false when all strict rules are migrated.\n */\nfunction disableTsConfigStrictRules(basePath: string) {\n const { coreDir, tmpDir } = withBasePath(basePath)\n\n const coreTsConfigPath = path.join(coreDir, 'tsconfig.json')\n\n const coreTsConfigFile = readFileSync(coreTsConfigPath, 'utf8')\n const tsConfig = JSON.parse(coreTsConfigFile)\n\n TS_CONFIG_STRICT_RULES_ENABLED.forEach((strictRule) => {\n tsConfig.compilerOptions[strictRule] = false\n })\n\n writeJsonSync(path.join(tmpDir, 'tsconfig.json'), tsConfig, {\n spaces: 2,\n })\n}\n\nfunction copyCoreFiles(basePath: string) {\n const { coreDir, tmpDir } = withBasePath(basePath)\n\n try {\n copySync(coreDir, tmpDir, {\n dereference: true,\n filter(src) {\n const fileOrDirName = path.basename(src)\n const shouldCopy = fileOrDirName\n ? !ignorePaths.includes(fileOrDirName)\n : true\n\n return shouldCopy\n },\n })\n\n filterAndCopyPackageJson(basePath)\n disableTsConfigStrictRules(basePath)\n\n logger.log(`${chalk.green('success')} - Core files copied`)\n } catch (e) {\n logger.error(e)\n }\n}\n\nfunction copyPublicFiles(basePath: string) {\n const { userDir, tmpDir } = withBasePath(basePath)\n\n const allowList = ['json', 'txt', 'xml', 'ico', 'public', 'svg']\n try {\n if (existsSync(`${userDir}/public`)) {\n copySync(`${userDir}/public`, `${tmpDir}/public`, {\n dereference: true,\n overwrite: true,\n filter: (src) => {\n const allow = allowList.some((ext) => src.endsWith(ext))\n\n return allow\n },\n })\n logger.log(`${chalk.green('success')} - Public files copied`)\n }\n } catch (e) {\n logger.error(e)\n }\n}\n\nasync function copyCypressFiles(basePath: string) {\n const { userDir, userStoreConfigFile, userLegacyStoreConfigFile, tmpDir } =\n withBasePath(basePath)\n\n try {\n // Cypress 9.x config file\n if (existsSync(`${userDir}/cypress.json`)) {\n copySync(`${userDir}/cypress.json`, `${tmpDir}/cypress.json`, {\n dereference: true,\n })\n }\n\n // Cypress 12.x config file\n if (existsSync(`${userDir}/cypress.config.ts`)) {\n copySync(`${userDir}/cypress.config.ts`, `${tmpDir}/cypress.config.ts`, {\n dereference: true,\n })\n }\n\n let userStoreConfig\n\n if (existsSync(userStoreConfigFile)) {\n userStoreConfig = (await import(path.resolve(userStoreConfigFile)))\n ?.default\n } else if (existsSync(userLegacyStoreConfigFile)) {\n userStoreConfig = (await import(path.resolve(userLegacyStoreConfigFile)))\n ?.default\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n // Copy custom Cypress folder and files\n if (\n existsSync(`${userDir}/cypress`) &&\n userStoreConfig?.experimental?.enableCypressExtension\n ) {\n copySync(`${userDir}/cypress`, `${tmpDir}/cypress`, {\n overwrite: true,\n dereference: true,\n })\n\n logger.log(`${chalk.green('success')} - Cypress test files copied`)\n }\n\n // Create default Cypress 12.x (or superior) support file\n if (userStoreConfig?.experimental?.cypressVersion > 9) {\n copySync(\n `${tmpDir}/cypress/support/index.js`,\n `${tmpDir}/cypress/support/e2e.js`,\n { overwrite: false }\n )\n }\n } catch (e) {\n logger.error(e)\n }\n}\n\nfunction copyUserStarterToCustomizations(basePath: string) {\n const {\n userSrcDir,\n tmpCustomizationsSrcDir,\n userLegacyStoreConfigFile,\n userStoreConfigFile,\n tmpStoreConfigFile,\n } = withBasePath(basePath)\n\n try {\n if (existsSync(userSrcDir) && readdirSync(userSrcDir).length > 0) {\n copySync(userSrcDir, tmpCustomizationsSrcDir, { dereference: true })\n createNextJsPages(basePath)\n }\n\n if (existsSync(userStoreConfigFile)) {\n copySync(userStoreConfigFile, tmpStoreConfigFile, { dereference: true })\n } else if (existsSync(userLegacyStoreConfigFile)) {\n copySync(userLegacyStoreConfigFile, tmpStoreConfigFile, {\n dereference: true,\n })\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n logger.log(`${chalk.green('success')} - Starter files copied`)\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nasync function createCmsWebhookUrlsJsonFile(basePath: string) {\n const {\n userStoreConfigFile,\n userLegacyStoreConfigFile,\n tmpCMSWebhookUrlsFile,\n } = withBasePath(basePath)\n let userStoreConfig\n\n if (existsSync(userStoreConfigFile)) {\n userStoreConfig = (await import(path.resolve(userStoreConfigFile)))?.default\n } else if (existsSync(userLegacyStoreConfigFile)) {\n userStoreConfig = (await import(path.resolve(userLegacyStoreConfigFile)))\n ?.default\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n if (\n userStoreConfig?.vtexHeadlessCms &&\n userStoreConfig.vtexHeadlessCms?.webhookUrls\n ) {\n const { webhookUrls } = userStoreConfig?.vtexHeadlessCms\n\n try {\n writeJsonSync(tmpCMSWebhookUrlsFile, { urls: webhookUrls }, { spaces: 2 })\n logger.log(`${chalk.green('success')} - CMS webhook URLs file created`)\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n } else {\n logger.info(`${chalk.blue('info')} - No CMS webhook URLs were provided`)\n }\n}\n\nasync function copyTheme(basePath: string) {\n const {\n userStoreConfigFile,\n userThemesFileDir,\n tmpThemesCustomizationsFile,\n userLegacyStoreConfigFile,\n } = withBasePath(basePath)\n\n const storeConfigFile =\n (existsSync(userStoreConfigFile) && userStoreConfigFile) ||\n (existsSync(userLegacyStoreConfigFile) && userLegacyStoreConfigFile)\n\n const userStoreConfigFilePath =\n storeConfigFile && path.resolve(storeConfigFile)\n const importedStoreConfig =\n userStoreConfigFilePath && (await import(userStoreConfigFilePath))\n const storeConfig =\n userStoreConfigFilePath &&\n (importedStoreConfig?.default || importedStoreConfig)\n\n if (!storeConfig)\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n\n if (storeConfig.theme) {\n const customTheme = path.join(\n userThemesFileDir,\n `${storeConfig.theme}.scss`\n )\n if (existsSync(customTheme)) {\n try {\n copyFileSync(customTheme, tmpThemesCustomizationsFile)\n logger.log(\n `${chalk.green('success')} - ${\n storeConfig.theme\n } theme has been applied`\n )\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n } else {\n logger.info(\n `${chalk.blue('info')} - The ${\n storeConfig.theme\n } theme was added to the config file but the ${\n storeConfig.theme\n }.scss file does not exist in the themes folder. Read more: https://developers.vtex.com/docs/guides/faststore/themes-overview`\n )\n }\n } else if (\n existsSync(userThemesFileDir) &&\n readdirSync(userThemesFileDir).length > 0\n ) {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - The theme needs to be added to the config file to be applied. Read more: https://www.faststore.dev/docs/themes/overview`\n )\n }\n}\n\nfunction updateBuildTime(basePath: string) {\n try {\n const { tmpSeoConfig } = withBasePath(basePath)\n let config = readFileSync(tmpSeoConfig, 'utf8')\n const newBuildTime = new Date().toISOString()\n\n config = config.replace(\n /const buildTime = .*?;/,\n `const buildTime = '${newBuildTime}';`\n )\n\n writeFileSync(tmpSeoConfig, config)\n\n logger.log(`${chalk.green('success')} - Build time updated`, newBuildTime)\n } catch (error) {\n logger.error(`${chalk.red('error')} - Updating build time:`, error)\n }\n}\n\nasync function checkDependencies(basePath: string, packagesToCheck: string[]) {\n const { coreDir, getRoot } = withBasePath(basePath)\n\n const corePackageJsonPath = path.join(coreDir, 'package.json')\n const rootPackageJsonPath = path.join(getRoot(), 'package.json')\n\n const { default: corePackageJson } = await import(corePackageJsonPath, {\n with: { type: 'json' },\n })\n const { default: rootPackageJson } = await import(rootPackageJsonPath, {\n with: { type: 'json' },\n })\n\n packagesToCheck.forEach((packageName) => {\n const coreVersion =\n corePackageJson.devDependencies[packageName] ||\n corePackageJson.dependencies[packageName]\n const rootVersion =\n rootPackageJson.devDependencies[packageName] ||\n rootPackageJson.dependencies[packageName]\n\n if (!coreVersion || !rootVersion) {\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Package ${packageName} not found in both core or root dependencies.`\n )\n } else if (coreVersion !== rootVersion) {\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Version mismatch detected for ${packageName}.\n Core: ${coreVersion}, Customization: ${rootVersion}. Please align both versions to prevent issues`\n )\n }\n })\n}\n\nfunction updateNextConfig(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n\n const nextConfigPath = path.join(tmpDir, 'next.config.js')\n\n let nextConfigData = String(readFileSync(nextConfigPath))\n nextConfigData = nextConfigData.replace(\n /outputFileTracingRoot\\:\\s+(.*),/,\n `outputFileTracingRoot: '${process.cwd()}',`\n )\n\n writeFileSync(nextConfigPath, nextConfigData)\n}\n\n// returns new (discovery.config.js) or legacy (faststore.config.js) store config file\nfunction getCurrentUserStoreConfigFile(basePath: string) {\n const { userStoreConfigFile, userLegacyStoreConfigFile } =\n withBasePath(basePath)\n\n if (existsSync(userStoreConfigFile)) {\n return userStoreConfigFile\n }\n\n if (existsSync(userLegacyStoreConfigFile)) {\n return userLegacyStoreConfigFile\n }\n\n return null\n}\n\nasync function validateAndInstallMissingDependencies(basePath: string) {\n const { userDir } = withBasePath(basePath)\n\n const currentUserStoreConfigFile = getCurrentUserStoreConfigFile(basePath)\n\n if (!currentUserStoreConfigFile) {\n return\n }\n\n const { default: userStoreConfig } = await import(currentUserStoreConfigFile)\n const { default: userPackageJson } = await import(\n path.join(userDir, 'package.json'),\n {\n with: { type: 'json' },\n }\n )\n\n const missingDependencies: Array<{\n feature: string\n dependencies: string[]\n }> = []\n\n if (userStoreConfig?.experimental?.preact) {\n missingDependencies.push({\n feature: 'Preact',\n dependencies: ['preact@10.23.1', 'preact-render-to-string@6.5.8'],\n })\n }\n\n missingDependencies.forEach(async ({ feature, dependencies }) => {\n const dependenciesToInstall = dependencies.filter((dependency) => {\n const dependencyName = dependency.split('@')[0]\n return !userPackageJson.dependencies[dependencyName]\n })\n\n if (dependenciesToInstall.length > 0) {\n const spinner = ora(\n `Installing ${feature} missing dependencies\\n`\n ).start()\n\n await installDependencies({\n dependencies: dependenciesToInstall,\n cwd: userDir,\n errorMessage: `failed to install ${feature} dependencies`,\n })\n\n spinner.stop()\n }\n })\n}\n\nconst DISABLED_PROXY_FILENAME = 'proxy__DISABLED.ts'\n\n/**\n * Toggle proxy based on localization feature flag (localization.enabled) in discovery config.\n * When flag is off: renames proxy.ts → proxy__DISABLED.ts so Next.js does not run it.\n * When flag is on: renames proxy__DISABLED.ts → proxy.ts so Next.js runs it.\n */\nexport function toggleProxyByLocalizationFlag(\n basePath: string,\n localizationEnabled: boolean\n): void {\n try {\n const { tmpDir } = withBasePath(basePath)\n const proxyPath = path.join(tmpDir, 'src', 'proxy.ts')\n const disabledPath = path.join(tmpDir, 'src', DISABLED_PROXY_FILENAME)\n\n const shouldEnableProxy = existsSync(disabledPath) && !existsSync(proxyPath)\n const shouldDisableProxy = existsSync(proxyPath)\n\n if (localizationEnabled && shouldEnableProxy) {\n moveSync(disabledPath, proxyPath)\n } else if (!localizationEnabled && shouldDisableProxy) {\n moveSync(proxyPath, disabledPath)\n }\n } catch (error) {\n logger.error(error)\n throw error\n }\n}\n\nasync function enableSearchSSR(basePath: string) {\n const storeConfigPath = getCurrentUserStoreConfigFile(basePath)\n\n if (!storeConfigPath) {\n return\n }\n const { default: storeConfig } = await import(storeConfigPath)\n if (!storeConfig.experimental.enableSearchSSR) {\n return\n }\n\n const { tmpDir } = withBasePath(basePath)\n const searchPagePath = path.join(tmpDir, 'src', 'pages', 's.tsx')\n const searchPageData = String(readFileSync(searchPagePath))\n\n const searchPageWithSSR = searchPageData.replaceAll(\n 'getStaticProps',\n 'getServerSideProps'\n )\n\n writeFileSync(searchPagePath, searchPageWithSSR)\n}\n\nexport async function generate(options: GenerateOptions) {\n const { basePath, setup = false } = options\n\n let setupPromise: Promise<unknown> | null = null\n\n await validateAndInstallMissingDependencies(basePath)\n\n if (setup) {\n setupPromise = Promise.all([\n createTmpFolder(basePath),\n copyCoreFiles(basePath),\n copyCypressFiles(basePath),\n copyPublicFiles(basePath),\n updateNextConfig(basePath),\n ])\n }\n\n await Promise.all([\n setupPromise,\n checkDependencies(basePath, ['typescript']),\n enableSearchSSR(basePath),\n updateBuildTime(basePath),\n copyUserStarterToCustomizations(basePath),\n copyTheme(basePath),\n createCmsWebhookUrlsJsonFile(basePath),\n installPlugins(basePath),\n ])\n}\n","import fs from 'fs'\nimport path from 'path'\n\nimport { withBasePath } from './directory'\nimport { myAccountPageTemplate } from './templates/myAccountPage'\n\nconst ALLOWED_PREFIX_PAGES = ['/pvt/account']\n\ntype CreateExternalPagesArgs = {\n customizationPagesDir: string\n corePagesDir: string\n baseCustomizationPagesDir: string\n}\n\nconst createExternalPages = ({\n customizationPagesDir,\n corePagesDir,\n baseCustomizationPagesDir,\n}: CreateExternalPagesArgs) => {\n fs.readdirSync(customizationPagesDir).forEach((file) => {\n const filePath = path.join(customizationPagesDir, file)\n const destinationPath = path.join(corePagesDir, file)\n if (fs.statSync(filePath).isDirectory()) {\n if (!fs.existsSync(destinationPath)) {\n fs.mkdirSync(destinationPath, { recursive: true })\n }\n return createExternalPages({\n customizationPagesDir: filePath,\n corePagesDir: destinationPath,\n baseCustomizationPagesDir,\n })\n }\n\n const isReactFile = filePath.endsWith('.tsx')\n\n /* Checks if the destination path does not exist as a file or as a folder containing an \"index.tsx\" file.\n * This ensures that the path is available before proceeding with file creation or other operations.\n */\n const isDestinationAvailable =\n !fs.existsSync(destinationPath) &&\n !fs.existsSync(\n path.join(destinationPath.replace('.tsx', ''), 'index.tsx')\n )\n\n if (isReactFile && isDestinationAvailable) {\n const externalPagePath = `src/customizations/src/pages${filePath.replace(baseCustomizationPagesDir, '').replace('.tsx', '')}`\n const content = myAccountPageTemplate(externalPagePath)\n fs.writeFileSync(destinationPath, content)\n }\n })\n}\n\nfunction isAllowedPrefixPage(file: string) {\n return ALLOWED_PREFIX_PAGES.some((prefix) => file.startsWith(prefix))\n}\n\nexport function createNextJsPages(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n\n const corePagesDir = path.join(tmpDir, 'src/pages')\n const customizationPagesDir = path.join(\n tmpDir,\n 'src/customizations/src/pages'\n )\n\n if (!fs.existsSync(customizationPagesDir)) {\n // If the customization pages directory doesn't exist, we don't need to create any pages\n // and we can return early.\n return\n }\n\n const allPagesAreAllowed = ({\n basePath,\n dirPath,\n }: { basePath: string; dirPath: string }): boolean => {\n const items = fs.readdirSync(dirPath, { withFileTypes: true })\n\n return items.every((item) => {\n const itemPath = path.join(dirPath, item.name)\n\n if (item.isDirectory()) {\n return allPagesAreAllowed({ basePath, dirPath: itemPath })\n }\n\n if (!item.isFile()) {\n return false // Reject anything that is not a file (symlinks, sockets, etc.)\n }\n\n const isNextPage = /\\.(js|jsx|ts|tsx)$/.test(item.name)\n if (!isNextPage) {\n return false // Reject files that are not Next.js pages\n }\n\n // For Next.js page files, check if they match allowed prefixes\n const relativePath = path.relative(basePath, itemPath)\n const normalizedPath =\n '/' + relativePath.replace(/\\\\/g, '/').replace(/\\.(js|jsx|ts|tsx)$/, '')\n\n return isAllowedPrefixPage(normalizedPath)\n })\n }\n\n const pagesAreAllowed = allPagesAreAllowed({\n basePath: customizationPagesDir,\n dirPath: customizationPagesDir,\n })\n\n if (!pagesAreAllowed) {\n throw new Error(\n `Only these prefix pages: (${ALLOWED_PREFIX_PAGES.join(', ')}) are allowed`\n )\n }\n\n createExternalPages({\n customizationPagesDir,\n corePagesDir,\n baseCustomizationPagesDir: customizationPagesDir,\n })\n}\n","/*\n TODO: Code in a template string is not a good practice because it becomes very difficult to maintain.\n There will be a component called MyAccountLayout that will wrap the entire MyAccount Layout, including the global sections, menu, etc.\n This will reduce the amount of code inside the template string.\n*/\n\nexport const myAccountPageTemplate = (pagePath: string) => `\n import type { ComponentType } from 'react'\n import RenderSections from 'src/components/cms/RenderSections'\n import { default as GLOBAL_COMPONENTS } from 'src/components/cms/global/Components'\n import CUSTOM_COMPONENTS from 'src/customizations/src/components'\n import { MyAccountLayout } from 'src/components/account'\n import {\n getServerSideProps,\n type MyAccountProps,\n } from 'src/experimental/myAccountServerSideProps'\n import DynamicPage from '${pagePath}';\n import PageProvider from 'src/sdk/overrides/PageProvider'\n /* A list of components that can be used in the CMS. */\n const COMPONENTS: Record<string, ComponentType<any>> = {\n ...GLOBAL_COMPONENTS,\n ...CUSTOM_COMPONENTS,\n }\n\n function Page({ globalSections: globalSectionsProp, accountName, isRepresentative }: MyAccountProps) {\n const { sections: globalSections, settings: globalSettings } = globalSectionsProp ?? {}\n\n return (\n <PageProvider context={{ globalSettings }}>\n <RenderSections\n globalSections={globalSections}\n components={COMPONENTS}\n >\n <MyAccountLayout accountName={accountName} isRepresentative={isRepresentative}>\n <DynamicPage />\n </MyAccountLayout>\n </RenderSections>\n </PageProvider>\n )\n }\n\n export { getServerSideProps }\n\n export default Page\n`\n","import chalk from 'chalk'\nimport type { ChildProcess, ExecException } from 'child_process'\nimport { execSync } from 'child_process'\nimport { logger } from './logger'\n\ntype ExecSyncError = (ExecException & ChildProcess) | undefined\n\nconst showError = ({\n message,\n cmd,\n error,\n}: {\n message: string\n cmd: string\n error: ExecSyncError\n}) => {\n logger.error(`${chalk.red('error')} - ${message}`)\n\n if (cmd && error) {\n logger.log(\n `${chalk.magenta('DEBUG')} - $ ${JSON.stringify(cmd, null, 2)} error root ↓`\n )\n logger.log(error.stdout?.toString())\n }\n\n process.exit(1)\n}\n\nconst showWarning = ({\n message,\n cmd,\n error,\n}: {\n message: string\n cmd: string\n error: ExecSyncError\n}) => {\n logger.warn(`${chalk.yellow('warn')} - ${message}`)\n\n if (cmd && error) {\n logger.log(\n `${chalk.magenta('DEBUG')} - $ ${JSON.stringify(cmd, null, 2)} warn root ↓`\n )\n logger.log(error.stdout?.toString())\n }\n}\n\nexport const runCommandSync = ({\n cmd,\n errorMessage,\n throws,\n cwd,\n}: {\n cmd: string\n errorMessage: string\n throws: 'warning' | 'error'\n cwd?: string\n}) => {\n const debug = process.env.DISCOVERY_DEBUG === 'true' ? true : false\n\n try {\n logger.log(`[STARTED] ${cmd}`)\n\n const res = execSync(\n debug ? `${cmd} --debug --verbose 2>&1` : `${cmd} 2>&1`,\n {\n stdio: 'pipe',\n cwd,\n }\n )\n logger.log(`[STATUS] ${res?.toString() ?? 'Unknown'}`)\n logger.log(`[FINISHED] ${cmd}`)\n } catch (error) {\n const sanitizedError = debug ? (error as ExecSyncError) : undefined\n\n if (throws === 'warning') {\n showWarning({ message: errorMessage, cmd, error: sanitizedError })\n } else {\n showError({ message: errorMessage, cmd, error: sanitizedError })\n }\n }\n}\n","import { getPreferredPackageManager } from './commands'\nimport { runCommandSync } from './runCommandSync'\n\ntype InstallDependenciesOptions = {\n dependencies: string[]\n cwd: string\n errorMessage: string\n}\n\nexport async function installDependencies({\n dependencies,\n cwd,\n errorMessage,\n}: InstallDependenciesOptions) {\n const packageManager = await getPreferredPackageManager()\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n runCommandSync({\n cmd: `${packageManager} ${installCommand} ${dependencies.join(' ')}`,\n errorMessage,\n throws: 'error',\n cwd,\n })\n}\n","import fsExtra from 'fs-extra'\nimport path from 'path'\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\n\nconst { copySync, existsSync, mkdirSync, readdirSync, writeFileSync } = fsExtra\n\nexport type PageConfig = {\n path: string\n appLayout: boolean\n name: string\n}\n\nexport type APIConfig = {\n path: string\n}\n\nexport type PluginConfig = {\n pages?: { [pageName: string]: Partial<PageConfig> }\n apis?: { [pageName: string]: Partial<APIConfig> }\n}\n\nexport type Plugin =\n | string\n | {\n [pluginName: string]: PluginConfig\n }\n\nconst PLUGIN_CONFIG_FILE = 'plugin.config.js'\n\nconst sanitizePluginName = (pluginName: string, pascalCase = false) => {\n const sanitized = pluginName.split('/')[1]\n\n if (pascalCase) {\n return sanitized\n .toLowerCase()\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n }\n\n return sanitized\n}\n\nexport const getPluginName = (plugin: Plugin) => {\n if (typeof plugin === 'string') {\n return plugin\n }\n\n return Object.keys(plugin)[0]\n}\n\nconst getPluginCustomConfig = (plugin: Plugin) => {\n if (typeof plugin === 'string') {\n return {}\n }\n\n return plugin[getPluginName(plugin)]\n}\n\nconst getPluginSrcPath = async (basePath: string, pluginName: string) => {\n const { getPackagePath } = withBasePath(basePath)\n return getPackagePath(pluginName, 'src')\n}\n\nexport const getPluginsList = async (basePath: string): Promise<Plugin[]> => {\n const { tmpStoreConfigFile } = withBasePath(basePath)\n\n try {\n const {\n default: { plugins = [] },\n } = await import(tmpStoreConfigFile)\n return plugins\n } catch (error) {\n logger.error(`Could not load plugins from store config`)\n }\n\n return []\n}\n\nconst copyPluginsSrc = async (basePath: string, plugins: Plugin[]) => {\n const { tmpPluginsDir } = withBasePath(basePath)\n\n logger.log('Copying plugins files')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginSrcPath = await getPluginSrcPath(\n basePath,\n getPluginName(pluginName)\n )\n const pluginDestPath = path.join(\n tmpPluginsDir,\n sanitizePluginName(pluginName)\n )\n\n copySync(pluginSrcPath, pluginDestPath)\n logger.log(`Copied ${pluginName} files`)\n })\n}\n\nconst copyPluginPublicFiles = async (basePath: string, plugins: Plugin[]) => {\n const { tmpDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Copying plugin public files')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginPath = getPackagePath(getPluginName(pluginName))\n\n try {\n if (existsSync(`${pluginPath}/public`)) {\n copySync(`${pluginPath}/public`, `${tmpDir}/public`, {\n dereference: true,\n overwrite: true,\n })\n logger.log(`Plugin public files copied`)\n }\n } catch (e) {\n logger.error(e)\n }\n })\n}\n\nconst getPluginPageFileContent = (\n pluginName: string,\n pageName: string,\n appLayout: boolean\n) => `\n// GENERATED FILE\n// @ts-nocheck\nimport * as page from 'src/plugins/${pluginName}/pages/${pageName}'\n${appLayout ? `import { getGlobalSectionsData } from 'src/components/cms/GlobalSections'` : ``}\n${appLayout ? `import RenderSections from 'src/components/cms/RenderSections'` : ``}\nimport { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'\n\nasync function getServerSidePropsBase(${appLayout ? '{ previewData, ...otherProps }' : 'otherProps'}) {\n const noop = async function() {}\n const loaderData = await (page.loader || noop)(otherProps)\n${appLayout ? `const { sections = [] } = await getGlobalSectionsData(previewData)` : ``}\n\n return {\n props: {\n data: loaderData,\n ${appLayout ? 'globalSections: sections' : ``}\n }\n }\n}\n\nexport const getServerSideProps = withLocaleValidationSSR(getServerSidePropsBase)\nexport default function Page(props) {\n ${\n appLayout\n ? `return <RenderSections globalSections={props.globalSections}>\n {page.default(props.data)}\n </RenderSections>`\n : `return page.default(props.data)`\n }\n}\n `\n\nconst generatePluginPages = async (basePath: string, plugins: Plugin[]) => {\n const { tmpPagesDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Generating plugin pages')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE)\n\n const { default: pluginConfig } = await import(pluginConfigPath)\n\n const { pages: pagesCustom } = getPluginCustomConfig(plugin)\n\n const pagesConfig: Record<string, PageConfig> = {\n ...(pluginConfig.pages ?? {}),\n ...pagesCustom,\n }\n\n const pages = Object.keys(pagesConfig)\n\n pages.forEach(async (pageName) => {\n const paths = pagesConfig[pageName].path.split('/')\n\n const pageFile = paths.pop()\n const pagePaths = paths\n\n const pagePath = path.join(tmpPagesDir, ...pagePaths, pageFile + '.tsx')\n\n const fileContent = getPluginPageFileContent(\n sanitizePluginName(pluginName),\n pageName,\n pagesConfig[pageName].appLayout\n )\n\n mkdirSync(path.dirname(pagePath), { recursive: true })\n writeFileSync(pagePath, fileContent)\n })\n })\n}\n\nexport async function addPluginsSections(basePath: string, plugins: Plugin[]) {\n const { tmpPluginsDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Adding plugin sections')\n\n const indexPluginsOverrides = plugins\n .filter((plugin) =>\n existsSync(\n getPackagePath(getPluginName(plugin), 'src', 'components', 'index.ts')\n )\n )\n .map((plugin) => {\n const pluginReference =\n sanitizePluginName(getPluginName(plugin), true) + 'Components'\n\n return {\n import: `import { default as ${pluginReference} } from 'src/plugins/${sanitizePluginName(getPluginName(plugin))}/components'`,\n pluginReference,\n }\n })\n\n const pluginsImportFileContent = `\n ${indexPluginsOverrides.map((plugin) => plugin.import).join('\\n')}\n\n export default {\n ${indexPluginsOverrides.map((plugin) => `...${plugin.pluginReference}`).join(',\\n')}\n }\n `\n\n const sectionPath = path.join(tmpPluginsDir, 'index.ts')\n writeFileSync(sectionPath, pluginsImportFileContent)\n logger.log('Writing plugins overrides')\n logger.log(sectionPath)\n logger.log(pluginsImportFileContent)\n}\n\nexport async function addPluginsOverrides(basePath: string, plugins: Plugin[]) {\n const { tmpPluginsDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Adding plugin overrides')\n\n plugins\n .map((plugin) => ({\n pluginName: getPluginName(plugin),\n pluginOverridesPath: getPackagePath(\n getPluginName(plugin),\n 'src',\n 'components',\n 'overrides'\n ),\n }))\n .filter(({ pluginOverridesPath }) => existsSync(pluginOverridesPath))\n .reverse()\n .forEach(({ pluginName, pluginOverridesPath }) => {\n const overrideFilesAlreadyCopied: string[] = []\n\n const sanitizedPluginName = sanitizePluginName(pluginName)\n\n const overrideFiles = readdirSync(pluginOverridesPath)\n\n overrideFiles\n .filter((file) => !overrideFilesAlreadyCopied.includes(file))\n .forEach((overrideFileName) => {\n const overrideFileContent = `export { override } from 'src/plugins/${sanitizedPluginName}/components/overrides/${overrideFileName.split('.')[0]}'`\n\n writeFileSync(\n path.join(tmpPluginsDir, 'overrides', overrideFileName),\n overrideFileContent\n )\n overrideFilesAlreadyCopied.push(overrideFileName)\n })\n })\n}\n\nconst addPluginsTheme = async (basePath: string, plugins: Plugin[]) => {\n const { getPackagePath, tmpThemesPluginsFile } = withBasePath(basePath)\n\n const pluginImportsContent = plugins\n .filter((plugin) =>\n existsSync(\n getPackagePath(getPluginName(plugin), 'src', 'themes', 'index.scss')\n )\n )\n .map((plugin) => `@import \"${getPluginName(plugin)}/src/themes/index.scss\"`)\n .join('\\n')\n\n writeFileSync(tmpThemesPluginsFile, pluginImportsContent)\n}\n\nconst getPluginAPIFileContent = (pluginName: string, apiName: string) => `\n// GENERATED FILE\n// @ts-nocheck\nimport apiHandle from 'src/plugins/${pluginName}/apis/${apiName}'\nimport { NextApiRequest, NextApiResponse } from \"next/types\"\n\nexport default function handle(req: NextApiRequest, res: NextApiResponse) {\n return apiHandle(req, res)\n}\n`\n\nconst generatePluginApis = async (basePath: string, plugins: Plugin[]) => {\n const { tmpApiDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Generating plugin APIs')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE)\n\n const { default: pluginConfig } = await import(pluginConfigPath)\n\n const { apis: apisCustom } = getPluginCustomConfig(plugin)\n\n const apisConfig: Record<string, APIConfig> = {\n ...(pluginConfig.apis ?? {}),\n ...apisCustom,\n }\n\n const apis = Object.keys(apisConfig)\n\n apis.forEach(async (apiName) => {\n const paths = apisConfig[apiName].path.split('/')\n\n const apiFile = paths.pop()\n const apiPaths = paths\n\n const apiPath = path.join(\n tmpApiDir,\n 'plugins',\n ...apiPaths,\n apiFile + '.ts'\n )\n\n const fileContent = getPluginAPIFileContent(\n sanitizePluginName(pluginName),\n apiName\n )\n\n mkdirSync(path.dirname(apiPath), { recursive: true })\n writeFileSync(apiPath, fileContent)\n })\n })\n}\n\nexport const installPlugins = async (basePath: string) => {\n const plugins = await getPluginsList(basePath)\n\n copyPluginsSrc(basePath, plugins)\n copyPluginPublicFiles(basePath, plugins)\n generatePluginPages(basePath, plugins)\n generatePluginApis(basePath, plugins)\n addPluginsSections(basePath, plugins)\n addPluginsOverrides(basePath, plugins)\n addPluginsTheme(basePath, plugins)\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport { spawn } from 'child_process'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\nimport { mergeCMSFiles } from '../utils/hcms'\nimport path from 'node:path'\n\nexport default class CmsSync extends Command {\n static flags = {\n ['dry-run']: Flags.boolean({ char: 'd' }),\n }\n\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being synched with the CMS is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { flags, args } = await this.parse(CmsSync)\n\n const basePath = getBasePath(args.path)\n const { tmpDir, userStoreConfigFile } = withBasePath(basePath)\n\n const { default: userStoreConfig } = await import(\n path.resolve(userStoreConfigFile)\n )\n const cmsProjectName = userStoreConfig.contentSource?.project ?? 'faststore'\n\n await generate({ setup: true, basePath })\n await mergeCMSFiles(basePath)\n\n if (flags['dry-run']) {\n return\n }\n\n return spawn(`vtex cms sync ${cmsProjectName}`, {\n shell: true,\n cwd: tmpDir,\n stdio: 'inherit',\n })\n }\n}\n","import path from 'path'\nimport chalk from 'chalk'\n// import { ux } from '@oclif/core'\nimport { confirm } from '@inquirer/prompts'\nimport fsExtra from 'fs-extra'\nconst { readFileSync, existsSync, writeFileSync, mkdirSync } = fsExtra\n\nimport { withBasePath } from './directory'\nimport { getPluginName, getPluginsList } from './plugins'\n\nexport interface ContentTypeOrSectionDefinition {\n id?: string\n name?: string\n scopes?: string[]\n isSingleton?: boolean\n onlySettings?: boolean\n requiredScopes?: string[]\n schema?: Record<string, unknown>\n configurationSchemaSets?: ConfigurationSchemaSet[]\n}\n\nexport interface ConfigurationSchemaSet {\n name?: string\n configurations?: Array<{\n name?: string\n schema?: Record<string, unknown>\n }>\n}\n\nexport function splitCustomDefinitions(\n coreDefinitions: ContentTypeOrSectionDefinition[],\n customDefinitions: ContentTypeOrSectionDefinition[],\n primaryIdentifier: 'id' | 'name'\n) {\n const coreDefinitionIdentifiers = new Set<string>(\n coreDefinitions.map((definition) => definition[primaryIdentifier] ?? '')\n )\n\n const duplicates: ContentTypeOrSectionDefinition[] = []\n const newDefinitions: ContentTypeOrSectionDefinition[] = []\n\n customDefinitions.forEach((definition) => {\n if (!definition[primaryIdentifier]) {\n console.error('Ignoring invalid definition:', definition)\n return\n }\n\n if (\n coreDefinitionIdentifiers.has(definition[primaryIdentifier] as string)\n ) {\n duplicates.push(definition)\n return\n }\n\n newDefinitions.push(definition)\n })\n\n return { duplicates, newDefinitions }\n}\n\nexport function dedupeAndMergeDefinitions(\n coreDefinitions: ContentTypeOrSectionDefinition[],\n duplicates: ContentTypeOrSectionDefinition[],\n primaryIdentifier: 'id' | 'name'\n) {\n const sortedCoreDefs = coreDefinitions.filter((definition) =>\n Boolean(definition[primaryIdentifier])\n )\n sortedCoreDefs.sort((a, b) =>\n (a[primaryIdentifier] as string) < (b[primaryIdentifier] as string) ? -1 : 1\n )\n\n const sortedDuplicates = duplicates.filter((definition) =>\n Boolean(definition[primaryIdentifier])\n )\n sortedDuplicates.sort((a, b) =>\n (a[primaryIdentifier] as string) < (b[primaryIdentifier] as string) ? -1 : 1\n )\n\n let duplicateIdx = 0\n\n const result = sortedCoreDefs.map((currentDefinition) => {\n const isDuplicateMatch =\n currentDefinition[primaryIdentifier] ===\n sortedDuplicates[duplicateIdx]?.[primaryIdentifier]\n\n if (duplicateIdx < sortedDuplicates.length && isDuplicateMatch) {\n return sortedDuplicates[duplicateIdx++]\n }\n\n return currentDefinition\n })\n\n return result\n}\n\nasync function confirmUserChoice(\n duplicates: ContentTypeOrSectionDefinition[],\n fileName: string\n) {\n const goAhead = await confirm({\n message: `You are about to override default ${\n fileName.split('.')[0]\n }:\\n\\n${duplicates\n .map((definition) => definition.id || definition.name)\n .join('\\n')}\\n\\nAre you sure? [yes/no]`,\n })\n\n if (!goAhead) {\n throw new Error('cms-sync cancelled by user.')\n }\n\n return\n}\n\nexport async function mergeCMSFile(fileName: string, basePath: string) {\n const {\n coreCMSDir,\n userCMSDir,\n tmpCMSDir,\n getPackagePath,\n userStoreConfigFile,\n } = withBasePath(basePath)\n\n const { default: userStoreConfig } = await import(\n path.resolve(userStoreConfigFile)\n )\n const cmsProjectName = userStoreConfig.contentSource?.project ?? 'faststore'\n\n const coreFilePath = path.join(coreCMSDir, fileName)\n const customFilePath = path.join(userCMSDir, fileName)\n\n const coreFile = readFileSync(coreFilePath, 'utf8')\n const coreDefinitions: ContentTypeOrSectionDefinition[] = JSON.parse(coreFile)\n\n const primaryIdentifierForDefinitions =\n fileName === 'content-types.json' ? 'id' : 'name'\n\n let output: ContentTypeOrSectionDefinition[] = coreDefinitions\n\n const plugins = await getPluginsList(basePath)\n\n const pluginCMSFilePaths = plugins.map((plugin) =>\n getPackagePath(getPluginName(plugin), 'cms', 'faststore', fileName)\n )\n\n const customizations = [...pluginCMSFilePaths, customFilePath].filter(\n (pluginCMSFilePath) => existsSync(pluginCMSFilePath)\n )\n\n // TODO: create a validation when the CMS files exist but don't have a component for them\n for (const newFilePath of customizations) {\n const customFile = readFileSync(newFilePath, 'utf8')\n\n try {\n const customDefinitions = JSON.parse(customFile)\n\n const { duplicates, newDefinitions } = splitCustomDefinitions(\n output,\n customDefinitions,\n primaryIdentifierForDefinitions\n )\n\n if (duplicates.length) {\n if (newFilePath === customFilePath) {\n await confirmUserChoice(duplicates, fileName)\n }\n\n output = [\n ...dedupeAndMergeDefinitions(\n output,\n duplicates,\n primaryIdentifierForDefinitions\n ),\n ...newDefinitions,\n ]\n } else {\n output = [...output, ...newDefinitions]\n }\n } catch (err) {\n if (err instanceof SyntaxError) {\n console.info(\n `${chalk.red(\n 'error'\n )} - ${fileName} is a malformed JSON file, ignoring its contents.`\n )\n } else {\n throw err\n }\n }\n }\n\n try {\n if (!existsSync(tmpCMSDir(cmsProjectName))) {\n mkdirSync(tmpCMSDir(cmsProjectName))\n }\n writeFileSync(\n path.join(tmpCMSDir(cmsProjectName), fileName),\n JSON.stringify(output)\n )\n console.log(\n `${chalk.green('success')} - CMS file ${chalk.dim(fileName)} created`\n )\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nexport async function mergeCMSFiles(basePath: string) {\n try {\n await mergeCMSFile('content-types.json', basePath)\n await mergeCMSFile('sections.json', basePath)\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n","import fs from 'node:fs'\nimport degit from 'degit'\nimport { Args, Command } from '@oclif/core'\nimport { confirm } from '@inquirer/prompts'\n\nexport default class Create extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the Discovery folder will be created. Defaults to ./discovery.',\n }),\n }\n\n static description =\n 'Creates a discovery folder based on the starter.store template.'\n\n static examples = ['$ yarn faststore create discovery']\n\n async run() {\n const { args } = await this.parse(Create)\n\n const discoveryPath = args.path ?? './discovery'\n const discoveryFolderExists = fs.existsSync(discoveryPath)\n\n if (discoveryFolderExists) {\n const confirmOverride = await confirm({\n message: `It looks like you already have a discovery folder named \"${discoveryPath}\" in your store. Do you want to override it?`,\n })\n\n if (!confirmOverride)\n return this.log('🛑 Interrupted initializing discovery')\n }\n\n const discoveryEmitter = degit('vtex-sites/starter.store', {\n force: true,\n })\n\n this.log('Pulling starter.store template...')\n\n discoveryEmitter.clone(discoveryPath).then(() => {\n this.log(\n `Discovery created successfully! You can find it at ${discoveryPath}`\n )\n })\n }\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport { spawn, spawnSync } from 'child_process'\nimport chokidar from 'chokidar'\nimport dotenv from 'dotenv'\n\nimport { cpSync, existsSync, readFileSync } from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getDiscoveryConfig } from '../utils/config'\nimport { checkDeprecatedSecretFiles } from '../utils/deprecations'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate, toggleProxyByLocalizationFlag } from '../utils/generate'\nimport { logger } from '../utils/logger'\nimport { runCommandSync } from '../utils/runCommandSync'\n\n/**\n * Taken from toolbelt\n *\n * https://github.com/vtex/toolbelt/pull/442\n */\nconst stabilityThreshold = process.platform === 'darwin' ? 100 : 200\n\nconst defaultPatterns = ['*/**', '**']\n\nconst defaultIgnored = [\n '.DS_Store',\n 'README.md',\n '.gitignore',\n 'package.json',\n '.git/**',\n '.faststore/**',\n '**/.faststore/**',\n]\n\nconst defaultNodeModulesIgnored = ['node_modules/**', '**/node_modules/**']\n\nconst defaultNodeModulesIgnoredExceptVtexPackages = [\n '**/node_modules/!(@vtex)/**',\n]\n\nconst devAbortController = new AbortController()\n\nasync function storeDev(\n rootDir: string,\n tmpDir: string,\n coreDir: string,\n port: number | string\n) {\n // Only try to read vtex.env if it exists\n let envVars = {}\n const vtexEnvPath = path.join(rootDir, 'vtex.env')\n\n if (existsSync(vtexEnvPath)) {\n try {\n envVars = dotenv.parse(readFileSync(vtexEnvPath))\n } catch (err) {\n logger.log(\n `${chalk.yellow('warn')} - Error parsing vtex.env file: ${err}`\n )\n }\n }\n\n const packageManager = await getPreferredPackageManager()\n\n runCommandSync({\n cmd: `${packageManager} predev`,\n errorMessage:\n 'GraphQL was not optimized and TS files were not updated. Changes in the GraphQL layer did not take effect',\n throws: 'error',\n cwd: tmpDir,\n })\n\n const { success } = copyGenerated(\n path.join(tmpDir, '@generated'),\n path.join(coreDir, '@generated')\n )\n\n if (!success) {\n logger.log(\n `${chalk.yellow('warn')} - Failed to copy @generated schema back to node_modules, autocomplete and DX might be impacted.`\n )\n logger.log(\n `Attempted to copy from ${path.join(tmpDir, '@generated')} to ${path.join(coreDir, '@generated')}`\n )\n }\n\n const devProcess = spawn(`${packageManager} dev-only --port ${port}`, {\n shell: true,\n cwd: tmpDir,\n signal: devAbortController.signal,\n stdio: ['inherit', 'pipe', 'inherit'],\n env: {\n ...process.env,\n ...envVars,\n },\n })\n\n let nextStdout = ''\n devProcess.stdout.on('data', (chunk) => {\n nextStdout += chunk\n const lines = nextStdout.split('\\n')\n while (lines.length > 1) {\n const line = lines.shift()\n console.log('[DISCOVERY] ', line)\n }\n nextStdout = lines.shift() || ''\n })\n devProcess.stdout.on('end', () => {\n console.log('[DISCOVERY] ', nextStdout)\n })\n\n devProcess.on('close', () => {\n devAbortController.abort()\n })\n}\n\nfunction copyGenerated(from: string, to: string) {\n try {\n cpSync(from, to, { recursive: true, force: true, dereference: true })\n\n return { success: true }\n } catch (err) {\n return { success: false }\n }\n}\n\nexport default class Dev extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n account: Args.string({\n name: 'account',\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n port: Args.string({\n name: 'port',\n description: 'The port where FastStore should run. Defaults to 3000.',\n }),\n }\n\n static flags = {\n 'watch-plugins': Flags.boolean({\n description: 'Enable watching for plugin changes',\n default: false,\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(Dev)\n const basePath = getBasePath(args.path)\n\n const port = args.port ?? '3000'\n const watchPlugins = flags['watch-plugins']\n\n const { getRoot, tmpDir, coreDir } = withBasePath(basePath)\n\n checkDeprecatedSecretFiles(basePath)\n\n const queueChange = (/* path: string, remove: boolean */) => {\n generate({ basePath })\n }\n\n const watcher = chokidar.watch([...defaultPatterns], {\n atomic: stabilityThreshold,\n awaitWriteFinish: {\n stabilityThreshold,\n },\n cwd: getRoot(),\n ignoreInitial: true,\n ignored: [\n ...defaultIgnored,\n ...(watchPlugins\n ? defaultNodeModulesIgnoredExceptVtexPackages\n : defaultNodeModulesIgnored),\n ],\n persistent: true,\n usePolling: process.platform === 'win32',\n })\n\n devAbortController.signal.addEventListener('abort', () => {\n watcher.close()\n })\n\n await generate({ setup: true, basePath })\n\n const cliPath = fileURLToPath(\n import.meta.resolve('@faststore/cli/runner', import.meta.url)\n )\n\n spawnSync('node', [cliPath, 'generate-types', tmpDir], {\n stdio: 'inherit',\n })\n\n spawnSync('node', [cliPath, 'cache-graphql', basePath], {\n stdio: 'inherit',\n })\n\n // generate-i18n will validate localization config and check if it's enabled\n spawnSync('node', [cliPath, 'generate-i18n', basePath], {\n stdio: 'inherit',\n })\n\n const config = await getDiscoveryConfig(basePath)\n const localizationEnabled = config?.localization?.enabled === true\n toggleProxyByLocalizationFlag(basePath, localizationEnabled)\n\n storeDev(getRoot(), tmpDir, coreDir, port)\n\n return await new Promise((resolve, reject) => {\n watcher\n .on('add', (/*file*/) => queueChange(/*file, false*/))\n .on('change', (/*file*/) => queueChange(/*file, false*/))\n .on('unlink', (/*file*/) => queueChange(/*file, true*/))\n .on('error', () => {\n devAbortController.abort()\n reject()\n })\n .on('ready', resolve)\n })\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport chalk from 'chalk'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\nimport { logger } from '../utils/logger'\nimport genTsTypes from '../utils/generate-types'\n\nexport default class Generate extends Command {\n static flags = {}\n\n static args = {\n path: Args.string({\n name: 'path',\n hidden: true,\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Generate)\n const basePath = getBasePath(args.path)\n const { tmpDir } = withBasePath(basePath)\n\n await generate({ setup: true, basePath })\n\n genTsTypes(args.path ?? tmpDir)\n\n logger.log(\n `${chalk.green(\n 'success'\n )} - GraphQL schema, types, and optimizations successfully generated 🎉`\n )\n }\n}\n","import fs from 'fs'\nimport path from 'node:path'\n\nexport function saveFile(fileLocation: string) {\n fs.mkdirSync(path.dirname(fileLocation), { recursive: true })\n\n return (content: string) => {\n fs.writeFileSync(fileLocation, content)\n }\n}\n","import { saveFile } from './file'\nimport { GraphqlVtexSchema } from '@faststore/api'\nimport {\n generate as codegenGenerate,\n type CodegenConfig,\n} from '@graphql-codegen/cli'\nimport { mergeTypeDefs } from '@graphql-tools/merge'\nimport { printSchemaWithDirectives } from '@graphql-tools/utils'\nimport { buildASTSchema, Kind, parse, type DocumentNode } from 'graphql'\nimport fs, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nconst schemaFileName = 'schema.graphql'\n\nexport default async function genTsTypes(at: string) {\n await generateSchemaFile(at)\n generateSchemaTSTypes(at)\n}\n\nfunction generateSchemaTSTypes(root: string) {\n let finalRootPath = path.resolve(root)\n\n if (existsSync(path.resolve(root, '.faststore'))) {\n finalRootPath = path.resolve(root, '.faststore')\n }\n\n // glob to include all ts/tsx files\n const documents = [`${finalRootPath}/src/**/*.{ts,tsx}`]\n\n const config: CodegenConfig = {\n documents,\n overwrite: true,\n errorsOnly: false,\n debug: false,\n verbose: true,\n schema: path.resolve(finalRootPath, '@generated', schemaFileName),\n generates: {\n [`${finalRootPath}/@generated/`]: {\n preset: 'client',\n config: {\n /** Not all of these properties are supported by the preset, but it reflects our previous config when we used typescript plugins directly */\n preResolveTypes: true,\n avoidOptionals: true,\n enumsAsTypes: true,\n skipTypeNameForRoot: true,\n skipTypename: true,\n allowEnumStringTypes: false,\n flattenGeneratedTypes: true,\n namingConvention: 'change-case-all#pascalCase',\n exportFragmentSpreadSubTypes: true,\n /** Removes useless AST definitions from documents */\n documentMode: 'string',\n },\n presetConfig: {\n // Disabled fragment masking - it wasn't being used by us. This can be reviewed in the future\n fragmentMasking: false,\n // Recognizes the gql(`query { ... }`) calls and generates the types for them\n gqlTagName: 'gql',\n onExecutableDocumentNode: (document: DocumentNode) => ({\n // This makes sure that the operation name is always present in the __meta__ field of each query\n // This helps us to identify the query in the persisted documents and to debug errors in the client\n operationName: getOperationName(document),\n }),\n persistedDocuments: {\n // Keeps document simple, including only necessary properties as '__meta__' and its properties\n mode: 'replaceDocumentWithHash',\n // replaces operation['__meta__']['hash'] with operation['__meta__']['operationHash']\n hashPropertyName: 'operationHash',\n },\n },\n },\n },\n }\n\n return codegenGenerate(config, true)\n}\n\nfunction getOperationName(document: DocumentNode) {\n for (const definition of document.definitions) {\n if (\n definition.kind === Kind.OPERATION_DEFINITION &&\n typeof definition.name?.value === 'string'\n ) {\n return definition.name.value\n }\n }\n\n return 'UnknownOperation'\n}\n\nasync function generateSchemaFile(rootPath: string) {\n const faststoreSchema = printSchemaWithDirectives(GraphqlVtexSchema())\n\n const getMergedSchema = async () => {\n const root = path.join(\n rootPath.endsWith('.faststore') ? [rootPath, '..'].join('/') : rootPath\n )\n\n const customizations = [\n ...(await getTypeDefsFromFolder(root, 'vtex')),\n ...(await getTypeDefsFromFolder(root, 'thirdParty')),\n ]\n try {\n const mergedTypeDefs = mergeTypeDefs(\n [faststoreSchema, ...customizations].filter(Boolean)\n )\n\n return buildASTSchema(mergedTypeDefs)\n } catch (e) {\n console.error(\n 'An error occurred while attempting to merge the GraphQL Schema Extensions. Check the custom typeDefs and resolvers located in the \"customizations/graphql/\" directory. The changes since the last successful schema merge will be ignored.'\n )\n\n throw e\n }\n }\n\n let pathToSave = path.resolve(rootPath, '@generated', schemaFileName)\n\n if (existsSync(path.resolve(rootPath, '.faststore'))) {\n pathToSave = path.resolve(\n rootPath,\n '.faststore',\n '@generated',\n schemaFileName\n )\n }\n\n const saveSchemaFile = saveFile(pathToSave)\n const finalSchema = printSchemaWithDirectives(await getMergedSchema())\n\n saveSchemaFile(finalSchema)\n}\n\nasync function getTypeDefsFromFolder(root: string, customPath: string) {\n const globby = await import('globby')\n const basePath = [root, 'src', 'graphql']\n\n const pathArray = Array.isArray(customPath) ? customPath : [customPath]\n\n return ((globby as any).default ?? globby)\n .globbySync(path.join(...[...basePath, ...pathArray]), {\n expandDirectories: {\n extensions: ['graphql'],\n },\n })\n .map((typeDef: string) =>\n parse(fs.readFileSync(typeDef, { encoding: 'utf-8' }))\n )\n}\n","import { Args, Command } from '@oclif/core'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getBasePath } from '../utils/directory'\n\nexport default class Prepare extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Prepare)\n const basePath = getBasePath(args.path)\n\n const clientPublicDir = path.join(basePath, 'public/')\n\n const corePublicDir = path.resolve(\n fileURLToPath(\n path.dirname(import.meta.resolve('@faststore/core', import.meta.url))\n ),\n 'public'\n )\n\n if (!corePublicDir) {\n throw Error('Please install @faststore/core package')\n }\n\n copyFolder(corePublicDir, clientPublicDir)\n }\n}\n\nfunction copyFolder(sourceDir: string, targetDir: string) {\n // Ensure target directory exists\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true })\n }\n\n // Read all items in the source directory\n const files = fs.readdirSync(sourceDir)\n\n for (const file of files) {\n const sourcePath = path.join(sourceDir, file)\n const targetPath = path.join(targetDir, file)\n\n const stat = fs.statSync(sourcePath)\n\n if (stat.isFile()) {\n // Copy file\n fs.copyFileSync(sourcePath, targetPath)\n console.log(`Copied file: ${sourcePath} -> ${targetPath}`)\n } else if (stat.isDirectory()) {\n // Recursively copy subfolder\n copyFolder(sourcePath, targetPath)\n }\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport { spawn, spawnSync } from 'child_process'\nimport fsExtra from 'fs-extra'\nimport path from 'path'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getBasePath, withBasePath } from '../utils/directory'\n\nconst { existsSync } = fsExtra\n\nexport default class Start extends Command {\n static args = {\n account: Args.string({\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n path: Args.string({\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n port: Args.string({\n description: 'The port where FastStore should run. Defaults to 3000.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Start)\n const basePath = getBasePath(args.path)\n const port = args.port ?? 3000\n const { getRoot, tmpDir } = withBasePath(basePath)\n const packageManager = await getPreferredPackageManager()\n\n if (!existsSync(path.join(getRoot(), '.next'))) {\n spawnSync(`${packageManager} faststore build`, {\n shell: true,\n stdio: 'inherit',\n })\n }\n\n return spawn(\n packageManager,\n ['next', 'start', tmpDir, '-p', String(port)],\n {\n stdio: 'inherit',\n }\n )\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport { spawn } from 'child_process'\nimport chokidar from 'chokidar'\n\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\n\n/**\n * Taken from toolbelt\n *\n * https://github.com/vtex/toolbelt/pull/442\n */\nconst stabilityThreshold = process.platform === 'darwin' ? 100 : 200\n\nconst defaultPatterns = ['*/**', '**']\n\nconst defaultIgnored = [\n '.DS_Store',\n 'README.md',\n '.gitignore',\n 'package.json',\n 'node_modules/**',\n '**/node_modules/**',\n '.git/**',\n '.faststore/**',\n '**/.faststore/**',\n]\n\nconst testAbortController = new AbortController()\n\nasync function storeTest(tmpDir: string) {\n const packageManager = await getPreferredPackageManager()\n\n const testProcess = spawn(`${packageManager} run test:e2e`, {\n shell: true,\n cwd: tmpDir,\n signal: testAbortController.signal,\n stdio: 'inherit',\n })\n\n testProcess.on('close', () => {\n testAbortController.abort()\n })\n}\n\nexport default class Test extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being tested is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Test)\n const basePath = getBasePath(args.path)\n const { getRoot, tmpDir } = withBasePath(basePath)\n\n const watcher = chokidar.watch([...defaultPatterns], {\n atomic: stabilityThreshold,\n awaitWriteFinish: {\n stabilityThreshold,\n },\n cwd: getRoot(),\n ignoreInitial: true,\n ignored: defaultIgnored,\n persistent: true,\n usePolling: process.platform === 'win32',\n })\n\n testAbortController.signal.addEventListener('abort', () => {\n watcher.close()\n })\n\n await generate({ setup: true, basePath })\n\n storeTest(tmpDir)\n\n return await new Promise((resolve, reject) => {\n watcher\n .on('error', () => {\n testAbortController.abort()\n reject()\n })\n .on('ready', resolve)\n })\n }\n}\n","import path from 'node:path'\nimport { Args, Command } from '@oclif/core'\nimport chalk from 'chalk'\nimport { logger } from '../utils/logger'\nimport genTsTypes from '../utils/generate-types'\n\nexport default class Generate extends Command {\n static hidden = true\n static flags = {}\n\n static args = {\n path: Args.string({\n name: 'path',\n required: true,\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Generate)\n\n await genTsTypes(\n path.isAbsolute(args.path)\n ? args.path\n : path.resolve(process.env.PWD ?? process.cwd(), args.path)\n )\n\n logger.log(\n `${chalk.green(\n 'success'\n )} - GraphQL schema, types, and optimizations successfully generated 🎉`\n )\n }\n}\n","import { saveFile } from '../utils/file'\nimport { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { logger } from '../utils/logger'\nimport graphql from 'graphql'\nimport path from 'path'\nimport fsExtra from 'fs-extra'\n\nconst { Kind, OperationTypeNode, parse: parseGraphql } = graphql\n\nconst persistedDocumentsName = 'persisted-documents.json'\nconst configFileName = 'discovery.config.default.js'\nconst cachedOperationsFileName = 'cached-operations.json'\n\nexport default class CacheGraphql extends Command {\n static flags = {\n queries: Flags.string({\n name: 'queries',\n description: 'The path to locate persisted-document file.',\n }),\n config: Flags.string({\n name: 'config',\n description: 'The path where the discovery.config is located',\n }),\n }\n\n static args = {\n store: Args.string({\n name: 'store',\n description:\n 'The path where the FastStore being built is or the persisted-document path. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(CacheGraphql)\n\n const rootPath = getBasePath()\n const argPath =\n (args?.store && path.resolve(rootPath, args.store)) || rootPath\n const { tmpDir } = withBasePath(argPath)\n const configPath =\n this.getConfigFile(flags.config && path.resolve(argPath, flags.config)) ||\n this.getConfigFile(tmpDir) ||\n this.getConfigFile(argPath)\n const persistedDocumentsPath =\n this.getPersistedDocument(\n (flags?.queries && path.resolve(argPath, flags?.queries)) || argPath\n ) || this.getPersistedDocument(tmpDir)\n if (!configPath) {\n return this.errorFileNotFound(\n configFileName,\n `\\n ${tmpDir}\\n ${argPath}`\n )\n }\n\n if (!persistedDocumentsPath) {\n return this.errorFileNotFound(\n persistedDocumentsName,\n flags?.queries ?? argPath\n )\n }\n\n const cachedOperationsPath = path.join(\n path.dirname(persistedDocumentsPath),\n cachedOperationsFileName\n )\n const saveCachedOperationsFile = saveFile(cachedOperationsPath)\n\n if (fsExtra.pathExistsSync(tmpDir))\n logger.info(`${chalk.blue('[Info]')} - .faststore Path at: ${tmpDir}`)\n\n logger.info(`${chalk.blue('[Info]')} - Config file location: ${configPath}`)\n logger.info(\n `${chalk.blue('[Info]')} - Persisted documents at: ${persistedDocumentsPath}`\n )\n logger.info(\n `${chalk.blue('[Info]')} - Cached operations output: ${cachedOperationsPath}`\n )\n\n const { default: persistedDocuments } = await import(\n persistedDocumentsPath,\n { with: { type: 'json' } }\n )\n\n const cachedQueries = getQueries(persistedDocuments)\n\n saveCachedOperationsFile(\n `${JSON.stringify(cachedQueries ?? [], null, 2)}\\n`\n )\n\n logger.info(\n `${chalk.green('[Success]')} - GraphQL queries cached with success: 🎉\n Queries: ${cachedQueries.join(', ')}`\n )\n }\n\n getPersistedDocument(rootPath?: string) {\n return this.getFile(persistedDocumentsName, [\n '@generated',\n persistedDocumentsName,\n ])(rootPath)\n }\n\n getConfigFile(rootPath?: string) {\n return this.getFile(configFileName, [configFileName])(rootPath)\n }\n\n getFile(fileName: string, pathFromRoot?: string | Array<string>) {\n return (rootPath?: string) => {\n switch (true) {\n case !rootPath:\n return\n case rootPath?.endsWith(fileName) && fsExtra.existsSync(rootPath):\n return rootPath\n case fsExtra.existsSync(path.join(rootPath ?? '', fileName)):\n return path.join(rootPath, fileName)\n default:\n if (!pathFromRoot) return\n\n const filePath = path.join(\n rootPath,\n ...(Array.isArray(pathFromRoot) ? pathFromRoot : [pathFromRoot])\n )\n\n if (fsExtra.existsSync(filePath)) {\n return filePath\n }\n return\n }\n }\n }\n\n errorFileNotFound(fileName: string, rootDir: string) {\n logger.error(\n `${chalk.red('[Error]')} - Couldn't find ${fileName} at ${rootDir}`\n )\n\n process.exit(1)\n }\n}\n\nconst getQueries = (persistedDocuments: Record<string, string>) => {\n const operationNames: Array<string> = []\n for (const operation of Object.values(persistedDocuments)) {\n let currentNames: Array<string> = []\n const operationAST = parseGraphql(operation)\n const hasMutationDefinition = operationAST.definitions.some(\n (def) =>\n def.kind === Kind.OPERATION_DEFINITION &&\n def.operation === OperationTypeNode.MUTATION\n )\n\n if (hasMutationDefinition) continue\n\n operationAST.definitions.forEach((definition) => {\n if (\n definition.kind === Kind.OPERATION_DEFINITION &&\n definition.operation === OperationTypeNode.QUERY &&\n definition.name?.kind === Kind.NAME &&\n !!definition.name?.value\n ) {\n currentNames.push(definition.name.value)\n return\n }\n })\n\n if (currentNames.length) {\n operationNames.push(...currentNames)\n currentNames = []\n }\n }\n\n return operationNames\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport { FastStoreSDK } from '@vtex/faststore-sdk'\nimport chalk from 'chalk'\nimport dotenv from 'dotenv'\nimport fsExtra from 'fs-extra'\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\nimport { format } from 'prettier'\nimport { checkAndValidateLocalization } from '../utils/config'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { saveFile } from '../utils/file'\nimport { logger } from '../utils/logger'\n\nconst configFileName = 'discovery.config.default.js'\n\nexport default class GenerateI18n extends Command {\n static hidden = true\n\n static flags = {\n config: Flags.string({\n name: 'config',\n description: 'The path where the discovery.config is located',\n }),\n }\n\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n getConfigFile(rootPath?: string) {\n return this.getFile(configFileName, [configFileName])(rootPath)\n }\n\n getFile(fileName: string, pathFromRoot?: string | Array<string>) {\n return (rootPath?: string) => {\n switch (true) {\n case !rootPath:\n return\n case rootPath?.endsWith(fileName) && fsExtra.existsSync(rootPath):\n return rootPath\n case fsExtra.existsSync(path.join(rootPath ?? '', fileName)):\n return path.join(rootPath, fileName)\n default:\n if (!pathFromRoot) return\n\n const filePath = path.join(\n rootPath,\n ...(Array.isArray(pathFromRoot) ? pathFromRoot : [pathFromRoot])\n )\n\n if (fsExtra.existsSync(filePath)) {\n return filePath\n }\n return\n }\n }\n }\n\n errorFileNotFound(fileName: string, rootDir: string) {\n logger.error(\n `${chalk.red('[Error]')} - Couldn't find ${fileName} at ${rootDir}`\n )\n\n process.exit(1)\n }\n\n async run() {\n const { args, flags } = await this.parse(GenerateI18n)\n const rootPath = getBasePath()\n const argPath =\n (args?.path && path.resolve(rootPath, args.path)) || rootPath\n\n // Check if localization is enabled and contentSource is set to CP\n const localizationEnabled = await checkAndValidateLocalization(argPath)\n\n if (!localizationEnabled) {\n return\n }\n\n const vtexEnvPath = path.join(argPath, 'vtex.env')\n if (existsSync(vtexEnvPath)) {\n dotenv.config({ path: vtexEnvPath })\n }\n\n const { VTEX_ACCOUNT, FS_DISCOVERY_APP_KEY, FS_DISCOVERY_APP_TOKEN } =\n process.env\n const hasCredentials =\n VTEX_ACCOUNT && FS_DISCOVERY_APP_KEY && FS_DISCOVERY_APP_TOKEN\n\n if (!hasCredentials) {\n logger.error(`${chalk.red('[Error]')} - Missing VTEX credentials.\\n\n ${chalk.cyan('Required Action:')}\\n\n Check your FastStore WebOps Settings page - to work in production, it should contain the following variables: ${chalk.cyan('VTEX_ACCOUNT')}, ${chalk.cyan('FS_DISCOVERY_APP_KEY')}, ${chalk.cyan('FS_DISCOVERY_APP_TOKEN')}.\\n\n If running locally, please check your ${chalk.bold('vtex.env')} file, it should also contain those variables.\n `)\n\n process.exit(1)\n }\n\n const { tmpDir } = withBasePath(argPath)\n const configPath =\n this.getConfigFile(flags.config && path.resolve(argPath, flags.config)) ||\n this.getConfigFile(tmpDir) ||\n this.getConfigFile(argPath)\n\n if (!configPath) {\n return this.errorFileNotFound(\n configFileName,\n `\\n ${tmpDir}\\n ${argPath}`\n )\n }\n\n const saveConfigFile = saveFile(configPath)\n\n if (fsExtra.pathExistsSync(tmpDir))\n logger.info(`${chalk.blue('[Info]')} - .faststore Path at: ${tmpDir}`)\n\n logger.info(`${chalk.blue('[Info]')} - Config file location: ${configPath}`)\n const discoveryConfig = await import(configPath)\n\n const faststore = new FastStoreSDK({\n account: VTEX_ACCOUNT,\n appKey: FS_DISCOVERY_APP_KEY,\n appToken: FS_DISCOVERY_APP_TOKEN,\n })\n\n const settings = await faststore.locales()\n const currentConfig = discoveryConfig?.default ?? discoveryConfig\n\n saveConfigFile(\n await format(\n `module.exports = ${JSON.stringify(\n {\n ...currentConfig,\n localization: {\n ...(currentConfig?.localization ?? {}),\n ...settings,\n },\n },\n undefined,\n 2\n )}`,\n {\n parser: 'typescript',\n quoteProps: 'as-needed',\n }\n )\n )\n\n logger.info(\n `${chalk.green('success')} - i18n configuration successfully generated 🎉`\n )\n }\n}\n"],"mappings":"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","names":["chalk","spawnSync","existsSync","fsExtra","path","fileURLToPath","existsSync","path","path","existsSync","existsSync","chalk","existsSync","chalk","chalk","fsExtra","path","path","path","basePath","chalk","chalk","fsExtra","path","existsSync","fsExtra","path","copySync","existsSync","readdirSync","writeFileSync","fsExtra","chalk","path","copySync","moveSync","readdirSync","removeSync","fsExtra","chalk","path","fileURLToPath","spawnSync","existsSync","pkg","Args","Command","Flags","path","chalk","fsExtra","readFileSync","existsSync","writeFileSync","mkdirSync","fsExtra","path","chalk","path","Command","Flags","Args","fs","Args","Command","confirm","Args","Command","Flags","chalk","spawn","spawnSync","existsSync","readFileSync","path","fileURLToPath","path","existsSync","readFileSync","chalk","spawn","Command","Args","Flags","fileURLToPath","spawnSync","Args","Command","chalk","fs","path","fs","existsSync","path","Command","Args","chalk","Args","Command","fs","path","fileURLToPath","Command","Args","path","fileURLToPath","fs","Args","Command","spawn","spawnSync","fsExtra","path","existsSync","fsExtra","Command","Args","path","spawnSync","spawn","Args","Command","spawn","chokidar","stabilityThreshold","defaultPatterns","defaultIgnored","spawn","Command","Args","chokidar","path","Args","Command","chalk","Generate","Command","Args","path","chalk","Args","Command","Flags","chalk","path","fsExtra","Kind","configFileName","Command","Flags","Args","chalk","Args","Command","Flags","chalk","dotenv","fsExtra","existsSync","path","configFileName","Command","Flags","Args","fsExtra","path","chalk","existsSync","dotenv","Generate"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/build.ts","../src/utils/commands.ts","../src/utils/config.ts","../src/utils/directory.ts","../src/utils/logger.ts","../src/utils/deprecations.ts","../src/utils/generate.ts","../src/utils/createNextjsPages.ts","../src/utils/templates/myAccountPage.ts","../src/utils/runCommandSync.ts","../src/utils/dependencies.ts","../src/utils/plugins.ts","../src/commands/cms-sync.ts","../src/utils/hcms.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/generate.ts","../src/utils/file.ts","../src/utils/generate-types.ts","../src/commands/prepare.ts","../src/commands/start.ts","../src/commands/test.ts","../src/commands/generate-types.ts","../src/commands/cache-graphql.ts","../src/commands/generate-i18n.ts"],"sourcesContent":["export { run } from '@oclif/core'\n\nimport { default as Build } from './commands/build'\nimport { default as CmsSync } from './commands/cms-sync'\nimport { default as Create } from './commands/create'\nimport { default as Dev } from './commands/dev'\nimport { default as Generate } from './commands/generate'\nimport { default as Prepare } from './commands/prepare'\nimport { default as Serve } from './commands/start'\nimport { default as Test } from './commands/test'\nimport { default as GenerateTypes } from './commands/generate-types'\nimport { default as CacheGraphql } from './commands/cache-graphql'\nimport { default as GenerateI18n } from './commands/generate-i18n'\n\nexport const commands = {\n create: Create,\n prepare: Prepare,\n dev: Dev,\n build: Build,\n serve: Serve,\n 'cms-sync': CmsSync,\n test: Test,\n generate: Generate,\n 'generate-types': GenerateTypes,\n 'cache-graphql': CacheGraphql,\n 'generate-i18n': GenerateI18n,\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport { spawnSync } from 'node:child_process'\nimport { existsSync } from 'node:fs'\nimport fsExtra from 'fs-extra'\nimport path from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getDiscoveryConfig } from '../utils/config'\nimport { checkDeprecatedSecretFiles } from '../utils/deprecations'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { toggleProxyByLocalizationFlag } from '../utils/generate'\nimport { logger } from '../utils/logger'\n\nconst { copySync, moveSync, readdirSync, removeSync } = fsExtra\n\nexport default class Build extends Command {\n static args = {\n account: Args.string({\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n path: Args.string({\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n static flags = {\n ['no-verify']: Flags.boolean({\n description:\n 'Skips verification of faststore dependencies version string to prevent usage of packages outside npm registry.',\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(Build)\n\n const basePath = getBasePath(args.path)\n\n // Check for deprecated secret files\n checkDeprecatedSecretFiles(basePath)\n\n if (!flags['no-verify']) {\n const invalidPackages = await checkDeps(basePath)\n invalidPackages.forEach((pkg) =>\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Dependency ${pkg} has invalid version signature. Please use a semver like ^1.0.0 (check the official releases on https://github.com/vtex/faststore)`\n )\n )\n }\n\n const { tmpDir } = withBasePath(basePath)\n\n const packageManager = await getPreferredPackageManager()\n\n const binCli = path.join(\n fileURLToPath(\n import.meta.resolve('@faststore/cli/runner', import.meta.url)\n )\n )\n let scriptResult = spawnSync('node', [binCli, 'generate', basePath], {\n stdio: 'inherit',\n })\n\n if (scriptResult.error || scriptResult.status !== 0) {\n throw 'Error: Cant run generate' + (scriptResult.error?.message ?? '')\n }\n\n scriptResult = spawnSync('node', [binCli, 'cache-graphql', basePath], {\n stdio: 'inherit',\n })\n\n if (scriptResult.error || scriptResult.status !== 0) {\n throw (\n 'Error: Unable to run cache-graphql' +\n (scriptResult.error?.message ?? '')\n )\n }\n\n // generate-i18n will validate localization config and check if it's enabled\n scriptResult = spawnSync('node', [binCli, 'generate-i18n', basePath], {\n stdio: 'inherit',\n })\n\n if (scriptResult.error || scriptResult.status !== 0) {\n throw (\n 'Error: Unable to run generate-i18n' +\n (scriptResult.error?.message ?? '')\n )\n }\n\n const config = await getDiscoveryConfig(basePath)\n const localizationEnabled = config?.localization?.enabled === true\n toggleProxyByLocalizationFlag(basePath, localizationEnabled)\n\n scriptResult = spawnSync(`${packageManager} run build`, {\n shell: true,\n cwd: tmpDir,\n stdio: 'inherit',\n })\n\n if (scriptResult.status && scriptResult.status !== 0) {\n process.exit(scriptResult.status)\n }\n\n await normalizeStandaloneBuildDir(basePath)\n await copyResources(basePath)\n }\n}\n\nasync function copyResource(from: string, to: string) {\n try {\n if (existsSync(to)) {\n removeSync(to)\n }\n\n copySync(from, to)\n console.log(\n `${chalk.green('success')} - ${chalk.dim(from)} copied to ${chalk.dim(\n to\n )}`\n )\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nasync function normalizeStandaloneBuildDir(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n const isRunningFromMonorepo = process.cwd() !== basePath\n const prefix = isRunningFromMonorepo\n ? `${path.relative(process.cwd(), basePath).replace(/\\\\/g, '/')}/`\n : ''\n\n // Fix Next.js v13+ standalone build output directory\n if (existsSync(`${tmpDir}/.next/standalone/${prefix}.faststore`)) {\n const standaloneBuildFiles = readdirSync(\n `${tmpDir}/.next/standalone/${prefix}.faststore`\n )\n\n await Promise.all(\n standaloneBuildFiles.map((file) =>\n moveSync(\n `${tmpDir}/.next/standalone/${prefix}.faststore/${file}`,\n `${tmpDir}/.next/standalone/${file}`,\n { overwrite: true }\n )\n )\n )\n removeSync(`${tmpDir}/.next/standalone/${prefix}.faststore`)\n }\n}\n\nasync function copyResources(basePath: string) {\n const { tmpDir, userDir } = withBasePath(basePath)\n\n if (process.env.BUILD_CONTEXT === 'vercel') {\n const toDir = process.cwd()\n\n // Because of how copyResource works (delete the target directory if it exists),\n // if we're moving something to the same place it is it will break.\n const nextOutputDirectory = `${tmpDir}/.next`\n const expectedOutputDirectory = `${toDir}/.faststore/.next`\n if (nextOutputDirectory !== expectedOutputDirectory) {\n await copyResource(nextOutputDirectory, expectedOutputDirectory)\n }\n await copyResource(`${tmpDir}/public`, `${toDir}/public`)\n } else {\n await copyResource(`${tmpDir}/.next`, `${userDir}/.next`)\n await copyResource(\n `${tmpDir}/lighthouserc.js`,\n `${userDir}/lighthouserc.js`\n )\n await copyResource(`${tmpDir}/public`, `${userDir}/public`)\n }\n}\n\nasync function checkDeps(basePath: string): Promise<Array<string>> {\n const packageJsonPath = `${basePath}/package.json`\n if (!existsSync(packageJsonPath)) {\n console.log(\n `${chalk.yellow(\n 'warning'\n )} - package.json not found at ${packageJsonPath}`\n )\n }\n\n try {\n const mod = await import(pathToFileURL(packageJsonPath).href, {\n with: { type: 'json' },\n })\n const pkg = (mod.default ?? mod) as {\n devDependencies?: Record<string, string>\n dependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n }\n const {\n devDependencies = {},\n dependencies = {},\n peerDependencies = {},\n } = pkg\n\n const allDeps: Record<string, string> = Object.assign(\n {},\n peerDependencies,\n devDependencies,\n dependencies\n )\n\n const invalidPackages: Array<string> = []\n\n Object.entries(allDeps).forEach(([pkg, version]) => {\n if (/^@faststore\\/.+/i.test(pkg) === false) return\n\n if (version && /^(http|https|git):.+/.test(version) === true) {\n invalidPackages.push(pkg)\n }\n })\n\n return invalidPackages\n } catch (err) {\n console.log(\n `${chalk.yellow('warning')} - unable to check @faststore dependencies: ${err}`\n )\n\n return []\n }\n}\n","import fsExtra from 'fs-extra'\nimport { spawnSync } from 'node:child_process'\nimport { join } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport resolvePackage from 'resolve-pkg'\n\nconst { existsSync } = fsExtra\n\n// Retrieves the package manager based on the developer lockfile, using `ni`.\nexport async function getPreferredPackageManager() {\n let agent = 'yarn' // Default to Yarn\n const binNA = join(\n await getPackageRootDir('@antfu/ni'),\n (await getDepPackageJSON('@antfu/ni'))?.bin?.['na'] ?? ''\n )\n\n if (!binNA || fsExtra.existsSync(binNA) == false) return agent\n\n agent = spawnSync('node', [binNA, '?'], { encoding: 'utf-8' })?.stdout.trim()\n\n return agent\n}\n\nexport async function getPackageRootDir(\n pkg: string,\n cwd: string | undefined = process.cwd(),\n depth = 30\n) {\n let pkgPath = resolvePackage(pkg, { cwd })\n\n if (!pkgPath) throw new Error(`Couldn't resolve package ${pkg}`)\n\n let pkgJson = await loadPackageJsonAt(pkgPath)\n while (pkgJson?.name !== pkg && --depth > 0) {\n pkgPath = join(pkgPath, '..')\n pkgJson = await loadPackageJsonAt(join(pkgPath, '..'))\n }\n\n if (pkgJson?.name !== pkg)\n throw new Error(`Maximum depth search for package ${pkg} root exceed`)\n\n return pkgPath\n}\n\nasync function loadPackageJsonAt(at?: string): Promise<\n | undefined\n | (Record<string, unknown> & {\n name: string\n dependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n bin?: Record<string, string>\n })\n> {\n const file = 'package.json',\n location = (at?.endsWith(file) && at) || (at && join(at, file)) || false\n\n if (location === false)\n throw new Error(`Invalid searching of ${file} at ${at}`)\n\n if (!existsSync(location)) return\n\n const content = await import(pathToFileURL(location).href, {\n with: { type: 'json' },\n })\n\n return content.default ?? content ?? {}\n}\n\nexport async function getDepPackageJSON(pkg: string) {\n return await loadPackageJsonAt(await getPackageRootDir(pkg))\n}\n","import chalk from 'chalk'\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport { pathToFileURL } from 'node:url'\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\n\nconst configFileName = 'discovery.config.js'\n\n/**\n * Partial type for discovery config with only the properties used by this module\n */\ntype DiscoveryConfigSubset = {\n localization?: {\n enabled?: boolean\n }\n contentSource?: {\n type?: string\n }\n}\n\n/**\n * Reads and returns the discovery config from tmpDir or basePath.\n *\n * @param basePath - The base path where the FastStore is located\n * @returns Promise<DiscoveryConfigSubset | null> - The config object or null if not found\n */\nexport async function getDiscoveryConfig(\n basePath: string\n): Promise<DiscoveryConfigSubset | null> {\n const { tmpDir } = withBasePath(basePath)\n const configPaths = [\n path.join(tmpDir, configFileName),\n path.join(basePath, configFileName),\n ]\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n try {\n const discoveryConfig = await import(pathToFileURL(configPath).href)\n return discoveryConfig?.default ?? discoveryConfig\n } catch (error) {\n logger.warn(\n `${chalk.yellow('warning')} - Could not read config file: ${configPath}.`\n )\n }\n }\n }\n\n return null\n}\n\n/**\n * Checks if localization feature is enabled in the discovery config.\n *\n * @param config - The discovery config object\n * @returns boolean - true if localization.enabled === true, false otherwise\n */\nfunction isLocalizationEnabled(config: DiscoveryConfigSubset): boolean {\n return config?.localization?.enabled === true\n}\n\n/**\n * Validates if contentSource is set to \"CP\" when localization is enabled.\n * Exits the process with an error message if validation fails.\n *\n * @param config - The discovery config object\n */\nfunction validateContentSourceForLocalization(\n config: DiscoveryConfigSubset\n): void {\n if (!isLocalizationEnabled(config)) {\n return\n }\n\n const currentContentSourceType = config?.contentSource?.type?.toUpperCase()\n\n if (currentContentSourceType !== 'CP') {\n logger.error(\n `\\n${chalk.red('[Error]')} - Localization is enabled but contentSource is set to \"${currentContentSourceType}\".\\n\\n` +\n `${chalk.cyan('Required Action:')}\\n` +\n `Update your ${chalk.bold('discovery.config.js')} file:\\n\\n` +\n ` contentSource: {\\n` +\n ` type: ${chalk.green('\"CP\"')}\\n` +\n ` },\\n\\n` +\n `${chalk.dim('When localization is enabled, Content Platform (CP) is required.')}\\n`\n )\n\n process.exit(1)\n }\n}\n\n/**\n * Checks localization status and validates configuration.\n * Reads the config file once and performs both checks.\n *\n * @param basePath - The base path where the FastStore is located\n * @returns Promise<boolean> - true if localization is enabled and valid, false otherwise\n */\nexport async function checkAndValidateLocalization(\n basePath: string\n): Promise<boolean> {\n const config = await getDiscoveryConfig(basePath)\n\n // If we can't read the config, default to false (backward compatibility)\n if (!config) {\n return false\n }\n\n validateContentSourceForLocalization(config)\n\n return isLocalizationEnabled(config)\n}\n","import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport const getBasePath = (basePath?: string) => {\n if (basePath) {\n return path.resolve(basePath)\n }\n\n return process.cwd()\n}\n\nexport const withBasePath = (basepath: string) => {\n const tmpFolderName = '.faststore'\n\n // The basepath is where the discovery code is. It's either . or the path configured on faststore.json\n const getRoot = () => basepath\n\n /*\n * This will loop from the basepath until the process.cwd() looking for node_modules/@faststore/core\n *\n * If it reaches process.cwd() (or /, as a safeguard), without finding it, it will throw an exception\n */\n const getCorePackagePath = () =>\n path.dirname(\n fileURLToPath(import.meta.resolve('@faststore/core', import.meta.url))\n )\n\n const customizationsDir = getRoot()\n const tmpDir = path.join(getRoot(), tmpFolderName)\n const userSrcDir = path.join(customizationsDir, 'src')\n const getPackagePath = (...packagePath: string[]) =>\n path.join(customizationsDir, 'node_modules', ...packagePath)\n\n return {\n getRoot,\n getPackagePath,\n userDir: customizationsDir,\n userSrcDir,\n userThemesFileDir: path.join(userSrcDir, 'themes'),\n userCMSDir: path.join(customizationsDir, 'cms', 'faststore'),\n userLegacyStoreConfigFile: path.join(\n customizationsDir,\n 'faststore.config.js'\n ),\n userStoreConfigFile: path.join(customizationsDir, 'discovery.config.js'),\n\n tmpSeoConfig: path.join(tmpDir, 'next-seo.config.ts'),\n tmpFolderName,\n tmpDir,\n tmpCustomizationsSrcDir: path.join(tmpDir, 'src', 'customizations', 'src'),\n tmpThemesCustomizationsFile: path.join(\n tmpDir,\n 'src',\n 'customizations',\n 'src',\n 'themes',\n 'index.scss'\n ),\n tmpThemesPluginsFile: path.join(tmpDir, 'src', 'plugins', 'index.scss'),\n tmpCMSDir: (projectName = 'faststore') =>\n path.join(tmpDir, 'cms', projectName),\n tmpCMSWebhookUrlsFile: path.join(tmpDir, 'cms-webhook-urls.json'),\n tmpPagesDir: path.join(tmpDir, 'src', 'pages'),\n tmpApiDir: path.join(tmpDir, 'src', 'pages', 'api'),\n tmpPluginsDir: path.join(tmpDir, 'src', 'plugins'),\n tmpStoreConfigFile: path.join(\n tmpDir,\n 'src',\n 'customizations',\n 'discovery.config.js'\n ),\n\n coreDir: getCorePackagePath(),\n coreCMSDir: path.join(getCorePackagePath(), 'cms', 'faststore'),\n }\n}\n","export const logger = new Proxy(console, {\n get(target, prop: keyof Console) {\n if (prop === 'log') {\n return (...args: any[]) => {\n if (process.env.DISCOVERY_DEBUG === 'true') {\n target.log(...args)\n }\n }\n }\n return target[prop]\n },\n})\n","import { existsSync } from 'node:fs'\nimport chalk from 'chalk'\nimport { logger } from './logger'\n\n/**\n * Checks for the presence of deprecated secret files and logs a warning if found.\n *\n * @param basePath The base path where to look for the secret files\n */\nexport function checkDeprecatedSecretFiles(basePath: string) {\n const secretsFilePath = `${basePath}/secrets.hidden.json`\n const vtexEnvFilePath = `${basePath}/vtex.env`\n\n const secretsFileExists = existsSync(secretsFilePath)\n const vtexEnvFileExists = existsSync(vtexEnvFilePath)\n\n if (secretsFileExists || vtexEnvFileExists) {\n const filesFound = [\n secretsFileExists ? 'secrets.hidden.json' : null,\n vtexEnvFileExists ? 'vtex.env' : null,\n ]\n .filter(Boolean)\n .join(' and ')\n\n logger.warn(\n `${chalk.yellow('warning')} - Deprecated secret files detected: ${chalk.bold(filesFound)}\\n` +\n `Note: 'vtex.env' should only be used for local development and not in production.\\n` +\n `For production environments, please configure your secrets directly in the FastStore WebOps Settings page.`\n )\n logger.log('') // Add empty line for better readability\n }\n}\n","import chalk from 'chalk'\nimport fsExtra from 'fs-extra'\n\nimport path from 'node:path'\n\nimport ora from 'ora'\n\nimport { pathToFileURL } from 'node:url'\nimport { createNextJsPages } from './createNextjsPages'\nimport { installDependencies } from './dependencies'\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\nimport { installPlugins } from './plugins'\n\nconst {\n copyFileSync,\n copySync,\n existsSync,\n mkdirsSync,\n moveSync,\n readFileSync,\n readdirSync,\n removeSync,\n writeFileSync,\n writeJsonSync,\n} = fsExtra\ninterface GenerateOptions {\n setup?: boolean\n basePath: string\n}\n\n// package.json is copied manually after filtering its content\nconst ignorePaths = [\n 'package.json',\n 'node_modules',\n 'cypress.config.ts',\n 'base.jsonc', // CP special file, it must not be copied to the merchants' temp dir\n]\n\nfunction createTmpFolder(basePath: string) {\n const { tmpDir, tmpFolderName } = withBasePath(basePath)\n\n try {\n if (existsSync(tmpDir)) {\n removeSync(tmpDir)\n }\n\n mkdirsSync(tmpDir)\n logger.log(\n `${chalk.green('success')} - Temporary folder ${chalk.dim(\n tmpFolderName\n )} created`\n )\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\n/**\n * Prevents imports from @faststore/core from randomly conflicting\n * where sometimes the package.json from the .faststore folder\n * took precedence over @faststore/core's package.json.\n */\nfunction filterAndCopyPackageJson(basePath: string) {\n const { coreDir, tmpDir } = withBasePath(basePath)\n\n const { exports: _, ...filteredFileContent } = JSON.parse(\n readFileSync(path.join(coreDir, 'package.json'), 'utf8')\n )\n\n filteredFileContent.name = 'dot-faststore'\n filteredFileContent.scripts = {\n ...filteredFileContent.scripts,\n generate: 'faststore generate',\n build: 'next build --webpack',\n serve: 'next serve',\n dev: 'next dev --webpack',\n 'dev-only': 'next dev --webpack',\n predev: 'na run partytown',\n prebuild: 'na run partytown',\n }\n\n writeJsonSync(path.join(tmpDir, 'package.json'), filteredFileContent, {\n spaces: 2,\n })\n}\n\n// Temporary array of strict rules enabled so far.\nconst TS_CONFIG_STRICT_RULES_ENABLED = ['noImplicitAny'] as const\n\n/**\n * Modify TypeScript compilation settings (tsconfig.json) to disable specific strict\n * type checking rules when files are moved to the .faststore folder.\n * TODO: The idea is to change the strict to false when all strict rules are migrated.\n */\nfunction disableTsConfigStrictRules(basePath: string) {\n const { coreDir, tmpDir } = withBasePath(basePath)\n\n const coreTsConfigPath = path.join(coreDir, 'tsconfig.json')\n\n const coreTsConfigFile = readFileSync(coreTsConfigPath, 'utf8')\n const tsConfig = JSON.parse(coreTsConfigFile)\n\n TS_CONFIG_STRICT_RULES_ENABLED.forEach((strictRule) => {\n tsConfig.compilerOptions[strictRule] = false\n })\n\n writeJsonSync(path.join(tmpDir, 'tsconfig.json'), tsConfig, {\n spaces: 2,\n })\n}\n\nfunction copyCoreFiles(basePath: string) {\n const { coreDir, tmpDir } = withBasePath(basePath)\n\n try {\n copySync(coreDir, tmpDir, {\n dereference: true,\n filter(src) {\n const fileOrDirName = path.basename(src)\n const shouldCopy = fileOrDirName\n ? !ignorePaths.includes(fileOrDirName)\n : true\n\n return shouldCopy\n },\n })\n\n filterAndCopyPackageJson(basePath)\n disableTsConfigStrictRules(basePath)\n\n logger.log(`${chalk.green('success')} - Core files copied`)\n } catch (e) {\n logger.error(e)\n }\n}\n\nfunction copyPublicFiles(basePath: string) {\n const { userDir, tmpDir } = withBasePath(basePath)\n\n const allowList = ['json', 'txt', 'xml', 'ico', 'public', 'svg']\n try {\n if (existsSync(`${userDir}/public`)) {\n copySync(`${userDir}/public`, `${tmpDir}/public`, {\n dereference: true,\n overwrite: true,\n filter: (src) => {\n const allow = allowList.some((ext) => src.endsWith(ext))\n\n return allow\n },\n })\n logger.log(`${chalk.green('success')} - Public files copied`)\n }\n } catch (e) {\n logger.error(e)\n }\n}\n\nasync function copyCypressFiles(basePath: string) {\n const { userDir, userStoreConfigFile, userLegacyStoreConfigFile, tmpDir } =\n withBasePath(basePath)\n\n try {\n // Cypress 9.x config file\n if (existsSync(`${userDir}/cypress.json`)) {\n copySync(`${userDir}/cypress.json`, `${tmpDir}/cypress.json`, {\n dereference: true,\n })\n }\n\n // Cypress 12.x config file\n if (existsSync(`${userDir}/cypress.config.ts`)) {\n copySync(`${userDir}/cypress.config.ts`, `${tmpDir}/cypress.config.ts`, {\n dereference: true,\n })\n }\n\n let userStoreConfig\n\n if (existsSync(userStoreConfigFile)) {\n userStoreConfig = (\n await import(pathToFileURL(path.resolve(userStoreConfigFile)).href)\n )?.default\n } else if (existsSync(userLegacyStoreConfigFile)) {\n userStoreConfig = (\n await import(\n pathToFileURL(path.resolve(userLegacyStoreConfigFile)).href\n )\n )?.default\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n // Copy custom Cypress folder and files\n if (\n existsSync(`${userDir}/cypress`) &&\n userStoreConfig?.experimental?.enableCypressExtension\n ) {\n copySync(`${userDir}/cypress`, `${tmpDir}/cypress`, {\n overwrite: true,\n dereference: true,\n })\n\n logger.log(`${chalk.green('success')} - Cypress test files copied`)\n }\n\n // Create default Cypress 12.x (or superior) support file\n if (userStoreConfig?.experimental?.cypressVersion > 9) {\n copySync(\n `${tmpDir}/cypress/support/index.js`,\n `${tmpDir}/cypress/support/e2e.js`,\n { overwrite: false }\n )\n }\n } catch (e) {\n logger.error(e)\n }\n}\n\nfunction copyUserStarterToCustomizations(basePath: string) {\n const {\n userSrcDir,\n tmpCustomizationsSrcDir,\n userLegacyStoreConfigFile,\n userStoreConfigFile,\n tmpStoreConfigFile,\n } = withBasePath(basePath)\n\n try {\n if (existsSync(userSrcDir) && readdirSync(userSrcDir).length > 0) {\n copySync(userSrcDir, tmpCustomizationsSrcDir, { dereference: true })\n createNextJsPages(basePath)\n }\n\n if (existsSync(userStoreConfigFile)) {\n copySync(userStoreConfigFile, tmpStoreConfigFile, { dereference: true })\n } else if (existsSync(userLegacyStoreConfigFile)) {\n copySync(userLegacyStoreConfigFile, tmpStoreConfigFile, {\n dereference: true,\n })\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n logger.log(`${chalk.green('success')} - Starter files copied`)\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nasync function createCmsWebhookUrlsJsonFile(basePath: string) {\n const {\n userStoreConfigFile,\n userLegacyStoreConfigFile,\n tmpCMSWebhookUrlsFile,\n } = withBasePath(basePath)\n let userStoreConfig\n\n if (existsSync(userStoreConfigFile)) {\n userStoreConfig = (\n await import(pathToFileURL(path.resolve(userStoreConfigFile)).href)\n )?.default\n } else if (existsSync(userLegacyStoreConfigFile)) {\n userStoreConfig = (\n await import(pathToFileURL(path.resolve(userLegacyStoreConfigFile)).href)\n )?.default\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n if (\n userStoreConfig?.vtexHeadlessCms &&\n userStoreConfig.vtexHeadlessCms?.webhookUrls\n ) {\n const { webhookUrls } = userStoreConfig?.vtexHeadlessCms\n\n try {\n writeJsonSync(tmpCMSWebhookUrlsFile, { urls: webhookUrls }, { spaces: 2 })\n logger.log(`${chalk.green('success')} - CMS webhook URLs file created`)\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n } else {\n logger.info(`${chalk.blue('info')} - No CMS webhook URLs were provided`)\n }\n}\n\nasync function copyTheme(basePath: string) {\n const {\n userStoreConfigFile,\n userThemesFileDir,\n tmpThemesCustomizationsFile,\n userLegacyStoreConfigFile,\n } = withBasePath(basePath)\n\n const storeConfigFile =\n (existsSync(userStoreConfigFile) && userStoreConfigFile) ||\n (existsSync(userLegacyStoreConfigFile) && userLegacyStoreConfigFile)\n\n const userStoreConfigFilePath =\n storeConfigFile && path.resolve(storeConfigFile)\n const importedStoreConfig =\n userStoreConfigFilePath &&\n (await import(pathToFileURL(userStoreConfigFilePath).href))\n const storeConfig =\n userStoreConfigFilePath &&\n (importedStoreConfig?.default || importedStoreConfig)\n\n if (!storeConfig)\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n\n if (storeConfig.theme) {\n const customTheme = path.join(\n userThemesFileDir,\n `${storeConfig.theme}.scss`\n )\n if (existsSync(customTheme)) {\n try {\n copyFileSync(customTheme, tmpThemesCustomizationsFile)\n logger.log(\n `${chalk.green('success')} - ${\n storeConfig.theme\n } theme has been applied`\n )\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n } else {\n logger.info(\n `${chalk.blue('info')} - The ${\n storeConfig.theme\n } theme was added to the config file but the ${\n storeConfig.theme\n }.scss file does not exist in the themes folder. Read more: https://developers.vtex.com/docs/guides/faststore/themes-overview`\n )\n }\n } else if (\n existsSync(userThemesFileDir) &&\n readdirSync(userThemesFileDir).length > 0\n ) {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - The theme needs to be added to the config file to be applied. Read more: https://www.faststore.dev/docs/themes/overview`\n )\n }\n}\n\nfunction updateBuildTime(basePath: string) {\n try {\n const { tmpSeoConfig } = withBasePath(basePath)\n let config = readFileSync(tmpSeoConfig, 'utf8')\n const newBuildTime = new Date().toISOString()\n\n config = config.replace(\n /const buildTime = .*?;/,\n `const buildTime = '${newBuildTime}';`\n )\n\n writeFileSync(tmpSeoConfig, config)\n\n logger.log(`${chalk.green('success')} - Build time updated`, newBuildTime)\n } catch (error) {\n logger.error(`${chalk.red('error')} - Updating build time:`, error)\n }\n}\n\nasync function checkDependencies(basePath: string, packagesToCheck: string[]) {\n const { coreDir, getRoot } = withBasePath(basePath)\n\n const corePackageJsonPath = path.join(coreDir, 'package.json')\n const rootPackageJsonPath = path.join(getRoot(), 'package.json')\n\n const { default: corePackageJson } = await import(\n pathToFileURL(corePackageJsonPath).href,\n {\n with: { type: 'json' },\n }\n )\n const { default: rootPackageJson } = await import(\n pathToFileURL(rootPackageJsonPath).href,\n {\n with: { type: 'json' },\n }\n )\n\n packagesToCheck.forEach((packageName) => {\n const coreVersion =\n corePackageJson.devDependencies[packageName] ||\n corePackageJson.dependencies[packageName]\n const rootVersion =\n rootPackageJson.devDependencies[packageName] ||\n rootPackageJson.dependencies[packageName]\n\n if (!coreVersion || !rootVersion) {\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Package ${packageName} not found in both core or root dependencies.`\n )\n } else if (coreVersion !== rootVersion) {\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Version mismatch detected for ${packageName}.\n Core: ${coreVersion}, Customization: ${rootVersion}. Please align both versions to prevent issues`\n )\n }\n })\n}\n\nfunction updateNextConfig(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n\n const nextConfigPath = path.join(tmpDir, 'next.config.js')\n\n let nextConfigData = String(readFileSync(nextConfigPath))\n nextConfigData = nextConfigData.replace(\n /outputFileTracingRoot\\:\\s+(.*),/,\n `outputFileTracingRoot: '${process.cwd()}',`\n )\n\n writeFileSync(nextConfigPath, nextConfigData)\n}\n\n// returns new (discovery.config.js) or legacy (faststore.config.js) store config file\nfunction getCurrentUserStoreConfigFile(basePath: string) {\n const { userStoreConfigFile, userLegacyStoreConfigFile } =\n withBasePath(basePath)\n\n if (existsSync(userStoreConfigFile)) {\n return userStoreConfigFile\n }\n\n if (existsSync(userLegacyStoreConfigFile)) {\n return userLegacyStoreConfigFile\n }\n\n return null\n}\n\nasync function validateAndInstallMissingDependencies(basePath: string) {\n const { userDir } = withBasePath(basePath)\n\n const currentUserStoreConfigFile = getCurrentUserStoreConfigFile(basePath)\n\n if (!currentUserStoreConfigFile) {\n return\n }\n\n const { default: userStoreConfig } = await import(\n pathToFileURL(currentUserStoreConfigFile).href\n )\n const { default: userPackageJson } = await import(\n pathToFileURL(path.join(userDir, 'package.json')).href,\n {\n with: { type: 'json' },\n }\n )\n\n const missingDependencies: Array<{\n feature: string\n dependencies: string[]\n }> = []\n\n if (userStoreConfig?.experimental?.preact) {\n missingDependencies.push({\n feature: 'Preact',\n dependencies: ['preact@10.23.1', 'preact-render-to-string@6.5.8'],\n })\n }\n\n missingDependencies.forEach(async ({ feature, dependencies }) => {\n const dependenciesToInstall = dependencies.filter((dependency) => {\n const dependencyName = dependency.split('@')[0]\n return !userPackageJson.dependencies[dependencyName]\n })\n\n if (dependenciesToInstall.length > 0) {\n const spinner = ora(\n `Installing ${feature} missing dependencies\\n`\n ).start()\n\n await installDependencies({\n dependencies: dependenciesToInstall,\n cwd: userDir,\n errorMessage: `failed to install ${feature} dependencies`,\n })\n\n spinner.stop()\n }\n })\n}\n\nconst DISABLED_PROXY_FILENAME = 'proxy__DISABLED.ts'\n\n/**\n * Toggle proxy based on localization feature flag (localization.enabled) in discovery config.\n * When flag is off: renames proxy.ts → proxy__DISABLED.ts so Next.js does not run it.\n * When flag is on: renames proxy__DISABLED.ts → proxy.ts so Next.js runs it.\n */\nexport function toggleProxyByLocalizationFlag(\n basePath: string,\n localizationEnabled: boolean\n): void {\n try {\n const { tmpDir } = withBasePath(basePath)\n const proxyPath = path.join(tmpDir, 'src', 'proxy.ts')\n const disabledPath = path.join(tmpDir, 'src', DISABLED_PROXY_FILENAME)\n\n const shouldEnableProxy = existsSync(disabledPath) && !existsSync(proxyPath)\n const shouldDisableProxy = existsSync(proxyPath)\n\n if (localizationEnabled && shouldEnableProxy) {\n moveSync(disabledPath, proxyPath)\n } else if (!localizationEnabled && shouldDisableProxy) {\n moveSync(proxyPath, disabledPath)\n }\n } catch (error) {\n logger.error(error)\n throw error\n }\n}\n\nasync function enableSearchSSR(basePath: string) {\n const storeConfigPath = getCurrentUserStoreConfigFile(basePath)\n\n if (!storeConfigPath) {\n return\n }\n const { default: storeConfig } = await import(\n pathToFileURL(storeConfigPath).href\n )\n if (!storeConfig.experimental.enableSearchSSR) {\n return\n }\n\n const { tmpDir } = withBasePath(basePath)\n const searchPagePath = path.join(tmpDir, 'src', 'pages', 's.tsx')\n const searchPageData = String(readFileSync(searchPagePath))\n\n const searchPageWithSSR = searchPageData.replaceAll(\n 'getStaticProps',\n 'getServerSideProps'\n )\n\n writeFileSync(searchPagePath, searchPageWithSSR)\n}\n\nexport async function generate(options: GenerateOptions) {\n const { basePath, setup = false } = options\n\n let setupPromise: Promise<unknown> | null = null\n\n await validateAndInstallMissingDependencies(basePath)\n\n if (setup) {\n setupPromise = Promise.all([\n createTmpFolder(basePath),\n copyCoreFiles(basePath),\n copyCypressFiles(basePath),\n copyPublicFiles(basePath),\n updateNextConfig(basePath),\n ])\n }\n\n await Promise.all([\n setupPromise,\n checkDependencies(basePath, ['typescript']),\n enableSearchSSR(basePath),\n updateBuildTime(basePath),\n copyUserStarterToCustomizations(basePath),\n copyTheme(basePath),\n createCmsWebhookUrlsJsonFile(basePath),\n installPlugins(basePath),\n ])\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { withBasePath } from './directory'\nimport { myAccountPageTemplate } from './templates/myAccountPage'\n\nconst ALLOWED_PREFIX_PAGES = ['/pvt/account']\n\ntype CreateExternalPagesArgs = {\n customizationPagesDir: string\n corePagesDir: string\n baseCustomizationPagesDir: string\n}\n\nconst createExternalPages = ({\n customizationPagesDir,\n corePagesDir,\n baseCustomizationPagesDir,\n}: CreateExternalPagesArgs) => {\n fs.readdirSync(customizationPagesDir).forEach((file) => {\n const filePath = path.join(customizationPagesDir, file)\n const destinationPath = path.join(corePagesDir, file)\n if (fs.statSync(filePath).isDirectory()) {\n if (!fs.existsSync(destinationPath)) {\n fs.mkdirSync(destinationPath, { recursive: true })\n }\n return createExternalPages({\n customizationPagesDir: filePath,\n corePagesDir: destinationPath,\n baseCustomizationPagesDir,\n })\n }\n\n const isReactFile = filePath.endsWith('.tsx')\n\n /* Checks if the destination path does not exist as a file or as a folder containing an \"index.tsx\" file.\n * This ensures that the path is available before proceeding with file creation or other operations.\n */\n const isDestinationAvailable =\n !fs.existsSync(destinationPath) &&\n !fs.existsSync(\n path.join(destinationPath.replace('.tsx', ''), 'index.tsx')\n )\n\n if (isReactFile && isDestinationAvailable) {\n const externalPagePath = `src/customizations/src/pages${filePath.replace(baseCustomizationPagesDir, '').replace('.tsx', '')}`\n const content = myAccountPageTemplate(externalPagePath)\n fs.writeFileSync(destinationPath, content)\n }\n })\n}\n\nfunction isAllowedPrefixPage(file: string) {\n return ALLOWED_PREFIX_PAGES.some((prefix) => file.startsWith(prefix))\n}\n\nexport function createNextJsPages(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n\n const corePagesDir = path.join(tmpDir, 'src/pages')\n const customizationPagesDir = path.join(\n tmpDir,\n 'src/customizations/src/pages'\n )\n\n if (!fs.existsSync(customizationPagesDir)) {\n // If the customization pages directory doesn't exist, we don't need to create any pages\n // and we can return early.\n return\n }\n\n const allPagesAreAllowed = ({\n basePath,\n dirPath,\n }: { basePath: string; dirPath: string }): boolean => {\n const items = fs.readdirSync(dirPath, { withFileTypes: true })\n\n return items.every((item) => {\n const itemPath = path.join(dirPath, item.name)\n\n if (item.isDirectory()) {\n return allPagesAreAllowed({ basePath, dirPath: itemPath })\n }\n\n if (!item.isFile()) {\n return false // Reject anything that is not a file (symlinks, sockets, etc.)\n }\n\n const isNextPage = /\\.(js|jsx|ts|tsx)$/.test(item.name)\n if (!isNextPage) {\n return false // Reject files that are not Next.js pages\n }\n\n // For Next.js page files, check if they match allowed prefixes\n const relativePath = path.relative(basePath, itemPath)\n const normalizedPath =\n '/' + relativePath.replace(/\\\\/g, '/').replace(/\\.(js|jsx|ts|tsx)$/, '')\n\n return isAllowedPrefixPage(normalizedPath)\n })\n }\n\n const pagesAreAllowed = allPagesAreAllowed({\n basePath: customizationPagesDir,\n dirPath: customizationPagesDir,\n })\n\n if (!pagesAreAllowed) {\n throw new Error(\n `Only these prefix pages: (${ALLOWED_PREFIX_PAGES.join(', ')}) are allowed`\n )\n }\n\n createExternalPages({\n customizationPagesDir,\n corePagesDir,\n baseCustomizationPagesDir: customizationPagesDir,\n })\n}\n","/*\n TODO: Code in a template string is not a good practice because it becomes very difficult to maintain.\n There will be a component called MyAccountLayout that will wrap the entire MyAccount Layout, including the global sections, menu, etc.\n This will reduce the amount of code inside the template string.\n*/\n\nexport const myAccountPageTemplate = (pagePath: string) => `\n import type { ComponentType } from 'react'\n import RenderSections from 'src/components/cms/RenderSections'\n import { default as GLOBAL_COMPONENTS } from 'src/components/cms/global/Components'\n import CUSTOM_COMPONENTS from 'src/customizations/src/components'\n import { MyAccountLayout } from 'src/components/account'\n import {\n getServerSideProps,\n type MyAccountProps,\n } from 'src/experimental/myAccountServerSideProps'\n import DynamicPage from '${pagePath}';\n import PageProvider from 'src/sdk/overrides/PageProvider'\n /* A list of components that can be used in the CMS. */\n const COMPONENTS: Record<string, ComponentType<any>> = {\n ...GLOBAL_COMPONENTS,\n ...CUSTOM_COMPONENTS,\n }\n\n function Page({ globalSections: globalSectionsProp, accountName, isRepresentative }: MyAccountProps) {\n const { sections: globalSections, settings: globalSettings } = globalSectionsProp ?? {}\n\n return (\n <PageProvider context={{ globalSettings }}>\n <RenderSections\n globalSections={globalSections}\n components={COMPONENTS}\n >\n <MyAccountLayout accountName={accountName} isRepresentative={isRepresentative}>\n <DynamicPage />\n </MyAccountLayout>\n </RenderSections>\n </PageProvider>\n )\n }\n\n export { getServerSideProps }\n\n export default Page\n`\n","import chalk from 'chalk'\nimport type { ChildProcess, ExecException } from 'node:child_process'\nimport { execSync } from 'node:child_process'\nimport { logger } from './logger'\n\ntype ExecSyncError = (ExecException & ChildProcess) | undefined\n\nconst showError = ({\n message,\n cmd,\n error,\n}: {\n message: string\n cmd: string\n error: ExecSyncError\n}) => {\n logger.error(`${chalk.red('error')} - ${message}`)\n\n if (cmd && error) {\n logger.log(\n `${chalk.magenta('DEBUG')} - $ ${JSON.stringify(cmd, null, 2)} error root ↓`\n )\n logger.log(error.stdout?.toString())\n }\n\n process.exit(1)\n}\n\nconst showWarning = ({\n message,\n cmd,\n error,\n}: {\n message: string\n cmd: string\n error: ExecSyncError\n}) => {\n logger.warn(`${chalk.yellow('warn')} - ${message}`)\n\n if (cmd && error) {\n logger.log(\n `${chalk.magenta('DEBUG')} - $ ${JSON.stringify(cmd, null, 2)} warn root ↓`\n )\n logger.log(error.stdout?.toString())\n }\n}\n\nexport const runCommandSync = ({\n cmd,\n errorMessage,\n throws,\n cwd,\n}: {\n cmd: string\n errorMessage: string\n throws: 'warning' | 'error'\n cwd?: string\n}) => {\n const debug = process.env.DISCOVERY_DEBUG === 'true' ? true : false\n\n try {\n logger.log(`[STARTED] ${cmd}`)\n\n const res = execSync(\n debug ? `${cmd} --debug --verbose 2>&1` : `${cmd} 2>&1`,\n {\n stdio: 'pipe',\n cwd,\n }\n )\n logger.log(`[STATUS] ${res?.toString() ?? 'Unknown'}`)\n logger.log(`[FINISHED] ${cmd}`)\n } catch (error) {\n const sanitizedError = debug ? (error as ExecSyncError) : undefined\n\n if (throws === 'warning') {\n showWarning({ message: errorMessage, cmd, error: sanitizedError })\n } else {\n showError({ message: errorMessage, cmd, error: sanitizedError })\n }\n }\n}\n","import { getPreferredPackageManager } from './commands'\nimport { runCommandSync } from './runCommandSync'\n\ntype InstallDependenciesOptions = {\n dependencies: string[]\n cwd: string\n errorMessage: string\n}\n\nexport async function installDependencies({\n dependencies,\n cwd,\n errorMessage,\n}: InstallDependenciesOptions) {\n const packageManager = await getPreferredPackageManager()\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n runCommandSync({\n cmd: `${packageManager} ${installCommand} ${dependencies.join(' ')}`,\n errorMessage,\n throws: 'error',\n cwd,\n })\n}\n","import fsExtra from 'fs-extra'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\n\nconst { copySync, existsSync, mkdirSync, readdirSync, writeFileSync } = fsExtra\n\nexport type PageConfig = {\n path: string\n appLayout: boolean\n name: string\n}\n\nexport type APIConfig = {\n path: string\n}\n\nexport type PluginConfig = {\n pages?: { [pageName: string]: Partial<PageConfig> }\n apis?: { [pageName: string]: Partial<APIConfig> }\n}\n\nexport type Plugin =\n | string\n | {\n [pluginName: string]: PluginConfig\n }\n\nconst PLUGIN_CONFIG_FILE = 'plugin.config.js'\n\nconst sanitizePluginName = (pluginName: string, pascalCase = false) => {\n const sanitized = pluginName.split('/')[1]\n\n if (pascalCase) {\n return sanitized\n .toLowerCase()\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n }\n\n return sanitized\n}\n\nexport const getPluginName = (plugin: Plugin) => {\n if (typeof plugin === 'string') {\n return plugin\n }\n\n return Object.keys(plugin)[0]\n}\n\nconst getPluginCustomConfig = (plugin: Plugin) => {\n if (typeof plugin === 'string') {\n return {}\n }\n\n return plugin[getPluginName(plugin)]\n}\n\nconst getPluginSrcPath = async (basePath: string, pluginName: string) => {\n const { getPackagePath } = withBasePath(basePath)\n return getPackagePath(pluginName, 'src')\n}\n\nexport const getPluginsList = async (basePath: string): Promise<Plugin[]> => {\n const { tmpStoreConfigFile } = withBasePath(basePath)\n\n try {\n const {\n default: { plugins = [] },\n } = await import(pathToFileURL(tmpStoreConfigFile).href)\n return plugins\n } catch (error) {\n logger.error(`Could not load plugins from store config`)\n }\n\n return []\n}\n\nconst copyPluginsSrc = async (basePath: string, plugins: Plugin[]) => {\n const { tmpPluginsDir } = withBasePath(basePath)\n\n logger.log('Copying plugins files')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginSrcPath = await getPluginSrcPath(\n basePath,\n getPluginName(pluginName)\n )\n const pluginDestPath = path.join(\n tmpPluginsDir,\n sanitizePluginName(pluginName)\n )\n\n copySync(pluginSrcPath, pluginDestPath)\n logger.log(`Copied ${pluginName} files`)\n })\n}\n\nconst copyPluginPublicFiles = async (basePath: string, plugins: Plugin[]) => {\n const { tmpDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Copying plugin public files')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginPath = getPackagePath(getPluginName(pluginName))\n\n try {\n if (existsSync(`${pluginPath}/public`)) {\n copySync(`${pluginPath}/public`, `${tmpDir}/public`, {\n dereference: true,\n overwrite: true,\n })\n logger.log(`Plugin public files copied`)\n }\n } catch (e) {\n logger.error(e)\n }\n })\n}\n\nconst getPluginPageFileContent = (\n pluginName: string,\n pageName: string,\n appLayout: boolean\n) => `\n// GENERATED FILE\n// @ts-nocheck\nimport * as page from 'src/plugins/${pluginName}/pages/${pageName}'\n${appLayout ? `import { getGlobalSectionsData } from 'src/components/cms/GlobalSections'` : ``}\n${appLayout ? `import RenderSections from 'src/components/cms/RenderSections'` : ``}\nimport { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'\n\nasync function getServerSidePropsBase(${appLayout ? '{ previewData, ...otherProps }' : 'otherProps'}) {\n const noop = async function() {}\n const loaderData = await (page.loader || noop)(otherProps)\n${appLayout ? `const { sections = [] } = await getGlobalSectionsData(previewData)` : ``}\n\n return {\n props: {\n data: loaderData,\n ${appLayout ? 'globalSections: sections' : ``}\n }\n }\n}\n\nexport const getServerSideProps = withLocaleValidationSSR(getServerSidePropsBase)\nexport default function Page(props) {\n ${\n appLayout\n ? `return <RenderSections globalSections={props.globalSections}>\n {page.default(props.data)}\n </RenderSections>`\n : `return page.default(props.data)`\n }\n}\n `\n\nconst generatePluginPages = async (basePath: string, plugins: Plugin[]) => {\n const { tmpPagesDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Generating plugin pages')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE)\n\n const { default: pluginConfig } = await import(\n pathToFileURL(pluginConfigPath).href\n )\n\n const { pages: pagesCustom } = getPluginCustomConfig(plugin)\n\n const pagesConfig: Record<string, PageConfig> = {\n ...(pluginConfig.pages ?? {}),\n ...pagesCustom,\n }\n\n const pages = Object.keys(pagesConfig)\n\n pages.forEach(async (pageName) => {\n const paths = pagesConfig[pageName].path.split('/')\n\n const pageFile = paths.pop()\n const pagePaths = paths\n\n const pagePath = path.join(tmpPagesDir, ...pagePaths, pageFile + '.tsx')\n\n const fileContent = getPluginPageFileContent(\n sanitizePluginName(pluginName),\n pageName,\n pagesConfig[pageName].appLayout\n )\n\n mkdirSync(path.dirname(pagePath), { recursive: true })\n writeFileSync(pagePath, fileContent)\n })\n })\n}\n\nexport async function addPluginsSections(basePath: string, plugins: Plugin[]) {\n const { tmpPluginsDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Adding plugin sections')\n\n const indexPluginsOverrides = plugins\n .filter((plugin) =>\n existsSync(\n getPackagePath(getPluginName(plugin), 'src', 'components', 'index.ts')\n )\n )\n .map((plugin) => {\n const pluginReference =\n sanitizePluginName(getPluginName(plugin), true) + 'Components'\n\n return {\n import: `import { default as ${pluginReference} } from 'src/plugins/${sanitizePluginName(getPluginName(plugin))}/components'`,\n pluginReference,\n }\n })\n\n const pluginsImportFileContent = `\n ${indexPluginsOverrides.map((plugin) => plugin.import).join('\\n')}\n\n export default {\n ${indexPluginsOverrides.map((plugin) => `...${plugin.pluginReference}`).join(',\\n')}\n }\n `\n\n const sectionPath = path.join(tmpPluginsDir, 'index.ts')\n writeFileSync(sectionPath, pluginsImportFileContent)\n logger.log('Writing plugins overrides')\n logger.log(sectionPath)\n logger.log(pluginsImportFileContent)\n}\n\nexport async function addPluginsOverrides(basePath: string, plugins: Plugin[]) {\n const { tmpPluginsDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Adding plugin overrides')\n\n plugins\n .map((plugin) => ({\n pluginName: getPluginName(plugin),\n pluginOverridesPath: getPackagePath(\n getPluginName(plugin),\n 'src',\n 'components',\n 'overrides'\n ),\n }))\n .filter(({ pluginOverridesPath }) => existsSync(pluginOverridesPath))\n .reverse()\n .forEach(({ pluginName, pluginOverridesPath }) => {\n const overrideFilesAlreadyCopied: string[] = []\n\n const sanitizedPluginName = sanitizePluginName(pluginName)\n\n const overrideFiles = readdirSync(pluginOverridesPath)\n\n overrideFiles\n .filter((file) => !overrideFilesAlreadyCopied.includes(file))\n .forEach((overrideFileName) => {\n const overrideFileContent = `export { override } from 'src/plugins/${sanitizedPluginName}/components/overrides/${overrideFileName.split('.')[0]}'`\n\n writeFileSync(\n path.join(tmpPluginsDir, 'overrides', overrideFileName),\n overrideFileContent\n )\n overrideFilesAlreadyCopied.push(overrideFileName)\n })\n })\n}\n\nconst addPluginsTheme = async (basePath: string, plugins: Plugin[]) => {\n const { getPackagePath, tmpThemesPluginsFile } = withBasePath(basePath)\n\n const pluginImportsContent = plugins\n .filter((plugin) =>\n existsSync(\n getPackagePath(getPluginName(plugin), 'src', 'themes', 'index.scss')\n )\n )\n .map(\n (plugin) => `@use \"${getPluginName(plugin)}/src/themes/index.scss\" as *;`\n )\n .join('\\n')\n\n writeFileSync(tmpThemesPluginsFile, pluginImportsContent)\n}\n\nconst getPluginAPIFileContent = (pluginName: string, apiName: string) => `\n// GENERATED FILE\n// @ts-nocheck\nimport apiHandle from 'src/plugins/${pluginName}/apis/${apiName}'\nimport { NextApiRequest, NextApiResponse } from \"next/types\"\n\nexport default function handle(req: NextApiRequest, res: NextApiResponse) {\n return apiHandle(req, res)\n}\n`\n\nconst generatePluginApis = async (basePath: string, plugins: Plugin[]) => {\n const { tmpApiDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Generating plugin APIs')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE)\n\n const { default: pluginConfig } = await import(\n pathToFileURL(pluginConfigPath).href\n )\n\n const { apis: apisCustom } = getPluginCustomConfig(plugin)\n\n const apisConfig: Record<string, APIConfig> = {\n ...(pluginConfig.apis ?? {}),\n ...apisCustom,\n }\n\n const apis = Object.keys(apisConfig)\n\n apis.forEach(async (apiName) => {\n const paths = apisConfig[apiName].path.split('/')\n\n const apiFile = paths.pop()\n const apiPaths = paths\n\n const apiPath = path.join(\n tmpApiDir,\n 'plugins',\n ...apiPaths,\n apiFile + '.ts'\n )\n\n const fileContent = getPluginAPIFileContent(\n sanitizePluginName(pluginName),\n apiName\n )\n\n mkdirSync(path.dirname(apiPath), { recursive: true })\n writeFileSync(apiPath, fileContent)\n })\n })\n}\n\nexport const installPlugins = async (basePath: string) => {\n const plugins = await getPluginsList(basePath)\n\n copyPluginsSrc(basePath, plugins)\n copyPluginPublicFiles(basePath, plugins)\n generatePluginPages(basePath, plugins)\n generatePluginApis(basePath, plugins)\n addPluginsSections(basePath, plugins)\n addPluginsOverrides(basePath, plugins)\n addPluginsTheme(basePath, plugins)\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport { spawn } from 'node:child_process'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\nimport { mergeCMSFiles } from '../utils/hcms'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nexport default class CmsSync extends Command {\n static flags = {\n ['dry-run']: Flags.boolean({ char: 'd' }),\n }\n\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being synched with the CMS is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { flags, args } = await this.parse(CmsSync)\n\n const basePath = getBasePath(args.path)\n const { tmpDir, userStoreConfigFile } = withBasePath(basePath)\n\n const { default: userStoreConfig } = await import(\n pathToFileURL(path.resolve(userStoreConfigFile)).href\n )\n const cmsProjectName = userStoreConfig.contentSource?.project ?? 'faststore'\n\n await generate({ setup: true, basePath })\n await mergeCMSFiles(basePath)\n\n if (flags['dry-run']) {\n return\n }\n\n return spawn(`vtex cms sync ${cmsProjectName}`, {\n shell: true,\n cwd: tmpDir,\n stdio: 'inherit',\n })\n }\n}\n","import chalk from 'chalk'\nimport path from 'node:path'\n// import { ux } from '@oclif/core'\nimport { confirm } from '@inquirer/prompts'\nimport fsExtra from 'fs-extra'\nconst { readFileSync, existsSync, writeFileSync, mkdirSync } = fsExtra\n\nimport { pathToFileURL } from 'node:url'\nimport { withBasePath } from './directory'\nimport { getPluginName, getPluginsList } from './plugins'\n\nexport interface ContentTypeOrSectionDefinition {\n id?: string\n name?: string\n scopes?: string[]\n isSingleton?: boolean\n onlySettings?: boolean\n requiredScopes?: string[]\n schema?: Record<string, unknown>\n configurationSchemaSets?: ConfigurationSchemaSet[]\n}\n\nexport interface ConfigurationSchemaSet {\n name?: string\n configurations?: Array<{\n name?: string\n schema?: Record<string, unknown>\n }>\n}\n\nexport function splitCustomDefinitions(\n coreDefinitions: ContentTypeOrSectionDefinition[],\n customDefinitions: ContentTypeOrSectionDefinition[],\n primaryIdentifier: 'id' | 'name'\n) {\n const coreDefinitionIdentifiers = new Set<string>(\n coreDefinitions.map((definition) => definition[primaryIdentifier] ?? '')\n )\n\n const duplicates: ContentTypeOrSectionDefinition[] = []\n const newDefinitions: ContentTypeOrSectionDefinition[] = []\n\n customDefinitions.forEach((definition) => {\n if (!definition[primaryIdentifier]) {\n console.error('Ignoring invalid definition:', definition)\n return\n }\n\n if (\n coreDefinitionIdentifiers.has(definition[primaryIdentifier] as string)\n ) {\n duplicates.push(definition)\n return\n }\n\n newDefinitions.push(definition)\n })\n\n return { duplicates, newDefinitions }\n}\n\nexport function dedupeAndMergeDefinitions(\n coreDefinitions: ContentTypeOrSectionDefinition[],\n duplicates: ContentTypeOrSectionDefinition[],\n primaryIdentifier: 'id' | 'name'\n) {\n const sortedCoreDefs = coreDefinitions.filter((definition) =>\n Boolean(definition[primaryIdentifier])\n )\n sortedCoreDefs.sort((a, b) =>\n (a[primaryIdentifier] as string) < (b[primaryIdentifier] as string) ? -1 : 1\n )\n\n const sortedDuplicates = duplicates.filter((definition) =>\n Boolean(definition[primaryIdentifier])\n )\n sortedDuplicates.sort((a, b) =>\n (a[primaryIdentifier] as string) < (b[primaryIdentifier] as string) ? -1 : 1\n )\n\n let duplicateIdx = 0\n\n const result = sortedCoreDefs.map((currentDefinition) => {\n const isDuplicateMatch =\n currentDefinition[primaryIdentifier] ===\n sortedDuplicates[duplicateIdx]?.[primaryIdentifier]\n\n if (duplicateIdx < sortedDuplicates.length && isDuplicateMatch) {\n return sortedDuplicates[duplicateIdx++]\n }\n\n return currentDefinition\n })\n\n return result\n}\n\nasync function confirmUserChoice(\n duplicates: ContentTypeOrSectionDefinition[],\n fileName: string\n) {\n const goAhead = await confirm({\n message: `You are about to override default ${\n fileName.split('.')[0]\n }:\\n\\n${duplicates\n .map((definition) => definition.id || definition.name)\n .join('\\n')}\\n\\nAre you sure? [yes/no]`,\n })\n\n if (!goAhead) {\n throw new Error('cms-sync cancelled by user.')\n }\n\n return\n}\n\nexport async function mergeCMSFile(fileName: string, basePath: string) {\n const {\n coreCMSDir,\n userCMSDir,\n tmpCMSDir,\n getPackagePath,\n userStoreConfigFile,\n } = withBasePath(basePath)\n\n const { default: userStoreConfig } = await import(\n pathToFileURL(path.resolve(userStoreConfigFile)).href\n )\n const cmsProjectName = userStoreConfig.contentSource?.project ?? 'faststore'\n\n const coreFilePath = path.join(coreCMSDir, fileName)\n const customFilePath = path.join(userCMSDir, fileName)\n\n const coreFile = readFileSync(coreFilePath, 'utf8')\n const coreDefinitions: ContentTypeOrSectionDefinition[] = JSON.parse(coreFile)\n\n const primaryIdentifierForDefinitions =\n fileName === 'content-types.json' ? 'id' : 'name'\n\n let output: ContentTypeOrSectionDefinition[] = coreDefinitions\n\n const plugins = await getPluginsList(basePath)\n\n const pluginCMSFilePaths = plugins.map((plugin) =>\n getPackagePath(getPluginName(plugin), 'cms', 'faststore', fileName)\n )\n\n const customizations = [...pluginCMSFilePaths, customFilePath].filter(\n (pluginCMSFilePath) => existsSync(pluginCMSFilePath)\n )\n\n // TODO: create a validation when the CMS files exist but don't have a component for them\n for (const newFilePath of customizations) {\n const customFile = readFileSync(newFilePath, 'utf8')\n\n try {\n const customDefinitions = JSON.parse(customFile)\n\n const { duplicates, newDefinitions } = splitCustomDefinitions(\n output,\n customDefinitions,\n primaryIdentifierForDefinitions\n )\n\n if (duplicates.length) {\n if (newFilePath === customFilePath) {\n await confirmUserChoice(duplicates, fileName)\n }\n\n output = [\n ...dedupeAndMergeDefinitions(\n output,\n duplicates,\n primaryIdentifierForDefinitions\n ),\n ...newDefinitions,\n ]\n } else {\n output = [...output, ...newDefinitions]\n }\n } catch (err) {\n if (err instanceof SyntaxError) {\n console.info(\n `${chalk.red(\n 'error'\n )} - ${fileName} is a malformed JSON file, ignoring its contents.`\n )\n } else {\n throw err\n }\n }\n }\n\n try {\n if (!existsSync(tmpCMSDir(cmsProjectName))) {\n mkdirSync(tmpCMSDir(cmsProjectName))\n }\n writeFileSync(\n path.join(tmpCMSDir(cmsProjectName), fileName),\n JSON.stringify(output)\n )\n console.log(\n `${chalk.green('success')} - CMS file ${chalk.dim(fileName)} created`\n )\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nexport async function mergeCMSFiles(basePath: string) {\n try {\n await mergeCMSFile('content-types.json', basePath)\n await mergeCMSFile('sections.json', basePath)\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n","import fs from 'node:fs'\nimport degit from 'degit'\nimport { Args, Command } from '@oclif/core'\nimport { confirm } from '@inquirer/prompts'\n\nexport default class Create extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the Discovery folder will be created. Defaults to ./discovery.',\n }),\n }\n\n static description =\n 'Creates a discovery folder based on the starter.store template.'\n\n static examples = ['$ yarn faststore create discovery']\n\n async run() {\n const { args } = await this.parse(Create)\n\n const discoveryPath = args.path ?? './discovery'\n const discoveryFolderExists = fs.existsSync(discoveryPath)\n\n if (discoveryFolderExists) {\n const confirmOverride = await confirm({\n message: `It looks like you already have a discovery folder named \"${discoveryPath}\" in your store. Do you want to override it?`,\n })\n\n if (!confirmOverride)\n return this.log('🛑 Interrupted initializing discovery')\n }\n\n const discoveryEmitter = degit('vtex-sites/starter.store', {\n force: true,\n })\n\n this.log('Pulling starter.store template...')\n\n discoveryEmitter.clone(discoveryPath).then(() => {\n this.log(\n `Discovery created successfully! You can find it at ${discoveryPath}`\n )\n })\n }\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport { spawn, spawnSync } from 'node:child_process'\nimport chokidar from 'chokidar'\nimport dotenv from 'dotenv'\n\nimport { cpSync, existsSync, readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getDiscoveryConfig } from '../utils/config'\nimport { checkDeprecatedSecretFiles } from '../utils/deprecations'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate, toggleProxyByLocalizationFlag } from '../utils/generate'\nimport { logger } from '../utils/logger'\nimport { runCommandSync } from '../utils/runCommandSync'\n\n/**\n * Taken from toolbelt\n *\n * https://github.com/vtex/toolbelt/pull/442\n */\nconst stabilityThreshold = process.platform === 'darwin' ? 100 : 200\n\nconst defaultPatterns = ['*/**', '**']\n\nconst defaultIgnored = [\n '.DS_Store',\n 'README.md',\n '.gitignore',\n 'package.json',\n '.git/**',\n '.faststore/**',\n '**/.faststore/**',\n]\n\nconst defaultNodeModulesIgnored = ['node_modules/**', '**/node_modules/**']\n\nconst defaultNodeModulesIgnoredExceptVtexPackages = [\n '**/node_modules/!(@vtex)/**',\n]\n\nconst devAbortController = new AbortController()\n\nasync function storeDev(\n rootDir: string,\n tmpDir: string,\n coreDir: string,\n port: number | string\n) {\n // Only try to read vtex.env if it exists\n let envVars = {}\n const vtexEnvPath = path.join(rootDir, 'vtex.env')\n\n if (existsSync(vtexEnvPath)) {\n try {\n envVars = dotenv.parse(readFileSync(vtexEnvPath))\n } catch (err) {\n logger.log(\n `${chalk.yellow('warn')} - Error parsing vtex.env file: ${err}`\n )\n }\n }\n\n const packageManager = await getPreferredPackageManager()\n\n runCommandSync({\n cmd: `${packageManager} predev`,\n errorMessage:\n 'GraphQL was not optimized and TS files were not updated. Changes in the GraphQL layer did not take effect',\n throws: 'error',\n cwd: tmpDir,\n })\n\n const { success } = copyGenerated(\n path.join(tmpDir, '@generated'),\n path.join(coreDir, '@generated')\n )\n\n if (!success) {\n logger.log(\n `${chalk.yellow('warn')} - Failed to copy @generated schema back to node_modules, autocomplete and DX might be impacted.`\n )\n logger.log(\n `Attempted to copy from ${path.join(tmpDir, '@generated')} to ${path.join(coreDir, '@generated')}`\n )\n }\n\n const devProcess = spawn(`${packageManager} dev-only --port ${port}`, {\n shell: true,\n cwd: tmpDir,\n signal: devAbortController.signal,\n stdio: ['inherit', 'pipe', 'inherit'],\n env: {\n ...process.env,\n ...envVars,\n },\n })\n\n let nextStdout = ''\n devProcess.stdout.on('data', (chunk) => {\n nextStdout += chunk\n const lines = nextStdout.split('\\n')\n while (lines.length > 1) {\n const line = lines.shift()\n console.log('[DISCOVERY] ', line)\n }\n nextStdout = lines.shift() || ''\n })\n devProcess.stdout.on('end', () => {\n console.log('[DISCOVERY] ', nextStdout)\n })\n\n devProcess.on('close', () => {\n devAbortController.abort()\n })\n}\n\nfunction copyGenerated(from: string, to: string) {\n try {\n cpSync(from, to, { recursive: true, force: true, dereference: true })\n\n return { success: true }\n } catch (err) {\n return { success: false }\n }\n}\n\nexport default class Dev extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n account: Args.string({\n name: 'account',\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n port: Args.string({\n name: 'port',\n description: 'The port where FastStore should run. Defaults to 3000.',\n }),\n }\n\n static flags = {\n 'watch-plugins': Flags.boolean({\n description: 'Enable watching for plugin changes',\n default: false,\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(Dev)\n const basePath = getBasePath(args.path)\n\n const port = args.port ?? '3000'\n const watchPlugins = flags['watch-plugins']\n\n const { getRoot, tmpDir, coreDir } = withBasePath(basePath)\n\n checkDeprecatedSecretFiles(basePath)\n\n const queueChange = (/* path: string, remove: boolean */) => {\n generate({ basePath })\n }\n\n const watcher = chokidar.watch([...defaultPatterns], {\n atomic: stabilityThreshold,\n awaitWriteFinish: {\n stabilityThreshold,\n },\n cwd: getRoot(),\n ignoreInitial: true,\n ignored: [\n ...defaultIgnored,\n ...(watchPlugins\n ? defaultNodeModulesIgnoredExceptVtexPackages\n : defaultNodeModulesIgnored),\n ],\n persistent: true,\n usePolling: process.platform === 'win32',\n })\n\n devAbortController.signal.addEventListener('abort', () => {\n watcher.close()\n })\n\n await generate({ setup: true, basePath })\n\n const cliPath = fileURLToPath(\n import.meta.resolve('@faststore/cli/runner', import.meta.url)\n )\n\n spawnSync('node', [cliPath, 'generate-types', tmpDir], {\n stdio: 'inherit',\n })\n\n spawnSync('node', [cliPath, 'cache-graphql', basePath], {\n stdio: 'inherit',\n })\n\n // generate-i18n will validate localization config and check if it's enabled\n spawnSync('node', [cliPath, 'generate-i18n', basePath], {\n stdio: 'inherit',\n })\n\n const config = await getDiscoveryConfig(basePath)\n const localizationEnabled = config?.localization?.enabled === true\n toggleProxyByLocalizationFlag(basePath, localizationEnabled)\n\n storeDev(getRoot(), tmpDir, coreDir, port)\n\n return await new Promise((resolve, reject) => {\n watcher\n .on('add', (/*file*/) => queueChange(/*file, false*/))\n .on('change', (/*file*/) => queueChange(/*file, false*/))\n .on('unlink', (/*file*/) => queueChange(/*file, true*/))\n .on('error', () => {\n devAbortController.abort()\n reject()\n })\n .on('ready', resolve)\n })\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport chalk from 'chalk'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\nimport { logger } from '../utils/logger'\nimport genTsTypes from '../utils/generate-types'\n\nexport default class Generate extends Command {\n static flags = {}\n\n static args = {\n path: Args.string({\n name: 'path',\n hidden: true,\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Generate)\n const basePath = getBasePath(args.path)\n const { tmpDir } = withBasePath(basePath)\n\n await generate({ setup: true, basePath })\n\n genTsTypes(args.path ?? tmpDir)\n\n logger.log(\n `${chalk.green(\n 'success'\n )} - GraphQL schema, types, and optimizations successfully generated 🎉`\n )\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function saveFile(fileLocation: string) {\n fs.mkdirSync(path.dirname(fileLocation), { recursive: true })\n\n return (content: string) => {\n fs.writeFileSync(fileLocation, content)\n }\n}\n","import { saveFile } from './file'\nimport { GraphqlVtexSchema } from '@faststore/api'\nimport {\n generate as codegenGenerate,\n type CodegenConfig,\n} from '@graphql-codegen/cli'\nimport { mergeTypeDefs } from '@graphql-tools/merge'\nimport { printSchemaWithDirectives } from '@graphql-tools/utils'\nimport { buildASTSchema, Kind, parse, type DocumentNode } from 'graphql'\nimport fs, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nconst schemaFileName = 'schema.graphql'\n\nexport default async function genTsTypes(at: string) {\n await generateSchemaFile(at)\n generateSchemaTSTypes(at)\n}\n\nfunction generateSchemaTSTypes(root: string) {\n let finalRootPath = path.resolve(root)\n\n if (existsSync(path.resolve(root, '.faststore'))) {\n finalRootPath = path.resolve(root, '.faststore')\n }\n\n // glob to include all ts/tsx files\n const documents = [`${finalRootPath}/src/**/*.{ts,tsx}`]\n\n const config: CodegenConfig = {\n documents,\n overwrite: true,\n errorsOnly: false,\n debug: false,\n verbose: true,\n schema: path.resolve(finalRootPath, '@generated', schemaFileName),\n generates: {\n [`${finalRootPath}/@generated/`]: {\n preset: 'client',\n config: {\n /** Not all of these properties are supported by the preset, but it reflects our previous config when we used typescript plugins directly */\n preResolveTypes: true,\n avoidOptionals: true,\n enumsAsTypes: true,\n skipTypeNameForRoot: true,\n skipTypename: true,\n allowEnumStringTypes: false,\n flattenGeneratedTypes: true,\n namingConvention: 'change-case-all#pascalCase',\n exportFragmentSpreadSubTypes: true,\n /** Removes useless AST definitions from documents */\n documentMode: 'string',\n },\n presetConfig: {\n // Disabled fragment masking - it wasn't being used by us. This can be reviewed in the future\n fragmentMasking: false,\n // Recognizes the gql(`query { ... }`) calls and generates the types for them\n gqlTagName: 'gql',\n onExecutableDocumentNode: (document: DocumentNode) => ({\n // This makes sure that the operation name is always present in the __meta__ field of each query\n // This helps us to identify the query in the persisted documents and to debug errors in the client\n operationName: getOperationName(document),\n }),\n persistedDocuments: {\n // Keeps document simple, including only necessary properties as '__meta__' and its properties\n mode: 'replaceDocumentWithHash',\n // replaces operation['__meta__']['hash'] with operation['__meta__']['operationHash']\n hashPropertyName: 'operationHash',\n },\n },\n },\n },\n }\n\n return codegenGenerate(config, true)\n}\n\nfunction getOperationName(document: DocumentNode) {\n for (const definition of document.definitions) {\n if (\n definition.kind === Kind.OPERATION_DEFINITION &&\n typeof definition.name?.value === 'string'\n ) {\n return definition.name.value\n }\n }\n\n return 'UnknownOperation'\n}\n\nasync function generateSchemaFile(rootPath: string) {\n const faststoreSchema = printSchemaWithDirectives(GraphqlVtexSchema())\n\n const getMergedSchema = async () => {\n const root = path.join(\n rootPath.endsWith('.faststore') ? [rootPath, '..'].join('/') : rootPath\n )\n\n const customizations = [\n ...(await getTypeDefsFromFolder(root, 'vtex')),\n ...(await getTypeDefsFromFolder(root, 'thirdParty')),\n ]\n try {\n const mergedTypeDefs = mergeTypeDefs(\n [faststoreSchema, ...customizations].filter(Boolean)\n )\n\n return buildASTSchema(mergedTypeDefs)\n } catch (e) {\n console.error(\n 'An error occurred while attempting to merge the GraphQL Schema Extensions. Check the custom typeDefs and resolvers located in the \"customizations/graphql/\" directory. The changes since the last successful schema merge will be ignored.'\n )\n\n throw e\n }\n }\n\n let pathToSave = path.resolve(rootPath, '@generated', schemaFileName)\n\n if (existsSync(path.resolve(rootPath, '.faststore'))) {\n pathToSave = path.resolve(\n rootPath,\n '.faststore',\n '@generated',\n schemaFileName\n )\n }\n\n const saveSchemaFile = saveFile(pathToSave)\n const finalSchema = printSchemaWithDirectives(await getMergedSchema())\n\n saveSchemaFile(finalSchema)\n}\n\nasync function getTypeDefsFromFolder(root: string, customPath: string) {\n const globby = await import('globby')\n const basePath = [root, 'src', 'graphql']\n\n const pathArray = Array.isArray(customPath) ? customPath : [customPath]\n\n return ((globby as any).default ?? globby)\n .globbySync(path.join(...[...basePath, ...pathArray]), {\n expandDirectories: {\n extensions: ['graphql'],\n },\n })\n .map((typeDef: string) =>\n parse(fs.readFileSync(typeDef, { encoding: 'utf-8' }))\n )\n}\n","import { Args, Command } from '@oclif/core'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getBasePath } from '../utils/directory'\n\nexport default class Prepare extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Prepare)\n const basePath = getBasePath(args.path)\n\n const clientPublicDir = path.join(basePath, 'public/')\n\n const corePublicDir = path.resolve(\n fileURLToPath(\n path.dirname(import.meta.resolve('@faststore/core', import.meta.url))\n ),\n 'public'\n )\n\n if (!corePublicDir) {\n throw Error('Please install @faststore/core package')\n }\n\n copyFolder(corePublicDir, clientPublicDir)\n }\n}\n\nfunction copyFolder(sourceDir: string, targetDir: string) {\n // Ensure target directory exists\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true })\n }\n\n // Read all items in the source directory\n const files = fs.readdirSync(sourceDir)\n\n for (const file of files) {\n const sourcePath = path.join(sourceDir, file)\n const targetPath = path.join(targetDir, file)\n\n const stat = fs.statSync(sourcePath)\n\n if (stat.isFile()) {\n // Copy file\n fs.copyFileSync(sourcePath, targetPath)\n console.log(`Copied file: ${sourcePath} -> ${targetPath}`)\n } else if (stat.isDirectory()) {\n // Recursively copy subfolder\n copyFolder(sourcePath, targetPath)\n }\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport { spawn, spawnSync } from 'node:child_process'\nimport fsExtra from 'fs-extra'\nimport path from 'node:path'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getBasePath, withBasePath } from '../utils/directory'\n\nconst { existsSync } = fsExtra\n\nexport default class Start extends Command {\n static args = {\n account: Args.string({\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n path: Args.string({\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n port: Args.string({\n description: 'The port where FastStore should run. Defaults to 3000.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Start)\n const basePath = getBasePath(args.path)\n const port = args.port ?? 3000\n const { getRoot, tmpDir } = withBasePath(basePath)\n const packageManager = await getPreferredPackageManager()\n\n if (!existsSync(path.join(getRoot(), '.next'))) {\n spawnSync(`${packageManager} faststore build`, {\n shell: true,\n stdio: 'inherit',\n })\n }\n\n return spawn(\n packageManager,\n ['next', 'start', tmpDir, '-p', String(port)],\n {\n stdio: 'inherit',\n }\n )\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport { spawn } from 'node:child_process'\nimport chokidar from 'chokidar'\n\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\n\n/**\n * Taken from toolbelt\n *\n * https://github.com/vtex/toolbelt/pull/442\n */\nconst stabilityThreshold = process.platform === 'darwin' ? 100 : 200\n\nconst defaultPatterns = ['*/**', '**']\n\nconst defaultIgnored = [\n '.DS_Store',\n 'README.md',\n '.gitignore',\n 'package.json',\n 'node_modules/**',\n '**/node_modules/**',\n '.git/**',\n '.faststore/**',\n '**/.faststore/**',\n]\n\nconst testAbortController = new AbortController()\n\nasync function storeTest(tmpDir: string) {\n const packageManager = await getPreferredPackageManager()\n\n const testProcess = spawn(`${packageManager} run test:e2e`, {\n shell: true,\n cwd: tmpDir,\n signal: testAbortController.signal,\n stdio: 'inherit',\n })\n\n testProcess.on('close', () => {\n testAbortController.abort()\n })\n}\n\nexport default class Test extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being tested is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Test)\n const basePath = getBasePath(args.path)\n const { getRoot, tmpDir } = withBasePath(basePath)\n\n const watcher = chokidar.watch([...defaultPatterns], {\n atomic: stabilityThreshold,\n awaitWriteFinish: {\n stabilityThreshold,\n },\n cwd: getRoot(),\n ignoreInitial: true,\n ignored: defaultIgnored,\n persistent: true,\n usePolling: process.platform === 'win32',\n })\n\n testAbortController.signal.addEventListener('abort', () => {\n watcher.close()\n })\n\n await generate({ setup: true, basePath })\n\n storeTest(tmpDir)\n\n return await new Promise((resolve, reject) => {\n watcher\n .on('error', () => {\n testAbortController.abort()\n reject()\n })\n .on('ready', resolve)\n })\n }\n}\n","import path from 'node:path'\nimport { Args, Command } from '@oclif/core'\nimport chalk from 'chalk'\nimport { logger } from '../utils/logger'\nimport genTsTypes from '../utils/generate-types'\n\nexport default class Generate extends Command {\n static hidden = true\n static flags = {}\n\n static args = {\n path: Args.string({\n name: 'path',\n required: true,\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Generate)\n\n await genTsTypes(\n path.isAbsolute(args.path)\n ? args.path\n : path.resolve(process.env.PWD ?? process.cwd(), args.path)\n )\n\n logger.log(\n `${chalk.green(\n 'success'\n )} - GraphQL schema, types, and optimizations successfully generated 🎉`\n )\n }\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport fsExtra from 'fs-extra'\nimport graphql from 'graphql'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { saveFile } from '../utils/file'\nimport { logger } from '../utils/logger'\n\nconst { Kind, OperationTypeNode, parse: parseGraphql } = graphql\n\nconst persistedDocumentsName = 'persisted-documents.json'\nconst configFileName = 'discovery.config.default.js'\nconst cachedOperationsFileName = 'cached-operations.json'\n\nexport default class CacheGraphql extends Command {\n static flags = {\n queries: Flags.string({\n name: 'queries',\n description: 'The path to locate persisted-document file.',\n }),\n config: Flags.string({\n name: 'config',\n description: 'The path where the discovery.config is located',\n }),\n }\n\n static args = {\n store: Args.string({\n name: 'store',\n description:\n 'The path where the FastStore being built is or the persisted-document path. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(CacheGraphql)\n\n const rootPath = getBasePath()\n const argPath =\n (args?.store && path.resolve(rootPath, args.store)) || rootPath\n const { tmpDir } = withBasePath(argPath)\n const configPath =\n this.getConfigFile(flags.config && path.resolve(argPath, flags.config)) ||\n this.getConfigFile(tmpDir) ||\n this.getConfigFile(argPath)\n const persistedDocumentsPath =\n this.getPersistedDocument(\n (flags?.queries && path.resolve(argPath, flags?.queries)) || argPath\n ) || this.getPersistedDocument(tmpDir)\n if (!configPath) {\n return this.errorFileNotFound(\n configFileName,\n `\\n ${tmpDir}\\n ${argPath}`\n )\n }\n\n if (!persistedDocumentsPath) {\n return this.errorFileNotFound(\n persistedDocumentsName,\n flags?.queries ?? argPath\n )\n }\n\n const cachedOperationsPath = path.join(\n path.dirname(persistedDocumentsPath),\n cachedOperationsFileName\n )\n const saveCachedOperationsFile = saveFile(cachedOperationsPath)\n\n if (fsExtra.pathExistsSync(tmpDir))\n logger.info(`${chalk.blue('[Info]')} - .faststore Path at: ${tmpDir}`)\n\n logger.info(`${chalk.blue('[Info]')} - Config file location: ${configPath}`)\n logger.info(\n `${chalk.blue('[Info]')} - Persisted documents at: ${persistedDocumentsPath}`\n )\n logger.info(\n `${chalk.blue('[Info]')} - Cached operations output: ${cachedOperationsPath}`\n )\n\n const { default: persistedDocuments } = await import(\n pathToFileURL(persistedDocumentsPath).href,\n { with: { type: 'json' } }\n )\n\n const cachedQueries = getQueries(persistedDocuments)\n\n saveCachedOperationsFile(\n `${JSON.stringify(cachedQueries ?? [], null, 2)}\\n`\n )\n\n logger.info(\n `${chalk.green('[Success]')} - GraphQL queries cached with success: 🎉\n Queries: ${cachedQueries.join(', ')}`\n )\n }\n\n getPersistedDocument(rootPath?: string) {\n return this.getFile(persistedDocumentsName, [\n '@generated',\n persistedDocumentsName,\n ])(rootPath)\n }\n\n getConfigFile(rootPath?: string) {\n return this.getFile(configFileName, [configFileName])(rootPath)\n }\n\n getFile(fileName: string, pathFromRoot?: string | Array<string>) {\n return (rootPath?: string) => {\n switch (true) {\n case !rootPath:\n return\n case rootPath?.endsWith(fileName) && fsExtra.existsSync(rootPath):\n return rootPath\n case fsExtra.existsSync(path.join(rootPath ?? '', fileName)):\n return path.join(rootPath, fileName)\n default:\n if (!pathFromRoot) return\n\n const filePath = path.join(\n rootPath,\n ...(Array.isArray(pathFromRoot) ? pathFromRoot : [pathFromRoot])\n )\n\n if (fsExtra.existsSync(filePath)) {\n return filePath\n }\n return\n }\n }\n }\n\n errorFileNotFound(fileName: string, rootDir: string) {\n logger.error(\n `${chalk.red('[Error]')} - Couldn't find ${fileName} at ${rootDir}`\n )\n\n process.exit(1)\n }\n}\n\nconst getQueries = (persistedDocuments: Record<string, string>) => {\n const operationNames: Array<string> = []\n for (const operation of Object.values(persistedDocuments)) {\n let currentNames: Array<string> = []\n const operationAST = parseGraphql(operation)\n const hasMutationDefinition = operationAST.definitions.some(\n (def) =>\n def.kind === Kind.OPERATION_DEFINITION &&\n def.operation === OperationTypeNode.MUTATION\n )\n\n if (hasMutationDefinition) continue\n\n operationAST.definitions.forEach((definition) => {\n if (\n definition.kind === Kind.OPERATION_DEFINITION &&\n definition.operation === OperationTypeNode.QUERY &&\n definition.name?.kind === Kind.NAME &&\n !!definition.name?.value\n ) {\n currentNames.push(definition.name.value)\n return\n }\n })\n\n if (currentNames.length) {\n operationNames.push(...currentNames)\n currentNames = []\n }\n }\n\n return operationNames\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport { FastStoreSDK } from '@vtex/faststore-sdk'\nimport chalk from 'chalk'\nimport dotenv from 'dotenv'\nimport fsExtra from 'fs-extra'\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\nimport { format } from 'prettier'\nimport { checkAndValidateLocalization } from '../utils/config'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { saveFile } from '../utils/file'\nimport { logger } from '../utils/logger'\nimport { pathToFileURL } from 'node:url'\n\nconst configFileName = 'discovery.config.default.js'\n\nexport default class GenerateI18n extends Command {\n static hidden = true\n\n static flags = {\n config: Flags.string({\n name: 'config',\n description: 'The path where the discovery.config is located',\n }),\n }\n\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n getConfigFile(rootPath?: string) {\n return this.getFile(configFileName, [configFileName])(rootPath)\n }\n\n getFile(fileName: string, pathFromRoot?: string | Array<string>) {\n return (rootPath?: string) => {\n switch (true) {\n case !rootPath:\n return\n case rootPath?.endsWith(fileName) && fsExtra.existsSync(rootPath):\n return rootPath\n case fsExtra.existsSync(path.join(rootPath ?? '', fileName)):\n return path.join(rootPath, fileName)\n default:\n if (!pathFromRoot) return\n\n const filePath = path.join(\n rootPath,\n ...(Array.isArray(pathFromRoot) ? pathFromRoot : [pathFromRoot])\n )\n\n if (fsExtra.existsSync(filePath)) {\n return filePath\n }\n return\n }\n }\n }\n\n errorFileNotFound(fileName: string, rootDir: string) {\n logger.error(\n `${chalk.red('[Error]')} - Couldn't find ${fileName} at ${rootDir}`\n )\n\n process.exit(1)\n }\n\n async run() {\n const { args, flags } = await this.parse(GenerateI18n)\n const rootPath = getBasePath()\n const argPath =\n (args?.path && path.resolve(rootPath, args.path)) || rootPath\n\n // Check if localization is enabled and contentSource is set to CP\n const localizationEnabled = await checkAndValidateLocalization(argPath)\n\n if (!localizationEnabled) {\n return\n }\n\n const vtexEnvPath = path.join(argPath, 'vtex.env')\n if (existsSync(vtexEnvPath)) {\n dotenv.config({ path: vtexEnvPath })\n }\n\n const { VTEX_ACCOUNT, FS_DISCOVERY_APP_KEY, FS_DISCOVERY_APP_TOKEN } =\n process.env\n const hasCredentials =\n VTEX_ACCOUNT && FS_DISCOVERY_APP_KEY && FS_DISCOVERY_APP_TOKEN\n\n if (!hasCredentials) {\n logger.error(`${chalk.red('[Error]')} - Missing VTEX credentials.\\n\n ${chalk.cyan('Required Action:')}\\n\n Check your FastStore WebOps Settings page - to work in production, it should contain the following variables: ${chalk.cyan('VTEX_ACCOUNT')}, ${chalk.cyan('FS_DISCOVERY_APP_KEY')}, ${chalk.cyan('FS_DISCOVERY_APP_TOKEN')}.\\n\n If running locally, please check your ${chalk.bold('vtex.env')} file, it should also contain those variables.\n `)\n\n process.exit(1)\n }\n\n const { tmpDir } = withBasePath(argPath)\n const configPath =\n this.getConfigFile(flags.config && path.resolve(argPath, flags.config)) ||\n this.getConfigFile(tmpDir) ||\n this.getConfigFile(argPath)\n\n if (!configPath) {\n return this.errorFileNotFound(\n configFileName,\n `\\n ${tmpDir}\\n ${argPath}`\n )\n }\n\n const saveConfigFile = saveFile(configPath)\n\n if (fsExtra.pathExistsSync(tmpDir))\n logger.info(`${chalk.blue('[Info]')} - .faststore Path at: ${tmpDir}`)\n\n logger.info(`${chalk.blue('[Info]')} - Config file location: ${configPath}`)\n const discoveryConfig = await import(pathToFileURL(configPath).href)\n\n const faststore = new FastStoreSDK({\n account: VTEX_ACCOUNT,\n appKey: FS_DISCOVERY_APP_KEY,\n appToken: FS_DISCOVERY_APP_TOKEN,\n })\n\n const settings = await faststore.locales()\n const currentConfig = discoveryConfig?.default ?? discoveryConfig\n\n saveConfigFile(\n await format(\n `module.exports = ${JSON.stringify(\n {\n ...currentConfig,\n localization: {\n ...(currentConfig?.localization ?? {}),\n ...settings,\n },\n },\n undefined,\n 2\n )}`,\n {\n parser: 'typescript',\n quoteProps: 'as-needed',\n }\n )\n )\n\n logger.info(\n `${chalk.green('success')} - i18n configuration successfully generated 🎉`\n )\n }\n}\n"],"mappings":"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","names":["chalk","spawnSync","existsSync","fsExtra","path","fileURLToPath","pathToFileURL","existsSync","path","pathToFileURL","path","existsSync","pathToFileURL","existsSync","chalk","existsSync","chalk","chalk","fsExtra","path","pathToFileURL","path","path","basePath","chalk","chalk","fsExtra","path","pathToFileURL","existsSync","fsExtra","pathToFileURL","path","copySync","existsSync","readdirSync","writeFileSync","fsExtra","chalk","path","pathToFileURL","copySync","moveSync","readdirSync","removeSync","fsExtra","chalk","path","fileURLToPath","spawnSync","existsSync","pathToFileURL","pkg","Args","Command","Flags","chalk","path","fsExtra","pathToFileURL","readFileSync","existsSync","writeFileSync","mkdirSync","fsExtra","pathToFileURL","path","chalk","path","pathToFileURL","Command","Flags","Args","fs","Args","Command","confirm","Args","Command","Flags","chalk","spawn","spawnSync","existsSync","readFileSync","path","fileURLToPath","path","existsSync","readFileSync","chalk","spawn","Command","Args","Flags","fileURLToPath","spawnSync","Args","Command","chalk","fs","path","fs","existsSync","path","Command","Args","chalk","Args","Command","fs","path","fileURLToPath","Command","Args","path","fileURLToPath","fs","Args","Command","spawn","spawnSync","fsExtra","path","existsSync","fsExtra","Command","Args","path","spawnSync","spawn","Args","Command","spawn","chokidar","stabilityThreshold","defaultPatterns","defaultIgnored","spawn","Command","Args","chokidar","path","Args","Command","chalk","Generate","Command","Args","path","chalk","Args","Command","Flags","chalk","fsExtra","path","pathToFileURL","Kind","configFileName","Command","Flags","Args","path","fsExtra","chalk","pathToFileURL","Args","Command","Flags","chalk","dotenv","fsExtra","existsSync","path","pathToFileURL","configFileName","Command","Flags","Args","fsExtra","path","chalk","existsSync","dotenv","Generate"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/cli",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0-dev.0",
|
|
4
4
|
"description": "FastStore CLI",
|
|
5
5
|
"author": "Emerson Laurentino @emersonlaurentino",
|
|
6
6
|
"type": "module",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"ora": "5.4.1",
|
|
47
47
|
"prettier": "^3.1.0",
|
|
48
48
|
"resolve-pkg": "^3.0.0",
|
|
49
|
-
"@faststore/api": "4.
|
|
50
|
-
"@faststore/core": "4.
|
|
49
|
+
"@faststore/api": "4.2.0-dev.0",
|
|
50
|
+
"@faststore/core": "4.2.0-dev.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/degit": "^2.8.6",
|