@swarm.ing/pieui 2.0.11 → 2.0.13
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 +160 -235
- package/dist/code/commands/create.d.ts.map +1 -1
- package/dist/code/public/favicon.ico +0 -0
- package/dist/code/public/favicon.svg +1 -0
- package/dist/code/public/pieui.png +0 -0
- package/dist/code/public/swarm.ing.png +0 -0
- package/dist/code/templates/env.d.ts +2 -0
- package/dist/code/templates/env.d.ts.map +1 -0
- package/dist/code/templates/homePage.d.ts +2 -0
- package/dist/code/templates/homePage.d.ts.map +1 -0
- package/dist/code/templates/index.d.ts +6 -1
- package/dist/code/templates/index.d.ts.map +1 -1
- package/dist/code/templates/loadingScreen.d.ts +2 -0
- package/dist/code/templates/loadingScreen.d.ts.map +1 -0
- package/dist/code/templates/nextConfig.d.ts +1 -1
- package/dist/code/templates/nextConfig.d.ts.map +1 -1
- package/dist/code/templates/rootLayout.d.ts +2 -0
- package/dist/code/templates/rootLayout.d.ts.map +1 -0
- package/dist/code/templates/sharedPage.d.ts +2 -0
- package/dist/code/templates/sharedPage.d.ts.map +1 -0
- package/package.json +5 -13
- package/dist/__tests__/step1-local.test.d.cts +0 -2
- package/dist/__tests__/step1-local.test.d.cts.map +0 -1
- package/dist/__tests__/step2-remote.test.d.cts +0 -2
- package/dist/__tests__/step2-remote.test.d.cts.map +0 -1
- package/dist/__tests__/step3-contract.test.d.cts +0 -2
- package/dist/__tests__/step3-contract.test.d.cts.map +0 -1
- package/dist/__tests__/step4-ci.test.d.cts +0 -2
- package/dist/__tests__/step4-ci.test.d.cts.map +0 -1
- package/dist/__tests__/step5-regres.test.d.cts +0 -2
- package/dist/__tests__/step5-regres.test.d.cts.map +0 -1
- package/dist/create.d.ts +0 -3
- package/dist/create.d.ts.map +0 -1
- package/dist/create.js +0 -162
package/dist/cli.js
CHANGED
|
@@ -193249,12 +193249,104 @@ export type ${componentName}Props = ${baseInterface}<${componentName}Data>
|
|
|
193249
193249
|
`;
|
|
193250
193250
|
};
|
|
193251
193251
|
|
|
193252
|
+
// src/code/templates/env.ts
|
|
193253
|
+
var envTemplate = () => `PIE_ENABLE_RENDERING_LOG=true
|
|
193254
|
+
PIE_API_SERVER=http://localhost:8008/
|
|
193255
|
+
PIE_CENTRIFUGE_SERVER=wss://localhost:8000/connection/websocket
|
|
193256
|
+
|
|
193257
|
+
NEXT_PUBLIC_PIE_ENABLE_RENDERING_LOG=true
|
|
193258
|
+
NEXT_PUBLIC_PIE_API_SERVER=http://localhost:8008/
|
|
193259
|
+
NEXT_PUBLIC_PIE_CENTRIFUGE_SERVER=wss://localhost:8000/connection/websocket
|
|
193260
|
+
`;
|
|
193261
|
+
|
|
193262
|
+
// src/code/templates/homePage.ts
|
|
193263
|
+
var homePageTemplate = `"use client";
|
|
193264
|
+
|
|
193265
|
+
import PiePage from "@/app/_shared/page";
|
|
193266
|
+
import { Suspense } from "react";
|
|
193267
|
+
|
|
193268
|
+
export default function HomePage() {
|
|
193269
|
+
return (
|
|
193270
|
+
<Suspense fallback={<></>}>
|
|
193271
|
+
<PiePage />
|
|
193272
|
+
</Suspense>
|
|
193273
|
+
);
|
|
193274
|
+
}
|
|
193275
|
+
`;
|
|
193276
|
+
|
|
193277
|
+
// src/code/templates/loadingScreen.ts
|
|
193278
|
+
var loadingScreenTemplate = `"use client";
|
|
193279
|
+
|
|
193280
|
+
export default function LoadingScreen() {
|
|
193281
|
+
return (
|
|
193282
|
+
<div className="flex min-h-screen items-center justify-center text-sm text-neutral-500">
|
|
193283
|
+
Loading...
|
|
193284
|
+
</div>
|
|
193285
|
+
);
|
|
193286
|
+
}
|
|
193287
|
+
`;
|
|
193288
|
+
|
|
193289
|
+
// src/code/templates/rootLayout.ts
|
|
193290
|
+
var rootLayoutTemplate = `import type { Metadata } from "next";
|
|
193291
|
+
import "./globals.css";
|
|
193292
|
+
|
|
193293
|
+
export const metadata: Metadata = {
|
|
193294
|
+
title: "PieUI Project",
|
|
193295
|
+
description: "Generated by PieUI.",
|
|
193296
|
+
applicationName: "PieUI Project",
|
|
193297
|
+
icons: {
|
|
193298
|
+
icon: "/favicon.ico",
|
|
193299
|
+
shortcut: "/favicon.ico",
|
|
193300
|
+
},
|
|
193301
|
+
};
|
|
193302
|
+
|
|
193303
|
+
export default function RootLayout({
|
|
193304
|
+
children,
|
|
193305
|
+
}: Readonly<{
|
|
193306
|
+
children: React.ReactNode;
|
|
193307
|
+
}>) {
|
|
193308
|
+
return (
|
|
193309
|
+
<html lang="en">
|
|
193310
|
+
<body>{children}</body>
|
|
193311
|
+
</html>
|
|
193312
|
+
);
|
|
193313
|
+
}
|
|
193314
|
+
`;
|
|
193315
|
+
|
|
193316
|
+
// src/code/templates/sharedPage.ts
|
|
193317
|
+
var sharedPageTemplate = `"use client";
|
|
193318
|
+
|
|
193319
|
+
import { useRouter } from "next/navigation";
|
|
193320
|
+
import { PieRoot } from "@swarm.ing/pieui";
|
|
193321
|
+
import "@/piecomponents/registry";
|
|
193322
|
+
import { usePathname, useSearchParams } from "next/navigation";
|
|
193323
|
+
|
|
193324
|
+
export default function PiePage() {
|
|
193325
|
+
const router = useRouter();
|
|
193326
|
+
const pathname = usePathname();
|
|
193327
|
+
const searchParams = useSearchParams();
|
|
193328
|
+
const search = searchParams.toString();
|
|
193329
|
+
|
|
193330
|
+
return (
|
|
193331
|
+
<PieRoot
|
|
193332
|
+
location={{ pathname, search }}
|
|
193333
|
+
config={{
|
|
193334
|
+
apiServer: process.env.PIE_API_SERVER!,
|
|
193335
|
+
centrifugeServer: process.env.PIE_CENTRIFUGE_SERVER!,
|
|
193336
|
+
enableRenderingLog: true,
|
|
193337
|
+
}}
|
|
193338
|
+
onNavigate={(url) => router.push(url)}
|
|
193339
|
+
fallback={<></>}
|
|
193340
|
+
/>
|
|
193341
|
+
);
|
|
193342
|
+
}
|
|
193343
|
+
`;
|
|
193344
|
+
|
|
193252
193345
|
// src/code/templates/nextConfig.ts
|
|
193253
193346
|
var REQUIRED_NEXT_CONFIG_ENV_KEYS = [
|
|
193254
193347
|
"PIE_API_SERVER",
|
|
193255
193348
|
"PIE_CENTRIFUGE_SERVER",
|
|
193256
|
-
"PIE_ENABLE_RENDERING_LOG"
|
|
193257
|
-
"PIE_PLATFORM"
|
|
193349
|
+
"PIE_ENABLE_RENDERING_LOG"
|
|
193258
193350
|
];
|
|
193259
193351
|
var nextConfigTemplate = () => `import type { NextConfig } from "next";
|
|
193260
193352
|
|
|
@@ -193265,7 +193357,6 @@ const nextConfig: NextConfig = {
|
|
|
193265
193357
|
PIE_API_SERVER: process.env.PIE_API_SERVER,
|
|
193266
193358
|
PIE_CENTRIFUGE_SERVER: process.env.PIE_CENTRIFUGE_SERVER,
|
|
193267
193359
|
PIE_ENABLE_RENDERING_LOG: process.env.PIE_ENABLE_RENDERING_LOG,
|
|
193268
|
-
PIE_PLATFORM: process.env.PIE_PLATFORM || "telegram",
|
|
193269
193360
|
},
|
|
193270
193361
|
reactStrictMode: true,
|
|
193271
193362
|
transpilePackages: ["@swarm.ing/pieui"],
|
|
@@ -193569,12 +193660,7 @@ var ensureNextConfig = (resolvedOutDir) => {
|
|
|
193569
193660
|
}
|
|
193570
193661
|
};
|
|
193571
193662
|
var CONFIG_OBJECT_OPEN = /(const\s+nextConfig\s*(?::\s*[A-Za-z_][\w.]*)?\s*=\s*|module\.exports\s*=\s*|export\s+default\s*)\{/;
|
|
193572
|
-
var envEntryFor = (key) => {
|
|
193573
|
-
if (key === "PIE_PLATFORM") {
|
|
193574
|
-
return ` ${key}: process.env.${key} || "telegram",`;
|
|
193575
|
-
}
|
|
193576
|
-
return ` ${key}: process.env.${key},`;
|
|
193577
|
-
};
|
|
193663
|
+
var envEntryFor = (key) => ` ${key}: process.env.${key},`;
|
|
193578
193664
|
var ensureEnvKeys = (content) => {
|
|
193579
193665
|
const missingKeys = REQUIRED_NEXT_CONFIG_ENV_KEYS.filter((key) => !content.includes(key));
|
|
193580
193666
|
if (missingKeys.length === 0)
|
|
@@ -198293,143 +198379,9 @@ ${text2}` : ""}`);
|
|
|
198293
198379
|
[pieui] ${text}` : ""}`);
|
|
198294
198380
|
};
|
|
198295
198381
|
|
|
198296
|
-
// src/code/commands/
|
|
198382
|
+
// src/code/commands/pageAdd.ts
|
|
198297
198383
|
var import_fs11 = __toESM(require("fs"));
|
|
198298
198384
|
var import_path13 = __toESM(require("path"));
|
|
198299
|
-
var import_child_process = require("child_process");
|
|
198300
|
-
var DEFAULT_TEMPLATE_SPEC = "next-app@latest";
|
|
198301
|
-
var SHARED_TEMPLATE_DIR_ENV = "PIEUI_SHARED_TEMPLATE_DIR";
|
|
198302
|
-
var AI_EXCHANGE_BOT_DIR_ENV = "PIEUI_AI_EXCHANGE_BOT_DIR";
|
|
198303
|
-
var BACKEND_LINK_COMMENT = "// TODO(pie-backend): Link generated Python Unicorn backend routes here once backend template sync is enabled.";
|
|
198304
|
-
var updateNextScriptsToBun = (packageJsonPath) => {
|
|
198305
|
-
if (!import_fs11.default.existsSync(packageJsonPath))
|
|
198306
|
-
return;
|
|
198307
|
-
try {
|
|
198308
|
-
const pkg = JSON.parse(import_fs11.default.readFileSync(packageJsonPath, "utf8"));
|
|
198309
|
-
if (!pkg.scripts)
|
|
198310
|
-
return;
|
|
198311
|
-
const updates = {
|
|
198312
|
-
dev: "bun --bun next dev",
|
|
198313
|
-
build: "bun --bun next build",
|
|
198314
|
-
start: "bun --bun next start"
|
|
198315
|
-
};
|
|
198316
|
-
for (const [scriptName, scriptValue] of Object.entries(updates)) {
|
|
198317
|
-
if (pkg.scripts[scriptName]) {
|
|
198318
|
-
pkg.scripts[scriptName] = scriptValue;
|
|
198319
|
-
}
|
|
198320
|
-
}
|
|
198321
|
-
import_fs11.default.writeFileSync(packageJsonPath, `${JSON.stringify(pkg, null, 2)}
|
|
198322
|
-
`, "utf8");
|
|
198323
|
-
} catch {
|
|
198324
|
-
}
|
|
198325
|
-
};
|
|
198326
|
-
var appendBackendLinkComment = (pagePath) => {
|
|
198327
|
-
if (!import_fs11.default.existsSync(pagePath))
|
|
198328
|
-
return;
|
|
198329
|
-
const page = import_fs11.default.readFileSync(pagePath, "utf8");
|
|
198330
|
-
if (page.includes(BACKEND_LINK_COMMENT))
|
|
198331
|
-
return;
|
|
198332
|
-
import_fs11.default.writeFileSync(pagePath, `${page.trimEnd()}
|
|
198333
|
-
|
|
198334
|
-
${BACKEND_LINK_COMMENT}
|
|
198335
|
-
`, "utf8");
|
|
198336
|
-
};
|
|
198337
|
-
var uniq = (items) => [...new Set(items)];
|
|
198338
|
-
var isDirectory = (target) => {
|
|
198339
|
-
try {
|
|
198340
|
-
return import_fs11.default.statSync(target).isDirectory();
|
|
198341
|
-
} catch {
|
|
198342
|
-
return false;
|
|
198343
|
-
}
|
|
198344
|
-
};
|
|
198345
|
-
var resolveSharedTemplateDir = () => {
|
|
198346
|
-
const explicitSharedDir = process.env[SHARED_TEMPLATE_DIR_ENV];
|
|
198347
|
-
if (explicitSharedDir) {
|
|
198348
|
-
const normalized = import_path13.default.resolve(explicitSharedDir);
|
|
198349
|
-
if (!isDirectory(normalized)) {
|
|
198350
|
-
throw new Error(`${SHARED_TEMPLATE_DIR_ENV} points to a missing directory: ${normalized}`);
|
|
198351
|
-
}
|
|
198352
|
-
return normalized;
|
|
198353
|
-
}
|
|
198354
|
-
const cwd = process.cwd();
|
|
198355
|
-
const baseDirs = [cwd, import_path13.default.resolve(cwd, ".."), import_path13.default.resolve(cwd, "../..")];
|
|
198356
|
-
const explicitRepoDir = process.env[AI_EXCHANGE_BOT_DIR_ENV];
|
|
198357
|
-
if (explicitRepoDir) {
|
|
198358
|
-
baseDirs.unshift(import_path13.default.resolve(explicitRepoDir));
|
|
198359
|
-
}
|
|
198360
|
-
const repoNames = ["ai-exchange-bot", "ai-exchange-web", "a-exchange-web"];
|
|
198361
|
-
const repoCandidates = uniq([
|
|
198362
|
-
...baseDirs,
|
|
198363
|
-
...baseDirs.flatMap((base) => repoNames.map((name) => import_path13.default.join(base, name)))
|
|
198364
|
-
]).filter((candidate) => isDirectory(candidate));
|
|
198365
|
-
const sharedSubpaths = [
|
|
198366
|
-
"_shared",
|
|
198367
|
-
"src/_shared",
|
|
198368
|
-
"app/_shared",
|
|
198369
|
-
"pages/_shared",
|
|
198370
|
-
"pages/components/_shared",
|
|
198371
|
-
"apps/web/_shared",
|
|
198372
|
-
"apps/web/src/_shared"
|
|
198373
|
-
];
|
|
198374
|
-
for (const repoDir of repoCandidates) {
|
|
198375
|
-
for (const subpath of sharedSubpaths) {
|
|
198376
|
-
const candidate = import_path13.default.join(repoDir, subpath);
|
|
198377
|
-
if (isDirectory(candidate)) {
|
|
198378
|
-
return candidate;
|
|
198379
|
-
}
|
|
198380
|
-
}
|
|
198381
|
-
}
|
|
198382
|
-
throw new Error([
|
|
198383
|
-
"Could not locate a _shared template directory from ai-exchange-bot.",
|
|
198384
|
-
`Set ${SHARED_TEMPLATE_DIR_ENV}=/absolute/path/to/_shared`,
|
|
198385
|
-
`or ${AI_EXCHANGE_BOT_DIR_ENV}=/absolute/path/to/ai-exchange-bot.`
|
|
198386
|
-
].join(" "));
|
|
198387
|
-
};
|
|
198388
|
-
var copySharedTemplate = (sharedTemplateDir, appDir) => {
|
|
198389
|
-
const destination = import_path13.default.join(appDir, "_shared");
|
|
198390
|
-
import_fs11.default.cpSync(sharedTemplateDir, destination, { recursive: true, force: true });
|
|
198391
|
-
};
|
|
198392
|
-
var createPieAppCommand = (appName) => {
|
|
198393
|
-
const trimmedAppName = appName.trim();
|
|
198394
|
-
if (!trimmedAppName) {
|
|
198395
|
-
console.error("[pieui] Error: App name is required for create-pie-app command");
|
|
198396
|
-
process.exit(1);
|
|
198397
|
-
}
|
|
198398
|
-
const appDir = import_path13.default.resolve(process.cwd(), trimmedAppName);
|
|
198399
|
-
if (import_fs11.default.existsSync(appDir)) {
|
|
198400
|
-
console.error(`[pieui] Error: Target directory already exists: ${trimmedAppName}`);
|
|
198401
|
-
process.exit(1);
|
|
198402
|
-
}
|
|
198403
|
-
const bunBin = process.env.PIEUI_CREATE_BUN_BIN || "bun";
|
|
198404
|
-
const templateSpec = process.env.PIEUI_CREATE_NEXT_APP_SPEC || DEFAULT_TEMPLATE_SPEC;
|
|
198405
|
-
console.log(`[pieui] Creating blank PieUI web template in "${trimmedAppName}"...`);
|
|
198406
|
-
const args = ["create", templateSpec, trimmedAppName, "--yes"];
|
|
198407
|
-
const result = import_child_process.spawnSync(bunBin, args, {
|
|
198408
|
-
cwd: process.cwd(),
|
|
198409
|
-
stdio: "inherit",
|
|
198410
|
-
env: process.env
|
|
198411
|
-
});
|
|
198412
|
-
if (result.error) {
|
|
198413
|
-
throw result.error;
|
|
198414
|
-
}
|
|
198415
|
-
if (result.status !== 0) {
|
|
198416
|
-
throw new Error(`create-pie-app failed (exit code ${result.status ?? "unknown"})`);
|
|
198417
|
-
}
|
|
198418
|
-
const sharedTemplateDir = resolveSharedTemplateDir();
|
|
198419
|
-
copySharedTemplate(sharedTemplateDir, appDir);
|
|
198420
|
-
updateNextScriptsToBun(import_path13.default.join(appDir, "package.json"));
|
|
198421
|
-
appendBackendLinkComment(import_path13.default.join(appDir, "app", "page.tsx"));
|
|
198422
|
-
console.log("[pieui] Template created successfully.");
|
|
198423
|
-
console.log(`[pieui] Copied _shared from: ${sharedTemplateDir}`);
|
|
198424
|
-
console.log(`[pieui] Next steps:`);
|
|
198425
|
-
console.log(` 1. cd ${trimmedAppName}`);
|
|
198426
|
-
console.log(` 2. bun install`);
|
|
198427
|
-
console.log(` 3. bun run dev`);
|
|
198428
|
-
};
|
|
198429
|
-
|
|
198430
|
-
// src/code/commands/pageAdd.ts
|
|
198431
|
-
var import_fs12 = __toESM(require("fs"));
|
|
198432
|
-
var import_path14 = __toESM(require("path"));
|
|
198433
198385
|
var normalizePagePath = (pagePath) => {
|
|
198434
198386
|
const trimmed = pagePath.trim();
|
|
198435
198387
|
if (!trimmed) {
|
|
@@ -198439,7 +198391,7 @@ var normalizePagePath = (pagePath) => {
|
|
|
198439
198391
|
const withoutRelativePrefix = normalizedSlashes.replace(/^\.\/+/, "");
|
|
198440
198392
|
const withoutAppPrefix = withoutRelativePrefix.replace(/^app\//, "");
|
|
198441
198393
|
const withoutEdgeSlashes = withoutAppPrefix.replace(/^\/+|\/+$/g, "");
|
|
198442
|
-
const normalized =
|
|
198394
|
+
const normalized = import_path13.default.posix.normalize(withoutEdgeSlashes);
|
|
198443
198395
|
if (!normalized || normalized === ".") {
|
|
198444
198396
|
throw new Error("Path is required for page add command");
|
|
198445
198397
|
}
|
|
@@ -198459,98 +198411,80 @@ var pageComponentNameForPath = (pagePath) => {
|
|
|
198459
198411
|
var pageAddCommand = (pagePath) => {
|
|
198460
198412
|
const normalizedPath = normalizePagePath(pagePath);
|
|
198461
198413
|
const pageComponentName = pageComponentNameForPath(normalizedPath);
|
|
198462
|
-
const appDir =
|
|
198463
|
-
const targetFile =
|
|
198464
|
-
const relativeTarget =
|
|
198465
|
-
if (relativeTarget.startsWith("..") ||
|
|
198414
|
+
const appDir = import_path13.default.join(process.cwd(), "app");
|
|
198415
|
+
const targetFile = import_path13.default.join(appDir, normalizedPath, "page.tsx");
|
|
198416
|
+
const relativeTarget = import_path13.default.relative(appDir, targetFile);
|
|
198417
|
+
if (relativeTarget.startsWith("..") || import_path13.default.isAbsolute(relativeTarget)) {
|
|
198466
198418
|
throw new Error("Page path must stay inside the app directory");
|
|
198467
198419
|
}
|
|
198468
|
-
if (
|
|
198420
|
+
if (import_fs11.default.existsSync(targetFile)) {
|
|
198469
198421
|
console.error(`[pieui] Error: Page already exists at app/${normalizedPath}/page.tsx`);
|
|
198470
198422
|
process.exit(1);
|
|
198471
198423
|
}
|
|
198472
|
-
|
|
198473
|
-
|
|
198424
|
+
import_fs11.default.mkdirSync(import_path13.default.dirname(targetFile), { recursive: true });
|
|
198425
|
+
import_fs11.default.writeFileSync(targetFile, pageTemplate(pageComponentName), "utf8");
|
|
198474
198426
|
console.log(`[pieui] Page created successfully at app/${normalizedPath}/page.tsx`);
|
|
198475
198427
|
};
|
|
198476
198428
|
|
|
198477
198429
|
// src/code/commands/create.ts
|
|
198478
|
-
var
|
|
198479
|
-
var
|
|
198480
|
-
var
|
|
198481
|
-
var
|
|
198482
|
-
var SHARED_PAGE_TEMPLATE = `"use client";
|
|
198483
|
-
|
|
198484
|
-
import { useRouter } from "next/navigation";
|
|
198485
|
-
import { PieRoot } from "@swarm.ing/pieui";
|
|
198486
|
-
import "@/piecomponents/registry";
|
|
198487
|
-
import { usePathname, useSearchParams } from "next/navigation";
|
|
198488
|
-
import LoadingScreen from "@/components/LoadingScreen";
|
|
198489
|
-
|
|
198490
|
-
export default function PiePage() {
|
|
198491
|
-
const router = useRouter();
|
|
198492
|
-
const pathname = usePathname();
|
|
198493
|
-
const searchParams = useSearchParams();
|
|
198494
|
-
const search = searchParams.toString();
|
|
198495
|
-
|
|
198496
|
-
return (
|
|
198497
|
-
<PieRoot
|
|
198498
|
-
location={{ pathname, search }}
|
|
198499
|
-
config={{
|
|
198500
|
-
apiServer: process.env.PIE_API_SERVER!,
|
|
198501
|
-
centrifugeServer: process.env.PIE_CENTRIFUGE_SERVER!,
|
|
198502
|
-
enableRenderingLog: true,
|
|
198503
|
-
}}
|
|
198504
|
-
onNavigate={(url) => router.push(url)}
|
|
198505
|
-
fallback={<></>}
|
|
198506
|
-
/>
|
|
198507
|
-
);
|
|
198508
|
-
}
|
|
198509
|
-
`;
|
|
198510
|
-
var HOME_PAGE_TEMPLATE = `"use client";
|
|
198511
|
-
|
|
198512
|
-
import PiePage from "@/app/_shared/page";
|
|
198513
|
-
import { Suspense } from "react";
|
|
198514
|
-
|
|
198515
|
-
export default function HomePage() {
|
|
198516
|
-
return (
|
|
198517
|
-
<Suspense fallback={<></>}>
|
|
198518
|
-
<PiePage />
|
|
198519
|
-
</Suspense>
|
|
198520
|
-
);
|
|
198521
|
-
}
|
|
198522
|
-
`;
|
|
198523
|
-
var LOADING_SCREEN_TEMPLATE = `"use client";
|
|
198524
|
-
|
|
198525
|
-
export default function LoadingScreen() {
|
|
198526
|
-
return (
|
|
198527
|
-
<div className="flex min-h-screen items-center justify-center text-sm text-neutral-500">
|
|
198528
|
-
Loading...
|
|
198529
|
-
</div>
|
|
198530
|
-
);
|
|
198531
|
-
}
|
|
198532
|
-
`;
|
|
198430
|
+
var import_fs12 = __toESM(require("fs"));
|
|
198431
|
+
var import_path14 = __toESM(require("path"));
|
|
198432
|
+
var import_child_process = require("child_process");
|
|
198433
|
+
var DEFAULT_TEMPLATE_SPEC = "next-app@latest";
|
|
198533
198434
|
var clearDirectory = (targetDir) => {
|
|
198534
|
-
if (!
|
|
198435
|
+
if (!import_fs12.default.existsSync(targetDir))
|
|
198535
198436
|
return;
|
|
198536
|
-
for (const entry of
|
|
198537
|
-
|
|
198437
|
+
for (const entry of import_fs12.default.readdirSync(targetDir)) {
|
|
198438
|
+
import_fs12.default.rmSync(import_path14.default.join(targetDir, entry), { recursive: true, force: true });
|
|
198538
198439
|
}
|
|
198539
198440
|
};
|
|
198540
198441
|
var writeFile = (filePath, content) => {
|
|
198541
|
-
|
|
198542
|
-
|
|
198442
|
+
import_fs12.default.mkdirSync(import_path14.default.dirname(filePath), { recursive: true });
|
|
198443
|
+
import_fs12.default.writeFileSync(filePath, content, "utf8");
|
|
198444
|
+
};
|
|
198445
|
+
var resolveTemplatePublicDir = () => {
|
|
198446
|
+
const entrypointPath = process.argv[1] ? import_path14.default.resolve(process.argv[1]) : import_path14.default.join(process.cwd(), "src", "cli.ts");
|
|
198447
|
+
const entrypointDir = import_path14.default.dirname(entrypointPath);
|
|
198448
|
+
const candidateDirs = [
|
|
198449
|
+
import_path14.default.join(entrypointDir, "code", "public"),
|
|
198450
|
+
import_path14.default.join(process.cwd(), "src", "code", "public")
|
|
198451
|
+
];
|
|
198452
|
+
for (const candidateDir of candidateDirs) {
|
|
198453
|
+
if (import_fs12.default.existsSync(candidateDir)) {
|
|
198454
|
+
return candidateDir;
|
|
198455
|
+
}
|
|
198456
|
+
}
|
|
198457
|
+
throw new Error("[pieui] Could not resolve bundled public template assets");
|
|
198543
198458
|
};
|
|
198544
198459
|
var scaffoldCreateAppFiles = (appDir) => {
|
|
198545
|
-
clearDirectory(
|
|
198546
|
-
writeFile(
|
|
198547
|
-
writeFile(
|
|
198548
|
-
|
|
198460
|
+
clearDirectory(import_path14.default.join(appDir, "public"));
|
|
198461
|
+
writeFile(import_path14.default.join(appDir, "app", "_shared", "page.tsx"), sharedPageTemplate);
|
|
198462
|
+
writeFile(import_path14.default.join(appDir, "app", "page.tsx"), homePageTemplate);
|
|
198463
|
+
writeFile(import_path14.default.join(appDir, "app", "layout.tsx"), rootLayoutTemplate);
|
|
198464
|
+
import_fs12.default.rmSync(import_path14.default.join(appDir, "app", "_shared", "simple.tsx"), {
|
|
198465
|
+
force: true
|
|
198466
|
+
});
|
|
198467
|
+
import_fs12.default.rmSync(import_path14.default.join(appDir, "app", "piecache.json"), { force: true });
|
|
198468
|
+
import_fs12.default.rmSync(import_path14.default.join(appDir, "app", "favicon.ico"), { force: true });
|
|
198469
|
+
writeFile(import_path14.default.join(appDir, "components", "LoadingScreen.tsx"), loadingScreenTemplate);
|
|
198470
|
+
import_fs12.default.rmSync(import_path14.default.join(appDir, "components", "ErrorToast.tsx"), { force: true });
|
|
198471
|
+
import_fs12.default.cpSync(resolveTemplatePublicDir(), import_path14.default.join(appDir, "public"), {
|
|
198472
|
+
recursive: true,
|
|
198549
198473
|
force: true
|
|
198550
198474
|
});
|
|
198551
|
-
|
|
198552
|
-
|
|
198553
|
-
|
|
198475
|
+
};
|
|
198476
|
+
var runBunCommand = (bunBin, args, cwd) => {
|
|
198477
|
+
const result = import_child_process.spawnSync(bunBin, args, {
|
|
198478
|
+
cwd,
|
|
198479
|
+
stdio: "inherit",
|
|
198480
|
+
env: process.env
|
|
198481
|
+
});
|
|
198482
|
+
if (result.error) {
|
|
198483
|
+
throw result.error;
|
|
198484
|
+
}
|
|
198485
|
+
if (result.status !== 0) {
|
|
198486
|
+
throw new Error(`${args.join(" ")} failed (exit code ${result.status ?? "unknown"})`);
|
|
198487
|
+
}
|
|
198554
198488
|
};
|
|
198555
198489
|
var createCommand = (appName) => {
|
|
198556
198490
|
const trimmedAppName = appName.trim();
|
|
@@ -198558,15 +198492,15 @@ var createCommand = (appName) => {
|
|
|
198558
198492
|
console.error("[pieui] Error: App name is required for create command");
|
|
198559
198493
|
process.exit(1);
|
|
198560
198494
|
}
|
|
198561
|
-
const appDir =
|
|
198562
|
-
if (
|
|
198495
|
+
const appDir = import_path14.default.resolve(process.cwd(), trimmedAppName);
|
|
198496
|
+
if (import_fs12.default.existsSync(appDir)) {
|
|
198563
198497
|
console.error(`[pieui] Error: Target directory already exists: ${trimmedAppName}`);
|
|
198564
198498
|
process.exit(1);
|
|
198565
198499
|
}
|
|
198566
198500
|
const bunBin = process.env.PIEUI_CREATE_BUN_BIN || "bun";
|
|
198567
|
-
const templateSpec = process.env.PIEUI_CREATE_NEXT_APP_SPEC ||
|
|
198501
|
+
const templateSpec = process.env.PIEUI_CREATE_NEXT_APP_SPEC || DEFAULT_TEMPLATE_SPEC;
|
|
198568
198502
|
console.log(`[pieui] Creating Next.js app in "${trimmedAppName}"...`);
|
|
198569
|
-
const result =
|
|
198503
|
+
const result = import_child_process.spawnSync(bunBin, ["create", templateSpec, trimmedAppName, "--yes"], {
|
|
198570
198504
|
cwd: process.cwd(),
|
|
198571
198505
|
stdio: "inherit",
|
|
198572
198506
|
env: process.env
|
|
@@ -198579,10 +198513,9 @@ var createCommand = (appName) => {
|
|
|
198579
198513
|
}
|
|
198580
198514
|
scaffoldCreateAppFiles(appDir);
|
|
198581
198515
|
initCommand(trimmedAppName);
|
|
198582
|
-
|
|
198583
|
-
|
|
198584
|
-
|
|
198585
|
-
console.log(" 2. bun run dev");
|
|
198516
|
+
writeFile(import_path14.default.join(appDir, ".env"), envTemplate());
|
|
198517
|
+
runBunCommand(bunBin, ["install"], appDir);
|
|
198518
|
+
runBunCommand(bunBin, ["run", "dev"], appDir);
|
|
198586
198519
|
};
|
|
198587
198520
|
|
|
198588
198521
|
// src/cli.ts
|
|
@@ -198609,14 +198542,6 @@ var main = async () => {
|
|
|
198609
198542
|
case "init":
|
|
198610
198543
|
initCommand(outDir);
|
|
198611
198544
|
return;
|
|
198612
|
-
case "create-pie-app":
|
|
198613
|
-
if (!createAppName) {
|
|
198614
|
-
console.error("[pieui] Error: App name is required for create-pie-app command");
|
|
198615
|
-
printUsage();
|
|
198616
|
-
process.exit(1);
|
|
198617
|
-
}
|
|
198618
|
-
createPieAppCommand(createAppName);
|
|
198619
|
-
return;
|
|
198620
198545
|
case "create":
|
|
198621
198546
|
if (!createAppName) {
|
|
198622
198547
|
console.error("[pieui] Error: App name is required for create command");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/code/commands/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/code/commands/create.ts"],"names":[],"mappings":"AAsFA,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,SA6C5C,CAAA"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000" viewBox="0 0 1000 1000"><metadata><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><rdf:Description><dc:creator>RealFaviconGenerator</dc:creator><dc:source>https://realfavicongenerator.net</dc:source></rdf:Description></rdf:RDF></metadata><image width="1000" height="1000" xlink:href="data:image/png;base64,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"></image></svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/code/templates/env.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAO,MAO9B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const homePageTemplate = "\"use client\";\n\nimport PiePage from \"@/app/_shared/page\";\nimport { Suspense } from \"react\";\n\nexport default function HomePage() {\n return (\n <Suspense fallback={<></>}>\n <PiePage />\n </Suspense>\n );\n}\n";
|
|
2
|
+
//# sourceMappingURL=homePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homePage.d.ts","sourceRoot":"","sources":["../../../src/code/templates/homePage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,4OAY5B,CAAA"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { componentIndexTemplate } from './componentIndex';
|
|
2
2
|
import { componentTypesTemplate } from './componentTypes';
|
|
3
|
+
import { envTemplate } from './env';
|
|
4
|
+
import { homePageTemplate } from './homePage';
|
|
5
|
+
import { loadingScreenTemplate } from './loadingScreen';
|
|
3
6
|
import { registerCallTemplate } from './registerCall';
|
|
7
|
+
import { rootLayoutTemplate } from './rootLayout';
|
|
8
|
+
import { sharedPageTemplate } from './sharedPage';
|
|
4
9
|
import { nextConfigTemplate, REQUIRED_NEXT_CONFIG_ENV_KEYS } from './nextConfig';
|
|
5
10
|
import { baseInterfaceFor, componentTemplateFor, pageTemplate } from './pages';
|
|
6
|
-
export { baseInterfaceFor, componentTemplateFor, componentIndexTemplate, componentTypesTemplate, pageTemplate, registerCallTemplate, nextConfigTemplate, REQUIRED_NEXT_CONFIG_ENV_KEYS, };
|
|
11
|
+
export { baseInterfaceFor, componentTemplateFor, componentIndexTemplate, componentTypesTemplate, envTemplate, homePageTemplate, loadingScreenTemplate, pageTemplate, registerCallTemplate, nextConfigTemplate, REQUIRED_NEXT_CONFIG_ENV_KEYS, rootLayoutTemplate, sharedPageTemplate, };
|
|
7
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACf,MAAM,SAAS,CAAA;AAEhB,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACf,MAAM,SAAS,CAAA;AAEhB,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,EAC7B,kBAAkB,EAClB,kBAAkB,GACrB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const loadingScreenTemplate = "\"use client\";\n\nexport default function LoadingScreen() {\n return (\n <div className=\"flex min-h-screen items-center justify-center text-sm text-neutral-500\">\n Loading...\n </div>\n );\n}\n";
|
|
2
|
+
//# sourceMappingURL=loadingScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadingScreen.d.ts","sourceRoot":"","sources":["../../../src/code/templates/loadingScreen.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,sNASjC,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const REQUIRED_NEXT_CONFIG_ENV_KEYS: readonly ["PIE_API_SERVER", "PIE_CENTRIFUGE_SERVER", "PIE_ENABLE_RENDERING_LOG"
|
|
1
|
+
export declare const REQUIRED_NEXT_CONFIG_ENV_KEYS: readonly ["PIE_API_SERVER", "PIE_CENTRIFUGE_SERVER", "PIE_ENABLE_RENDERING_LOG"];
|
|
2
2
|
export declare const nextConfigTemplate: () => string;
|
|
3
3
|
//# sourceMappingURL=nextConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextConfig.d.ts","sourceRoot":"","sources":["../../../src/code/templates/nextConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,
|
|
1
|
+
{"version":3,"file":"nextConfig.d.ts","sourceRoot":"","sources":["../../../src/code/templates/nextConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,kFAIhC,CAAA;AAEV,eAAO,MAAM,kBAAkB,QAAO,MAgBrC,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const rootLayoutTemplate = "import type { Metadata } from \"next\";\nimport \"./globals.css\";\n\nexport const metadata: Metadata = {\n title: \"PieUI Project\",\n description: \"Generated by PieUI.\",\n applicationName: \"PieUI Project\",\n icons: {\n icon: \"/favicon.ico\",\n shortcut: \"/favicon.ico\",\n },\n};\n\nexport default function RootLayout({\n children,\n}: Readonly<{\n children: React.ReactNode;\n}>) {\n return (\n <html lang=\"en\">\n <body>{children}</body>\n </html>\n );\n}\n";
|
|
2
|
+
//# sourceMappingURL=rootLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rootLayout.d.ts","sourceRoot":"","sources":["../../../src/code/templates/rootLayout.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,mfAwB9B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const sharedPageTemplate = "\"use client\";\n\nimport { useRouter } from \"next/navigation\";\nimport { PieRoot } from \"@swarm.ing/pieui\";\nimport \"@/piecomponents/registry\";\nimport { usePathname, useSearchParams } from \"next/navigation\";\n\nexport default function PiePage() {\n const router = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const search = searchParams.toString();\n\n return (\n <PieRoot\n location={{ pathname, search }}\n config={{\n apiServer: process.env.PIE_API_SERVER!,\n centrifugeServer: process.env.PIE_CENTRIFUGE_SERVER!,\n enableRenderingLog: true,\n }}\n onNavigate={(url) => router.push(url)}\n fallback={<></>}\n />\n );\n}\n";
|
|
2
|
+
//# sourceMappingURL=sharedPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedPage.d.ts","sourceRoot":"","sources":["../../../src/code/templates/sharedPage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,uuBA0B9B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swarm.ing/pieui",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.13",
|
|
4
4
|
"description": "A React component library featuring PieCard component",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
"module": "dist/index.esm.js",
|
|
11
11
|
"types": "dist/index.d.ts",
|
|
12
12
|
"bin": {
|
|
13
|
-
"pieui": "dist/cli.js"
|
|
14
|
-
"create-pieui": "dist/create.js"
|
|
13
|
+
"pieui": "dist/cli.js"
|
|
15
14
|
},
|
|
16
15
|
"files": [
|
|
17
16
|
"dist"
|
|
@@ -32,7 +31,7 @@
|
|
|
32
31
|
}
|
|
33
32
|
},
|
|
34
33
|
"scripts": {
|
|
35
|
-
"build": "rm -rf ./dist && rm -rf pieui-*.tgz && bun run build:clean && NODE_ENV=production bun run build:esm && NODE_ENV=production bun run build:cjs && NODE_ENV=production bun run build:components:esm && NODE_ENV=production bun run build:components:cjs && bun run build:banner && NODE_ENV=production bun run build:types && NODE_ENV=production bun run build:cli &&
|
|
34
|
+
"build": "rm -rf ./dist && rm -rf pieui-*.tgz && bun run build:clean && NODE_ENV=production bun run build:esm && NODE_ENV=production bun run build:cjs && NODE_ENV=production bun run build:components:esm && NODE_ENV=production bun run build:components:cjs && bun run build:banner && NODE_ENV=production bun run build:types && NODE_ENV=production bun run build:cli && bun src/cli.ts postbuild --src-dir src --out-dir dist && bun pm pack",
|
|
36
35
|
"build:banner": "node -e \"const fs=require('fs');['dist/index.esm.js','dist/index.js','dist/components/index.esm.js','dist/components/index.js'].forEach(f=>{if(fs.existsSync(f)){fs.writeFileSync(f,'\\\"use client\\\";\\n'+fs.readFileSync(f,'utf8'))}})\"",
|
|
37
36
|
"build:clean": "rm -rf dist",
|
|
38
37
|
"build:esm": "bun build src/index.ts --outfile dist/index.esm.js --format esm --target browser --jsx=automatic --jsx-import-source=react --minify --packages=external",
|
|
@@ -43,18 +42,11 @@
|
|
|
43
42
|
"build:cjs:debug": "bun build src/index.ts --outfile dist/index.js --format cjs --target node --jsx=automatic --jsx-import-source=react --packages=external",
|
|
44
43
|
"build:components:esm:debug": "bun build src/components/index.ts --outfile dist/components/index.esm.js --format esm --target browser --jsx=automatic --jsx-import-source=react --packages=external",
|
|
45
44
|
"build:components:cjs:debug": "bun build src/components/index.ts --outfile dist/components/index.js --format cjs --target node --jsx=automatic --jsx-import-source=react --packages=external",
|
|
46
|
-
"build:debug": "rm -rf ./dist && rm -rf pieui-*.tgz && bun run build:clean && NODE_ENV=production bun run build:esm:debug && NODE_ENV=production bun run build:cjs:debug && NODE_ENV=production bun run build:components:esm:debug && NODE_ENV=production bun run build:components:cjs:debug && NODE_ENV=production bun run build:types && NODE_ENV=production bun run build:cli &&
|
|
45
|
+
"build:debug": "rm -rf ./dist && rm -rf pieui-*.tgz && bun run build:clean && NODE_ENV=production bun run build:esm:debug && NODE_ENV=production bun run build:cjs:debug && NODE_ENV=production bun run build:components:esm:debug && NODE_ENV=production bun run build:components:cjs:debug && NODE_ENV=production bun run build:types && NODE_ENV=production bun run build:cli && bun src/cli.ts postbuild --src-dir src --out-dir dist && bun pm pack",
|
|
47
46
|
"build:types": "tsc --emitDeclarationOnly",
|
|
48
|
-
"build:cli": "bun build src/cli.ts --outfile dist/cli.js --format cjs --target node --external vm2",
|
|
49
|
-
"build:create": "bun build src/create.ts --outfile dist/create.js --format cjs --target node --external vm2",
|
|
47
|
+
"build:cli": "bun build src/cli.ts --outfile dist/cli.js --format cjs --target node --external vm2 && mkdir -p dist/code && cp -R src/code/public dist/code/",
|
|
50
48
|
"dev": "bun run src/index.ts",
|
|
51
49
|
"test": "bun test",
|
|
52
|
-
"test:step1": "bun test src/__tests__/step1-local.test.cjs",
|
|
53
|
-
"test:step2": "bun test src/__tests__/step2-remote.test.cjs",
|
|
54
|
-
"test:step3": "bun test src/__tests__/step3-contract.test.cjs",
|
|
55
|
-
"test:step4": "bun test src/__tests__/step4-ci.test.cjs",
|
|
56
|
-
"test:step5": "bun test src/__tests__/step5-regres.test.cjs",
|
|
57
|
-
"test:steps": "bun test src/__tests__/step1-local.test.cjs src/__tests__/step2-remote.test.cjs src/__tests__/step3-contract.test.cjs src/__tests__/step4-ci.test.cjs src/__tests__/step5-regres.test.cjs",
|
|
58
50
|
"test:cleanup": "node scripts/cleanup-test-artifacts.mjs",
|
|
59
51
|
"typecheck": "tsc --noEmit",
|
|
60
52
|
"lint": "prettier --write ./",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"step1-local.test.d.cts","sourceRoot":"","sources":["../../src/__tests__/step1-local.test.cjs"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"step2-remote.test.d.cts","sourceRoot":"","sources":["../../src/__tests__/step2-remote.test.cjs"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"step3-contract.test.d.cts","sourceRoot":"","sources":["../../src/__tests__/step3-contract.test.cjs"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"step4-ci.test.d.cts","sourceRoot":"","sources":["../../src/__tests__/step4-ci.test.cjs"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"step5-regres.test.d.cts","sourceRoot":"","sources":["../../src/__tests__/step5-regres.test.cjs"],"names":[],"mappings":""}
|
package/dist/create.d.ts
DELETED
package/dist/create.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":""}
|
package/dist/create.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
-
for (let key of __getOwnPropNames(mod))
|
|
11
|
-
if (!__hasOwnProp.call(to, key))
|
|
12
|
-
__defProp(to, key, {
|
|
13
|
-
get: () => mod[key],
|
|
14
|
-
enumerable: true
|
|
15
|
-
});
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
// src/code/commands/createPieApp.ts
|
|
20
|
-
var import_fs = __toESM(require("fs"));
|
|
21
|
-
var import_path = __toESM(require("path"));
|
|
22
|
-
var import_child_process = require("child_process");
|
|
23
|
-
var DEFAULT_TEMPLATE_SPEC = "next-app@latest";
|
|
24
|
-
var SHARED_TEMPLATE_DIR_ENV = "PIEUI_SHARED_TEMPLATE_DIR";
|
|
25
|
-
var AI_EXCHANGE_BOT_DIR_ENV = "PIEUI_AI_EXCHANGE_BOT_DIR";
|
|
26
|
-
var BACKEND_LINK_COMMENT = "// TODO(pie-backend): Link generated Python Unicorn backend routes here once backend template sync is enabled.";
|
|
27
|
-
var updateNextScriptsToBun = (packageJsonPath) => {
|
|
28
|
-
if (!import_fs.default.existsSync(packageJsonPath))
|
|
29
|
-
return;
|
|
30
|
-
try {
|
|
31
|
-
const pkg = JSON.parse(import_fs.default.readFileSync(packageJsonPath, "utf8"));
|
|
32
|
-
if (!pkg.scripts)
|
|
33
|
-
return;
|
|
34
|
-
const updates = {
|
|
35
|
-
dev: "bun --bun next dev",
|
|
36
|
-
build: "bun --bun next build",
|
|
37
|
-
start: "bun --bun next start"
|
|
38
|
-
};
|
|
39
|
-
for (const [scriptName, scriptValue] of Object.entries(updates)) {
|
|
40
|
-
if (pkg.scripts[scriptName]) {
|
|
41
|
-
pkg.scripts[scriptName] = scriptValue;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
import_fs.default.writeFileSync(packageJsonPath, `${JSON.stringify(pkg, null, 2)}
|
|
45
|
-
`, "utf8");
|
|
46
|
-
} catch {
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var appendBackendLinkComment = (pagePath) => {
|
|
50
|
-
if (!import_fs.default.existsSync(pagePath))
|
|
51
|
-
return;
|
|
52
|
-
const page = import_fs.default.readFileSync(pagePath, "utf8");
|
|
53
|
-
if (page.includes(BACKEND_LINK_COMMENT))
|
|
54
|
-
return;
|
|
55
|
-
import_fs.default.writeFileSync(pagePath, `${page.trimEnd()}
|
|
56
|
-
|
|
57
|
-
${BACKEND_LINK_COMMENT}
|
|
58
|
-
`, "utf8");
|
|
59
|
-
};
|
|
60
|
-
var uniq = (items) => [...new Set(items)];
|
|
61
|
-
var isDirectory = (target) => {
|
|
62
|
-
try {
|
|
63
|
-
return import_fs.default.statSync(target).isDirectory();
|
|
64
|
-
} catch {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
var resolveSharedTemplateDir = () => {
|
|
69
|
-
const explicitSharedDir = process.env[SHARED_TEMPLATE_DIR_ENV];
|
|
70
|
-
if (explicitSharedDir) {
|
|
71
|
-
const normalized = import_path.default.resolve(explicitSharedDir);
|
|
72
|
-
if (!isDirectory(normalized)) {
|
|
73
|
-
throw new Error(`${SHARED_TEMPLATE_DIR_ENV} points to a missing directory: ${normalized}`);
|
|
74
|
-
}
|
|
75
|
-
return normalized;
|
|
76
|
-
}
|
|
77
|
-
const cwd = process.cwd();
|
|
78
|
-
const baseDirs = [cwd, import_path.default.resolve(cwd, ".."), import_path.default.resolve(cwd, "../..")];
|
|
79
|
-
const explicitRepoDir = process.env[AI_EXCHANGE_BOT_DIR_ENV];
|
|
80
|
-
if (explicitRepoDir) {
|
|
81
|
-
baseDirs.unshift(import_path.default.resolve(explicitRepoDir));
|
|
82
|
-
}
|
|
83
|
-
const repoNames = ["ai-exchange-bot", "ai-exchange-web", "a-exchange-web"];
|
|
84
|
-
const repoCandidates = uniq([
|
|
85
|
-
...baseDirs,
|
|
86
|
-
...baseDirs.flatMap((base) => repoNames.map((name) => import_path.default.join(base, name)))
|
|
87
|
-
]).filter((candidate) => isDirectory(candidate));
|
|
88
|
-
const sharedSubpaths = [
|
|
89
|
-
"_shared",
|
|
90
|
-
"src/_shared",
|
|
91
|
-
"app/_shared",
|
|
92
|
-
"pages/_shared",
|
|
93
|
-
"pages/components/_shared",
|
|
94
|
-
"apps/web/_shared",
|
|
95
|
-
"apps/web/src/_shared"
|
|
96
|
-
];
|
|
97
|
-
for (const repoDir of repoCandidates) {
|
|
98
|
-
for (const subpath of sharedSubpaths) {
|
|
99
|
-
const candidate = import_path.default.join(repoDir, subpath);
|
|
100
|
-
if (isDirectory(candidate)) {
|
|
101
|
-
return candidate;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
throw new Error([
|
|
106
|
-
"Could not locate a _shared template directory from ai-exchange-bot.",
|
|
107
|
-
`Set ${SHARED_TEMPLATE_DIR_ENV}=/absolute/path/to/_shared`,
|
|
108
|
-
`or ${AI_EXCHANGE_BOT_DIR_ENV}=/absolute/path/to/ai-exchange-bot.`
|
|
109
|
-
].join(" "));
|
|
110
|
-
};
|
|
111
|
-
var copySharedTemplate = (sharedTemplateDir, appDir) => {
|
|
112
|
-
const destination = import_path.default.join(appDir, "_shared");
|
|
113
|
-
import_fs.default.cpSync(sharedTemplateDir, destination, { recursive: true, force: true });
|
|
114
|
-
};
|
|
115
|
-
var createPieAppCommand = (appName) => {
|
|
116
|
-
const trimmedAppName = appName.trim();
|
|
117
|
-
if (!trimmedAppName) {
|
|
118
|
-
console.error("[pieui] Error: App name is required for create-pie-app command");
|
|
119
|
-
process.exit(1);
|
|
120
|
-
}
|
|
121
|
-
const appDir = import_path.default.resolve(process.cwd(), trimmedAppName);
|
|
122
|
-
if (import_fs.default.existsSync(appDir)) {
|
|
123
|
-
console.error(`[pieui] Error: Target directory already exists: ${trimmedAppName}`);
|
|
124
|
-
process.exit(1);
|
|
125
|
-
}
|
|
126
|
-
const bunBin = process.env.PIEUI_CREATE_BUN_BIN || "bun";
|
|
127
|
-
const templateSpec = process.env.PIEUI_CREATE_NEXT_APP_SPEC || DEFAULT_TEMPLATE_SPEC;
|
|
128
|
-
console.log(`[pieui] Creating blank PieUI web template in "${trimmedAppName}"...`);
|
|
129
|
-
const args = ["create", templateSpec, trimmedAppName, "--yes"];
|
|
130
|
-
const result = import_child_process.spawnSync(bunBin, args, {
|
|
131
|
-
cwd: process.cwd(),
|
|
132
|
-
stdio: "inherit",
|
|
133
|
-
env: process.env
|
|
134
|
-
});
|
|
135
|
-
if (result.error) {
|
|
136
|
-
throw result.error;
|
|
137
|
-
}
|
|
138
|
-
if (result.status !== 0) {
|
|
139
|
-
throw new Error(`create-pie-app failed (exit code ${result.status ?? "unknown"})`);
|
|
140
|
-
}
|
|
141
|
-
const sharedTemplateDir = resolveSharedTemplateDir();
|
|
142
|
-
copySharedTemplate(sharedTemplateDir, appDir);
|
|
143
|
-
updateNextScriptsToBun(import_path.default.join(appDir, "package.json"));
|
|
144
|
-
appendBackendLinkComment(import_path.default.join(appDir, "app", "page.tsx"));
|
|
145
|
-
console.log("[pieui] Template created successfully.");
|
|
146
|
-
console.log(`[pieui] Copied _shared from: ${sharedTemplateDir}`);
|
|
147
|
-
console.log(`[pieui] Next steps:`);
|
|
148
|
-
console.log(` 1. cd ${trimmedAppName}`);
|
|
149
|
-
console.log(` 2. bun install`);
|
|
150
|
-
console.log(` 3. bun run dev`);
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
// src/create.ts
|
|
154
|
-
var main = () => {
|
|
155
|
-
const [appName = ""] = process.argv.slice(2);
|
|
156
|
-
if (!appName) {
|
|
157
|
-
console.error("Usage: bun create pieui@latest <app-name>");
|
|
158
|
-
process.exit(1);
|
|
159
|
-
}
|
|
160
|
-
createPieAppCommand(appName);
|
|
161
|
-
};
|
|
162
|
-
main();
|