@weme-ui/weme-ui 0.1.4 → 0.2.0
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/CHANGELOG.md +7 -0
- package/README.md +19 -11
- package/dist/add-DESSspHh.js +56 -0
- package/dist/add-DESSspHh.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/init-DZjeMuf3.js +219 -0
- package/dist/init-DZjeMuf3.js.map +1 -0
- package/dist/project-BZkWl9YJ.js +685 -0
- package/dist/project-BZkWl9YJ.js.map +1 -0
- package/package.json +72 -48
- package/LICENSE +0 -21
- package/dist/add-7tfye_HI.mjs +0 -53
- package/dist/add-7tfye_HI.mjs.map +0 -1
- package/dist/build-HG3tc2-q.mjs +0 -23
- package/dist/build-HG3tc2-q.mjs.map +0 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.mjs +0 -31
- package/dist/index.mjs.map +0 -1
- package/dist/info-BxG4zcjx.mjs +0 -41
- package/dist/info-BxG4zcjx.mjs.map +0 -1
- package/dist/init-CDwuXmS4.mjs +0 -64
- package/dist/init-CDwuXmS4.mjs.map +0 -1
- package/dist/manifest-QuvehRif.mjs +0 -76
- package/dist/manifest-QuvehRif.mjs.map +0 -1
- package/dist/package-BnOb5LKd.mjs +0 -85
- package/dist/package-BnOb5LKd.mjs.map +0 -1
- package/dist/project-D1-8Zva8.mjs +0 -361
- package/dist/project-D1-8Zva8.mjs.map +0 -1
- package/dist/project-D1CJVddG.mjs +0 -58
- package/dist/project-D1CJVddG.mjs.map +0 -1
- package/dist/project-Du47BQ8B.mjs +0 -148
- package/dist/project-Du47BQ8B.mjs.map +0 -1
- package/dist/registry-Be2pmtXA.mjs +0 -341
- package/dist/registry-Be2pmtXA.mjs.map +0 -1
- package/dist/registry-CUbTtvmU.mjs +0 -147
- package/dist/registry-CUbTtvmU.mjs.map +0 -1
- package/dist/registry-DWimeo5w.mjs +0 -82
- package/dist/registry-DWimeo5w.mjs.map +0 -1
- package/dist/registry-Dj8XmKtl.mjs +0 -8
- package/dist/registry-Dj8XmKtl.mjs.map +0 -1
- package/dist/registry-item-Cz4VyV8f.mjs +0 -143
- package/dist/registry-item-Cz4VyV8f.mjs.map +0 -1
- package/dist/verify-DAzADRvE.mjs +0 -78
- package/dist/verify-DAzADRvE.mjs.map +0 -1
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { t as installRegistryItems } from "./project-D1-8Zva8.mjs";
|
|
2
|
-
import { f as fetchBinary, l as runStep, o as selectRegistry, p as fetchURL } from "./registry-Be2pmtXA.mjs";
|
|
3
|
-
import { r as runDevPrepare } from "./package-BnOb5LKd.mjs";
|
|
4
|
-
import { exit } from "node:process";
|
|
5
|
-
import * as p from "@clack/prompts";
|
|
6
|
-
import chalk from "chalk";
|
|
7
|
-
import fs from "node:fs";
|
|
8
|
-
import { PROJECT_FILE_NAME, PROJECT_SCHEMA_URL, projectSchema } from "@weme-ui/schema";
|
|
9
|
-
import path from "pathe";
|
|
10
|
-
import { Buffer } from "node:buffer";
|
|
11
|
-
|
|
12
|
-
//#region src/commands/init/project/context.ts
|
|
13
|
-
async function createContext(args) {
|
|
14
|
-
const cwd$1 = path.resolve(args.cwd);
|
|
15
|
-
if (!fs.existsSync(cwd$1)) fs.mkdirSync(cwd$1, { recursive: true });
|
|
16
|
-
const components = await p.text({
|
|
17
|
-
message: "Please enter a default path to install the components.",
|
|
18
|
-
placeholder: "~/components",
|
|
19
|
-
defaultValue: "~/components",
|
|
20
|
-
validate: (value) => {
|
|
21
|
-
if (!value) return "Path is required!";
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
if (p.isCancel(components)) {
|
|
25
|
-
p.cancel("Operation cancelled.");
|
|
26
|
-
exit(0);
|
|
27
|
-
}
|
|
28
|
-
const repo = args.repo || "weme-ui/weme-ui";
|
|
29
|
-
const registry = await selectRegistry(repo);
|
|
30
|
-
const prefix = await p.text({
|
|
31
|
-
message: "What is the prefix of the registry?",
|
|
32
|
-
placeholder: registry.prefix,
|
|
33
|
-
defaultValue: registry.prefix
|
|
34
|
-
});
|
|
35
|
-
if (p.isCancel(prefix)) {
|
|
36
|
-
p.cancel("Operation cancelled.");
|
|
37
|
-
exit(0);
|
|
38
|
-
}
|
|
39
|
-
return {
|
|
40
|
-
repo,
|
|
41
|
-
registry: registry.name,
|
|
42
|
-
directory: registry.directory,
|
|
43
|
-
prefix,
|
|
44
|
-
access: registry.access,
|
|
45
|
-
paths: { components },
|
|
46
|
-
cwd: cwd$1
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
//#endregion
|
|
51
|
-
//#region src/commands/init/project/files.ts
|
|
52
|
-
async function createFiles(ctx) {
|
|
53
|
-
await runStep("Generating project files...", async (spinner) => {
|
|
54
|
-
await Promise.all([
|
|
55
|
-
"app/app.vue",
|
|
56
|
-
"public/robots.txt",
|
|
57
|
-
"public/favicon.ico",
|
|
58
|
-
"package.json",
|
|
59
|
-
"tsconfig.json",
|
|
60
|
-
".gitignore",
|
|
61
|
-
"uno.config.ts",
|
|
62
|
-
"README.md"
|
|
63
|
-
].map(async (file) => {
|
|
64
|
-
spinner.message(`Generating ${chalk.cyan(file)}...`);
|
|
65
|
-
const isFavicon = file === "public/favicon.ico";
|
|
66
|
-
const content = await (isFavicon ? fetchBinary : fetchURL)(`https://raw.githubusercontent.com/weme-ui/templates/refs/heads/main/project/${file}`);
|
|
67
|
-
if (content) {
|
|
68
|
-
const filePath = path.join(ctx.cwd, file);
|
|
69
|
-
const dirname = path.dirname(filePath);
|
|
70
|
-
if (!fs.existsSync(dirname)) fs.mkdirSync(dirname, { recursive: true });
|
|
71
|
-
if (isFavicon) {
|
|
72
|
-
const buffer = Buffer.from(content);
|
|
73
|
-
fs.writeFileSync(filePath, buffer, { flag: "w" });
|
|
74
|
-
} else fs.writeFileSync(path.join(ctx.cwd, file), content, {
|
|
75
|
-
encoding: "utf8",
|
|
76
|
-
flag: "w"
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}));
|
|
80
|
-
spinner.stop("Project files generated!");
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
async function createNuxtConfig(ctx) {
|
|
84
|
-
await runStep(`Generating ${chalk.cyan("nuxt.config.ts")}...`, async (spinner) => {
|
|
85
|
-
const lines = [
|
|
86
|
-
"export default defineNuxtConfig({",
|
|
87
|
-
" modules: [",
|
|
88
|
-
" '@weme-ui/nuxt',",
|
|
89
|
-
" ],",
|
|
90
|
-
"",
|
|
91
|
-
" devtools: {",
|
|
92
|
-
" enabled: true,",
|
|
93
|
-
" },",
|
|
94
|
-
"",
|
|
95
|
-
` compatibilityDate: ${JSON.stringify((/* @__PURE__ */ new Date()).toISOString().slice(0, 10))},`,
|
|
96
|
-
"})"
|
|
97
|
-
];
|
|
98
|
-
fs.writeFileSync(path.join(ctx.cwd, "nuxt.config.ts"), `${lines.join("\n")}\n`, {
|
|
99
|
-
encoding: "utf8",
|
|
100
|
-
flag: "w"
|
|
101
|
-
});
|
|
102
|
-
spinner.stop(`${chalk.cyan("nuxt.config.ts")} generated!`);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
async function createProjectConfig(ctx) {
|
|
106
|
-
return await runStep(`Generating ${chalk.cyan(PROJECT_FILE_NAME)}...`, async (spinner) => {
|
|
107
|
-
const config = projectSchema.safeParse({
|
|
108
|
-
$schema: PROJECT_SCHEMA_URL,
|
|
109
|
-
repos: [{
|
|
110
|
-
repo: ctx.repo,
|
|
111
|
-
registry: ctx.registry,
|
|
112
|
-
prefix: ctx.prefix,
|
|
113
|
-
default: true
|
|
114
|
-
}],
|
|
115
|
-
paths: ctx.paths
|
|
116
|
-
});
|
|
117
|
-
if (!config.success) {
|
|
118
|
-
p.log.error(config.error.message);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
fs.writeFileSync(path.join(ctx.cwd, PROJECT_FILE_NAME), `${JSON.stringify(config.data, null, 2)}\n`, {
|
|
122
|
-
encoding: "utf8",
|
|
123
|
-
flag: "w"
|
|
124
|
-
});
|
|
125
|
-
spinner.stop(`${chalk.cyan(PROJECT_FILE_NAME)} generated!`);
|
|
126
|
-
return config.data;
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
//#endregion
|
|
131
|
-
//#region src/commands/init/project/index.ts
|
|
132
|
-
async function project_default(args) {
|
|
133
|
-
p.intro(chalk.bold.blue("✨ Initializing Weme UI Project"));
|
|
134
|
-
const ctx = await createContext(args);
|
|
135
|
-
const project = await createProjectConfig(ctx);
|
|
136
|
-
if (project) {
|
|
137
|
-
await createFiles(ctx);
|
|
138
|
-
await createNuxtConfig(ctx);
|
|
139
|
-
await installRegistryItems(ctx.cwd, ctx.repo, ctx.registry, project, { type: "init" });
|
|
140
|
-
await runDevPrepare(ctx.cwd);
|
|
141
|
-
} else p.log.error("Failed to create project configuration file.");
|
|
142
|
-
p.note([`1. Add components to your project: ${chalk.cyan("pnpm dlx @weme-ui/weme-ui add <component-name>")}`, `2. Start development server: ${chalk.cyan("pnpm dev")}`].join("\n"), "Next?");
|
|
143
|
-
p.outro("🥤 All done!");
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
//#endregion
|
|
147
|
-
export { project_default as default };
|
|
148
|
-
//# sourceMappingURL=project-Du47BQ8B.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-Du47BQ8B.mjs","names":["cwd","lines: string[]"],"sources":["../src/commands/init/project/context.ts","../src/commands/init/project/files.ts","../src/commands/init/project/index.ts"],"sourcesContent":["import type { ProjectPaths } from '@weme-ui/schema'\nimport fs from 'node:fs'\nimport { exit } from 'node:process'\nimport * as p from '@clack/prompts'\nimport path from 'pathe'\nimport { selectRegistry } from '../../../utils/schema/registry'\n\nexport interface InitProjectContext {\n repo: string\n registry: string\n directory: string\n prefix: string\n access: string\n paths: ProjectPaths\n cwd: string\n}\n\nexport async function createContext(args: Record<string, any>): Promise<InitProjectContext> {\n const cwd = path.resolve(args.cwd)\n\n if (!fs.existsSync(cwd))\n fs.mkdirSync(cwd, { recursive: true })\n\n const components = await p.text({\n message: 'Please enter a default path to install the components.',\n placeholder: '~/components',\n defaultValue: '~/components',\n validate: (value: string) => {\n if (!value)\n return 'Path is required!'\n },\n })\n\n if (p.isCancel(components)) {\n p.cancel('Operation cancelled.')\n exit(0)\n }\n\n const repo = args.repo || 'weme-ui/weme-ui'\n const registry = await selectRegistry(repo)\n\n const prefix = await p.text({\n message: 'What is the prefix of the registry?',\n placeholder: registry.prefix,\n defaultValue: registry.prefix,\n })\n\n if (p.isCancel(prefix)) {\n p.cancel('Operation cancelled.')\n exit(0)\n }\n\n return {\n repo,\n registry: registry.name,\n directory: registry.directory,\n prefix,\n access: registry.access,\n paths: {\n components,\n },\n cwd,\n }\n}\n","import type { InitProjectContext } from './context'\nimport { Buffer } from 'node:buffer'\nimport fs from 'node:fs'\nimport * as p from '@clack/prompts'\nimport { PROJECT_FILE_NAME, PROJECT_SCHEMA_URL, projectSchema } from '@weme-ui/schema'\nimport chalk from 'chalk'\nimport path from 'pathe'\nimport { fetchBinary, fetchURL } from '../../../utils/fetch'\nimport { runStep } from '../../../utils/utilities'\n\nexport async function createFiles(ctx: InitProjectContext) {\n await runStep('Generating project files...', async (spinner) => {\n await Promise.all([\n 'app/app.vue',\n 'public/robots.txt',\n 'public/favicon.ico',\n 'package.json',\n 'tsconfig.json',\n '.gitignore',\n 'uno.config.ts',\n 'README.md',\n ].map(async (file) => {\n spinner.message(`Generating ${chalk.cyan(file)}...`)\n\n const isFavicon = file === 'public/favicon.ico'\n const fetchFn = isFavicon ? fetchBinary : fetchURL\n\n const content = await fetchFn(\n `https://raw.githubusercontent.com/weme-ui/templates/refs/heads/main/project/${file}`,\n )\n\n if (content) {\n const filePath = path.join(ctx.cwd, file)\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname))\n fs.mkdirSync(dirname, { recursive: true })\n\n if (isFavicon) {\n const buffer = Buffer.from(content as ArrayBuffer)\n fs.writeFileSync(filePath, buffer, {\n flag: 'w',\n })\n }\n else {\n fs.writeFileSync(\n path.join(ctx.cwd, file),\n content as string,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n )\n }\n }\n }))\n\n spinner.stop('Project files generated!')\n })\n}\n\nexport async function createNuxtConfig(ctx: InitProjectContext) {\n await runStep(`Generating ${chalk.cyan('nuxt.config.ts')}...`, async (spinner) => {\n const lines: string[] = [\n 'export default defineNuxtConfig({',\n ' modules: [',\n ' \\'@weme-ui/nuxt\\',',\n ' ],',\n '',\n ' devtools: {',\n ' enabled: true,',\n ' },',\n '',\n ` compatibilityDate: ${JSON.stringify(new Date().toISOString().slice(0, 10))},`,\n '})',\n ]\n\n fs.writeFileSync(\n path.join(ctx.cwd, 'nuxt.config.ts'),\n `${lines.join('\\n')}\\n`,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n )\n\n spinner.stop(`${chalk.cyan('nuxt.config.ts')} generated!`)\n })\n}\n\nexport async function createProjectConfig(ctx: InitProjectContext) {\n return await runStep(`Generating ${chalk.cyan(PROJECT_FILE_NAME)}...`, async (spinner) => {\n const config = projectSchema.safeParse({\n $schema: PROJECT_SCHEMA_URL,\n repos: [\n {\n repo: ctx.repo,\n registry: ctx.registry,\n prefix: ctx.prefix,\n default: true,\n },\n ],\n paths: ctx.paths,\n })\n\n if (!config.success) {\n p.log.error(config.error.message)\n return\n }\n\n fs.writeFileSync(\n path.join(ctx.cwd, PROJECT_FILE_NAME),\n `${JSON.stringify(config.data, null, 2)}\\n`,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n )\n\n spinner.stop(`${chalk.cyan(PROJECT_FILE_NAME)} generated!`)\n\n return config.data\n })\n}\n","import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport { runDevPrepare } from '../../../utils/schema/package'\nimport { installRegistryItems } from '../../../utils/schema/project'\nimport { createContext } from './context'\nimport { createFiles, createNuxtConfig, createProjectConfig } from './files'\n\nexport default async function (args: Record<string, any>) {\n p.intro(chalk.bold.blue('✨ Initializing Weme UI Project'))\n\n const ctx = await createContext(args)\n const project = await createProjectConfig(ctx)\n\n if (project) {\n await createFiles(ctx)\n await createNuxtConfig(ctx)\n\n await installRegistryItems(\n ctx.cwd,\n ctx.repo,\n ctx.registry,\n project,\n { type: 'init' },\n )\n\n await runDevPrepare(ctx.cwd)\n }\n else {\n p.log.error('Failed to create project configuration file.')\n }\n\n p.note([\n `1. Add components to your project: ${chalk.cyan('pnpm dlx @weme-ui/weme-ui add <component-name>')}`,\n `2. Start development server: ${chalk.cyan('pnpm dev')}`,\n ].join('\\n'), 'Next?')\n\n p.outro('🥤 All done!')\n}\n"],"mappings":"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"}
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
import { exit } from "node:process";
|
|
2
|
-
import * as p from "@clack/prompts";
|
|
3
|
-
import chalk from "chalk";
|
|
4
|
-
import fs from "node:fs";
|
|
5
|
-
import { MANIFEST_FILE_NAME, REGISTRY_FILE_NAME, manifestSchema, registrySchema } from "@weme-ui/schema";
|
|
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 { loadRegistryConfig as a, merge as c, Ok as d, fetchBinary as f, fetchRegistryItems as i, runStep as l, getGithubRepoName$1 as m, fetchManifestConfig as n, selectRegistry as o, fetchURL as p, fetchRegistryConfig as r, compile as s, REGISTRY_DIRNAME as t, Err as u };
|
|
341
|
-
//# sourceMappingURL=registry-Be2pmtXA.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry-Be2pmtXA.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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"}
|