@xyd-js/documan 0.1.0-xyd.31 → 0.1.0-xyd.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ import { vitePlugins as xydContentVitePlugins } from "@xyd-js/content/vite";
19
19
  // ../xyd-host/package.json
20
20
  var package_default = {
21
21
  name: "@xyd-js/host",
22
- version: "0.1.0-xyd.0",
22
+ version: "0.1.0-xyd.2",
23
23
  type: "module",
24
24
  scripts: {},
25
25
  dependencies: {
@@ -458,14 +458,14 @@ async function preWorkspaceSetup(options = {}) {
458
458
  return true;
459
459
  }
460
460
  }
461
- const hostTemplate = process.env.XYD_DEV_MODE ? path.resolve(__dirname, "../../xyd-host") : path.resolve(__dirname, "../node_modules/@xyd-js/host");
461
+ const hostTemplate = process.env.XYD_DEV_MODE ? path.resolve(__dirname, "../../xyd-host") : path.resolve(__dirname, "../../host");
462
462
  const hostPath = getHostPath();
463
463
  await copyHostTemplate(hostTemplate, hostPath);
464
464
  let pluginDocsPath;
465
465
  if (process.env.XYD_DEV_MODE) {
466
466
  pluginDocsPath = path.resolve(__dirname, "../../xyd-plugin-docs");
467
467
  } else {
468
- pluginDocsPath = path.resolve(__dirname, "../node_modules/@xyd-js/plugin-docs");
468
+ pluginDocsPath = path.resolve(__dirname, "../../plugin-docs");
469
469
  }
470
470
  const pagesSourcePath = path.join(pluginDocsPath, "src/pages");
471
471
  const pagesTargetPath = path.join(hostPath, "plugins/xyd-plugin-docs/src/pages");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/build.ts","../src/utils.ts","../../xyd-host/package.json","../src/const.ts","../src/cli.ts","../src/dev.ts","../src/install.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\n\nimport { build as viteBuild, Plugin as VitePlugin } from 'vite';\nimport tsconfigPaths from \"vite-tsconfig-paths\";\n\nimport { appInit, calculateFolderChecksum, commonVitePlugins, getAppRoot, getBuildPath, getHostPath, postWorkspaceSetup, preWorkspaceSetup, storeChecksum } from \"./utils\";\n\n// Define the main function to run the builds\nexport async function build() {\n const skip = await preWorkspaceSetup({\n force: true\n })\n\n const { respPluginDocs, resolvedPlugins } = await appInit()\n const commonRunVitePlugins = commonVitePlugins(respPluginDocs, resolvedPlugins)\n const appRoot = getAppRoot();\n\n if (!skip) {\n await postWorkspaceSetup(respPluginDocs.settings)\n\n const newChecksum = calculateFolderChecksum(getHostPath());\n storeChecksum(newChecksum);\n }\n\n {\n setupInstallableEnvironmentV2() // TODO: fix in the future\n }\n\n try {\n // Build the client-side bundle\n await viteBuild({\n mode: \"production\",\n root: appRoot,\n plugins: [\n ...commonRunVitePlugins,\n\n tsconfigPaths(),\n ],\n optimizeDeps: {\n include: [\"react/jsx-runtime\"],\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n 'process.env': {}\n },\n resolve: {\n alias: {\n process: 'process/browser'\n }\n },\n });\n\n // Build the SSR bundle\n await viteBuild({\n mode: \"production\",\n root: appRoot,\n build: {\n ssr: true\n },\n plugins: [\n fixManifestPlugin(appRoot),\n ...commonRunVitePlugins,\n ],\n optimizeDeps: {\n include: [\"react/jsx-runtime\"],\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n 'process.env': {}\n },\n resolve: {\n alias: {\n process: 'process/browser'\n }\n },\n });\n } catch (error) {\n console.error('Build failed:', error); // TODO: better message\n }\n}\n\nfunction setupInstallableEnvironmentV2() {\n // TODO: probably we should have better mechanism - maybe bundle?\n\n const buildDir = getBuildPath()\n\n const packageJsonPath = path.join(buildDir, 'package.json');\n\n const packageJsonContent = {\n type: \"module\",\n scripts: {},\n dependencies: {\n // \"@react-router/node\": \"^7.5.0\",\n // \"isbot\": \"^5\"\n },\n devDependencies: {}\n };\n\n // Ensure the build directory exists\n if (!fs.existsSync(buildDir)) {\n fs.mkdirSync(buildDir, { recursive: true });\n }\n\n // Write the package.json file\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJsonContent, null, 2), 'utf8');\n}\n\n// TODO: not so good solution\n// fixManifestPlugin is needed for fixing server manifest for react-router cuz we use different `root` and output\nfunction fixManifestPlugin(\n appRoot: string\n): VitePlugin {\n const manifestPath = path.join(\n getBuildPath(),\n \"./server/.vite/manifest.json\"\n );\n\n return {\n name: \"xyd-fix-rr-manifest\",\n apply: 'build', // run after manifest is generated\n // 2) after bundle is written, compute prefix and strip it\n writeBundle(_, bundle) {\n const cwdDir = process.cwd();\n let prefix = path.relative(appRoot, cwdDir).replace(/\\\\/g, \"/\");\n if (prefix) prefix += \"/\";\n\n // escape for RegExp\n const esc = prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const stripRe = new RegExp(`^${esc}`);\n\n for (const fileName in bundle) {\n const asset = bundle[fileName];\n\n if (asset.type !== \"asset\") continue;\n\n // A) fix manifest.json (client or SSR) keys + entry.src\n if (fileName.endsWith(\"manifest.json\")) {\n const manifest = JSON.parse(asset.source.toString());\n const fixed: Record<string, any> = {};\n\n for (const key of Object.keys(manifest)) {\n const entry = manifest[key];\n const newKey = key.replace(stripRe, \"\");\n if (typeof entry.src === \"string\") {\n entry.src = entry.src.replace(stripRe, \"\");\n }\n fixed[newKey] = entry;\n }\n\n asset.source = JSON.stringify(fixed, null, 2);\n fs.writeFileSync(manifestPath, asset.source, 'utf8');\n\n }\n\n // B) fix any CSS asset metadata (originalFileNames)\n // TODO: FINISH if it will be needed\n // if (fileName.endsWith(\".css\") && Array.isArray(asset.originalFileNames)) {\n // asset.originalFileNames = asset.originalFileNames.map((orig) =>\n // orig.replace(stripRe, \"\")\n // );\n // }\n }\n\n },\n }\n}","import path from \"node:path\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { execSync, ExecSyncOptions } from \"node:child_process\";\nimport crypto from \"node:crypto\";\n\nimport { createServer, PluginOption as VitePluginOption, Plugin as VitePlugin } from \"vite\";\nimport { reactRouter } from \"@react-router/dev/vite\";\nimport { IconSet } from '@iconify/tools';\n\nimport { readSettings, pluginDocs, type PluginDocsOptions, PluginOutput } from \"@xyd-js/plugin-docs\";\nimport { vitePlugins as xydContentVitePlugins } from \"@xyd-js/content/vite\";\nimport { Integrations, Plugins, Settings } from \"@xyd-js/core\";\nimport type { IconLibrary } from \"@xyd-js/core\";\nimport type { Plugin, PluginConfig } from \"@xyd-js/plugins\";\nimport { type UniformPlugin } from \"@xyd-js/uniform\";\n\nimport hostPackageJson from \"../../xyd-host/package.json\"\n\nimport { BUILD_FOLDER_PATH, CACHE_FOLDER_PATH, HOST_FOLDER_PATH } from \"./const\";\nimport { CLI } from './cli';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst HOST_VERSION = hostPackageJson?.version\n\nexport async function appInit(options?: PluginDocsOptions) {\n const readPreloadSettings = await readSettings() // TODO: in the future better solution - currently we load settings twice (pluginDocs and here)\n if (!readPreloadSettings) {\n throw new Error(\"cannot preload settings\")\n }\n\n const preloadSettings = typeof readPreloadSettings === \"string\" ? JSON.parse(readPreloadSettings) : readPreloadSettings\n\n {\n if (!preloadSettings.integrations?.search) {\n preloadSettings.integrations = {\n ...(preloadSettings.integrations || {}),\n search: {\n orama: true\n }\n }\n }\n\n const plugins = integrationsToPlugins(preloadSettings.integrations)\n if (preloadSettings.plugins) {\n preloadSettings.plugins = [...plugins, ...preloadSettings.plugins]\n } else {\n preloadSettings.plugins = plugins\n }\n }\n\n let resolvedPlugins: PluginConfig[] = []\n {\n resolvedPlugins = await loadPlugins(preloadSettings) || []\n const userUniformVitePlugins: UniformPlugin<any>[] = []\n\n resolvedPlugins?.forEach(p => {\n if (p.uniform) {\n userUniformVitePlugins.push(...p.uniform)\n }\n })\n globalThis.__xydUserUniformVitePlugins = userUniformVitePlugins\n }\n\n const respPluginDocs = await pluginDocs(options)\n if (!respPluginDocs) {\n throw new Error(\"PluginDocs not found\")\n }\n if (!respPluginDocs.settings) {\n throw new Error(\"Settings not found in respPluginDocs\")\n }\n respPluginDocs.settings.plugins = [\n ...(respPluginDocs.settings?.plugins || []),\n ...(preloadSettings.plugins || [])\n ]\n\n globalThis.__xydBasePath = respPluginDocs.basePath\n globalThis.__xydSettings = respPluginDocs.settings\n globalThis.__xydPagePathMapping = respPluginDocs.pagePathMapping\n\n return {\n respPluginDocs,\n resolvedPlugins\n }\n}\n\nexport function virtualComponentsPlugin(): VitePluginOption {\n return {\n name: 'xyd-plugin-virtual-components',\n enforce: 'pre',\n config: () => {\n const componentsDist = path.resolve(getHostPath(), \"./node_modules/@xyd-js/components/dist\")\n\n return {\n resolve: {\n alias: {\n // TODO: type-safe virtual-components\n 'virtual-component:Search': path.resolve(componentsDist, \"system.js\")\n }\n }\n }\n },\n }\n}\n\nexport function virtualProvidersPlugin(\n settings: Settings\n): VitePluginOption {\n return {\n name: 'xyd-plugin-virtual-providers',\n enforce: 'pre',\n resolveId(id) {\n if (id === 'virtual:xyd-analytics-providers') {\n return id\n }\n },\n async load(id) {\n if (id === 'virtual:xyd-analytics-providers') {\n const providers = Object.keys(settings?.integrations?.analytics || {})\n const imports = providers.map(provider =>\n `import { default as ${provider}Provider } from '@pluganalytics/provider-${provider}'`\n ).join('\\n')\n\n const cases = providers.map(provider =>\n `case '${provider}': return ${provider}Provider`\n ).join('\\n')\n\n return `\n ${imports}\n\n export const loadProvider = async (provider) => {\n switch (provider) {\n ${cases}\n default:\n console.error(\\`Provider \\${provider} not found\\`)\n return null\n }\n }\n `\n }\n }\n }\n}\n\nexport function commonVitePlugins(\n respPluginDocs: PluginOutput,\n resolvedPlugins: PluginConfig[],\n) {\n const userVitePlugins = resolvedPlugins.map(p => p.vite).flat() || []\n\n return [\n ...(xydContentVitePlugins({\n toc: {\n maxDepth: respPluginDocs.settings.theme?.maxTocDepth || 2,\n },\n settings: respPluginDocs.settings,\n }) as VitePlugin[]),\n ...respPluginDocs.vitePlugins,\n\n reactRouter(),\n\n virtualComponentsPlugin(),\n virtualProvidersPlugin(respPluginDocs.settings),\n pluginIconSet(respPluginDocs.settings),\n\n ...userVitePlugins,\n ]\n}\n\nexport function pluginIconSet(settings: Settings): VitePluginOption {\n const DEFAULT_ICON_SET = \"lucide\";\n\n async function fetchIconSet(name: string, version?: string): Promise<{ icons: any, iconSet: IconSet }> {\n // If it's a URL, use it directly\n if (name.startsWith('http://') || name.startsWith('https://')) {\n try {\n const iconsResp = await fetch(name);\n const iconsData = await iconsResp.json();\n const iconSet = new IconSet(iconsData);\n return { icons: iconsData, iconSet };\n } catch (error) {\n console.warn(`Failed to fetch from URL ${name}:`, error);\n }\n }\n\n // Try to read from file system\n const tryReadFile = (filePath: string) => {\n try {\n if (!fs.existsSync(filePath)) {\n console.warn(`File does not exist: ${filePath}`);\n return null;\n }\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n try {\n const iconsData = JSON.parse(fileContent);\n const iconSet = new IconSet(iconsData);\n return { icons: iconsData, iconSet };\n } catch (parseError) {\n console.warn(`Invalid JSON in file ${filePath}:`, parseError);\n return null;\n }\n } catch (error) {\n console.warn(`Failed to read file ${filePath}:`, error);\n return null;\n }\n };\n\n\n if (path.isAbsolute(name)) {\n const result = tryReadFile(name);\n if (result) return result;\n }\n\n if (name.startsWith(\".\")) {\n const fullPath = path.join(process.cwd(), name);\n const result = tryReadFile(fullPath);\n if (result) return result;\n }\n\n // Fallback to CDN\n const cdnUrl = version\n ? `https://cdn.jsdelivr.net/npm/@iconify-json/${name}@${version}/icons.json`\n : `https://cdn.jsdelivr.net/npm/@iconify-json/${name}/icons.json`;\n\n try {\n const iconsResp = await fetch(cdnUrl);\n const iconsData = await iconsResp.json();\n const iconSet = new IconSet(iconsData);\n return { icons: iconsData, iconSet };\n } catch (error) {\n throw new Error(`Failed to load icon set from any source (file or CDN): ${name}`);\n }\n }\n\n async function processIconSet(iconSet: IconSet, icons: any, noPrefix?: boolean): Promise<Map<string, { svg: string }>> {\n const resp = new Map<string, { svg: string }>();\n\n for (const icon of Object.keys(icons.icons)) {\n const svg = iconSet.toSVG(icon);\n if (!svg) continue;\n\n let prefix = noPrefix ? undefined : iconSet.prefix;\n // If prefix is undefined, it means this is the default set and should not have a prefix\n const iconName = prefix ? `${prefix}:${icon}` : icon;\n resp.set(iconName, { svg: svg.toString() });\n }\n\n return resp;\n }\n\n async function addIconsToMap(resp: Map<string, { svg: string }>, name: string, version?: string, noPrefix?: boolean): Promise<void> {\n const { icons, iconSet } = await fetchIconSet(name, version);\n const newIcons = await processIconSet(iconSet, icons, noPrefix);\n newIcons.forEach((value, key) => resp.set(key, value));\n }\n\n async function processIconLibrary(library: string | IconLibrary | (string | IconLibrary)[]): Promise<Map<string, { svg: string }>> {\n const resp = new Map<string, { svg: string }>();\n\n if (typeof library === 'string') {\n // Single icon set as default\n await addIconsToMap(resp, library);\n } else if (Array.isArray(library)) {\n // Multiple icon sets\n for (const item of library) {\n if (typeof item === 'string') {\n // String items are treated as default set\n await addIconsToMap(resp, item);\n } else {\n // IconLibrary configuration\n const { name, version, default: isDefault, noprefix } = item;\n const noPrefix = isDefault || noprefix;\n await addIconsToMap(resp, name, version, noPrefix);\n }\n }\n } else {\n // Single IconLibrary configuration\n const { name, version, default: isDefault, noprefix } = library;\n const prefix = (isDefault || noprefix) ? undefined : name;\n await addIconsToMap(resp, name, version, prefix);\n }\n\n return resp;\n }\n\n return {\n name: 'xyd-plugin-icon-set',\n enforce: 'pre',\n resolveId(id) {\n if (id === 'virtual:xyd-icon-set') {\n return id;\n }\n },\n async load(id) {\n if (id === 'virtual:xyd-icon-set') {\n let resp: Map<string, { svg: string }>;\n\n // Handle theme icons configuration\n if (settings.theme?.icons?.library) {\n resp = await processIconLibrary(settings.theme.icons.library);\n } else {\n resp = await processIconLibrary([\n {\n name: DEFAULT_ICON_SET,\n default: true,\n }\n ]);\n }\n\n return `\n export const iconSet = ${JSON.stringify(Object.fromEntries(resp))};\n `;\n }\n }\n } as VitePlugin\n}\n\nexport function getHostPath() {\n if (process.env.XYD_DEV_MODE) {\n if (process.env.XYD_HOST) {\n return path.resolve(process.env.XYD_HOST)\n }\n\n\n return path.join(__dirname, \"../../../\", HOST_FOLDER_PATH)\n }\n\n return path.join(process.cwd(), HOST_FOLDER_PATH)\n}\n\nexport function getAppRoot() {\n return getHostPath()\n}\n\n// TODO: in the future get from settings\nexport function getPublicPath() {\n return path.join(process.cwd(), 'public')\n}\n\nexport function getBuildPath() {\n return path.join(\n process.cwd(),\n BUILD_FOLDER_PATH\n );\n}\n\nexport function getDocsPluginBasePath() {\n return path.join(getHostPath(), \"./plugins/xyd-plugin-docs\")\n}\n\nasync function loadPlugins(\n settings: Settings,\n) {\n const resolvedPlugins: PluginConfig[] = []\n\n for (const plugin of settings.plugins || []) {\n let pluginName: string\n let pluginArgs: any[] = []\n\n if (typeof plugin === \"string\") {\n pluginName = plugin\n pluginArgs = []\n } else if (Array.isArray(plugin)) {\n pluginName = plugin[0]\n pluginArgs = plugin.slice(1)\n } else {\n console.error(`Currently only string and array plugins are supported, got: ${plugin}`)\n return []\n }\n\n let mod: any // TODO: fix type\n try {\n mod = await import(pluginName)\n } catch (e) {\n pluginName = path.join(process.cwd(), pluginName)\n\n // TODO: find better solution? use this every time?\n const pluginPreview = await createServer({\n optimizeDeps: {\n include: [],\n },\n });\n mod = await pluginPreview.ssrLoadModule(pluginName);\n }\n\n if (!mod.default) {\n console.error(`Plugin ${plugin} has no default export`)\n continue\n }\n\n let pluginInstance = mod.default(...pluginArgs) as (PluginConfig | Plugin)\n if (typeof pluginInstance === \"function\") {\n const plug = pluginInstance(settings)\n\n resolvedPlugins.push(plug)\n\n continue\n }\n\n resolvedPlugins.push(pluginInstance);\n\n }\n\n return resolvedPlugins\n}\n\nfunction integrationsToPlugins(integrations: Integrations) {\n const plugins: Plugins = []\n let foundSearchIntegation = 0\n\n if (integrations?.search?.orama) {\n if (typeof integrations.search.orama === \"boolean\") {\n plugins.push(\"@xyd-js/plugin-orama\")\n } else {\n plugins.push([\"@xyd-js/plugin-orama\", integrations.search.orama])\n }\n foundSearchIntegation++\n }\n\n if (integrations?.search?.algolia) {\n plugins.push([\"@xyd-js/plugin-algolia\", integrations.search.algolia])\n foundSearchIntegation++\n }\n\n if (foundSearchIntegation > 1) {\n throw new Error(\"Only one search integration is allowed\")\n }\n\n return plugins\n}\n\nexport async function preWorkspaceSetup(options: {\n force?: boolean\n} = {}) {\n await ensureFoldersExist()\n\n // Check if we can skip the setup\n if (!options.force) {\n if (await shouldSkipHostSetup()) {\n return true\n }\n }\n\n const hostTemplate = process.env.XYD_DEV_MODE\n ? path.resolve(__dirname, \"../../xyd-host\")\n : path.resolve(__dirname, \"../node_modules/@xyd-js/host\")\n // : await downloadPackage(\"@xyd-js/host\", HOST_VERSION)\n\n // if (hostTemplate instanceof Error) {\n // throw hostTemplate\n // }\n\n const hostPath = getHostPath()\n\n await copyHostTemplate(hostTemplate, hostPath)\n\n // Calculate and store new checksum after setup\n\n // Handle plugin-docs pages\n let pluginDocsPath: string | Error\n if (process.env.XYD_DEV_MODE) {\n pluginDocsPath = path.resolve(__dirname, \"../../xyd-plugin-docs\")\n } else {\n pluginDocsPath = path.resolve(__dirname, \"../node_modules/@xyd-js/plugin-docs\")\n\n // // Get plugin-docs version from host's package.json\n // const hostPackageJsonPath = path.join(hostPath, 'package.json')\n // if (fs.existsSync(hostPackageJsonPath)) {\n // const hostPackageJson = JSON.parse(fs.readFileSync(hostPackageJsonPath, 'utf-8'))\n // const pluginDocsVersion = hostPackageJson.dependencies?.['@xyd-js/plugin-docs']\n\n // if (pluginDocsVersion) {\n // pluginDocsPath = path.resolve(__dirname, \"../node_modules/@xyd-js/plugin-docs\")\n // // pluginDocsPath = await downloadPackage('@xyd-js/plugin-docs', pluginDocsVersion)\n // } else {\n // console.warn('No @xyd-js/plugin-docs dependency found in host package.json')\n // return\n // }\n // } else {\n // console.warn('No host package.json found')\n // return\n // }\n }\n\n // if (pluginDocsPath instanceof Error) {\n // throw pluginDocsPath\n // }\n\n const pagesSourcePath = path.join(pluginDocsPath, \"src/pages\")\n const pagesTargetPath = path.join(hostPath, \"plugins/xyd-plugin-docs/src/pages\")\n\n if (fs.existsSync(pagesSourcePath)) {\n await copyHostTemplate(pagesSourcePath, pagesTargetPath)\n } else {\n console.warn(`Pages source path does not exist: ${pagesSourcePath}`)\n }\n}\n\nexport function calculateFolderChecksum(folderPath: string): string {\n const hash = crypto.createHash('sha256');\n const ignorePatterns = [...getGitignorePatterns(folderPath), '.xydchecksum'];\n\n function processFile(filePath: string) {\n const relativePath = path.relative(folderPath, filePath);\n const content = fs.readFileSync(filePath);\n hash.update(relativePath);\n hash.update(content);\n }\n\n function processDirectory(dirPath: string) {\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\n // Sort entries to ensure consistent order\n entries.sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const sourceEntry = path.join(dirPath, entry.name)\n\n // Skip if the entry matches any ignore pattern\n if (shouldIgnoreEntry(entry.name, ignorePatterns)) {\n continue\n }\n\n // Skip .git directory\n if (entry.name === '.git') {\n continue\n }\n\n if (entry.isDirectory()) {\n processDirectory(sourceEntry)\n } else {\n processFile(sourceEntry)\n }\n }\n }\n\n processDirectory(folderPath);\n return hash.digest('hex');\n}\n\nfunction getGitignorePatterns(folderPath: string): string[] {\n const gitignorePath = path.join(folderPath, '.gitignore')\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8')\n return gitignoreContent\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line && !line.startsWith('#'))\n }\n return []\n}\n\nfunction shouldIgnoreEntry(entryName: string, ignorePatterns: string[]): boolean {\n return ignorePatterns.some(pattern => {\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'))\n return regex.test(entryName)\n })\n}\n\n// async function downloadPackage(packageName: string, version: string): Promise<string | Error> {\n// const tempDir = path.join(process.cwd(), CACHE_FOLDER_PATH, 'temp')\n// const packageDir = path.join(tempDir, packageName.replace('/', '-'))\n\n// // Clean up existing temp directory if it exists\n// if (fs.existsSync(packageDir)) {\n// fs.rmSync(packageDir, { recursive: true, force: true })\n// }\n\n// // Create temp directory\n// fs.mkdirSync(packageDir, { recursive: true })\n\n// try {\n// nodeDownloadPackage(packageName, version, tempDir, packageDir)\n\n// return packageDir\n// } catch (error) {\n// console.error(`Failed to download ${packageName}@${version}:`, error)\n// return new Error(`Failed to download ${packageName}@${version}`)\n// }\n// }\n\nasync function copyHostTemplate(sourcePath: string, targetPath: string) {\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Host template source path does not exist: ${sourcePath}`)\n }\n\n // Clean target directory if it exists\n if (fs.existsSync(targetPath)) {\n fs.rmSync(targetPath, { recursive: true, force: true })\n }\n\n // Create target directory\n fs.mkdirSync(targetPath, { recursive: true })\n\n const ignorePatterns = getGitignorePatterns(sourcePath)\n\n // Copy all files and directories recursively\n const entries = fs.readdirSync(sourcePath, { withFileTypes: true })\n\n for (const entry of entries) {\n const sourceEntry = path.join(sourcePath, entry.name)\n const targetEntry = path.join(targetPath, entry.name)\n\n // Skip if the entry matches any ignore pattern\n if (shouldIgnoreEntry(entry.name, ignorePatterns)) {\n continue\n }\n\n // Skip .git directory\n if (entry.name === '.git') {\n continue\n }\n\n if (entry.isDirectory()) {\n await copyHostTemplate(sourceEntry, targetEntry)\n } else {\n fs.copyFileSync(sourceEntry, targetEntry)\n\n // Handle package.json modifications for local development\n if (entry.name === 'package.json' && process.env.XYD_DEV_MODE) {\n const packageJsonPath = targetEntry\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n packageJson.name = \"xyd-host-dev\"\n\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n }\n }\n}\n\nasync function ensureFoldersExist() {\n const folders = [CACHE_FOLDER_PATH]\n for (const folder of folders) {\n const fullPath = path.resolve(process.cwd(), folder)\n if (!fs.existsSync(fullPath)) {\n fs.mkdirSync(fullPath, { recursive: true })\n }\n }\n}\n\n// TODO: in the future buil-in xyd plugins should be installable via code\nexport async function postWorkspaceSetup(settings: Settings) {\n const spinner = new CLI('dots');\n\n try {\n spinner.startSpinner('Installing xyd framework...');\n\n const hostPath = getHostPath()\n const packageJsonPath = path.join(hostPath, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n console.warn('No package.json found in host path')\n return\n }\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n\n // Initialize dependencies if they don't exist\n if (!packageJson.dependencies) {\n packageJson.dependencies = {}\n }\n for (const plugin of settings.plugins || []) {\n let pluginName: string\n\n if (typeof plugin === \"string\") {\n pluginName = plugin\n } else if (Array.isArray(plugin)) {\n pluginName = plugin[0]\n } else {\n continue\n }\n\n if (pluginName.startsWith(\"@xyd-js/\")) {\n continue // TODO: currently we don't install built-in xyd plugins - they are defined in host\n }\n\n // Check if it's a valid npm package name\n // Valid formats: name or @scope/name\n // Invalid: ./path/to/file.js or /absolute/path\n const isValidNpmPackage = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(pluginName)\n\n if (isValidNpmPackage) {\n // Search for matching dependencies in host's package.json\n const hostPackageJsonPath = path.join(hostPath, 'package.json')\n if (fs.existsSync(hostPackageJsonPath)) {\n const hostPackageJson = JSON.parse(fs.readFileSync(hostPackageJsonPath, 'utf-8'))\n const deps = hostPackageJson.dependencies || {}\n\n // Find matching dependency\n const matchingDep = Object.entries(deps).find(([depName]) => {\n return depName === pluginName\n })\n\n if (matchingDep) {\n packageJson.dependencies[pluginName] = matchingDep[1]\n } else {\n console.warn(`no matching dependency found for: ${pluginName} in: ${hostPackageJsonPath}`)\n }\n } else {\n console.warn(`no host package.json found in: ${hostPath}`)\n }\n } else if (!pluginName.startsWith('.') && !pluginName.startsWith('/')) {\n // Only warn if it's not a local file path (doesn't start with . or /)\n console.warn(`invalid plugin name: ${pluginName}`)\n }\n }\n\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))\n\n await nodeInstallPackages(hostPath)\n\n spinner.stopSpinner();\n spinner.log('✔ Local xyd framework installed successfully');\n } catch(error) {\n spinner.stopSpinner();\n spinner.error('❌ Failed to install xyd framework');\n throw error;\n }\n}\n\nfunction nodeInstallPackages(hostPath: string) {\n const cmd = process.env.XYD_DEV_MODE ? 'pnpm i' : 'npm i'\n const execOptions: ExecSyncOptions = {\n cwd: hostPath,\n env: {\n ...process.env,\n NODE_ENV: \"\" // since 'production' does not install it well\n }\n }\n if (process.env.XYD_VERBOSE) {\n execOptions.stdio = 'inherit'\n }\n execSync(cmd, execOptions)\n}\n\n// function nodeDownloadPackage(\n// packageName: string,\n// version: string,\n// extractDir: string,\n// finalOutputDir: string,\n// ) {\n// const cmd = process.env.XYD_DEV_MODE\n// ? `pnpm pack ${packageName}@${version} --pack-destination ${extractDir}`\n// : `npm pack ${packageName}@${version} --pack-destination ${extractDir}`\n\n// const execOptions: ExecSyncOptions = {}\n// if (process.env.XYD_VERBOSE) {\n// execOptions.stdio = 'inherit'\n// }\n// execSync(cmd, execOptions)\n\n// const tarball = fs.readdirSync(extractDir).find(file => file.endsWith('.tgz'))\n// if (!tarball) {\n// throw new Error(`No tarball found for ${packageName}@${version}`)\n// }\n// execSync(`tar -xzf ${path.join(extractDir, tarball)} -C ${extractDir}`, execOptions)\n\n// // Move package contents to outputDir\n// const extractedDir = path.join(extractDir, 'package')\n// if (fs.existsSync(extractedDir)) {\n// fs.renameSync(extractedDir, finalOutputDir)\n// }\n\n// // Clean up tarball\n// fs.unlinkSync(path.join(extractDir, tarball))\n// }\n\nasync function shouldSkipHostSetup(): Promise<boolean> {\n const hostPath = getHostPath();\n\n // If host folder doesn't exist, we need to set it up\n if (!fs.existsSync(hostPath)) {\n return false;\n }\n\n const currentChecksum = calculateFolderChecksum(hostPath);\n const storedChecksum = getStoredChecksum();\n\n // If no stored checksum or checksums don't match, we need to set up\n if (!storedChecksum || storedChecksum !== currentChecksum) {\n return false;\n }\n\n return true;\n}\n\nfunction getStoredChecksum(): string | null {\n const checksumPath = path.join(getHostPath(), '.xydchecksum');\n if (!fs.existsSync(checksumPath)) {\n return null;\n }\n try {\n return fs.readFileSync(checksumPath, 'utf-8').trim();\n } catch (error) {\n console.error('Error reading checksum file:', error);\n return null;\n }\n}\n\nexport function storeChecksum(checksum: string): void {\n const checksumPath = path.join(getHostPath(), '.xydchecksum');\n try {\n fs.writeFileSync(checksumPath, checksum);\n } catch (error) {\n console.error('Error writing checksum file:', error);\n }\n}\n\n","{\n \"name\": \"@xyd-js/host\",\n \"version\": \"0.1.0-xyd.0\",\n \"type\": \"module\",\n \"scripts\": {},\n \"dependencies\": {\n \"@xyd-js/core\": \"workspace:*\",\n \"@xyd-js/components\": \"workspace:*\",\n \"@xyd-js/framework\": \"workspace:*\",\n \"@xyd-js/composer\": \"workspace:*\",\n \"@xyd-js/themes\": \"workspace:*\",\n \"@xyd-js/atlas\": \"workspace:*\",\n \"@xyd-js/theme-poetry\": \"workspace:*\",\n \"@xyd-js/theme-cosmo\": \"workspace:*\",\n \"@xyd-js/theme-opener\": \"workspace:*\",\n \"@xyd-js/theme-picasso\": \"workspace:*\",\n \"@xyd-js/plugin-orama\": \"workspace:*\",\n \"@xyd-js/plugin-algolia\": \"workspace:*\",\n \"@react-router/dev\": \"^7.5.0\",\n \"@react-router/node\": \"^7.5.0\",\n \"@react-router/serve\": \"^7.5.0\",\n \"isbot\": \"^5\",\n \"react-router\": \"^7.5.0\"\n },\n \"devDependencies\": {\n \"autoprefixer\": \"^10.4.20\",\n \"postcss\": \"^8.4.47\",\n \"semver\": \"^7.6.3\",\n \"vite\": \"^6.1.0\",\n \"vite-tsconfig-paths\": \"^5.1.4\"\n }\n}","export const HOST_FOLDER_PATH = \".xyd/host\"\nexport const CACHE_FOLDER_PATH = \".xyd/.cache\"\nexport const BUILD_FOLDER_PATH = \".xyd/build\"\n\nexport const SUPPORTED_SETTINGS_FILES = [\n 'docs.json',\n 'docs.ts',\n 'docs.tsx'\n]\n\nexport const SUPPORTED_WATCH_FILES = [\n '.md',\n '.mdx',\n ...SUPPORTED_SETTINGS_FILES\n]","import readline from 'node:readline';\nimport cliSpinners from 'cli-spinners';\n\ninterface Spinner {\n frames: string[];\n interval: number;\n}\n\ntype SpinnerName = keyof typeof cliSpinners;\n\nexport class CLI {\n private spinner: Spinner;\n private spinnerInterval: NodeJS.Timeout | null = null;\n private currentFrame = 0;\n private currentMessage = '';\n private isSpinning = false;\n\n constructor(spinnerType: SpinnerName = 'dots') {\n this.spinner = cliSpinners[spinnerType] as Spinner;\n }\n\n public startSpinner(message: string) {\n if (this.isSpinning) {\n this.stopSpinner();\n }\n\n this.currentMessage = message;\n this.isSpinning = true;\n this.currentFrame = 0;\n\n // Write initial message\n this.write(`${this.spinner.frames[0]} ${this.currentMessage}`);\n\n this.spinnerInterval = setInterval(() => {\n const frame = this.spinner.frames[this.currentFrame];\n this.write(`${frame} ${this.currentMessage}`);\n this.currentFrame = (this.currentFrame + 1) % this.spinner.frames.length;\n }, this.spinner.interval);\n }\n\n public stopSpinner() {\n if (this.spinnerInterval) {\n clearInterval(this.spinnerInterval);\n this.spinnerInterval = null;\n }\n this.isSpinning = false;\n this.clearLine();\n }\n\n private clearLine() {\n readline.clearLine(process.stdout, 0);\n readline.cursorTo(process.stdout, 0);\n }\n\n private write(message: string) {\n this.clearLine();\n process.stdout.write(message);\n }\n\n public log(message: string) {\n if (this.isSpinning) {\n this.stopSpinner();\n }\n console.log(message);\n }\n\n public error(message: string) {\n if (this.isSpinning) {\n this.stopSpinner();\n }\n console.error(message);\n }\n\n private updateMessage(message: string) {\n this.currentMessage = message;\n }\n\n}\n\n// Export a singleton instance\nexport const cli = new CLI(); ","import path from \"node:path\";\nimport fs from \"node:fs\";\n\nimport { createServer, searchForWorkspaceRoot, ViteDevServer } from \"vite\";\n\nimport { API, APIFile, } from \"@xyd-js/core\";\n\nimport { appInit, calculateFolderChecksum, commonVitePlugins, getAppRoot, getDocsPluginBasePath, getHostPath, getPublicPath, postWorkspaceSetup, preWorkspaceSetup, storeChecksum } from \"./utils\";\nimport { CACHE_FOLDER_PATH, SUPPORTED_WATCH_FILES } from \"./const\";\nimport {CLI} from \"./cli\";\n\n// TODO: !!! BETTER TIMER / DEBUG API !!!\nif (!process.env.ENABLE_TIMERS) {\n ['time', 'timeLog', 'timeEnd'].forEach(method => {\n console[method] = () => {\n };\n });\n}\n\ninterface DevOptions {\n port?: number\n}\nexport async function dev(options?: DevOptions) {\n const spinner = new CLI('dots');\n spinner.startSpinner('Preparing local xyd instance... \\n');\n\n const skip = await preWorkspaceSetup()\n\n const { respPluginDocs, resolvedPlugins } = await appInit()\n const allowCwd = searchForWorkspaceRoot(process.cwd())\n const appRoot = getAppRoot()\n const commonRunVitePlugins = commonVitePlugins(respPluginDocs, resolvedPlugins)\n spinner.stopSpinner();\n\n if (!skip) {\n await postWorkspaceSetup(respPluginDocs.settings)\n\n const newChecksum = calculateFolderChecksum(getHostPath());\n storeChecksum(newChecksum);\n }\n\n // ⚠️ \n spinner.log('✔ Local xyd instance is ready');\n\n let server: ViteDevServer | null = null\n\n const port = options?.port ?? parseInt(process.env.XYD_PORT ?? \"5175\")\n\n const preview = await createServer({\n root: appRoot,\n publicDir: '/public',\n server: {\n allowedHosts: [],\n port: port,\n fs: {\n allow: [\n allowCwd,\n appRoot,\n ]\n }\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),\n 'process.env': {}\n },\n resolve: {\n alias: {\n process: 'process/browser'\n }\n },\n build: {\n rollupOptions: {\n external: []\n },\n },\n ssr: {\n external: [],\n },\n optimizeDeps: {\n include: [\"react/jsx-runtime\"]\n },\n plugins: [\n ...commonRunVitePlugins,\n\n {\n name: 'xyd-configureServer',\n configureServer(s) {\n server = s\n }\n },\n ],\n });\n\n // Set up manual file watcher for markdown files TODO: better way? + HMR only for specific components instead or reload a pag\n const watcher = fs.watch(allowCwd, { recursive: true }, async (eventType, filename) => {\n if (!filename) {\n console.log(\"[xyd:dev] Received empty filename\");\n return;\n }\n\n const filePath = path.join(allowCwd, filename);\n if (filePath.includes(CACHE_FOLDER_PATH)) {\n return\n }\n\n let apiPaths: { [path: string]: boolean } = {}\n if (respPluginDocs?.settings?.api) {\n apiPaths = resolveApiFilePaths(process.cwd(), respPluginDocs.settings.api)\n }\n\n const apiChanged = !!apiPaths[filePath]\n\n if (filePath.includes(getPublicPath())) {\n const relativePath = path.relative(allowCwd, filePath);\n const urlPath = '/' + relativePath.replace(/\\\\/g, '/');\n\n preview.ws.send({\n type: 'full-reload',\n path: urlPath,\n });\n return\n }\n\n if (SUPPORTED_WATCH_FILES.some(ext => filePath.endsWith(ext)) || apiChanged) {\n const relativePath = path.relative(allowCwd, filePath);\n const urlPath = '/' + relativePath.replace(/\\\\/g, '/');\n\n // TODO: better way to handle that - we need this cuz otherwise its inifiite reloads\n if (respPluginDocs?.settings.engine?.uniform?.store) {\n await appInit({\n disableFSWrite: true,\n })\n } else {\n await appInit() // TODO: !!! IN THE FUTURE MORE EFFICIENT WAY !!!\n }\n\n // TODO: !!! BETTER HMR !!!\n\n if (server) {\n const docsPluginBasePath = getDocsPluginBasePath()\n\n const layoutPath = path.join(docsPluginBasePath, \"./src/pages/layout.tsx\")\n const layoutModule = server.moduleGraph.getModuleById(layoutPath);\n\n const pagePath = path.join(docsPluginBasePath, \"./src/pages/page.tsx\")\n const pageModule = server.moduleGraph.getModuleById(pagePath);\n\n if (layoutModule && pageModule) {\n server.moduleGraph.invalidateModule(layoutModule);\n server.moduleGraph.invalidateModule(pageModule);\n try {\n const hostPath = getHostPath()\n const hostReactRouterConfig = path.join(hostPath, \"react-router.config.ts\")\n\n await fs.promises.utimes(hostReactRouterConfig, new Date(), new Date());\n } catch (e) {\n console.error(\"config update error\")\n console.error(e)\n }\n\n server.ws.send({ type: 'full-reload' });\n\n return\n }\n }\n\n preview.ws.send({\n type: 'full-reload',\n path: urlPath,\n });\n }\n });\n\n // Log any watcher errors\n watcher.on('error', (error) => {\n console.error(\"[xyd:dev] File watcher error:\", error);\n });\n\n await preview.listen(port);\n\n preview.printUrls();\n preview.bindCLIShortcuts({ print: true });\n\n // Clean up watcher when server is closed\n preview.httpServer?.once('close', () => {\n watcher.close();\n });\n}\n\n\n/**\n * @todo: !!! in the future it should be created at different level !!!\n * \n * Walks api.*, \n * resolves all referenced files under `basePath`,\n * and returns a set of absolute paths.\n */\nexport function resolveApiFilePaths(\n basePath: string,\n api: API\n): Record<string, true> {\n const result: Record<string, true> = {}\n\n const apis = [api.openapi, api.graphql, api.sources].filter((s): s is APIFile => s !== undefined)\n\n apis.forEach(section => {\n flattenApiFile(section).forEach(p => {\n const apiAbsPath = path.resolve(basePath, p)\n result[apiAbsPath] = true\n })\n })\n\n return result\n}\n\n\n/**\n * Given any APIFile-ish value, returns an array of the raw source-paths.\n */\nfunction flattenApiFile(file?: APIFile): string[] {\n if (!file) return []\n\n // single string\n if (typeof file === 'string') {\n return [file]\n }\n\n // array of anything\n if (Array.isArray(file)) {\n return file.flatMap(flattenApiFile)\n }\n\n // object: either a nested config, or a map of name→file\n if (typeof file === 'object') {\n const obj = file as Record<string, any>\n\n // explicit nested entry\n if (typeof obj.source === 'string') {\n return [obj.source]\n }\n\n // fallback: treat as { key: APIFile } map\n return Object.values(obj).flatMap(flattenApiFile)\n }\n\n // everything else (e.g. numbers, booleans) gets dropped\n return []\n}","import fs from 'node:fs';\n\nimport { preWorkspaceSetup, postWorkspaceSetup, getHostPath } from './utils';\nimport { readSettings } from '@xyd-js/plugin-docs';\n\n\nexport async function install() {\n const settings = await readSettings() // TODO: in the future better solution - currently we load settings twice (pluginDocs and here)\n if (!settings) {\n throw new Error(\"cannot preload settings\")\n }\n if (typeof settings === \"string\") {\n throw new Error(\"install does not support string settings\")\n }\n\n // Clear the host folder if it exists\n const hostPath = getHostPath();\n if (fs.existsSync(hostPath)) {\n fs.rmSync(hostPath, { recursive: true, force: true });\n }\n\n // Run pre-workspace setup\n await preWorkspaceSetup({\n force: true,\n });\n\n // Run post-workspace setup with empty settings\n // The actual settings will be loaded during the build/dev process\n await postWorkspaceSetup(settings);\n}"],"mappings":"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","names":["path","fs","path","fs","path","fs","createServer","createServer","fs","path","fs","readSettings","fs"]}
