@dsmith-dev/catalog 0.0.0-stage → 0.2.1

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dahee Hwang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
- # Temporary Holding Version
1
+ # @dsmith-dev/catalog
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ dsmith ai: component catalog from a local or npm design system.
4
+
5
+ Docs: https://github.com/project-hh-org/dsmith#readme
@@ -0,0 +1,15 @@
1
+ import type { Catalog } from "@dsmith-dev/core";
2
+ /** 스펙 §3 예약 마커 — install의 `<!-- dsmith:start -->`와 별개 블록 */
3
+ export declare const DS_MARKERS: {
4
+ readonly start: "<!-- dsmith:ds:start -->";
5
+ readonly end: "<!-- dsmith:ds:end -->";
6
+ };
7
+ /**
8
+ * 섹션에 적는 MCP 도구 이름. catalog → mcp-server 의존을 피하려고 상수로 둔다
9
+ * (mcp-server의 TOOL_NAMES와 같은지는 Task 8 일관성 테스트가 대조).
10
+ */
11
+ export declare const MCP_TOOL_NAMES_IN_SECTION: readonly string[];
12
+ export declare const SECTION_MAX_LINES = 80;
13
+ /** 마커 사이에 들어갈 본문(마커 제외, ≤80줄, 결정적: 타임스탬프·절대 경로 없음). usageOrder = 사용 수 순 컴포넌트 이름 */
14
+ export declare function renderAgentsDsSection(catalog: Catalog, usageOrder: string[]): string;
15
+ //# sourceMappingURL=agents-section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-section.d.ts","sourceRoot":"","sources":["../src/agents-section.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,kBAAkB,CAAC;AAEjF,4DAA4D;AAC5D,eAAO,MAAM,UAAU;;;CAAgF,CAAC;AAExG;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAOtD,CAAC;AAEF,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAmFpC,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAuDpF"}
@@ -0,0 +1,131 @@
1
+ /** 스펙 §3 예약 마커 — install의 `<!-- dsmith:start -->`와 별개 블록 */
2
+ export const DS_MARKERS = { start: "<!-- dsmith:ds:start -->", end: "<!-- dsmith:ds:end -->" };
3
+ /**
4
+ * 섹션에 적는 MCP 도구 이름. catalog → mcp-server 의존을 피하려고 상수로 둔다
5
+ * (mcp-server의 TOOL_NAMES와 같은지는 Task 8 일관성 테스트가 대조).
6
+ */
7
+ export const MCP_TOOL_NAMES_IN_SECTION = [
8
+ "resolve_token",
9
+ "lint_snippet",
10
+ "search_component",
11
+ "get_component",
12
+ "explain_decision",
13
+ "list_decisions",
14
+ ];
15
+ export const SECTION_MAX_LINES = 80;
16
+ const TOP_COMPONENTS = 20;
17
+ const MAX_DEPRECATED = 10;
18
+ const MAX_SCAFFOLDS = 20;
19
+ const MAX_TOKEN_FILES = 3;
20
+ const DEPRECATED_NOTE_MAX = 80;
21
+ /** 마커 모양·줄바꿈이 본문에 섞이지 않게 한 줄로 만든다 */
22
+ function oneLine(text, max) {
23
+ let s = text.replace(/<!--|-->/g, "").replace(/\s+/g, " ").trim();
24
+ if (max !== undefined && s.length > max) {
25
+ // 마크다운 링크 `[글](주소)` 한가운데서 자르면 깨진 링크가 남는다 — 링크 앞에서 자른다.
26
+ let cut = max - 1;
27
+ for (const m of s.matchAll(/!?\[[^\]]*\]\([^)]*\)/g)) {
28
+ const start = m.index ?? 0;
29
+ if (start < cut && start + m[0].length > cut) {
30
+ cut = start;
31
+ break;
32
+ }
33
+ }
34
+ s = `${s.slice(0, cut).trimEnd()}…`;
35
+ }
36
+ return s;
37
+ }
38
+ function tick(s) {
39
+ return `\`${oneLine(s).replace(/`/g, "'")}\``;
40
+ }
41
+ function sourceLabel(s) {
42
+ if (s.origin === "ds-npm") {
43
+ const name = s.packageName ?? "(알 수 없음)";
44
+ return `${tick(s.packageVersion === undefined ? name : `${name}@${s.packageVersion}`)} (npm)`;
45
+ }
46
+ if (s.origin === "init") {
47
+ const dir = (s.dir ?? "design-system/components").replace(/\/components$/, "");
48
+ return `${tick(`${dir === "components" ? "." : dir}/`)} (dsmith init 초안)`;
49
+ }
50
+ return `${tick(s.dir ?? ".")} (로컬)`;
51
+ }
52
+ /** init 산출 소스의 산출 디렉터리("design-system/components" → "design-system") */
53
+ function initDirOf(s) {
54
+ return (s.dir ?? "design-system/components").replace(/\/components$/, "");
55
+ }
56
+ function tokenLine(catalog) {
57
+ const files = [...new Set(catalog.tokens.map((t) => t.file).filter((f) => f !== ""))];
58
+ const initSources = catalog.sources.filter((s) => s.origin === "init");
59
+ if (files.length === 0) {
60
+ // npm DS는 토큰 파일이 없는 게 정상이다 — init을 권하지 않는다.
61
+ if (catalog.sources.some((s) => s.origin === "ds-npm"))
62
+ return null;
63
+ return "- 토큰 파일: 없음 — `dsmith init`으로 초안 생성";
64
+ }
65
+ const shown = files.slice(0, MAX_TOKEN_FILES).map(tick).join(", ");
66
+ const more = files.length > MAX_TOKEN_FILES ? ` 외 ${files.length - MAX_TOKEN_FILES}개` : "";
67
+ // init 산출은 같은 디렉터리에 CSS 변수 파일(tokens.css)도 있다 — 코드에서는 이쪽을 쓴다.
68
+ // 이미 '토큰 파일'로 적힌 tokens.css(재 audit 뒤 감지된 경우)는 CSS 변수로 한 번 더 적지 않는다.
69
+ const css = initSources
70
+ .map((s) => {
71
+ const dir = initDirOf(s);
72
+ return dir === "components" || dir === "." ? "tokens.css" : `${dir}/tokens.css`;
73
+ })
74
+ .filter((f) => !files.slice(0, MAX_TOKEN_FILES).includes(f))
75
+ .map(tick);
76
+ const cssNote = css.length > 0 ? ` · CSS 변수: ${[...new Set(css)].join(", ")}` : "";
77
+ return `- 토큰 파일: ${shown}${more} (토큰 ${catalog.tokens.length}개)${cssNote}`;
78
+ }
79
+ function orderedNames(components, usageOrder) {
80
+ const known = new Set(components.map((c) => c.name));
81
+ const out = [];
82
+ const seen = new Set();
83
+ for (const name of [...usageOrder, ...components.map((c) => c.name)]) {
84
+ if (known.has(name) && !seen.has(name)) {
85
+ seen.add(name);
86
+ out.push(name);
87
+ }
88
+ }
89
+ return out;
90
+ }
91
+ /** 마커 사이에 들어갈 본문(마커 제외, ≤80줄, 결정적: 타임스탬프·절대 경로 없음). usageOrder = 사용 수 순 컴포넌트 이름 */
92
+ export function renderAgentsDsSection(catalog, usageOrder) {
93
+ const lines = [];
94
+ lines.push("## 이 레포의 디자인 시스템 (dsmith ai가 생성 — 직접 고치면 다음 ai가 덮어쓰지 않음)", "");
95
+ lines.push(catalog.sources.length === 0
96
+ ? "- DS 위치: 찾지 못함"
97
+ : `- DS 위치: ${catalog.sources.map(sourceLabel).join(" · ")}`);
98
+ const tokens = tokenLine(catalog);
99
+ if (tokens !== null)
100
+ lines.push(tokens);
101
+ // 골격(init이 만들고 아직 손대지 않은 빈 컴포넌트)은 실제 컴포넌트 목록에 넣지 않는다.
102
+ const real = catalog.components.filter((c) => c.status !== "scaffold");
103
+ const names = orderedNames(real, usageOrder);
104
+ const top = names.slice(0, TOP_COMPONENTS);
105
+ const label = names.length > TOP_COMPONENTS ? `많이 쓰는 순 상위 ${TOP_COMPONENTS}` : "많이 쓰는 순";
106
+ lines.push(top.length === 0
107
+ ? `- 컴포넌트 0개`
108
+ : `- 컴포넌트 ${real.length}개(props 추출 ${real.filter((c) => c.propsStatus === "ok").length}) — ${label}: ${top.join(", ")}`);
109
+ const realNames = new Set(real.map((c) => c.name));
110
+ const scaffolds = [...new Set(catalog.components.filter((c) => c.status === "scaffold" && !realNames.has(c.name)).map((c) => c.name))];
111
+ if (scaffolds.length > 0) {
112
+ const more = scaffolds.length > MAX_SCAFFOLDS ? ` 외 ${scaffolds.length - MAX_SCAFFOLDS}개` : "";
113
+ lines.push(`- 골격(구현 전) — 새 UI에 쓰지 말 것: ${scaffolds.slice(0, MAX_SCAFFOLDS).join(", ")}${more}`);
114
+ }
115
+ const deprecated = catalog.components.filter((c) => c.deprecated !== undefined);
116
+ if (deprecated.length > 0) {
117
+ const shown = deprecated.slice(0, MAX_DEPRECATED).map((c) => {
118
+ const note = oneLine(c.deprecated ?? "", DEPRECATED_NOTE_MAX);
119
+ return note === "" ? c.name : `${c.name} — ${note}`;
120
+ });
121
+ const more = deprecated.length > MAX_DEPRECATED ? ` 외 ${deprecated.length - MAX_DEPRECATED}개` : "";
122
+ lines.push(`- 쓰지 말 것(deprecated): ${shown.join("; ")}${more}`);
123
+ }
124
+ lines.push("", "### 규칙", catalog.tokens.length > 0
125
+ ? "1. 색·간격·모서리·글꼴 크기 값을 하드코딩하지 않는다. 토큰 파일의 변수를 쓴다."
126
+ : "1. 토큰 파일이 있으면 색·간격·모서리·글꼴 크기 값을 하드코딩하지 않고 그 변수를 쓴다.", "2. 값이 필요하면 MCP `resolve_token`으로 가장 가까운 토큰을 찾는다.", "3. 새 UI는 위 컴포넌트를 먼저 쓴다. 고르기 전에 `search_component`·`get_component`로 props를 확인한다.", "4. deprecated 컴포넌트·props는 쓰지 않는다.", "5. 끝나면 `/ds-check`(또는 MCP `lint_snippet`)로 검사한다.", "", `MCP 서버 \`dsmith\` 도구: ${MCP_TOOL_NAMES_IN_SECTION.join(", ")} — 등록은 \`npx dsmith install\`.`);
127
+ if (lines.length > SECTION_MAX_LINES)
128
+ throw new Error(`AGENTS.md DS 섹션이 ${SECTION_MAX_LINES}줄을 넘음`);
129
+ return `${lines.join("\n")}\n`;
130
+ }
131
+ //# sourceMappingURL=agents-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-section.js","sourceRoot":"","sources":["../src/agents-section.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type Catalog, type Index } from "@dsmith-dev/core";
2
+ import type { DetectResult } from "@dsmith-dev/detect";
3
+ export interface BuildCatalogOptions {
4
+ root: string;
5
+ detect: DetectResult;
6
+ index: Index;
7
+ version: string;
8
+ /** 기본 auto */
9
+ from?: "auto" | "ds" | "init";
10
+ }
11
+ export interface BuildCatalogResult {
12
+ catalog: Catalog;
13
+ warnings: string[];
14
+ }
15
+ export declare function buildCatalog(opts: BuildCatalogOptions): Promise<BuildCatalogResult>;
16
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,OAAO,EAIZ,KAAK,KAAK,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAkCD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgEzF"}
package/dist/build.js ADDED
@@ -0,0 +1,109 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { findInitDir, managedFileHash, readCatalogTokens, readInitHashes, withTokenFiles, } from "@dsmith-dev/core";
4
+ import { catalogFromDir } from "./local.js";
5
+ import { compareCodeUnits } from "./names.js";
6
+ import { catalogFromPackage } from "./npm.js";
7
+ import { findStories, storyExample } from "./stories.js";
8
+ const NO_DS_ERROR = "DS를 찾지 못함: detect.ds가 none이고 init 산출도 없음 — 먼저 `dsmith init`";
9
+ async function attachExamples(root, dir, components) {
10
+ const stories = await findStories(root, dir);
11
+ for (const comp of components) {
12
+ const file = stories.get(comp.name);
13
+ if (file === undefined)
14
+ continue;
15
+ try {
16
+ const code = storyExample(await fs.readFile(path.join(root, file), "utf-8"), file);
17
+ if (code !== null)
18
+ comp.examples = [{ file, code }];
19
+ }
20
+ catch {
21
+ // 예제는 선택 정보 — 읽지 못하면 건너뛴다
22
+ }
23
+ }
24
+ }
25
+ /** init이 쓴 뒤 한 글자도 안 바뀐 파일(현재 해시 == `init.json` 엔트리)은 아직 골격이다 → status "scaffold" */
26
+ async function markScaffolds(root, components) {
27
+ const hashes = await readInitHashes(root);
28
+ if (hashes.size === 0)
29
+ return;
30
+ for (const comp of components) {
31
+ if (comp.file === undefined)
32
+ continue;
33
+ const recorded = hashes.get(comp.file);
34
+ if (recorded === undefined)
35
+ continue;
36
+ try {
37
+ if (managedFileHash(await fs.readFile(path.join(root, comp.file), "utf-8")) === recorded)
38
+ comp.status = "scaffold";
39
+ }
40
+ catch {
41
+ // 못 읽으면 골격으로 단정하지 않는다
42
+ }
43
+ }
44
+ }
45
+ export async function buildCatalog(opts) {
46
+ const { root, detect, index, version } = opts;
47
+ const from = opts.from ?? "auto";
48
+ const warnings = [];
49
+ const sources = [];
50
+ const components = [];
51
+ const initDir = from === "ds" ? null : await findInitDir(root);
52
+ const ds = detect.ds;
53
+ if (from !== "init" && ds.kind === "none" && (from === "ds" || initDir === null))
54
+ throw new Error(NO_DS_ERROR);
55
+ if (from !== "init") {
56
+ if (ds.kind === "local" && ds.dir !== undefined) {
57
+ const res = await catalogFromDir(root, ds.dir, "ds-local", index);
58
+ await attachExamples(root, ds.dir, res.components);
59
+ sources.push({ origin: "ds-local", dir: ds.dir });
60
+ components.push(...res.components);
61
+ warnings.push(...res.warnings);
62
+ }
63
+ else if (ds.kind === "npm" && ds.packageName !== undefined) {
64
+ const res = await catalogFromPackage(root, ds.packageName, index);
65
+ sources.push(res.source);
66
+ components.push(...res.components);
67
+ warnings.push(...res.warnings);
68
+ }
69
+ }
70
+ if (from !== "ds") {
71
+ if (initDir === null) {
72
+ if (from === "init")
73
+ warnings.push("init 산출 디렉터리를 찾지 못함 — 먼저 `dsmith init`");
74
+ }
75
+ else {
76
+ const compDir = initDir === "." ? "components" : `${initDir}/components`;
77
+ const res = await catalogFromDir(root, compDir, "init", index);
78
+ await attachExamples(root, compDir, res.components);
79
+ await markScaffolds(root, res.components);
80
+ sources.push({ origin: "init", dir: compDir });
81
+ components.push(...res.components);
82
+ warnings.push(...res.warnings);
83
+ }
84
+ }
85
+ const initTokens = initDir !== null ? (initDir === "." ? "tokens.json" : `${initDir}/tokens.json`) : null;
86
+ const tokenFiles = [...new Set([...ds.tokenFiles, ...(initTokens !== null ? [initTokens] : [])])];
87
+ const read = await readCatalogTokens(root, tokenFiles);
88
+ const tokens = read.tokens;
89
+ warnings.push(...read.warnings);
90
+ for (const f of read.ignored)
91
+ warnings.push(`토큰 파일 형식을 읽지 않음(건너뜀): ${f}`);
92
+ const rank = (c) => (c.origin === "init" ? 1 : 0);
93
+ components.sort((a, b) => rank(a) - rank(b) || compareCodeUnits(a.name, b.name) || compareCodeUnits(a.module, b.module));
94
+ const catalog = {
95
+ version: 1,
96
+ dsmith: version,
97
+ sources: withTokenFiles(sources, read.files, initTokens),
98
+ components,
99
+ tokens,
100
+ stats: {
101
+ components: components.length,
102
+ propsOk: components.filter((c) => c.propsStatus === "ok").length,
103
+ deprecated: components.filter((c) => c.deprecated !== undefined).length,
104
+ tokens: tokens.length,
105
+ },
106
+ };
107
+ return { catalog, warnings };
108
+ }
109
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Statement } from "@babel/types";
2
+ import { type ComponentProps, type PropInfo } from "@dsmith-dev/core";
3
+ export interface DtsSource {
4
+ code: string;
5
+ /** 최상위 interface·type 별칭의 타입 매개변수를 공백으로 지운 사본(오프셋 보존) */
6
+ plain: string;
7
+ file: string;
8
+ body: Statement[];
9
+ }
10
+ /** 최상위 interface·type 별칭의 `<…>`를 지운 코드 */
11
+ export declare function stripTypeParameters(code: string, body: Statement[]): string;
12
+ /** 선언 이름 `local`의 props */
13
+ export declare function propsOfDeclaration(src: DtsSource, local: string): ComponentProps | null;
14
+ export type { PropInfo };
15
+ //# sourceMappingURL=dts-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dts-props.d.ts","sourceRoot":"","sources":["../src/dts-props.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,SAAS,EAAsC,MAAM,cAAc,CAAC;AACxF,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AAUD,0CAA0C;AAC1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAe3E;AAwPD,2BAA2B;AAC3B,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAEvF;AAkDD,YAAY,EAAE,QAAQ,EAAE,CAAC"}