fix: constants writing

This commit is contained in:
veganbeef 2025-07-01 18:27:51 -07:00
parent 1648971d15
commit 1093eb64a1
No known key found for this signature in database
3 changed files with 39 additions and 23 deletions

View File

@ -458,17 +458,33 @@ export async function init(projectName = null, autoAcceptDefaults = false) {
// Helper function to safely replace constants with validation // Helper function to safely replace constants with validation
const safeReplace = (content, pattern, replacement, constantName) => { const safeReplace = (content, pattern, replacement, constantName) => {
const match = content.match(pattern);
if (!match) {
console.log(`⚠️ Warning: Could not update ${constantName} in constants.ts. Pattern not found.`);
console.log(`Pattern: ${pattern}`);
console.log(`Expected to match in: ${content.split('\n').find(line => line.includes(constantName)) || 'Not found'}`);
} else {
const newContent = content.replace(pattern, replacement); const newContent = content.replace(pattern, replacement);
if (newContent === content) {
console.log(`⚠️ Warning: Could not update ${constantName} in constants.ts`);
}
return newContent; return newContent;
}
return content;
};
// Regex patterns that match whole lines with export const
const patterns = {
APP_NAME: /^export const APP_NAME\s*=\s*['"`][^'"`]*['"`];$/m,
APP_DESCRIPTION: /^export const APP_DESCRIPTION\s*=\s*['"`][^'"`]*['"`];$/m,
APP_PRIMARY_CATEGORY: /^export const APP_PRIMARY_CATEGORY\s*=\s*['"`][^'"`]*['"`];$/m,
APP_TAGS: /^export const APP_TAGS\s*=\s*\[[^\]]*\];$/m,
APP_BUTTON_TEXT: /^export const APP_BUTTON_TEXT\s*=\s*['"`][^'"`]*['"`];$/m,
USE_WALLET: /^export const USE_WALLET\s*=\s*(true|false);$/m,
ANALYTICS_ENABLED: /^export const ANALYTICS_ENABLED\s*=\s*(true|false);$/m
}; };
// Update APP_NAME // Update APP_NAME
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const APP_NAME\s*=\s*['"`][^'"`]*['"`];/, patterns.APP_NAME,
`export const APP_NAME = '${escapeString(answers.projectName)}';`, `export const APP_NAME = '${escapeString(answers.projectName)}';`,
'APP_NAME' 'APP_NAME'
); );
@ -476,20 +492,18 @@ export async function init(projectName = null, autoAcceptDefaults = false) {
// Update APP_DESCRIPTION // Update APP_DESCRIPTION
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const APP_DESCRIPTION\s*=\s*['"`][^'"`]*['"`];/, patterns.APP_DESCRIPTION,
`export const APP_DESCRIPTION = '${escapeString(answers.description)}';`, `export const APP_DESCRIPTION = '${escapeString(answers.description)}';`,
'APP_DESCRIPTION' 'APP_DESCRIPTION'
); );
// Update APP_PRIMARY_CATEGORY // Update APP_PRIMARY_CATEGORY (always update, null becomes empty string)
if (answers.primaryCategory) {
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const APP_PRIMARY_CATEGORY\s*=\s*['"`][^'"`]*['"`];/, patterns.APP_PRIMARY_CATEGORY,
`export const APP_PRIMARY_CATEGORY = '${escapeString(answers.primaryCategory)}';`, `export const APP_PRIMARY_CATEGORY = '${escapeString(answers.primaryCategory || '')}';`,
'APP_PRIMARY_CATEGORY' 'APP_PRIMARY_CATEGORY'
); );
}
// Update APP_TAGS // Update APP_TAGS
const tagsString = answers.tags.length > 0 const tagsString = answers.tags.length > 0
@ -497,23 +511,23 @@ export async function init(projectName = null, autoAcceptDefaults = false) {
: "['neynar', 'starter-kit', 'demo']"; : "['neynar', 'starter-kit', 'demo']";
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const APP_TAGS\s*=\s*\[[^\]]*\];/, patterns.APP_TAGS,
`export const APP_TAGS = ${tagsString};`, `export const APP_TAGS = ${tagsString};`,
'APP_TAGS' 'APP_TAGS'
); );
// Update APP_BUTTON_TEXT // Update APP_BUTTON_TEXT (always update, use answers value)
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const APP_BUTTON_TEXT\s*=\s*['"`][^'"`]*['"`];/, patterns.APP_BUTTON_TEXT,
`export const APP_BUTTON_TEXT = '${escapeString(answers.buttonText)}';`, `export const APP_BUTTON_TEXT = '${escapeString(answers.buttonText || '')}';`,
'APP_BUTTON_TEXT' 'APP_BUTTON_TEXT'
); );
// Update USE_WALLET // Update USE_WALLET
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const USE_WALLET\s*=\s*(true|false);/, patterns.USE_WALLET,
`export const USE_WALLET = ${answers.useWallet};`, `export const USE_WALLET = ${answers.useWallet};`,
'USE_WALLET' 'USE_WALLET'
); );
@ -521,7 +535,7 @@ export async function init(projectName = null, autoAcceptDefaults = false) {
// Update ANALYTICS_ENABLED // Update ANALYTICS_ENABLED
constantsContent = safeReplace( constantsContent = safeReplace(
constantsContent, constantsContent,
/export const ANALYTICS_ENABLED\s*=\s*(true|false);/, patterns.ANALYTICS_ENABLED,
`export const ANALYTICS_ENABLED = ${answers.enableAnalytics};`, `export const ANALYTICS_ENABLED = ${answers.enableAnalytics};`,
'ANALYTICS_ENABLED' 'ANALYTICS_ENABLED'
); );

View File

@ -1,6 +1,6 @@
{ {
"name": "@neynar/create-farcaster-mini-app", "name": "@neynar/create-farcaster-mini-app",
"version": "1.5.0", "version": "1.5.1",
"type": "module", "type": "module",
"private": false, "private": false,
"access": "public", "access": "public",

View File

@ -4,6 +4,9 @@
* This file contains all the configuration constants used throughout the mini app. * This file contains all the configuration constants used throughout the mini app.
* These values are either sourced from environment variables or hardcoded and provide * These values are either sourced from environment variables or hardcoded and provide
* configuration for the app's appearance, behavior, and integration settings. * configuration for the app's appearance, behavior, and integration settings.
*
* NOTE: This file is automatically updated by the init script.
* Manual changes may be overwritten during project initialization.
*/ */
// --- App Configuration --- // --- App Configuration ---
@ -34,7 +37,6 @@ export const APP_PRIMARY_CATEGORY = 'developer-tools';
/** /**
* Tags associated with the mini app. * Tags associated with the mini app.
* Used for search and discovery in app stores. * Used for search and discovery in app stores.
* Parsed from comma-separated environment variable.
*/ */
export const APP_TAGS = ['neynar', 'starter-kit', 'demo']; export const APP_TAGS = ['neynar', 'starter-kit', 'demo'];