@swarm.ing/pieui 2.0.30 → 2.0.31
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/dist/cli.js
CHANGED
|
@@ -188157,7 +188157,7 @@ var require_typescript_json_schema = __commonJS((exports2) => {
|
|
|
188157
188157
|
});
|
|
188158
188158
|
|
|
188159
188159
|
// src/cli.ts
|
|
188160
|
-
var
|
|
188160
|
+
var import_node_path23 = __toESM(require("node:path"));
|
|
188161
188161
|
|
|
188162
188162
|
// src/code/args.ts
|
|
188163
188163
|
var VALID_CARD_ACTIONS = [
|
|
@@ -188171,7 +188171,8 @@ var VALID_CARD_ACTIONS = [
|
|
|
188171
188171
|
"remote",
|
|
188172
188172
|
"dump-metadata",
|
|
188173
188173
|
"check-sync",
|
|
188174
|
-
"add-story"
|
|
188174
|
+
"add-story",
|
|
188175
|
+
"generate-preview"
|
|
188175
188176
|
];
|
|
188176
188177
|
var VALID_CARD_REMOTE_ACTIONS = [
|
|
188177
188178
|
"push",
|
|
@@ -188375,6 +188376,9 @@ var parseArgs = (argv) => {
|
|
|
188375
188376
|
} else if (action === "add-story") {
|
|
188376
188377
|
result.componentName = positionals[0];
|
|
188377
188378
|
result.cardAddStoryForce = boolFlags.force;
|
|
188379
|
+
} else if (action === "generate-preview") {
|
|
188380
|
+
result.componentName = positionals[0];
|
|
188381
|
+
result.cardGeneratePreviewOut = flags.dumpMetadataOut;
|
|
188378
188382
|
} else if (action === "remote") {
|
|
188379
188383
|
const sub = positionals[0];
|
|
188380
188384
|
if (sub && VALID_CARD_REMOTE_ACTIONS.includes(sub)) {
|
|
@@ -188460,6 +188464,7 @@ var ALL_LINES = [
|
|
|
188460
188464
|
" card list-events <Name> List methods keys on the registered PieCard",
|
|
188461
188465
|
" card add-event <Name> <event> Add a new methods key with a default handler",
|
|
188462
188466
|
" card add-story <Name> [--force] Generate a Storybook stories.tsx wired to PieCard methods",
|
|
188467
|
+
" card generate-preview <Name> [--out file.png] Render the component story via storycap and save a PNG preview",
|
|
188463
188468
|
" card dump-metadata <Name> [--out file.json] Dump full PieMetadata JSON for the component",
|
|
188464
188469
|
" card check-sync <Name> Compare TS ↔ Python metadata; prompt for backend project path if not configured",
|
|
188465
188470
|
" card remote list [--user U] [--project S] List remote components",
|
|
@@ -188531,6 +188536,7 @@ var CARD_LINES = [
|
|
|
188531
188536
|
" list-events <Name> List methods keys on the registered PieCard",
|
|
188532
188537
|
" add-event <Name> <event> Add a new methods key with a default handler",
|
|
188533
188538
|
" add-story <Name> [--force] Generate a Storybook stories.tsx wired to PieCard methods (--force overwrites)",
|
|
188539
|
+
" generate-preview <Name> [--out file.png] Render the component story via storycap and save a PNG preview",
|
|
188534
188540
|
" dump-metadata <Name> [--out file.json] Dump full PieMetadata JSON for the component",
|
|
188535
188541
|
" check-sync <Name> Compare TS ↔ Python metadata; prompts for backend project path",
|
|
188536
188542
|
" remote ... Remote storage operations (see `pieui card remote --help`)",
|
|
@@ -196702,10 +196708,132 @@ var cardAddStoryCommand = (componentName, options = {}) => {
|
|
|
196702
196708
|
printRequirements(cardAddStoryRequirements(componentName));
|
|
196703
196709
|
};
|
|
196704
196710
|
|
|
196705
|
-
// src/code/commands/
|
|
196711
|
+
// src/code/commands/cardGeneratePreview.ts
|
|
196706
196712
|
var import_node_fs15 = __toESM(require("node:fs"));
|
|
196713
|
+
var import_node_http = __toESM(require("node:http"));
|
|
196714
|
+
var import_node_os = __toESM(require("node:os"));
|
|
196707
196715
|
var import_node_path16 = __toESM(require("node:path"));
|
|
196708
196716
|
var import_node_child_process3 = require("node:child_process");
|
|
196717
|
+
var STORYBOOK_PORT = 6006;
|
|
196718
|
+
var STORY_TITLE_NAMESPACE = "PieComponents";
|
|
196719
|
+
var isStorybookReachable = (port) => new Promise((resolve) => {
|
|
196720
|
+
const req = import_node_http.default.get({ hostname: "localhost", port, path: "/index.json" }, (res) => {
|
|
196721
|
+
res.resume();
|
|
196722
|
+
resolve(res.statusCode === 200);
|
|
196723
|
+
});
|
|
196724
|
+
req.on("error", () => resolve(false));
|
|
196725
|
+
req.setTimeout(1500, () => {
|
|
196726
|
+
req.destroy();
|
|
196727
|
+
resolve(false);
|
|
196728
|
+
});
|
|
196729
|
+
});
|
|
196730
|
+
var waitForStorybook = async (port, timeoutMs) => {
|
|
196731
|
+
const deadline = Date.now() + timeoutMs;
|
|
196732
|
+
while (Date.now() < deadline) {
|
|
196733
|
+
if (await isStorybookReachable(port))
|
|
196734
|
+
return true;
|
|
196735
|
+
await new Promise((r) => setTimeout(r, 1500));
|
|
196736
|
+
}
|
|
196737
|
+
return false;
|
|
196738
|
+
};
|
|
196739
|
+
var killProcessTree = (proc) => {
|
|
196740
|
+
if (!proc.pid)
|
|
196741
|
+
return;
|
|
196742
|
+
try {
|
|
196743
|
+
process.kill(-proc.pid, "SIGTERM");
|
|
196744
|
+
} catch {
|
|
196745
|
+
try {
|
|
196746
|
+
proc.kill("SIGTERM");
|
|
196747
|
+
} catch {}
|
|
196748
|
+
}
|
|
196749
|
+
};
|
|
196750
|
+
var cardGeneratePreviewCommand = async (componentName, options = {}) => {
|
|
196751
|
+
if (!componentName) {
|
|
196752
|
+
throw new Error("Component name is required");
|
|
196753
|
+
}
|
|
196754
|
+
const settings = loadSettings();
|
|
196755
|
+
const componentDir = import_node_path16.default.join(settings.componentsDir, componentName);
|
|
196756
|
+
if (!import_node_fs15.default.existsSync(componentDir)) {
|
|
196757
|
+
throw new Error(`Component directory not found: ${componentDir}`);
|
|
196758
|
+
}
|
|
196759
|
+
const storyPath = import_node_path16.default.join(componentDir, `${componentName}.stories.tsx`);
|
|
196760
|
+
if (!import_node_fs15.default.existsSync(storyPath)) {
|
|
196761
|
+
throw new Error(`Story file not found: ${storyPath}
|
|
196762
|
+
` + `Run \`pieui card add-story ${componentName}\` first.`);
|
|
196763
|
+
}
|
|
196764
|
+
const outPath = import_node_path16.default.resolve(process.cwd(), options.out || import_node_path16.default.join(componentDir, "preview.png"));
|
|
196765
|
+
import_node_fs15.default.mkdirSync(import_node_path16.default.dirname(outPath), { recursive: true });
|
|
196766
|
+
const bunBin = process.env.PIEUI_CREATE_BUN_BIN || "bun";
|
|
196767
|
+
let sbProc = null;
|
|
196768
|
+
const alreadyRunning = await isStorybookReachable(STORYBOOK_PORT);
|
|
196769
|
+
if (!alreadyRunning) {
|
|
196770
|
+
console.log(`[pieui] Storybook not running on :${STORYBOOK_PORT} — starting it temporarily...`);
|
|
196771
|
+
sbProc = import_node_child_process3.spawn(bunBin, ["run", "storybook"], {
|
|
196772
|
+
cwd: process.cwd(),
|
|
196773
|
+
stdio: "ignore",
|
|
196774
|
+
env: process.env,
|
|
196775
|
+
detached: true
|
|
196776
|
+
});
|
|
196777
|
+
sbProc.unref();
|
|
196778
|
+
const ready = await waitForStorybook(STORYBOOK_PORT, 180000);
|
|
196779
|
+
if (!ready) {
|
|
196780
|
+
killProcessTree(sbProc);
|
|
196781
|
+
throw new Error("Storybook failed to become reachable within 3 minutes");
|
|
196782
|
+
}
|
|
196783
|
+
console.log(`[pieui] Storybook ready on :${STORYBOOK_PORT}`);
|
|
196784
|
+
} else {
|
|
196785
|
+
console.log(`[pieui] Using running Storybook on :${STORYBOOK_PORT}`);
|
|
196786
|
+
}
|
|
196787
|
+
const tmpDir = import_node_fs15.default.mkdtempSync(import_node_path16.default.join(import_node_os.default.tmpdir(), "pieui-storycap-"));
|
|
196788
|
+
try {
|
|
196789
|
+
const include = `${STORY_TITLE_NAMESPACE}/${componentName}/*`;
|
|
196790
|
+
console.log(`[pieui] Running storycap for "${include}"...`);
|
|
196791
|
+
const result = import_node_child_process3.spawnSync(bunBin, [
|
|
196792
|
+
"x",
|
|
196793
|
+
"storycap@latest",
|
|
196794
|
+
`http://localhost:${STORYBOOK_PORT}`,
|
|
196795
|
+
"--include",
|
|
196796
|
+
include,
|
|
196797
|
+
"--outDir",
|
|
196798
|
+
tmpDir,
|
|
196799
|
+
"--serverTimeout",
|
|
196800
|
+
"60000"
|
|
196801
|
+
], {
|
|
196802
|
+
cwd: process.cwd(),
|
|
196803
|
+
stdio: "inherit",
|
|
196804
|
+
env: process.env
|
|
196805
|
+
});
|
|
196806
|
+
if (result.error) {
|
|
196807
|
+
throw result.error;
|
|
196808
|
+
}
|
|
196809
|
+
if (result.status !== 0) {
|
|
196810
|
+
throw new Error(`storycap exited with code ${result.status ?? "unknown"}`);
|
|
196811
|
+
}
|
|
196812
|
+
const producedDir = import_node_path16.default.join(tmpDir, STORY_TITLE_NAMESPACE, componentName);
|
|
196813
|
+
if (!import_node_fs15.default.existsSync(producedDir)) {
|
|
196814
|
+
throw new Error(`storycap finished but no PNGs were produced under ${producedDir}
|
|
196815
|
+
` + `Tmp listing: ${import_node_fs15.default.readdirSync(tmpDir).join(", ") || "(empty)"}`);
|
|
196816
|
+
}
|
|
196817
|
+
const pngs = import_node_fs15.default.readdirSync(producedDir).filter((f) => f.endsWith(".png")).sort();
|
|
196818
|
+
if (pngs.length === 0) {
|
|
196819
|
+
throw new Error(`No PNGs in ${producedDir}`);
|
|
196820
|
+
}
|
|
196821
|
+
const picked = import_node_path16.default.join(producedDir, pngs[0]);
|
|
196822
|
+
import_node_fs15.default.copyFileSync(picked, outPath);
|
|
196823
|
+
console.log(`[pieui] Preview written: ${outPath}` + (pngs.length > 1 ? ` (picked ${pngs[0]}; other states available: ${pngs.slice(1).join(", ")})` : ""));
|
|
196824
|
+
} finally {
|
|
196825
|
+
import_node_fs15.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
196826
|
+
if (sbProc) {
|
|
196827
|
+
killProcessTree(sbProc);
|
|
196828
|
+
console.log("[pieui] Storybook stopped");
|
|
196829
|
+
}
|
|
196830
|
+
}
|
|
196831
|
+
};
|
|
196832
|
+
|
|
196833
|
+
// src/code/commands/cardAddFromMeta.ts
|
|
196834
|
+
var import_node_fs16 = __toESM(require("node:fs"));
|
|
196835
|
+
var import_node_path17 = __toESM(require("node:path"));
|
|
196836
|
+
var import_node_child_process4 = require("node:child_process");
|
|
196709
196837
|
|
|
196710
196838
|
// src/code/jsonSchemaToTs.ts
|
|
196711
196839
|
var INDENT = " ";
|
|
@@ -196785,11 +196913,11 @@ var jsonSchemaToTsType = (schema) => renderType(asSchema(schema), 0);
|
|
|
196785
196913
|
// src/code/commands/cardAddFromMeta.ts
|
|
196786
196914
|
var PIE_CONFIG_PATH = ".pie/config.json";
|
|
196787
196915
|
var readBackendConfig = () => {
|
|
196788
|
-
const configPath =
|
|
196789
|
-
if (!
|
|
196916
|
+
const configPath = import_node_path17.default.join(process.cwd(), PIE_CONFIG_PATH);
|
|
196917
|
+
if (!import_node_fs16.default.existsSync(configPath))
|
|
196790
196918
|
return null;
|
|
196791
196919
|
try {
|
|
196792
|
-
const parsed = JSON.parse(
|
|
196920
|
+
const parsed = JSON.parse(import_node_fs16.default.readFileSync(configPath, "utf8"));
|
|
196793
196921
|
if (typeof parsed !== "object" || parsed === null)
|
|
196794
196922
|
return null;
|
|
196795
196923
|
return parsed;
|
|
@@ -196806,16 +196934,16 @@ var cardNameToClassFilename = (name) => {
|
|
|
196806
196934
|
return snake.endsWith("_card") ? `${snake}.py` : `${snake}_card.py`;
|
|
196807
196935
|
};
|
|
196808
196936
|
var resolveSource = (fromRaw, cardName, cfg) => {
|
|
196809
|
-
if (fromRaw &&
|
|
196810
|
-
const stat =
|
|
196811
|
-
const abs =
|
|
196937
|
+
if (fromRaw && import_node_fs16.default.existsSync(fromRaw)) {
|
|
196938
|
+
const stat = import_node_fs16.default.statSync(fromRaw);
|
|
196939
|
+
const abs = import_node_path17.default.resolve(fromRaw);
|
|
196812
196940
|
if (stat.isFile() && abs.endsWith(".json")) {
|
|
196813
196941
|
return { kind: "json-file", path: abs };
|
|
196814
196942
|
}
|
|
196815
196943
|
if (stat.isFile() && abs.endsWith(".py")) {
|
|
196816
|
-
const componentsDir2 =
|
|
196817
|
-
const backendRoot2 =
|
|
196818
|
-
const inferred = classFilenameToCardName(
|
|
196944
|
+
const componentsDir2 = import_node_path17.default.dirname(abs);
|
|
196945
|
+
const backendRoot2 = import_node_path17.default.dirname(componentsDir2);
|
|
196946
|
+
const inferred = classFilenameToCardName(import_node_path17.default.basename(abs));
|
|
196819
196947
|
return {
|
|
196820
196948
|
kind: "py-file",
|
|
196821
196949
|
backendRoot: backendRoot2,
|
|
@@ -196823,7 +196951,7 @@ var resolveSource = (fromRaw, cardName, cfg) => {
|
|
|
196823
196951
|
};
|
|
196824
196952
|
}
|
|
196825
196953
|
if (stat.isDirectory()) {
|
|
196826
|
-
const backendRoot2 =
|
|
196954
|
+
const backendRoot2 = import_node_path17.default.dirname(abs);
|
|
196827
196955
|
return { kind: "name", backendRoot: backendRoot2, cardName };
|
|
196828
196956
|
}
|
|
196829
196957
|
throw new Error(`--from path is not a recognized source: ${fromRaw}`);
|
|
@@ -196832,15 +196960,15 @@ var resolveSource = (fromRaw, cardName, cfg) => {
|
|
|
196832
196960
|
if (!cfg?.backendComponentsDir) {
|
|
196833
196961
|
throw new Error(`--from "${fromRaw}" is not an existing path and no backendComponentsDir is configured in ${PIE_CONFIG_PATH}`);
|
|
196834
196962
|
}
|
|
196835
|
-
const componentsDir2 =
|
|
196836
|
-
const backendRoot2 =
|
|
196963
|
+
const componentsDir2 = import_node_path17.default.resolve(cfg.backendComponentsDir);
|
|
196964
|
+
const backendRoot2 = import_node_path17.default.dirname(componentsDir2);
|
|
196837
196965
|
return { kind: "name", backendRoot: backendRoot2, cardName: fromRaw };
|
|
196838
196966
|
}
|
|
196839
196967
|
if (!cfg?.backendComponentsDir) {
|
|
196840
196968
|
throw new Error(`No --from provided and no backendComponentsDir configured in ${PIE_CONFIG_PATH}`);
|
|
196841
196969
|
}
|
|
196842
|
-
const componentsDir =
|
|
196843
|
-
const backendRoot =
|
|
196970
|
+
const componentsDir = import_node_path17.default.resolve(cfg.backendComponentsDir);
|
|
196971
|
+
const backendRoot = import_node_path17.default.dirname(componentsDir);
|
|
196844
196972
|
return { kind: "name", backendRoot, cardName };
|
|
196845
196973
|
};
|
|
196846
196974
|
var unwrapTypescriptEnvelope2 = (parsed) => {
|
|
@@ -196857,11 +196985,11 @@ var unwrapTypescriptEnvelope2 = (parsed) => {
|
|
|
196857
196985
|
};
|
|
196858
196986
|
var fetchMetadata = (source) => {
|
|
196859
196987
|
if (source.kind === "json-file") {
|
|
196860
|
-
const raw =
|
|
196988
|
+
const raw = import_node_fs16.default.readFileSync(source.path, "utf8");
|
|
196861
196989
|
return unwrapTypescriptEnvelope2(JSON.parse(raw));
|
|
196862
196990
|
}
|
|
196863
196991
|
console.log(`[pieui] Invoking: pie card dump-metadata ${source.cardName} (cwd: ${source.backendRoot})`);
|
|
196864
|
-
const result =
|
|
196992
|
+
const result = import_node_child_process4.spawnSync("pie", ["card", "dump-metadata", source.cardName], {
|
|
196865
196993
|
cwd: source.backendRoot,
|
|
196866
196994
|
stdio: ["ignore", "pipe", "pipe"],
|
|
196867
196995
|
env: process.env
|
|
@@ -196993,10 +197121,10 @@ var renderUI = (componentName, meta, inputInterfaceName) => {
|
|
|
196993
197121
|
};
|
|
196994
197122
|
var updateRegistryFile2 = (componentsDir, componentName) => {
|
|
196995
197123
|
const registryPath = resolveRegistryPath(componentsDir);
|
|
196996
|
-
if (!
|
|
197124
|
+
if (!import_node_fs16.default.existsSync(registryPath)) {
|
|
196997
197125
|
throw new Error('registry.ts not found. Run "pieui init" first.');
|
|
196998
197126
|
}
|
|
196999
|
-
let registryContent =
|
|
197127
|
+
let registryContent = import_node_fs16.default.readFileSync(registryPath, "utf8");
|
|
197000
197128
|
const importRegex = new RegExp(`["']@/piecomponents/${componentName}["']`);
|
|
197001
197129
|
if (importRegex.test(registryContent)) {
|
|
197002
197130
|
throw new Error(`Component ${componentName} is already registered in registry.ts`);
|
|
@@ -197005,17 +197133,17 @@ var updateRegistryFile2 = (componentsDir, componentName) => {
|
|
|
197005
197133
|
registryContent = registryContent.trimEnd() + `
|
|
197006
197134
|
` + importLine + `
|
|
197007
197135
|
`;
|
|
197008
|
-
|
|
197136
|
+
import_node_fs16.default.writeFileSync(registryPath, registryContent, "utf8");
|
|
197009
197137
|
};
|
|
197010
197138
|
var hasBackendSourceFor = (componentName) => {
|
|
197011
197139
|
const cfg = readBackendConfig();
|
|
197012
197140
|
if (!cfg?.backendComponentsDir)
|
|
197013
197141
|
return false;
|
|
197014
|
-
const componentsDir =
|
|
197015
|
-
if (!
|
|
197142
|
+
const componentsDir = import_node_path17.default.resolve(cfg.backendComponentsDir);
|
|
197143
|
+
if (!import_node_fs16.default.existsSync(componentsDir))
|
|
197016
197144
|
return false;
|
|
197017
|
-
const candidate =
|
|
197018
|
-
return
|
|
197145
|
+
const candidate = import_node_path17.default.join(componentsDir, cardNameToClassFilename(componentName));
|
|
197146
|
+
return import_node_fs16.default.existsSync(candidate);
|
|
197019
197147
|
};
|
|
197020
197148
|
var cardAddFromMetaCommand = (componentName, componentType, fromRaw) => {
|
|
197021
197149
|
if (!componentName) {
|
|
@@ -197027,8 +197155,8 @@ var cardAddFromMetaCommand = (componentName, componentType, fromRaw) => {
|
|
|
197027
197155
|
const cfg = readBackendConfig();
|
|
197028
197156
|
const source = resolveSource(fromRaw, componentName, cfg);
|
|
197029
197157
|
if (source.kind === "name") {
|
|
197030
|
-
const candidate =
|
|
197031
|
-
if (!
|
|
197158
|
+
const candidate = import_node_path17.default.join(source.backendRoot, import_node_path17.default.basename(import_node_path17.default.resolve(cfg.backendComponentsDir)), cardNameToClassFilename(source.cardName));
|
|
197159
|
+
if (!import_node_fs16.default.existsSync(candidate)) {
|
|
197032
197160
|
console.warn(`[pieui] Note: expected backend file ${candidate} not found; relying on pie's resolution`);
|
|
197033
197161
|
}
|
|
197034
197162
|
}
|
|
@@ -197036,30 +197164,30 @@ var cardAddFromMetaCommand = (componentName, componentType, fromRaw) => {
|
|
|
197036
197164
|
console.log(`[pieui] Loaded metadata for "${meta.name}" (${meta.events.length} events, input: ${meta.inputPropsCode ? "yes" : "no"})`);
|
|
197037
197165
|
const dataInterfaceName = extractTypeName(meta.propsCode) || `${componentName}Data`;
|
|
197038
197166
|
const inputInterfaceName = meta.inputPropsCode ? extractTypeName(meta.inputPropsCode) || `${componentName}StoredInput` : null;
|
|
197039
|
-
const pieComponentsDir =
|
|
197040
|
-
if (!
|
|
197167
|
+
const pieComponentsDir = import_node_path17.default.join(process.cwd(), "piecomponents");
|
|
197168
|
+
if (!import_node_fs16.default.existsSync(pieComponentsDir)) {
|
|
197041
197169
|
throw new Error('piecomponents directory not found. Run "pieui init" first.');
|
|
197042
197170
|
}
|
|
197043
|
-
const componentDir =
|
|
197044
|
-
if (
|
|
197171
|
+
const componentDir = import_node_path17.default.join(pieComponentsDir, componentName);
|
|
197172
|
+
if (import_node_fs16.default.existsSync(componentDir)) {
|
|
197045
197173
|
throw new Error(`Component ${componentName} already exists`);
|
|
197046
197174
|
}
|
|
197047
197175
|
try {
|
|
197048
|
-
|
|
197049
|
-
|
|
197050
|
-
|
|
197051
|
-
|
|
197052
|
-
|
|
197176
|
+
import_node_fs16.default.mkdirSync(import_node_path17.default.join(componentDir, "ui"), { recursive: true });
|
|
197177
|
+
import_node_fs16.default.mkdirSync(import_node_path17.default.join(componentDir, "types"), { recursive: true });
|
|
197178
|
+
import_node_fs16.default.writeFileSync(import_node_path17.default.join(componentDir, "index.ts"), componentIndexTemplate(componentName), "utf8");
|
|
197179
|
+
import_node_fs16.default.writeFileSync(import_node_path17.default.join(componentDir, "types", "index.ts"), renderTypes(componentName, componentType, meta, dataInterfaceName, inputInterfaceName), "utf8");
|
|
197180
|
+
import_node_fs16.default.writeFileSync(import_node_path17.default.join(componentDir, "ui", `${componentName}.tsx`), renderUI(componentName, meta, inputInterfaceName), "utf8");
|
|
197053
197181
|
updateRegistryFile2(pieComponentsDir, componentName);
|
|
197054
197182
|
} catch (error) {
|
|
197055
|
-
|
|
197183
|
+
import_node_fs16.default.rmSync(componentDir, { recursive: true, force: true });
|
|
197056
197184
|
throw error;
|
|
197057
197185
|
}
|
|
197058
197186
|
console.log(`[pieui] Component ${componentName} ported from backend successfully`);
|
|
197059
197187
|
console.log(`[pieui] Files created:`);
|
|
197060
|
-
console.log(` - ${
|
|
197061
|
-
console.log(` - ${
|
|
197062
|
-
console.log(` - ${
|
|
197188
|
+
console.log(` - ${import_node_path17.default.join(componentDir, "index.ts")}`);
|
|
197189
|
+
console.log(` - ${import_node_path17.default.join(componentDir, "types", "index.ts")}`);
|
|
197190
|
+
console.log(` - ${import_node_path17.default.join(componentDir, "ui", `${componentName}.tsx`)}`);
|
|
197063
197191
|
console.log(`[pieui] Data interface: ${dataInterfaceName}`);
|
|
197064
197192
|
if (inputInterfaceName) {
|
|
197065
197193
|
console.log(`[pieui] Input interface: ${inputInterfaceName}`);
|
|
@@ -197119,8 +197247,8 @@ var pageAddCommand = (pagePath) => {
|
|
|
197119
197247
|
};
|
|
197120
197248
|
|
|
197121
197249
|
// src/code/commands/pageView.ts
|
|
197122
|
-
var
|
|
197123
|
-
var
|
|
197250
|
+
var import_node_fs17 = __toESM(require("node:fs"));
|
|
197251
|
+
var import_node_path18 = __toESM(require("node:path"));
|
|
197124
197252
|
var normalizePagePath2 = (pagePath) => {
|
|
197125
197253
|
const trimmed = pagePath.trim();
|
|
197126
197254
|
if (!trimmed)
|
|
@@ -197129,7 +197257,7 @@ var normalizePagePath2 = (pagePath) => {
|
|
|
197129
197257
|
const noRel = slashed.replace(/^\.\/+/, "");
|
|
197130
197258
|
const noApp = noRel.replace(/^app\//, "");
|
|
197131
197259
|
const noEdge = noApp.replace(/^\/+|\/+$/g, "");
|
|
197132
|
-
const normalized =
|
|
197260
|
+
const normalized = import_node_path18.default.posix.normalize(noEdge);
|
|
197133
197261
|
if (!normalized || normalized === ".") {
|
|
197134
197262
|
throw new Error("Path is required for page view command");
|
|
197135
197263
|
}
|
|
@@ -197140,11 +197268,11 @@ var normalizePagePath2 = (pagePath) => {
|
|
|
197140
197268
|
};
|
|
197141
197269
|
var pageViewCommand = (pagePath) => {
|
|
197142
197270
|
const normalized = normalizePagePath2(pagePath);
|
|
197143
|
-
const target =
|
|
197144
|
-
if (!
|
|
197271
|
+
const target = import_node_path18.default.join(process.cwd(), "app", normalized, "page.tsx");
|
|
197272
|
+
if (!import_node_fs17.default.existsSync(target)) {
|
|
197145
197273
|
throw new Error(`Page file not found: ${target}`);
|
|
197146
197274
|
}
|
|
197147
|
-
const source =
|
|
197275
|
+
const source = import_node_fs17.default.readFileSync(target, "utf8");
|
|
197148
197276
|
console.log(`[pieui] Path: ${target}`);
|
|
197149
197277
|
console.log("");
|
|
197150
197278
|
process.stdout.write(source);
|
|
@@ -197154,26 +197282,26 @@ var pageViewCommand = (pagePath) => {
|
|
|
197154
197282
|
};
|
|
197155
197283
|
|
|
197156
197284
|
// src/code/commands/pageAjax.ts
|
|
197157
|
-
var
|
|
197158
|
-
var
|
|
197159
|
-
var
|
|
197285
|
+
var import_node_fs18 = __toESM(require("node:fs"));
|
|
197286
|
+
var import_node_path19 = __toESM(require("node:path"));
|
|
197287
|
+
var import_node_child_process5 = require("node:child_process");
|
|
197160
197288
|
var PIE_CONFIG_PATH2 = ".pie/config.json";
|
|
197161
197289
|
var readBackendRoot = () => {
|
|
197162
|
-
const configPath =
|
|
197163
|
-
if (!
|
|
197290
|
+
const configPath = import_node_path19.default.join(process.cwd(), PIE_CONFIG_PATH2);
|
|
197291
|
+
if (!import_node_fs18.default.existsSync(configPath))
|
|
197164
197292
|
return;
|
|
197165
197293
|
try {
|
|
197166
|
-
const parsed = JSON.parse(
|
|
197294
|
+
const parsed = JSON.parse(import_node_fs18.default.readFileSync(configPath, "utf8"));
|
|
197167
197295
|
if (typeof parsed !== "object" || parsed === null)
|
|
197168
197296
|
return;
|
|
197169
197297
|
const config = parsed;
|
|
197170
197298
|
if (!config.backendPagesDir)
|
|
197171
197299
|
return;
|
|
197172
|
-
const pages =
|
|
197173
|
-
if (!
|
|
197300
|
+
const pages = import_node_path19.default.resolve(config.backendPagesDir);
|
|
197301
|
+
if (!import_node_fs18.default.existsSync(pages) || !import_node_fs18.default.statSync(pages).isDirectory()) {
|
|
197174
197302
|
return;
|
|
197175
197303
|
}
|
|
197176
|
-
return
|
|
197304
|
+
return import_node_path19.default.dirname(pages);
|
|
197177
197305
|
} catch {
|
|
197178
197306
|
return;
|
|
197179
197307
|
}
|
|
@@ -197190,7 +197318,7 @@ var pageAjaxCommand = (pageName, action, handlerName) => {
|
|
|
197190
197318
|
}
|
|
197191
197319
|
console.log(`[pieui] Delegating to backend: ${backendRoot}`);
|
|
197192
197320
|
console.log(`[pieui] pie page ajax ${pageName} ${action} ${handlerName}`);
|
|
197193
|
-
const result =
|
|
197321
|
+
const result = import_node_child_process5.spawnSync("pie", ["page", "ajax", pageName, action, handlerName], { cwd: backendRoot, stdio: "inherit", env: process.env });
|
|
197194
197322
|
if (result.error) {
|
|
197195
197323
|
throw new Error(`Failed to invoke \`pie\` in ${backendRoot}: ${result.error.message}`);
|
|
197196
197324
|
}
|
|
@@ -197556,49 +197684,49 @@ var createPieAppCommand = (appName) => {
|
|
|
197556
197684
|
};
|
|
197557
197685
|
|
|
197558
197686
|
// src/code/commands/login.ts
|
|
197559
|
-
var
|
|
197687
|
+
var import_node_child_process6 = require("node:child_process");
|
|
197560
197688
|
var import_node_crypto = require("node:crypto");
|
|
197561
|
-
var
|
|
197562
|
-
var
|
|
197689
|
+
var import_node_fs20 = __toESM(require("node:fs"));
|
|
197690
|
+
var import_node_path21 = __toESM(require("node:path"));
|
|
197563
197691
|
|
|
197564
197692
|
// src/code/services/projectLinks.ts
|
|
197565
|
-
var
|
|
197566
|
-
var
|
|
197693
|
+
var import_node_fs19 = __toESM(require("node:fs"));
|
|
197694
|
+
var import_node_path20 = __toESM(require("node:path"));
|
|
197567
197695
|
var readline3 = __toESM(require("node:readline/promises"));
|
|
197568
197696
|
var PIE_CONFIG_DIR3 = ".pie";
|
|
197569
197697
|
var PIE_CONFIG_FILE3 = "config.json";
|
|
197570
|
-
var configPathFor = (cwd) =>
|
|
197698
|
+
var configPathFor = (cwd) => import_node_path20.default.join(cwd, PIE_CONFIG_DIR3, PIE_CONFIG_FILE3);
|
|
197571
197699
|
var readConfig2 = (cwd) => {
|
|
197572
197700
|
const p = configPathFor(cwd);
|
|
197573
|
-
if (!
|
|
197701
|
+
if (!import_node_fs19.default.existsSync(p))
|
|
197574
197702
|
return {};
|
|
197575
197703
|
try {
|
|
197576
|
-
const parsed = JSON.parse(
|
|
197704
|
+
const parsed = JSON.parse(import_node_fs19.default.readFileSync(p, "utf8"));
|
|
197577
197705
|
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : {};
|
|
197578
197706
|
} catch {
|
|
197579
197707
|
return {};
|
|
197580
197708
|
}
|
|
197581
197709
|
};
|
|
197582
197710
|
var writeConfig2 = (cwd, config) => {
|
|
197583
|
-
const dir =
|
|
197584
|
-
|
|
197585
|
-
|
|
197711
|
+
const dir = import_node_path20.default.join(cwd, PIE_CONFIG_DIR3);
|
|
197712
|
+
import_node_fs19.default.mkdirSync(dir, { recursive: true });
|
|
197713
|
+
import_node_fs19.default.writeFileSync(configPathFor(cwd), JSON.stringify(config, null, 2) + `
|
|
197586
197714
|
`, "utf8");
|
|
197587
197715
|
};
|
|
197588
197716
|
var walkUpForPyproject2 = (start) => {
|
|
197589
|
-
let dir =
|
|
197590
|
-
while (dir !==
|
|
197591
|
-
if (
|
|
197717
|
+
let dir = import_node_path20.default.resolve(start);
|
|
197718
|
+
while (dir !== import_node_path20.default.dirname(dir)) {
|
|
197719
|
+
if (import_node_fs19.default.existsSync(import_node_path20.default.join(dir, "pyproject.toml")))
|
|
197592
197720
|
return dir;
|
|
197593
|
-
dir =
|
|
197721
|
+
dir = import_node_path20.default.dirname(dir);
|
|
197594
197722
|
}
|
|
197595
197723
|
return null;
|
|
197596
197724
|
};
|
|
197597
197725
|
var ensureBackendDir2 = async (cwd) => {
|
|
197598
197726
|
const config = readConfig2(cwd);
|
|
197599
197727
|
if (config.backendProjectDir) {
|
|
197600
|
-
const dir =
|
|
197601
|
-
if (
|
|
197728
|
+
const dir = import_node_path20.default.resolve(cwd, config.backendProjectDir);
|
|
197729
|
+
if (import_node_fs19.default.existsSync(dir) && import_node_fs19.default.statSync(dir).isDirectory())
|
|
197602
197730
|
return dir;
|
|
197603
197731
|
console.error(`[pieui] Configured backendProjectDir not found: ${dir}`);
|
|
197604
197732
|
}
|
|
@@ -197623,9 +197751,9 @@ var ensureBackendDir2 = async (cwd) => {
|
|
|
197623
197751
|
const raw = (await rl.question("[pieui] Path to backend (pie) project: ")).trim();
|
|
197624
197752
|
if (!raw)
|
|
197625
197753
|
return null;
|
|
197626
|
-
const expanded = raw.startsWith("~") ?
|
|
197627
|
-
const absolute =
|
|
197628
|
-
if (!
|
|
197754
|
+
const expanded = raw.startsWith("~") ? import_node_path20.default.join(process.env.HOME || "", raw.slice(1).replace(/^[\\/]/, "")) : raw;
|
|
197755
|
+
const absolute = import_node_path20.default.resolve(expanded);
|
|
197756
|
+
if (!import_node_fs19.default.existsSync(absolute) || !import_node_fs19.default.statSync(absolute).isDirectory()) {
|
|
197629
197757
|
console.error(`[pieui] Not a directory: ${absolute}`);
|
|
197630
197758
|
return null;
|
|
197631
197759
|
}
|
|
@@ -197659,11 +197787,11 @@ var generateCode = (length = CODE_LENGTH) => {
|
|
|
197659
197787
|
var tryOpenBrowser = (url) => {
|
|
197660
197788
|
try {
|
|
197661
197789
|
if (process.platform === "win32") {
|
|
197662
|
-
|
|
197790
|
+
import_node_child_process6.execFile("cmd", ["/c", "start", "", url], () => {});
|
|
197663
197791
|
} else if (process.platform === "darwin") {
|
|
197664
|
-
|
|
197792
|
+
import_node_child_process6.execFile("open", [url], () => {});
|
|
197665
197793
|
} else {
|
|
197666
|
-
|
|
197794
|
+
import_node_child_process6.execFile("xdg-open", [url], () => {});
|
|
197667
197795
|
}
|
|
197668
197796
|
} catch {}
|
|
197669
197797
|
};
|
|
@@ -197694,8 +197822,8 @@ var appendPieCredentialsToEnv = (cwd, config) => {
|
|
|
197694
197822
|
if (Object.keys(entries).length === 0) {
|
|
197695
197823
|
return;
|
|
197696
197824
|
}
|
|
197697
|
-
const envPath =
|
|
197698
|
-
let content =
|
|
197825
|
+
const envPath = import_node_path21.default.join(cwd, ".env");
|
|
197826
|
+
let content = import_node_fs20.default.existsSync(envPath) ? import_node_fs20.default.readFileSync(envPath, "utf8") : "";
|
|
197699
197827
|
if (content.length > 0 && !content.endsWith(`
|
|
197700
197828
|
`)) {
|
|
197701
197829
|
content += `
|
|
@@ -197705,7 +197833,7 @@ var appendPieCredentialsToEnv = (cwd, config) => {
|
|
|
197705
197833
|
content += `${additions.join(`
|
|
197706
197834
|
`)}
|
|
197707
197835
|
`;
|
|
197708
|
-
|
|
197836
|
+
import_node_fs20.default.writeFileSync(envPath, content, "utf8");
|
|
197709
197837
|
console.log(`[pie] Appended credentials to ${envPath}`);
|
|
197710
197838
|
};
|
|
197711
197839
|
async function loginCommand(options = {}) {
|
|
@@ -197726,8 +197854,8 @@ async function loginCommand(options = {}) {
|
|
|
197726
197854
|
try {
|
|
197727
197855
|
openBrowser(connectUrl);
|
|
197728
197856
|
} catch {}
|
|
197729
|
-
const pieDir =
|
|
197730
|
-
const configPath =
|
|
197857
|
+
const pieDir = import_node_path21.default.join(cwd, ".pie");
|
|
197858
|
+
const configPath = import_node_path21.default.join(pieDir, "config.json");
|
|
197731
197859
|
const url = `${credentialsApi}?${new URLSearchParams({ code }).toString()}`;
|
|
197732
197860
|
let first = true;
|
|
197733
197861
|
while (true) {
|
|
@@ -197761,7 +197889,7 @@ async function loginCommand(options = {}) {
|
|
|
197761
197889
|
throw new Error("Login succeeded but response had no 'config' field");
|
|
197762
197890
|
}
|
|
197763
197891
|
const credBlob = typeof record.config === "object" && record.config !== null && !Array.isArray(record.config) ? record.config : {};
|
|
197764
|
-
|
|
197892
|
+
import_node_fs20.default.mkdirSync(pieDir, { recursive: true });
|
|
197765
197893
|
mergeConfig(cwd, credBlob);
|
|
197766
197894
|
console.log(`[pie] Saved credentials to ${configPath}`);
|
|
197767
197895
|
appendPieCredentialsToEnv(cwd, record.config);
|
|
@@ -197776,9 +197904,9 @@ async function loginCommand(options = {}) {
|
|
|
197776
197904
|
}
|
|
197777
197905
|
|
|
197778
197906
|
// src/code/commands/selfUpgrade.ts
|
|
197779
|
-
var
|
|
197780
|
-
var
|
|
197781
|
-
var
|
|
197907
|
+
var import_node_child_process7 = require("node:child_process");
|
|
197908
|
+
var import_node_fs21 = __toESM(require("node:fs"));
|
|
197909
|
+
var import_node_path22 = __toESM(require("node:path"));
|
|
197782
197910
|
var __dirname = "/home/runner/work/pieui/pieui/src/code/commands";
|
|
197783
197911
|
var PACKAGE_NAME = "@swarm.ing/pieui";
|
|
197784
197912
|
var INSTALL_ARGS = {
|
|
@@ -197789,7 +197917,7 @@ var INSTALL_ARGS = {
|
|
|
197789
197917
|
};
|
|
197790
197918
|
var isPackageManager = (value2) => value2 === "bun" || value2 === "npm" || value2 === "pnpm" || value2 === "yarn";
|
|
197791
197919
|
var hasBinary = (bin) => {
|
|
197792
|
-
const result =
|
|
197920
|
+
const result = import_node_child_process7.spawnSync("which", [bin], { stdio: "ignore" });
|
|
197793
197921
|
return result.status === 0;
|
|
197794
197922
|
};
|
|
197795
197923
|
var detectPackageManager = () => {
|
|
@@ -197802,13 +197930,13 @@ var detectPackageManager = () => {
|
|
|
197802
197930
|
};
|
|
197803
197931
|
var readInstalledVersion = () => {
|
|
197804
197932
|
const candidates = [
|
|
197805
|
-
|
|
197806
|
-
|
|
197807
|
-
|
|
197933
|
+
import_node_path22.default.resolve(__dirname, "..", "package.json"),
|
|
197934
|
+
import_node_path22.default.resolve(__dirname, "..", "..", "package.json"),
|
|
197935
|
+
import_node_path22.default.resolve(__dirname, "..", "..", "..", "package.json")
|
|
197808
197936
|
];
|
|
197809
197937
|
for (const file of candidates) {
|
|
197810
197938
|
try {
|
|
197811
|
-
const raw =
|
|
197939
|
+
const raw = import_node_fs21.default.readFileSync(file, "utf8");
|
|
197812
197940
|
const parsed = JSON.parse(raw);
|
|
197813
197941
|
if (parsed.name === PACKAGE_NAME && parsed.version) {
|
|
197814
197942
|
return parsed.version;
|
|
@@ -197832,7 +197960,7 @@ var selfUpgradeCommand = async (override) => {
|
|
|
197832
197960
|
}
|
|
197833
197961
|
const args = INSTALL_ARGS[pm];
|
|
197834
197962
|
console.log(`[pieui] Upgrading via ${pm}: ${pm} ${args.join(" ")}`);
|
|
197835
|
-
const result =
|
|
197963
|
+
const result = import_node_child_process7.spawnSync(pm, args, {
|
|
197836
197964
|
stdio: "inherit",
|
|
197837
197965
|
env: process.env
|
|
197838
197966
|
});
|
|
@@ -197916,8 +198044,8 @@ var main = async () => {
|
|
|
197916
198044
|
await selfUpgradeCommand(args.selfUpgradePm);
|
|
197917
198045
|
return;
|
|
197918
198046
|
case "postbuild":
|
|
197919
|
-
console.log(`[pieui] Source directory: ${
|
|
197920
|
-
console.log(`[pieui] Output directory: ${
|
|
198047
|
+
console.log(`[pieui] Source directory: ${import_node_path23.default.resolve(process.cwd(), srcDir)}`);
|
|
198048
|
+
console.log(`[pieui] Output directory: ${import_node_path23.default.resolve(process.cwd(), outDir)}`);
|
|
197921
198049
|
console.log(`[pieui] Append mode: ${append}`);
|
|
197922
198050
|
await postbuildCommand(srcDir, outDir, append);
|
|
197923
198051
|
return;
|
|
@@ -197994,6 +198122,13 @@ var main = async () => {
|
|
|
197994
198122
|
cardAddStoryCommand(name, { force: cardAddStoryForce });
|
|
197995
198123
|
return;
|
|
197996
198124
|
}
|
|
198125
|
+
if (cardAction === "generate-preview") {
|
|
198126
|
+
const name = requireName(componentName, "Component name");
|
|
198127
|
+
await cardGeneratePreviewCommand(name, {
|
|
198128
|
+
out: args.cardGeneratePreviewOut
|
|
198129
|
+
});
|
|
198130
|
+
return;
|
|
198131
|
+
}
|
|
197997
198132
|
if (cardAction === "remote") {
|
|
197998
198133
|
if (cardRemoteAction === "list") {
|
|
197999
198134
|
await cardRemoteListCommand({
|
package/dist/code/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/code/args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOR,UAAU,EACb,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/code/args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOR,UAAU,EACb,MAAM,SAAS,CAAA;AA0KhB,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,KAAG,UA8I1C,CAAA;AAED,MAAM,MAAM,SAAS,GACf,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,WAAW,GACX,MAAM,GACN,aAAa,GACb,MAAM,GACN,cAAc,CAAA;AAEpB,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,KAAG,SAAS,GAAG,IAe5D,CAAA;AA0MD,eAAO,MAAM,UAAU,GAAI,QAAO,SAAiB,SAwBlD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardGeneratePreview.d.ts","sourceRoot":"","sources":["../../../src/code/commands/cardGeneratePreview.ts"],"names":[],"mappings":"AAqDA,eAAO,MAAM,0BAA0B,GACnC,eAAe,MAAM,EACrB,UAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,KAC/B,OAAO,CAAC,IAAI,CAwHd,CAAA"}
|
package/dist/code/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export declare const MANIFEST_FILENAME = "pieui.components.json";
|
|
|
3
3
|
export declare const REGISTER_FUNCTION = "registerPieComponent";
|
|
4
4
|
export type ComponentType = 'simple' | 'complex' | 'simple-container' | 'complex-container';
|
|
5
5
|
export type ListFilter = 'all' | ComponentType;
|
|
6
|
-
export type CardAction = 'add' | 'list' | 'pull' | 'view' | 'remove' | 'list-events' | 'add-event' | 'remote' | 'dump-metadata' | 'check-sync' | 'add-story';
|
|
6
|
+
export type CardAction = 'add' | 'list' | 'pull' | 'view' | 'remove' | 'list-events' | 'add-event' | 'remote' | 'dump-metadata' | 'check-sync' | 'add-story' | 'generate-preview';
|
|
7
7
|
export type CardRemoteAction = 'push' | 'pull' | 'list' | 'remove' | 'history' | 'public' | 'private';
|
|
8
8
|
export type PageAction = 'add' | 'view' | 'ajax';
|
|
9
9
|
export type PageAjaxAction = 'add' | 'remove';
|
|
@@ -38,6 +38,7 @@ export type ParsedArgs = {
|
|
|
38
38
|
historyTo?: number;
|
|
39
39
|
selfUpgradePm?: string;
|
|
40
40
|
dumpMetadataOut?: string;
|
|
41
|
+
cardGeneratePreviewOut?: string;
|
|
41
42
|
};
|
|
42
43
|
export type CardScaffoldOptions = {
|
|
43
44
|
ajax?: boolean;
|
package/dist/code/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/code/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,wBAAwB,CAAA;AAElD,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AACxD,eAAO,MAAM,iBAAiB,yBAAyB,CAAA;AAEvD,MAAM,MAAM,aAAa,GACnB,QAAQ,GACR,SAAS,GACT,kBAAkB,GAClB,mBAAmB,CAAA;AAEzB,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,aAAa,CAAA;AAC9C,MAAM,MAAM,UAAU,GAChB,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,WAAW,GACX,QAAQ,GACR,eAAe,GACf,YAAY,GACZ,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/code/types.ts"],"names":[],"mappings":"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"}
|