소스 검색

chore(create-pyth-app): more tweaks

benduran 1 주 전
부모
커밋
5eb84c56d3

+ 2 - 1
packages/create-pyth-app/package.json

@@ -33,6 +33,7 @@
     "@cprussin/eslint-config": "catalog:",
     "@cprussin/eslint-config": "catalog:",
     "@types/fs-extra": "catalog:",
     "@types/fs-extra": "catalog:",
     "@types/prompts": "catalog:",
     "@types/prompts": "catalog:",
-    "eslint": "catalog:"
+    "eslint": "catalog:",
+    "type-fest": "catalog:"
   }
   }
 }
 }

+ 33 - 8
packages/create-pyth-app/src/create-pyth-app.ts

@@ -11,6 +11,7 @@ import glob from "fast-glob";
 import fs from "fs-extra";
 import fs from "fs-extra";
 import { render as renderTemplate } from "micromustache";
 import { render as renderTemplate } from "micromustache";
 import prompts from "prompts";
 import prompts from "prompts";
+import type { PackageJson } from "type-fest";
 
 
 import { getAvailableFolders } from "./get-available-folders.js";
 import { getAvailableFolders } from "./get-available-folders.js";
 import { Logger } from "./logger.js";
 import { Logger } from "./logger.js";
@@ -44,7 +45,7 @@ function getTemplatesInputFolder(packageType: PackageType) {
 }
 }
 
 
 async function createPythApp() {
 async function createPythApp() {
-  const { confirm, description, folder, packageName, packageType } =
+  const { confirm, description, folder, isPublic, packageName, packageType } =
     (await prompts([
     (await prompts([
       {
       {
         choices: Object.values(PackageType).map((val) => ({
         choices: Object.values(PackageType).map((val) => ({
@@ -92,6 +93,12 @@ async function createPythApp() {
         type: (_, { packageType }: InProgressCreatePythAppResponses) =>
         type: (_, { packageType }: InProgressCreatePythAppResponses) =>
           packageType === PackageType.WEBAPP ? false : "select",
           packageType === PackageType.WEBAPP ? false : "select",
       },
       },
+      {
+        message:
+          "Are you intending on publishing this, publicly on NPM, for users outside of our org to use?",
+        name: "isPublic",
+        type: "confirm",
+      },
       {
       {
         message: (
         message: (
           _,
           _,
@@ -102,7 +109,7 @@ async function createPythApp() {
           }: InProgressCreatePythAppResponses,
           }: InProgressCreatePythAppResponses,
         ) => {
         ) => {
           let msg = `Please confirm your choices:${os.EOL}`;
           let msg = `Please confirm your choices:${os.EOL}`;
-          msg += `Creating a ${chalk.magenta(packageType)} package, named ${chalk.magenta(packageName)}, in ${chalk.magenta(packageType === PackageType.WEBAPP ? `apps/${packageName?.split("/")[1] ?? ""}` : folder)}.${os.EOL}`;
+          msg += `Creating a ${chalk.magenta(packageType)} package, named ${chalk.magenta(packageName)}, in ${chalk.magenta(packageType === PackageType.WEBAPP ? "apps" : folder)}/${packageName?.split("/")[1] ?? ""}.${os.EOL}`;
           msg += "Look good?";
           msg += "Look good?";
 
 
           return msg;
           return msg;
@@ -123,7 +130,11 @@ async function createPythApp() {
     packageType === PackageType.WEBAPP
     packageType === PackageType.WEBAPP
       ? path.join("apps", packageNameWithoutOrg)
       ? path.join("apps", packageNameWithoutOrg)
       : folder;
       : folder;
-  const absDest = path.join(appRootPath.toString(), relDest);
+  const absDest = path.join(
+    appRootPath.toString(),
+    relDest,
+    packageNameWithoutOrg,
+  );
 
 
   Logger.info("ensuring", relDest, "exists");
   Logger.info("ensuring", relDest, "exists");
   await fs.ensureDir(absDest);
   await fs.ensureDir(absDest);
@@ -143,12 +154,26 @@ async function createPythApp() {
   );
   );
   await Promise.all(
   await Promise.all(
     destFiles.map(async (fp) => {
     destFiles.map(async (fp) => {
+      debugger;
       const contents = await fs.readFile(fp, "utf8");
       const contents = await fs.readFile(fp, "utf8");
-      await fs.writeFile(
-        fp,
-        renderTemplate(contents, { description, name: packageName }),
-        "utf8",
-      );
+      const updatedContents = renderTemplate(contents, {
+        description,
+        name: packageName,
+        relativeFolder: relDest,
+      });
+      await fs.writeFile(fp, updatedContents, "utf8");
+
+      if (fp.endsWith("package.json")) {
+        const pjson = JSON.parse(updatedContents) as PackageJson;
+        pjson.private = !isPublic;
+        if (isPublic) {
+          pjson.publishConfig = {
+            access: "public",
+          };
+        }
+
+        await fs.writeFile(fp, JSON.stringify(pjson, undefined, 2), "utf8");
+      }
     }),
     }),
   );
   );
 
 

+ 3 - 1
packages/create-pyth-app/src/templates/cli/package.json

@@ -24,6 +24,7 @@
     "fix:lint": "eslint src/ --fix --max-warnings 0",
     "fix:lint": "eslint src/ --fix --max-warnings 0",
     "fix:format": "prettier --write \"src/**/*.ts\"",
     "fix:format": "prettier --write \"src/**/*.ts\"",
     "prepublishOnly": "pnpm run build && pnpm run test:lint",
     "prepublishOnly": "pnpm run build && pnpm run test:lint",
+    "start:dev": "tsx ./src/index.ts",
     "test:lint": "eslint src/ --max-warnings 0",
     "test:lint": "eslint src/ --max-warnings 0",
     "test:format": "prettier --check \"src/**/*.ts\""
     "test:format": "prettier --check \"src/**/*.ts\""
   },
   },
@@ -36,7 +37,8 @@
     "@types/node": "catalog:",
     "@types/node": "catalog:",
     "@types/yargs": "catalog:",
     "@types/yargs": "catalog:",
     "eslint": "catalog:",
     "eslint": "catalog:",
-    "jest": "catalog:"
+    "jest": "catalog:",
+    "tsx": "catalog:"
   },
   },
   "dependencies": {
   "dependencies": {
     "yargs": "catalog:"
     "yargs": "catalog:"

+ 1 - 0
packages/create-pyth-app/src/types.ts

@@ -11,6 +11,7 @@ export type CreatePythAppResponses = {
   customFolderPath?: string;
   customFolderPath?: string;
   description: string;
   description: string;
   folder: string;
   folder: string;
+  isPublic: boolean;
   packageName: string;
   packageName: string;
   packageType: PackageType;
   packageType: PackageType;
 };
 };

+ 6 - 0
pnpm-lock.yaml

@@ -339,6 +339,9 @@ catalogs:
     turbo:
     turbo:
       specifier: ^2.5.8
       specifier: ^2.5.8
       version: 2.5.8
       version: 2.5.8
+    type-fest:
+      specifier: ^5.2.0
+      version: 5.2.0
     typedoc:
     typedoc:
       specifier: ^0.26.8
       specifier: ^0.26.8
       version: 0.26.11
       version: 0.26.11
@@ -2210,6 +2213,9 @@ importers:
       eslint:
       eslint:
         specifier: 'catalog:'
         specifier: 'catalog:'
         version: 9.23.0(jiti@2.4.2)
         version: 9.23.0(jiti@2.4.2)
+      type-fest:
+        specifier: 'catalog:'
+        version: 5.2.0
 
 
   packages/jest-config:
   packages/jest-config:
     dependencies:
     dependencies:

+ 1 - 0
pnpm-workspace.yaml

@@ -168,6 +168,7 @@ catalog:
   ts-node: ^10.9.2
   ts-node: ^10.9.2
   tsx: 4.20.6
   tsx: 4.20.6
   typedoc: ^0.26.8
   typedoc: ^0.26.8
+  type-fest: ^5.2.0
   typescript: ^5.9.3
   typescript: ^5.9.3
   turbo: ^2.5.8
   turbo: ^2.5.8
   vercel: ^41.4.1
   vercel: ^41.4.1