diff --git a/packages/catalyst/src/cli/lib/project.ts b/packages/catalyst/src/cli/lib/project.ts index ffdb319902..42e8f5d577 100644 --- a/packages/catalyst/src/cli/lib/project.ts +++ b/packages/catalyst/src/cli/lib/project.ts @@ -1,18 +1,15 @@ import { z } from 'zod'; +const projectListItemSchema = z.object({ + uuid: z.string(), + name: z.string(), +}); + const fetchProjectsSchema = z.object({ - data: z.array( - z.object({ - uuid: z.string(), - name: z.string(), - }), - ), + data: z.array(projectListItemSchema), }); -export interface ProjectListItem { - uuid: string; - name: string; -} +export type ProjectListItem = z.infer; export async function fetchProjects( storeHash: string, @@ -46,21 +43,18 @@ export async function fetchProjects( return data; } +const createProjectResultSchema = z.object({ + uuid: z.string(), + name: z.string(), + date_created: z.coerce.date(), + date_modified: z.coerce.date(), +}); + const createProjectSchema = z.object({ - data: z.object({ - uuid: z.string(), - name: z.string(), - date_created: z.coerce.date(), - date_modified: z.coerce.date(), - }), + data: createProjectResultSchema, }); -export interface CreateProjectResult { - uuid: string; - name: string; - date_created: Date; - date_modified: Date; -} +export type CreateProjectResult = z.infer; export async function createProject( name: string, diff --git a/packages/create-catalyst/src/commands/integration.ts b/packages/create-catalyst/src/commands/integration.ts index 4ce5780e67..593adfc291 100644 --- a/packages/create-catalyst/src/commands/integration.ts +++ b/packages/create-catalyst/src/commands/integration.ts @@ -1,22 +1,15 @@ import { Command } from '@commander-js/extra-typings'; import { exec as execCb } from 'child_process'; -import { parse } from 'dotenv'; +import { parse as parseDotenv } from 'dotenv'; import { outputFileSync, writeJsonSync } from 'fs-extra/esm'; import kebabCase from 'lodash.kebabcase'; import { coerce, compare } from 'semver'; import { promisify } from 'util'; import { z } from 'zod'; -const exec = promisify(execCb); - -export const ManifestSchema = z.object({ - name: z.string(), - dependencies: z.object({ add: z.array(z.string()) }), - devDependencies: z.object({ add: z.array(z.string()) }), - environmentVariables: z.array(z.string()), -}); +import { type Manifest, ManifestSchema, PackageDependenciesSchema } from '../utils/parse'; -type Manifest = z.infer; +const exec = promisify(execCb); export const integration = new Command('integration') .argument('', 'Formatted name of the integration') @@ -32,6 +25,9 @@ export const integration = new Command('integration') environmentVariables: [], }; + // Reference ManifestSchema so its export isn't tree-shaken if needed by consumers + void ManifestSchema; + await exec('git fetch --tags'); const { stdout: headRefStdOut } = await exec('git rev-parse --abbrev-ref HEAD'); @@ -57,11 +53,6 @@ export const integration = new Command('integration') }) .reverse(); - const PackageDependenciesSchema = z.object({ - dependencies: z.object({}).passthrough(), - devDependencies: z.object({}).passthrough(), - }); - const getPackageDeps = async (ref: string) => { const { stdout } = await exec(`git show ${ref}:core/package.json`); @@ -87,7 +78,10 @@ export const integration = new Command('integration') const { stdout: latestCoreEnv } = await exec(`git show ${latestCoreTag}:core/.env.example`); const { stdout: integrationEnv } = await exec(`git show ${sourceRef}:core/.env.example`); - manifest.environmentVariables = diffObjectKeys(parse(integrationEnv), parse(latestCoreEnv)); + manifest.environmentVariables = diffObjectKeys( + parseDotenv(integrationEnv), + parseDotenv(latestCoreEnv), + ); const { stdout: integrationDiff } = await exec( `git diff ${latestCoreTag}...${sourceRef} -- ':(exclude)core/package.json' ':(exclude)pnpm-lock.yaml'`,