@g3nomaly/ui 0.3.0 → 0.3.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.
- package/LICENSE +95 -0
- package/dist/cli/adapter.d.ts +86 -0
- package/dist/cli/adapter.d.ts.map +1 -0
- package/dist/cli/adapter.js +114 -0
- package/dist/cli/adapter.js.map +1 -0
- package/dist/cli/commands/add.d.ts +24 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +24 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/index.d.ts +15 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +9 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +48 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +167 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/ls.d.ts +20 -0
- package/dist/cli/commands/ls.d.ts.map +1 -0
- package/dist/cli/commands/ls.js +25 -0
- package/dist/cli/commands/ls.js.map +1 -0
- package/dist/cli/commands/manifest.d.ts +19 -0
- package/dist/cli/commands/manifest.d.ts.map +1 -0
- package/dist/cli/commands/manifest.js +95 -0
- package/dist/cli/commands/manifest.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +15 -0
- package/dist/cli/commands/remove.d.ts.map +1 -0
- package/dist/cli/commands/remove.js +16 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/source.d.ts +41 -0
- package/dist/cli/commands/source.d.ts.map +1 -0
- package/dist/cli/commands/source.js +38 -0
- package/dist/cli/commands/source.js.map +1 -0
- package/dist/cli/commands/update.d.ts +16 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +17 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +90 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/components/basic/Card.css +32 -0
- package/dist/components/basic/Card.debug.ts +5 -0
- package/dist/components/basic/Card.tsx +31 -0
- package/dist/components/basic/CardFooter.css +16 -0
- package/dist/components/basic/CardFooter.debug.ts +5 -0
- package/dist/components/basic/CardFooter.tsx +29 -0
- package/dist/components/basic/CardHeader.css +14 -0
- package/dist/components/basic/CardHeader.debug.ts +5 -0
- package/dist/components/basic/CardHeader.tsx +29 -0
- package/dist/components/basic/card.meta.ts +14 -0
- package/dist/components/basic/cardfooter.meta.ts +14 -0
- package/dist/components/basic/cardheader.meta.ts +14 -0
- package/dist/components/input/Button.css +34 -0
- package/dist/components/input/Button.debug.ts +5 -0
- package/dist/components/input/Button.tsx +28 -0
- package/dist/components/input/button.meta.ts +14 -0
- package/dist/components.json +138 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/adapters/shadcn.adapter.d.ts +41 -0
- package/dist/registry/adapters/shadcn.adapter.d.ts.map +1 -0
- package/dist/registry/adapters/shadcn.adapter.js +123 -0
- package/dist/registry/adapters/shadcn.adapter.js.map +1 -0
- package/dist/registry/componentsJson.d.ts +24 -0
- package/dist/registry/componentsJson.d.ts.map +1 -0
- package/dist/registry/componentsJson.js +56 -0
- package/dist/registry/componentsJson.js.map +1 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/manifest.d.ts +21 -0
- package/dist/registry/manifest.d.ts.map +1 -0
- package/dist/registry/manifest.js +88 -0
- package/dist/registry/manifest.js.map +1 -0
- package/dist/registry/readSource.d.ts +37 -0
- package/dist/registry/readSource.d.ts.map +1 -0
- package/dist/registry/readSource.js +58 -0
- package/dist/registry/readSource.js.map +1 -0
- package/dist/registry/types.d.ts +100 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +48 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/sources/builtins.d.ts +8 -0
- package/dist/sources/builtins.d.ts.map +1 -0
- package/dist/sources/builtins.js +10 -0
- package/dist/sources/builtins.js.map +1 -0
- package/package.json +84 -3
- package/README.md +0 -3
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// packages/ui/src/registry/manifest.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { COMPONENTS_DIR } from "./componentsJson";
|
|
6
|
+
import { groupOf } from "./readSource";
|
|
7
|
+
import { ComponentFileSchema } from "./types";
|
|
8
|
+
const MANIFEST_DIR = ".g3n";
|
|
9
|
+
const MANIFEST_BASE = ".g3nui-manifest";
|
|
10
|
+
/** Source name shadcn components are recorded under. */
|
|
11
|
+
export const SHADCN_SOURCE = "shadcn";
|
|
12
|
+
/** An entry as manifests before the shared `{ sources, entries }` shape recorded it. */
|
|
13
|
+
const LegacyEntrySchema = z.object({
|
|
14
|
+
name: z.string().min(1),
|
|
15
|
+
description: z.string().optional(),
|
|
16
|
+
version: z.string().optional(),
|
|
17
|
+
category: z.string().optional(),
|
|
18
|
+
group: z.string().optional(),
|
|
19
|
+
author: z.string().optional(),
|
|
20
|
+
packageOrigin: z.string().optional(),
|
|
21
|
+
registryDependencies: z.array(z.string()).optional(),
|
|
22
|
+
files: z.array(ComponentFileSchema).min(1),
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* @brief Path of the project's g3nui manifest.
|
|
26
|
+
*
|
|
27
|
+
* @param projectRoot - Absolute project root, e.g. `/home/me/app`.
|
|
28
|
+
* @returns absolute path, e.g. `/home/me/app/.g3n/.g3nui-manifest.json`
|
|
29
|
+
*/
|
|
30
|
+
export function uiManifestPath(projectRoot) {
|
|
31
|
+
return path.join(projectRoot, MANIFEST_DIR, `${MANIFEST_BASE}.json`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @brief Converts one legacy entry to the shared shape, taking its origin from `packageOrigin`.
|
|
35
|
+
*
|
|
36
|
+
* @param entry - Legacy entry as `LegacyEntrySchema` parses it.
|
|
37
|
+
* @returns The entry with `group` and `origin` set, as `ComponentMeta` holds them.
|
|
38
|
+
*/
|
|
39
|
+
function migrateEntry(entry) {
|
|
40
|
+
const { packageOrigin, group, ...rest } = entry;
|
|
41
|
+
const shadcn = packageOrigin === SHADCN_SOURCE;
|
|
42
|
+
return {
|
|
43
|
+
...rest,
|
|
44
|
+
group: group ?? groupOf(entry),
|
|
45
|
+
origin: shadcn ? { source: SHADCN_SOURCE, dir: "" } : { source: "g3nui", dir: COMPONENTS_DIR, version: entry.version },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @brief Writes legacy entries as a shared-shape manifest at the JSON path.
|
|
50
|
+
*
|
|
51
|
+
* @param projectRoot - Absolute project root, e.g. `/home/me/app`.
|
|
52
|
+
* @param legacy - Parsed flat manifest: legacy entries keyed by component key.
|
|
53
|
+
*/
|
|
54
|
+
function writeMigrated(projectRoot, legacy) {
|
|
55
|
+
const entries = Object.fromEntries(Object.entries(z.record(z.string(), LegacyEntrySchema).parse(legacy)).map(([key, entry]) => [key, migrateEntry(entry)]));
|
|
56
|
+
fs.mkdirSync(path.join(projectRoot, MANIFEST_DIR), { recursive: true });
|
|
57
|
+
fs.writeFileSync(uiManifestPath(projectRoot), JSON.stringify({ sources: {}, entries }, null, 2) + "\n");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @brief Rewrites a manifest from before the shared `{ sources, entries }` shape:
|
|
61
|
+
* a flat `.g3nui-manifest.json`, or a `.g3nui-manifest.ts` whose `registry`
|
|
62
|
+
* export becomes the JSON file and is then deleted. Does nothing when the
|
|
63
|
+
* manifest is already in the shared shape or does not exist.
|
|
64
|
+
*
|
|
65
|
+
* @param projectRoot - Absolute project root, e.g. `/home/me/app`.
|
|
66
|
+
* @returns the path that was migrated, or `null` when nothing changed
|
|
67
|
+
* @throws {Error} When a legacy manifest does not match the old entry shape.
|
|
68
|
+
*/
|
|
69
|
+
export async function migrateLegacyManifest(projectRoot) {
|
|
70
|
+
const jsonPath = uiManifestPath(projectRoot);
|
|
71
|
+
const tsPath = path.join(projectRoot, MANIFEST_DIR, `${MANIFEST_BASE}.ts`);
|
|
72
|
+
if (fs.existsSync(jsonPath)) {
|
|
73
|
+
const raw = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
|
|
74
|
+
const shared = typeof raw === "object" && raw !== null && ("entries" in raw || "sources" in raw);
|
|
75
|
+
if (shared)
|
|
76
|
+
return null;
|
|
77
|
+
writeMigrated(projectRoot, raw);
|
|
78
|
+
return jsonPath;
|
|
79
|
+
}
|
|
80
|
+
if (fs.existsSync(tsPath)) {
|
|
81
|
+
const legacy = z.object({ registry: z.unknown() }).parse(await import(tsPath));
|
|
82
|
+
writeMigrated(projectRoot, legacy.registry);
|
|
83
|
+
fs.rmSync(tsPath);
|
|
84
|
+
return tsPath;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/registry/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReadSource } from "@g3nomaly/core/installer";
|
|
2
|
+
import type { ComponentFile, ComponentMeta, PackagedComponent } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* @brief Which optional files of a component get installed.
|
|
5
|
+
*
|
|
6
|
+
* @property includeDebug - Install `.debug.ts` files.
|
|
7
|
+
* @property includeMeta - Install `.meta.ts` files.
|
|
8
|
+
*/
|
|
9
|
+
export interface ComponentFileFlags {
|
|
10
|
+
includeDebug: boolean;
|
|
11
|
+
includeMeta: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @brief The files of a component the flags allow: `.debug.ts` and `.meta.ts` files only when asked for.
|
|
15
|
+
*
|
|
16
|
+
* @param files - Files of one component, each with its path and type.
|
|
17
|
+
* @param flags - Which optional files to keep.
|
|
18
|
+
* @returns The kept files, in their original order.
|
|
19
|
+
*/
|
|
20
|
+
export declare function filterFiles(files: readonly ComponentFile[], flags: ComponentFileFlags): ComponentFile[];
|
|
21
|
+
/**
|
|
22
|
+
* @brief A component's display group: its category, else the first folder of its first file.
|
|
23
|
+
*
|
|
24
|
+
* @param meta - Component whose `category` and `files` decide the group.
|
|
25
|
+
* @returns The group name, or `unknown` when the first file sits at the top level.
|
|
26
|
+
*/
|
|
27
|
+
export declare function groupOf(meta: Pick<PackagedComponent, "category" | "files">): string;
|
|
28
|
+
/**
|
|
29
|
+
* @brief Reader for a source that is a component package: its `dist/components.json`,
|
|
30
|
+
* with the files the flags leave out dropped. Handed to `loadSourceRegistry`
|
|
31
|
+
* by every g3nui command.
|
|
32
|
+
*
|
|
33
|
+
* @param flags - Which optional files to keep.
|
|
34
|
+
* @returns Reader that yields the package's components, skipping any left with no files.
|
|
35
|
+
*/
|
|
36
|
+
export declare function readComponentSource(flags: ComponentFileFlags): ReadSource<ComponentMeta>;
|
|
37
|
+
//# sourceMappingURL=readSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readSource.d.ts","sourceRoot":"","sources":["../../src/registry/readSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAG,OAAO,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,EAAE,KAAK,EAAE,kBAAkB,GAAG,aAAa,EAAE,CAMvG;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,MAAM,CAInF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,UAAU,CAAC,aAAa,CAAC,CAmBxF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { COMPONENTS_DIR, readComponentsJson } from "./componentsJson";
|
|
2
|
+
/**
|
|
3
|
+
* @brief The files of a component the flags allow: `.debug.ts` and `.meta.ts` files only when asked for.
|
|
4
|
+
*
|
|
5
|
+
* @param files - Files of one component, each with its path and type.
|
|
6
|
+
* @param flags - Which optional files to keep.
|
|
7
|
+
* @returns The kept files, in their original order.
|
|
8
|
+
*/
|
|
9
|
+
export function filterFiles(files, flags) {
|
|
10
|
+
return files.filter((file) => {
|
|
11
|
+
if (file.path.endsWith(".debug.ts"))
|
|
12
|
+
return flags.includeDebug;
|
|
13
|
+
if (file.path.endsWith(".meta.ts"))
|
|
14
|
+
return flags.includeMeta;
|
|
15
|
+
return true;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @brief A component's display group: its category, else the first folder of its first file.
|
|
20
|
+
*
|
|
21
|
+
* @param meta - Component whose `category` and `files` decide the group.
|
|
22
|
+
* @returns The group name, or `unknown` when the first file sits at the top level.
|
|
23
|
+
*/
|
|
24
|
+
export function groupOf(meta) {
|
|
25
|
+
if (meta.category !== undefined)
|
|
26
|
+
return meta.category;
|
|
27
|
+
const first = meta.files[0]?.path ?? "";
|
|
28
|
+
return first.includes("/") ? first.split("/")[0] ?? "unknown" : "unknown";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @brief Reader for a source that is a component package: its `dist/components.json`,
|
|
32
|
+
* with the files the flags leave out dropped. Handed to `loadSourceRegistry`
|
|
33
|
+
* by every g3nui command.
|
|
34
|
+
*
|
|
35
|
+
* @param flags - Which optional files to keep.
|
|
36
|
+
* @returns Reader that yields the package's components, skipping any left with no files.
|
|
37
|
+
*/
|
|
38
|
+
export function readComponentSource(flags) {
|
|
39
|
+
return async (checkout) => {
|
|
40
|
+
const entries = [];
|
|
41
|
+
const warnings = [];
|
|
42
|
+
for (const [key, meta] of Object.entries(readComponentsJson(checkout.dir))) {
|
|
43
|
+
const files = filterFiles(meta.files, flags);
|
|
44
|
+
if (files.length === 0) {
|
|
45
|
+
warnings.push(`${key} has no files left after filtering, skipped`);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
entries.push([key, {
|
|
49
|
+
...meta,
|
|
50
|
+
group: groupOf(meta),
|
|
51
|
+
origin: { source: checkout.name, dir: COMPONENTS_DIR, commit: checkout.commit, version: checkout.version },
|
|
52
|
+
files,
|
|
53
|
+
}]);
|
|
54
|
+
}
|
|
55
|
+
return { entries, warnings };
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=readSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readSource.js","sourceRoot":"","sources":["../../src/registry/readSource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AActE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAA+B,EAAE,KAAyB;IACpF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC,YAAY,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAG,OAAO,KAAK,CAAC,WAAW,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,IAAmD;IACzE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,EAAE;QACxB,MAAM,OAAO,GAA8B,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,6CAA6C,CAAC,CAAC;gBACnE,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;oBACjB,GAAG,IAAI;oBACP,KAAK,EAAG,OAAO,CAAC,IAAI,CAAC;oBACrB,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;oBAC1G,KAAK;iBACN,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ComponentFileTypeSchema: z.ZodEnum<{
|
|
3
|
+
component: "component";
|
|
4
|
+
hook: "hook";
|
|
5
|
+
meta: "meta";
|
|
6
|
+
style: "style";
|
|
7
|
+
type: "type";
|
|
8
|
+
util: "util";
|
|
9
|
+
}>;
|
|
10
|
+
/** Kind of a component file: `component`, `style`, `util`, `hook`, `type` or `meta`. */
|
|
11
|
+
export type ComponentFileType = z.infer<typeof ComponentFileTypeSchema>;
|
|
12
|
+
/** One file of a component; `path` is relative to the components directory, e.g. `basic/Card.tsx`. */
|
|
13
|
+
export declare const ComponentFileSchema: z.ZodObject<{
|
|
14
|
+
path: z.ZodString;
|
|
15
|
+
hash: z.ZodOptional<z.ZodString>;
|
|
16
|
+
version: z.ZodOptional<z.ZodString>;
|
|
17
|
+
type: z.ZodEnum<{
|
|
18
|
+
component: "component";
|
|
19
|
+
hook: "hook";
|
|
20
|
+
meta: "meta";
|
|
21
|
+
style: "style";
|
|
22
|
+
type: "type";
|
|
23
|
+
util: "util";
|
|
24
|
+
}>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
/** A file of a component: the base file entry plus its `ComponentFileType`. */
|
|
27
|
+
export type ComponentFile = z.infer<typeof ComponentFileSchema>;
|
|
28
|
+
/**
|
|
29
|
+
* @brief A component as it ships: what a `*.meta.ts` file declares and what
|
|
30
|
+
* `dist/components.json` holds per component, before a source reads it.
|
|
31
|
+
*
|
|
32
|
+
* @property version - Set at build time from the package version.
|
|
33
|
+
* @property registryDependencies - Keys of components this one needs installed beside it, e.g. `button`.
|
|
34
|
+
* @property files - Files of the component, each with its path and `ComponentFileType`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const PackagedComponentSchema: z.ZodObject<{
|
|
37
|
+
name: z.ZodString;
|
|
38
|
+
description: z.ZodOptional<z.ZodString>;
|
|
39
|
+
version: z.ZodOptional<z.ZodString>;
|
|
40
|
+
category: z.ZodOptional<z.ZodString>;
|
|
41
|
+
author: z.ZodOptional<z.ZodString>;
|
|
42
|
+
registryDependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
files: z.ZodArray<z.ZodObject<{
|
|
44
|
+
path: z.ZodString;
|
|
45
|
+
hash: z.ZodOptional<z.ZodString>;
|
|
46
|
+
version: z.ZodOptional<z.ZodString>;
|
|
47
|
+
type: z.ZodEnum<{
|
|
48
|
+
component: "component";
|
|
49
|
+
hook: "hook";
|
|
50
|
+
meta: "meta";
|
|
51
|
+
style: "style";
|
|
52
|
+
type: "type";
|
|
53
|
+
util: "util";
|
|
54
|
+
}>;
|
|
55
|
+
}, z.core.$strip>>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
/** A component as it ships, the type `PackagedComponentSchema` parses. */
|
|
58
|
+
export type PackagedComponent = z.infer<typeof PackagedComponentSchema>;
|
|
59
|
+
/**
|
|
60
|
+
* @brief One installable component, read from a source by `readComponentSource`
|
|
61
|
+
* or the shadcn adapter, and written per install into the g3nui manifest by
|
|
62
|
+
* the `add` and `update` commands.
|
|
63
|
+
*
|
|
64
|
+
* @property group - Display group: the category, or the first folder of the first file, e.g. `basic`.
|
|
65
|
+
* @property files - Files the install writes, each with its path and `ComponentFileType`.
|
|
66
|
+
*/
|
|
67
|
+
export declare const ComponentMetaSchema: z.ZodObject<{
|
|
68
|
+
name: z.ZodString;
|
|
69
|
+
description: z.ZodOptional<z.ZodString>;
|
|
70
|
+
version: z.ZodOptional<z.ZodString>;
|
|
71
|
+
registryDependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
72
|
+
origin: z.ZodObject<{
|
|
73
|
+
source: z.ZodString;
|
|
74
|
+
dir: z.ZodString;
|
|
75
|
+
commit: z.ZodOptional<z.ZodString>;
|
|
76
|
+
version: z.ZodOptional<z.ZodString>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
forkedFrom: z.ZodOptional<z.ZodString>;
|
|
79
|
+
group: z.ZodString;
|
|
80
|
+
category: z.ZodOptional<z.ZodString>;
|
|
81
|
+
author: z.ZodOptional<z.ZodString>;
|
|
82
|
+
files: z.ZodArray<z.ZodObject<{
|
|
83
|
+
path: z.ZodString;
|
|
84
|
+
hash: z.ZodOptional<z.ZodString>;
|
|
85
|
+
version: z.ZodOptional<z.ZodString>;
|
|
86
|
+
type: z.ZodEnum<{
|
|
87
|
+
component: "component";
|
|
88
|
+
hook: "hook";
|
|
89
|
+
meta: "meta";
|
|
90
|
+
style: "style";
|
|
91
|
+
type: "type";
|
|
92
|
+
util: "util";
|
|
93
|
+
}>;
|
|
94
|
+
}, z.core.$strip>>;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
/** One installable component, the type `ComponentMetaSchema` parses. */
|
|
97
|
+
export type ComponentMeta = z.infer<typeof ComponentMetaSchema>;
|
|
98
|
+
/** Installable components by key, e.g. `button` or `@shadcn/button`. */
|
|
99
|
+
export type ComponentRegistry = Record<string, ComponentMeta>;
|
|
100
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,uBAAuB;;;;;;;EAOlC,CAAC;AAEH,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,sGAAsG;AACtG,eAAO,MAAM,mBAAmB;;;;;;;;;;;;iBAE9B,CAAC;AAEH,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;iBAQlC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAEH,wEAAwE;AACxE,MAAM,MAAM,aAAa,GAAO,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACpE,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// packages/ui/src/registry/types.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { BaseFileEntrySchema } from "@g3nomaly/core/registry";
|
|
4
|
+
import { OriginEntrySchema } from "@g3nomaly/core/installer";
|
|
5
|
+
export const ComponentFileTypeSchema = z.enum([
|
|
6
|
+
"component",
|
|
7
|
+
"style",
|
|
8
|
+
"util",
|
|
9
|
+
"hook",
|
|
10
|
+
"type",
|
|
11
|
+
"meta",
|
|
12
|
+
]);
|
|
13
|
+
/** One file of a component; `path` is relative to the components directory, e.g. `basic/Card.tsx`. */
|
|
14
|
+
export const ComponentFileSchema = BaseFileEntrySchema.extend({
|
|
15
|
+
type: ComponentFileTypeSchema,
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* @brief A component as it ships: what a `*.meta.ts` file declares and what
|
|
19
|
+
* `dist/components.json` holds per component, before a source reads it.
|
|
20
|
+
*
|
|
21
|
+
* @property version - Set at build time from the package version.
|
|
22
|
+
* @property registryDependencies - Keys of components this one needs installed beside it, e.g. `button`.
|
|
23
|
+
* @property files - Files of the component, each with its path and `ComponentFileType`.
|
|
24
|
+
*/
|
|
25
|
+
export const PackagedComponentSchema = z.object({
|
|
26
|
+
name: z.string().min(1),
|
|
27
|
+
description: z.string().optional(),
|
|
28
|
+
version: z.string().min(1).optional(),
|
|
29
|
+
category: z.string().optional(),
|
|
30
|
+
author: z.string().optional(),
|
|
31
|
+
registryDependencies: z.array(z.string()).optional(),
|
|
32
|
+
files: z.array(ComponentFileSchema).min(1),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* @brief One installable component, read from a source by `readComponentSource`
|
|
36
|
+
* or the shadcn adapter, and written per install into the g3nui manifest by
|
|
37
|
+
* the `add` and `update` commands.
|
|
38
|
+
*
|
|
39
|
+
* @property group - Display group: the category, or the first folder of the first file, e.g. `basic`.
|
|
40
|
+
* @property files - Files the install writes, each with its path and `ComponentFileType`.
|
|
41
|
+
*/
|
|
42
|
+
export const ComponentMetaSchema = OriginEntrySchema.extend({
|
|
43
|
+
group: z.string().min(1),
|
|
44
|
+
category: z.string().optional(),
|
|
45
|
+
author: z.string().optional(),
|
|
46
|
+
files: z.array(ComponentFileSchema).min(1),
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5C,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAKH,sGAAsG;AACtG,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAC5D,IAAI,EAAE,uBAAuB;CAC9B,CAAC,CAAC;AAKH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAkB,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,WAAW,EAAW,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,OAAO,EAAe,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,QAAQ,EAAc,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,MAAM,EAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,KAAK,EAAiB,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1D,CAAC,CAAC;AAKH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC1D,KAAK,EAAK,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAI,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAK,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9C,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SourceRecord } from "@g3nomaly/core/sources";
|
|
2
|
+
/**
|
|
3
|
+
* @brief Sources every project has without registering them; they cannot be
|
|
4
|
+
* removed. `g3nui` is this package's own folder, so the components always
|
|
5
|
+
* match the CLI that installs them.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BUILTIN_SOURCES: SourceRecord;
|
|
8
|
+
//# sourceMappingURL=builtins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/sources/builtins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,YAE7B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { findPackageRoot } from "@g3nomaly/core/utils";
|
|
2
|
+
/**
|
|
3
|
+
* @brief Sources every project has without registering them; they cannot be
|
|
4
|
+
* removed. `g3nui` is this package's own folder, so the components always
|
|
5
|
+
* match the CLI that installs them.
|
|
6
|
+
*/
|
|
7
|
+
export const BUILTIN_SOURCES = {
|
|
8
|
+
g3nui: { kind: "local", path: findPackageRoot(import.meta.dir) },
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=builtins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/sources/builtins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;CACjE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,87 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@g3nomaly/ui",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
3
|
+
"version": "0.3.2",
|
|
4
|
+
"description": "Component library with CLI installer for g3n projects.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"g3nui": "./dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./registry": {
|
|
18
|
+
"types": "./dist/registry/index.d.ts",
|
|
19
|
+
"default": "./dist/registry/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./types": {
|
|
22
|
+
"types": "./dist/registry/types.d.ts",
|
|
23
|
+
"default": "./dist/registry/types.js"
|
|
24
|
+
},
|
|
25
|
+
"./package.json": "./package.json",
|
|
26
|
+
"./cli/adapter": {
|
|
27
|
+
"types": "./dist/cli/adapter.d.ts",
|
|
28
|
+
"default": "./dist/cli/adapter.js"
|
|
29
|
+
},
|
|
30
|
+
"./cli/commands": {
|
|
31
|
+
"types": "./dist/cli/commands/index.d.ts",
|
|
32
|
+
"default": "./dist/cli/commands/index.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build:types": "tsc --project tsconfig.build.json",
|
|
40
|
+
"build:components": "bun scripts/build-components.ts",
|
|
41
|
+
"build:registry": "bun scripts/build-registry.ts",
|
|
42
|
+
"build": "rm -rf dist && bun run build:types && bun run build:components && bun run build:registry",
|
|
43
|
+
"dev": "tsc --project tsconfig.build.json --watch",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
46
|
+
"g3nui": "bun run src/cli/index.ts"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@clack/prompts": "^1.7.0",
|
|
50
|
+
"@g3nomaly/core": "^0.3.2",
|
|
51
|
+
"chalk": "^6.0.0",
|
|
52
|
+
"commander": "^15.0.0",
|
|
53
|
+
"glob": "^13.0.6",
|
|
54
|
+
"zod": "^4.4.3"
|
|
55
|
+
},
|
|
56
|
+
"overrides": {
|
|
57
|
+
"minimatch": "^10.2.5"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/bun": "^1.4.0",
|
|
61
|
+
"@types/node": "^26.2.0",
|
|
62
|
+
"typescript": "^7.0.2"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"react": "latest",
|
|
66
|
+
"react-dom": "latest"
|
|
67
|
+
},
|
|
68
|
+
"peerDependenciesMeta": {
|
|
69
|
+
"react": {
|
|
70
|
+
"optional": true
|
|
71
|
+
},
|
|
72
|
+
"react-dom": {
|
|
73
|
+
"optional": true
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"keywords": [
|
|
77
|
+
"components",
|
|
78
|
+
"ui",
|
|
79
|
+
"cli",
|
|
80
|
+
"registry",
|
|
81
|
+
"shadcn"
|
|
82
|
+
],
|
|
83
|
+
"license": "Elastic-2.0",
|
|
84
|
+
"publishConfig": {
|
|
85
|
+
"access": "public"
|
|
86
|
+
}
|
|
6
87
|
}
|
package/README.md
DELETED