@weme-ui/weme-ui 0.1.4-beta.1 → 0.1.5

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.
Files changed (37) hide show
  1. package/dist/add-5ZrkTNC3.mjs +53 -0
  2. package/dist/add-5ZrkTNC3.mjs.map +1 -0
  3. package/dist/{build-CglClYuP.mjs → build-DAAgZct5.mjs} +2 -2
  4. package/dist/{build-CglClYuP.mjs.map → build-DAAgZct5.mjs.map} +1 -1
  5. package/dist/index.mjs +6 -4
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/{info-U2T2YvOz.mjs → info-BBRg1Z-t.mjs} +3 -3
  8. package/dist/{info-U2T2YvOz.mjs.map → info-BBRg1Z-t.mjs.map} +1 -1
  9. package/dist/{init-DuYt1NgW.mjs → init-BlbSgl_W.mjs} +3 -3
  10. package/dist/{init-DuYt1NgW.mjs.map → init-BlbSgl_W.mjs.map} +1 -1
  11. package/dist/{manifest-B2Fg8BvI.mjs → manifest-DtYvp2uU.mjs} +6 -4
  12. package/dist/manifest-DtYvp2uU.mjs.map +1 -0
  13. package/dist/package-DPYgVv-f.mjs +85 -0
  14. package/dist/package-DPYgVv-f.mjs.map +1 -0
  15. package/dist/{project-rHqBMgh9.mjs → project-BpqIQqfR.mjs} +25 -5
  16. package/dist/project-BpqIQqfR.mjs.map +1 -0
  17. package/dist/{project-D7GTkAzz.mjs → project-COPHBstt.mjs} +4 -3
  18. package/dist/{project-D7GTkAzz.mjs.map → project-COPHBstt.mjs.map} +1 -1
  19. package/dist/{project-Dt0TFob4.mjs → project-kIk5Kz3k.mjs} +13 -5
  20. package/dist/project-kIk5Kz3k.mjs.map +1 -0
  21. package/dist/{registry-CK6l29SA.mjs → registry-CU5Ejwes.mjs} +4 -3
  22. package/dist/{registry-CK6l29SA.mjs.map → registry-CU5Ejwes.mjs.map} +1 -1
  23. package/dist/{registry-CAa9iHPj.mjs → registry-DtG09FVz.mjs} +4 -3
  24. package/dist/{registry-CAa9iHPj.mjs.map → registry-DtG09FVz.mjs.map} +1 -1
  25. package/dist/registry-NSadym2Q.mjs +8 -0
  26. package/dist/registry-NSadym2Q.mjs.map +1 -0
  27. package/dist/{registry-_alKtnin.mjs → registry-bjxXghAl.mjs} +38 -102
  28. package/dist/registry-bjxXghAl.mjs.map +1 -0
  29. package/dist/registry-item-B_neG4VO.mjs +143 -0
  30. package/dist/registry-item-B_neG4VO.mjs.map +1 -0
  31. package/dist/verify-CXBxJkzK.mjs +78 -0
  32. package/dist/verify-CXBxJkzK.mjs.map +1 -0
  33. package/package.json +5 -5
  34. package/dist/manifest-B2Fg8BvI.mjs.map +0 -1
  35. package/dist/project-Dt0TFob4.mjs.map +0 -1
  36. package/dist/project-rHqBMgh9.mjs.map +0 -1
  37. package/dist/registry-_alKtnin.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-rHqBMgh9.mjs","names":["p","e: any"],"sources":["../../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs","../src/utils/schema/project.ts"],"sourcesContent":["function isPlainObject(value) {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {\n return false;\n }\n if (Symbol.iterator in value) {\n return false;\n }\n if (Symbol.toStringTag in value) {\n return Object.prototype.toString.call(value) === \"[object Module]\";\n }\n return true;\n}\n\nfunction _defu(baseObject, defaults, namespace = \".\", merger) {\n if (!isPlainObject(defaults)) {\n return _defu(baseObject, {}, namespace, merger);\n }\n const object = Object.assign({}, defaults);\n for (const key in baseObject) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue;\n }\n const value = baseObject[key];\n if (value === null || value === void 0) {\n continue;\n }\n if (merger && merger(object, key, value, namespace)) {\n continue;\n }\n if (Array.isArray(value) && Array.isArray(object[key])) {\n object[key] = [...value, ...object[key]];\n } else if (isPlainObject(value) && isPlainObject(object[key])) {\n object[key] = _defu(\n value,\n object[key],\n (namespace ? `${namespace}.` : \"\") + key.toString(),\n merger\n );\n } else {\n object[key] = value;\n }\n }\n return object;\n}\nfunction createDefu(merger) {\n return (...arguments_) => (\n // eslint-disable-next-line unicorn/no-array-reduce\n arguments_.reduce((p, c) => _defu(p, c, \"\", merger), {})\n );\n}\nconst defu = createDefu();\nconst defuFn = createDefu((object, key, currentValue) => {\n if (object[key] !== void 0 && typeof currentValue === \"function\") {\n object[key] = currentValue(object[key]);\n return true;\n }\n});\nconst defuArrayFn = createDefu((object, key, currentValue) => {\n if (Array.isArray(object[key]) && typeof currentValue === \"function\") {\n object[key] = currentValue(object[key]);\n return true;\n }\n});\n\nexport { createDefu, defu as default, defu, defuArrayFn, defuFn };\n","import type { InlineCssVars, ProjectPaths, ProjectSchema, RegistryItemType } from '@weme-ui/schema'\nimport type { Result } from '../result'\nimport fs from 'node:fs'\nimport * as p from '@clack/prompts'\nimport { PROJECT_FILE_NAME, projectPaths, projectSchema } from '@weme-ui/schema'\nimport { defu } from 'defu'\nimport ora from 'ora'\nimport path from 'pathe'\nimport { glob } from 'tinyglobby'\nimport { fetchURL, getGithubRepoName } from '../fetch'\nimport { Err, Ok } from '../result'\nimport { runStep } from '../utilities'\nimport { installDependencies, loadPackageJson } from './package'\nimport { fetchManifestConfig, fetchRegistryItems } from './registry'\n\nexport interface ProjectInfo {\n name: string\n description: string\n version: string\n repos: string[]\n registries: {\n name: string\n repo: string\n version: string\n description: string\n prefix: string\n access: string\n default: boolean\n available: number\n installed: number\n }[]\n}\n\n/**\n * Load `weme.config.json` from current working directory.\n *\n * @example\n * ```ts\n * const config = loadProjectConfig(process.cwd())\n *\n * if (config.isErr()) {\n * console.error(config.unwrapErr())\n * return\n * }\n *\n * console.log(config.unwrap().name)\n * ```\n *\n * @param cwd - Current working directory\n * @return {Result<ProjectSchema, string>}\n */\nexport function loadProjectConfig(cwd: string): Result<ProjectSchema, string> {\n const configPath = path.join(cwd, PROJECT_FILE_NAME)\n\n if (!fs.existsSync(configPath)) {\n return Err('Could not find your project configuration file!')\n }\n\n try {\n const json = JSON.parse(fs.readFileSync(configPath, 'utf8').toString())\n const config = projectSchema.safeParse(json)\n\n if (!config.success) {\n return Err(config.error.message)\n }\n\n return Ok(config.data)\n }\n catch (e: any) {\n return Err(e.message)\n }\n}\n\n/**\n * Load project information from current working directory.\n *\n * @example\n * ```ts\n * const info = await loadProjectInfo(process.cwd())\n *\n * if (info.isErr()) {\n * console.error(info.unwrapErr())\n * return\n * }\n *\n * console.log(info.unwrap().name)\n * ```\n *\n * @param cwd - Current working directory\n * @return {Promise<Result<ProjectInfo, string>>}\n */\nexport async function loadProjectInfo(cwd: string): Promise<Result<ProjectInfo, string>> {\n const spinner = ora().start('Fetching project information...')\n\n try {\n const pkg = loadPackageJson(cwd)\n const config = loadProjectConfig(cwd)\n\n if (pkg.isErr() || config.isErr()) {\n return Err('Could not find your project configuration file!')\n }\n\n const repos = config.unwrap().repos || []\n const paths = resolvePaths(cwd, config.unwrap().paths)\n\n if (paths.isErr()) {\n return Err(paths.unwrapErr())\n }\n\n const registries = await Promise.all(repos.map(async (r) => {\n const manifest = await fetchManifestConfig(r.repo)\n\n if (manifest.isErr()) {\n throw new Error(manifest.unwrapErr())\n }\n\n const registry = manifest.unwrap().find(m => m.name === r.registry)\n\n if (!registry) {\n throw new Error(`${r.registry} not found.`)\n }\n\n const installed = await glob(`**/*.vue`, {\n cwd: path.join(paths.unwrap().components, r.prefix || 'ui'),\n absolute: false,\n onlyFiles: true,\n }).then(\n files => files.length,\n )\n\n return {\n name: r.registry,\n repo: r.repo,\n version: registry.version || '0.0.0',\n description: registry.description || '',\n prefix: r.prefix || registry.prefix,\n access: registry.access,\n default: !!r.default,\n available: Object.entries(registry.items).reduce(\n (acc, [,count]) => acc + count,\n 0,\n ),\n installed,\n } satisfies ProjectInfo['registries'][number]\n }))\n\n return Ok({\n name: pkg.unwrap().name || '',\n description: pkg.unwrap().description || '',\n version: pkg.unwrap().version || '0.0.0',\n repos: repos.map(r => r.repo),\n registries,\n })\n }\n catch (e: any) {\n spinner.stop()\n return Err(e.message)\n }\n finally {\n spinner.stop()\n }\n}\n\n/**\n * Update `weme.config.json` from current working directory.\n *\n * @example\n * ```ts\n * await updateProjectConfig(process.cwd(), project, {\n * repo: {\n * repo: 'https://github.com/weme-ui/weme-ui',\n * registry: 'weme-ui/std',\n * prefix: 'ui',\n * default: true,\n * },\n * cssVars: {\n * colors: {\n * primary: 'blue',\n * },\n * },\n * })\n * ```\n *\n * @param cwd - Current working directory\n * @param project - Project configuration\n * @param updates - Updates to apply\n * @param updates.repo - Repository configuration to update\n * @param updates.cssVars - CSS variables to update\n */\nexport async function updateProjectConfig(\n cwd: string,\n project: ProjectSchema,\n updates: {\n repo?: ProjectSchema['repos'][number]\n cssVars?: InlineCssVars\n },\n) {\n await runStep('Updating project configuration...', async (spinner) => {\n if (\n updates.repo\n && project.repos.findIndex(\n r => r.repo === updates.repo?.repo\n && r.registry === updates.repo?.registry,\n ) === -1\n ) {\n project.repos.push(updates.repo)\n\n if (updates.repo.default) {\n project.repos.forEach((repo) => {\n repo.default = repo.registry === updates.repo?.registry\n })\n }\n }\n\n if (updates.cssVars) {\n project.unocss = project.unocss || {}\n project.unocss.cssVars = defu(project.unocss.cssVars || {}, updates.cssVars)\n }\n\n fs.writeFileSync(\n path.join(cwd, PROJECT_FILE_NAME),\n `${JSON.stringify(project, null, 2)}\\n`,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n )\n\n spinner.stop('Project configuration updated!')\n })\n}\n\n/**\n * Parse project paths.\n *\n * @example\n * ```ts\n * const paths = parsePaths(project.paths)\n *\n * if (paths.isErr()) {\n * console.error(paths.unwrapErr())\n * return\n * }\n *\n * console.log(paths.unwrap().components)\n * ```\n *\n * @param paths - Project paths\n * @return {Result<Required<ProjectPaths>, string>}\n */\nexport function parsePaths(paths: ProjectPaths): Result<Required<ProjectPaths>, string> {\n const result = projectPaths.safeParse(paths)\n\n if (!result.success) {\n return Err(result.error.message)\n }\n\n return Ok(result.data as Required<ProjectPaths>)\n}\n\n/**\n * Resolve project paths.\n *\n * @example\n * ```ts\n * const paths = resolvePaths(process.cwd(), project.paths)\n *\n * if (paths.isErr()) {\n * console.error(paths.unwrapErr())\n * return\n * }\n *\n * console.log(paths.unwrap().components)\n * ```\n *\n * @param cwd - Current working directory\n * @param paths - Project paths\n * @return {Result<Required<ProjectPaths>, string>}\n */\nexport function resolvePaths(cwd: string, paths: ProjectPaths): Result<Required<ProjectPaths>, string> {\n const resolved = parsePaths(paths)\n\n if (resolved.isErr()) {\n return Err(resolved.unwrapErr())\n }\n\n return Ok(\n Object.entries(resolved.unwrap())\n .reduce((acc, [key, value]) => {\n acc[key as keyof ProjectPaths] = path.resolve(cwd, value.replace('~', 'app'))\n return acc\n }, {} as Required<ProjectPaths>),\n )\n}\n\n/**\n * Resolve project paths.\n *\n * @example\n * ```ts\n * const paths = resolveProjectPaths(process.cwd())\n *\n * if (paths.isErr()) {\n * console.error(paths.unwrapErr())\n * return\n * }\n *\n * console.log(paths.unwrap().components)\n * ```\n *\n * @param cwd - Current working directory\n * @param resolved - Resolve paths\n * @return {Result<Required<ProjectPaths>, string>}\n */\nexport function resolveProjectPaths(cwd: string, resolved = false): Result<Required<ProjectPaths>, string> {\n const project = loadProjectConfig(cwd)\n\n if (project.isErr()) {\n return Err(project.unwrapErr())\n }\n\n return Ok(\n resolved\n ? resolvePaths(cwd, project.unwrap().paths).unwrap()\n : project.unwrap().paths as Required<ProjectPaths>,\n )\n}\n\n/**\n * Install registry items.\n *\n * @example\n * ```ts\n * await installRegistryItems(\n * process.cwd(),\n * 'weme-ui/weme-ui',\n * 'weme-ui/std',\n * { name: 'button' },\n * )\n * ```\n *\n * @param cwd - Current working directory\n * @param repo - Repository name\n * @param registryName - Registry name\n * @param project - Project configuration\n * @param options - Options\n * @param options.name - Registry item name\n * @param options.type - Registry item type\n */\nexport async function installRegistryItems(\n cwd: string,\n repo: string,\n registryName: string,\n project: ProjectSchema,\n options?: {\n name?: string | string[]\n type?: RegistryItemType\n },\n) {\n const manifest = await fetchManifestConfig(repo)\n\n if (manifest.isErr()) {\n p.log.error(manifest.unwrapErr())\n return\n }\n\n const registry = manifest.unwrap().find(r => r.name === registryName)\n\n if (!registry) {\n p.log.error('Registry not found.')\n return\n }\n\n const { dependencies, devDependencies, files, cssVars } = await fetchRegistryItems(\n repo,\n registry.name,\n options,\n )\n\n await runStep('Creating registry item files...', async (spinner) => {\n const paths = resolvePaths(cwd, project.paths)\n\n if (paths.isErr()) {\n p.log.error(paths.unwrapErr())\n return\n }\n\n const prefix = project.repos.find(r => r.registry === registry.name)!.prefix || 'ui'\n\n await Promise.all(files.map(async (file) => {\n spinner.message(`Creating ${file.path}...`)\n\n const content = await fetchURL(\n `https://raw.githubusercontent.com/${getGithubRepoName(repo)}/refs/heads/main/${registry.directory}/${file.path}`,\n )\n\n if (!content) {\n p.log.error(`Failed to fetch ${file.path}.`)\n return\n }\n\n switch (file.type) {\n case 'component':\n case 'type':\n case 'style':\n createFile(content, file.path.replace('components', path.join(paths.unwrap().components, prefix)))\n break\n\n case 'composable':\n createFile(content, file.path.replace('composables', paths.unwrap().composables))\n break\n\n case 'plugin':\n createFile(content, file.path.replace('plugins', paths.unwrap().plugins))\n break\n\n case 'util':\n createFile(content, file.path.replace('utils', paths.unwrap().utils))\n break\n\n case 'file':\n p.log.warn('File type is not supported yet.')\n break\n }\n }))\n\n spinner.stop('Registry item files created!')\n })\n\n await runStep('Installing dependencies...', async (spinner) => {\n await installDependencies({\n dependencies,\n devDependencies,\n }, { cwd })\n\n spinner.stop('Dependencies installed!')\n })\n\n await updateProjectConfig(cwd, project, { cssVars })\n}\n\n/**\n * Create file.\n *\n * @example\n * ```ts\n * createFile(content, 'components/ui/button.vue')\n * ```\n *\n * @param content - File content\n * @param dest - File destination\n */\nfunction createFile(content: string, dest: string) {\n if (!content)\n return\n\n if (fs.existsSync(dest))\n return\n\n const dirname = path.dirname(dest)\n\n if (!fs.existsSync(dirname))\n fs.mkdirSync(dirname, { recursive: true })\n\n fs.writeFileSync(dest, content, {\n encoding: 'utf8',\n flag: 'w',\n })\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry-_alKtnin.mjs","names":["cwd","e: any","getGithubRepoName","e: any","cwd"],"sources":["../src/utils/result.ts","../src/utils/utilities.ts","../src/utils/schema/package.ts","../src/utils/fetch.ts","../src/utils/schema/registry.ts"],"sourcesContent":["type ResultOptions<T, E> = { ok: true, value: T } | { ok: false, error: E }\n\nclass Result<T, E> {\n private readonly result: ResultOptions<T, E>\n\n constructor(result: ResultOptions<T, E>) {\n this.result = result\n }\n\n match<A, B = A>(success: (value: T) => A, error: (error: E) => B) {\n return this.result.ok\n ? success(this.result.value)\n : error(this.result.error)\n }\n\n map<A>(fn: (value: T) => A) {\n return this.match(\n value => Ok(fn(value)),\n error => Err(error),\n )\n }\n\n unwrap(): T {\n return this.match(\n value => value,\n () => {\n throw new Error('Called `.unwrap()` on a non `Ok` value.')\n },\n )\n }\n\n unwrapErr(): E {\n return this.match(\n () => {\n throw new Error('Called `.unwrapErr()` on a non `Err` value.')\n },\n error => error,\n )\n }\n\n expect(message: string) {\n return this.match(\n value => value,\n () => {\n throw new Error(message)\n },\n )\n }\n\n expectErr(message: string) {\n return this.match(\n () => {\n throw new Error(message)\n },\n error => error,\n )\n }\n\n isOk() {\n return this.match(\n () => true,\n () => false,\n )\n }\n\n isErr() {\n return this.match(\n () => false,\n () => true,\n )\n }\n}\n\nexport function Ok<T>(value: T) {\n return new Result<T, never>({ ok: true, value })\n}\n\nexport function Err<E>(error: E) {\n return new Result<never, E>({ ok: false, error })\n}\n\nexport type { Result }\n","import * as p from '@clack/prompts'\nimport handlebars from 'handlebars'\nimport { camelCase, kebabCase, pascalCase, titleCase } from 'scule'\n\nhandlebars.registerHelper('titleCase', value => titleCase(value))\nhandlebars.registerHelper('kebabCase', value => kebabCase(value))\nhandlebars.registerHelper('camelCase', value => camelCase(value))\nhandlebars.registerHelper('pascalCase', value => pascalCase(value))\nhandlebars.registerHelper('lowerCase', value => value.toLowerCase())\n\nexport function compile(input: string, data?: Record<string, any>) {\n return handlebars.compile(input)(data)\n}\n\nexport function merge(...packages: string[]): string[] {\n return packages.reduce((acc, item) => {\n if (!acc.includes(item))\n acc.push(item)\n return acc\n }, [] as string[])\n}\n\nexport async function runStep<T>(\n loading: string,\n fn: (spinner: ReturnType<typeof p.spinner>) => Promise<T>,\n): Promise<T> {\n const spinner = p.spinner()\n\n spinner.start(loading)\n\n return fn(spinner)\n}\n","import type { OperationOptions } from 'nypm'\nimport type { PackageJson } from 'pkg-types'\nimport type { Result } from '../result'\nimport fs from 'node:fs'\nimport chalk from 'chalk'\nimport { addDependency, runScript } from 'nypm'\nimport path from 'pathe'\nimport { Err, Ok } from '../result'\nimport { merge, runStep } from '../utilities'\n\n/**\n * Load `package.json` from current working directory.\n *\n * @example\n * ```ts\n * const pkg = loadPackageJson(process.cwd())\n *\n * if (pkg.isErr()) {\n * console.error(pkg.unwrapErr())\n * return\n * }\n *\n * console.log(pkg.unwrap().name)\n * ```\n *\n * @param cwd - Current working directory\n * @return {Result<PackageJson, string>}\n */\nexport function loadPackageJson(cwd: string): Result<PackageJson, string> {\n if (!fs.existsSync(path.join(cwd, 'package.json')))\n return Err('Could not find `package.json`!')\n\n try {\n const content = fs.readFileSync(path.join(cwd, 'package.json'), 'utf8')\n\n if (!content)\n return Err('`package.json` is empty!')\n\n return Ok<PackageJson>(JSON.parse(content))\n }\n catch (e: any) {\n return Err(e.message)\n }\n}\n\n/**\n * Install dependencies to current working directory.\n *\n * @example\n * ```ts\n * await installDependencies(['@vueuse/core', 'nuxt'], { cwd: process.cwd() })\n * ```\n *\n * @param packages - Packages to install\n * @param options - Options for `nypm`\n */\nexport async function installDependencies(\n packages?: string[] | {\n dependencies?: string[]\n devDependencies?: string[]\n },\n options: OperationOptions = {},\n) {\n await runStep('Installing dependencies...', async (spinner) => {\n const dependencies = Array.isArray(packages)\n ? packages\n : packages?.dependencies || []\n\n const devDependencies = Array.isArray(packages)\n ? []\n : packages?.devDependencies || []\n\n await addDependency(merge(...dependencies), { ...options, silent: true })\n await addDependency(merge(...devDependencies), { ...options, dev: true, silent: true })\n\n spinner.stop('Dependencies installed.')\n })\n}\n\n/**\n * Run `dev:prepare` script in current working directory.\n *\n * @example\n * ```ts\n * await runDevPrepare(process.cwd())\n * ```\n *\n * @param cwd - Current working directory\n */\nexport async function runDevPrepare(cwd: string) {\n await runStep(`Running ${chalk.cyan('dev:prepare')}...`, async (spinner) => {\n await runScript('dev:prepare', {\n cwd,\n silent: true,\n })\n\n spinner.stop(`${chalk.cyan('dev:prepare')} done.`)\n })\n}\n","import makeFetch from 'make-fetch-happen'\n\nconst fetch = makeFetch.defaults({\n cachePath: '.weme',\n})\n\nexport async function fetchJSON<T>(url: string) {\n const res = await fetch(url)\n return res.json() as Promise<T>\n}\n\nexport async function fetchURL<T extends string>(url: string) {\n const res = await fetch(url)\n return res.text() as Promise<T>\n}\n\nexport async function fetchBinary(url: string) {\n const res = await fetch(url)\n return res.arrayBuffer() as Promise<ArrayBuffer>\n}\n\nexport function getGithubRepoName(url: string) {\n return url\n .trim()\n .replace(/^https?:\\/\\/github.com\\//, '')\n .replace(/\\.git$/, '')\n}\n","import type { InlineCssVars, ManifestSchema, RegistryItem, RegistryItemFile, RegistryItemType, RegistrySchema } from '@weme-ui/schema'\nimport type { Result } from '../result'\nimport fs from 'node:fs'\nimport { exit } from 'node:process'\nimport * as p from '@clack/prompts'\nimport { MANIFEST_FILE_NAME, manifestSchema, REGISTRY_FILE_NAME, registrySchema } from '@weme-ui/schema'\nimport chalk from 'chalk'\nimport path from 'pathe'\nimport { fetchJSON } from '../fetch'\nimport { Err, Ok } from '../result'\nimport { runStep } from '../utilities'\n\nexport const REGISTRY_DIRNAME = 'registry'\n\nexport interface NormalizedRegistryItems {\n dependencies: string[]\n devDependencies: string[]\n files: RegistryItemFile[]\n cssVars: InlineCssVars\n}\n\n/**\n * Fetch `manifest.json` from repository.\n *\n * @example\n * ```ts\n * const result = await fetchManifestConfig('weme-ui/weme-ui')\n *\n * if (result.isErr()) {\n * console.error(result.unwrapErr())\n * return\n * }\n *\n * console.log(result.unwrap())\n * ```\n *\n * @param repo - Repository name\n * @return {Result<ManifestSchema[], string>}\n */\nexport async function fetchManifestConfig(repo: string): Promise<Result<ManifestSchema[], string>> {\n try {\n const json = await fetchJSON<ManifestSchema[]>(\n `https://raw.githubusercontent.com/${getGithubRepoName(repo)}/refs/heads/main/${REGISTRY_DIRNAME}/${MANIFEST_FILE_NAME}`,\n )\n\n const result = manifestSchema.array().safeParse(json)\n\n if (!result.success) {\n return Err(result.error.message)\n }\n\n return Ok(result.data)\n }\n catch (e: any) {\n return Err(e.message)\n }\n}\n\n/**\n * Fetch `registry.json` from repository.\n *\n * @example\n * ```ts\n * const result = await fetchRegistryConfig('weme-ui/weme-ui', 'weme-ui/std')\n *\n * if (result.isErr()) {\n * console.error(result.unwrapErr())\n * return\n * }\n *\n * console.log(result.unwrap())\n * ```\n *\n * @param repo - Repository name\n * @param registry - Registry name\n * @return {Result<RegistrySchema, string>}\n */\nexport async function fetchRegistryConfig(repo: string, registry: string): Promise<Result<RegistrySchema, string>> {\n try {\n const manifest = await fetchManifestConfig(repo)\n\n if (manifest.isErr()) {\n return Err(manifest.unwrapErr())\n }\n\n const config = manifest.unwrap().find(r => r.name === registry)\n\n if (!config) {\n return Err('Registry not found.')\n }\n\n const json = await fetchJSON<RegistrySchema>(\n `https://raw.githubusercontent.com/${getGithubRepoName(repo)}/refs/heads/main/${config.directory}/${REGISTRY_FILE_NAME}`,\n )\n\n const result = registrySchema.safeParse(json)\n\n if (!result.success) {\n return Err(result.error.message)\n }\n\n return Ok(result.data)\n }\n catch (e: any) {\n return Err(e.message)\n }\n}\n\n/**\n * Load `registry.json` from current working directory.\n *\n * @example\n * ```ts\n * const config = loadRegistryConfig(process.cwd())\n *\n * if (config.isErr()) {\n * console.error(config.unwrapErr())\n * return\n * }\n *\n * console.log(config.unwrap().name)\n * ```\n *\n * @param cwd - Current working directory\n * @return {Result<RegistrySchema, string>}\n */\nexport function loadRegistryConfig(cwd: string): Result<RegistrySchema, string> {\n try {\n const configPath = path.join(cwd, REGISTRY_FILE_NAME)\n\n if (!fs.existsSync(configPath)) {\n return Err('Could not find your registry configuration file!')\n }\n\n const json = JSON.parse(fs.readFileSync(configPath, 'utf8').toString())\n const result = registrySchema.safeParse(json)\n\n if (!result.success) {\n return Err(result.error.message)\n }\n\n return Ok(result.data)\n }\n catch (e: any) {\n return Err(e.message)\n }\n}\n\n/**\n * Select registry from repository.\n *\n * @example\n * ```ts\n * const registry = await selectRegistry('weme-ui/weme-ui')\n *\n * if (registry.isErr()) {\n * console.error(registry.unwrapErr())\n * return\n * }\n *\n * console.log(registry.unwrap().name)\n * ```\n */\nexport async function selectRegistry(repo: string) {\n return await runStep('Fetching repository information...', async (spinner) => {\n const repository = await fetchManifestConfig(repo)\n\n if (repository.isErr()) {\n spinner.stop('Failed to fetch repository configuration file.', 1)\n exit(0)\n }\n\n const registries = repository.unwrap().map(r => ({\n label: r.name,\n value: r.name,\n hint: r.description,\n }))\n\n spinner.stop(chalk.dim('Repository information fetched.'))\n\n const registry = await p.select({\n message: 'What is the default registry?',\n options: registries,\n initialValue: registries[0].value,\n })\n\n if (p.isCancel(registry)) {\n p.cancel('Operation cancelled.')\n exit(0)\n }\n\n const registryConfig = repository.unwrap().find(r => r.name === registry)!\n\n return {\n name: registryConfig.name,\n directory: registryConfig.directory,\n prefix: registryConfig.prefix,\n access: registryConfig.access,\n }\n })\n}\n\n/**\n * Fetch registry items.\n *\n * @example\n * ```ts\n * const items = await fetchRegistryItems(\n * 'weme-ui/weme-ui',\n * 'weme-ui/std',\n * 'component',\n * 'button',\n * )\n *\n * if (items.isErr()) {\n * console.error(items.unwrapErr())\n * return\n * }\n *\n * console.log(items.unwrap().dependencies)\n * ```\n *\n * @param repo - Repository name\n * @param registry - Registry name\n * @param options - Options\n * @param options.name - Registry item name\n * @param options.type - Registry item type\n * @return {Result<NormalizedRegistryItems, string>}\n */\nexport async function fetchRegistryItems(\n repo: string,\n registry: string,\n options?: {\n name?: string | string[]\n type?: RegistryItemType\n },\n): Promise<NormalizedRegistryItems> {\n return await runStep('Fetching registry items...', async (spinner) => {\n const registryConfig = await fetchRegistryConfig(repo, registry)\n\n if (registryConfig.isErr()) {\n spinner.stop('Failed to fetch registry configuration.', 1)\n exit(0)\n }\n\n const items = normalizeRegistryItems(\n registryConfig.unwrap().items.filter((item) => {\n if (options?.type && item.type !== options.type) {\n return false\n }\n\n if (options?.name) {\n return Array.isArray(options.name)\n ? options.name.includes(item.name)\n : item.name === options.name\n }\n\n return true\n }),\n )\n\n spinner.stop('Registry items fetched.')\n\n return items\n })\n}\n\n/**\n * Normalize registry items.\n *\n * @example\n * ```ts\n * const items = normalizeRegistryItems(config.items)\n *\n * console.log(items.dependencies)\n * ```\n *\n * @param items - Registry items\n * @return {NormalizedRegistryItems}\n */\nexport function normalizeRegistryItems(items: RegistryItem[]): NormalizedRegistryItems {\n const dependencies = items.reduce((acc, item) => {\n acc.push(...(item.dependencies || []))\n return acc\n }, [] as string[])\n\n const devDependencies = items.reduce((acc, item) => {\n acc.push(...(item.devDependencies || []))\n return acc\n }, [] as string[])\n\n const files = items.reduce((acc, item) => {\n acc.push(...(item.files || []))\n return acc\n }, [] as RegistryItemFile[])\n\n const cssVars = items.reduce((acc, item) => {\n const nested = item.cssVars\n if (nested && Object.keys(nested).length > 0) {\n Object.entries(nested).forEach(\n ([name, value]) => {\n Object.entries(value).forEach(([subName, subValue]) => {\n acc[`${name}-${subName}`] = subValue\n })\n },\n )\n }\n\n return acc\n }, {} as InlineCssVars)\n\n return {\n dependencies,\n devDependencies,\n files,\n cssVars,\n }\n}\n\n/**\n * Get github repository name from url.\n *\n * @example\n * ```ts\n * const name = getGithubRepoName('https://github.com/weme-ui/weme-ui')\n *\n * console.log(name) // weme-ui/weme-ui\n * ```\n *\n * @param url - Github repository url\n * @return {string}\n */\nexport function getGithubRepoName(url: string): string {\n return url\n .trim()\n .replace(/^https?:\\/\\/github.com\\//, '')\n .replace(/\\.git$/, '')\n}\n"],"mappings":"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"}