1
+ {"version":3,"sources":["../src/build.ts","../src/utils.ts","../../xyd-host/package.json","../src/const.ts","../src/cli.ts","../src/dev.ts","../src/install.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\n\nimport { build as viteBuild, Plugin as VitePlugin } from 'vite';\nimport tsconfigPaths from \"vite-tsconfig-paths\";\n\nimport { appInit, calculateFolderChecksum, commonVitePlugins, getAppRoot, getBuildPath, getHostPath, postWorkspaceSetup, preWorkspaceSetup, storeChecksum } from \"./utils\";\n\n// Define the main function to run the builds\nexport async function build() {\n const skip = await preWorkspaceSetup({\n force: true\n })\n\n const { respPluginDocs, resolvedPlugins } = await appInit()\n const commonRunVitePlugins = commonVitePlugins(respPluginDocs, resolvedPlugins)\n const appRoot = getAppRoot();\n\n if (!skip) {\n await postWorkspaceSetup(respPluginDocs.settings)\n\n const newChecksum = calculateFolderChecksum(getHostPath());\n storeChecksum(newChecksum);\n }\n\n {\n setupInstallableEnvironmentV2() // TODO: fix in the future\n }\n\n try {\n // Build the client-side bundle\n await viteBuild({\n mode: \"production\",\n root: appRoot,\n plugins: [\n ...commonRunVitePlugins,\n\n tsconfigPaths(),\n ],\n optimizeDeps: {\n include: [\"react/jsx-runtime\"],\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n 'process.env': {}\n },\n resolve: {\n alias: {\n process: 'process/browser'\n }\n },\n });\n\n // Build the SSR bundle\n await viteBuild({\n mode: \"production\",\n root: appRoot,\n build: {\n ssr: true\n },\n plugins: [\n fixManifestPlugin(appRoot),\n ...commonRunVitePlugins,\n ],\n optimizeDeps: {\n include: [\"react/jsx-runtime\"],\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n 'process.env': {}\n },\n resolve: {\n alias: {\n process: 'process/browser'\n }\n },\n });\n } catch (error) {\n console.error('Build failed:', error); // TODO: better message\n }\n}\n\nfunction setupInstallableEnvironmentV2() {\n // TODO: probably we should have better mechanism - maybe bundle?\n\n const buildDir = getBuildPath()\n\n const packageJsonPath = path.join(buildDir, 'package.json');\n\n const packageJsonContent = {\n type: \"module\",\n scripts: {},\n dependencies: {\n // \"@react-router/node\": \"^7.5.0\",\n // \"isbot\": \"^5\"\n },\n devDependencies: {}\n };\n\n // Ensure the build directory exists\n if (!fs.existsSync(buildDir)) {\n fs.mkdirSync(buildDir, { recursive: true });\n }\n\n // Write the package.json file\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJsonContent, null, 2), 'utf8');\n}\n\n// TODO: not so good solution\n// fixManifestPlugin is needed for fixing server manifest for react-router cuz we use different `root` and output\nfunction fixManifestPlugin(\n appRoot: string\n): VitePlugin {\n const manifestPath = path.join(\n getBuildPath(),\n \"./server/.vite/manifest.json\"\n );\n\n return {\n name: \"xyd-fix-rr-manifest\",\n apply: 'build', // run after manifest is generated\n // 2) after bundle is written, compute prefix and strip it\n writeBundle(_, bundle) {\n const cwdDir = process.cwd();\n let prefix = path.relative(appRoot, cwdDir).replace(/\\\\/g, \"/\");\n if (prefix) prefix += \"/\";\n\n // escape for RegExp\n const esc = prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const stripRe = new RegExp(`^${esc}`);\n\n for (const fileName in bundle) {\n const asset = bundle[fileName];\n\n if (asset.type !== \"asset\") continue;\n\n // A) fix manifest.json (client or SSR) keys + entry.src\n if (fileName.endsWith(\"manifest.json\")) {\n const manifest = JSON.parse(asset.source.toString());\n const fixed: Record<string, any> = {};\n\n for (const key of Object.keys(manifest)) {\n const entry = manifest[key];\n const newKey = key.replace(stripRe, \"\");\n if (typeof entry.src === \"string\") {\n entry.src = entry.src.replace(stripRe, \"\");\n }\n fixed[newKey] = entry;\n }\n\n asset.source = JSON.stringify(fixed, null, 2);\n fs.writeFileSync(manifestPath, asset.source, 'utf8');\n\n }\n\n // B) fix any CSS asset metadata (originalFileNames)\n // TODO: FINISH if it will be needed\n // if (fileName.endsWith(\".css\") && Array.isArray(asset.originalFileNames)) {\n // asset.originalFileNames = asset.originalFileNames.map((orig) =>\n // orig.replace(stripRe, \"\")\n // );\n // }\n }\n\n },\n }\n}","import path from \"node:path\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { execSync, ExecSyncOptions } from \"node:child_process\";\nimport crypto from \"node:crypto\";\n\nimport { createServer, PluginOption as VitePluginOption, Plugin as VitePlugin } from \"vite\";\nimport { reactRouter } from \"@react-router/dev/vite\";\nimport { IconSet } from '@iconify/tools';\n\nimport { readSettings, pluginDocs, type PluginDocsOptions, PluginOutput } from \"@xyd-js/plugin-docs\";\nimport { vitePlugins as xydContentVitePlugins } from \"@xyd-js/content/vite\";\nimport { Integrations, Plugins, Settings } from \"@xyd-js/core\";\nimport type { IconLibrary } from \"@xyd-js/core\";\nimport type { Plugin, PluginConfig } from \"@xyd-js/plugins\";\nimport { type UniformPlugin } from \"@xyd-js/uniform\";\n\nimport hostPackageJson from \"../../xyd-host/package.json\"\n\nimport { BUILD_FOLDER_PATH, CACHE_FOLDER_PATH, HOST_FOLDER_PATH } from \"./const\";\nimport { CLI } from './cli';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst HOST_VERSION = hostPackageJson?.version\n\nexport async function appInit(options?: PluginDocsOptions) {\n const readPreloadSettings = await readSettings() // TODO: in the future better solution - currently we load settings twice (pluginDocs and here)\n if (!readPreloadSettings) {\n throw new Error(\"cannot preload settings\")\n }\n\n const preloadSettings = typeof readPreloadSettings === \"string\" ? JSON.parse(readPreloadSettings) : readPreloadSettings\n\n {\n if (!preloadSettings.integrations?.search) {\n preloadSettings.integrations = {\n ...(preloadSettings.integrations || {}),\n search: {\n orama: true\n }\n }\n }\n\n const plugins = integrationsToPlugins(preloadSettings.integrations)\n if (preloadSettings.plugins) {\n preloadSettings.plugins = [...plugins, ...preloadSettings.plugins]\n } else {\n preloadSettings.plugins = plugins\n }\n }\n\n let resolvedPlugins: PluginConfig[] = []\n {\n resolvedPlugins = await loadPlugins(preloadSettings) || []\n const userUniformVitePlugins: UniformPlugin<any>[] = []\n\n resolvedPlugins?.forEach(p => {\n if (p.uniform) {\n userUniformVitePlugins.push(...p.uniform)\n }\n })\n globalThis.__xydUserUniformVitePlugins = userUniformVitePlugins\n }\n\n const respPluginDocs = await pluginDocs(options)\n if (!respPluginDocs) {\n throw new Error(\"PluginDocs not found\")\n }\n if (!respPluginDocs.settings) {\n throw new Error(\"Settings not found in respPluginDocs\")\n }\n respPluginDocs.settings.plugins = [\n ...(respPluginDocs.settings?.plugins || []),\n ...(preloadSettings.plugins || [])\n ]\n\n globalThis.__xydBasePath = respPluginDocs.basePath\n globalThis.__xydSettings = respPluginDocs.settings\n globalThis.__xydPagePathMapping = respPluginDocs.pagePathMapping\n\n return {\n respPluginDocs,\n resolvedPlugins\n }\n}\n\nexport function virtualComponentsPlugin(): VitePluginOption {\n return {\n name: 'xyd-plugin-virtual-components',\n enforce: 'pre',\n config: () => {\n const componentsDist = path.resolve(getHostPath(), \"./node_modules/@xyd-js/components/dist\")\n\n return {\n resolve: {\n alias: {\n // TODO: type-safe virtual-components\n 'virtual-component:Search': path.resolve(componentsDist, \"system.js\")\n }\n }\n }\n },\n }\n}\n\nexport function virtualProvidersPlugin(\n settings: Settings\n): VitePluginOption {\n return {\n name: 'xyd-plugin-virtual-providers',\n enforce: 'pre',\n resolveId(id) {\n if (id === 'virtual:xyd-analytics-providers') {\n return id\n }\n },\n async load(id) {\n if (id === 'virtual:xyd-analytics-providers') {\n const providers = Object.keys(settings?.integrations?.analytics || {})\n const imports = providers.map(provider =>\n `import { default as ${provider}Provider } from '@pluganalytics/provider-${provider}'`\n ).join('\\n')\n\n const cases = providers.map(provider =>\n `case '${provider}': return ${provider}Provider`\n ).join('\\n')\n\n return `\n ${imports}\n\n export const loadProvider = async (provider) => {\n switch (provider) {\n ${cases}\n default:\n console.error(\\`Provider \\${provider} not found\\`)\n return null\n }\n }\n `\n }\n }\n }\n}\n\nexport function commonVitePlugins(\n respPluginDocs: PluginOutput,\n resolvedPlugins: PluginConfig[],\n) {\n const userVitePlugins = resolvedPlugins.map(p => p.vite).flat() || []\n\n return [\n ...(xydContentVitePlugins({\n toc: {\n maxDepth: respPluginDocs.settings.theme?.maxTocDepth || 2,\n },\n settings: respPluginDocs.settings,\n }) as VitePlugin[]),\n ...respPluginDocs.vitePlugins,\n\n reactRouter(),\n\n virtualComponentsPlugin(),\n virtualProvidersPlugin(respPluginDocs.settings),\n pluginIconSet(respPluginDocs.settings),\n\n ...userVitePlugins,\n ]\n}\n\nexport function pluginIconSet(settings: Settings): VitePluginOption {\n const DEFAULT_ICON_SET = \"lucide\";\n\n async function fetchIconSet(name: string, version?: string): Promise<{ icons: any, iconSet: IconSet }> {\n // If it's a URL, use it directly\n if (name.startsWith('http://') || name.startsWith('https://')) {\n try {\n const iconsResp = await fetch(name);\n const iconsData = await iconsResp.json();\n const iconSet = new IconSet(iconsData);\n return { icons: iconsData, iconSet };\n } catch (error) {\n console.warn(`Failed to fetch from URL ${name}:`, error);\n }\n }\n\n // Try to read from file system\n const tryReadFile = (filePath: string) => {\n try {\n if (!fs.existsSync(filePath)) {\n console.warn(`File does not exist: ${filePath}`);\n return null;\n }\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n try {\n const iconsData = JSON.parse(fileContent);\n const iconSet = new IconSet(iconsData);\n return { icons: iconsData, iconSet };\n } catch (parseError) {\n console.warn(`Invalid JSON in file ${filePath}:`, parseError);\n return null;\n }\n } catch (error) {\n console.warn(`Failed to read file ${filePath}:`, error);\n return null;\n }\n };\n\n\n if (path.isAbsolute(name)) {\n const result = tryReadFile(name);\n if (result) return result;\n }\n\n if (name.startsWith(\".\")) {\n const fullPath = path.join(process.cwd(), name);\n const result = tryReadFile(fullPath);\n if (result) return result;\n }\n\n // Fallback to CDN\n const cdnUrl = version\n ? `https://cdn.jsdelivr.net/npm/@iconify-json/${name}@${version}/icons.json`\n : `https://cdn.jsdelivr.net/npm/@iconify-json/${name}/icons.json`;\n\n try {\n const iconsResp = await fetch(cdnUrl);\n const iconsData = await iconsResp.json();\n const iconSet = new IconSet(iconsData);\n return { icons: iconsData, iconSet };\n } catch (error) {\n throw new Error(`Failed to load icon set from any source (file or CDN): ${name}`);\n }\n }\n\n async function processIconSet(iconSet: IconSet, icons: any, noPrefix?: boolean): Promise<Map<string, { svg: string }>> {\n const resp = new Map<string, { svg: string }>();\n\n for (const icon of Object.keys(icons.icons)) {\n const svg = iconSet.toSVG(icon);\n if (!svg) continue;\n\n let prefix = noPrefix ? undefined : iconSet.prefix;\n // If prefix is undefined, it means this is the default set and should not have a prefix\n const iconName = prefix ? `${prefix}:${icon}` : icon;\n resp.set(iconName, { svg: svg.toString() });\n }\n\n return resp;\n }\n\n async function addIconsToMap(resp: Map<string, { svg: string }>, name: string, version?: string, noPrefix?: boolean): Promise<void> {\n const { icons, iconSet } = await fetchIconSet(name, version);\n const newIcons = await processIconSet(iconSet, icons, noPrefix);\n newIcons.forEach((value, key) => resp.set(key, value));\n }\n\n async function processIconLibrary(library: string | IconLibrary | (string | IconLibrary)[]): Promise<Map<string, { svg: string }>> {\n const resp = new Map<string, { svg: string }>();\n\n if (typeof library === 'string') {\n // Single icon set as default\n await addIconsToMap(resp, library);\n } else if (Array.isArray(library)) {\n // Multiple icon sets\n for (const item of library) {\n if (typeof item === 'string') {\n // String items are treated as default set\n await addIconsToMap(resp, item);\n } else {\n // IconLibrary configuration\n const { name, version, default: isDefault, noprefix } = item;\n const noPrefix = isDefault || noprefix;\n await addIconsToMap(resp, name, version, noPrefix);\n }\n }\n } else {\n // Single IconLibrary configuration\n const { name, version, default: isDefault, noprefix } = library;\n const prefix = (isDefault || noprefix) ? undefined : name;\n await addIconsToMap(resp, name, version, prefix);\n }\n\n return resp;\n }\n\n return {\n name: 'xyd-plugin-icon-set',\n enforce: 'pre',\n resolveId(id) {\n if (id === 'virtual:xyd-icon-set') {\n return id;\n }\n },\n async load(id) {\n if (id === 'virtual:xyd-icon-set') {\n let resp: Map<string, { svg: string }>;\n\n // Handle theme icons configuration\n if (settings.theme?.icons?.library) {\n resp = await processIconLibrary(settings.theme.icons.library);\n } else {\n resp = await processIconLibrary([\n {\n name: DEFAULT_ICON_SET,\n default: true,\n }\n ]);\n }\n\n return `\n export const iconSet = ${JSON.stringify(Object.fromEntries(resp))};\n `;\n }\n }\n } as VitePlugin\n}\n\nexport function getHostPath() {\n if (process.env.XYD_DEV_MODE) {\n if (process.env.XYD_HOST) {\n return path.resolve(process.env.XYD_HOST)\n }\n\n\n return path.join(__dirname, \"../../../\", HOST_FOLDER_PATH)\n }\n\n return path.join(process.cwd(), HOST_FOLDER_PATH)\n}\n\nexport function getAppRoot() {\n return getHostPath()\n}\n\n// TODO: in the future get from settings\nexport function getPublicPath() {\n return path.join(process.cwd(), 'public')\n}\n\nexport function getBuildPath() {\n return path.join(\n process.cwd(),\n BUILD_FOLDER_PATH\n );\n}\n\nexport function getDocsPluginBasePath() {\n return path.join(getHostPath(), \"./plugins/xyd-plugin-docs\")\n}\n\nasync function loadPlugins(\n settings: Settings,\n) {\n const resolvedPlugins: PluginConfig[] = []\n\n for (const plugin of settings.plugins || []) {\n let pluginName: string\n let pluginArgs: any[] = []\n\n if (typeof plugin === \"string\") {\n pluginName = plugin\n pluginArgs = []\n } else if (Array.isArray(plugin)) {\n pluginName = plugin[0]\n pluginArgs = plugin.slice(1)\n } else {\n console.error(`Currently only string and array plugins are supported, got: ${plugin}`)\n return []\n }\n\n let mod: any // TODO: fix type\n try {\n mod = await import(pluginName)\n } catch (e) {\n pluginName = path.join(process.cwd(), pluginName)\n\n // TODO: find better solution? use this every time?\n const pluginPreview = await createServer({\n optimizeDeps: {\n include: [],\n },\n });\n mod = await pluginPreview.ssrLoadModule(pluginName);\n }\n\n if (!mod.default) {\n console.error(`Plugin ${plugin} has no default export`)\n continue\n }\n\n let pluginInstance = mod.default(...pluginArgs) as (PluginConfig | Plugin)\n if (typeof pluginInstance === \"function\") {\n const plug = pluginInstance(settings)\n\n resolvedPlugins.push(plug)\n\n continue\n }\n\n resolvedPlugins.push(pluginInstance);\n\n }\n\n return resolvedPlugins\n}\n\nfunction integrationsToPlugins(integrations: Integrations) {\n const plugins: Plugins = []\n let foundSearchIntegation = 0\n\n if (integrations?.search?.orama) {\n if (typeof integrations.search.orama === \"boolean\") {\n plugins.push(\"@xyd-js/plugin-orama\")\n } else {\n plugins.push([\"@xyd-js/plugin-orama\", integrations.search.orama])\n }\n foundSearchIntegation++\n }\n\n if (integrations?.search?.algolia) {\n plugins.push([\"@xyd-js/plugin-algolia\", integrations.search.algolia])\n foundSearchIntegation++\n }\n\n if (foundSearchIntegation > 1) {\n throw new Error(\"Only one search integration is allowed\")\n }\n\n return plugins\n}\n\nexport async function preWorkspaceSetup(options: {\n force?: boolean\n} = {}) {\n await ensureFoldersExist()\n\n // Check if we can skip the setup\n if (!options.force) {\n if (await shouldSkipHostSetup()) {\n return true\n }\n }\n\n const hostTemplate = process.env.XYD_DEV_MODE\n ? path.resolve(__dirname, \"../../xyd-host\")\n : path.resolve(__dirname, \"../../host\")\n // : await downloadPackage(\"@xyd-js/host\", HOST_VERSION)\n\n // if (hostTemplate instanceof Error) {\n // throw hostTemplate\n // }\n\n const hostPath = getHostPath()\n\n await copyHostTemplate(hostTemplate, hostPath)\n\n // Calculate and store new checksum after setup\n\n // Handle plugin-docs pages\n let pluginDocsPath: string | Error\n if (process.env.XYD_DEV_MODE) {\n pluginDocsPath = path.resolve(__dirname, \"../../xyd-plugin-docs\")\n } else {\n pluginDocsPath = path.resolve(__dirname, \"../../plugin-docs\")\n\n // // Get plugin-docs version from host's package.json\n // const hostPackageJsonPath = path.join(hostPath, 'package.json')\n // if (fs.existsSync(hostPackageJsonPath)) {\n // const hostPackageJson = JSON.parse(fs.readFileSync(hostPackageJsonPath, 'utf-8'))\n // const pluginDocsVersion = hostPackageJson.dependencies?.['@xyd-js/plugin-docs']\n\n // if (pluginDocsVersion) {\n // pluginDocsPath = path.resolve(__dirname, \"../node_modules/@xyd-js/plugin-docs\")\n // // pluginDocsPath = await downloadPackage('@xyd-js/plugin-docs', pluginDocsVersion)\n // } else {\n // console.warn('No @xyd-js/plugin-docs dependency found in host package.json')\n // return\n // }\n // } else {\n // console.warn('No host package.json found')\n // return\n // }\n }\n\n // if (pluginDocsPath instanceof Error) {\n // throw pluginDocsPath\n // }\n\n const pagesSourcePath = path.join(pluginDocsPath, \"src/pages\")\n const pagesTargetPath = path.join(hostPath, \"plugins/xyd-plugin-docs/src/pages\")\n\n if (fs.existsSync(pagesSourcePath)) {\n await copyHostTemplate(pagesSourcePath, pagesTargetPath)\n } else {\n console.warn(`Pages source path does not exist: ${pagesSourcePath}`)\n }\n}\n\nexport function calculateFolderChecksum(folderPath: string): string {\n const hash = crypto.createHash('sha256');\n const ignorePatterns = [...getGitignorePatterns(folderPath), '.xydchecksum'];\n\n function processFile(filePath: string) {\n const relativePath = path.relative(folderPath, filePath);\n const content = fs.readFileSync(filePath);\n hash.update(relativePath);\n hash.update(content);\n }\n\n function processDirectory(dirPath: string) {\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\n // Sort entries to ensure consistent order\n entries.sort((a, b) => a.name.localeCompare(b.name));\n\n for (const entry of entries) {\n const sourceEntry = path.join(dirPath, entry.name)\n\n // Skip if the entry matches any ignore pattern\n if (shouldIgnoreEntry(entry.name, ignorePatterns)) {\n continue\n }\n\n // Skip .git directory\n if (entry.name === '.git') {\n continue\n }\n\n if (entry.isDirectory()) {\n processDirectory(sourceEntry)\n } else {\n processFile(sourceEntry)\n }\n }\n }\n\n processDirectory(folderPath);\n return hash.digest('hex');\n}\n\nfunction getGitignorePatterns(folderPath: string): string[] {\n const gitignorePath = path.join(folderPath, '.gitignore')\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8')\n return gitignoreContent\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line && !line.startsWith('#'))\n }\n return []\n}\n\nfunction shouldIgnoreEntry(entryName: string, ignorePatterns: string[]): boolean {\n return ignorePatterns.some(pattern => {\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'))\n return regex.test(entryName)\n })\n}\n\n// async function downloadPackage(packageName: string, version: string): Promise<string | Error> {\n// const tempDir = path.join(process.cwd(), CACHE_FOLDER_PATH, 'temp')\n// const packageDir = path.join(tempDir, packageName.replace('/', '-'))\n\n// // Clean up existing temp directory if it exists\n// if (fs.existsSync(packageDir)) {\n// fs.rmSync(packageDir, { recursive: true, force: true })\n// }\n\n// // Create temp directory\n// fs.mkdirSync(packageDir, { recursive: true })\n\n// try {\n// nodeDownloadPackage(packageName, version, tempDir, packageDir)\n\n// return packageDir\n// } catch (error) {\n// console.error(`Failed to download ${packageName}@${version}:`, error)\n// return new Error(`Failed to download ${packageName}@${version}`)\n// }\n// }\n\nasync function copyHostTemplate(sourcePath: string, targetPath: string) {\n if (!fs.existsSync(sourcePath)) {\n throw new Error(`Host template source path does not exist: ${sourcePath}`)\n }\n\n // Clean target directory if it exists\n if (fs.existsSync(targetPath)) {\n fs.rmSync(targetPath, { recursive: true, force: true })\n }\n\n // Create target directory\n fs.mkdirSync(targetPath, { recursive: true })\n\n const ignorePatterns = getGitignorePatterns(sourcePath)\n\n // Copy all files and directories recursively\n const entries = fs.readdirSync(sourcePath, { withFileTypes: true })\n\n for (const entry of entries) {\n const sourceEntry = path.join(sourcePath, entry.name)\n const targetEntry = path.join(targetPath, entry.name)\n\n // Skip if the entry matches any ignore pattern\n if (shouldIgnoreEntry(entry.name, ignorePatterns)) {\n continue\n }\n\n // Skip .git directory\n if (entry.name === '.git') {\n continue\n }\n\n if (entry.isDirectory()) {\n await copyHostTemplate(sourceEntry, targetEntry)\n } else {\n fs.copyFileSync(sourceEntry, targetEntry)\n\n // Handle package.json modifications for local development\n if (entry.name === 'package.json' && process.env.XYD_DEV_MODE) {\n const packageJsonPath = targetEntry\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n packageJson.name = \"xyd-host-dev\"\n\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n }\n }\n}\n\nasync function ensureFoldersExist() {\n const folders = [CACHE_FOLDER_PATH]\n for (const folder of folders) {\n const fullPath = path.resolve(process.cwd(), folder)\n if (!fs.existsSync(fullPath)) {\n fs.mkdirSync(fullPath, { recursive: true })\n }\n }\n}\n\n// TODO: in the future buil-in xyd plugins should be installable via code\nexport async function postWorkspaceSetup(settings: Settings) {\n const spinner = new CLI('dots');\n\n try {\n spinner.startSpinner('Installing xyd framework...');\n\n const hostPath = getHostPath()\n const packageJsonPath = path.join(hostPath, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n console.warn('No package.json found in host path')\n return\n }\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n\n // Initialize dependencies if they don't exist\n if (!packageJson.dependencies) {\n packageJson.dependencies = {}\n }\n for (const plugin of settings.plugins || []) {\n let pluginName: string\n\n if (typeof plugin === \"string\") {\n pluginName = plugin\n } else if (Array.isArray(plugin)) {\n pluginName = plugin[0]\n } else {\n continue\n }\n\n if (pluginName.startsWith(\"@xyd-js/\")) {\n continue // TODO: currently we don't install built-in xyd plugins - they are defined in host\n }\n\n // Check if it's a valid npm package name\n // Valid formats: name or @scope/name\n // Invalid: ./path/to/file.js or /absolute/path\n const isValidNpmPackage = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(pluginName)\n\n if (isValidNpmPackage) {\n // Search for matching dependencies in host's package.json\n const hostPackageJsonPath = path.join(hostPath, 'package.json')\n if (fs.existsSync(hostPackageJsonPath)) {\n const hostPackageJson = JSON.parse(fs.readFileSync(hostPackageJsonPath, 'utf-8'))\n const deps = hostPackageJson.dependencies || {}\n\n // Find matching dependency\n const matchingDep = Object.entries(deps).find(([depName]) => {\n return depName === pluginName\n })\n\n if (matchingDep) {\n packageJson.dependencies[pluginName] = matchingDep[1]\n } else {\n console.warn(`no matching dependency found for: ${pluginName} in: ${hostPackageJsonPath}`)\n }\n } else {\n console.warn(`no host package.json found in: ${hostPath}`)\n }\n } else if (!pluginName.startsWith('.') && !pluginName.startsWith('/')) {\n // Only warn if it's not a local file path (doesn't start with . or /)\n console.warn(`invalid plugin name: ${pluginName}`)\n }\n }\n\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))\n\n await nodeInstallPackages(hostPath)\n\n spinner.stopSpinner();\n spinner.log('✔ Local xyd framework installed successfully');\n } catch(error) {\n spinner.stopSpinner();\n spinner.error('❌ Failed to install xyd framework');\n throw error;\n }\n}\n\nfunction nodeInstallPackages(hostPath: string) {\n const cmd = process.env.XYD_DEV_MODE ? 'pnpm i' : 'npm i'\n const execOptions: ExecSyncOptions = {\n cwd: hostPath,\n env: {\n ...process.env,\n NODE_ENV: \"\" // since 'production' does not install it well\n }\n }\n if (process.env.XYD_VERBOSE) {\n execOptions.stdio = 'inherit'\n }\n execSync(cmd, execOptions)\n}\n\n// function nodeDownloadPackage(\n// packageName: string,\n// version: string,\n// extractDir: string,\n// finalOutputDir: string,\n// ) {\n// const cmd = process.env.XYD_DEV_MODE\n// ? `pnpm pack ${packageName}@${version} --pack-destination ${extractDir}`\n// : `npm pack ${packageName}@${version} --pack-destination ${extractDir}`\n\n// const execOptions: ExecSyncOptions = {}\n// if (process.env.XYD_VERBOSE) {\n// execOptions.stdio = 'inherit'\n// }\n// execSync(cmd, execOptions)\n\n// const tarball = fs.readdirSync(extractDir).find(file => file.endsWith('.tgz'))\n// if (!tarball) {\n// throw new Error(`No tarball found for ${packageName}@${version}`)\n// }\n// execSync(`tar -xzf ${path.join(extractDir, tarball)} -C ${extractDir}`, execOptions)\n\n// // Move package contents to outputDir\n// const extractedDir = path.join(extractDir, 'package')\n// if (fs.existsSync(extractedDir)) {\n// fs.renameSync(extractedDir, finalOutputDir)\n// }\n\n// // Clean up tarball\n// fs.unlinkSync(path.join(extractDir, tarball))\n// }\n\nasync function shouldSkipHostSetup(): Promise<boolean> {\n const hostPath = getHostPath();\n\n // If host folder doesn't exist, we need to set it up\n if (!fs.existsSync(hostPath)) {\n return false;\n }\n\n const currentChecksum = calculateFolderChecksum(hostPath);\n const storedChecksum = getStoredChecksum();\n\n // If no stored checksum or checksums don't match, we need to set up\n if (!storedChecksum || storedChecksum !== currentChecksum) {\n return false;\n }\n\n return true;\n}\n\nfunction getStoredChecksum(): string | null {\n const checksumPath = path.join(getHostPath(), '.xydchecksum');\n if (!fs.existsSync(checksumPath)) {\n return null;\n }\n try {\n return fs.readFileSync(checksumPath, 'utf-8').trim();\n } catch (error) {\n console.error('Error reading checksum file:', error);\n return null;\n }\n}\n\nexport function storeChecksum(checksum: string): void {\n const checksumPath = path.join(getHostPath(), '.xydchecksum');\n try {\n fs.writeFileSync(checksumPath, checksum);\n } catch (error) {\n console.error('Error writing checksum file:', error);\n }\n}\n\n","{\n \"name\": \"@xyd-js/host\",\n \"version\": \"0.1.0-xyd.2\",\n \"type\": \"module\",\n \"scripts\": {},\n \"dependencies\": {\n \"@xyd-js/core\": \"workspace:*\",\n \"@xyd-js/components\": \"workspace:*\",\n \"@xyd-js/framework\": \"workspace:*\",\n \"@xyd-js/composer\": \"workspace:*\",\n \"@xyd-js/themes\": \"workspace:*\",\n \"@xyd-js/atlas\": \"workspace:*\",\n \"@xyd-js/theme-poetry\": \"workspace:*\",\n \"@xyd-js/theme-cosmo\": \"workspace:*\",\n \"@xyd-js/theme-opener\": \"workspace:*\",\n \"@xyd-js/theme-picasso\": \"workspace:*\",\n \"@xyd-js/plugin-orama\": \"workspace:*\",\n \"@xyd-js/plugin-algolia\": \"workspace:*\",\n \"@react-router/dev\": \"^7.5.0\",\n \"@react-router/node\": \"^7.5.0\",\n \"@react-router/serve\": \"^7.5.0\",\n \"isbot\": \"^5\",\n \"react-router\": \"^7.5.0\"\n },\n \"devDependencies\": {\n \"autoprefixer\": \"^10.4.20\",\n \"postcss\": \"^8.4.47\",\n \"semver\": \"^7.6.3\",\n \"vite\": \"^6.1.0\",\n \"vite-tsconfig-paths\": \"^5.1.4\"\n }\n}","export const HOST_FOLDER_PATH = \".xyd/host\"\nexport const CACHE_FOLDER_PATH = \".xyd/.cache\"\nexport const BUILD_FOLDER_PATH = \".xyd/build\"\n\nexport const SUPPORTED_SETTINGS_FILES = [\n 'docs.json',\n 'docs.ts',\n 'docs.tsx'\n]\n\nexport const SUPPORTED_WATCH_FILES = [\n '.md',\n '.mdx',\n ...SUPPORTED_SETTINGS_FILES\n]","import readline from 'node:readline';\nimport cliSpinners from 'cli-spinners';\n\ninterface Spinner {\n frames: string[];\n interval: number;\n}\n\ntype SpinnerName = keyof typeof cliSpinners;\n\nexport class CLI {\n private spinner: Spinner;\n private spinnerInterval: NodeJS.Timeout | null = null;\n private currentFrame = 0;\n private currentMessage = '';\n private isSpinning = false;\n\n constructor(spinnerType: SpinnerName = 'dots') {\n this.spinner = cliSpinners[spinnerType] as Spinner;\n }\n\n public startSpinner(message: string) {\n if (this.isSpinning) {\n this.stopSpinner();\n }\n\n this.currentMessage = message;\n this.isSpinning = true;\n this.currentFrame = 0;\n\n // Write initial message\n this.write(`${this.spinner.frames[0]} ${this.currentMessage}`);\n\n this.spinnerInterval = setInterval(() => {\n const frame = this.spinner.frames[this.currentFrame];\n this.write(`${frame} ${this.currentMessage}`);\n this.currentFrame = (this.currentFrame + 1) % this.spinner.frames.length;\n }, this.spinner.interval);\n }\n\n public stopSpinner() {\n if (this.spinnerInterval) {\n clearInterval(this.spinnerInterval);\n this.spinnerInterval = null;\n }\n this.isSpinning = false;\n this.clearLine();\n }\n\n private clearLine() {\n readline.clearLine(process.stdout, 0);\n readline.cursorTo(process.stdout, 0);\n }\n\n private write(message: string) {\n this.clearLine();\n process.stdout.write(message);\n }\n\n public log(message: string) {\n if (this.isSpinning) {\n this.stopSpinner();\n }\n console.log(message);\n }\n\n public error(message: string) {\n if (this.isSpinning) {\n this.stopSpinner();\n }\n console.error(message);\n }\n\n private updateMessage(message: string) {\n this.currentMessage = message;\n }\n\n}\n\n// Export a singleton instance\nexport const cli = new CLI(); ","import path from \"node:path\";\nimport fs from \"node:fs\";\n\nimport { createServer, searchForWorkspaceRoot, ViteDevServer } from \"vite\";\n\nimport { API, APIFile, } from \"@xyd-js/core\";\n\nimport { appInit, calculateFolderChecksum, commonVitePlugins, getAppRoot, getDocsPluginBasePath, getHostPath, getPublicPath, postWorkspaceSetup, preWorkspaceSetup, storeChecksum } from \"./utils\";\nimport { CACHE_FOLDER_PATH, SUPPORTED_WATCH_FILES } from \"./const\";\nimport {CLI} from \"./cli\";\n\n// TODO: !!! BETTER TIMER / DEBUG API !!!\nif (!process.env.ENABLE_TIMERS) {\n ['time', 'timeLog', 'timeEnd'].forEach(method => {\n console[method] = () => {\n };\n });\n}\n\ninterface DevOptions {\n port?: number\n}\nexport async function dev(options?: DevOptions) {\n const spinner = new CLI('dots');\n spinner.startSpinner('Preparing local xyd instance... \\n');\n\n const skip = await preWorkspaceSetup()\n\n const { respPluginDocs, resolvedPlugins } = await appInit()\n const allowCwd = searchForWorkspaceRoot(process.cwd())\n const appRoot = getAppRoot()\n const commonRunVitePlugins = commonVitePlugins(respPluginDocs, resolvedPlugins)\n spinner.stopSpinner();\n\n if (!skip) {\n await postWorkspaceSetup(respPluginDocs.settings)\n\n const newChecksum = calculateFolderChecksum(getHostPath());\n storeChecksum(newChecksum);\n }\n\n // ⚠️ \n spinner.log('✔ Local xyd instance is ready');\n\n let server: ViteDevServer | null = null\n\n const port = options?.port ?? parseInt(process.env.XYD_PORT ?? \"5175\")\n\n const preview = await createServer({\n root: appRoot,\n publicDir: '/public',\n server: {\n allowedHosts: [],\n port: port,\n fs: {\n allow: [\n allowCwd,\n appRoot,\n ]\n }\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),\n 'process.env': {}\n },\n resolve: {\n alias: {\n process: 'process/browser'\n }\n },\n build: {\n rollupOptions: {\n external: []\n },\n },\n ssr: {\n external: [],\n },\n optimizeDeps: {\n include: [\"react/jsx-runtime\"]\n },\n plugins: [\n ...commonRunVitePlugins,\n\n {\n name: 'xyd-configureServer',\n configureServer(s) {\n server = s\n }\n },\n ],\n });\n\n // Set up manual file watcher for markdown files TODO: better way? + HMR only for specific components instead or reload a pag\n const watcher = fs.watch(allowCwd, { recursive: true }, async (eventType, filename) => {\n if (!filename) {\n console.log(\"[xyd:dev] Received empty filename\");\n return;\n }\n\n const filePath = path.join(allowCwd, filename);\n if (filePath.includes(CACHE_FOLDER_PATH)) {\n return\n }\n\n let apiPaths: { [path: string]: boolean } = {}\n if (respPluginDocs?.settings?.api) {\n apiPaths = resolveApiFilePaths(process.cwd(), respPluginDocs.settings.api)\n }\n\n const apiChanged = !!apiPaths[filePath]\n\n if (filePath.includes(getPublicPath())) {\n const relativePath = path.relative(allowCwd, filePath);\n const urlPath = '/' + relativePath.replace(/\\\\/g, '/');\n\n preview.ws.send({\n type: 'full-reload',\n path: urlPath,\n });\n return\n }\n\n if (SUPPORTED_WATCH_FILES.some(ext => filePath.endsWith(ext)) || apiChanged) {\n const relativePath = path.relative(allowCwd, filePath);\n const urlPath = '/' + relativePath.replace(/\\\\/g, '/');\n\n // TODO: better way to handle that - we need this cuz otherwise its inifiite reloads\n if (respPluginDocs?.settings.engine?.uniform?.store) {\n await appInit({\n disableFSWrite: true,\n })\n } else {\n await appInit() // TODO: !!! IN THE FUTURE MORE EFFICIENT WAY !!!\n }\n\n // TODO: !!! BETTER HMR !!!\n\n if (server) {\n const docsPluginBasePath = getDocsPluginBasePath()\n\n const layoutPath = path.join(docsPluginBasePath, \"./src/pages/layout.tsx\")\n const layoutModule = server.moduleGraph.getModuleById(layoutPath);\n\n const pagePath = path.join(docsPluginBasePath, \"./src/pages/page.tsx\")\n const pageModule = server.moduleGraph.getModuleById(pagePath);\n\n if (layoutModule && pageModule) {\n server.moduleGraph.invalidateModule(layoutModule);\n server.moduleGraph.invalidateModule(pageModule);\n try {\n const hostPath = getHostPath()\n const hostReactRouterConfig = path.join(hostPath, \"react-router.config.ts\")\n\n await fs.promises.utimes(hostReactRouterConfig, new Date(), new Date());\n } catch (e) {\n console.error(\"config update error\")\n console.error(e)\n }\n\n server.ws.send({ type: 'full-reload' });\n\n return\n }\n }\n\n preview.ws.send({\n type: 'full-reload',\n path: urlPath,\n });\n }\n });\n\n // Log any watcher errors\n watcher.on('error', (error) => {\n console.error(\"[xyd:dev] File watcher error:\", error);\n });\n\n await preview.listen(port);\n\n preview.printUrls();\n preview.bindCLIShortcuts({ print: true });\n\n // Clean up watcher when server is closed\n preview.httpServer?.once('close', () => {\n watcher.close();\n });\n}\n\n\n/**\n * @todo: !!! in the future it should be created at different level !!!\n * \n * Walks api.*, \n * resolves all referenced files under `basePath`,\n * and returns a set of absolute paths.\n */\nexport function resolveApiFilePaths(\n basePath: string,\n api: API\n): Record<string, true> {\n const result: Record<string, true> = {}\n\n const apis = [api.openapi, api.graphql, api.sources].filter((s): s is APIFile => s !== undefined)\n\n apis.forEach(section => {\n flattenApiFile(section).forEach(p => {\n const apiAbsPath = path.resolve(basePath, p)\n result[apiAbsPath] = true\n })\n })\n\n return result\n}\n\n\n/**\n * Given any APIFile-ish value, returns an array of the raw source-paths.\n */\nfunction flattenApiFile(file?: APIFile): string[] {\n if (!file) return []\n\n // single string\n if (typeof file === 'string') {\n return [file]\n }\n\n // array of anything\n if (Array.isArray(file)) {\n return file.flatMap(flattenApiFile)\n }\n\n // object: either a nested config, or a map of name→file\n if (typeof file === 'object') {\n const obj = file as Record<string, any>\n\n // explicit nested entry\n if (typeof obj.source === 'string') {\n return [obj.source]\n }\n\n // fallback: treat as { key: APIFile } map\n return Object.values(obj).flatMap(flattenApiFile)\n }\n\n // everything else (e.g. numbers, booleans) gets dropped\n return []\n}","import fs from 'node:fs';\n\nimport { preWorkspaceSetup, postWorkspaceSetup, getHostPath } from './utils';\nimport { readSettings } from '@xyd-js/plugin-docs';\n\n\nexport async function install() {\n const settings = await readSettings() // TODO: in the future better solution - currently we load settings twice (pluginDocs and here)\n if (!settings) {\n throw new Error(\"cannot preload settings\")\n }\n if (typeof settings === \"string\") {\n throw new Error(\"install does not support string settings\")\n }\n\n // Clear the host folder if it exists\n const hostPath = getHostPath();\n if (fs.existsSync(hostPath)) {\n fs.rmSync(hostPath, { recursive: true, force: true });\n }\n\n // Run pre-workspace setup\n await preWorkspaceSetup({\n force: true,\n });\n\n // Run post-workspace setup with empty settings\n // The actual settings will be loaded during the build/dev process\n await postWorkspaceSetup(settings);\n}"],"mappings":"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","names":["path","fs","path","fs","path","fs","createServer","createServer","fs","path","fs","readSettings","fs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyd-js/documan",
3
- "version": "0.1.0-xyd.31",
3
+ "version": "0.1.0-xyd.33",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",
@@ -38,11 +38,11 @@
38
38
  "unplugin-icons": "^22.1.0",
39
39
  "vfile": "^6.0.3",
40
40
  "yaml": "^2.6.0",
41
+ "@xyd-js/core": "0.1.0-xyd.15",
42
+ "@xyd-js/plugin-docs": "0.1.0-xyd.4",
41
43
  "@xyd-js/content": "0.1.0-xyd.16",
42
- "@xyd-js/plugin-docs": "0.1.0-xyd.2",
43
- "@xyd-js/plugins": "0.1.0-xyd.2",
44
44
  "@xyd-js/uniform": "0.1.0-xyd.17",
45
- "@xyd-js/core": "0.1.0-xyd.15"
45
+ "@xyd-js/plugins": "0.1.0-xyd.2"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@mdx-js/rollup": "^3.1.0",