Skip to content

Commit

Permalink
Feat/replace local database with supabase (#26)
Browse files Browse the repository at this point in the history
  • Loading branch information
maneike authored Nov 12, 2024
1 parent a2752d8 commit 3292777
Show file tree
Hide file tree
Showing 11 changed files with 55 additions and 94 deletions.
15 changes: 0 additions & 15 deletions packages/cli/templates/supabase/files/docker-compose.yml

This file was deleted.

2 changes: 1 addition & 1 deletion packages/cli/templates/supabase/installConfig.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export const supabaseFiles = [
{
path: 'supabase/src/',
files: ['client.ts', 'index.ts', 'middleware.ts', 'server.ts', 'types.ts', 'docker-compose.yml'],
files: ['client.ts', 'index.ts', 'middleware.ts', 'server.ts', 'types.ts'],
},
{
path: 'supabase/',
Expand Down
33 changes: 3 additions & 30 deletions packages/core/installMachine/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { createDocFiles } from './installSteps/docs/create';
import { pushToGitHub } from './installSteps/github/repositoryManager';
import { InstallMachineContext, StepsCompleted } from '../types';
import { saveStateToRcFile } from '../utils/rcFileManager';
import { setupDatabaseWithDocker } from './installSteps/supabase/setupDatabaseWithDocker';

const isStepCompleted = (stepName: keyof StepsCompleted) => {
return ({ context }: { context: InstallMachineContext; event: AnyEventObject }) => {
Expand Down Expand Up @@ -71,31 +70,17 @@ const createInstallMachine = (initialContext: InstallMachineContext) => {
installSupabase: {
always: [
{
guard: isStepCompleted('installSupabase'),
target: 'setupDatabaseWithDocker',
},
],
invoke: {
input: ({ context }) => context,
src: 'installSupabaseActor',
onDone: 'setupDatabaseWithDocker',
onError: 'failed',
},
},
setupDatabaseWithDocker: {
always: [
{
guard: and([isStepCompleted('setupDatabaseWithDocker'), 'shouldInstallPayload']),
guard: and([isStepCompleted('installSupabase'), 'shouldInstallPayload']),
target: 'installPayload',
},
{
guard: isStepCompleted('setupDatabaseWithDocker'),
guard: isStepCompleted('installSupabase'),
target: 'createDocFiles',
},
],
invoke: {
input: ({ context }) => context,
src: 'setupDatabaseWithDockerActor',
src: 'installSupabaseActor',
onDone: [{ guard: 'shouldInstallPayload', target: 'installPayload' }, { target: 'createDocFiles' }],
onError: 'failed',
},
Expand Down Expand Up @@ -286,18 +271,6 @@ const createInstallMachine = (initialContext: InstallMachineContext) => {
}
}),
),
setupDatabaseWithDockerActor: createStepMachine(
fromPromise<void, InstallMachineContext, AnyEventObject>(async ({ input }) => {
try {
setupDatabaseWithDocker();
input.stateData.stepsCompleted.setupDatabaseWithDocker = true;
saveStateToRcFile(input.stateData, input.projectDir);
} catch (error) {
console.error('Error in setupDatabaseWithDockerActor:', error);
throw error;
}
}),
),
installPayloadActor: createStepMachine(
fromPromise<void, InstallMachineContext, AnyEventObject>(async ({ input }) => {
try {
Expand Down
15 changes: 9 additions & 6 deletions packages/core/installMachine/installSteps/payload/install.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { execSync } from 'child_process';
import { existsSync } from 'fs';
import { join } from 'path';
import path, { join } from 'path';
import chalk from 'chalk';
import { preparePayloadConfig } from './preparePayloadConfig';
import { prepareTsConfig } from './prepareTsConfig';
import { removeTurboFlag } from './removeTurboFlag';
import { updatePackages } from './updatePackages';
import { logWithColoredPrefix } from '../../../utils/logWithColoredPrefix';
import chalk from 'chalk';
import { loadEnvFile } from './utils/loadEnvFile';

export const preparePayload = async () => {
logWithColoredPrefix('payload', 'Initializing...');
Expand All @@ -24,10 +25,12 @@ export const preparePayload = async () => {
);

logWithColoredPrefix('payload', 'Installing to Next.js...');
logWithColoredPrefix(
'postgres',
`Local connection string: ${chalk.cyan('postgresql://user:password@localhost:5432/postgres')}`,
);

// Show the local Supabase connection string
loadEnvFile(path.resolve('../../supabase/.env'));
logWithColoredPrefix('postgres', `Local connection string: ${chalk.cyan(process.env.DB_URL)}`);

// Install Payload
execSync('npx create-payload-app@beta --db postgres', { stdio: 'inherit' });

// Payload doesn't work with Turbopack yet
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import fs from 'fs';

export const loadEnvFile = (filePath: fs.PathOrFileDescriptor) => {
const envData = fs.readFileSync(filePath, 'utf-8');
envData.split('\n').forEach((line) => {
const [key, value] = line.split('=');
if (key && value) {
process.env[key.trim()] = value.trim();
}
});
};
30 changes: 30 additions & 0 deletions packages/core/installMachine/installSteps/supabase/install.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { execSync } from 'child_process';
import fs from 'fs';
import path from 'path';
import chalk from 'chalk';
import { supabaseFiles } from '../../../templates/supabase/installConfig';
import { templateGenerator } from '../../../utils/generator/generator';
import { getTemplateDirectory } from '../../../utils/getTemplateDirectory';
Expand Down Expand Up @@ -80,5 +81,34 @@ export const installSupabase = async (destinationDirectory: string) => {

execSync('pnpm i --reporter silent', { stdio: 'inherit' });

logWithColoredPrefix('supabase', 'Starting local database...');

try {
execSync('npx supabase start', { stdio: 'ignore' });
} catch (error) {
console.error(
`Failed to start local database. Is your ${chalk.hex('#0db7ed')('Docker')} daemon running?`,
`\n${error}`,
);
process.exit(1);
}

logWithColoredPrefix('supabase', 'Writing local variables to .env file...');

const output = execSync('npx supabase status --output json', {
encoding: 'utf-8',
stdio: ['ignore', 'pipe', 'ignore'],
});
// Parse the JSON output
const jsonData = JSON.parse(output);

// Convert JSON data to .env format
const envData = Object.entries(jsonData)
.map(([key, value]) => `${key}=${value}`)
.join('\n');

// Write the formatted data to .env file
fs.writeFileSync('.env', envData, 'utf8');

process.chdir('..');
};

This file was deleted.

15 changes: 0 additions & 15 deletions packages/core/templates/supabase/files/docker-compose.yml

This file was deleted.

2 changes: 1 addition & 1 deletion packages/core/templates/supabase/installConfig.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export const supabaseFiles = [
{
path: 'supabase/src/',
files: ['client.ts', 'index.ts', 'middleware.ts', 'server.ts', 'types.ts', 'docker-compose.yml'],
files: ['client.ts', 'index.ts', 'middleware.ts', 'server.ts', 'types.ts'],
},
{
path: 'supabase/',
Expand Down
1 change: 0 additions & 1 deletion packages/core/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ export interface ProjectOptions {
export interface StepsCompleted {
initializeProject: boolean;
installSupabase: boolean;
setupDatabaseWithDocker: boolean;
installPayload: boolean;
createDocFiles: boolean;
prettifyCode: boolean;
Expand Down
1 change: 0 additions & 1 deletion packages/core/utils/rcFileManager/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ export const initializeRcFile = (projectDir: string, name: string, usePayload: b
initializeProject: false,
installPayload: false,
installSupabase: false,
setupDatabaseWithDocker: false,
prettifyCode: false,
createDocFiles: false,
createSupabaseProject: false,
Expand Down

0 comments on commit 3292777

Please sign in to comment.