@layoutdesign/context 0.2.0 → 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/README.md +25 -11
- package/dist/bin/cli.js +17 -32
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/cli/doctor.d.ts +4 -1
- package/dist/src/cli/doctor.d.ts.map +1 -1
- package/dist/src/cli/doctor.js +37 -6
- package/dist/src/cli/doctor.js.map +1 -1
- package/dist/src/cli/import-zip.d.ts.map +1 -1
- package/dist/src/cli/import-zip.js +11 -3
- package/dist/src/cli/import-zip.js.map +1 -1
- package/dist/src/cli/init.js +4 -4
- package/dist/src/cli/install.d.ts +1 -0
- package/dist/src/cli/install.d.ts.map +1 -1
- package/dist/src/cli/install.js +84 -19
- package/dist/src/cli/install.js.map +1 -1
- package/dist/src/cli/serve-local.d.ts +5 -0
- package/dist/src/cli/serve-local.d.ts.map +1 -0
- package/dist/src/cli/serve-local.js +109 -0
- package/dist/src/cli/serve-local.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/kit/loader.d.ts.map +1 -1
- package/dist/src/kit/loader.js +17 -9
- package/dist/src/kit/loader.js.map +1 -1
- package/dist/src/kit/parser.d.ts +4 -4
- package/dist/src/kit/parser.js +4 -4
- package/dist/src/kit/types.d.ts +2 -2
- package/dist/src/kit/types.js +1 -1
- package/dist/src/mcp/tools/design-in-figma.js +1 -1
- package/dist/src/mcp/tools/get-design-system.js +3 -3
- package/dist/src/mcp/tools/list-components.js +1 -1
- package/dist/src/mcp/tools/push-to-figma.d.ts +9 -1
- package/dist/src/mcp/tools/push-to-figma.d.ts.map +1 -1
- package/dist/src/mcp/tools/push-to-figma.js +163 -86
- package/dist/src/mcp/tools/push-to-figma.js.map +1 -1
- package/dist/src/mcp/tools/update-tokens.js +14 -14
- package/dist/src/preview/server.d.ts.map +1 -1
- package/dist/src/preview/server.js +11 -5
- package/dist/src/preview/server.js.map +1 -1
- package/dist/src/preview/ws.d.ts +4 -0
- package/dist/src/preview/ws.d.ts.map +1 -1
- package/dist/src/preview/ws.js +9 -1
- package/dist/src/preview/ws.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/cli/config.d.ts +0 -19
- package/dist/src/cli/config.d.ts.map +0 -1
- package/dist/src/cli/config.js +0 -100
- package/dist/src/cli/config.js.map +0 -1
- package/dist/src/cli/login.d.ts +0 -4
- package/dist/src/cli/login.d.ts.map +0 -1
- package/dist/src/cli/login.js +0 -58
- package/dist/src/cli/login.js.map +0 -1
- package/dist/src/cli/pull.d.ts +0 -8
- package/dist/src/cli/pull.d.ts.map +0 -1
- package/dist/src/cli/pull.js +0 -108
- package/dist/src/cli/pull.js.map +0 -1
- /package/kits/linear-lite/{DESIGN.md → layout.md} +0 -0
- /package/kits/notion-lite/{DESIGN.md → layout.md} +0 -0
- /package/kits/stripe-lite/{DESIGN.md → layout.md} +0 -0
package/dist/src/cli/config.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
const CONFIG_FILENAME = ".layoutrc";
|
|
5
|
-
const ENV_KEY = "LAYOUT_API_KEY";
|
|
6
|
-
const ENV_BASE_URL = "LAYOUT_BASE_URL";
|
|
7
|
-
const DEFAULT_BASE_URL = "https://layout.design";
|
|
8
|
-
function getGlobalConfigPath() {
|
|
9
|
-
return path.join(os.homedir(), CONFIG_FILENAME);
|
|
10
|
-
}
|
|
11
|
-
function getLocalConfigPath() {
|
|
12
|
-
return path.join(process.cwd(), CONFIG_FILENAME);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Read config from (in priority order): env vars > local .layoutrc > global ~/.layoutrc
|
|
16
|
-
*/
|
|
17
|
-
export function readConfig() {
|
|
18
|
-
const config = {};
|
|
19
|
-
// 1. Global config (~/.layoutrc)
|
|
20
|
-
const globalPath = getGlobalConfigPath();
|
|
21
|
-
if (fs.existsSync(globalPath)) {
|
|
22
|
-
Object.assign(config, parseConfigFile(globalPath));
|
|
23
|
-
}
|
|
24
|
-
// 2. Local config (./.layoutrc) — overrides global
|
|
25
|
-
const localPath = getLocalConfigPath();
|
|
26
|
-
if (fs.existsSync(localPath)) {
|
|
27
|
-
Object.assign(config, parseConfigFile(localPath));
|
|
28
|
-
}
|
|
29
|
-
// 3. Env vars — highest priority
|
|
30
|
-
if (process.env[ENV_KEY]) {
|
|
31
|
-
config.apiKey = process.env[ENV_KEY];
|
|
32
|
-
}
|
|
33
|
-
if (process.env[ENV_BASE_URL]) {
|
|
34
|
-
config.baseUrl = process.env[ENV_BASE_URL];
|
|
35
|
-
}
|
|
36
|
-
if (!config.baseUrl) {
|
|
37
|
-
config.baseUrl = DEFAULT_BASE_URL;
|
|
38
|
-
}
|
|
39
|
-
return config;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Save config to ~/.layoutrc (global). File is created with 0o600 permissions.
|
|
43
|
-
*/
|
|
44
|
-
export function saveConfig(updates) {
|
|
45
|
-
const configPath = getGlobalConfigPath();
|
|
46
|
-
const existing = fs.existsSync(configPath) ? parseConfigFile(configPath) : {};
|
|
47
|
-
const merged = { ...existing, ...updates };
|
|
48
|
-
const lines = [
|
|
49
|
-
"# Layout CLI config — https://layout.design",
|
|
50
|
-
"# Do not commit this file to version control",
|
|
51
|
-
];
|
|
52
|
-
if (merged.apiKey)
|
|
53
|
-
lines.push(`api_key=${merged.apiKey}`);
|
|
54
|
-
if (merged.baseUrl && merged.baseUrl !== DEFAULT_BASE_URL) {
|
|
55
|
-
lines.push(`base_url=${merged.baseUrl}`);
|
|
56
|
-
}
|
|
57
|
-
if (merged.defaultProjectId) {
|
|
58
|
-
lines.push(`default_project_id=${merged.defaultProjectId}`);
|
|
59
|
-
}
|
|
60
|
-
fs.writeFileSync(configPath, lines.join("\n") + "\n", { mode: 0o600 });
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Delete the global config file.
|
|
64
|
-
*/
|
|
65
|
-
export function clearConfig() {
|
|
66
|
-
const configPath = getGlobalConfigPath();
|
|
67
|
-
if (fs.existsSync(configPath)) {
|
|
68
|
-
fs.unlinkSync(configPath);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
export function getGlobalConfigLocation() {
|
|
72
|
-
return getGlobalConfigPath();
|
|
73
|
-
}
|
|
74
|
-
function parseConfigFile(filePath) {
|
|
75
|
-
const content = fs.readFileSync(filePath, "utf-8");
|
|
76
|
-
const config = {};
|
|
77
|
-
for (const line of content.split("\n")) {
|
|
78
|
-
const trimmed = line.trim();
|
|
79
|
-
if (!trimmed || trimmed.startsWith("#"))
|
|
80
|
-
continue;
|
|
81
|
-
const eqIndex = trimmed.indexOf("=");
|
|
82
|
-
if (eqIndex === -1)
|
|
83
|
-
continue;
|
|
84
|
-
const key = trimmed.slice(0, eqIndex).trim();
|
|
85
|
-
const value = trimmed.slice(eqIndex + 1).trim();
|
|
86
|
-
switch (key) {
|
|
87
|
-
case "api_key":
|
|
88
|
-
config.apiKey = value;
|
|
89
|
-
break;
|
|
90
|
-
case "base_url":
|
|
91
|
-
config.baseUrl = value;
|
|
92
|
-
break;
|
|
93
|
-
case "default_project_id":
|
|
94
|
-
config.defaultProjectId = value;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return config;
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAQzB,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD,SAAS,mBAAmB;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,iCAAiC;IACjC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAA8B;IACvD,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAE3C,MAAM,KAAK,GAAa;QACtB,6CAA6C;QAC7C,8CAA8C;KAC/C,CAAC;IACF,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,SAAS;QAE7B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhD,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,SAAS;gBACZ,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBACvB,MAAM;YACR,KAAK,oBAAoB;gBACvB,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAChC,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/src/cli/login.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/login.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAepC"}
|
package/dist/src/cli/login.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { readConfig, saveConfig, clearConfig, getGlobalConfigLocation } from "./config.js";
|
|
3
|
-
export async function loginCommand(apiKey) {
|
|
4
|
-
if (!apiKey.startsWith("lyt_")) {
|
|
5
|
-
console.log(chalk.red("Error:"), "Invalid API key format. Keys start with lyt_");
|
|
6
|
-
process.exit(1);
|
|
7
|
-
}
|
|
8
|
-
const config = readConfig();
|
|
9
|
-
const baseUrl = config.baseUrl ?? "https://layout.design";
|
|
10
|
-
console.log(chalk.dim("Validating API key..."));
|
|
11
|
-
try {
|
|
12
|
-
const res = await fetch(`${baseUrl}/api/export/pull`, {
|
|
13
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
14
|
-
});
|
|
15
|
-
if (res.status === 401) {
|
|
16
|
-
console.log(chalk.red("Error:"), "Invalid or revoked API key.");
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
if (res.status === 403) {
|
|
20
|
-
console.log(chalk.red("Error:"), "API key does not have read scope.");
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
// 404 is fine — means auth worked but no projects exist yet
|
|
24
|
-
if (!res.ok && res.status !== 404) {
|
|
25
|
-
console.log(chalk.red("Error:"), `Unexpected response: ${res.status}`);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
catch (err) {
|
|
30
|
-
console.log(chalk.red("Error:"), `Could not connect to ${baseUrl}: ${err instanceof Error ? err.message : "unknown error"}`);
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
saveConfig({ apiKey });
|
|
34
|
-
const preview = `${apiKey.slice(0, 7)}...${apiKey.slice(-4)}`;
|
|
35
|
-
console.log(chalk.green("✓"), `Authenticated as ${chalk.bold(preview)}`);
|
|
36
|
-
console.log(chalk.dim(` Key saved to ${getGlobalConfigLocation()}`));
|
|
37
|
-
console.log();
|
|
38
|
-
console.log(`Run ${chalk.cyan("layout-context pull")} to fetch your design system.`);
|
|
39
|
-
}
|
|
40
|
-
export function logoutCommand() {
|
|
41
|
-
clearConfig();
|
|
42
|
-
console.log(chalk.green("✓"), "Logged out. API key removed from ~/.layoutrc");
|
|
43
|
-
}
|
|
44
|
-
export function whoamiCommand() {
|
|
45
|
-
const config = readConfig();
|
|
46
|
-
if (!config.apiKey) {
|
|
47
|
-
console.log(chalk.yellow("Not authenticated."));
|
|
48
|
-
console.log(` Run ${chalk.cyan("layout-context login <api-key>")} to get started.`);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const preview = `${config.apiKey.slice(0, 7)}...${config.apiKey.slice(-4)}`;
|
|
52
|
-
console.log(chalk.green("✓"), `Authenticated as ${chalk.bold(preview)}`);
|
|
53
|
-
console.log(` Base URL: ${chalk.dim(config.baseUrl)}`);
|
|
54
|
-
if (config.defaultProjectId) {
|
|
55
|
-
console.log(` Default project: ${chalk.dim(config.defaultProjectId)}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,8CAA8C,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,kBAAkB,EAAE;YACpD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;SAC/C,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,6BAA6B,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,mCAAmC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,wBAAwB,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC3F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvB,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,oBAAoB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,+BAA+B,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,8CAA8C,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,kBAAkB,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,oBAAoB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
|
package/dist/src/cli/pull.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/pull.ts"],"names":[],"mappings":"AAgBA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
|
package/dist/src/cli/pull.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import chalk from "chalk";
|
|
4
|
-
import { readConfig } from "./config.js";
|
|
5
|
-
import { LAYOUT_DIR } from "../kit/types.js";
|
|
6
|
-
export async function pullCommand(projectIdArg, options) {
|
|
7
|
-
const config = readConfig();
|
|
8
|
-
if (!config.apiKey) {
|
|
9
|
-
console.log(chalk.red("Error:"), "Not authenticated.");
|
|
10
|
-
console.log(` Run ${chalk.cyan("layout-context login <api-key>")} first.`);
|
|
11
|
-
process.exit(1);
|
|
12
|
-
}
|
|
13
|
-
const projectId = projectIdArg ?? options.projectId ?? config.defaultProjectId;
|
|
14
|
-
const outputDir = options.output ?? LAYOUT_DIR;
|
|
15
|
-
const baseUrl = config.baseUrl ?? "https://layout.design";
|
|
16
|
-
// Build query params
|
|
17
|
-
const params = new URLSearchParams();
|
|
18
|
-
if (projectId)
|
|
19
|
-
params.set("projectId", projectId);
|
|
20
|
-
if (options.formats)
|
|
21
|
-
params.set("formats", options.formats);
|
|
22
|
-
const url = `${baseUrl}/api/export/pull${params.toString() ? `?${params}` : ""}`;
|
|
23
|
-
console.log(chalk.dim("Pulling design context..."));
|
|
24
|
-
let res;
|
|
25
|
-
try {
|
|
26
|
-
res = await fetch(url, {
|
|
27
|
-
headers: { Authorization: `Bearer ${config.apiKey}` },
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
catch (err) {
|
|
31
|
-
console.log(chalk.red("Error:"), `Could not connect to ${baseUrl}: ${err instanceof Error ? err.message : "unknown error"}`);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
if (!res.ok) {
|
|
35
|
-
const body = (await res.json().catch(() => ({ error: "Unknown error" })));
|
|
36
|
-
console.log(chalk.red("Error:"), body.error ?? `HTTP ${res.status}`);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
const data = (await res.json());
|
|
40
|
-
const fileEntries = Object.entries(data.files);
|
|
41
|
-
if (fileEntries.length === 0) {
|
|
42
|
-
console.log(chalk.yellow("Warning:"), "No files returned. Check your project has extraction data.");
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
// Write files
|
|
46
|
-
const cwd = process.cwd();
|
|
47
|
-
let created = 0;
|
|
48
|
-
let updated = 0;
|
|
49
|
-
for (const [relativePath, content] of fileEntries) {
|
|
50
|
-
const fullPath = path.join(cwd, outputDir, relativePath);
|
|
51
|
-
const dir = path.dirname(fullPath);
|
|
52
|
-
if (!fs.existsSync(dir)) {
|
|
53
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
54
|
-
}
|
|
55
|
-
const existed = fs.existsSync(fullPath);
|
|
56
|
-
fs.writeFileSync(fullPath, content, "utf-8");
|
|
57
|
-
if (existed) {
|
|
58
|
-
updated++;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
created++;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
console.log();
|
|
65
|
-
console.log(chalk.green("✓"), `Pulled ${chalk.bold(data.project.name)}`);
|
|
66
|
-
console.log();
|
|
67
|
-
for (const relativePath of Object.keys(data.files)) {
|
|
68
|
-
console.log(` ${chalk.dim("•")} ${outputDir}/${relativePath}`);
|
|
69
|
-
}
|
|
70
|
-
console.log();
|
|
71
|
-
console.log(chalk.dim(` ${created} created, ${updated} updated — ${fileEntries.length} files total`));
|
|
72
|
-
// Merge CLAUDE.md into root if present
|
|
73
|
-
const claudeMdPath = path.join(cwd, outputDir, "CLAUDE.md");
|
|
74
|
-
if (fs.existsSync(claudeMdPath)) {
|
|
75
|
-
mergeClaudeMd(cwd, claudeMdPath);
|
|
76
|
-
}
|
|
77
|
-
console.log();
|
|
78
|
-
console.log(`Run ${chalk.cyan("layout-context install")} to connect the MCP server.`);
|
|
79
|
-
}
|
|
80
|
-
/** Markers for idempotent CLAUDE.md injection */
|
|
81
|
-
const SECTION_START = "<!-- layout:design-system:start -->";
|
|
82
|
-
const SECTION_END = "<!-- layout:design-system:end -->";
|
|
83
|
-
function mergeClaudeMd(cwd, sourcePath) {
|
|
84
|
-
const content = fs.readFileSync(sourcePath, "utf-8").trim();
|
|
85
|
-
if (!content)
|
|
86
|
-
return;
|
|
87
|
-
const wrapped = `${SECTION_START}\n${content}\n${SECTION_END}`;
|
|
88
|
-
const rootPath = path.join(cwd, "CLAUDE.md");
|
|
89
|
-
if (fs.existsSync(rootPath)) {
|
|
90
|
-
const existing = fs.readFileSync(rootPath, "utf-8");
|
|
91
|
-
const startIdx = existing.indexOf(SECTION_START);
|
|
92
|
-
const endIdx = existing.indexOf(SECTION_END);
|
|
93
|
-
if (startIdx !== -1 && endIdx !== -1) {
|
|
94
|
-
const before = existing.slice(0, startIdx);
|
|
95
|
-
const after = existing.slice(endIdx + SECTION_END.length);
|
|
96
|
-
fs.writeFileSync(rootPath, before + wrapped + after);
|
|
97
|
-
console.log(` ${chalk.dim("•")} CLAUDE.md (updated design system section)`);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const separator = existing.endsWith("\n") ? "\n" : "\n\n";
|
|
101
|
-
fs.writeFileSync(rootPath, existing + separator + wrapped + "\n");
|
|
102
|
-
console.log(` ${chalk.dim("•")} CLAUDE.md (appended design system section)`);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
fs.writeFileSync(rootPath, wrapped + "\n");
|
|
106
|
-
console.log(` ${chalk.dim("•")} CLAUDE.md (created with design system section)`);
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=pull.js.map
|
package/dist/src/cli/pull.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/pull.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|