@weme-ui/weme-ui 0.1.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,341 @@
1
+ import { exit } from "node:process";
2
+ import fs from "node:fs";
3
+ import * as p from "@clack/prompts";
4
+ import { MANIFEST_FILE_NAME, REGISTRY_FILE_NAME, manifestSchema, registrySchema } from "@weme-ui/schema";
5
+ import chalk from "chalk";
6
+ import path from "pathe";
7
+ import makeFetch from "make-fetch-happen";
8
+ import handlebars from "handlebars";
9
+ import { camelCase, kebabCase, pascalCase, titleCase } from "scule";
10
+
11
+ //#region src/utils/fetch.ts
12
+ const fetch = makeFetch.defaults({ cachePath: ".weme" });
13
+ async function fetchJSON(url) {
14
+ return (await fetch(url)).json();
15
+ }
16
+ async function fetchURL(url) {
17
+ return (await fetch(url)).text();
18
+ }
19
+ async function fetchBinary(url) {
20
+ return (await fetch(url)).arrayBuffer();
21
+ }
22
+ function getGithubRepoName$1(url) {
23
+ return url.trim().replace(/^https?:\/\/github.com\//, "").replace(/\.git$/, "");
24
+ }
25
+
26
+ //#endregion
27
+ //#region src/utils/result.ts
28
+ var Result = class {
29
+ result;
30
+ constructor(result) {
31
+ this.result = result;
32
+ }
33
+ match(success, error) {
34
+ return this.result.ok ? success(this.result.value) : error(this.result.error);
35
+ }
36
+ map(fn) {
37
+ return this.match((value) => Ok(fn(value)), (error) => Err(error));
38
+ }
39
+ unwrap() {
40
+ return this.match((value) => value, () => {
41
+ throw new Error("Called `.unwrap()` on a non `Ok` value.");
42
+ });
43
+ }
44
+ unwrapErr() {
45
+ return this.match(() => {
46
+ throw new Error("Called `.unwrapErr()` on a non `Err` value.");
47
+ }, (error) => error);
48
+ }
49
+ expect(message) {
50
+ return this.match((value) => value, () => {
51
+ throw new Error(message);
52
+ });
53
+ }
54
+ expectErr(message) {
55
+ return this.match(() => {
56
+ throw new Error(message);
57
+ }, (error) => error);
58
+ }
59
+ isOk() {
60
+ return this.match(() => true, () => false);
61
+ }
62
+ isErr() {
63
+ return this.match(() => false, () => true);
64
+ }
65
+ };
66
+ function Ok(value) {
67
+ return new Result({
68
+ ok: true,
69
+ value
70
+ });
71
+ }
72
+ function Err(error) {
73
+ return new Result({
74
+ ok: false,
75
+ error
76
+ });
77
+ }
78
+
79
+ //#endregion
80
+ //#region src/utils/utilities.ts
81
+ handlebars.registerHelper("titleCase", (value) => titleCase(value));
82
+ handlebars.registerHelper("kebabCase", (value) => kebabCase(value));
83
+ handlebars.registerHelper("camelCase", (value) => camelCase(value));
84
+ handlebars.registerHelper("pascalCase", (value) => pascalCase(value));
85
+ handlebars.registerHelper("lowerCase", (value) => value.toLowerCase());
86
+ function compile(input, data) {
87
+ return handlebars.compile(input)(data);
88
+ }
89
+ function merge(...packages) {
90
+ return packages.reduce((acc, item) => {
91
+ if (!acc.includes(item)) acc.push(item);
92
+ return acc;
93
+ }, []);
94
+ }
95
+ async function runStep(loading, fn) {
96
+ const spinner = p.spinner();
97
+ spinner.start(loading);
98
+ return fn(spinner);
99
+ }
100
+
101
+ //#endregion
102
+ //#region src/utils/schema/registry.ts
103
+ const REGISTRY_DIRNAME = "registry";
104
+ /**
105
+ * Fetch `manifest.json` from repository.
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * const result = await fetchManifestConfig('weme-ui/weme-ui')
110
+ *
111
+ * if (result.isErr()) {
112
+ * console.error(result.unwrapErr())
113
+ * return
114
+ * }
115
+ *
116
+ * console.log(result.unwrap())
117
+ * ```
118
+ *
119
+ * @param repo - Repository name
120
+ * @return {Result<ManifestSchema[], string>}
121
+ */
122
+ async function fetchManifestConfig(repo) {
123
+ try {
124
+ const json = await fetchJSON(`https://raw.githubusercontent.com/${getGithubRepoName(repo)}/refs/heads/main/${REGISTRY_DIRNAME}/${MANIFEST_FILE_NAME}`);
125
+ const result = manifestSchema.array().safeParse(json);
126
+ if (!result.success) return Err(result.error.message);
127
+ return Ok(result.data);
128
+ } catch (e) {
129
+ return Err(e.message);
130
+ }
131
+ }
132
+ /**
133
+ * Fetch `registry.json` from repository.
134
+ *
135
+ * @example
136
+ * ```ts
137
+ * const result = await fetchRegistryConfig('weme-ui/weme-ui', 'weme-ui/std')
138
+ *
139
+ * if (result.isErr()) {
140
+ * console.error(result.unwrapErr())
141
+ * return
142
+ * }
143
+ *
144
+ * console.log(result.unwrap())
145
+ * ```
146
+ *
147
+ * @param repo - Repository name
148
+ * @param registry - Registry name
149
+ * @return {Result<RegistrySchema, string>}
150
+ */
151
+ async function fetchRegistryConfig(repo, registry) {
152
+ try {
153
+ const manifest = await fetchManifestConfig(repo);
154
+ if (manifest.isErr()) return Err(manifest.unwrapErr());
155
+ const config = manifest.unwrap().find((r) => r.name === registry);
156
+ if (!config) return Err("Registry not found.");
157
+ const json = await fetchJSON(`https://raw.githubusercontent.com/${getGithubRepoName(repo)}/refs/heads/main/${config.directory}/${REGISTRY_FILE_NAME}`);
158
+ const result = registrySchema.safeParse(json);
159
+ if (!result.success) return Err(result.error.message);
160
+ return Ok(result.data);
161
+ } catch (e) {
162
+ return Err(e.message);
163
+ }
164
+ }
165
+ /**
166
+ * Load `registry.json` from current working directory.
167
+ *
168
+ * @example
169
+ * ```ts
170
+ * const config = loadRegistryConfig(process.cwd())
171
+ *
172
+ * if (config.isErr()) {
173
+ * console.error(config.unwrapErr())
174
+ * return
175
+ * }
176
+ *
177
+ * console.log(config.unwrap().name)
178
+ * ```
179
+ *
180
+ * @param cwd - Current working directory
181
+ * @return {Result<RegistrySchema, string>}
182
+ */
183
+ function loadRegistryConfig(cwd$1) {
184
+ try {
185
+ const configPath = path.join(cwd$1, REGISTRY_FILE_NAME);
186
+ if (!fs.existsSync(configPath)) return Err("Could not find your registry configuration file!");
187
+ const json = JSON.parse(fs.readFileSync(configPath, "utf8").toString());
188
+ const result = registrySchema.safeParse(json);
189
+ if (!result.success) return Err(result.error.message);
190
+ return Ok(result.data);
191
+ } catch (e) {
192
+ return Err(e.message);
193
+ }
194
+ }
195
+ /**
196
+ * Select registry from repository.
197
+ *
198
+ * @example
199
+ * ```ts
200
+ * const registry = await selectRegistry('weme-ui/weme-ui')
201
+ *
202
+ * if (registry.isErr()) {
203
+ * console.error(registry.unwrapErr())
204
+ * return
205
+ * }
206
+ *
207
+ * console.log(registry.unwrap().name)
208
+ * ```
209
+ */
210
+ async function selectRegistry(repo) {
211
+ return await runStep("Fetching repository information...", async (spinner) => {
212
+ const repository = await fetchManifestConfig(repo);
213
+ if (repository.isErr()) {
214
+ spinner.stop("Failed to fetch repository configuration file.", 1);
215
+ exit(0);
216
+ }
217
+ const registries = repository.unwrap().map((r) => ({
218
+ label: r.name,
219
+ value: r.name,
220
+ hint: r.description
221
+ }));
222
+ spinner.stop(chalk.dim("Repository information fetched."));
223
+ const registry = await p.select({
224
+ message: "What is the default registry?",
225
+ options: registries,
226
+ initialValue: registries[0].value
227
+ });
228
+ if (p.isCancel(registry)) {
229
+ p.cancel("Operation cancelled.");
230
+ exit(0);
231
+ }
232
+ const registryConfig = repository.unwrap().find((r) => r.name === registry);
233
+ return {
234
+ name: registryConfig.name,
235
+ directory: registryConfig.directory,
236
+ prefix: registryConfig.prefix,
237
+ access: registryConfig.access
238
+ };
239
+ });
240
+ }
241
+ /**
242
+ * Fetch registry items.
243
+ *
244
+ * @example
245
+ * ```ts
246
+ * const items = await fetchRegistryItems(
247
+ * 'weme-ui/weme-ui',
248
+ * 'weme-ui/std',
249
+ * 'component',
250
+ * 'button',
251
+ * )
252
+ *
253
+ * if (items.isErr()) {
254
+ * console.error(items.unwrapErr())
255
+ * return
256
+ * }
257
+ *
258
+ * console.log(items.unwrap().dependencies)
259
+ * ```
260
+ *
261
+ * @param repo - Repository name
262
+ * @param registry - Registry name
263
+ * @param options - Options
264
+ * @param options.name - Registry item name
265
+ * @param options.type - Registry item type
266
+ * @return {Result<NormalizedRegistryItems, string>}
267
+ */
268
+ async function fetchRegistryItems(repo, registry, options) {
269
+ return await runStep("Fetching registry items...", async (spinner) => {
270
+ const registryConfig = await fetchRegistryConfig(repo, registry);
271
+ if (registryConfig.isErr()) {
272
+ spinner.stop("Failed to fetch registry configuration.", 1);
273
+ exit(0);
274
+ }
275
+ const items = normalizeRegistryItems(registryConfig.unwrap().items.filter((item) => {
276
+ if (options?.type && item.type !== options.type) return false;
277
+ if (options?.name) return Array.isArray(options.name) ? options.name.includes(item.name) : item.name === options.name;
278
+ return true;
279
+ }));
280
+ spinner.stop("Registry items fetched.");
281
+ return items;
282
+ });
283
+ }
284
+ /**
285
+ * Normalize registry items.
286
+ *
287
+ * @example
288
+ * ```ts
289
+ * const items = normalizeRegistryItems(config.items)
290
+ *
291
+ * console.log(items.dependencies)
292
+ * ```
293
+ *
294
+ * @param items - Registry items
295
+ * @return {NormalizedRegistryItems}
296
+ */
297
+ function normalizeRegistryItems(items) {
298
+ return {
299
+ dependencies: items.reduce((acc, item) => {
300
+ acc.push(...item.dependencies || []);
301
+ return acc;
302
+ }, []),
303
+ devDependencies: items.reduce((acc, item) => {
304
+ acc.push(...item.devDependencies || []);
305
+ return acc;
306
+ }, []),
307
+ files: items.reduce((acc, item) => {
308
+ acc.push(...item.files || []);
309
+ return acc;
310
+ }, []),
311
+ cssVars: items.reduce((acc, item) => {
312
+ const nested = item.cssVars;
313
+ if (nested && Object.keys(nested).length > 0) Object.entries(nested).forEach(([name, value]) => {
314
+ Object.entries(value).forEach(([subName, subValue]) => {
315
+ acc[`${name}-${subName}`] = subValue;
316
+ });
317
+ });
318
+ return acc;
319
+ }, {})
320
+ };
321
+ }
322
+ /**
323
+ * Get github repository name from url.
324
+ *
325
+ * @example
326
+ * ```ts
327
+ * const name = getGithubRepoName('https://github.com/weme-ui/weme-ui')
328
+ *
329
+ * console.log(name) // weme-ui/weme-ui
330
+ * ```
331
+ *
332
+ * @param url - Github repository url
333
+ * @return {string}
334
+ */
335
+ function getGithubRepoName(url) {
336
+ return url.trim().replace(/^https?:\/\/github.com\//, "").replace(/\.git$/, "");
337
+ }
338
+
339
+ //#endregion
340
+ export { selectRegistry as a, runStep as c, fetchBinary as d, fetchURL as f, loadRegistryConfig as i, Err as l, fetchManifestConfig as n, compile as o, getGithubRepoName$1 as p, fetchRegistryItems as r, merge as s, REGISTRY_DIRNAME as t, Ok as u };
341
+ //# sourceMappingURL=registry-BChtLWfr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-BChtLWfr.mjs","names":["getGithubRepoName","e: any","cwd"],"sources":["../src/utils/fetch.ts","../src/utils/result.ts","../src/utils/utilities.ts","../src/utils/schema/registry.ts"],"sourcesContent":["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","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 { 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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"}
@@ -0,0 +1,147 @@
1
+ import { c as runStep, f as fetchURL, o as compile, t as REGISTRY_DIRNAME } from "./registry-BChtLWfr.mjs";
2
+ import { r as runDevPrepare, t as installDependencies } from "./package-e8qxd1tJ.mjs";
3
+ import { exit } from "node:process";
4
+ import fs, { existsSync } from "node:fs";
5
+ import * as p from "@clack/prompts";
6
+ import chalk from "chalk";
7
+ import path from "pathe";
8
+
9
+ //#region src/commands/init/registry/context.ts
10
+ async function createContext(args) {
11
+ args.cwd = path.resolve(args.cwd);
12
+ const answers = await p.group({
13
+ name: async () => {
14
+ if (args.name) return args.name.trim().toLowerCase();
15
+ return p.text({
16
+ message: "What is the name of the registry?",
17
+ placeholder: "weme-ui/std",
18
+ defaultValue: args.name?.trim().toLowerCase(),
19
+ validate: (value) => {
20
+ if (!value) return "Name is required";
21
+ if (value.includes(" ")) return "Name should not contain spaces";
22
+ if (!value.includes("/")) return "Name should contain slashes, e.g. weme-ui/std";
23
+ if (existsSync(path.join(args.cwd, value))) return "Registry already exists";
24
+ }
25
+ });
26
+ },
27
+ description: () => p.text({
28
+ message: "What is the description of the registry?",
29
+ placeholder: "The standard components for Weme UI.",
30
+ defaultValue: ""
31
+ }),
32
+ version: () => p.text({
33
+ message: "What is the version of the registry?",
34
+ placeholder: "0.0.0",
35
+ validate: (value) => {
36
+ if (!value) return "Version is required";
37
+ }
38
+ }),
39
+ prefix: () => p.text({
40
+ message: "What is the prefix of the registry?",
41
+ placeholder: "ui",
42
+ defaultValue: "ui"
43
+ }),
44
+ access: () => p.select({
45
+ message: "Which access do you want to use?",
46
+ options: [{
47
+ label: "Public",
48
+ value: "public"
49
+ }, {
50
+ label: "Private",
51
+ value: "private"
52
+ }],
53
+ initialValue: "public"
54
+ }),
55
+ author: () => p.text({
56
+ message: "What is the author of the registry?",
57
+ placeholder: "Allen Luo <luoyi@mouji.net>",
58
+ defaultValue: ""
59
+ }),
60
+ homepage: () => p.text({
61
+ message: "What is the homepage of the registry?",
62
+ placeholder: "https://github.com/weme-ui/weme-ui",
63
+ defaultValue: ""
64
+ }),
65
+ github: () => p.text({
66
+ message: "What is the github of the registry?",
67
+ placeholder: "https://github.com/weme-ui/weme-ui",
68
+ defaultValue: ""
69
+ })
70
+ }, { onCancel: () => {
71
+ p.cancel("Operation cancelled.");
72
+ exit(0);
73
+ } });
74
+ return {
75
+ ...answers,
76
+ directory: path.join(REGISTRY_DIRNAME, answers.name.split("/")[1]),
77
+ cwd: args.cwd
78
+ };
79
+ }
80
+
81
+ //#endregion
82
+ //#region src/commands/init/registry/templates.ts
83
+ async function generateTemplates(ctx) {
84
+ await runStep("Generating files...", async (spinner) => {
85
+ await Promise.all([
86
+ "utils/props.ts.hbs",
87
+ "utils/slots.ts.hbs",
88
+ "utils/styles.ts.hbs",
89
+ "README.md.hbs",
90
+ "nuxt.config.ts.hbs",
91
+ "package.json.hbs",
92
+ "registry.json.hbs",
93
+ "tsconfig.json.hbs",
94
+ "uno.config.ts.hbs"
95
+ ].map(async (tpl) => {
96
+ try {
97
+ const name = tpl.replace(".hbs", "");
98
+ spinner.message(`Generating ${name}...`);
99
+ const text = await fetchURL(`https://raw.githubusercontent.com/weme-ui/templates/refs/heads/main/registry/${tpl}`);
100
+ if (!text) throw new Error(`Failed to fetch ${name}.`);
101
+ const content = compile(text, ctx);
102
+ if (!content) throw new Error(`Failed to compile ${name}.`);
103
+ const filePath = path.join(ctx.cwd, ctx.directory, name);
104
+ const dirname = path.dirname(filePath);
105
+ if (!fs.existsSync(dirname)) fs.mkdirSync(dirname, { recursive: true });
106
+ fs.writeFileSync(filePath, content, {
107
+ encoding: "utf8",
108
+ flag: "w"
109
+ });
110
+ } catch (e) {
111
+ spinner.stop(e.message);
112
+ }
113
+ }));
114
+ spinner.stop("Files generated.");
115
+ });
116
+ }
117
+
118
+ //#endregion
119
+ //#region src/commands/init/registry/index.ts
120
+ async function registry_default(args) {
121
+ p.intro(chalk.bold.blue("✨ Initializing Weme UI Registry"));
122
+ const ctx = await createContext(args);
123
+ const cwd$1 = path.join(ctx.cwd, ctx.directory);
124
+ await generateTemplates(ctx);
125
+ await installDependencies([
126
+ "@vueuse/core",
127
+ "clsx",
128
+ "tailwind-merge",
129
+ "tailwind-variants",
130
+ "reka-ui",
131
+ "unocss",
132
+ "nuxt",
133
+ "vue",
134
+ "vue-router"
135
+ ], { cwd: cwd$1 });
136
+ await runDevPrepare(cwd$1);
137
+ p.note([
138
+ `1. Enter the registry directory: ${chalk.cyan(`cd ${ctx.directory}`)}`,
139
+ `2. Start development server: ${chalk.cyan("pnpm dev")}`,
140
+ `3. Build registry: ${chalk.cyan("pnpm @weme-ui/nuxt build")}`
141
+ ].join("\n"), "Next?");
142
+ p.outro("🥤 All done!");
143
+ }
144
+
145
+ //#endregion
146
+ export { registry_default as default };
147
+ //# sourceMappingURL=registry-Cm_OqNvK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-Cm_OqNvK.mjs","names":["e: any","cwd"],"sources":["../src/commands/init/registry/context.ts","../src/commands/init/registry/templates.ts","../src/commands/init/registry/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { exit } from 'node:process'\nimport * as p from '@clack/prompts'\nimport path from 'pathe'\nimport { REGISTRY_DIRNAME } from '../../../utils/schema/registry'\n\nexport interface InitRegistryContext {\n name: string\n description: string\n version: string\n directory: string\n prefix: string\n access: string\n author: string\n homepage: string\n github: string\n cwd: string\n}\n\nexport async function createContext(args: Record<string, any>): Promise<InitRegistryContext> {\n args.cwd = path.resolve(args.cwd)\n\n const answers = await p.group({\n name: async () => {\n if (args.name)\n return args.name.trim().toLowerCase()\n\n return p.text({\n message: 'What is the name of the registry?',\n placeholder: 'weme-ui/std',\n defaultValue: args.name?.trim().toLowerCase(),\n validate: (value: string) => {\n if (!value)\n return 'Name is required'\n\n if (value.includes(' '))\n return 'Name should not contain spaces'\n\n if (!value.includes('/'))\n return 'Name should contain slashes, e.g. weme-ui/std'\n\n if (existsSync(path.join(args.cwd, value)))\n return 'Registry already exists'\n },\n })\n },\n description: () => p.text({\n message: 'What is the description of the registry?',\n placeholder: 'The standard components for Weme UI.',\n defaultValue: '',\n }),\n version: () => p.text({\n message: 'What is the version of the registry?',\n placeholder: '0.0.0',\n validate: (value: string) => {\n if (!value)\n return 'Version is required'\n },\n }),\n prefix: () => p.text({\n message: 'What is the prefix of the registry?',\n placeholder: 'ui',\n defaultValue: 'ui',\n }),\n access: () => p.select({\n message: 'Which access do you want to use?',\n options: [\n { label: 'Public', value: 'public' },\n { label: 'Private', value: 'private' },\n ],\n initialValue: 'public',\n }),\n author: () => p.text({\n message: 'What is the author of the registry?',\n placeholder: 'Allen Luo <luoyi@mouji.net>',\n defaultValue: '',\n }),\n homepage: () => p.text({\n message: 'What is the homepage of the registry?',\n placeholder: 'https://github.com/weme-ui/weme-ui',\n defaultValue: '',\n }),\n github: () => p.text({\n message: 'What is the github of the registry?',\n placeholder: 'https://github.com/weme-ui/weme-ui',\n defaultValue: '',\n }),\n }, {\n onCancel: () => {\n p.cancel('Operation cancelled.')\n exit(0)\n },\n })\n\n return {\n ...answers,\n directory: path.join(REGISTRY_DIRNAME, answers.name.split('/')[1]),\n cwd: args.cwd,\n }\n}\n","import type { InitRegistryContext } from './context'\nimport fs from 'node:fs'\nimport path from 'pathe'\nimport { fetchURL } from '../../../utils/fetch'\nimport { compile, runStep } from '../../../utils/utilities'\n\nexport async function generateTemplates(ctx: InitRegistryContext) {\n await runStep('Generating files...', async (spinner) => {\n await Promise.all([\n 'utils/props.ts.hbs',\n 'utils/slots.ts.hbs',\n 'utils/styles.ts.hbs',\n 'README.md.hbs',\n 'nuxt.config.ts.hbs',\n 'package.json.hbs',\n 'registry.json.hbs',\n 'tsconfig.json.hbs',\n 'uno.config.ts.hbs',\n ].map(\n async (tpl) => {\n try {\n const name = tpl.replace('.hbs', '')\n\n spinner.message(`Generating ${name}...`)\n\n const text = await fetchURL(\n `https://raw.githubusercontent.com/weme-ui/templates/refs/heads/main/registry/${tpl}`,\n )\n if (!text) {\n throw new Error(`Failed to fetch ${name}.`)\n }\n\n const content = compile(text, ctx)\n if (!content) {\n throw new Error(`Failed to compile ${name}.`)\n }\n\n const filePath = path.join(ctx.cwd, ctx.directory, name)\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname))\n fs.mkdirSync(dirname, { recursive: true })\n\n fs.writeFileSync(filePath, content, {\n encoding: 'utf8',\n flag: 'w',\n })\n }\n catch (e: any) {\n spinner.stop(e.message)\n }\n },\n ))\n\n spinner.stop('Files generated.')\n })\n}\n","import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport path from 'pathe'\nimport { installDependencies, runDevPrepare } from '../../../utils/schema/package'\nimport { createContext } from './context'\nimport { generateTemplates } from './templates'\n\nexport default async function (args: Record<string, any>) {\n p.intro(chalk.bold.blue('✨ Initializing Weme UI Registry'))\n\n const ctx = await createContext(args)\n const cwd = path.join(ctx.cwd, ctx.directory)\n\n await generateTemplates(ctx)\n await installDependencies([\n '@vueuse/core',\n 'clsx',\n 'tailwind-merge',\n 'tailwind-variants',\n 'reka-ui',\n 'unocss',\n 'nuxt',\n 'vue',\n 'vue-router',\n ], { cwd })\n await runDevPrepare(cwd)\n\n p.note([\n `1. Enter the registry directory: ${chalk.cyan(`cd ${ctx.directory}`)}`,\n `2. Start development server: ${chalk.cyan('pnpm dev')}`,\n `3. Build registry: ${chalk.cyan('pnpm @weme-ui/nuxt build')}`,\n ].join('\\n'), 'Next?')\n\n p.outro('🥤 All done!')\n}\n"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { n as fetchManifestConfig, p as getGithubRepoName } from "./registry-BChtLWfr.mjs";
2
+ import { n as loadProjectInfo } from "./project-BV4nSHdV.mjs";
3
+ import "./package-e8qxd1tJ.mjs";
4
+ import { exit } from "node:process";
5
+ import chalk from "chalk";
6
+ import path from "pathe";
7
+ import { titleCase } from "scule";
8
+ import columnify from "columnify";
9
+
10
+ //#region src/commands/info/registry.ts
11
+ /**
12
+ * Display registry information.
13
+ *
14
+ * @example
15
+ * ```bash
16
+ * pnpm dlx @weme-ui/weme-ui info weme-ui/std
17
+ *
18
+ * The standard components for Weme UI.
19
+ *
20
+ * @weme-ui/weme-ui ⇢ weme-ui/std (0.0.0) 🔒
21
+ *
22
+ * Available items:
23
+ *
24
+ * Components 46
25
+ * Layouts 0
26
+ * Themes 0
27
+ * Blocks 0
28
+ * Pages 0
29
+ *
30
+ * 46 available, 0 installed
31
+ *
32
+ * Run pnpm dlx @weme-ui/weme-ui info to get project all information.
33
+ * ```
34
+ */
35
+ async function registry_default(args) {
36
+ args.cwd = path.resolve(args.cwd);
37
+ const result = await loadProjectInfo(args.cwd);
38
+ if (result.isErr()) {
39
+ console.error(result.unwrapErr());
40
+ exit(1);
41
+ }
42
+ const registry = result.unwrap().registries.find((r) => r.name === args.name);
43
+ if (!registry) {
44
+ console.error("Registry not found.");
45
+ exit(0);
46
+ }
47
+ if (registry.description) {
48
+ console.log(chalk.bold.whiteBright(registry.description));
49
+ console.log("");
50
+ }
51
+ console.log(chalk.cyan.underline(`@${getGithubRepoName(registry.repo)}`), chalk.dim(" ⇢ "), chalk.underline.white(registry.name) + (registry.access === "private" ? "🔒" : ""), chalk.dim(`(${registry.version})`));
52
+ const manifest = await fetchManifestConfig(registry.repo);
53
+ if (manifest.isErr()) {
54
+ console.error("Could not find repository configuration file!");
55
+ exit(1);
56
+ }
57
+ const total = manifest.unwrap().find((m) => m.name === registry.name);
58
+ if (total) {
59
+ console.log("");
60
+ console.log(chalk.dim("Available items:"));
61
+ console.log("");
62
+ console.log(columnify(total.items, {
63
+ showHeaders: false,
64
+ config: {
65
+ key: { dataTransform: (data) => titleCase(data) },
66
+ value: {
67
+ minWidth: 4,
68
+ align: "right",
69
+ dataTransform: (data) => Number.parseInt(data) > 0 ? chalk.yellow(data) : chalk.dim(data)
70
+ }
71
+ }
72
+ }));
73
+ console.log("");
74
+ }
75
+ console.log(chalk.gray([`${chalk.yellow(registry.available)} available`, `${chalk.yellow(registry.installed)} installed`].join(", ")));
76
+ console.log("");
77
+ console.log(`Run ${chalk.cyan("pnpm dlx @weme-ui/weme-ui info")} to get project all information.`);
78
+ }
79
+
80
+ //#endregion
81
+ export { registry_default as default };
82
+ //# sourceMappingURL=registry-CqjT93gC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-CqjT93gC.mjs","names":[],"sources":["../src/commands/info/registry.ts"],"sourcesContent":["import { exit } from 'node:process'\nimport chalk from 'chalk'\nimport columnify from 'columnify'\nimport path from 'pathe'\nimport { titleCase } from 'scule'\nimport { getGithubRepoName } from '../../utils/fetch'\nimport { loadProjectInfo } from '../../utils/schema/project'\nimport { fetchManifestConfig } from '../../utils/schema/registry'\n\n/**\n * Display registry information.\n *\n * @example\n * ```bash\n * pnpm dlx @weme-ui/weme-ui info weme-ui/std\n *\n * The standard components for Weme UI.\n *\n * @weme-ui/weme-ui ⇢ weme-ui/std (0.0.0) 🔒\n *\n * Available items:\n *\n * Components 46\n * Layouts 0\n * Themes 0\n * Blocks 0\n * Pages 0\n *\n * 46 available, 0 installed\n *\n * Run pnpm dlx @weme-ui/weme-ui info to get project all information.\n * ```\n */\nexport default async function (args: Record<string, any>) {\n args.cwd = path.resolve(args.cwd)\n\n const result = await loadProjectInfo(args.cwd)\n\n if (result.isErr()) {\n console.error(result.unwrapErr())\n exit(1)\n }\n\n const info = result.unwrap()\n const registry = info.registries.find(r => r.name === args.name)\n\n if (!registry) {\n console.error('Registry not found.')\n exit(0)\n }\n\n if (registry.description) {\n console.log(chalk.bold.whiteBright(registry.description))\n console.log('')\n }\n\n console.log(\n chalk.cyan.underline(`@${getGithubRepoName(registry.repo)}`),\n chalk.dim(' ⇢ '),\n chalk.underline.white(registry.name) + (registry.access === 'private' ? '🔒' : ''),\n chalk.dim(`(${registry.version})`),\n )\n\n const manifest = await fetchManifestConfig(registry.repo)\n\n if (manifest.isErr()) {\n console.error('Could not find repository configuration file!')\n exit(1)\n }\n\n const total = manifest.unwrap().find(m => m.name === registry.name)\n\n if (total) {\n console.log('')\n console.log(chalk.dim('Available items:'))\n console.log('')\n\n console.log(columnify(total.items, {\n showHeaders: false,\n config: {\n key: {\n dataTransform: data => titleCase(data),\n },\n value: {\n minWidth: 4,\n align: 'right',\n dataTransform: data => Number.parseInt(data) > 0 ? chalk.yellow(data) : chalk.dim(data),\n },\n },\n }))\n\n console.log('')\n }\n\n console.log(chalk.gray(\n [\n `${chalk.yellow(registry.available)} available`,\n `${chalk.yellow(registry.installed)} installed`,\n ].join(', '),\n ))\n\n console.log('')\n console.log(`Run ${chalk.cyan('pnpm dlx @weme-ui/weme-ui info')} to get project all information.`)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,gCAA+B,MAA2B;AACxD,MAAK,MAAM,KAAK,QAAQ,KAAK,IAAI;CAEjC,MAAM,SAAS,MAAM,gBAAgB,KAAK,IAAI;AAE9C,KAAI,OAAO,OAAO,EAAE;AAClB,UAAQ,MAAM,OAAO,WAAW,CAAC;AACjC,OAAK,EAAE;;CAIT,MAAM,WADO,OAAO,QAAQ,CACN,WAAW,MAAK,MAAK,EAAE,SAAS,KAAK,KAAK;AAEhE,KAAI,CAAC,UAAU;AACb,UAAQ,MAAM,sBAAsB;AACpC,OAAK,EAAE;;AAGT,KAAI,SAAS,aAAa;AACxB,UAAQ,IAAI,MAAM,KAAK,YAAY,SAAS,YAAY,CAAC;AACzD,UAAQ,IAAI,GAAG;;AAGjB,SAAQ,IACN,MAAM,KAAK,UAAU,IAAI,kBAAkB,SAAS,KAAK,GAAG,EAC5D,MAAM,IAAI,MAAM,EAChB,MAAM,UAAU,MAAM,SAAS,KAAK,IAAI,SAAS,WAAW,YAAY,OAAO,KAC/E,MAAM,IAAI,IAAI,SAAS,QAAQ,GAAG,CACnC;CAED,MAAM,WAAW,MAAM,oBAAoB,SAAS,KAAK;AAEzD,KAAI,SAAS,OAAO,EAAE;AACpB,UAAQ,MAAM,gDAAgD;AAC9D,OAAK,EAAE;;CAGT,MAAM,QAAQ,SAAS,QAAQ,CAAC,MAAK,MAAK,EAAE,SAAS,SAAS,KAAK;AAEnE,KAAI,OAAO;AACT,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,MAAM,IAAI,mBAAmB,CAAC;AAC1C,UAAQ,IAAI,GAAG;AAEf,UAAQ,IAAI,UAAU,MAAM,OAAO;GACjC,aAAa;GACb,QAAQ;IACN,KAAK,EACH,gBAAe,SAAQ,UAAU,KAAK,EACvC;IACD,OAAO;KACL,UAAU;KACV,OAAO;KACP,gBAAe,SAAQ,OAAO,SAAS,KAAK,GAAG,IAAI,MAAM,OAAO,KAAK,GAAG,MAAM,IAAI,KAAK;KACxF;IACF;GACF,CAAC,CAAC;AAEH,UAAQ,IAAI,GAAG;;AAGjB,SAAQ,IAAI,MAAM,KAChB,CACE,GAAG,MAAM,OAAO,SAAS,UAAU,CAAC,aACpC,GAAG,MAAM,OAAO,SAAS,UAAU,CAAC,YACrC,CAAC,KAAK,KAAK,CACb,CAAC;AAEF,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,OAAO,MAAM,KAAK,iCAAiC,CAAC,kCAAkC"}