@faststore/cli 4.2.0-dev.0 → 4.2.0-dev.1
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 +14 -14
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -831,23 +831,23 @@ function copyUserStarterToCustomizations(basePath) {
|
|
|
831
831
|
copySync2(userSrcDir, tmpCustomizationsSrcDir, { dereference: true });
|
|
832
832
|
createNextJsPages(basePath);
|
|
833
833
|
}
|
|
834
|
-
if (existsSync5(userStoreConfigFile)) {
|
|
835
|
-
copySync2(userStoreConfigFile, tmpStoreConfigFile, { dereference: true });
|
|
836
|
-
} else if (existsSync5(userLegacyStoreConfigFile)) {
|
|
837
|
-
copySync2(userLegacyStoreConfigFile, tmpStoreConfigFile, {
|
|
838
|
-
dereference: true
|
|
839
|
-
});
|
|
840
|
-
} else {
|
|
841
|
-
logger.info(
|
|
842
|
-
`${chalk4.blue(
|
|
843
|
-
"info"
|
|
844
|
-
)} - No store config file was found in the root directory`
|
|
845
|
-
);
|
|
846
|
-
}
|
|
847
|
-
logger.log(`${chalk4.green("success")} - Starter files copied`);
|
|
848
834
|
} catch (err) {
|
|
849
835
|
logger.error(`${chalk4.red("error")} - ${err}`);
|
|
850
836
|
}
|
|
837
|
+
if (existsSync5(userStoreConfigFile)) {
|
|
838
|
+
copySync2(userStoreConfigFile, tmpStoreConfigFile, { dereference: true });
|
|
839
|
+
} else if (existsSync5(userLegacyStoreConfigFile)) {
|
|
840
|
+
copySync2(userLegacyStoreConfigFile, tmpStoreConfigFile, {
|
|
841
|
+
dereference: true
|
|
842
|
+
});
|
|
843
|
+
} else {
|
|
844
|
+
logger.info(
|
|
845
|
+
`${chalk4.blue(
|
|
846
|
+
"info"
|
|
847
|
+
)} - No store config file was found in the root directory`
|
|
848
|
+
);
|
|
849
|
+
}
|
|
850
|
+
logger.log(`${chalk4.green("success")} - Starter files copied`);
|
|
851
851
|
}
|
|
852
852
|
async function createCmsWebhookUrlsJsonFile(basePath) {
|
|
853
853
|
const {
|
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":";AAAA,SAAS,WAAW;;;ACApB,SAAS,MAAM,SAAS,aAAa;AACrC,OAAOA,YAAW;AAClB,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,cAAa;AACpB,OAAOC,WAAU;AACjB,SAAS,iBAAAC,gBAAe,iBAAAC,sBAAqB;;;ACN7C,OAAO,aAAa;AACpB,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAC9B,OAAO,oBAAoB;AAE3B,IAAM,EAAE,WAAW,IAAI;AAGvB,eAAsB,6BAA6B;AACjD,MAAI,QAAQ;AACZ,QAAM,QAAQ;AAAA,IACZ,MAAM,kBAAkB,WAAW;AAAA,KAClC,MAAM,kBAAkB,WAAW,IAAI,MAAM,IAAI,KAAK;AAAA,EACzD;AAEA,MAAI,CAAC,SAAS,QAAQ,WAAW,KAAK,KAAK,MAAO,QAAO;AAEzD,UAAQ,UAAU,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE,UAAU,QAAQ,CAAC,GAAG,OAAO,KAAK;AAE5E,SAAO;AACT;AAEA,eAAsB,kBACpB,KACA,MAA0B,QAAQ,IAAI,GACtC,QAAQ,IACR;AACA,MAAI,UAAU,eAAe,KAAK,EAAE,IAAI,CAAC;AAEzC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,4BAA4B,GAAG,EAAE;AAE/D,MAAI,UAAU,MAAM,kBAAkB,OAAO;AAC7C,SAAO,SAAS,SAAS,OAAO,EAAE,QAAQ,GAAG;AAC3C,cAAU,KAAK,SAAS,IAAI;AAC5B,cAAU,MAAM,kBAAkB,KAAK,SAAS,IAAI,CAAC;AAAA,EACvD;AAEA,MAAI,SAAS,SAAS;AACpB,UAAM,IAAI,MAAM,oCAAoC,GAAG,cAAc;AAEvE,SAAO;AACT;AAEA,eAAe,kBAAkB,IAQ/B;AACA,QAAM,OAAO,gBACX,WAAY,IAAI,SAAS,IAAI,KAAK,MAAQ,MAAM,KAAK,IAAI,IAAI,KAAM;AAErE,MAAI,aAAa;AACf,UAAM,IAAI,MAAM,wBAAwB,IAAI,OAAO,EAAE,EAAE;AAEzD,MAAI,CAAC,WAAW,QAAQ,EAAG;AAE3B,QAAM,UAAU,MAAM,OAAO,cAAc,QAAQ,EAAE,MAAM;AAAA,IACzD,MAAM,EAAE,MAAM,OAAO;AAAA,EACvB;AAEA,SAAO,QAAQ,WAAW,WAAW,CAAC;AACxC;AAEA,eAAsB,kBAAkB,KAAa;AACnD,SAAO,MAAM,kBAAkB,MAAM,kBAAkB,GAAG,CAAC;AAC7D;;;ACtEA,OAAO,WAAW;AAClB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AAEjB,SAAS,iBAAAC,sBAAqB;;;ACJ9B,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAEvB,IAAM,cAAc,CAAC,aAAsB;AAChD,MAAI,UAAU;AACZ,WAAO,KAAK,QAAQ,QAAQ;AAAA,EAC9B;AAEA,SAAO,QAAQ,IAAI;AACrB;AAEO,IAAM,eAAe,CAAC,aAAqB;AAChD,QAAM,gBAAgB;AAGtB,QAAM,UAAU,MAAM;AAOtB,QAAM,qBAAqB,MACzB,KAAK;AAAA,IACH,cAAc,YAAY,QAAQ,mBAAmB,YAAY,GAAG,CAAC;AAAA,EACvE;AAEF,QAAM,oBAAoB,QAAQ;AAClC,QAAM,SAAS,KAAK,KAAK,QAAQ,GAAG,aAAa;AACjD,QAAM,aAAa,KAAK,KAAK,mBAAmB,KAAK;AACrD,QAAM,iBAAiB,IAAI,gBACzB,KAAK,KAAK,mBAAmB,gBAAgB,GAAG,WAAW;AAE7D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,mBAAmB,KAAK,KAAK,YAAY,QAAQ;AAAA,IACjD,YAAY,KAAK,KAAK,mBAAmB,OAAO,WAAW;AAAA,IAC3D,2BAA2B,KAAK;AAAA,MAC9B;AAAA,MACA;AAAA,IACF;AAAA,IACA,qBAAqB,KAAK,KAAK,mBAAmB,qBAAqB;AAAA,IAEvE,cAAc,KAAK,KAAK,QAAQ,oBAAoB;AAAA,IACpD;AAAA,IACA;AAAA,IACA,yBAAyB,KAAK,KAAK,QAAQ,OAAO,kBAAkB,KAAK;AAAA,IACzE,6BAA6B,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,sBAAsB,KAAK,KAAK,QAAQ,OAAO,WAAW,YAAY;AAAA,IACtE,WAAW,CAAC,cAAc,gBACxB,KAAK,KAAK,QAAQ,OAAO,WAAW;AAAA,IACtC,uBAAuB,KAAK,KAAK,QAAQ,uBAAuB;AAAA,IAChE,aAAa,KAAK,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7C,WAAW,KAAK,KAAK,QAAQ,OAAO,SAAS,KAAK;AAAA,IAClD,eAAe,KAAK,KAAK,QAAQ,OAAO,SAAS;AAAA,IACjD,oBAAoB,KAAK;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,SAAS,mBAAmB;AAAA,IAC5B,YAAY,KAAK,KAAK,mBAAmB,GAAG,OAAO,WAAW;AAAA,EAChE;AACF;;;AC3EO,IAAM,SAAS,IAAI,MAAM,SAAS;AAAA,EACvC,IAAI,QAAQ,MAAqB;AAC/B,QAAI,SAAS,OAAO;AAClB,aAAO,IAAI,SAAgB;AACzB,YAAI,QAAQ,IAAI,oBAAoB,QAAQ;AAC1C,iBAAO,IAAI,GAAG,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO,IAAI;AAAA,EACpB;AACF,CAAC;;;AFHD,IAAM,iBAAiB;AAoBvB,eAAsB,mBACpB,UACuC;AACvC,QAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AACxC,QAAM,cAAc;AAAA,IAClBC,MAAK,KAAK,QAAQ,cAAc;AAAA,IAChCA,MAAK,KAAK,UAAU,cAAc;AAAA,EACpC;AAEA,aAAW,cAAc,aAAa;AACpC,QAAIC,YAAW,UAAU,GAAG;AAC1B,UAAI;AACF,cAAM,kBAAkB,MAAM,OAAOC,eAAc,UAAU,EAAE;AAC/D,eAAO,iBAAiB,WAAW;AAAA,MACrC,SAAS,OAAO;AACd,eAAO;AAAA,UACL,GAAG,MAAM,OAAO,SAAS,CAAC,kCAAkC,UAAU;AAAA,QACxE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAQA,SAAS,sBAAsB,QAAwC;AACrE,SAAO,QAAQ,cAAc,YAAY;AAC3C;AAQA,SAAS,qCACP,QACM;AACN,MAAI,CAAC,sBAAsB,MAAM,GAAG;AAClC;AAAA,EACF;AAEA,QAAM,2BAA2B,QAAQ,eAAe,MAAM,YAAY;AAE1E,MAAI,6BAA6B,MAAM;AACrC,WAAO;AAAA,MACL;AAAA,EAAK,MAAM,IAAI,SAAS,CAAC,2DAA2D,wBAAwB;AAAA;AAAA,EACvG,MAAM,KAAK,kBAAkB,CAAC;AAAA,cAClB,MAAM,KAAK,qBAAqB,CAAC;AAAA;AAAA;AAAA,YAEnC,MAAM,MAAM,MAAM,CAAC;AAAA;AAAA;AAAA,EAE7B,MAAM,IAAI,kEAAkE,CAAC;AAAA;AAAA,IACpF;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AASA,eAAsB,6BACpB,UACkB;AAClB,QAAM,SAAS,MAAM,mBAAmB,QAAQ;AAGhD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,uCAAqC,MAAM;AAE3C,SAAO,sBAAsB,MAAM;AACrC;;;AGjHA,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,YAAW;AAQX,SAAS,2BAA2B,UAAkB;AAC3D,QAAM,kBAAkB,GAAG,QAAQ;AACnC,QAAM,kBAAkB,GAAG,QAAQ;AAEnC,QAAM,oBAAoBC,YAAW,eAAe;AACpD,QAAM,oBAAoBA,YAAW,eAAe;AAEpD,MAAI,qBAAqB,mBAAmB;AAC1C,UAAM,aAAa;AAAA,MACjB,oBAAoB,wBAAwB;AAAA,MAC5C,oBAAoB,aAAa;AAAA,IACnC,EACG,OAAO,OAAO,EACd,KAAK,OAAO;AAEf,WAAO;AAAA,MACL,GAAGC,OAAM,OAAO,SAAS,CAAC,wCAAwCA,OAAM,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA,IAG1F;AACA,WAAO,IAAI,EAAE;AAAA,EACf;AACF;;;AC/BA,OAAOC,YAAW;AAClB,OAAOC,cAAa;AAEpB,OAAOC,WAAU;AAEjB,OAAO,SAAS;AAEhB,SAAS,iBAAAC,sBAAqB;;;ACP9B,OAAO,QAAQ;AACf,OAAOC,WAAU;;;ACKV,IAAM,wBAAwB,CAAC,aAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAU9B,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADVrC,IAAM,uBAAuB,CAAC,cAAc;AAQ5C,IAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,MAA+B;AAC7B,KAAG,YAAY,qBAAqB,EAAE,QAAQ,CAAC,SAAS;AACtD,UAAM,WAAWC,MAAK,KAAK,uBAAuB,IAAI;AACtD,UAAM,kBAAkBA,MAAK,KAAK,cAAc,IAAI;AACpD,QAAI,GAAG,SAAS,QAAQ,EAAE,YAAY,GAAG;AACvC,UAAI,CAAC,GAAG,WAAW,eAAe,GAAG;AACnC,WAAG,UAAU,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAAA,MACnD;AACA,aAAO,oBAAoB;AAAA,QACzB,uBAAuB;AAAA,QACvB,cAAc;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,cAAc,SAAS,SAAS,MAAM;AAK5C,UAAM,yBACJ,CAAC,GAAG,WAAW,eAAe,KAC9B,CAAC,GAAG;AAAA,MACFA,MAAK,KAAK,gBAAgB,QAAQ,QAAQ,EAAE,GAAG,WAAW;AAAA,IAC5D;AAEF,QAAI,eAAe,wBAAwB;AACzC,YAAM,mBAAmB,+BAA+B,SAAS,QAAQ,2BAA2B,EAAE,EAAE,QAAQ,QAAQ,EAAE,CAAC;AAC3H,YAAM,UAAU,sBAAsB,gBAAgB;AACtD,SAAG,cAAc,iBAAiB,OAAO;AAAA,IAC3C;AAAA,EACF,CAAC;AACH;AAEA,SAAS,oBAAoB,MAAc;AACzC,SAAO,qBAAqB,KAAK,CAAC,WAAW,KAAK,WAAW,MAAM,CAAC;AACtE;AAEO,SAAS,kBAAkB,UAAkB;AAClD,QAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AAExC,QAAM,eAAeA,MAAK,KAAK,QAAQ,WAAW;AAClD,QAAM,wBAAwBA,MAAK;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,GAAG,WAAW,qBAAqB,GAAG;AAGzC;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC;AAAA,IAC1B,UAAAC;AAAA,IACA;AAAA,EACF,MAAsD;AACpD,UAAM,QAAQ,GAAG,YAAY,SAAS,EAAE,eAAe,KAAK,CAAC;AAE7D,WAAO,MAAM,MAAM,CAAC,SAAS;AAC3B,YAAM,WAAWD,MAAK,KAAK,SAAS,KAAK,IAAI;AAE7C,UAAI,KAAK,YAAY,GAAG;AACtB,eAAO,mBAAmB,EAAE,UAAAC,WAAU,SAAS,SAAS,CAAC;AAAA,MAC3D;AAEA,UAAI,CAAC,KAAK,OAAO,GAAG;AAClB,eAAO;AAAA,MACT;AAEA,YAAM,aAAa,qBAAqB,KAAK,KAAK,IAAI;AACtD,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AAGA,YAAM,eAAeD,MAAK,SAASC,WAAU,QAAQ;AACrD,YAAM,iBACJ,MAAM,aAAa,QAAQ,OAAO,GAAG,EAAE,QAAQ,sBAAsB,EAAE;AAEzE,aAAO,oBAAoB,cAAc;AAAA,IAC3C,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,mBAAmB;AAAA,IACzC,UAAU;AAAA,IACV,SAAS;AAAA,EACX,CAAC;AAED,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI;AAAA,MACR,6BAA6B,qBAAqB,KAAK,IAAI,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,sBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA,2BAA2B;AAAA,EAC7B,CAAC;AACH;;;AEtHA,OAAOC,YAAW;AAElB,SAAS,gBAAgB;AAKzB,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,SAAO,MAAM,GAAGC,OAAM,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE;AAEjD,MAAI,OAAO,OAAO;AAChB,WAAO;AAAA,MACL,GAAGA,OAAM,QAAQ,OAAO,CAAC,QAAQ,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA,IAC/D;AACA,WAAO,IAAI,MAAM,QAAQ,SAAS,CAAC;AAAA,EACrC;AAEA,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,SAAO,KAAK,GAAGA,OAAM,OAAO,MAAM,CAAC,MAAM,OAAO,EAAE;AAElD,MAAI,OAAO,OAAO;AAChB,WAAO;AAAA,MACL,GAAGA,OAAM,QAAQ,OAAO,CAAC,QAAQ,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA,IAC/D;AACA,WAAO,IAAI,MAAM,QAAQ,SAAS,CAAC;AAAA,EACrC;AACF;AAEO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,QAAQ,QAAQ,IAAI,oBAAoB,SAAS,OAAO;AAE9D,MAAI;AACF,WAAO,IAAI,aAAa,GAAG,EAAE;AAE7B,UAAM,MAAM;AAAA,MACV,QAAQ,GAAG,GAAG,4BAA4B,GAAG,GAAG;AAAA,MAChD;AAAA,QACE,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AACA,WAAO,IAAI,YAAY,KAAK,SAAS,KAAK,SAAS,EAAE;AACrD,WAAO,IAAI,cAAc,GAAG,EAAE;AAAA,EAChC,SAAS,OAAO;AACd,UAAM,iBAAiB,QAAS,QAA0B;AAE1D,QAAI,WAAW,WAAW;AACxB,kBAAY,EAAE,SAAS,cAAc,KAAK,OAAO,eAAe,CAAC;AAAA,IACnE,OAAO;AACL,gBAAU,EAAE,SAAS,cAAc,KAAK,OAAO,eAAe,CAAC;AAAA,IACjE;AAAA,EACF;AACF;;;ACxEA,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,iBAAiB,MAAM,2BAA2B;AACxD,QAAM,iBAAiB,mBAAmB,QAAQ,YAAY;AAE9D,iBAAe;AAAA,IACb,KAAK,GAAG,cAAc,IAAI,cAAc,IAAI,aAAa,KAAK,GAAG,CAAC;AAAA,IAClE;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AACH;;;ACvBA,OAAOC,cAAa;AACpB,OAAOC,WAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAI9B,IAAM,EAAE,UAAU,YAAAC,aAAY,WAAW,aAAa,cAAc,IAAIC;AAuBxE,IAAM,qBAAqB;AAE3B,IAAM,qBAAqB,CAAC,YAAoB,aAAa,UAAU;AACrE,QAAM,YAAY,WAAW,MAAM,GAAG,EAAE,CAAC;AAEzC,MAAI,YAAY;AACd,WAAO,UACJ,YAAY,EACZ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,EAAE;AAAA,EACZ;AAEA,SAAO;AACT;AAEO,IAAM,gBAAgB,CAAC,WAAmB;AAC/C,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK,MAAM,EAAE,CAAC;AAC9B;AAEA,IAAM,wBAAwB,CAAC,WAAmB;AAChD,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OAAO,cAAc,MAAM,CAAC;AACrC;AAEA,IAAM,mBAAmB,OAAO,UAAkB,eAAuB;AACvE,QAAM,EAAE,eAAe,IAAI,aAAa,QAAQ;AAChD,SAAO,eAAe,YAAY,KAAK;AACzC;AAEO,IAAM,iBAAiB,OAAO,aAAwC;AAC3E,QAAM,EAAE,mBAAmB,IAAI,aAAa,QAAQ;AAEpD,MAAI;AACF,UAAM;AAAA,MACJ,SAAS,EAAE,UAAU,CAAC,EAAE;AAAA,IAC1B,IAAI,MAAM,OAAOC,eAAc,kBAAkB,EAAE;AACnD,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO,MAAM,0CAA0C;AAAA,EACzD;AAEA,SAAO,CAAC;AACV;AAEA,IAAM,iBAAiB,OAAO,UAAkB,YAAsB;AACpE,QAAM,EAAE,cAAc,IAAI,aAAa,QAAQ;AAE/C,SAAO,IAAI,uBAAuB;AAElC,UAAQ,QAAQ,OAAO,WAAW;AAChC,UAAM,aAAa,cAAc,MAAM;AACvC,UAAM,gBAAgB,MAAM;AAAA,MAC1B;AAAA,MACA,cAAc,UAAU;AAAA,IAC1B;AACA,UAAM,iBAAiBC,MAAK;AAAA,MAC1B;AAAA,MACA,mBAAmB,UAAU;AAAA,IAC/B;AAEA,aAAS,eAAe,cAAc;AACtC,WAAO,IAAI,UAAU,UAAU,QAAQ;AAAA,EACzC,CAAC;AACH;AAEA,IAAM,wBAAwB,OAAO,UAAkB,YAAsB;AAC3E,QAAM,EAAE,QAAQ,eAAe,IAAI,aAAa,QAAQ;AAExD,SAAO,IAAI,6BAA6B;AAExC,UAAQ,QAAQ,OAAO,WAAW;AAChC,UAAM,aAAa,cAAc,MAAM;AACvC,UAAM,aAAa,eAAe,cAAc,UAAU,CAAC;AAE3D,QAAI;AACF,UAAIH,YAAW,GAAG,UAAU,SAAS,GAAG;AACtC,iBAAS,GAAG,UAAU,WAAW,GAAG,MAAM,WAAW;AAAA,UACnD,aAAa;AAAA,UACb,WAAW;AAAA,QACb,CAAC;AACD,eAAO,IAAI,4BAA4B;AAAA,MACzC;AAAA,IACF,SAAS,GAAG;AACV,aAAO,MAAM,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACH;AAEA,IAAM,2BAA2B,CAC/B,YACA,UACA,cACG;AAAA;AAAA;AAAA,qCAGgC,UAAU,UAAU,QAAQ;AAAA,EAC/D,YAAY,8EAA8E,EAAE;AAAA,EAC5F,YAAY,mEAAmE,EAAE;AAAA;AAAA;AAAA,wCAG3C,YAAY,mCAAmC,YAAY;AAAA;AAAA;AAAA,EAGjG,YAAY,uEAAuE,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,UAK7E,YAAY,6BAA6B,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQjD,YACI;AAAA;AAAA,+BAGA,iCACN;AAAA;AAAA;AAIF,IAAM,sBAAsB,OAAO,UAAkB,YAAsB;AACzE,QAAM,EAAE,aAAa,eAAe,IAAI,aAAa,QAAQ;AAE7D,SAAO,IAAI,yBAAyB;AAEpC,UAAQ,QAAQ,OAAO,WAAW;AAChC,UAAM,aAAa,cAAc,MAAM;AACvC,UAAM,mBAAmB,eAAe,YAAY,kBAAkB;AAEtE,UAAM,EAAE,SAAS,aAAa,IAAI,MAAM,OACtCE,eAAc,gBAAgB,EAAE;AAGlC,UAAM,EAAE,OAAO,YAAY,IAAI,sBAAsB,MAAM;AAE3D,UAAM,cAA0C;AAAA,MAC9C,GAAI,aAAa,SAAS,CAAC;AAAA,MAC3B,GAAG;AAAA,IACL;AAEA,UAAM,QAAQ,OAAO,KAAK,WAAW;AAErC,UAAM,QAAQ,OAAO,aAAa;AAChC,YAAM,QAAQ,YAAY,QAAQ,EAAE,KAAK,MAAM,GAAG;AAElD,YAAM,WAAW,MAAM,IAAI;AAC3B,YAAM,YAAY;AAElB,YAAM,WAAWC,MAAK,KAAK,aAAa,GAAG,WAAW,WAAW,MAAM;AAEvE,YAAM,cAAc;AAAA,QAClB,mBAAmB,UAAU;AAAA,QAC7B;AAAA,QACA,YAAY,QAAQ,EAAE;AAAA,MACxB;AAEA,gBAAUA,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACrD,oBAAc,UAAU,WAAW;AAAA,IACrC,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,mBAAmB,UAAkB,SAAmB;AAC5E,QAAM,EAAE,eAAe,eAAe,IAAI,aAAa,QAAQ;AAE/D,SAAO,IAAI,wBAAwB;AAEnC,QAAM,wBAAwB,QAC3B;AAAA,IAAO,CAAC,WACPH;AAAA,MACE,eAAe,cAAc,MAAM,GAAG,OAAO,cAAc,UAAU;AAAA,IACvE;AAAA,EACF,EACC,IAAI,CAAC,WAAW;AACf,UAAM,kBACJ,mBAAmB,cAAc,MAAM,GAAG,IAAI,IAAI;AAEpD,WAAO;AAAA,MACL,QAAQ,uBAAuB,eAAe,wBAAwB,mBAAmB,cAAc,MAAM,CAAC,CAAC;AAAA,MAC/G;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,2BAA2B;AAAA,IAC/B,sBAAsB,IAAI,CAAC,WAAW,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,MAG7D,sBAAsB,IAAI,CAAC,WAAW,MAAM,OAAO,eAAe,EAAE,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAIrF,QAAM,cAAcG,MAAK,KAAK,eAAe,UAAU;AACvD,gBAAc,aAAa,wBAAwB;AACnD,SAAO,IAAI,2BAA2B;AACtC,SAAO,IAAI,WAAW;AACtB,SAAO,IAAI,wBAAwB;AACrC;AAEA,eAAsB,oBAAoB,UAAkB,SAAmB;AAC7E,QAAM,EAAE,eAAe,eAAe,IAAI,aAAa,QAAQ;AAE/D,SAAO,IAAI,yBAAyB;AAEpC,UACG,IAAI,CAAC,YAAY;AAAA,IAChB,YAAY,cAAc,MAAM;AAAA,IAChC,qBAAqB;AAAA,MACnB,cAAc,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,EAAE,EACD,OAAO,CAAC,EAAE,oBAAoB,MAAMH,YAAW,mBAAmB,CAAC,EACnE,QAAQ,EACR,QAAQ,CAAC,EAAE,YAAY,oBAAoB,MAAM;AAChD,UAAM,6BAAuC,CAAC;AAE9C,UAAM,sBAAsB,mBAAmB,UAAU;AAEzD,UAAM,gBAAgB,YAAY,mBAAmB;AAErD,kBACG,OAAO,CAAC,SAAS,CAAC,2BAA2B,SAAS,IAAI,CAAC,EAC3D,QAAQ,CAAC,qBAAqB;AAC7B,YAAM,sBAAsB,yCAAyC,mBAAmB,yBAAyB,iBAAiB,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/I;AAAA,QACEG,MAAK,KAAK,eAAe,aAAa,gBAAgB;AAAA,QACtD;AAAA,MACF;AACA,iCAA2B,KAAK,gBAAgB;AAAA,IAClD,CAAC;AAAA,EACL,CAAC;AACL;AAEA,IAAM,kBAAkB,OAAO,UAAkB,YAAsB;AACrE,QAAM,EAAE,gBAAgB,qBAAqB,IAAI,aAAa,QAAQ;AAEtE,QAAM,uBAAuB,QAC1B;AAAA,IAAO,CAAC,WACPH;AAAA,MACE,eAAe,cAAc,MAAM,GAAG,OAAO,UAAU,YAAY;AAAA,IACrE;AAAA,EACF,EACC;AAAA,IACC,CAAC,WAAW,SAAS,cAAc,MAAM,CAAC;AAAA,EAC5C,EACC,KAAK,IAAI;AAEZ,gBAAc,sBAAsB,oBAAoB;AAC1D;AAEA,IAAM,0BAA0B,CAAC,YAAoB,YAAoB;AAAA;AAAA;AAAA,qCAGpC,UAAU,SAAS,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ/D,IAAM,qBAAqB,OAAO,UAAkB,YAAsB;AACxE,QAAM,EAAE,WAAW,eAAe,IAAI,aAAa,QAAQ;AAE3D,SAAO,IAAI,wBAAwB;AAEnC,UAAQ,QAAQ,OAAO,WAAW;AAChC,UAAM,aAAa,cAAc,MAAM;AACvC,UAAM,mBAAmB,eAAe,YAAY,kBAAkB;AAEtE,UAAM,EAAE,SAAS,aAAa,IAAI,MAAM,OACtCE,eAAc,gBAAgB,EAAE;AAGlC,UAAM,EAAE,MAAM,WAAW,IAAI,sBAAsB,MAAM;AAEzD,UAAM,aAAwC;AAAA,MAC5C,GAAI,aAAa,QAAQ,CAAC;AAAA,MAC1B,GAAG;AAAA,IACL;AAEA,UAAM,OAAO,OAAO,KAAK,UAAU;AAEnC,SAAK,QAAQ,OAAO,YAAY;AAC9B,YAAM,QAAQ,WAAW,OAAO,EAAE,KAAK,MAAM,GAAG;AAEhD,YAAM,UAAU,MAAM,IAAI;AAC1B,YAAM,WAAW;AAEjB,YAAM,UAAUC,MAAK;AAAA,QACnB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AAEA,YAAM,cAAc;AAAA,QAClB,mBAAmB,UAAU;AAAA,QAC7B;AAAA,MACF;AAEA,gBAAUA,MAAK,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;AACpD,oBAAc,SAAS,WAAW;AAAA,IACpC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,iBAAiB,OAAO,aAAqB;AACxD,QAAM,UAAU,MAAM,eAAe,QAAQ;AAE7C,iBAAe,UAAU,OAAO;AAChC,wBAAsB,UAAU,OAAO;AACvC,sBAAoB,UAAU,OAAO;AACrC,qBAAmB,UAAU,OAAO;AACpC,qBAAmB,UAAU,OAAO;AACpC,sBAAoB,UAAU,OAAO;AACrC,kBAAgB,UAAU,OAAO;AACnC;;;AL5VA,IAAM;AAAA,EACJ;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,EACA;AACF,IAAIC;AAOJ,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF;AAEA,SAAS,gBAAgB,UAAkB;AACzC,QAAM,EAAE,QAAQ,cAAc,IAAI,aAAa,QAAQ;AAEvD,MAAI;AACF,QAAIH,YAAW,MAAM,GAAG;AACtB,iBAAW,MAAM;AAAA,IACnB;AAEA,eAAW,MAAM;AACjB,WAAO;AAAA,MACL,GAAGI,OAAM,MAAM,SAAS,CAAC,uBAAuBA,OAAM;AAAA,QACpD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,EAC/C;AACF;AAOA,SAAS,yBAAyB,UAAkB;AAClD,QAAM,EAAE,SAAS,OAAO,IAAI,aAAa,QAAQ;AAEjD,QAAM,EAAE,SAAS,GAAG,GAAG,oBAAoB,IAAI,KAAK;AAAA,IAClD,aAAaC,MAAK,KAAK,SAAS,cAAc,GAAG,MAAM;AAAA,EACzD;AAEA,sBAAoB,OAAO;AAC3B,sBAAoB,UAAU;AAAA,IAC5B,GAAG,oBAAoB;AAAA,IACvB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAEA,gBAAcA,MAAK,KAAK,QAAQ,cAAc,GAAG,qBAAqB;AAAA,IACpE,QAAQ;AAAA,EACV,CAAC;AACH;AAGA,IAAM,iCAAiC,CAAC,eAAe;AAOvD,SAAS,2BAA2B,UAAkB;AACpD,QAAM,EAAE,SAAS,OAAO,IAAI,aAAa,QAAQ;AAEjD,QAAM,mBAAmBA,MAAK,KAAK,SAAS,eAAe;AAE3D,QAAM,mBAAmB,aAAa,kBAAkB,MAAM;AAC9D,QAAM,WAAW,KAAK,MAAM,gBAAgB;AAE5C,iCAA+B,QAAQ,CAAC,eAAe;AACrD,aAAS,gBAAgB,UAAU,IAAI;AAAA,EACzC,CAAC;AAED,gBAAcA,MAAK,KAAK,QAAQ,eAAe,GAAG,UAAU;AAAA,IAC1D,QAAQ;AAAA,EACV,CAAC;AACH;AAEA,SAAS,cAAc,UAAkB;AACvC,QAAM,EAAE,SAAS,OAAO,IAAI,aAAa,QAAQ;AAEjD,MAAI;AACF,IAAAN,UAAS,SAAS,QAAQ;AAAA,MACxB,aAAa;AAAA,MACb,OAAO,KAAK;AACV,cAAM,gBAAgBM,MAAK,SAAS,GAAG;AACvC,cAAM,aAAa,gBACf,CAAC,YAAY,SAAS,aAAa,IACnC;AAEJ,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,6BAAyB,QAAQ;AACjC,+BAA2B,QAAQ;AAEnC,WAAO,IAAI,GAAGD,OAAM,MAAM,SAAS,CAAC,sBAAsB;AAAA,EAC5D,SAAS,GAAG;AACV,WAAO,MAAM,CAAC;AAAA,EAChB;AACF;AAEA,SAAS,gBAAgB,UAAkB;AACzC,QAAM,EAAE,SAAS,OAAO,IAAI,aAAa,QAAQ;AAEjD,QAAM,YAAY,CAAC,QAAQ,OAAO,OAAO,OAAO,UAAU,KAAK;AAC/D,MAAI;AACF,QAAIJ,YAAW,GAAG,OAAO,SAAS,GAAG;AACnC,MAAAD,UAAS,GAAG,OAAO,WAAW,GAAG,MAAM,WAAW;AAAA,QAChD,aAAa;AAAA,QACb,WAAW;AAAA,QACX,QAAQ,CAAC,QAAQ;AACf,gBAAM,QAAQ,UAAU,KAAK,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC;AAEvD,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AACD,aAAO,IAAI,GAAGK,OAAM,MAAM,SAAS,CAAC,wBAAwB;AAAA,IAC9D;AAAA,EACF,SAAS,GAAG;AACV,WAAO,MAAM,CAAC;AAAA,EAChB;AACF;AAEA,eAAe,iBAAiB,UAAkB;AAChD,QAAM,EAAE,SAAS,qBAAqB,2BAA2B,OAAO,IACtE,aAAa,QAAQ;AAEvB,MAAI;AAEF,QAAIJ,YAAW,GAAG,OAAO,eAAe,GAAG;AACzC,MAAAD,UAAS,GAAG,OAAO,iBAAiB,GAAG,MAAM,iBAAiB;AAAA,QAC5D,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAGA,QAAIC,YAAW,GAAG,OAAO,oBAAoB,GAAG;AAC9C,MAAAD,UAAS,GAAG,OAAO,sBAAsB,GAAG,MAAM,sBAAsB;AAAA,QACtE,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAEA,QAAI;AAEJ,QAAIC,YAAW,mBAAmB,GAAG;AACnC,yBACE,MAAM,OAAOM,eAAcD,MAAK,QAAQ,mBAAmB,CAAC,EAAE,QAC7D;AAAA,IACL,WAAWL,YAAW,yBAAyB,GAAG;AAChD,yBACE,MAAM,OACJM,eAAcD,MAAK,QAAQ,yBAAyB,CAAC,EAAE,QAExD;AAAA,IACL,OAAO;AACL,aAAO;AAAA,QACL,GAAGD,OAAM;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAGA,QACEJ,YAAW,GAAG,OAAO,UAAU,KAC/B,iBAAiB,cAAc,wBAC/B;AACA,MAAAD,UAAS,GAAG,OAAO,YAAY,GAAG,MAAM,YAAY;AAAA,QAClD,WAAW;AAAA,QACX,aAAa;AAAA,MACf,CAAC;AAED,aAAO,IAAI,GAAGK,OAAM,MAAM,SAAS,CAAC,8BAA8B;AAAA,IACpE;AAGA,QAAI,iBAAiB,cAAc,iBAAiB,GAAG;AACrD,MAAAL;AAAA,QACE,GAAG,MAAM;AAAA,QACT,GAAG,MAAM;AAAA,QACT,EAAE,WAAW,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,EACF,SAAS,GAAG;AACV,WAAO,MAAM,CAAC;AAAA,EAChB;AACF;AAEA,SAAS,gCAAgC,UAAkB;AACzD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,QAAQ;AAEzB,MAAI;AACF,QAAIC,YAAW,UAAU,KAAKC,aAAY,UAAU,EAAE,SAAS,GAAG;AAChE,MAAAF,UAAS,YAAY,yBAAyB,EAAE,aAAa,KAAK,CAAC;AACnE,wBAAkB,QAAQ;AAAA,IAC5B;AAEA,QAAIC,YAAW,mBAAmB,GAAG;AACnC,MAAAD,UAAS,qBAAqB,oBAAoB,EAAE,aAAa,KAAK,CAAC;AAAA,IACzE,WAAWC,YAAW,yBAAyB,GAAG;AAChD,MAAAD,UAAS,2BAA2B,oBAAoB;AAAA,QACtD,aAAa;AAAA,MACf,CAAC;AAAA,IACH,OAAO;AACL,aAAO;AAAA,QACL,GAAGK,OAAM;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,IAAI,GAAGA,OAAM,MAAM,SAAS,CAAC,yBAAyB;AAAA,EAC/D,SAAS,KAAK;AACZ,WAAO,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,EAC/C;AACF;AAEA,eAAe,6BAA6B,UAAkB;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,QAAQ;AACzB,MAAI;AAEJ,MAAIJ,YAAW,mBAAmB,GAAG;AACnC,uBACE,MAAM,OAAOM,eAAcD,MAAK,QAAQ,mBAAmB,CAAC,EAAE,QAC7D;AAAA,EACL,WAAWL,YAAW,yBAAyB,GAAG;AAChD,uBACE,MAAM,OAAOM,eAAcD,MAAK,QAAQ,yBAAyB,CAAC,EAAE,QACnE;AAAA,EACL,OAAO;AACL,WAAO;AAAA,MACL,GAAGD,OAAM;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MACE,iBAAiB,mBACjB,gBAAgB,iBAAiB,aACjC;AACA,UAAM,EAAE,YAAY,IAAI,iBAAiB;AAEzC,QAAI;AACF,oBAAc,uBAAuB,EAAE,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,CAAC;AACzE,aAAO,IAAI,GAAGA,OAAM,MAAM,SAAS,CAAC,kCAAkC;AAAA,IACxE,SAAS,KAAK;AACZ,aAAO,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,IAC/C;AAAA,EACF,OAAO;AACL,WAAO,KAAK,GAAGA,OAAM,KAAK,MAAM,CAAC,sCAAsC;AAAA,EACzE;AACF;AAEA,eAAe,UAAU,UAAkB;AACzC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,QAAQ;AAEzB,QAAM,kBACHJ,YAAW,mBAAmB,KAAK,uBACnCA,YAAW,yBAAyB,KAAK;AAE5C,QAAM,0BACJ,mBAAmBK,MAAK,QAAQ,eAAe;AACjD,QAAM,sBACJ,2BACC,MAAM,OAAOC,eAAc,uBAAuB,EAAE;AACvD,QAAM,cACJ,4BACC,qBAAqB,WAAW;AAEnC,MAAI,CAAC;AACH,WAAO;AAAA,MACL,GAAGF,OAAM;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAEF,MAAI,YAAY,OAAO;AACrB,UAAM,cAAcC,MAAK;AAAA,MACvB;AAAA,MACA,GAAG,YAAY,KAAK;AAAA,IACtB;AACA,QAAIL,YAAW,WAAW,GAAG;AAC3B,UAAI;AACF,qBAAa,aAAa,2BAA2B;AACrD,eAAO;AAAA,UACL,GAAGI,OAAM,MAAM,SAAS,CAAC,MACvB,YAAY,KACd;AAAA,QACF;AAAA,MACF,SAAS,KAAK;AACZ,eAAO,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,MAC/C;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,GAAGA,OAAM,KAAK,MAAM,CAAC,UACnB,YAAY,KACd,+CACE,YAAY,KACd;AAAA,MACF;AAAA,IACF;AAAA,EACF,WACEJ,YAAW,iBAAiB,KAC5BC,aAAY,iBAAiB,EAAE,SAAS,GACxC;AACA,WAAO;AAAA,MACL,GAAGG,OAAM;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,UAAkB;AACzC,MAAI;AACF,UAAM,EAAE,aAAa,IAAI,aAAa,QAAQ;AAC9C,QAAI,SAAS,aAAa,cAAc,MAAM;AAC9C,UAAM,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAE5C,aAAS,OAAO;AAAA,MACd;AAAA,MACA,sBAAsB,YAAY;AAAA,IACpC;AAEA,IAAAF,eAAc,cAAc,MAAM;AAElC,WAAO,IAAI,GAAGE,OAAM,MAAM,SAAS,CAAC,yBAAyB,YAAY;AAAA,EAC3E,SAAS,OAAO;AACd,WAAO,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,2BAA2B,KAAK;AAAA,EACpE;AACF;AAEA,eAAe,kBAAkB,UAAkB,iBAA2B;AAC5E,QAAM,EAAE,SAAS,QAAQ,IAAI,aAAa,QAAQ;AAElD,QAAM,sBAAsBC,MAAK,KAAK,SAAS,cAAc;AAC7D,QAAM,sBAAsBA,MAAK,KAAK,QAAQ,GAAG,cAAc;AAE/D,QAAM,EAAE,SAAS,gBAAgB,IAAI,MAAM,OACzCC,eAAc,mBAAmB,EAAE,MACnC;AAAA,IACE,MAAM,EAAE,MAAM,OAAO;AAAA,EACvB;AAEF,QAAM,EAAE,SAAS,gBAAgB,IAAI,MAAM,OACzCA,eAAc,mBAAmB,EAAE,MACnC;AAAA,IACE,MAAM,EAAE,MAAM,OAAO;AAAA,EACvB;AAGF,kBAAgB,QAAQ,CAAC,gBAAgB;AACvC,UAAM,cACJ,gBAAgB,gBAAgB,WAAW,KAC3C,gBAAgB,aAAa,WAAW;AAC1C,UAAM,cACJ,gBAAgB,gBAAgB,WAAW,KAC3C,gBAAgB,aAAa,WAAW;AAE1C,QAAI,CAAC,eAAe,CAAC,aAAa;AAChC,aAAO;AAAA,QACL,GAAGF,OAAM;AAAA,UACP;AAAA,QACF,CAAC,cAAc,WAAW;AAAA,MAC5B;AAAA,IACF,WAAW,gBAAgB,aAAa;AACtC,aAAO;AAAA,QACL,GAAGA,OAAM;AAAA,UACP;AAAA,QACF,CAAC,oCAAoC,WAAW;AAAA,kBACtC,WAAW,oBAAoB,WAAW;AAAA,MACtD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,iBAAiB,UAAkB;AAC1C,QAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AAExC,QAAM,iBAAiBC,MAAK,KAAK,QAAQ,gBAAgB;AAEzD,MAAI,iBAAiB,OAAO,aAAa,cAAc,CAAC;AACxD,mBAAiB,eAAe;AAAA,IAC9B;AAAA,IACA,2BAA2B,QAAQ,IAAI,CAAC;AAAA,EAC1C;AAEA,EAAAH,eAAc,gBAAgB,cAAc;AAC9C;AAGA,SAAS,8BAA8B,UAAkB;AACvD,QAAM,EAAE,qBAAqB,0BAA0B,IACrD,aAAa,QAAQ;AAEvB,MAAIF,YAAW,mBAAmB,GAAG;AACnC,WAAO;AAAA,EACT;AAEA,MAAIA,YAAW,yBAAyB,GAAG;AACzC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAe,sCAAsC,UAAkB;AACrE,QAAM,EAAE,QAAQ,IAAI,aAAa,QAAQ;AAEzC,QAAM,6BAA6B,8BAA8B,QAAQ;AAEzE,MAAI,CAAC,4BAA4B;AAC/B;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,gBAAgB,IAAI,MAAM,OACzCM,eAAc,0BAA0B,EAAE;AAE5C,QAAM,EAAE,SAAS,gBAAgB,IAAI,MAAM,OACzCA,eAAcD,MAAK,KAAK,SAAS,cAAc,CAAC,EAAE,MAClD;AAAA,IACE,MAAM,EAAE,MAAM,OAAO;AAAA,EACvB;AAGF,QAAM,sBAGD,CAAC;AAEN,MAAI,iBAAiB,cAAc,QAAQ;AACzC,wBAAoB,KAAK;AAAA,MACvB,SAAS;AAAA,MACT,cAAc,CAAC,kBAAkB,+BAA+B;AAAA,IAClE,CAAC;AAAA,EACH;AAEA,sBAAoB,QAAQ,OAAO,EAAE,SAAS,aAAa,MAAM;AAC/D,UAAM,wBAAwB,aAAa,OAAO,CAAC,eAAe;AAChE,YAAM,iBAAiB,WAAW,MAAM,GAAG,EAAE,CAAC;AAC9C,aAAO,CAAC,gBAAgB,aAAa,cAAc;AAAA,IACrD,CAAC;AAED,QAAI,sBAAsB,SAAS,GAAG;AACpC,YAAM,UAAU;AAAA,QACd,cAAc,OAAO;AAAA;AAAA,MACvB,EAAE,MAAM;AAER,YAAM,oBAAoB;AAAA,QACxB,cAAc;AAAA,QACd,KAAK;AAAA,QACL,cAAc,qBAAqB,OAAO;AAAA,MAC5C,CAAC;AAED,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,CAAC;AACH;AAEA,IAAM,0BAA0B;AAOzB,SAAS,8BACd,UACA,qBACM;AACN,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AACxC,UAAM,YAAYA,MAAK,KAAK,QAAQ,OAAO,UAAU;AACrD,UAAM,eAAeA,MAAK,KAAK,QAAQ,OAAO,uBAAuB;AAErE,UAAM,oBAAoBL,YAAW,YAAY,KAAK,CAACA,YAAW,SAAS;AAC3E,UAAM,qBAAqBA,YAAW,SAAS;AAE/C,QAAI,uBAAuB,mBAAmB;AAC5C,eAAS,cAAc,SAAS;AAAA,IAClC,WAAW,CAAC,uBAAuB,oBAAoB;AACrD,eAAS,WAAW,YAAY;AAAA,IAClC;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,KAAK;AAClB,UAAM;AAAA,EACR;AACF;AAEA,eAAe,gBAAgB,UAAkB;AAC/C,QAAM,kBAAkB,8BAA8B,QAAQ;AAE9D,MAAI,CAAC,iBAAiB;AACpB;AAAA,EACF;AACA,QAAM,EAAE,SAAS,YAAY,IAAI,MAAM,OACrCM,eAAc,eAAe,EAAE;AAEjC,MAAI,CAAC,YAAY,aAAa,iBAAiB;AAC7C;AAAA,EACF;AAEA,QAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AACxC,QAAM,iBAAiBD,MAAK,KAAK,QAAQ,OAAO,SAAS,OAAO;AAChE,QAAM,iBAAiB,OAAO,aAAa,cAAc,CAAC;AAE1D,QAAM,oBAAoB,eAAe;AAAA,IACvC;AAAA,IACA;AAAA,EACF;AAEA,EAAAH,eAAc,gBAAgB,iBAAiB;AACjD;AAEA,eAAsB,SAAS,SAA0B;AACvD,QAAM,EAAE,UAAU,QAAQ,MAAM,IAAI;AAEpC,MAAI,eAAwC;AAE5C,QAAM,sCAAsC,QAAQ;AAEpD,MAAI,OAAO;AACT,mBAAe,QAAQ,IAAI;AAAA,MACzB,gBAAgB,QAAQ;AAAA,MACxB,cAAc,QAAQ;AAAA,MACtB,iBAAiB,QAAQ;AAAA,MACzB,gBAAgB,QAAQ;AAAA,MACxB,iBAAiB,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB;AAAA,IACA,kBAAkB,UAAU,CAAC,YAAY,CAAC;AAAA,IAC1C,gBAAgB,QAAQ;AAAA,IACxB,gBAAgB,QAAQ;AAAA,IACxB,gCAAgC,QAAQ;AAAA,IACxC,UAAU,QAAQ;AAAA,IAClB,6BAA6B,QAAQ;AAAA,IACrC,eAAe,QAAQ;AAAA,EACzB,CAAC;AACH;;;ANnkBA,IAAM,EAAE,UAAAK,WAAU,UAAAC,WAAU,aAAAC,cAAa,YAAAC,YAAW,IAAIC;AAExD,IAAqB,QAArB,MAAqB,eAAc,QAAQ;AAAA,EACzC,OAAO,OAAO;AAAA,IACZ,SAAS,KAAK,OAAO;AAAA,MACnB,aACE;AAAA,IACJ,CAAC;AAAA,IACD,MAAM,KAAK,OAAO;AAAA,MAChB,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,CAAC,WAAW,GAAG,MAAM,QAAQ;AAAA,MAC3B,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,MAAK;AAE9C,UAAM,WAAW,YAAY,KAAK,IAAI;AAGtC,+BAA2B,QAAQ;AAEnC,QAAI,CAAC,MAAM,WAAW,GAAG;AACvB,YAAM,kBAAkB,MAAM,UAAU,QAAQ;AAChD,sBAAgB;AAAA,QAAQ,CAAC,QACvB,OAAO;AAAA,UACL,GAAGC,OAAM;AAAA,YACP;AAAA,UACF,CAAC,iBAAiB,GAAG;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AAExC,UAAM,iBAAiB,MAAM,2BAA2B;AAExD,UAAM,SAASC,MAAK;AAAA,MAClBC;AAAA,QACE,YAAY,QAAQ,yBAAyB,YAAY,GAAG;AAAA,MAC9D;AAAA,IACF;AACA,QAAI,eAAeC,WAAU,QAAQ,CAAC,QAAQ,YAAY,QAAQ,GAAG;AAAA,MACnE,OAAO;AAAA,IACT,CAAC;AAED,QAAI,aAAa,SAAS,aAAa,WAAW,GAAG;AACnD,YAAM,8BAA8B,aAAa,OAAO,WAAW;AAAA,IACrE;AAEA,mBAAeA,WAAU,QAAQ,CAAC,QAAQ,iBAAiB,QAAQ,GAAG;AAAA,MACpE,OAAO;AAAA,IACT,CAAC;AAED,QAAI,aAAa,SAAS,aAAa,WAAW,GAAG;AACnD,YACE,wCACC,aAAa,OAAO,WAAW;AAAA,IAEpC;AAGA,mBAAeA,WAAU,QAAQ,CAAC,QAAQ,iBAAiB,QAAQ,GAAG;AAAA,MACpE,OAAO;AAAA,IACT,CAAC;AAED,QAAI,aAAa,SAAS,aAAa,WAAW,GAAG;AACnD,YACE,wCACC,aAAa,OAAO,WAAW;AAAA,IAEpC;AAEA,UAAM,SAAS,MAAM,mBAAmB,QAAQ;AAChD,UAAM,sBAAsB,QAAQ,cAAc,YAAY;AAC9D,kCAA8B,UAAU,mBAAmB;AAE3D,mBAAeA,WAAU,GAAG,cAAc,cAAc;AAAA,MACtD,OAAO;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,IACT,CAAC;AAED,QAAI,aAAa,UAAU,aAAa,WAAW,GAAG;AACpD,cAAQ,KAAK,aAAa,MAAM;AAAA,IAClC;AAEA,UAAM,4BAA4B,QAAQ;AAC1C,UAAM,cAAc,QAAQ;AAAA,EAC9B;AACF;AAEA,eAAe,aAAa,MAAc,IAAY;AACpD,MAAI;AACF,QAAIC,YAAW,EAAE,GAAG;AAClB,MAAAN,YAAW,EAAE;AAAA,IACf;AAEA,IAAAH,UAAS,MAAM,EAAE;AACjB,YAAQ;AAAA,MACN,GAAGK,OAAM,MAAM,SAAS,CAAC,MAAMA,OAAM,IAAI,IAAI,CAAC,cAAcA,OAAM;AAAA,QAChE;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,EAChD;AACF;AAEA,eAAe,4BAA4B,UAAkB;AAC3D,QAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AACxC,QAAM,wBAAwB,QAAQ,IAAI,MAAM;AAChD,QAAM,SAAS,wBACX,GAAGC,MAAK,SAAS,QAAQ,IAAI,GAAG,QAAQ,EAAE,QAAQ,OAAO,GAAG,CAAC,MAC7D;AAGJ,MAAIG,YAAW,GAAG,MAAM,qBAAqB,MAAM,YAAY,GAAG;AAChE,UAAM,uBAAuBP;AAAA,MAC3B,GAAG,MAAM,qBAAqB,MAAM;AAAA,IACtC;AAEA,UAAM,QAAQ;AAAA,MACZ,qBAAqB;AAAA,QAAI,CAAC,SACxBD;AAAA,UACE,GAAG,MAAM,qBAAqB,MAAM,cAAc,IAAI;AAAA,UACtD,GAAG,MAAM,qBAAqB,IAAI;AAAA,UAClC,EAAE,WAAW,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,IAAAE,YAAW,GAAG,MAAM,qBAAqB,MAAM,YAAY;AAAA,EAC7D;AACF;AAEA,eAAe,cAAc,UAAkB;AAC7C,QAAM,EAAE,QAAQ,QAAQ,IAAI,aAAa,QAAQ;AAEjD,MAAI,QAAQ,IAAI,kBAAkB,UAAU;AAC1C,UAAM,QAAQ,QAAQ,IAAI;AAI1B,UAAM,sBAAsB,GAAG,MAAM;AACrC,UAAM,0BAA0B,GAAG,KAAK;AACxC,QAAI,wBAAwB,yBAAyB;AACnD,YAAM,aAAa,qBAAqB,uBAAuB;AAAA,IACjE;AACA,UAAM,aAAa,GAAG,MAAM,WAAW,GAAG,KAAK,SAAS;AAAA,EAC1D,OAAO;AACL,UAAM,aAAa,GAAG,MAAM,UAAU,GAAG,OAAO,QAAQ;AACxD,UAAM;AAAA,MACJ,GAAG,MAAM;AAAA,MACT,GAAG,OAAO;AAAA,IACZ;AACA,UAAM,aAAa,GAAG,MAAM,WAAW,GAAG,OAAO,SAAS;AAAA,EAC5D;AACF;AAEA,eAAe,UAAU,UAA0C;AACjE,QAAM,kBAAkB,GAAG,QAAQ;AACnC,MAAI,CAACM,YAAW,eAAe,GAAG;AAChC,YAAQ;AAAA,MACN,GAAGJ,OAAM;AAAA,QACP;AAAA,MACF,CAAC,gCAAgC,eAAe;AAAA,IAClD;AAAA,EACF;AAEA,MAAI;AACF,UAAM,MAAM,MAAM,OAAOK,eAAc,eAAe,EAAE,MAAM;AAAA,MAC5D,MAAM,EAAE,MAAM,OAAO;AAAA,IACvB;AACA,UAAM,MAAO,IAAI,WAAW;AAK5B,UAAM;AAAA,MACJ,kBAAkB,CAAC;AAAA,MACnB,eAAe,CAAC;AAAA,MAChB,mBAAmB,CAAC;AAAA,IACtB,IAAI;AAEJ,UAAM,UAAkC,OAAO;AAAA,MAC7C,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,kBAAiC,CAAC;AAExC,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAACC,MAAK,OAAO,MAAM;AAClD,UAAI,mBAAmB,KAAKA,IAAG,MAAM,MAAO;AAE5C,UAAI,WAAW,uBAAuB,KAAK,OAAO,MAAM,MAAM;AAC5D,wBAAgB,KAAKA,IAAG;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,YAAQ;AAAA,MACN,GAAGN,OAAM,OAAO,SAAS,CAAC,+CAA+C,GAAG;AAAA,IAC9E;AAEA,WAAO,CAAC;AAAA,EACV;AACF;;;AYtOA,SAAS,QAAAO,OAAM,WAAAC,UAAS,SAAAC,cAAa;AACrC,SAAS,aAAa;;;ACDtB,OAAOC,YAAW;AAClB,OAAOC,WAAU;AAEjB,SAAS,eAAe;AACxB,OAAOC,cAAa;AAGpB,SAAS,iBAAAC,sBAAqB;AAF9B,IAAM,EAAE,cAAAC,eAAc,YAAAC,aAAY,eAAAC,gBAAe,WAAAC,WAAU,IAAIC;AAyBxD,SAAS,uBACd,iBACA,mBACA,mBACA;AACA,QAAM,4BAA4B,IAAI;AAAA,IACpC,gBAAgB,IAAI,CAAC,eAAe,WAAW,iBAAiB,KAAK,EAAE;AAAA,EACzE;AAEA,QAAM,aAA+C,CAAC;AACtD,QAAM,iBAAmD,CAAC;AAE1D,oBAAkB,QAAQ,CAAC,eAAe;AACxC,QAAI,CAAC,WAAW,iBAAiB,GAAG;AAClC,cAAQ,MAAM,gCAAgC,UAAU;AACxD;AAAA,IACF;AAEA,QACE,0BAA0B,IAAI,WAAW,iBAAiB,CAAW,GACrE;AACA,iBAAW,KAAK,UAAU;AAC1B;AAAA,IACF;AAEA,mBAAe,KAAK,UAAU;AAAA,EAChC,CAAC;AAED,SAAO,EAAE,YAAY,eAAe;AACtC;AAEO,SAAS,0BACd,iBACA,YACA,mBACA;AACA,QAAM,iBAAiB,gBAAgB;AAAA,IAAO,CAAC,eAC7C,QAAQ,WAAW,iBAAiB,CAAC;AAAA,EACvC;AACA,iBAAe;AAAA,IAAK,CAAC,GAAG,MACrB,EAAE,iBAAiB,IAAgB,EAAE,iBAAiB,IAAe,KAAK;AAAA,EAC7E;AAEA,QAAM,mBAAmB,WAAW;AAAA,IAAO,CAAC,eAC1C,QAAQ,WAAW,iBAAiB,CAAC;AAAA,EACvC;AACA,mBAAiB;AAAA,IAAK,CAAC,GAAG,MACvB,EAAE,iBAAiB,IAAgB,EAAE,iBAAiB,IAAe,KAAK;AAAA,EAC7E;AAEA,MAAI,eAAe;AAEnB,QAAM,SAAS,eAAe,IAAI,CAAC,sBAAsB;AACvD,UAAM,mBACJ,kBAAkB,iBAAiB,MACnC,iBAAiB,YAAY,IAAI,iBAAiB;AAEpD,QAAI,eAAe,iBAAiB,UAAU,kBAAkB;AAC9D,aAAO,iBAAiB,cAAc;AAAA,IACxC;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT;AAEA,eAAe,kBACb,YACA,UACA;AACA,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,SAAS,qCACP,SAAS,MAAM,GAAG,EAAE,CAAC,CACvB;AAAA;AAAA,EAAQ,WACL,IAAI,CAAC,eAAe,WAAW,MAAM,WAAW,IAAI,EACpD,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EACf,CAAC;AAED,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AAEA;AACF;AAEA,eAAsB,aAAa,UAAkB,UAAkB;AACrE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,QAAQ;AAEzB,QAAM,EAAE,SAAS,gBAAgB,IAAI,MAAM,OACzCC,eAAcC,MAAK,QAAQ,mBAAmB,CAAC,EAAE;AAEnD,QAAM,iBAAiB,gBAAgB,eAAe,WAAW;AAEjE,QAAM,eAAeA,MAAK,KAAK,YAAY,QAAQ;AACnD,QAAM,iBAAiBA,MAAK,KAAK,YAAY,QAAQ;AAErD,QAAM,WAAWN,cAAa,cAAc,MAAM;AAClD,QAAM,kBAAoD,KAAK,MAAM,QAAQ;AAE7E,QAAM,kCACJ,aAAa,uBAAuB,OAAO;AAE7C,MAAI,SAA2C;AAE/C,QAAM,UAAU,MAAM,eAAe,QAAQ;AAE7C,QAAM,qBAAqB,QAAQ;AAAA,IAAI,CAAC,WACtC,eAAe,cAAc,MAAM,GAAG,OAAO,aAAa,QAAQ;AAAA,EACpE;AAEA,QAAM,iBAAiB,CAAC,GAAG,oBAAoB,cAAc,EAAE;AAAA,IAC7D,CAAC,sBAAsBC,YAAW,iBAAiB;AAAA,EACrD;AAGA,aAAW,eAAe,gBAAgB;AACxC,UAAM,aAAaD,cAAa,aAAa,MAAM;AAEnD,QAAI;AACF,YAAM,oBAAoB,KAAK,MAAM,UAAU;AAE/C,YAAM,EAAE,YAAY,eAAe,IAAI;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,WAAW,QAAQ;AACrB,YAAI,gBAAgB,gBAAgB;AAClC,gBAAM,kBAAkB,YAAY,QAAQ;AAAA,QAC9C;AAEA,iBAAS;AAAA,UACP,GAAG;AAAA,YACD;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,GAAG;AAAA,QACL;AAAA,MACF,OAAO;AACL,iBAAS,CAAC,GAAG,QAAQ,GAAG,cAAc;AAAA,MACxC;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,eAAe,aAAa;AAC9B,gBAAQ;AAAA,UACN,GAAGO,OAAM;AAAA,YACP;AAAA,UACF,CAAC,MAAM,QAAQ;AAAA,QACjB;AAAA,MACF,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACF,QAAI,CAACN,YAAW,UAAU,cAAc,CAAC,GAAG;AAC1C,MAAAE,WAAU,UAAU,cAAc,CAAC;AAAA,IACrC;AACA,IAAAD;AAAA,MACEI,MAAK,KAAK,UAAU,cAAc,GAAG,QAAQ;AAAA,MAC7C,KAAK,UAAU,MAAM;AAAA,IACvB;AACA,YAAQ;AAAA,MACN,GAAGC,OAAM,MAAM,SAAS,CAAC,eAAeA,OAAM,IAAI,QAAQ,CAAC;AAAA,IAC7D;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,EAChD;AACF;AAEA,eAAsB,cAAc,UAAkB;AACpD,MAAI;AACF,UAAM,aAAa,sBAAsB,QAAQ;AACjD,UAAM,aAAa,iBAAiB,QAAQ;AAAA,EAC9C,SAAS,KAAK;AACZ,YAAQ,MAAM,GAAGA,OAAM,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAA,EAChD;AACF;;;ADnNA,OAAOC,WAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAE9B,IAAqB,UAArB,MAAqB,iBAAgBC,SAAQ;AAAA,EAC3C,OAAO,QAAQ;AAAA,IACb,CAAC,SAAS,GAAGC,OAAM,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC1C;AAAA,EAEA,OAAO,OAAO;AAAA,IACZ,MAAMC,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,OAAO,KAAK,IAAI,MAAM,KAAK,MAAM,QAAO;AAEhD,UAAM,WAAW,YAAY,KAAK,IAAI;AACtC,UAAM,EAAE,QAAQ,oBAAoB,IAAI,aAAa,QAAQ;AAE7D,UAAM,EAAE,SAAS,gBAAgB,IAAI,MAAM,OACzCH,eAAcD,MAAK,QAAQ,mBAAmB,CAAC,EAAE;AAEnD,UAAM,iBAAiB,gBAAgB,eAAe,WAAW;AAEjE,UAAM,SAAS,EAAE,OAAO,MAAM,SAAS,CAAC;AACxC,UAAM,cAAc,QAAQ;AAE5B,QAAI,MAAM,SAAS,GAAG;AACpB;AAAA,IACF;AAEA,WAAO,MAAM,iBAAiB,cAAc,IAAI;AAAA,MAC9C,OAAO;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;AE7CA,OAAOK,SAAQ;AACf,OAAO,WAAW;AAClB,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,WAAAC,gBAAe;AAExB,IAAqB,SAArB,MAAqB,gBAAeD,SAAQ;AAAA,EAC1C,OAAO,OAAO;AAAA,IACZ,MAAMD,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,cACL;AAAA,EAEF,OAAO,WAAW,CAAC,mCAAmC;AAAA,EAEtD,MAAM,MAAM;AACV,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,OAAM;AAExC,UAAM,gBAAgB,KAAK,QAAQ;AACnC,UAAM,wBAAwBD,IAAG,WAAW,aAAa;AAEzD,QAAI,uBAAuB;AACzB,YAAM,kBAAkB,MAAMG,SAAQ;AAAA,QACpC,SAAS,4DAA4D,aAAa;AAAA,MACpF,CAAC;AAED,UAAI,CAAC;AACH,eAAO,KAAK,IAAI,8CAAuC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,MAAM,4BAA4B;AAAA,MACzD,OAAO;AAAA,IACT,CAAC;AAED,SAAK,IAAI,mCAAmC;AAE5C,qBAAiB,MAAM,aAAa,EAAE,KAAK,MAAM;AAC/C,WAAK;AAAA,QACH,sDAAsD,aAAa;AAAA,MACrE;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC9CA,SAAS,QAAAC,OAAM,WAAAC,UAAS,SAAAC,cAAa;AACrC,OAAOC,YAAW;AAClB,SAAS,SAAAC,QAAO,aAAAC,kBAAiB;AACjC,OAAO,cAAc;AACrB,OAAO,YAAY;AAEnB,SAAS,QAAQ,cAAAC,aAAY,gBAAAC,qBAAoB;AACjD,OAAOC,WAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAc9B,IAAM,qBAAqB,QAAQ,aAAa,WAAW,MAAM;AAEjE,IAAM,kBAAkB,CAAC,QAAQ,IAAI;AAErC,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,4BAA4B,CAAC,mBAAmB,oBAAoB;AAE1E,IAAM,8CAA8C;AAAA,EAClD;AACF;AAEA,IAAM,qBAAqB,IAAI,gBAAgB;AAE/C,eAAe,SACb,SACA,QACA,SACA,MACA;AAEA,MAAI,UAAU,CAAC;AACf,QAAM,cAAcC,MAAK,KAAK,SAAS,UAAU;AAEjD,MAAIC,YAAW,WAAW,GAAG;AAC3B,QAAI;AACF,gBAAU,OAAO,MAAMC,cAAa,WAAW,CAAC;AAAA,IAClD,SAAS,KAAK;AACZ,aAAO;AAAA,QACL,GAAGC,OAAM,OAAO,MAAM,CAAC,mCAAmC,GAAG;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM,2BAA2B;AAExD,iBAAe;AAAA,IACb,KAAK,GAAG,cAAc;AAAA,IACtB,cACE;AAAA,IACF,QAAQ;AAAA,IACR,KAAK;AAAA,EACP,CAAC;AAED,QAAM,EAAE,QAAQ,IAAI;AAAA,IAClBH,MAAK,KAAK,QAAQ,YAAY;AAAA,IAC9BA,MAAK,KAAK,SAAS,YAAY;AAAA,EACjC;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,MACL,GAAGG,OAAM,OAAO,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,MACL,0BAA0BH,MAAK,KAAK,QAAQ,YAAY,CAAC,OAAOA,MAAK,KAAK,SAAS,YAAY,CAAC;AAAA,IAClG;AAAA,EACF;AAEA,QAAM,aAAaI,OAAM,GAAG,cAAc,oBAAoB,IAAI,IAAI;AAAA,IACpE,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,mBAAmB;AAAA,IAC3B,OAAO,CAAC,WAAW,QAAQ,SAAS;AAAA,IACpC,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AAED,MAAI,aAAa;AACjB,aAAW,OAAO,GAAG,QAAQ,CAAC,UAAU;AACtC,kBAAc;AACd,UAAM,QAAQ,WAAW,MAAM,IAAI;AACnC,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,OAAO,MAAM,MAAM;AACzB,cAAQ,IAAI,gBAAgB,IAAI;AAAA,IAClC;AACA,iBAAa,MAAM,MAAM,KAAK;AAAA,EAChC,CAAC;AACD,aAAW,OAAO,GAAG,OAAO,MAAM;AAChC,YAAQ,IAAI,gBAAgB,UAAU;AAAA,EACxC,CAAC;AAED,aAAW,GAAG,SAAS,MAAM;AAC3B,uBAAmB,MAAM;AAAA,EAC3B,CAAC;AACH;AAEA,SAAS,cAAc,MAAc,IAAY;AAC/C,MAAI;AACF,WAAO,MAAM,IAAI,EAAE,WAAW,MAAM,OAAO,MAAM,aAAa,KAAK,CAAC;AAEpE,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB,SAAS,KAAK;AACZ,WAAO,EAAE,SAAS,MAAM;AAAA,EAC1B;AACF;AAEA,IAAqB,MAArB,MAAqB,aAAYC,SAAQ;AAAA,EACvC,OAAO,OAAO;AAAA,IACZ,MAAMC,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,IACD,SAASA,MAAK,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,IACD,MAAMA,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,iBAAiBC,OAAM,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,IAAG;AAC5C,UAAM,WAAW,YAAY,KAAK,IAAI;AAEtC,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,eAAe,MAAM,eAAe;AAE1C,UAAM,EAAE,SAAS,QAAQ,QAAQ,IAAI,aAAa,QAAQ;AAE1D,+BAA2B,QAAQ;AAEnC,UAAM,cAAc,MAAyC;AAC3D,eAAS,EAAE,SAAS,CAAC;AAAA,IACvB;AAEA,UAAM,UAAU,SAAS,MAAM,CAAC,GAAG,eAAe,GAAG;AAAA,MACnD,QAAQ;AAAA,MACR,kBAAkB;AAAA,QAChB;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AAAA,MACb,eAAe;AAAA,MACf,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAI,eACA,8CACA;AAAA,MACN;AAAA,MACA,YAAY;AAAA,MACZ,YAAY,QAAQ,aAAa;AAAA,IACnC,CAAC;AAED,uBAAmB,OAAO,iBAAiB,SAAS,MAAM;AACxD,cAAQ,MAAM;AAAA,IAChB,CAAC;AAED,UAAM,SAAS,EAAE,OAAO,MAAM,SAAS,CAAC;AAExC,UAAM,UAAUC;AAAA,MACd,YAAY,QAAQ,yBAAyB,YAAY,GAAG;AAAA,IAC9D;AAEA,IAAAC,WAAU,QAAQ,CAAC,SAAS,kBAAkB,MAAM,GAAG;AAAA,MACrD,OAAO;AAAA,IACT,CAAC;AAED,IAAAA,WAAU,QAAQ,CAAC,SAAS,iBAAiB,QAAQ,GAAG;AAAA,MACtD,OAAO;AAAA,IACT,CAAC;AAGD,IAAAA,WAAU,QAAQ,CAAC,SAAS,iBAAiB,QAAQ,GAAG;AAAA,MACtD,OAAO;AAAA,IACT,CAAC;AAED,UAAM,SAAS,MAAM,mBAAmB,QAAQ;AAChD,UAAM,sBAAsB,QAAQ,cAAc,YAAY;AAC9D,kCAA8B,UAAU,mBAAmB;AAE3D,aAAS,QAAQ,GAAG,QAAQ,SAAS,IAAI;AAEzC,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC5C,cACG,GAAG,OAAO,MAAc;AAAA;AAAA,MAA2B,CAAC,EACpD,GAAG,UAAU,MAAc;AAAA;AAAA,MAA2B,CAAC,EACvD,GAAG,UAAU,MAAc;AAAA;AAAA,MAA0B,CAAC,EACtD,GAAG,SAAS,MAAM;AACjB,2BAAmB,MAAM;AACzB,eAAO;AAAA,MACT,CAAC,EACA,GAAG,SAAS,OAAO;AAAA,IACxB,CAAC;AAAA,EACH;AACF;;;AClOA,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,OAAOC,YAAW;;;ACDlB,OAAOC,SAAQ;AACf,OAAOC,YAAU;AAEV,SAAS,SAAS,cAAsB;AAC7C,EAAAD,IAAG,UAAUC,OAAK,QAAQ,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;AAE5D,SAAO,CAAC,YAAoB;AAC1B,IAAAD,IAAG,cAAc,cAAc,OAAO;AAAA,EACxC;AACF;;;ACRA,SAAS,yBAAyB;AAClC;AAAA,EACE,YAAY;AAAA,OAEP;AACP,SAAS,qBAAqB;AAC9B,SAAS,iCAAiC;AAC1C,SAAS,gBAAgB,MAAM,aAAgC;AAC/D,OAAOE,OAAM,cAAAC,mBAAkB;AAC/B,OAAOC,YAAU;AAEjB,IAAM,iBAAiB;AAEvB,eAAO,WAAkC,IAAY;AACnD,QAAM,mBAAmB,EAAE;AAC3B,wBAAsB,EAAE;AAC1B;AAEA,SAAS,sBAAsB,MAAc;AAC3C,MAAI,gBAAgBA,OAAK,QAAQ,IAAI;AAErC,MAAID,YAAWC,OAAK,QAAQ,MAAM,YAAY,CAAC,GAAG;AAChD,oBAAgBA,OAAK,QAAQ,MAAM,YAAY;AAAA,EACjD;AAGA,QAAM,YAAY,CAAC,GAAG,aAAa,oBAAoB;AAEvD,QAAM,SAAwB;AAAA,IAC5B;AAAA,IACA,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQA,OAAK,QAAQ,eAAe,cAAc,cAAc;AAAA,IAChE,WAAW;AAAA,MACT,CAAC,GAAG,aAAa,cAAc,GAAG;AAAA,QAChC,QAAQ;AAAA,QACR,QAAQ;AAAA;AAAA,UAEN,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd,qBAAqB;AAAA,UACrB,cAAc;AAAA,UACd,sBAAsB;AAAA,UACtB,uBAAuB;AAAA,UACvB,kBAAkB;AAAA,UAClB,8BAA8B;AAAA;AAAA,UAE9B,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA;AAAA,UAEZ,iBAAiB;AAAA;AAAA,UAEjB,YAAY;AAAA,UACZ,0BAA0B,CAAC,cAA4B;AAAA;AAAA;AAAA,YAGrD,eAAe,iBAAiB,QAAQ;AAAA,UAC1C;AAAA,UACA,oBAAoB;AAAA;AAAA,YAElB,MAAM;AAAA;AAAA,YAEN,kBAAkB;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,gBAAgB,QAAQ,IAAI;AACrC;AAEA,SAAS,iBAAiB,UAAwB;AAChD,aAAW,cAAc,SAAS,aAAa;AAC7C,QACE,WAAW,SAAS,KAAK,wBACzB,OAAO,WAAW,MAAM,UAAU,UAClC;AACA,aAAO,WAAW,KAAK;AAAA,IACzB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,mBAAmB,UAAkB;AAClD,QAAM,kBAAkB,0BAA0B,kBAAkB,CAAC;AAErE,QAAM,kBAAkB,YAAY;AAClC,UAAM,OAAOA,OAAK;AAAA,MAChB,SAAS,SAAS,YAAY,IAAI,CAAC,UAAU,IAAI,EAAE,KAAK,GAAG,IAAI;AAAA,IACjE;AAEA,UAAM,iBAAiB;AAAA,MACrB,GAAI,MAAM,sBAAsB,MAAM,MAAM;AAAA,MAC5C,GAAI,MAAM,sBAAsB,MAAM,YAAY;AAAA,IACpD;AACA,QAAI;AACF,YAAM,iBAAiB;AAAA,QACrB,CAAC,iBAAiB,GAAG,cAAc,EAAE,OAAO,OAAO;AAAA,MACrD;AAEA,aAAO,eAAe,cAAc;AAAA,IACtC,SAAS,GAAG;AACV,cAAQ;AAAA,QACN;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,MAAI,aAAaA,OAAK,QAAQ,UAAU,cAAc,cAAc;AAEpE,MAAID,YAAWC,OAAK,QAAQ,UAAU,YAAY,CAAC,GAAG;AACpD,iBAAaA,OAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,SAAS,UAAU;AAC1C,QAAM,cAAc,0BAA0B,MAAM,gBAAgB,CAAC;AAErE,iBAAe,WAAW;AAC5B;AAEA,eAAe,sBAAsB,MAAc,YAAoB;AACrE,QAAM,SAAS,MAAM,OAAO,QAAQ;AACpC,QAAM,WAAW,CAAC,MAAM,OAAO,SAAS;AAExC,QAAM,YAAY,MAAM,QAAQ,UAAU,IAAI,aAAa,CAAC,UAAU;AAEtE,UAAS,OAAe,WAAW,QAChC,WAAWA,OAAK,KAAK,GAAG,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC,GAAG;AAAA,IACrD,mBAAmB;AAAA,MACjB,YAAY,CAAC,SAAS;AAAA,IACxB;AAAA,EACF,CAAC,EACA;AAAA,IAAI,CAAC,YACJ,MAAMF,IAAG,aAAa,SAAS,EAAE,UAAU,QAAQ,CAAC,CAAC;AAAA,EACvD;AACJ;;;AF9IA,IAAqB,WAArB,MAAqB,kBAAiBG,SAAQ;AAAA,EAC5C,OAAO,QAAQ,CAAC;AAAA,EAEhB,OAAO,OAAO;AAAA,IACZ,MAAMC,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,SAAQ;AAC1C,UAAM,WAAW,YAAY,KAAK,IAAI;AACtC,UAAM,EAAE,OAAO,IAAI,aAAa,QAAQ;AAExC,UAAM,SAAS,EAAE,OAAO,MAAM,SAAS,CAAC;AAExC,eAAW,KAAK,QAAQ,MAAM;AAE9B,WAAO;AAAA,MACL,GAAGC,OAAM;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AGlCA,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,OAAOC,SAAQ;AACf,OAAOC,YAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAG9B,IAAqB,UAArB,MAAqB,iBAAgBC,SAAQ;AAAA,EAC3C,OAAO,OAAO;AAAA,IACZ,MAAMC,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,QAAO;AACzC,UAAM,WAAW,YAAY,KAAK,IAAI;AAEtC,UAAM,kBAAkBC,OAAK,KAAK,UAAU,SAAS;AAErD,UAAM,gBAAgBA,OAAK;AAAA,MACzBC;AAAA,QACED,OAAK,QAAQ,YAAY,QAAQ,mBAAmB,YAAY,GAAG,CAAC;AAAA,MACtE;AAAA,MACA;AAAA,IACF;AAEA,QAAI,CAAC,eAAe;AAClB,YAAM,MAAM,wCAAwC;AAAA,IACtD;AAEA,eAAW,eAAe,eAAe;AAAA,EAC3C;AACF;AAEA,SAAS,WAAW,WAAmB,WAAmB;AAExD,MAAI,CAACE,IAAG,WAAW,SAAS,GAAG;AAC7B,IAAAA,IAAG,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,EAC7C;AAGA,QAAM,QAAQA,IAAG,YAAY,SAAS;AAEtC,aAAW,QAAQ,OAAO;AACxB,UAAM,aAAaF,OAAK,KAAK,WAAW,IAAI;AAC5C,UAAM,aAAaA,OAAK,KAAK,WAAW,IAAI;AAE5C,UAAM,OAAOE,IAAG,SAAS,UAAU;AAEnC,QAAI,KAAK,OAAO,GAAG;AAEjB,MAAAA,IAAG,aAAa,YAAY,UAAU;AACtC,cAAQ,IAAI,gBAAgB,UAAU,OAAO,UAAU,EAAE;AAAA,IAC3D,WAAW,KAAK,YAAY,GAAG;AAE7B,iBAAW,YAAY,UAAU;AAAA,IACnC;AAAA,EACF;AACF;;;AC5DA,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,SAAAC,QAAO,aAAAC,kBAAiB;AACjC,OAAOC,cAAa;AACpB,OAAOC,YAAU;AAIjB,IAAM,EAAE,YAAAC,aAAW,IAAIC;AAEvB,IAAqB,QAArB,MAAqB,eAAcC,SAAQ;AAAA,EACzC,OAAO,OAAO;AAAA,IACZ,SAASC,MAAK,OAAO;AAAA,MACnB,aACE;AAAA,IACJ,CAAC;AAAA,IACD,MAAMA,MAAK,OAAO;AAAA,MAChB,aACE;AAAA,IACJ,CAAC;AAAA,IACD,MAAMA,MAAK,OAAO;AAAA,MAChB,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,MAAK;AACvC,UAAM,WAAW,YAAY,KAAK,IAAI;AACtC,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,EAAE,SAAS,OAAO,IAAI,aAAa,QAAQ;AACjD,UAAM,iBAAiB,MAAM,2BAA2B;AAExD,QAAI,CAACH,aAAWI,OAAK,KAAK,QAAQ,GAAG,OAAO,CAAC,GAAG;AAC9C,MAAAC,WAAU,GAAG,cAAc,oBAAoB;AAAA,QAC7C,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAOC;AAAA,MACL;AAAA,MACA,CAAC,QAAQ,SAAS,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,MAC5C;AAAA,QACE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;AC9CA,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,SAAAC,cAAa;AACtB,OAAOC,eAAc;AAWrB,IAAMC,sBAAqB,QAAQ,aAAa,WAAW,MAAM;AAEjE,IAAMC,mBAAkB,CAAC,QAAQ,IAAI;AAErC,IAAMC,kBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,sBAAsB,IAAI,gBAAgB;AAEhD,eAAe,UAAU,QAAgB;AACvC,QAAM,iBAAiB,MAAM,2BAA2B;AAExD,QAAM,cAAcC,OAAM,GAAG,cAAc,iBAAiB;AAAA,IAC1D,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ,oBAAoB;AAAA,IAC5B,OAAO;AAAA,EACT,CAAC;AAED,cAAY,GAAG,SAAS,MAAM;AAC5B,wBAAoB,MAAM;AAAA,EAC5B,CAAC;AACH;AAEA,IAAqB,OAArB,MAAqB,cAAaC,SAAQ;AAAA,EACxC,OAAO,OAAO;AAAA,IACZ,MAAMC,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,KAAI;AACtC,UAAM,WAAW,YAAY,KAAK,IAAI;AACtC,UAAM,EAAE,SAAS,OAAO,IAAI,aAAa,QAAQ;AAEjD,UAAM,UAAUC,UAAS,MAAM,CAAC,GAAGL,gBAAe,GAAG;AAAA,MACnD,QAAQD;AAAA,MACR,kBAAkB;AAAA,QAChB,oBAAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AAAA,MACb,eAAe;AAAA,MACf,SAASE;AAAA,MACT,YAAY;AAAA,MACZ,YAAY,QAAQ,aAAa;AAAA,IACnC,CAAC;AAED,wBAAoB,OAAO,iBAAiB,SAAS,MAAM;AACzD,cAAQ,MAAM;AAAA,IAChB,CAAC;AAED,UAAM,SAAS,EAAE,OAAO,MAAM,SAAS,CAAC;AAExC,cAAU,MAAM;AAEhB,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC5C,cACG,GAAG,SAAS,MAAM;AACjB,4BAAoB,MAAM;AAC1B,eAAO;AAAA,MACT,CAAC,EACA,GAAG,SAAS,OAAO;AAAA,IACxB,CAAC;AAAA,EACH;AACF;;;ACzFA,OAAOK,YAAU;AACjB,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,OAAOC,YAAW;AAIlB,IAAqBC,YAArB,MAAqB,kBAAiBC,SAAQ;AAAA,EAC5C,OAAO,SAAS;AAAA,EAChB,OAAO,QAAQ,CAAC;AAAA,EAEhB,OAAO,OAAO;AAAA,IACZ,MAAMC,MAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,SAAQ;AAE1C,UAAM;AAAA,MACJC,OAAK,WAAW,KAAK,IAAI,IACrB,KAAK,OACLA,OAAK,QAAQ,QAAQ,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK,IAAI;AAAA,IAC9D;AAEA,WAAO;AAAA,MACL,GAAGC,OAAM;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AClCA,SAAS,QAAAC,QAAM,WAAAC,WAAS,SAAAC,cAAa;AACrC,OAAOC,aAAW;AAClB,OAAOC,cAAa;AACpB,OAAO,aAAa;AACpB,OAAOC,YAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAK9B,IAAM,EAAE,MAAAC,OAAM,mBAAmB,OAAO,aAAa,IAAI;AAEzD,IAAM,yBAAyB;AAC/B,IAAMC,kBAAiB;AACvB,IAAM,2BAA2B;AAEjC,IAAqB,eAArB,MAAqB,sBAAqBC,UAAQ;AAAA,EAChD,OAAO,QAAQ;AAAA,IACb,SAASC,OAAM,OAAO;AAAA,MACpB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,IACD,QAAQA,OAAM,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,OAAO;AAAA,IACZ,OAAOC,OAAK,OAAO;AAAA,MACjB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,aAAY;AAErD,UAAM,WAAW,YAAY;AAC7B,UAAM,UACH,MAAM,SAASC,OAAK,QAAQ,UAAU,KAAK,KAAK,KAAM;AACzD,UAAM,EAAE,OAAO,IAAI,aAAa,OAAO;AACvC,UAAM,aACJ,KAAK,cAAc,MAAM,UAAUA,OAAK,QAAQ,SAAS,MAAM,MAAM,CAAC,KACtE,KAAK,cAAc,MAAM,KACzB,KAAK,cAAc,OAAO;AAC5B,UAAM,yBACJ,KAAK;AAAA,MACF,OAAO,WAAWA,OAAK,QAAQ,SAAS,OAAO,OAAO,KAAM;AAAA,IAC/D,KAAK,KAAK,qBAAqB,MAAM;AACvC,QAAI,CAAC,YAAY;AACf,aAAO,KAAK;AAAA,QACVJ;AAAA,QACA;AAAA,MAAS,MAAM;AAAA,MAAS,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,QAAI,CAAC,wBAAwB;AAC3B,aAAO,KAAK;AAAA,QACV;AAAA,QACA,OAAO,WAAW;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,uBAAuBI,OAAK;AAAA,MAChCA,OAAK,QAAQ,sBAAsB;AAAA,MACnC;AAAA,IACF;AACA,UAAM,2BAA2B,SAAS,oBAAoB;AAE9D,QAAIC,SAAQ,eAAe,MAAM;AAC/B,aAAO,KAAK,GAAGC,QAAM,KAAK,QAAQ,CAAC,0BAA0B,MAAM,EAAE;AAEvE,WAAO,KAAK,GAAGA,QAAM,KAAK,QAAQ,CAAC,4BAA4B,UAAU,EAAE;AAC3E,WAAO;AAAA,MACL,GAAGA,QAAM,KAAK,QAAQ,CAAC,8BAA8B,sBAAsB;AAAA,IAC7E;AACA,WAAO;AAAA,MACL,GAAGA,QAAM,KAAK,QAAQ,CAAC,gCAAgC,oBAAoB;AAAA,IAC7E;AAEA,UAAM,EAAE,SAAS,mBAAmB,IAAI,MAAM,OAC5CC,eAAc,sBAAsB,EAAE,MACtC,EAAE,MAAM,EAAE,MAAM,OAAO,EAAE;AAG3B,UAAM,gBAAgB,WAAW,kBAAkB;AAEnD;AAAA,MACE,GAAG,KAAK,UAAU,iBAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA;AAAA,IACjD;AAEA,WAAO;AAAA,MACL,GAAGD,QAAM,MAAM,WAAW,CAAC;AAAA,iBAChB,cAAc,KAAK,IAAI,CAAC;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,qBAAqB,UAAmB;AACtC,WAAO,KAAK,QAAQ,wBAAwB;AAAA,MAC1C;AAAA,MACA;AAAA,IACF,CAAC,EAAE,QAAQ;AAAA,EACb;AAAA,EAEA,cAAc,UAAmB;AAC/B,WAAO,KAAK,QAAQN,iBAAgB,CAACA,eAAc,CAAC,EAAE,QAAQ;AAAA,EAChE;AAAA,EAEA,QAAQ,UAAkB,cAAuC;AAC/D,WAAO,CAAC,aAAsB;AAC5B,cAAQ,MAAM;AAAA,QACZ,KAAK,CAAC;AACJ;AAAA,QACF,MAAK,UAAU,SAAS,QAAQ,KAAKK,SAAQ,WAAW,QAAQ;AAC9D,iBAAO;AAAA,QACT,KAAKA,SAAQ,WAAWD,OAAK,KAAK,YAAY,IAAI,QAAQ,CAAC;AACzD,iBAAOA,OAAK,KAAK,UAAU,QAAQ;AAAA,QACrC;AACE,cAAI,CAAC,aAAc;AAEnB,gBAAM,WAAWA,OAAK;AAAA,YACpB;AAAA,YACA,GAAI,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,UAChE;AAEA,cAAIC,SAAQ,WAAW,QAAQ,GAAG;AAChC,mBAAO;AAAA,UACT;AACA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,UAAkB,SAAiB;AACnD,WAAO;AAAA,MACL,GAAGC,QAAM,IAAI,SAAS,CAAC,oBAAoB,QAAQ,OAAO,OAAO;AAAA,IACnE;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,IAAM,aAAa,CAAC,uBAA+C;AACjE,QAAM,iBAAgC,CAAC;AACvC,aAAW,aAAa,OAAO,OAAO,kBAAkB,GAAG;AACzD,QAAI,eAA8B,CAAC;AACnC,UAAM,eAAe,aAAa,SAAS;AAC3C,UAAM,wBAAwB,aAAa,YAAY;AAAA,MACrD,CAAC,QACC,IAAI,SAASP,MAAK,wBAClB,IAAI,cAAc,kBAAkB;AAAA,IACxC;AAEA,QAAI,sBAAuB;AAE3B,iBAAa,YAAY,QAAQ,CAAC,eAAe;AAC/C,UACE,WAAW,SAASA,MAAK,wBACzB,WAAW,cAAc,kBAAkB,SAC3C,WAAW,MAAM,SAASA,MAAK,QAC/B,CAAC,CAAC,WAAW,MAAM,OACnB;AACA,qBAAa,KAAK,WAAW,KAAK,KAAK;AACvC;AAAA,MACF;AAAA,IACF,CAAC;AAED,QAAI,aAAa,QAAQ;AACvB,qBAAe,KAAK,GAAG,YAAY;AACnC,qBAAe,CAAC;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;;;AChLA,SAAS,QAAAS,QAAM,WAAAC,WAAS,SAAAC,cAAa;AACrC,SAAS,oBAAoB;AAC7B,OAAOC,aAAW;AAClB,OAAOC,aAAY;AACnB,OAAOC,cAAa;AACpB,SAAS,cAAAC,oBAAkB;AAC3B,OAAOC,YAAU;AACjB,SAAS,cAAc;AAKvB,SAAS,iBAAAC,sBAAqB;AAE9B,IAAMC,kBAAiB;AAEvB,IAAqB,eAArB,MAAqB,sBAAqBC,UAAQ;AAAA,EAChD,OAAO,SAAS;AAAA,EAEhB,OAAO,QAAQ;AAAA,IACb,QAAQC,OAAM,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,OAAO;AAAA,IACZ,MAAMC,OAAK,OAAO;AAAA,MAChB,MAAM;AAAA,MACN,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,UAAmB;AAC/B,WAAO,KAAK,QAAQH,iBAAgB,CAACA,eAAc,CAAC,EAAE,QAAQ;AAAA,EAChE;AAAA,EAEA,QAAQ,UAAkB,cAAuC;AAC/D,WAAO,CAAC,aAAsB;AAC5B,cAAQ,MAAM;AAAA,QACZ,KAAK,CAAC;AACJ;AAAA,QACF,MAAK,UAAU,SAAS,QAAQ,KAAKI,SAAQ,WAAW,QAAQ;AAC9D,iBAAO;AAAA,QACT,KAAKA,SAAQ,WAAWC,OAAK,KAAK,YAAY,IAAI,QAAQ,CAAC;AACzD,iBAAOA,OAAK,KAAK,UAAU,QAAQ;AAAA,QACrC;AACE,cAAI,CAAC,aAAc;AAEnB,gBAAM,WAAWA,OAAK;AAAA,YACpB;AAAA,YACA,GAAI,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,UAChE;AAEA,cAAID,SAAQ,WAAW,QAAQ,GAAG;AAChC,mBAAO;AAAA,UACT;AACA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,UAAkB,SAAiB;AACnD,WAAO;AAAA,MACL,GAAGE,QAAM,IAAI,SAAS,CAAC,oBAAoB,QAAQ,OAAO,OAAO;AAAA,IACnE;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EAEA,MAAM,MAAM;AACV,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,aAAY;AACrD,UAAM,WAAW,YAAY;AAC7B,UAAM,UACH,MAAM,QAAQD,OAAK,QAAQ,UAAU,KAAK,IAAI,KAAM;AAGvD,UAAM,sBAAsB,MAAM,6BAA6B,OAAO;AAEtE,QAAI,CAAC,qBAAqB;AACxB;AAAA,IACF;AAEA,UAAM,cAAcA,OAAK,KAAK,SAAS,UAAU;AACjD,QAAIE,aAAW,WAAW,GAAG;AAC3B,MAAAC,QAAO,OAAO,EAAE,MAAM,YAAY,CAAC;AAAA,IACrC;AAEA,UAAM,EAAE,cAAc,sBAAsB,uBAAuB,IACjE,QAAQ;AACV,UAAM,iBACJ,gBAAgB,wBAAwB;AAE1C,QAAI,CAAC,gBAAgB;AACnB,aAAO,MAAM,GAAGF,QAAM,IAAI,SAAS,CAAC;AAAA;AAAA,QAClCA,QAAM,KAAK,kBAAkB,CAAC;AAAA;AAAA,sHACgFA,QAAM,KAAK,cAAc,CAAC,KAAKA,QAAM,KAAK,sBAAsB,CAAC,KAAKA,QAAM,KAAK,wBAAwB,CAAC;AAAA;AAAA,8CAClLA,QAAM,KAAK,UAAU,CAAC;AAAA,OAC7D;AAED,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,EAAE,OAAO,IAAI,aAAa,OAAO;AACvC,UAAM,aACJ,KAAK,cAAc,MAAM,UAAUD,OAAK,QAAQ,SAAS,MAAM,MAAM,CAAC,KACtE,KAAK,cAAc,MAAM,KACzB,KAAK,cAAc,OAAO;AAE5B,QAAI,CAAC,YAAY;AACf,aAAO,KAAK;AAAA,QACVL;AAAA,QACA;AAAA,MAAS,MAAM;AAAA,MAAS,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,UAAM,iBAAiB,SAAS,UAAU;AAE1C,QAAII,SAAQ,eAAe,MAAM;AAC/B,aAAO,KAAK,GAAGE,QAAM,KAAK,QAAQ,CAAC,0BAA0B,MAAM,EAAE;AAEvE,WAAO,KAAK,GAAGA,QAAM,KAAK,QAAQ,CAAC,4BAA4B,UAAU,EAAE;AAC3E,UAAM,kBAAkB,MAAM,OAAOP,eAAc,UAAU,EAAE;AAE/D,UAAM,YAAY,IAAI,aAAa;AAAA,MACjC,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,WAAW,MAAM,UAAU,QAAQ;AACzC,UAAM,gBAAgB,iBAAiB,WAAW;AAElD;AAAA,MACE,MAAM;AAAA,QACJ,oBAAoB,KAAK;AAAA,UACvB;AAAA,YACE,GAAG;AAAA,YACH,cAAc;AAAA,cACZ,GAAI,eAAe,gBAAgB,CAAC;AAAA,cACpC,GAAG;AAAA,YACL;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAGO,QAAM,MAAM,SAAS,CAAC;AAAA,IAC3B;AAAA,EACF;AACF;;;AzBhJO,IAAM,WAAW;AAAA,EACtB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AAAA,EACV,kBAAkBG;AAAA,EAClB,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;","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 '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 } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\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}\n\nasync function createCmsWebhookUrlsJsonFile(basePath: string) {\n const {\n userStoreConfigFile,\n userLegacyStoreConfigFile,\n tmpCMSWebhookUrlsFile,\n } = withBasePath(basePath)\n let userStoreConfig\n\n if (existsSync(userStoreConfigFile)) {\n userStoreConfig = (\n await import(pathToFileURL(path.resolve(userStoreConfigFile)).href)\n )?.default\n } else if (existsSync(userLegacyStoreConfigFile)) {\n userStoreConfig = (\n await import(pathToFileURL(path.resolve(userLegacyStoreConfigFile)).href)\n )?.default\n } else {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n }\n\n if (\n userStoreConfig?.vtexHeadlessCms &&\n userStoreConfig.vtexHeadlessCms?.webhookUrls\n ) {\n const { webhookUrls } = userStoreConfig?.vtexHeadlessCms\n\n try {\n writeJsonSync(tmpCMSWebhookUrlsFile, { urls: webhookUrls }, { spaces: 2 })\n logger.log(`${chalk.green('success')} - CMS webhook URLs file created`)\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n } else {\n logger.info(`${chalk.blue('info')} - No CMS webhook URLs were provided`)\n }\n}\n\nasync function copyTheme(basePath: string) {\n const {\n userStoreConfigFile,\n userThemesFileDir,\n tmpThemesCustomizationsFile,\n userLegacyStoreConfigFile,\n } = withBasePath(basePath)\n\n const storeConfigFile =\n (existsSync(userStoreConfigFile) && userStoreConfigFile) ||\n (existsSync(userLegacyStoreConfigFile) && userLegacyStoreConfigFile)\n\n const userStoreConfigFilePath =\n storeConfigFile && path.resolve(storeConfigFile)\n const importedStoreConfig =\n userStoreConfigFilePath &&\n (await import(pathToFileURL(userStoreConfigFilePath).href))\n const storeConfig =\n userStoreConfigFilePath &&\n (importedStoreConfig?.default || importedStoreConfig)\n\n if (!storeConfig)\n logger.info(\n `${chalk.blue(\n 'info'\n )} - No store config file was found in the root directory`\n )\n\n if (storeConfig.theme) {\n const customTheme = path.join(\n userThemesFileDir,\n `${storeConfig.theme}.scss`\n )\n if (existsSync(customTheme)) {\n try {\n copyFileSync(customTheme, tmpThemesCustomizationsFile)\n logger.log(\n `${chalk.green('success')} - ${\n storeConfig.theme\n } theme has been applied`\n )\n } catch (err) {\n logger.error(`${chalk.red('error')} - ${err}`)\n }\n } else {\n logger.info(\n `${chalk.blue('info')} - The ${\n storeConfig.theme\n } theme was added to the config file but the ${\n storeConfig.theme\n }.scss file does not exist in the themes folder. Read more: https://developers.vtex.com/docs/guides/faststore/themes-overview`\n )\n }\n } else if (\n existsSync(userThemesFileDir) &&\n readdirSync(userThemesFileDir).length > 0\n ) {\n logger.info(\n `${chalk.blue(\n 'info'\n )} - The theme needs to be added to the config file to be applied. Read more: https://www.faststore.dev/docs/themes/overview`\n )\n }\n}\n\nfunction updateBuildTime(basePath: string) {\n try {\n const { tmpSeoConfig } = withBasePath(basePath)\n let config = readFileSync(tmpSeoConfig, 'utf8')\n const newBuildTime = new Date().toISOString()\n\n config = config.replace(\n /const buildTime = .*?;/,\n `const buildTime = '${newBuildTime}';`\n )\n\n writeFileSync(tmpSeoConfig, config)\n\n logger.log(`${chalk.green('success')} - Build time updated`, newBuildTime)\n } catch (error) {\n logger.error(`${chalk.red('error')} - Updating build time:`, error)\n }\n}\n\nasync function checkDependencies(basePath: string, packagesToCheck: string[]) {\n const { coreDir, getRoot } = withBasePath(basePath)\n\n const corePackageJsonPath = path.join(coreDir, 'package.json')\n const rootPackageJsonPath = path.join(getRoot(), 'package.json')\n\n const { default: corePackageJson } = await import(\n pathToFileURL(corePackageJsonPath).href,\n {\n with: { type: 'json' },\n }\n )\n const { default: rootPackageJson } = await import(\n pathToFileURL(rootPackageJsonPath).href,\n {\n with: { type: 'json' },\n }\n )\n\n packagesToCheck.forEach((packageName) => {\n const coreVersion =\n corePackageJson.devDependencies[packageName] ||\n corePackageJson.dependencies[packageName]\n const rootVersion =\n rootPackageJson.devDependencies[packageName] ||\n rootPackageJson.dependencies[packageName]\n\n if (!coreVersion || !rootVersion) {\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Package ${packageName} not found in both core or root dependencies.`\n )\n } else if (coreVersion !== rootVersion) {\n logger.warn(\n `${chalk.yellow(\n 'warning'\n )} - Version mismatch detected for ${packageName}.\n Core: ${coreVersion}, Customization: ${rootVersion}. Please align both versions to prevent issues`\n )\n }\n })\n}\n\nfunction updateNextConfig(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n\n const nextConfigPath = path.join(tmpDir, 'next.config.js')\n\n let nextConfigData = String(readFileSync(nextConfigPath))\n nextConfigData = nextConfigData.replace(\n /outputFileTracingRoot\\:\\s+(.*),/,\n `outputFileTracingRoot: '${process.cwd()}',`\n )\n\n writeFileSync(nextConfigPath, nextConfigData)\n}\n\n// returns new (discovery.config.js) or legacy (faststore.config.js) store config file\nfunction getCurrentUserStoreConfigFile(basePath: string) {\n const { userStoreConfigFile, userLegacyStoreConfigFile } =\n withBasePath(basePath)\n\n if (existsSync(userStoreConfigFile)) {\n return userStoreConfigFile\n }\n\n if (existsSync(userLegacyStoreConfigFile)) {\n return userLegacyStoreConfigFile\n }\n\n return null\n}\n\nasync function validateAndInstallMissingDependencies(basePath: string) {\n const { userDir } = withBasePath(basePath)\n\n const currentUserStoreConfigFile = getCurrentUserStoreConfigFile(basePath)\n\n if (!currentUserStoreConfigFile) {\n return\n }\n\n const { default: userStoreConfig } = await import(\n pathToFileURL(currentUserStoreConfigFile).href\n )\n const { default: userPackageJson } = await import(\n pathToFileURL(path.join(userDir, 'package.json')).href,\n {\n with: { type: 'json' },\n }\n )\n\n const missingDependencies: Array<{\n feature: string\n dependencies: string[]\n }> = []\n\n if (userStoreConfig?.experimental?.preact) {\n missingDependencies.push({\n feature: 'Preact',\n dependencies: ['preact@10.23.1', 'preact-render-to-string@6.5.8'],\n })\n }\n\n missingDependencies.forEach(async ({ feature, dependencies }) => {\n const dependenciesToInstall = dependencies.filter((dependency) => {\n const dependencyName = dependency.split('@')[0]\n return !userPackageJson.dependencies[dependencyName]\n })\n\n if (dependenciesToInstall.length > 0) {\n const spinner = ora(\n `Installing ${feature} missing dependencies\\n`\n ).start()\n\n await installDependencies({\n dependencies: dependenciesToInstall,\n cwd: userDir,\n errorMessage: `failed to install ${feature} dependencies`,\n })\n\n spinner.stop()\n }\n })\n}\n\nconst DISABLED_PROXY_FILENAME = 'proxy__DISABLED.ts'\n\n/**\n * Toggle proxy based on localization feature flag (localization.enabled) in discovery config.\n * When flag is off: renames proxy.ts → proxy__DISABLED.ts so Next.js does not run it.\n * When flag is on: renames proxy__DISABLED.ts → proxy.ts so Next.js runs it.\n */\nexport function toggleProxyByLocalizationFlag(\n basePath: string,\n localizationEnabled: boolean\n): void {\n try {\n const { tmpDir } = withBasePath(basePath)\n const proxyPath = path.join(tmpDir, 'src', 'proxy.ts')\n const disabledPath = path.join(tmpDir, 'src', DISABLED_PROXY_FILENAME)\n\n const shouldEnableProxy = existsSync(disabledPath) && !existsSync(proxyPath)\n const shouldDisableProxy = existsSync(proxyPath)\n\n if (localizationEnabled && shouldEnableProxy) {\n moveSync(disabledPath, proxyPath)\n } else if (!localizationEnabled && shouldDisableProxy) {\n moveSync(proxyPath, disabledPath)\n }\n } catch (error) {\n logger.error(error)\n throw error\n }\n}\n\nasync function enableSearchSSR(basePath: string) {\n const storeConfigPath = getCurrentUserStoreConfigFile(basePath)\n\n if (!storeConfigPath) {\n return\n }\n const { default: storeConfig } = await import(\n pathToFileURL(storeConfigPath).href\n )\n if (!storeConfig.experimental.enableSearchSSR) {\n return\n }\n\n const { tmpDir } = withBasePath(basePath)\n const searchPagePath = path.join(tmpDir, 'src', 'pages', 's.tsx')\n const searchPageData = String(readFileSync(searchPagePath))\n\n const searchPageWithSSR = searchPageData.replaceAll(\n 'getStaticProps',\n 'getServerSideProps'\n )\n\n writeFileSync(searchPagePath, searchPageWithSSR)\n}\n\nexport async function generate(options: GenerateOptions) {\n const { basePath, setup = false } = options\n\n let setupPromise: Promise<unknown> | null = null\n\n await validateAndInstallMissingDependencies(basePath)\n\n if (setup) {\n setupPromise = Promise.all([\n createTmpFolder(basePath),\n copyCoreFiles(basePath),\n copyCypressFiles(basePath),\n copyPublicFiles(basePath),\n updateNextConfig(basePath),\n ])\n }\n\n await Promise.all([\n setupPromise,\n checkDependencies(basePath, ['typescript']),\n enableSearchSSR(basePath),\n updateBuildTime(basePath),\n copyUserStarterToCustomizations(basePath),\n copyTheme(basePath),\n createCmsWebhookUrlsJsonFile(basePath),\n installPlugins(basePath),\n ])\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { withBasePath } from './directory'\nimport { myAccountPageTemplate } from './templates/myAccountPage'\n\nconst ALLOWED_PREFIX_PAGES = ['/pvt/account']\n\ntype CreateExternalPagesArgs = {\n customizationPagesDir: string\n corePagesDir: string\n baseCustomizationPagesDir: string\n}\n\nconst createExternalPages = ({\n customizationPagesDir,\n corePagesDir,\n baseCustomizationPagesDir,\n}: CreateExternalPagesArgs) => {\n fs.readdirSync(customizationPagesDir).forEach((file) => {\n const filePath = path.join(customizationPagesDir, file)\n const destinationPath = path.join(corePagesDir, file)\n if (fs.statSync(filePath).isDirectory()) {\n if (!fs.existsSync(destinationPath)) {\n fs.mkdirSync(destinationPath, { recursive: true })\n }\n return createExternalPages({\n customizationPagesDir: filePath,\n corePagesDir: destinationPath,\n baseCustomizationPagesDir,\n })\n }\n\n const isReactFile = filePath.endsWith('.tsx')\n\n /* Checks if the destination path does not exist as a file or as a folder containing an \"index.tsx\" file.\n * This ensures that the path is available before proceeding with file creation or other operations.\n */\n const isDestinationAvailable =\n !fs.existsSync(destinationPath) &&\n !fs.existsSync(\n path.join(destinationPath.replace('.tsx', ''), 'index.tsx')\n )\n\n if (isReactFile && isDestinationAvailable) {\n const externalPagePath = `src/customizations/src/pages${filePath.replace(baseCustomizationPagesDir, '').replace('.tsx', '')}`\n const content = myAccountPageTemplate(externalPagePath)\n fs.writeFileSync(destinationPath, content)\n }\n })\n}\n\nfunction isAllowedPrefixPage(file: string) {\n return ALLOWED_PREFIX_PAGES.some((prefix) => file.startsWith(prefix))\n}\n\nexport function createNextJsPages(basePath: string) {\n const { tmpDir } = withBasePath(basePath)\n\n const corePagesDir = path.join(tmpDir, 'src/pages')\n const customizationPagesDir = path.join(\n tmpDir,\n 'src/customizations/src/pages'\n )\n\n if (!fs.existsSync(customizationPagesDir)) {\n // If the customization pages directory doesn't exist, we don't need to create any pages\n // and we can return early.\n return\n }\n\n const allPagesAreAllowed = ({\n basePath,\n dirPath,\n }: { basePath: string; dirPath: string }): boolean => {\n const items = fs.readdirSync(dirPath, { withFileTypes: true })\n\n return items.every((item) => {\n const itemPath = path.join(dirPath, item.name)\n\n if (item.isDirectory()) {\n return allPagesAreAllowed({ basePath, dirPath: itemPath })\n }\n\n if (!item.isFile()) {\n return false // Reject anything that is not a file (symlinks, sockets, etc.)\n }\n\n const isNextPage = /\\.(js|jsx|ts|tsx)$/.test(item.name)\n if (!isNextPage) {\n return false // Reject files that are not Next.js pages\n }\n\n // For Next.js page files, check if they match allowed prefixes\n const relativePath = path.relative(basePath, itemPath)\n const normalizedPath =\n '/' + relativePath.replace(/\\\\/g, '/').replace(/\\.(js|jsx|ts|tsx)$/, '')\n\n return isAllowedPrefixPage(normalizedPath)\n })\n }\n\n const pagesAreAllowed = allPagesAreAllowed({\n basePath: customizationPagesDir,\n dirPath: customizationPagesDir,\n })\n\n if (!pagesAreAllowed) {\n throw new Error(\n `Only these prefix pages: (${ALLOWED_PREFIX_PAGES.join(', ')}) are allowed`\n )\n }\n\n createExternalPages({\n customizationPagesDir,\n corePagesDir,\n baseCustomizationPagesDir: customizationPagesDir,\n })\n}\n","/*\n TODO: Code in a template string is not a good practice because it becomes very difficult to maintain.\n There will be a component called MyAccountLayout that will wrap the entire MyAccount Layout, including the global sections, menu, etc.\n This will reduce the amount of code inside the template string.\n*/\n\nexport const myAccountPageTemplate = (pagePath: string) => `\n import type { ComponentType } from 'react'\n import RenderSections from 'src/components/cms/RenderSections'\n import { default as GLOBAL_COMPONENTS } from 'src/components/cms/global/Components'\n import CUSTOM_COMPONENTS from 'src/customizations/src/components'\n import { MyAccountLayout } from 'src/components/account'\n import {\n getServerSideProps,\n type MyAccountProps,\n } from 'src/experimental/myAccountServerSideProps'\n import DynamicPage from '${pagePath}';\n import PageProvider from 'src/sdk/overrides/PageProvider'\n /* A list of components that can be used in the CMS. */\n const COMPONENTS: Record<string, ComponentType<any>> = {\n ...GLOBAL_COMPONENTS,\n ...CUSTOM_COMPONENTS,\n }\n\n function Page({ globalSections: globalSectionsProp, accountName, isRepresentative }: MyAccountProps) {\n const { sections: globalSections, settings: globalSettings } = globalSectionsProp ?? {}\n\n return (\n <PageProvider context={{ globalSettings }}>\n <RenderSections\n globalSections={globalSections}\n components={COMPONENTS}\n >\n <MyAccountLayout accountName={accountName} isRepresentative={isRepresentative}>\n <DynamicPage />\n </MyAccountLayout>\n </RenderSections>\n </PageProvider>\n )\n }\n\n export { getServerSideProps }\n\n export default Page\n`\n","import chalk from 'chalk'\nimport type { ChildProcess, ExecException } from 'node:child_process'\nimport { execSync } from 'node:child_process'\nimport { logger } from './logger'\n\ntype ExecSyncError = (ExecException & ChildProcess) | undefined\n\nconst showError = ({\n message,\n cmd,\n error,\n}: {\n message: string\n cmd: string\n error: ExecSyncError\n}) => {\n logger.error(`${chalk.red('error')} - ${message}`)\n\n if (cmd && error) {\n logger.log(\n `${chalk.magenta('DEBUG')} - $ ${JSON.stringify(cmd, null, 2)} error root ↓`\n )\n logger.log(error.stdout?.toString())\n }\n\n process.exit(1)\n}\n\nconst showWarning = ({\n message,\n cmd,\n error,\n}: {\n message: string\n cmd: string\n error: ExecSyncError\n}) => {\n logger.warn(`${chalk.yellow('warn')} - ${message}`)\n\n if (cmd && error) {\n logger.log(\n `${chalk.magenta('DEBUG')} - $ ${JSON.stringify(cmd, null, 2)} warn root ↓`\n )\n logger.log(error.stdout?.toString())\n }\n}\n\nexport const runCommandSync = ({\n cmd,\n errorMessage,\n throws,\n cwd,\n}: {\n cmd: string\n errorMessage: string\n throws: 'warning' | 'error'\n cwd?: string\n}) => {\n const debug = process.env.DISCOVERY_DEBUG === 'true' ? true : false\n\n try {\n logger.log(`[STARTED] ${cmd}`)\n\n const res = execSync(\n debug ? `${cmd} --debug --verbose 2>&1` : `${cmd} 2>&1`,\n {\n stdio: 'pipe',\n cwd,\n }\n )\n logger.log(`[STATUS] ${res?.toString() ?? 'Unknown'}`)\n logger.log(`[FINISHED] ${cmd}`)\n } catch (error) {\n const sanitizedError = debug ? (error as ExecSyncError) : undefined\n\n if (throws === 'warning') {\n showWarning({ message: errorMessage, cmd, error: sanitizedError })\n } else {\n showError({ message: errorMessage, cmd, error: sanitizedError })\n }\n }\n}\n","import { getPreferredPackageManager } from './commands'\nimport { runCommandSync } from './runCommandSync'\n\ntype InstallDependenciesOptions = {\n dependencies: string[]\n cwd: string\n errorMessage: string\n}\n\nexport async function installDependencies({\n dependencies,\n cwd,\n errorMessage,\n}: InstallDependenciesOptions) {\n const packageManager = await getPreferredPackageManager()\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n runCommandSync({\n cmd: `${packageManager} ${installCommand} ${dependencies.join(' ')}`,\n errorMessage,\n throws: 'error',\n cwd,\n })\n}\n","import fsExtra from 'fs-extra'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { withBasePath } from './directory'\nimport { logger } from './logger'\n\nconst { copySync, existsSync, mkdirSync, readdirSync, writeFileSync } = fsExtra\n\nexport type PageConfig = {\n path: string\n appLayout: boolean\n name: string\n}\n\nexport type APIConfig = {\n path: string\n}\n\nexport type PluginConfig = {\n pages?: { [pageName: string]: Partial<PageConfig> }\n apis?: { [pageName: string]: Partial<APIConfig> }\n}\n\nexport type Plugin =\n | string\n | {\n [pluginName: string]: PluginConfig\n }\n\nconst PLUGIN_CONFIG_FILE = 'plugin.config.js'\n\nconst sanitizePluginName = (pluginName: string, pascalCase = false) => {\n const sanitized = pluginName.split('/')[1]\n\n if (pascalCase) {\n return sanitized\n .toLowerCase()\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n }\n\n return sanitized\n}\n\nexport const getPluginName = (plugin: Plugin) => {\n if (typeof plugin === 'string') {\n return plugin\n }\n\n return Object.keys(plugin)[0]\n}\n\nconst getPluginCustomConfig = (plugin: Plugin) => {\n if (typeof plugin === 'string') {\n return {}\n }\n\n return plugin[getPluginName(plugin)]\n}\n\nconst getPluginSrcPath = async (basePath: string, pluginName: string) => {\n const { getPackagePath } = withBasePath(basePath)\n return getPackagePath(pluginName, 'src')\n}\n\nexport const getPluginsList = async (basePath: string): Promise<Plugin[]> => {\n const { tmpStoreConfigFile } = withBasePath(basePath)\n\n try {\n const {\n default: { plugins = [] },\n } = await import(pathToFileURL(tmpStoreConfigFile).href)\n return plugins\n } catch (error) {\n logger.error(`Could not load plugins from store config`)\n }\n\n return []\n}\n\nconst copyPluginsSrc = async (basePath: string, plugins: Plugin[]) => {\n const { tmpPluginsDir } = withBasePath(basePath)\n\n logger.log('Copying plugins files')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginSrcPath = await getPluginSrcPath(\n basePath,\n getPluginName(pluginName)\n )\n const pluginDestPath = path.join(\n tmpPluginsDir,\n sanitizePluginName(pluginName)\n )\n\n copySync(pluginSrcPath, pluginDestPath)\n logger.log(`Copied ${pluginName} files`)\n })\n}\n\nconst copyPluginPublicFiles = async (basePath: string, plugins: Plugin[]) => {\n const { tmpDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Copying plugin public files')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginPath = getPackagePath(getPluginName(pluginName))\n\n try {\n if (existsSync(`${pluginPath}/public`)) {\n copySync(`${pluginPath}/public`, `${tmpDir}/public`, {\n dereference: true,\n overwrite: true,\n })\n logger.log(`Plugin public files copied`)\n }\n } catch (e) {\n logger.error(e)\n }\n })\n}\n\nconst getPluginPageFileContent = (\n pluginName: string,\n pageName: string,\n appLayout: boolean\n) => `\n// GENERATED FILE\n// @ts-nocheck\nimport * as page from 'src/plugins/${pluginName}/pages/${pageName}'\n${appLayout ? `import { getGlobalSectionsData } from 'src/components/cms/GlobalSections'` : ``}\n${appLayout ? `import RenderSections from 'src/components/cms/RenderSections'` : ``}\nimport { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'\n\nasync function getServerSidePropsBase(${appLayout ? '{ previewData, ...otherProps }' : 'otherProps'}) {\n const noop = async function() {}\n const loaderData = await (page.loader || noop)(otherProps)\n${appLayout ? `const { sections = [] } = await getGlobalSectionsData(previewData)` : ``}\n\n return {\n props: {\n data: loaderData,\n ${appLayout ? 'globalSections: sections' : ``}\n }\n }\n}\n\nexport const getServerSideProps = withLocaleValidationSSR(getServerSidePropsBase)\nexport default function Page(props) {\n ${\n appLayout\n ? `return <RenderSections globalSections={props.globalSections}>\n {page.default(props.data)}\n </RenderSections>`\n : `return page.default(props.data)`\n }\n}\n `\n\nconst generatePluginPages = async (basePath: string, plugins: Plugin[]) => {\n const { tmpPagesDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Generating plugin pages')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE)\n\n const { default: pluginConfig } = await import(\n pathToFileURL(pluginConfigPath).href\n )\n\n const { pages: pagesCustom } = getPluginCustomConfig(plugin)\n\n const pagesConfig: Record<string, PageConfig> = {\n ...(pluginConfig.pages ?? {}),\n ...pagesCustom,\n }\n\n const pages = Object.keys(pagesConfig)\n\n pages.forEach(async (pageName) => {\n const paths = pagesConfig[pageName].path.split('/')\n\n const pageFile = paths.pop()\n const pagePaths = paths\n\n const pagePath = path.join(tmpPagesDir, ...pagePaths, pageFile + '.tsx')\n\n const fileContent = getPluginPageFileContent(\n sanitizePluginName(pluginName),\n pageName,\n pagesConfig[pageName].appLayout\n )\n\n mkdirSync(path.dirname(pagePath), { recursive: true })\n writeFileSync(pagePath, fileContent)\n })\n })\n}\n\nexport async function addPluginsSections(basePath: string, plugins: Plugin[]) {\n const { tmpPluginsDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Adding plugin sections')\n\n const indexPluginsOverrides = plugins\n .filter((plugin) =>\n existsSync(\n getPackagePath(getPluginName(plugin), 'src', 'components', 'index.ts')\n )\n )\n .map((plugin) => {\n const pluginReference =\n sanitizePluginName(getPluginName(plugin), true) + 'Components'\n\n return {\n import: `import { default as ${pluginReference} } from 'src/plugins/${sanitizePluginName(getPluginName(plugin))}/components'`,\n pluginReference,\n }\n })\n\n const pluginsImportFileContent = `\n ${indexPluginsOverrides.map((plugin) => plugin.import).join('\\n')}\n\n export default {\n ${indexPluginsOverrides.map((plugin) => `...${plugin.pluginReference}`).join(',\\n')}\n }\n `\n\n const sectionPath = path.join(tmpPluginsDir, 'index.ts')\n writeFileSync(sectionPath, pluginsImportFileContent)\n logger.log('Writing plugins overrides')\n logger.log(sectionPath)\n logger.log(pluginsImportFileContent)\n}\n\nexport async function addPluginsOverrides(basePath: string, plugins: Plugin[]) {\n const { tmpPluginsDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Adding plugin overrides')\n\n plugins\n .map((plugin) => ({\n pluginName: getPluginName(plugin),\n pluginOverridesPath: getPackagePath(\n getPluginName(plugin),\n 'src',\n 'components',\n 'overrides'\n ),\n }))\n .filter(({ pluginOverridesPath }) => existsSync(pluginOverridesPath))\n .reverse()\n .forEach(({ pluginName, pluginOverridesPath }) => {\n const overrideFilesAlreadyCopied: string[] = []\n\n const sanitizedPluginName = sanitizePluginName(pluginName)\n\n const overrideFiles = readdirSync(pluginOverridesPath)\n\n overrideFiles\n .filter((file) => !overrideFilesAlreadyCopied.includes(file))\n .forEach((overrideFileName) => {\n const overrideFileContent = `export { override } from 'src/plugins/${sanitizedPluginName}/components/overrides/${overrideFileName.split('.')[0]}'`\n\n writeFileSync(\n path.join(tmpPluginsDir, 'overrides', overrideFileName),\n overrideFileContent\n )\n overrideFilesAlreadyCopied.push(overrideFileName)\n })\n })\n}\n\nconst addPluginsTheme = async (basePath: string, plugins: Plugin[]) => {\n const { getPackagePath, tmpThemesPluginsFile } = withBasePath(basePath)\n\n const pluginImportsContent = plugins\n .filter((plugin) =>\n existsSync(\n getPackagePath(getPluginName(plugin), 'src', 'themes', 'index.scss')\n )\n )\n .map(\n (plugin) => `@use \"${getPluginName(plugin)}/src/themes/index.scss\" as *;`\n )\n .join('\\n')\n\n writeFileSync(tmpThemesPluginsFile, pluginImportsContent)\n}\n\nconst getPluginAPIFileContent = (pluginName: string, apiName: string) => `\n// GENERATED FILE\n// @ts-nocheck\nimport apiHandle from 'src/plugins/${pluginName}/apis/${apiName}'\nimport { NextApiRequest, NextApiResponse } from \"next/types\"\n\nexport default function handle(req: NextApiRequest, res: NextApiResponse) {\n return apiHandle(req, res)\n}\n`\n\nconst generatePluginApis = async (basePath: string, plugins: Plugin[]) => {\n const { tmpApiDir, getPackagePath } = withBasePath(basePath)\n\n logger.log('Generating plugin APIs')\n\n plugins.forEach(async (plugin) => {\n const pluginName = getPluginName(plugin)\n const pluginConfigPath = getPackagePath(pluginName, PLUGIN_CONFIG_FILE)\n\n const { default: pluginConfig } = await import(\n pathToFileURL(pluginConfigPath).href\n )\n\n const { apis: apisCustom } = getPluginCustomConfig(plugin)\n\n const apisConfig: Record<string, APIConfig> = {\n ...(pluginConfig.apis ?? {}),\n ...apisCustom,\n }\n\n const apis = Object.keys(apisConfig)\n\n apis.forEach(async (apiName) => {\n const paths = apisConfig[apiName].path.split('/')\n\n const apiFile = paths.pop()\n const apiPaths = paths\n\n const apiPath = path.join(\n tmpApiDir,\n 'plugins',\n ...apiPaths,\n apiFile + '.ts'\n )\n\n const fileContent = getPluginAPIFileContent(\n sanitizePluginName(pluginName),\n apiName\n )\n\n mkdirSync(path.dirname(apiPath), { recursive: true })\n writeFileSync(apiPath, fileContent)\n })\n })\n}\n\nexport const installPlugins = async (basePath: string) => {\n const plugins = await getPluginsList(basePath)\n\n copyPluginsSrc(basePath, plugins)\n copyPluginPublicFiles(basePath, plugins)\n generatePluginPages(basePath, plugins)\n generatePluginApis(basePath, plugins)\n addPluginsSections(basePath, plugins)\n addPluginsOverrides(basePath, plugins)\n addPluginsTheme(basePath, plugins)\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport { spawn } from 'node:child_process'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\nimport { mergeCMSFiles } from '../utils/hcms'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nexport default class CmsSync extends Command {\n static flags = {\n ['dry-run']: Flags.boolean({ char: 'd' }),\n }\n\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being synched with the CMS is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { flags, args } = await this.parse(CmsSync)\n\n const basePath = getBasePath(args.path)\n const { tmpDir, userStoreConfigFile } = withBasePath(basePath)\n\n const { default: userStoreConfig } = await import(\n pathToFileURL(path.resolve(userStoreConfigFile)).href\n )\n const cmsProjectName = userStoreConfig.contentSource?.project ?? 'faststore'\n\n await generate({ setup: true, basePath })\n await mergeCMSFiles(basePath)\n\n if (flags['dry-run']) {\n return\n }\n\n return spawn(`vtex cms sync ${cmsProjectName}`, {\n shell: true,\n cwd: tmpDir,\n stdio: 'inherit',\n })\n }\n}\n","import chalk from 'chalk'\nimport path from 'node:path'\n// import { ux } from '@oclif/core'\nimport { confirm } from '@inquirer/prompts'\nimport fsExtra from 'fs-extra'\nconst { readFileSync, existsSync, writeFileSync, mkdirSync } = fsExtra\n\nimport { pathToFileURL } from 'node:url'\nimport { withBasePath } from './directory'\nimport { getPluginName, getPluginsList } from './plugins'\n\nexport interface ContentTypeOrSectionDefinition {\n id?: string\n name?: string\n scopes?: string[]\n isSingleton?: boolean\n onlySettings?: boolean\n requiredScopes?: string[]\n schema?: Record<string, unknown>\n configurationSchemaSets?: ConfigurationSchemaSet[]\n}\n\nexport interface ConfigurationSchemaSet {\n name?: string\n configurations?: Array<{\n name?: string\n schema?: Record<string, unknown>\n }>\n}\n\nexport function splitCustomDefinitions(\n coreDefinitions: ContentTypeOrSectionDefinition[],\n customDefinitions: ContentTypeOrSectionDefinition[],\n primaryIdentifier: 'id' | 'name'\n) {\n const coreDefinitionIdentifiers = new Set<string>(\n coreDefinitions.map((definition) => definition[primaryIdentifier] ?? '')\n )\n\n const duplicates: ContentTypeOrSectionDefinition[] = []\n const newDefinitions: ContentTypeOrSectionDefinition[] = []\n\n customDefinitions.forEach((definition) => {\n if (!definition[primaryIdentifier]) {\n console.error('Ignoring invalid definition:', definition)\n return\n }\n\n if (\n coreDefinitionIdentifiers.has(definition[primaryIdentifier] as string)\n ) {\n duplicates.push(definition)\n return\n }\n\n newDefinitions.push(definition)\n })\n\n return { duplicates, newDefinitions }\n}\n\nexport function dedupeAndMergeDefinitions(\n coreDefinitions: ContentTypeOrSectionDefinition[],\n duplicates: ContentTypeOrSectionDefinition[],\n primaryIdentifier: 'id' | 'name'\n) {\n const sortedCoreDefs = coreDefinitions.filter((definition) =>\n Boolean(definition[primaryIdentifier])\n )\n sortedCoreDefs.sort((a, b) =>\n (a[primaryIdentifier] as string) < (b[primaryIdentifier] as string) ? -1 : 1\n )\n\n const sortedDuplicates = duplicates.filter((definition) =>\n Boolean(definition[primaryIdentifier])\n )\n sortedDuplicates.sort((a, b) =>\n (a[primaryIdentifier] as string) < (b[primaryIdentifier] as string) ? -1 : 1\n )\n\n let duplicateIdx = 0\n\n const result = sortedCoreDefs.map((currentDefinition) => {\n const isDuplicateMatch =\n currentDefinition[primaryIdentifier] ===\n sortedDuplicates[duplicateIdx]?.[primaryIdentifier]\n\n if (duplicateIdx < sortedDuplicates.length && isDuplicateMatch) {\n return sortedDuplicates[duplicateIdx++]\n }\n\n return currentDefinition\n })\n\n return result\n}\n\nasync function confirmUserChoice(\n duplicates: ContentTypeOrSectionDefinition[],\n fileName: string\n) {\n const goAhead = await confirm({\n message: `You are about to override default ${\n fileName.split('.')[0]\n }:\\n\\n${duplicates\n .map((definition) => definition.id || definition.name)\n .join('\\n')}\\n\\nAre you sure? [yes/no]`,\n })\n\n if (!goAhead) {\n throw new Error('cms-sync cancelled by user.')\n }\n\n return\n}\n\nexport async function mergeCMSFile(fileName: string, basePath: string) {\n const {\n coreCMSDir,\n userCMSDir,\n tmpCMSDir,\n getPackagePath,\n userStoreConfigFile,\n } = withBasePath(basePath)\n\n const { default: userStoreConfig } = await import(\n pathToFileURL(path.resolve(userStoreConfigFile)).href\n )\n const cmsProjectName = userStoreConfig.contentSource?.project ?? 'faststore'\n\n const coreFilePath = path.join(coreCMSDir, fileName)\n const customFilePath = path.join(userCMSDir, fileName)\n\n const coreFile = readFileSync(coreFilePath, 'utf8')\n const coreDefinitions: ContentTypeOrSectionDefinition[] = JSON.parse(coreFile)\n\n const primaryIdentifierForDefinitions =\n fileName === 'content-types.json' ? 'id' : 'name'\n\n let output: ContentTypeOrSectionDefinition[] = coreDefinitions\n\n const plugins = await getPluginsList(basePath)\n\n const pluginCMSFilePaths = plugins.map((plugin) =>\n getPackagePath(getPluginName(plugin), 'cms', 'faststore', fileName)\n )\n\n const customizations = [...pluginCMSFilePaths, customFilePath].filter(\n (pluginCMSFilePath) => existsSync(pluginCMSFilePath)\n )\n\n // TODO: create a validation when the CMS files exist but don't have a component for them\n for (const newFilePath of customizations) {\n const customFile = readFileSync(newFilePath, 'utf8')\n\n try {\n const customDefinitions = JSON.parse(customFile)\n\n const { duplicates, newDefinitions } = splitCustomDefinitions(\n output,\n customDefinitions,\n primaryIdentifierForDefinitions\n )\n\n if (duplicates.length) {\n if (newFilePath === customFilePath) {\n await confirmUserChoice(duplicates, fileName)\n }\n\n output = [\n ...dedupeAndMergeDefinitions(\n output,\n duplicates,\n primaryIdentifierForDefinitions\n ),\n ...newDefinitions,\n ]\n } else {\n output = [...output, ...newDefinitions]\n }\n } catch (err) {\n if (err instanceof SyntaxError) {\n console.info(\n `${chalk.red(\n 'error'\n )} - ${fileName} is a malformed JSON file, ignoring its contents.`\n )\n } else {\n throw err\n }\n }\n }\n\n try {\n if (!existsSync(tmpCMSDir(cmsProjectName))) {\n mkdirSync(tmpCMSDir(cmsProjectName))\n }\n writeFileSync(\n path.join(tmpCMSDir(cmsProjectName), fileName),\n JSON.stringify(output)\n )\n console.log(\n `${chalk.green('success')} - CMS file ${chalk.dim(fileName)} created`\n )\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n\nexport async function mergeCMSFiles(basePath: string) {\n try {\n await mergeCMSFile('content-types.json', basePath)\n await mergeCMSFile('sections.json', basePath)\n } catch (err) {\n console.error(`${chalk.red('error')} - ${err}`)\n }\n}\n","import fs from 'node:fs'\nimport degit from 'degit'\nimport { Args, Command } from '@oclif/core'\nimport { confirm } from '@inquirer/prompts'\n\nexport default class Create extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the Discovery folder will be created. Defaults to ./discovery.',\n }),\n }\n\n static description =\n 'Creates a discovery folder based on the starter.store template.'\n\n static examples = ['$ yarn faststore create discovery']\n\n async run() {\n const { args } = await this.parse(Create)\n\n const discoveryPath = args.path ?? './discovery'\n const discoveryFolderExists = fs.existsSync(discoveryPath)\n\n if (discoveryFolderExists) {\n const confirmOverride = await confirm({\n message: `It looks like you already have a discovery folder named \"${discoveryPath}\" in your store. Do you want to override it?`,\n })\n\n if (!confirmOverride)\n return this.log('🛑 Interrupted initializing discovery')\n }\n\n const discoveryEmitter = degit('vtex-sites/starter.store', {\n force: true,\n })\n\n this.log('Pulling starter.store template...')\n\n discoveryEmitter.clone(discoveryPath).then(() => {\n this.log(\n `Discovery created successfully! You can find it at ${discoveryPath}`\n )\n })\n }\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport { spawn, spawnSync } from 'node:child_process'\nimport chokidar from 'chokidar'\nimport dotenv from 'dotenv'\n\nimport { cpSync, existsSync, readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getDiscoveryConfig } from '../utils/config'\nimport { checkDeprecatedSecretFiles } from '../utils/deprecations'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate, toggleProxyByLocalizationFlag } from '../utils/generate'\nimport { logger } from '../utils/logger'\nimport { runCommandSync } from '../utils/runCommandSync'\n\n/**\n * Taken from toolbelt\n *\n * https://github.com/vtex/toolbelt/pull/442\n */\nconst stabilityThreshold = process.platform === 'darwin' ? 100 : 200\n\nconst defaultPatterns = ['*/**', '**']\n\nconst defaultIgnored = [\n '.DS_Store',\n 'README.md',\n '.gitignore',\n 'package.json',\n '.git/**',\n '.faststore/**',\n '**/.faststore/**',\n]\n\nconst defaultNodeModulesIgnored = ['node_modules/**', '**/node_modules/**']\n\nconst defaultNodeModulesIgnoredExceptVtexPackages = [\n '**/node_modules/!(@vtex)/**',\n]\n\nconst devAbortController = new AbortController()\n\nasync function storeDev(\n rootDir: string,\n tmpDir: string,\n coreDir: string,\n port: number | string\n) {\n // Only try to read vtex.env if it exists\n let envVars = {}\n const vtexEnvPath = path.join(rootDir, 'vtex.env')\n\n if (existsSync(vtexEnvPath)) {\n try {\n envVars = dotenv.parse(readFileSync(vtexEnvPath))\n } catch (err) {\n logger.log(\n `${chalk.yellow('warn')} - Error parsing vtex.env file: ${err}`\n )\n }\n }\n\n const packageManager = await getPreferredPackageManager()\n\n runCommandSync({\n cmd: `${packageManager} predev`,\n errorMessage:\n 'GraphQL was not optimized and TS files were not updated. Changes in the GraphQL layer did not take effect',\n throws: 'error',\n cwd: tmpDir,\n })\n\n const { success } = copyGenerated(\n path.join(tmpDir, '@generated'),\n path.join(coreDir, '@generated')\n )\n\n if (!success) {\n logger.log(\n `${chalk.yellow('warn')} - Failed to copy @generated schema back to node_modules, autocomplete and DX might be impacted.`\n )\n logger.log(\n `Attempted to copy from ${path.join(tmpDir, '@generated')} to ${path.join(coreDir, '@generated')}`\n )\n }\n\n const devProcess = spawn(`${packageManager} dev-only --port ${port}`, {\n shell: true,\n cwd: tmpDir,\n signal: devAbortController.signal,\n stdio: ['inherit', 'pipe', 'inherit'],\n env: {\n ...process.env,\n ...envVars,\n },\n })\n\n let nextStdout = ''\n devProcess.stdout.on('data', (chunk) => {\n nextStdout += chunk\n const lines = nextStdout.split('\\n')\n while (lines.length > 1) {\n const line = lines.shift()\n console.log('[DISCOVERY] ', line)\n }\n nextStdout = lines.shift() || ''\n })\n devProcess.stdout.on('end', () => {\n console.log('[DISCOVERY] ', nextStdout)\n })\n\n devProcess.on('close', () => {\n devAbortController.abort()\n })\n}\n\nfunction copyGenerated(from: string, to: string) {\n try {\n cpSync(from, to, { recursive: true, force: true, dereference: true })\n\n return { success: true }\n } catch (err) {\n return { success: false }\n }\n}\n\nexport default class Dev extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n account: Args.string({\n name: 'account',\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n port: Args.string({\n name: 'port',\n description: 'The port where FastStore should run. Defaults to 3000.',\n }),\n }\n\n static flags = {\n 'watch-plugins': Flags.boolean({\n description: 'Enable watching for plugin changes',\n default: false,\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(Dev)\n const basePath = getBasePath(args.path)\n\n const port = args.port ?? '3000'\n const watchPlugins = flags['watch-plugins']\n\n const { getRoot, tmpDir, coreDir } = withBasePath(basePath)\n\n checkDeprecatedSecretFiles(basePath)\n\n const queueChange = (/* path: string, remove: boolean */) => {\n generate({ basePath })\n }\n\n const watcher = chokidar.watch([...defaultPatterns], {\n atomic: stabilityThreshold,\n awaitWriteFinish: {\n stabilityThreshold,\n },\n cwd: getRoot(),\n ignoreInitial: true,\n ignored: [\n ...defaultIgnored,\n ...(watchPlugins\n ? defaultNodeModulesIgnoredExceptVtexPackages\n : defaultNodeModulesIgnored),\n ],\n persistent: true,\n usePolling: process.platform === 'win32',\n })\n\n devAbortController.signal.addEventListener('abort', () => {\n watcher.close()\n })\n\n await generate({ setup: true, basePath })\n\n const cliPath = fileURLToPath(\n import.meta.resolve('@faststore/cli/runner', import.meta.url)\n )\n\n spawnSync('node', [cliPath, 'generate-types', tmpDir], {\n stdio: 'inherit',\n })\n\n spawnSync('node', [cliPath, 'cache-graphql', basePath], {\n stdio: 'inherit',\n })\n\n // generate-i18n will validate localization config and check if it's enabled\n spawnSync('node', [cliPath, 'generate-i18n', basePath], {\n stdio: 'inherit',\n })\n\n const config = await getDiscoveryConfig(basePath)\n const localizationEnabled = config?.localization?.enabled === true\n toggleProxyByLocalizationFlag(basePath, localizationEnabled)\n\n storeDev(getRoot(), tmpDir, coreDir, port)\n\n return await new Promise((resolve, reject) => {\n watcher\n .on('add', (/*file*/) => queueChange(/*file, false*/))\n .on('change', (/*file*/) => queueChange(/*file, false*/))\n .on('unlink', (/*file*/) => queueChange(/*file, true*/))\n .on('error', () => {\n devAbortController.abort()\n reject()\n })\n .on('ready', resolve)\n })\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport chalk from 'chalk'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\nimport { logger } from '../utils/logger'\nimport genTsTypes from '../utils/generate-types'\n\nexport default class Generate extends Command {\n static flags = {}\n\n static args = {\n path: Args.string({\n name: 'path',\n hidden: true,\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Generate)\n const basePath = getBasePath(args.path)\n const { tmpDir } = withBasePath(basePath)\n\n await generate({ setup: true, basePath })\n\n genTsTypes(args.path ?? tmpDir)\n\n logger.log(\n `${chalk.green(\n 'success'\n )} - GraphQL schema, types, and optimizations successfully generated 🎉`\n )\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function saveFile(fileLocation: string) {\n fs.mkdirSync(path.dirname(fileLocation), { recursive: true })\n\n return (content: string) => {\n fs.writeFileSync(fileLocation, content)\n }\n}\n","import { saveFile } from './file'\nimport { GraphqlVtexSchema } from '@faststore/api'\nimport {\n generate as codegenGenerate,\n type CodegenConfig,\n} from '@graphql-codegen/cli'\nimport { mergeTypeDefs } from '@graphql-tools/merge'\nimport { printSchemaWithDirectives } from '@graphql-tools/utils'\nimport { buildASTSchema, Kind, parse, type DocumentNode } from 'graphql'\nimport fs, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nconst schemaFileName = 'schema.graphql'\n\nexport default async function genTsTypes(at: string) {\n await generateSchemaFile(at)\n generateSchemaTSTypes(at)\n}\n\nfunction generateSchemaTSTypes(root: string) {\n let finalRootPath = path.resolve(root)\n\n if (existsSync(path.resolve(root, '.faststore'))) {\n finalRootPath = path.resolve(root, '.faststore')\n }\n\n // glob to include all ts/tsx files\n const documents = [`${finalRootPath}/src/**/*.{ts,tsx}`]\n\n const config: CodegenConfig = {\n documents,\n overwrite: true,\n errorsOnly: false,\n debug: false,\n verbose: true,\n schema: path.resolve(finalRootPath, '@generated', schemaFileName),\n generates: {\n [`${finalRootPath}/@generated/`]: {\n preset: 'client',\n config: {\n /** Not all of these properties are supported by the preset, but it reflects our previous config when we used typescript plugins directly */\n preResolveTypes: true,\n avoidOptionals: true,\n enumsAsTypes: true,\n skipTypeNameForRoot: true,\n skipTypename: true,\n allowEnumStringTypes: false,\n flattenGeneratedTypes: true,\n namingConvention: 'change-case-all#pascalCase',\n exportFragmentSpreadSubTypes: true,\n /** Removes useless AST definitions from documents */\n documentMode: 'string',\n },\n presetConfig: {\n // Disabled fragment masking - it wasn't being used by us. This can be reviewed in the future\n fragmentMasking: false,\n // Recognizes the gql(`query { ... }`) calls and generates the types for them\n gqlTagName: 'gql',\n onExecutableDocumentNode: (document: DocumentNode) => ({\n // This makes sure that the operation name is always present in the __meta__ field of each query\n // This helps us to identify the query in the persisted documents and to debug errors in the client\n operationName: getOperationName(document),\n }),\n persistedDocuments: {\n // Keeps document simple, including only necessary properties as '__meta__' and its properties\n mode: 'replaceDocumentWithHash',\n // replaces operation['__meta__']['hash'] with operation['__meta__']['operationHash']\n hashPropertyName: 'operationHash',\n },\n },\n },\n },\n }\n\n return codegenGenerate(config, true)\n}\n\nfunction getOperationName(document: DocumentNode) {\n for (const definition of document.definitions) {\n if (\n definition.kind === Kind.OPERATION_DEFINITION &&\n typeof definition.name?.value === 'string'\n ) {\n return definition.name.value\n }\n }\n\n return 'UnknownOperation'\n}\n\nasync function generateSchemaFile(rootPath: string) {\n const faststoreSchema = printSchemaWithDirectives(GraphqlVtexSchema())\n\n const getMergedSchema = async () => {\n const root = path.join(\n rootPath.endsWith('.faststore') ? [rootPath, '..'].join('/') : rootPath\n )\n\n const customizations = [\n ...(await getTypeDefsFromFolder(root, 'vtex')),\n ...(await getTypeDefsFromFolder(root, 'thirdParty')),\n ]\n try {\n const mergedTypeDefs = mergeTypeDefs(\n [faststoreSchema, ...customizations].filter(Boolean)\n )\n\n return buildASTSchema(mergedTypeDefs)\n } catch (e) {\n console.error(\n 'An error occurred while attempting to merge the GraphQL Schema Extensions. Check the custom typeDefs and resolvers located in the \"customizations/graphql/\" directory. The changes since the last successful schema merge will be ignored.'\n )\n\n throw e\n }\n }\n\n let pathToSave = path.resolve(rootPath, '@generated', schemaFileName)\n\n if (existsSync(path.resolve(rootPath, '.faststore'))) {\n pathToSave = path.resolve(\n rootPath,\n '.faststore',\n '@generated',\n schemaFileName\n )\n }\n\n const saveSchemaFile = saveFile(pathToSave)\n const finalSchema = printSchemaWithDirectives(await getMergedSchema())\n\n saveSchemaFile(finalSchema)\n}\n\nasync function getTypeDefsFromFolder(root: string, customPath: string) {\n const globby = await import('globby')\n const basePath = [root, 'src', 'graphql']\n\n const pathArray = Array.isArray(customPath) ? customPath : [customPath]\n\n return ((globby as any).default ?? globby)\n .globbySync(path.join(...[...basePath, ...pathArray]), {\n expandDirectories: {\n extensions: ['graphql'],\n },\n })\n .map((typeDef: string) =>\n parse(fs.readFileSync(typeDef, { encoding: 'utf-8' }))\n )\n}\n","import { Args, Command } from '@oclif/core'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { getBasePath } from '../utils/directory'\n\nexport default class Prepare extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Prepare)\n const basePath = getBasePath(args.path)\n\n const clientPublicDir = path.join(basePath, 'public/')\n\n const corePublicDir = path.resolve(\n fileURLToPath(\n path.dirname(import.meta.resolve('@faststore/core', import.meta.url))\n ),\n 'public'\n )\n\n if (!corePublicDir) {\n throw Error('Please install @faststore/core package')\n }\n\n copyFolder(corePublicDir, clientPublicDir)\n }\n}\n\nfunction copyFolder(sourceDir: string, targetDir: string) {\n // Ensure target directory exists\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true })\n }\n\n // Read all items in the source directory\n const files = fs.readdirSync(sourceDir)\n\n for (const file of files) {\n const sourcePath = path.join(sourceDir, file)\n const targetPath = path.join(targetDir, file)\n\n const stat = fs.statSync(sourcePath)\n\n if (stat.isFile()) {\n // Copy file\n fs.copyFileSync(sourcePath, targetPath)\n console.log(`Copied file: ${sourcePath} -> ${targetPath}`)\n } else if (stat.isDirectory()) {\n // Recursively copy subfolder\n copyFolder(sourcePath, targetPath)\n }\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport { spawn, spawnSync } from 'node:child_process'\nimport fsExtra from 'fs-extra'\nimport path from 'node:path'\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getBasePath, withBasePath } from '../utils/directory'\n\nconst { existsSync } = fsExtra\n\nexport default class Start extends Command {\n static args = {\n account: Args.string({\n description:\n 'The account for which the Discovery is running. Currently noop.',\n }),\n path: Args.string({\n description:\n 'The path where the FastStore being run is. Defaults to cwd.',\n }),\n port: Args.string({\n description: 'The port where FastStore should run. Defaults to 3000.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Start)\n const basePath = getBasePath(args.path)\n const port = args.port ?? 3000\n const { getRoot, tmpDir } = withBasePath(basePath)\n const packageManager = await getPreferredPackageManager()\n\n if (!existsSync(path.join(getRoot(), '.next'))) {\n spawnSync(`${packageManager} faststore build`, {\n shell: true,\n stdio: 'inherit',\n })\n }\n\n return spawn(\n packageManager,\n ['next', 'start', tmpDir, '-p', String(port)],\n {\n stdio: 'inherit',\n }\n )\n }\n}\n","import { Args, Command } from '@oclif/core'\nimport { spawn } from 'node:child_process'\nimport chokidar from 'chokidar'\n\nimport { getPreferredPackageManager } from '../utils/commands'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { generate } from '../utils/generate'\n\n/**\n * Taken from toolbelt\n *\n * https://github.com/vtex/toolbelt/pull/442\n */\nconst stabilityThreshold = process.platform === 'darwin' ? 100 : 200\n\nconst defaultPatterns = ['*/**', '**']\n\nconst defaultIgnored = [\n '.DS_Store',\n 'README.md',\n '.gitignore',\n 'package.json',\n 'node_modules/**',\n '**/node_modules/**',\n '.git/**',\n '.faststore/**',\n '**/.faststore/**',\n]\n\nconst testAbortController = new AbortController()\n\nasync function storeTest(tmpDir: string) {\n const packageManager = await getPreferredPackageManager()\n\n const testProcess = spawn(`${packageManager} run test:e2e`, {\n shell: true,\n cwd: tmpDir,\n signal: testAbortController.signal,\n stdio: 'inherit',\n })\n\n testProcess.on('close', () => {\n testAbortController.abort()\n })\n}\n\nexport default class Test extends Command {\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being tested is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Test)\n const basePath = getBasePath(args.path)\n const { getRoot, tmpDir } = withBasePath(basePath)\n\n const watcher = chokidar.watch([...defaultPatterns], {\n atomic: stabilityThreshold,\n awaitWriteFinish: {\n stabilityThreshold,\n },\n cwd: getRoot(),\n ignoreInitial: true,\n ignored: defaultIgnored,\n persistent: true,\n usePolling: process.platform === 'win32',\n })\n\n testAbortController.signal.addEventListener('abort', () => {\n watcher.close()\n })\n\n await generate({ setup: true, basePath })\n\n storeTest(tmpDir)\n\n return await new Promise((resolve, reject) => {\n watcher\n .on('error', () => {\n testAbortController.abort()\n reject()\n })\n .on('ready', resolve)\n })\n }\n}\n","import path from 'node:path'\nimport { Args, Command } from '@oclif/core'\nimport chalk from 'chalk'\nimport { logger } from '../utils/logger'\nimport genTsTypes from '../utils/generate-types'\n\nexport default class Generate extends Command {\n static hidden = true\n static flags = {}\n\n static args = {\n path: Args.string({\n name: 'path',\n required: true,\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args } = await this.parse(Generate)\n\n await genTsTypes(\n path.isAbsolute(args.path)\n ? args.path\n : path.resolve(process.env.PWD ?? process.cwd(), args.path)\n )\n\n logger.log(\n `${chalk.green(\n 'success'\n )} - GraphQL schema, types, and optimizations successfully generated 🎉`\n )\n }\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport chalk from 'chalk'\nimport fsExtra from 'fs-extra'\nimport graphql from 'graphql'\nimport path from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { saveFile } from '../utils/file'\nimport { logger } from '../utils/logger'\n\nconst { Kind, OperationTypeNode, parse: parseGraphql } = graphql\n\nconst persistedDocumentsName = 'persisted-documents.json'\nconst configFileName = 'discovery.config.default.js'\nconst cachedOperationsFileName = 'cached-operations.json'\n\nexport default class CacheGraphql extends Command {\n static flags = {\n queries: Flags.string({\n name: 'queries',\n description: 'The path to locate persisted-document file.',\n }),\n config: Flags.string({\n name: 'config',\n description: 'The path where the discovery.config is located',\n }),\n }\n\n static args = {\n store: Args.string({\n name: 'store',\n description:\n 'The path where the FastStore being built is or the persisted-document path. Defaults to cwd.',\n }),\n }\n\n async run() {\n const { args, flags } = await this.parse(CacheGraphql)\n\n const rootPath = getBasePath()\n const argPath =\n (args?.store && path.resolve(rootPath, args.store)) || rootPath\n const { tmpDir } = withBasePath(argPath)\n const configPath =\n this.getConfigFile(flags.config && path.resolve(argPath, flags.config)) ||\n this.getConfigFile(tmpDir) ||\n this.getConfigFile(argPath)\n const persistedDocumentsPath =\n this.getPersistedDocument(\n (flags?.queries && path.resolve(argPath, flags?.queries)) || argPath\n ) || this.getPersistedDocument(tmpDir)\n if (!configPath) {\n return this.errorFileNotFound(\n configFileName,\n `\\n ${tmpDir}\\n ${argPath}`\n )\n }\n\n if (!persistedDocumentsPath) {\n return this.errorFileNotFound(\n persistedDocumentsName,\n flags?.queries ?? argPath\n )\n }\n\n const cachedOperationsPath = path.join(\n path.dirname(persistedDocumentsPath),\n cachedOperationsFileName\n )\n const saveCachedOperationsFile = saveFile(cachedOperationsPath)\n\n if (fsExtra.pathExistsSync(tmpDir))\n logger.info(`${chalk.blue('[Info]')} - .faststore Path at: ${tmpDir}`)\n\n logger.info(`${chalk.blue('[Info]')} - Config file location: ${configPath}`)\n logger.info(\n `${chalk.blue('[Info]')} - Persisted documents at: ${persistedDocumentsPath}`\n )\n logger.info(\n `${chalk.blue('[Info]')} - Cached operations output: ${cachedOperationsPath}`\n )\n\n const { default: persistedDocuments } = await import(\n pathToFileURL(persistedDocumentsPath).href,\n { with: { type: 'json' } }\n )\n\n const cachedQueries = getQueries(persistedDocuments)\n\n saveCachedOperationsFile(\n `${JSON.stringify(cachedQueries ?? [], null, 2)}\\n`\n )\n\n logger.info(\n `${chalk.green('[Success]')} - GraphQL queries cached with success: 🎉\n Queries: ${cachedQueries.join(', ')}`\n )\n }\n\n getPersistedDocument(rootPath?: string) {\n return this.getFile(persistedDocumentsName, [\n '@generated',\n persistedDocumentsName,\n ])(rootPath)\n }\n\n getConfigFile(rootPath?: string) {\n return this.getFile(configFileName, [configFileName])(rootPath)\n }\n\n getFile(fileName: string, pathFromRoot?: string | Array<string>) {\n return (rootPath?: string) => {\n switch (true) {\n case !rootPath:\n return\n case rootPath?.endsWith(fileName) && fsExtra.existsSync(rootPath):\n return rootPath\n case fsExtra.existsSync(path.join(rootPath ?? '', fileName)):\n return path.join(rootPath, fileName)\n default:\n if (!pathFromRoot) return\n\n const filePath = path.join(\n rootPath,\n ...(Array.isArray(pathFromRoot) ? pathFromRoot : [pathFromRoot])\n )\n\n if (fsExtra.existsSync(filePath)) {\n return filePath\n }\n return\n }\n }\n }\n\n errorFileNotFound(fileName: string, rootDir: string) {\n logger.error(\n `${chalk.red('[Error]')} - Couldn't find ${fileName} at ${rootDir}`\n )\n\n process.exit(1)\n }\n}\n\nconst getQueries = (persistedDocuments: Record<string, string>) => {\n const operationNames: Array<string> = []\n for (const operation of Object.values(persistedDocuments)) {\n let currentNames: Array<string> = []\n const operationAST = parseGraphql(operation)\n const hasMutationDefinition = operationAST.definitions.some(\n (def) =>\n def.kind === Kind.OPERATION_DEFINITION &&\n def.operation === OperationTypeNode.MUTATION\n )\n\n if (hasMutationDefinition) continue\n\n operationAST.definitions.forEach((definition) => {\n if (\n definition.kind === Kind.OPERATION_DEFINITION &&\n definition.operation === OperationTypeNode.QUERY &&\n definition.name?.kind === Kind.NAME &&\n !!definition.name?.value\n ) {\n currentNames.push(definition.name.value)\n return\n }\n })\n\n if (currentNames.length) {\n operationNames.push(...currentNames)\n currentNames = []\n }\n }\n\n return operationNames\n}\n","import { Args, Command, Flags } from '@oclif/core'\nimport { FastStoreSDK } from '@vtex/faststore-sdk'\nimport chalk from 'chalk'\nimport dotenv from 'dotenv'\nimport fsExtra from 'fs-extra'\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\nimport { format } from 'prettier'\nimport { checkAndValidateLocalization } from '../utils/config'\nimport { getBasePath, withBasePath } from '../utils/directory'\nimport { saveFile } from '../utils/file'\nimport { logger } from '../utils/logger'\nimport { pathToFileURL } from 'node:url'\n\nconst configFileName = 'discovery.config.default.js'\n\nexport default class GenerateI18n extends Command {\n static hidden = true\n\n static flags = {\n config: Flags.string({\n name: 'config',\n description: 'The path where the discovery.config is located',\n }),\n }\n\n static args = {\n path: Args.string({\n name: 'path',\n description:\n 'The path where the FastStore being built is. Defaults to cwd.',\n }),\n }\n\n getConfigFile(rootPath?: string) {\n return this.getFile(configFileName, [configFileName])(rootPath)\n }\n\n getFile(fileName: string, pathFromRoot?: string | Array<string>) {\n return (rootPath?: string) => {\n switch (true) {\n case !rootPath:\n return\n case rootPath?.endsWith(fileName) && fsExtra.existsSync(rootPath):\n return rootPath\n case fsExtra.existsSync(path.join(rootPath ?? '', fileName)):\n return path.join(rootPath, fileName)\n default:\n if (!pathFromRoot) return\n\n const filePath = path.join(\n rootPath,\n ...(Array.isArray(pathFromRoot) ? pathFromRoot : [pathFromRoot])\n )\n\n if (fsExtra.existsSync(filePath)) {\n return filePath\n }\n return\n }\n }\n }\n\n errorFileNotFound(fileName: string, rootDir: string) {\n logger.error(\n `${chalk.red('[Error]')} - Couldn't find ${fileName} at ${rootDir}`\n )\n\n process.exit(1)\n }\n\n async run() {\n const { args, flags } = await this.parse(GenerateI18n)\n const rootPath = getBasePath()\n const argPath =\n (args?.path && path.resolve(rootPath, args.path)) || rootPath\n\n // Check if localization is enabled and contentSource is set to CP\n const localizationEnabled = await checkAndValidateLocalization(argPath)\n\n if (!localizationEnabled) {\n return\n }\n\n const vtexEnvPath = path.join(argPath, 'vtex.env')\n if (existsSync(vtexEnvPath)) {\n dotenv.config({ path: vtexEnvPath })\n }\n\n const { VTEX_ACCOUNT, FS_DISCOVERY_APP_KEY, FS_DISCOVERY_APP_TOKEN } =\n process.env\n const hasCredentials =\n VTEX_ACCOUNT && FS_DISCOVERY_APP_KEY && FS_DISCOVERY_APP_TOKEN\n\n if (!hasCredentials) {\n logger.error(`${chalk.red('[Error]')} - Missing VTEX credentials.\\n\n ${chalk.cyan('Required Action:')}\\n\n Check your FastStore WebOps Settings page - to work in production, it should contain the following variables: ${chalk.cyan('VTEX_ACCOUNT')}, ${chalk.cyan('FS_DISCOVERY_APP_KEY')}, ${chalk.cyan('FS_DISCOVERY_APP_TOKEN')}.\\n\n If running locally, please check your ${chalk.bold('vtex.env')} file, it should also contain those variables.\n `)\n\n process.exit(1)\n }\n\n const { tmpDir } = withBasePath(argPath)\n const configPath =\n this.getConfigFile(flags.config && path.resolve(argPath, flags.config)) ||\n this.getConfigFile(tmpDir) ||\n this.getConfigFile(argPath)\n\n if (!configPath) {\n return this.errorFileNotFound(\n configFileName,\n `\\n ${tmpDir}\\n ${argPath}`\n )\n }\n\n const saveConfigFile = saveFile(configPath)\n\n if (fsExtra.pathExistsSync(tmpDir))\n logger.info(`${chalk.blue('[Info]')} - .faststore Path at: ${tmpDir}`)\n\n logger.info(`${chalk.blue('[Info]')} - Config file location: ${configPath}`)\n const discoveryConfig = await import(pathToFileURL(configPath).href)\n\n const faststore = new FastStoreSDK({\n account: VTEX_ACCOUNT,\n appKey: FS_DISCOVERY_APP_KEY,\n appToken: FS_DISCOVERY_APP_TOKEN,\n })\n\n const settings = await faststore.locales()\n const currentConfig = discoveryConfig?.default ?? discoveryConfig\n\n saveConfigFile(\n await format(\n `module.exports = ${JSON.stringify(\n {\n ...currentConfig,\n localization: {\n ...(currentConfig?.localization ?? {}),\n ...settings,\n },\n },\n undefined,\n 2\n )}`,\n {\n parser: 'typescript',\n quoteProps: 'as-needed',\n }\n )\n )\n\n logger.info(\n `${chalk.green('success')} - i18n configuration successfully generated 🎉`\n )\n }\n}\n"],"mappings":"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","names":["chalk","spawnSync","existsSync","fsExtra","path","fileURLToPath","pathToFileURL","existsSync","path","pathToFileURL","path","existsSync","pathToFileURL","existsSync","chalk","existsSync","chalk","chalk","fsExtra","path","pathToFileURL","path","path","basePath","chalk","chalk","fsExtra","path","pathToFileURL","existsSync","fsExtra","pathToFileURL","path","copySync","existsSync","readdirSync","writeFileSync","fsExtra","chalk","path","pathToFileURL","copySync","moveSync","readdirSync","removeSync","fsExtra","chalk","path","fileURLToPath","spawnSync","existsSync","pathToFileURL","pkg","Args","Command","Flags","chalk","path","fsExtra","pathToFileURL","readFileSync","existsSync","writeFileSync","mkdirSync","fsExtra","pathToFileURL","path","chalk","path","pathToFileURL","Command","Flags","Args","fs","Args","Command","confirm","Args","Command","Flags","chalk","spawn","spawnSync","existsSync","readFileSync","path","fileURLToPath","path","existsSync","readFileSync","chalk","spawn","Command","Args","Flags","fileURLToPath","spawnSync","Args","Command","chalk","fs","path","fs","existsSync","path","Command","Args","chalk","Args","Command","fs","path","fileURLToPath","Command","Args","path","fileURLToPath","fs","Args","Command","spawn","spawnSync","fsExtra","path","existsSync","fsExtra","Command","Args","path","spawnSync","spawn","Args","Command","spawn","chokidar","stabilityThreshold","defaultPatterns","defaultIgnored","spawn","Command","Args","chokidar","path","Args","Command","chalk","Generate","Command","Args","path","chalk","Args","Command","Flags","chalk","fsExtra","path","pathToFileURL","Kind","configFileName","Command","Flags","Args","path","fsExtra","chalk","pathToFileURL","Args","Command","Flags","chalk","dotenv","fsExtra","existsSync","path","pathToFileURL","configFileName","Command","Flags","Args","fsExtra","path","chalk","existsSync","dotenv","Generate"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/cli",
|
|
3
|
-
"version": "4.2.0-dev.
|
|
3
|
+
"version": "4.2.0-dev.1",
|
|
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/
|
|
50
|
-
"@faststore/
|
|
49
|
+
"@faststore/core": "4.2.0-dev.1",
|
|
50
|
+
"@faststore/api": "4.2.0-dev.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/degit": "^2.8.6",
|