@faststore/cli 4.1.2-dev.8 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -8,13 +8,12 @@ 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 as pathToFileURL5 } from "url";
11
+ import { fileURLToPath as fileURLToPath2, pathToFileURL } 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";
18
17
  import resolvePackage from "resolve-pkg";
19
18
  var { existsSync } = fsExtra;
20
19
  async function getPreferredPackageManager() {
@@ -44,7 +43,7 @@ async function loadPackageJsonAt(at) {
44
43
  if (location === false)
45
44
  throw new Error(`Invalid searching of ${file} at ${at}`);
46
45
  if (!existsSync(location)) return;
47
- const content = await import(pathToFileURL(location).href, {
46
+ const content = await import(location, {
48
47
  with: { type: "json" }
49
48
  });
50
49
  return content.default ?? content ?? {};
@@ -57,7 +56,6 @@ async function getDepPackageJSON(pkg) {
57
56
  import chalk from "chalk";
58
57
  import { existsSync as existsSync2 } from "fs";
59
58
  import path2 from "path";
60
- import { pathToFileURL as pathToFileURL2 } from "url";
61
59
 
62
60
  // src/utils/directory.ts
63
61
  import path from "path";
@@ -144,7 +142,7 @@ async function getDiscoveryConfig(basePath) {
144
142
  for (const configPath of configPaths) {
145
143
  if (existsSync2(configPath)) {
146
144
  try {
147
- const discoveryConfig = await import(pathToFileURL2(configPath).href);
145
+ const discoveryConfig = await import(configPath);
148
146
  return discoveryConfig?.default ?? discoveryConfig;
149
147
  } catch (error) {
150
148
  logger.warn(
@@ -217,7 +215,6 @@ import chalk4 from "chalk";
217
215
  import fsExtra3 from "fs-extra";
218
216
  import path5 from "path";
219
217
  import ora from "ora";
220
- import { pathToFileURL as pathToFileURL4 } from "url";
221
218
 
222
219
  // src/utils/createNextjsPages.ts
223
220
  import fs from "fs";
@@ -423,7 +420,6 @@ async function installDependencies({
423
420
  // src/utils/plugins.ts
424
421
  import fsExtra2 from "fs-extra";
425
422
  import path4 from "path";
426
- import { pathToFileURL as pathToFileURL3 } from "url";
427
423
  var { copySync, existsSync: existsSync4, mkdirSync, readdirSync, writeFileSync } = fsExtra2;
428
424
  var PLUGIN_CONFIG_FILE = "plugin.config.js";
429
425
  var sanitizePluginName = (pluginName, pascalCase = false) => {
@@ -454,7 +450,7 @@ var getPluginsList = async (basePath) => {
454
450
  try {
455
451
  const {
456
452
  default: { plugins = [] }
457
- } = await import(pathToFileURL3(tmpStoreConfigFile).href);
453
+ } = await import(tmpStoreConfigFile);
458
454
  return plugins;
459
455
  } catch (error) {
460
456
  logger.error(`Could not load plugins from store config`);
@@ -531,7 +527,7 @@ var generatePluginPages = async (basePath, plugins) => {
531
527
  plugins.forEach(async (plugin) => {
532
528
  const pluginName = getPluginName(plugin);
533
529
  const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE);
534
- const { default: pluginConfig } = await import(pathToFileURL3(pluginConfigPath).href);
530
+ const { default: pluginConfig } = await import(pluginConfigPath);
535
531
  const { pages: pagesCustom } = getPluginCustomConfig(plugin);
536
532
  const pagesConfig = {
537
533
  ...pluginConfig.pages ?? {},
@@ -611,9 +607,7 @@ var addPluginsTheme = async (basePath, plugins) => {
611
607
  (plugin) => existsSync4(
612
608
  getPackagePath(getPluginName(plugin), "src", "themes", "index.scss")
613
609
  )
614
- ).map(
615
- (plugin) => `@use "${getPluginName(plugin)}/src/themes/index.scss" as *;`
616
- ).join("\n");
610
+ ).map((plugin) => `@import "${getPluginName(plugin)}/src/themes/index.scss"`).join("\n");
617
611
  writeFileSync(tmpThemesPluginsFile, pluginImportsContent);
618
612
  };
619
613
  var getPluginAPIFileContent = (pluginName, apiName) => `
@@ -632,7 +626,7 @@ var generatePluginApis = async (basePath, plugins) => {
632
626
  plugins.forEach(async (plugin) => {
633
627
  const pluginName = getPluginName(plugin);
634
628
  const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE);
635
- const { default: pluginConfig } = await import(pathToFileURL3(pluginConfigPath).href);
629
+ const { default: pluginConfig } = await import(pluginConfigPath);
636
630
  const { apis: apisCustom } = getPluginCustomConfig(plugin);
637
631
  const apisConfig = {
638
632
  ...pluginConfig.apis ?? {},
@@ -790,9 +784,9 @@ async function copyCypressFiles(basePath) {
790
784
  }
791
785
  let userStoreConfig;
792
786
  if (existsSync5(userStoreConfigFile)) {
793
- userStoreConfig = (await import(pathToFileURL4(path5.resolve(userStoreConfigFile)).href))?.default;
787
+ userStoreConfig = (await import(path5.resolve(userStoreConfigFile)))?.default;
794
788
  } else if (existsSync5(userLegacyStoreConfigFile)) {
795
- userStoreConfig = (await import(pathToFileURL4(path5.resolve(userLegacyStoreConfigFile)).href))?.default;
789
+ userStoreConfig = (await import(path5.resolve(userLegacyStoreConfigFile)))?.default;
796
790
  } else {
797
791
  logger.info(
798
792
  `${chalk4.blue(
@@ -857,9 +851,9 @@ async function createCmsWebhookUrlsJsonFile(basePath) {
857
851
  } = withBasePath(basePath);
858
852
  let userStoreConfig;
859
853
  if (existsSync5(userStoreConfigFile)) {
860
- userStoreConfig = (await import(pathToFileURL4(path5.resolve(userStoreConfigFile)).href))?.default;
854
+ userStoreConfig = (await import(path5.resolve(userStoreConfigFile)))?.default;
861
855
  } else if (existsSync5(userLegacyStoreConfigFile)) {
862
- userStoreConfig = (await import(pathToFileURL4(path5.resolve(userLegacyStoreConfigFile)).href))?.default;
856
+ userStoreConfig = (await import(path5.resolve(userLegacyStoreConfigFile)))?.default;
863
857
  } else {
864
858
  logger.info(
865
859
  `${chalk4.blue(
@@ -888,7 +882,7 @@ async function copyTheme(basePath) {
888
882
  } = withBasePath(basePath);
889
883
  const storeConfigFile = existsSync5(userStoreConfigFile) && userStoreConfigFile || existsSync5(userLegacyStoreConfigFile) && userLegacyStoreConfigFile;
890
884
  const userStoreConfigFilePath = storeConfigFile && path5.resolve(storeConfigFile);
891
- const importedStoreConfig = userStoreConfigFilePath && await import(pathToFileURL4(userStoreConfigFilePath).href);
885
+ const importedStoreConfig = userStoreConfigFilePath && await import(userStoreConfigFilePath);
892
886
  const storeConfig = userStoreConfigFilePath && (importedStoreConfig?.default || importedStoreConfig);
893
887
  if (!storeConfig)
894
888
  logger.info(
@@ -942,10 +936,10 @@ async function checkDependencies(basePath, packagesToCheck) {
942
936
  const { coreDir, getRoot } = withBasePath(basePath);
943
937
  const corePackageJsonPath = path5.join(coreDir, "package.json");
944
938
  const rootPackageJsonPath = path5.join(getRoot(), "package.json");
945
- const { default: corePackageJson } = await import(pathToFileURL4(corePackageJsonPath).href, {
939
+ const { default: corePackageJson } = await import(corePackageJsonPath, {
946
940
  with: { type: "json" }
947
941
  });
948
- const { default: rootPackageJson } = await import(pathToFileURL4(rootPackageJsonPath).href, {
942
+ const { default: rootPackageJson } = await import(rootPackageJsonPath, {
949
943
  with: { type: "json" }
950
944
  });
951
945
  packagesToCheck.forEach((packageName) => {
@@ -993,8 +987,8 @@ async function validateAndInstallMissingDependencies(basePath) {
993
987
  if (!currentUserStoreConfigFile) {
994
988
  return;
995
989
  }
996
- const { default: userStoreConfig } = await import(pathToFileURL4(currentUserStoreConfigFile).href);
997
- const { default: userPackageJson } = await import(pathToFileURL4(path5.join(userDir, "package.json")).href, {
990
+ const { default: userStoreConfig } = await import(currentUserStoreConfigFile);
991
+ const { default: userPackageJson } = await import(path5.join(userDir, "package.json"), {
998
992
  with: { type: "json" }
999
993
  });
1000
994
  const missingDependencies = [];
@@ -1046,7 +1040,7 @@ async function enableSearchSSR(basePath) {
1046
1040
  if (!storeConfigPath) {
1047
1041
  return;
1048
1042
  }
1049
- const { default: storeConfig } = await import(pathToFileURL4(storeConfigPath).href);
1043
+ const { default: storeConfig } = await import(storeConfigPath);
1050
1044
  if (!storeConfig.experimental.enableSearchSSR) {
1051
1045
  return;
1052
1046
  }
@@ -1218,7 +1212,7 @@ async function checkDeps(basePath) {
1218
1212
  );
1219
1213
  }
1220
1214
  try {
1221
- const mod = await import(pathToFileURL5(packageJsonPath).href, {
1215
+ const mod = await import(pathToFileURL(packageJsonPath).href, {
1222
1216
  with: { type: "json" }
1223
1217
  });
1224
1218
  const pkg = mod.default ?? mod;
@@ -1254,11 +1248,10 @@ import { Args as Args2, Command as Command2, Flags as Flags2 } from "@oclif/core
1254
1248
  import { spawn } from "child_process";
1255
1249
 
1256
1250
  // src/utils/hcms.ts
1257
- import chalk6 from "chalk";
1258
1251
  import path7 from "path";
1252
+ import chalk6 from "chalk";
1259
1253
  import { confirm } from "@inquirer/prompts";
1260
1254
  import fsExtra5 from "fs-extra";
1261
- import { pathToFileURL as pathToFileURL6 } from "url";
1262
1255
  var { readFileSync: readFileSync2, existsSync: existsSync7, writeFileSync: writeFileSync3, mkdirSync: mkdirSync2 } = fsExtra5;
1263
1256
  function splitCustomDefinitions(coreDefinitions, customDefinitions, primaryIdentifier) {
1264
1257
  const coreDefinitionIdentifiers = new Set(
@@ -1323,7 +1316,7 @@ async function mergeCMSFile(fileName, basePath) {
1323
1316
  getPackagePath,
1324
1317
  userStoreConfigFile
1325
1318
  } = withBasePath(basePath);
1326
- const { default: userStoreConfig } = await import(pathToFileURL6(path7.resolve(userStoreConfigFile)).href);
1319
+ const { default: userStoreConfig } = await import(path7.resolve(userStoreConfigFile));
1327
1320
  const cmsProjectName = userStoreConfig.contentSource?.project ?? "faststore";
1328
1321
  const coreFilePath = path7.join(coreCMSDir, fileName);
1329
1322
  const customFilePath = path7.join(userCMSDir, fileName);
@@ -1400,7 +1393,6 @@ async function mergeCMSFiles(basePath) {
1400
1393
 
1401
1394
  // src/commands/cms-sync.ts
1402
1395
  import path8 from "path";
1403
- import { pathToFileURL as pathToFileURL7 } from "url";
1404
1396
  var CmsSync = class _CmsSync extends Command2 {
1405
1397
  static flags = {
1406
1398
  ["dry-run"]: Flags2.boolean({ char: "d" })
@@ -1415,7 +1407,7 @@ var CmsSync = class _CmsSync extends Command2 {
1415
1407
  const { flags, args } = await this.parse(_CmsSync);
1416
1408
  const basePath = getBasePath(args.path);
1417
1409
  const { tmpDir, userStoreConfigFile } = withBasePath(basePath);
1418
- const { default: userStoreConfig } = await import(pathToFileURL7(path8.resolve(userStoreConfigFile)).href);
1410
+ const { default: userStoreConfig } = await import(path8.resolve(userStoreConfigFile));
1419
1411
  const cmsProjectName = userStoreConfig.contentSource?.project ?? "faststore";
1420
1412
  await generate({ setup: true, basePath });
1421
1413
  await mergeCMSFiles(basePath);
@@ -1981,10 +1973,9 @@ var Generate2 = class _Generate extends Command9 {
1981
1973
  // src/commands/cache-graphql.ts
1982
1974
  import { Args as Args10, Command as Command10, Flags as Flags4 } from "@oclif/core";
1983
1975
  import chalk10 from "chalk";
1984
- import fsExtra7 from "fs-extra";
1985
1976
  import graphql from "graphql";
1986
1977
  import path15 from "path";
1987
- import { pathToFileURL as pathToFileURL8 } from "url";
1978
+ import fsExtra7 from "fs-extra";
1988
1979
  var { Kind: Kind2, OperationTypeNode, parse: parseGraphql } = graphql;
1989
1980
  var persistedDocumentsName = "persisted-documents.json";
1990
1981
  var configFileName2 = "discovery.config.default.js";
@@ -2043,7 +2034,7 @@ var CacheGraphql = class _CacheGraphql extends Command10 {
2043
2034
  logger.info(
2044
2035
  `${chalk10.blue("[Info]")} - Cached operations output: ${cachedOperationsPath}`
2045
2036
  );
2046
- const { default: persistedDocuments } = await import(pathToFileURL8(persistedDocumentsPath).href, { with: { type: "json" } });
2037
+ const { default: persistedDocuments } = await import(persistedDocumentsPath, { with: { type: "json" } });
2047
2038
  const cachedQueries = getQueries(persistedDocuments);
2048
2039
  saveCachedOperationsFile(
2049
2040
  `${JSON.stringify(cachedQueries ?? [], null, 2)}
@@ -2124,7 +2115,6 @@ import fsExtra8 from "fs-extra";
2124
2115
  import { existsSync as existsSync11 } from "fs";
2125
2116
  import path16 from "path";
2126
2117
  import { format } from "prettier";
2127
- import { pathToFileURL as pathToFileURL9 } from "url";
2128
2118
  var configFileName3 = "discovery.config.default.js";
2129
2119
  var GenerateI18n = class _GenerateI18n extends Command11 {
2130
2120
  static hidden = true;
@@ -2210,7 +2200,7 @@ var GenerateI18n = class _GenerateI18n extends Command11 {
2210
2200
  if (fsExtra8.pathExistsSync(tmpDir))
2211
2201
  logger.info(`${chalk11.blue("[Info]")} - .faststore Path at: ${tmpDir}`);
2212
2202
  logger.info(`${chalk11.blue("[Info]")} - Config file location: ${configPath}`);
2213
- const discoveryConfig = await import(pathToFileURL9(configPath).href);
2203
+ const discoveryConfig = await import(configPath);
2214
2204
  const faststore = new FastStoreSDK({
2215
2205
  account: VTEX_ACCOUNT,
2216
2206
  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 '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"]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/cli",
3
- "version": "4.1.2-dev.8",
3
+ "version": "4.1.2",
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.1.2-dev.8",
50
- "@faststore/core": "4.1.2-dev.8"
49
+ "@faststore/api": "4.1.1",
50
+ "@faststore/core": "4.1.2"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/degit": "^2.8.6",