@payloadcms/figma 0.0.1-alpha.42 → 0.0.1-alpha.43
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/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +19 -4
- package/dist/constants.js.map +1 -1
- package/dist/db-content-api/generated/content-api-types.d.ts +3 -174
- package/dist/db-content-api/generated/content-api-types.d.ts.map +1 -1
- package/dist/db-content-api/generated/content-api-types.js.map +1 -1
- package/dist/db-content-api/index.d.ts.map +1 -1
- package/dist/db-content-api/index.js +56 -12
- package/dist/db-content-api/index.js.map +1 -1
- package/dist/db-content-api/utilities/data/castFieldValue.d.ts.map +1 -1
- package/dist/db-content-api/utilities/data/castFieldValue.js +4 -1
- package/dist/db-content-api/utilities/data/castFieldValue.js.map +1 -1
- package/dist/db-content-api/utilities/data/index.d.ts.map +1 -1
- package/dist/db-content-api/utilities/data/index.js +15 -2
- package/dist/db-content-api/utilities/data/index.js.map +1 -1
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts +11 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts.map +1 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js +55 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js.map +1 -0
- package/dist/db-content-api/utilities/meta/buildMeta.d.ts +22 -0
- package/dist/db-content-api/utilities/meta/buildMeta.d.ts.map +1 -0
- package/dist/db-content-api/utilities/meta/buildMeta.js +30 -0
- package/dist/db-content-api/utilities/meta/buildMeta.js.map +1 -0
- package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts +7 -0
- package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts.map +1 -0
- package/dist/db-content-api/utilities/{buildPathTypes.js → meta/buildPathTypes.js} +3 -9
- package/dist/db-content-api/utilities/meta/buildPathTypes.js.map +1 -0
- package/dist/db-content-api/utilities/meta/index.d.ts +5 -0
- package/dist/db-content-api/utilities/meta/index.d.ts.map +1 -0
- package/dist/db-content-api/utilities/meta/index.js +5 -0
- package/dist/db-content-api/utilities/meta/index.js.map +1 -0
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts.map +1 -1
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.js +3 -3
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.js.map +1 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts.map +1 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.js +8 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.js.map +1 -1
- package/dist/storage-content-api/utilities/getSafeFilename.d.ts +12 -0
- package/dist/storage-content-api/utilities/getSafeFilename.d.ts.map +1 -0
- package/dist/storage-content-api/utilities/getSafeFilename.js +61 -0
- package/dist/storage-content-api/utilities/getSafeFilename.js.map +1 -0
- package/dist/storage-content-api/utilities/index.d.ts +2 -0
- package/dist/storage-content-api/utilities/index.d.ts.map +1 -0
- package/dist/storage-content-api/utilities/index.js +3 -0
- package/dist/storage-content-api/utilities/index.js.map +1 -0
- package/dist/templates/.env.example +11 -0
- package/dist/utils/env-management.d.ts +9 -1
- package/dist/utils/env-management.d.ts.map +1 -1
- package/dist/utils/env-management.js +39 -17
- package/dist/utils/env-management.js.map +1 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +3 -0
- package/dist/utils/project.js.map +1 -1
- package/package.json +2 -2
- package/dist/db-content-api/utilities/buildPathTypes.d.ts +0 -12
- package/dist/db-content-api/utilities/buildPathTypes.d.ts.map +0 -1
- package/dist/db-content-api/utilities/buildPathTypes.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/project.ts"],"sourcesContent":["/**\n * Project detection and scaffolding utilities\n */\n\nimport spawn from 'cross-spawn'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport type { ProjectInfo } from '../types/config.js'\n\nimport { ensureGitignore } from './config.js'\nimport { downloadTemplateFromGitHub } from './download-template.js'\nimport { tryInitRepoAndCommit } from './git.js'\nimport { applyLambdaModifications } from './lambda-config.js'\n\n/**\n * Detect if current directory has a Payload project\n *\n * @param projectPath - Path to check (defaults to cwd)\n * @returns Project information\n */\nexport async function detectPayloadProject(\n projectPath: string = process.cwd(),\n): Promise<ProjectInfo> {\n const packageJsonPath = path.join(projectPath, 'package.json')\n\n try {\n const content = await fs.readFile(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(content)\n\n // Check for payload in dependencies or devDependencies\n const payloadVersion = packageJson.dependencies?.payload || packageJson.devDependencies?.payload\n\n // Detect package manager\n let packageManager: 'npm' | 'pnpm' | 'yarn' = 'npm'\n try {\n await fs.access(path.join(projectPath, 'pnpm-lock.yaml'))\n packageManager = 'pnpm'\n } catch {\n try {\n await fs.access(path.join(projectPath, 'yarn.lock'))\n packageManager = 'yarn'\n } catch {\n packageManager = 'npm'\n }\n }\n\n return {\n hasPayload: !!payloadVersion,\n packageManager,\n path: projectPath,\n payloadVersion: payloadVersion || undefined,\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // No package.json found\n return {\n hasPayload: false,\n path: projectPath,\n }\n }\n throw new Error(`Failed to read package.json: ${(error as Error).message}`)\n }\n}\n\n/**\n * Validate Payload version (must be 3.x)\n *\n * @param version - Version string from package.json\n * @returns True if version is valid\n */\nexport function validatePayloadVersion(version: string): boolean {\n // Extract major version (handle ^3.0.0, ~3.0.0, 3.0.0, etc.)\n const match = version.match(/(\\d+)/)\n if (!match) {\n return false\n }\n\n const majorVersion = parseInt(match[1], 10)\n return majorVersion === 3\n}\n\n/**\n * Fetch the latest version of a package from npm registry\n *\n * @param packageName - Package name to fetch version for\n * @returns Latest version string\n */\nasync function getLatestPackageVersion(packageName: string): Promise<string> {\n const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`)\n\n if (!response.ok) {\n throw new Error(`Failed to fetch version for ${packageName}: ${response.statusText}`)\n }\n\n const data = (await response.json()) as Record<string, unknown>\n\n if (typeof data.latest !== 'string') {\n throw new Error(`Invalid version data received for ${packageName}`)\n }\n\n return data.latest\n}\n\n/**\n * Replace workspace versions in package.json with actual versions\n *\n * @param packageJson - Package JSON object to update\n * @param latestVersion - Latest Payload version to use\n */\nfunction replaceWorkspaceVersions(\n packageJson: Record<string, unknown>,\n latestVersion: string,\n): void {\n const deps = packageJson.dependencies as Record<string, string> | undefined\n if (!deps) {\n return\n }\n\n for (const [key, value] of Object.entries(deps)) {\n // Replace workspace:* or workspace:^ with actual version\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n deps[key] = latestVersion\n }\n // Ensure all payload packages use the same version\n else if (key === 'payload' || key.startsWith('@payloadcms/')) {\n deps[key] = latestVersion\n }\n }\n\n // Also handle devDependencies if present\n const devDeps = packageJson.devDependencies as Record<string, string> | undefined\n if (!devDeps) {\n return\n }\n\n for (const [key, value] of Object.entries(devDeps)) {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n devDeps[key] = latestVersion\n } else if (key === 'payload' || key.startsWith('@payloadcms/')) {\n devDeps[key] = latestVersion\n }\n }\n}\n\n/**\n * Scaffold a new Payload project from GitHub template\n *\n * @param projectPath - Path where to create the project\n * @param projectName - Name for the project\n */\nexport async function scaffoldProject(projectPath: string, projectName: string): Promise<void> {\n // Create project directory if it doesn't exist\n await fs.mkdir(projectPath, { recursive: true })\n\n // Download template from GitHub\n await downloadTemplateFromGitHub(projectPath)\n\n // Apply Lambda modifications BEFORE updating package.json\n // This ensures we don't overwrite version replacements\n await applyLambdaModifications(projectPath)\n\n // Get latest Payload version from npm\n const latestVersion = await getLatestPackageVersion('payload')\n\n // Delete any existing lock files from template (they reference workspace:* versions)\n // This ensures pnpm install creates a fresh lock file with actual versions\n const lockFiles = ['pnpm-lock.yaml', 'yarn.lock', 'package-lock.json']\n for (const lockFile of lockFiles) {\n try {\n await fs.unlink(path.join(projectPath, lockFile))\n } catch {\n // File doesn't exist, ignore\n }\n }\n\n // Update package.json: set name, replace workspace versions\n // This must come AFTER applyLambdaModifications to ensure we have final versions\n const packageJsonPath = path.join(projectPath, 'package.json')\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(packageJsonContent) as Record<string, unknown>\n packageJson.name = projectName\n\n // Replace workspace:* versions with actual versions\n replaceWorkspaceVersions(packageJson, latestVersion)\n\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8')\n\n // Ensure .gitignore has required entries\n // Note: .env file is created by init command with FIGMA_CONTENT_SYSTEM_ID\n await ensureGitignore(projectPath, ['.env', '.env.local', 'lambda.zip'])\n\n // Replace README with Figma-specific version\n const readmeTemplatePath = fileURLToPath(new URL('../templates/README.md', import.meta.url))\n let readmeContent = await fs.readFile(readmeTemplatePath, 'utf-8')\n readmeContent = readmeContent.replace(/\\{\\{PROJECT_NAME\\}\\}/g, projectName)\n await fs.writeFile(path.join(projectPath, 'README.md'), readmeContent, 'utf-8')\n}\n\n/**\n * Initialize git repository after all setup is complete\n *\n * This should be called AFTER installDependencies so that lock files are included\n *\n * @param projectPath - Path to project directory\n */\nexport function initializeGitRepo(projectPath: string): void {\n tryInitRepoAndCommit(projectPath)\n}\n\n/**\n * Install dependencies using the detected package manager\n *\n * @param projectPath - Path to project\n * @param packageManager - Package manager to use\n * @returns Promise that resolves when installation completes\n */\nexport async function installDependencies(\n projectPath: string,\n packageManager: 'npm' | 'pnpm' | 'yarn' = 'npm',\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(packageManager, ['install'], {\n cwd: projectPath,\n stdio: 'pipe',\n })\n\n let stdout = ''\n let stderr = ''\n\n // Capture stdout\n child.stdout?.on('data', (data) => {\n stdout += data.toString()\n })\n\n // Capture stderr\n child.stderr?.on('data', (data) => {\n stderr += data.toString()\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve()\n } else {\n // Show captured output on error\n const output = [stdout, stderr].filter(Boolean).join('\\n\\n')\n const errorMessage = output\n ? `${packageManager} install failed with code ${code}\\n\\nOutput:\\n${output}`\n : `${packageManager} install failed with code ${code}`\n reject(new Error(errorMessage))\n }\n })\n\n child.on('error', (error) => {\n reject(new Error(`Failed to run ${packageManager} install: ${error.message}`))\n })\n })\n}\n\n/**\n * Check if required dependencies are installed\n *\n * @param projectPath - Path to project\n * @returns True if all required dependencies exist\n */\nexport async function hasRequiredDependencies(projectPath: string): Promise<boolean> {\n const packageJsonPath = path.join(projectPath, 'package.json')\n\n try {\n const content = await fs.readFile(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(content)\n\n // Check for Payload and Next.js\n const hasPayload = packageJson.dependencies?.payload || packageJson.devDependencies?.payload\n const hasNext = packageJson.dependencies?.next || packageJson.devDependencies?.next\n\n return !!(hasPayload && hasNext)\n } catch {\n return false\n }\n}\n\n/**\n * Check if current directory is a project directory\n *\n * A project directory has package.json\n *\n * @param projectPath - Path to check (defaults to cwd)\n * @returns True if in project directory\n */\nexport async function isInProjectDirectory(projectPath: string = process.cwd()): Promise<boolean> {\n try {\n // Check for package.json\n await fs.access(path.join(projectPath, 'package.json'))\n return true\n } catch {\n return false\n }\n}\n"],"names":["spawn","fs","path","fileURLToPath","ensureGitignore","downloadTemplateFromGitHub","tryInitRepoAndCommit","applyLambdaModifications","detectPayloadProject","projectPath","process","cwd","packageJsonPath","join","content","readFile","packageJson","JSON","parse","payloadVersion","dependencies","payload","devDependencies","packageManager","access","hasPayload","undefined","error","code","Error","message","validatePayloadVersion","version","match","majorVersion","parseInt","getLatestPackageVersion","packageName","response","fetch","ok","statusText","data","json","latest","replaceWorkspaceVersions","latestVersion","deps","key","value","Object","entries","startsWith","devDeps","scaffoldProject","projectName","mkdir","recursive","lockFiles","lockFile","unlink","packageJsonContent","name","writeFile","stringify","readmeTemplatePath","URL","url","readmeContent","replace","initializeGitRepo","installDependencies","Promise","resolve","reject","child","stdio","stdout","stderr","on","toString","output","filter","Boolean","errorMessage","hasRequiredDependencies","hasNext","next","isInProjectDirectory"],"mappings":"AAAA;;CAEC,GAED,OAAOA,WAAW,cAAa;AAC/B,OAAOC,QAAQ,cAAa;AAC5B,OAAOC,UAAU,OAAM;AACvB,SAASC,aAAa,QAAQ,MAAK;AAInC,SAASC,eAAe,QAAQ,cAAa;AAC7C,SAASC,0BAA0B,QAAQ,yBAAwB;AACnE,SAASC,oBAAoB,QAAQ,WAAU;AAC/C,SAASC,wBAAwB,QAAQ,qBAAoB;AAE7D;;;;;CAKC,GACD,OAAO,eAAeC,qBACpBC,cAAsBC,QAAQC,GAAG,EAAE;IAEnC,MAAMC,kBAAkBV,KAAKW,IAAI,CAACJ,aAAa;IAE/C,IAAI;QACF,MAAMK,UAAU,MAAMb,GAAGc,QAAQ,CAACH,iBAAiB;QACnD,MAAMI,cAAcC,KAAKC,KAAK,CAACJ;QAE/B,uDAAuD;QACvD,MAAMK,iBAAiBH,YAAYI,YAAY,EAAEC,WAAWL,YAAYM,eAAe,EAAED;QAEzF,yBAAyB;QACzB,IAAIE,iBAA0C;QAC9C,IAAI;YACF,MAAMtB,GAAGuB,MAAM,CAACtB,KAAKW,IAAI,CAACJ,aAAa;YACvCc,iBAAiB;QACnB,EAAE,OAAM;YACN,IAAI;gBACF,MAAMtB,GAAGuB,MAAM,CAACtB,KAAKW,IAAI,CAACJ,aAAa;gBACvCc,iBAAiB;YACnB,EAAE,OAAM;gBACNA,iBAAiB;YACnB;QACF;QAEA,OAAO;YACLE,YAAY,CAAC,CAACN;YACdI;YACArB,MAAMO;YACNU,gBAAgBA,kBAAkBO;QACpC;IACF,EAAE,OAAOC,OAAO;QACd,IAAI,AAACA,MAAgCC,IAAI,KAAK,UAAU;YACtD,wBAAwB;YACxB,OAAO;gBACLH,YAAY;gBACZvB,MAAMO;YACR;QACF;QACA,MAAM,IAAIoB,MAAM,CAAC,6BAA6B,EAAE,AAACF,MAAgBG,OAAO,EAAE;IAC5E;AACF;AAEA;;;;;CAKC,GACD,OAAO,SAASC,uBAAuBC,OAAe;IACpD,6DAA6D;IAC7D,MAAMC,QAAQD,QAAQC,KAAK,CAAC;IAC5B,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IAEA,MAAMC,eAAeC,SAASF,KAAK,CAAC,EAAE,EAAE;IACxC,OAAOC,iBAAiB;AAC1B;AAEA;;;;;CAKC,GACD,eAAeE,wBAAwBC,WAAmB;IACxD,MAAMC,WAAW,MAAMC,MAAM,CAAC,qCAAqC,EAAEF,YAAY,UAAU,CAAC;IAE5F,IAAI,CAACC,SAASE,EAAE,EAAE;QAChB,MAAM,IAAIX,MAAM,CAAC,4BAA4B,EAAEQ,YAAY,EAAE,EAAEC,SAASG,UAAU,EAAE;IACtF;IAEA,MAAMC,OAAQ,MAAMJ,SAASK,IAAI;IAEjC,IAAI,OAAOD,KAAKE,MAAM,KAAK,UAAU;QACnC,MAAM,IAAIf,MAAM,CAAC,kCAAkC,EAAEQ,aAAa;IACpE;IAEA,OAAOK,KAAKE,MAAM;AACpB;AAEA;;;;;CAKC,GACD,SAASC,yBACP7B,WAAoC,EACpC8B,aAAqB;IAErB,MAAMC,OAAO/B,YAAYI,YAAY;IACrC,IAAI,CAAC2B,MAAM;QACT;IACF;IAEA,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACJ,MAAO;QAC/C,yDAAyD;QACzD,IAAI,OAAOE,UAAU,YAAYA,MAAMG,UAAU,CAAC,eAAe;YAC/DL,IAAI,CAACC,IAAI,GAAGF;QACd,OAEK,IAAIE,QAAQ,aAAaA,IAAII,UAAU,CAAC,iBAAiB;YAC5DL,IAAI,CAACC,IAAI,GAAGF;QACd;IACF;IAEA,yCAAyC;IACzC,MAAMO,UAAUrC,YAAYM,eAAe;IAC3C,IAAI,CAAC+B,SAAS;QACZ;IACF;IAEA,KAAK,MAAM,CAACL,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACE,SAAU;QAClD,IAAI,OAAOJ,UAAU,YAAYA,MAAMG,UAAU,CAAC,eAAe;YAC/DC,OAAO,CAACL,IAAI,GAAGF;QACjB,OAAO,IAAIE,QAAQ,aAAaA,IAAII,UAAU,CAAC,iBAAiB;YAC9DC,OAAO,CAACL,IAAI,GAAGF;QACjB;IACF;AACF;AAEA;;;;;CAKC,GACD,OAAO,eAAeQ,gBAAgB7C,WAAmB,EAAE8C,WAAmB;IAC5E,+CAA+C;IAC/C,MAAMtD,GAAGuD,KAAK,CAAC/C,aAAa;QAAEgD,WAAW;IAAK;IAE9C,gCAAgC;IAChC,MAAMpD,2BAA2BI;IAEjC,0DAA0D;IAC1D,uDAAuD;IACvD,MAAMF,yBAAyBE;IAE/B,sCAAsC;IACtC,MAAMqC,gBAAgB,MAAMV,wBAAwB;IAEpD,qFAAqF;IACrF,2EAA2E;IAC3E,MAAMsB,YAAY;QAAC;QAAkB;QAAa;KAAoB;IACtE,KAAK,MAAMC,YAAYD,UAAW;QAChC,IAAI;YACF,MAAMzD,GAAG2D,MAAM,CAAC1D,KAAKW,IAAI,CAACJ,aAAakD;QACzC,EAAE,OAAM;QACN,6BAA6B;QAC/B;IACF;IAEA,4DAA4D;IAC5D,iFAAiF;IACjF,MAAM/C,kBAAkBV,KAAKW,IAAI,CAACJ,aAAa;IAC/C,MAAMoD,qBAAqB,MAAM5D,GAAGc,QAAQ,CAACH,iBAAiB;IAC9D,MAAMI,cAAcC,KAAKC,KAAK,CAAC2C;IAC/B7C,YAAY8C,IAAI,GAAGP;IAEnB,oDAAoD;IACpDV,yBAAyB7B,aAAa8B;IAEtC,MAAM7C,GAAG8D,SAAS,CAACnD,iBAAiBK,KAAK+C,SAAS,CAAChD,aAAa,MAAM,KAAK,MAAM;IAEjF,yCAAyC;IACzC,0EAA0E;IAC1E,MAAMZ,gBAAgBK,aAAa;QAAC;QAAQ;QAAc;KAAa;IAEvE,6CAA6C;IAC7C,MAAMwD,qBAAqB9D,cAAc,IAAI+D,IAAI,0BAA0B,YAAYC,GAAG;IAC1F,IAAIC,gBAAgB,MAAMnE,GAAGc,QAAQ,CAACkD,oBAAoB;IAC1DG,gBAAgBA,cAAcC,OAAO,CAAC,yBAAyBd;IAC/D,MAAMtD,GAAG8D,SAAS,CAAC7D,KAAKW,IAAI,CAACJ,aAAa,cAAc2D,eAAe;AACzE;AAEA;;;;;;CAMC,GACD,OAAO,SAASE,kBAAkB7D,WAAmB;IACnDH,qBAAqBG;AACvB;AAEA;;;;;;CAMC,GACD,OAAO,eAAe8D,oBACpB9D,WAAmB,EACnBc,iBAA0C,KAAK;IAE/C,OAAO,IAAIiD,QAAQ,CAACC,SAASC;QAC3B,MAAMC,QAAQ3E,MAAMuB,gBAAgB;YAAC;SAAU,EAAE;YAC/CZ,KAAKF;YACLmE,OAAO;QACT;QAEA,IAAIC,SAAS;QACb,IAAIC,SAAS;QAEb,iBAAiB;QACjBH,MAAME,MAAM,EAAEE,GAAG,QAAQ,CAACrC;YACxBmC,UAAUnC,KAAKsC,QAAQ;QACzB;QAEA,iBAAiB;QACjBL,MAAMG,MAAM,EAAEC,GAAG,QAAQ,CAACrC;YACxBoC,UAAUpC,KAAKsC,QAAQ;QACzB;QAEAL,MAAMI,EAAE,CAAC,SAAS,CAACnD;YACjB,IAAIA,SAAS,GAAG;gBACd6C;YACF,OAAO;gBACL,gCAAgC;gBAChC,MAAMQ,SAAS;oBAACJ;oBAAQC;iBAAO,CAACI,MAAM,CAACC,SAAStE,IAAI,CAAC;gBACrD,MAAMuE,eAAeH,SACjB,GAAG1D,eAAe,0BAA0B,EAAEK,KAAK,aAAa,EAAEqD,QAAQ,GAC1E,GAAG1D,eAAe,0BAA0B,EAAEK,MAAM;gBACxD8C,OAAO,IAAI7C,MAAMuD;YACnB;QACF;QAEAT,MAAMI,EAAE,CAAC,SAAS,CAACpD;YACjB+C,OAAO,IAAI7C,MAAM,CAAC,cAAc,EAAEN,eAAe,UAAU,EAAEI,MAAMG,OAAO,EAAE;QAC9E;IACF;AACF;AAEA;;;;;CAKC,GACD,OAAO,eAAeuD,wBAAwB5E,WAAmB;IAC/D,MAAMG,kBAAkBV,KAAKW,IAAI,CAACJ,aAAa;IAE/C,IAAI;QACF,MAAMK,UAAU,MAAMb,GAAGc,QAAQ,CAACH,iBAAiB;QACnD,MAAMI,cAAcC,KAAKC,KAAK,CAACJ;QAE/B,gCAAgC;QAChC,MAAMW,aAAaT,YAAYI,YAAY,EAAEC,WAAWL,YAAYM,eAAe,EAAED;QACrF,MAAMiE,UAAUtE,YAAYI,YAAY,EAAEmE,QAAQvE,YAAYM,eAAe,EAAEiE;QAE/E,OAAO,CAAC,CAAE9D,CAAAA,cAAc6D,OAAM;IAChC,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA;;;;;;;CAOC,GACD,OAAO,eAAeE,qBAAqB/E,cAAsBC,QAAQC,GAAG,EAAE;IAC5E,IAAI;QACF,yBAAyB;QACzB,MAAMV,GAAGuB,MAAM,CAACtB,KAAKW,IAAI,CAACJ,aAAa;QACvC,OAAO;IACT,EAAE,OAAM;QACN,OAAO;IACT;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/project.ts"],"sourcesContent":["/**\n * Project detection and scaffolding utilities\n */\n\nimport spawn from 'cross-spawn'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport type { ProjectInfo } from '../types/config.js'\n\nimport { ensureGitignore } from './config.js'\nimport { downloadTemplateFromGitHub } from './download-template.js'\nimport { tryInitRepoAndCommit } from './git.js'\nimport { applyLambdaModifications } from './lambda-config.js'\n\n/**\n * Detect if current directory has a Payload project\n *\n * @param projectPath - Path to check (defaults to cwd)\n * @returns Project information\n */\nexport async function detectPayloadProject(\n projectPath: string = process.cwd(),\n): Promise<ProjectInfo> {\n const packageJsonPath = path.join(projectPath, 'package.json')\n\n try {\n const content = await fs.readFile(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(content)\n\n // Check for payload in dependencies or devDependencies\n const payloadVersion = packageJson.dependencies?.payload || packageJson.devDependencies?.payload\n\n // Detect package manager\n let packageManager: 'npm' | 'pnpm' | 'yarn' = 'npm'\n try {\n await fs.access(path.join(projectPath, 'pnpm-lock.yaml'))\n packageManager = 'pnpm'\n } catch {\n try {\n await fs.access(path.join(projectPath, 'yarn.lock'))\n packageManager = 'yarn'\n } catch {\n packageManager = 'npm'\n }\n }\n\n return {\n hasPayload: !!payloadVersion,\n packageManager,\n path: projectPath,\n payloadVersion: payloadVersion || undefined,\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n // No package.json found\n return {\n hasPayload: false,\n path: projectPath,\n }\n }\n throw new Error(`Failed to read package.json: ${(error as Error).message}`)\n }\n}\n\n/**\n * Validate Payload version (must be 3.x)\n *\n * @param version - Version string from package.json\n * @returns True if version is valid\n */\nexport function validatePayloadVersion(version: string): boolean {\n // Extract major version (handle ^3.0.0, ~3.0.0, 3.0.0, etc.)\n const match = version.match(/(\\d+)/)\n if (!match) {\n return false\n }\n\n const majorVersion = parseInt(match[1], 10)\n return majorVersion === 3\n}\n\n/**\n * Fetch the latest version of a package from npm registry\n *\n * @param packageName - Package name to fetch version for\n * @returns Latest version string\n */\nasync function getLatestPackageVersion(packageName: string): Promise<string> {\n const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`)\n\n if (!response.ok) {\n throw new Error(`Failed to fetch version for ${packageName}: ${response.statusText}`)\n }\n\n const data = (await response.json()) as Record<string, unknown>\n\n if (typeof data.latest !== 'string') {\n throw new Error(`Invalid version data received for ${packageName}`)\n }\n\n return data.latest\n}\n\n/**\n * Replace workspace versions in package.json with actual versions\n *\n * @param packageJson - Package JSON object to update\n * @param latestVersion - Latest Payload version to use\n */\nfunction replaceWorkspaceVersions(\n packageJson: Record<string, unknown>,\n latestVersion: string,\n): void {\n const deps = packageJson.dependencies as Record<string, string> | undefined\n if (!deps) {\n return\n }\n\n for (const [key, value] of Object.entries(deps)) {\n // Replace workspace:* or workspace:^ with actual version\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n deps[key] = latestVersion\n }\n // Ensure all payload packages use the same version\n else if (key === 'payload' || key.startsWith('@payloadcms/')) {\n deps[key] = latestVersion\n }\n }\n\n // Also handle devDependencies if present\n const devDeps = packageJson.devDependencies as Record<string, string> | undefined\n if (!devDeps) {\n return\n }\n\n for (const [key, value] of Object.entries(devDeps)) {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n devDeps[key] = latestVersion\n } else if (key === 'payload' || key.startsWith('@payloadcms/')) {\n devDeps[key] = latestVersion\n }\n }\n}\n\n/**\n * Scaffold a new Payload project from GitHub template\n *\n * @param projectPath - Path where to create the project\n * @param projectName - Name for the project\n */\nexport async function scaffoldProject(projectPath: string, projectName: string): Promise<void> {\n // Create project directory if it doesn't exist\n await fs.mkdir(projectPath, { recursive: true })\n\n // Download template from GitHub\n await downloadTemplateFromGitHub(projectPath)\n\n // Apply Lambda modifications BEFORE updating package.json\n // This ensures we don't overwrite version replacements\n await applyLambdaModifications(projectPath)\n\n // Get latest Payload version from npm\n const latestVersion = await getLatestPackageVersion('payload')\n\n // Delete any existing lock files from template (they reference workspace:* versions)\n // This ensures pnpm install creates a fresh lock file with actual versions\n const lockFiles = ['pnpm-lock.yaml', 'yarn.lock', 'package-lock.json']\n for (const lockFile of lockFiles) {\n try {\n await fs.unlink(path.join(projectPath, lockFile))\n } catch {\n // File doesn't exist, ignore\n }\n }\n\n // Update package.json: set name, replace workspace versions\n // This must come AFTER applyLambdaModifications to ensure we have final versions\n const packageJsonPath = path.join(projectPath, 'package.json')\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(packageJsonContent) as Record<string, unknown>\n packageJson.name = projectName\n\n // Replace workspace:* versions with actual versions\n replaceWorkspaceVersions(packageJson, latestVersion)\n\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8')\n\n // Ensure .gitignore has required entries\n // Note: .env file is created by init command with FIGMA_CONTENT_SYSTEM_ID\n await ensureGitignore(projectPath, ['.env', '.env.local', 'lambda.zip'])\n\n // Replace README with Figma-specific version\n const readmeTemplatePath = fileURLToPath(new URL('../templates/README.md', import.meta.url))\n let readmeContent = await fs.readFile(readmeTemplatePath, 'utf-8')\n readmeContent = readmeContent.replace(/\\{\\{PROJECT_NAME\\}\\}/g, projectName)\n await fs.writeFile(path.join(projectPath, 'README.md'), readmeContent, 'utf-8')\n\n // Copy .env.example template\n const envExampleTemplatePath = fileURLToPath(\n new URL('../templates/.env.example', import.meta.url),\n )\n await fs.copyFile(envExampleTemplatePath, path.join(projectPath, '.env.example'))\n}\n\n/**\n * Initialize git repository after all setup is complete\n *\n * This should be called AFTER installDependencies so that lock files are included\n *\n * @param projectPath - Path to project directory\n */\nexport function initializeGitRepo(projectPath: string): void {\n tryInitRepoAndCommit(projectPath)\n}\n\n/**\n * Install dependencies using the detected package manager\n *\n * @param projectPath - Path to project\n * @param packageManager - Package manager to use\n * @returns Promise that resolves when installation completes\n */\nexport async function installDependencies(\n projectPath: string,\n packageManager: 'npm' | 'pnpm' | 'yarn' = 'npm',\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(packageManager, ['install'], {\n cwd: projectPath,\n stdio: 'pipe',\n })\n\n let stdout = ''\n let stderr = ''\n\n // Capture stdout\n child.stdout?.on('data', (data) => {\n stdout += data.toString()\n })\n\n // Capture stderr\n child.stderr?.on('data', (data) => {\n stderr += data.toString()\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve()\n } else {\n // Show captured output on error\n const output = [stdout, stderr].filter(Boolean).join('\\n\\n')\n const errorMessage = output\n ? `${packageManager} install failed with code ${code}\\n\\nOutput:\\n${output}`\n : `${packageManager} install failed with code ${code}`\n reject(new Error(errorMessage))\n }\n })\n\n child.on('error', (error) => {\n reject(new Error(`Failed to run ${packageManager} install: ${error.message}`))\n })\n })\n}\n\n/**\n * Check if required dependencies are installed\n *\n * @param projectPath - Path to project\n * @returns True if all required dependencies exist\n */\nexport async function hasRequiredDependencies(projectPath: string): Promise<boolean> {\n const packageJsonPath = path.join(projectPath, 'package.json')\n\n try {\n const content = await fs.readFile(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(content)\n\n // Check for Payload and Next.js\n const hasPayload = packageJson.dependencies?.payload || packageJson.devDependencies?.payload\n const hasNext = packageJson.dependencies?.next || packageJson.devDependencies?.next\n\n return !!(hasPayload && hasNext)\n } catch {\n return false\n }\n}\n\n/**\n * Check if current directory is a project directory\n *\n * A project directory has package.json\n *\n * @param projectPath - Path to check (defaults to cwd)\n * @returns True if in project directory\n */\nexport async function isInProjectDirectory(projectPath: string = process.cwd()): Promise<boolean> {\n try {\n // Check for package.json\n await fs.access(path.join(projectPath, 'package.json'))\n return true\n } catch {\n return false\n }\n}\n"],"names":["spawn","fs","path","fileURLToPath","ensureGitignore","downloadTemplateFromGitHub","tryInitRepoAndCommit","applyLambdaModifications","detectPayloadProject","projectPath","process","cwd","packageJsonPath","join","content","readFile","packageJson","JSON","parse","payloadVersion","dependencies","payload","devDependencies","packageManager","access","hasPayload","undefined","error","code","Error","message","validatePayloadVersion","version","match","majorVersion","parseInt","getLatestPackageVersion","packageName","response","fetch","ok","statusText","data","json","latest","replaceWorkspaceVersions","latestVersion","deps","key","value","Object","entries","startsWith","devDeps","scaffoldProject","projectName","mkdir","recursive","lockFiles","lockFile","unlink","packageJsonContent","name","writeFile","stringify","readmeTemplatePath","URL","url","readmeContent","replace","envExampleTemplatePath","copyFile","initializeGitRepo","installDependencies","Promise","resolve","reject","child","stdio","stdout","stderr","on","toString","output","filter","Boolean","errorMessage","hasRequiredDependencies","hasNext","next","isInProjectDirectory"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/figma",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.43",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|
|
76
76
|
"build:types": "tsc --project tsconfig.build.json",
|
|
77
77
|
"clean": "rimraf -g \"{dist,*.tsbuildinfo,package}\"",
|
|
78
|
-
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,md}\" dist/",
|
|
78
|
+
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,md}\" \"src/**/.env.example\" dist/",
|
|
79
79
|
"debug:clear-tokens": "tsx scripts/clear-tokens.ts",
|
|
80
80
|
"debug:expire-token": "tsx scripts/expire-token.ts",
|
|
81
81
|
"debug:get-project-token": "tsx scripts/get-project-token.ts",
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Payload, Where } from 'payload';
|
|
2
|
-
/**
|
|
3
|
-
* Builds metadata for Content API request with pathTypes information
|
|
4
|
-
* Returns an object ready to spread into the request body
|
|
5
|
-
* This tells the Content API which paths are arrays/objects for proper query generation
|
|
6
|
-
*/
|
|
7
|
-
export declare function buildPathTypes(payload: Payload, collectionSlug: string, where: undefined | Where): {
|
|
8
|
-
meta?: {
|
|
9
|
-
pathTypes: Record<string, 'array'>;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=buildPathTypes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildPathTypes.d.ts","sourceRoot":"","sources":["../../../src/db-content-api/utilities/buildPathTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AA8JpD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,SAAS,GAAG,KAAK,GACvB;IAAE,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,CA2BnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/db-content-api/utilities/buildPathTypes.ts"],"sourcesContent":["import type { Field, Payload, Where } from 'payload'\n\n/**\n * Extracts all field paths from a where clause recursively\n */\nfunction extractPathsFromWhere(where: Where, paths: Set<string> = new Set()): Set<string> {\n if (!where || typeof where !== 'object') {\n return paths\n }\n\n // Handle 'and' operator\n if ('and' in where && Array.isArray(where.and)) {\n for (const clause of where.and) {\n extractPathsFromWhere(clause, paths)\n }\n return paths\n }\n\n // Handle 'or' operator\n if ('or' in where && Array.isArray(where.or)) {\n for (const clause of where.or) {\n extractPathsFromWhere(clause, paths)\n }\n return paths\n }\n\n // Handle regular conditions - keys are field paths\n for (const key in where) {\n if (key === 'and' || key === 'or') {\n continue\n }\n\n // Add the path\n paths.add(key)\n\n // Check if the value is a nested where clause (for relationships)\n const value = where[key]\n if (value && typeof value === 'object' && !('equals' in value) && !('in' in value)) {\n // Might be a nested where, recurse\n extractPathsFromWhere(value as Where, paths)\n }\n }\n\n return paths\n}\n\n/**\n * Determines the type of a field based on its configuration\n */\nfunction getFieldType(field: Field): 'array' | null {\n // Array field\n if (field.type === 'array') {\n return 'array'\n }\n\n // Blocks field (array of objects)\n if (field.type === 'blocks') {\n return 'array'\n }\n\n // Relationship field with hasMany (array)\n if (field.type === 'relationship' && 'hasMany' in field && field.hasMany) {\n return 'array'\n }\n\n // Select field with hasMany (array)\n if (field.type === 'select' && 'hasMany' in field && field.hasMany) {\n return 'array'\n }\n\n // Upload field with hasMany (array)\n if (field.type === 'upload' && 'hasMany' in field && field.hasMany) {\n return 'array'\n }\n\n // Objects (group, collapsible, row, tabs) don't need traversal\n return null\n}\n\n/**\n * Finds a field in the collection schema by its path\n * Supports nested paths like \"access.read.users\"\n */\nfunction findFieldByPath(\n payload: Payload,\n collectionSlug: string,\n path: string,\n): Field | undefined {\n const collectionConfig = payload.config.collections.find((c) => c.slug === collectionSlug)\n if (!collectionConfig) {\n return undefined\n }\n\n const pathSegments = path.split('.')\n\n // Walk through the path segments to find the field\n let currentFields = collectionConfig.fields\n let currentField: Field | undefined = undefined\n\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i]\n\n // First try to find a direct match\n currentField = currentFields.find((f) => 'name' in f && f.name === segment)\n\n // If not found, check if any unnamed container fields (collapsible, row) contain it\n if (!currentField) {\n for (const field of currentFields) {\n if (!('name' in field) || !field.name) {\n // This is an unnamed field, check its contents\n if (\n ('fields' in field && field.type === 'collapsible') ||\n ('fields' in field && field.type === 'row')\n ) {\n currentField = field.fields.find((f) => 'name' in f && f.name === segment)\n if (currentField) {\n break\n }\n } else if ('tabs' in field && field.type === 'tabs') {\n // Check all tabs\n for (const tab of field.tabs) {\n currentField = tab.fields.find((f) => 'name' in f && f.name === segment)\n if (currentField) {\n break\n }\n }\n if (currentField) {\n break\n }\n }\n }\n }\n }\n\n if (!currentField) {\n return undefined\n }\n\n // If we're not at the end, get nested fields\n if (i < pathSegments.length - 1) {\n if (currentField.type === 'group' && 'fields' in currentField) {\n currentFields = currentField.fields\n } else if (currentField.type === 'array' && 'fields' in currentField) {\n currentFields = currentField.fields\n } else if (currentField.type === 'blocks' && 'blocks' in currentField) {\n // For blocks, we can't determine the exact field without knowing the block type\n // Return the blocks field itself\n return currentField\n } else {\n // Field doesn't have nested fields, can't continue\n return undefined\n }\n }\n }\n\n return currentField\n}\n\n/**\n * Builds metadata for Content API request with pathTypes information\n * Returns an object ready to spread into the request body\n * This tells the Content API which paths are arrays/objects for proper query generation\n */\nexport function buildPathTypes(\n payload: Payload,\n collectionSlug: string,\n where: undefined | Where,\n): { meta?: { pathTypes: Record<string, 'array'> } } {\n if (!where) {\n return {}\n }\n\n const pathTypes: Record<string, 'array'> = {}\n const paths = extractPathsFromWhere(where)\n\n for (const path of paths) {\n // For each path, we need to check all segments to see if any intermediate ones are arrays/objects\n const segments = path.split('.')\n\n for (let i = 0; i < segments.length; i++) {\n const partialPath = segments.slice(0, i + 1).join('.')\n const field = findFieldByPath(payload, collectionSlug, partialPath)\n\n if (field) {\n const fieldType = getFieldType(field)\n if (fieldType === 'array') {\n pathTypes[partialPath] = fieldType\n }\n }\n }\n }\n\n // Only include meta if there are pathTypes\n return Object.keys(pathTypes).length > 0 ? { meta: { pathTypes } } : {}\n}\n"],"names":["extractPathsFromWhere","where","paths","Set","Array","isArray","and","clause","or","key","add","value","getFieldType","field","type","hasMany","findFieldByPath","payload","collectionSlug","path","collectionConfig","config","collections","find","c","slug","undefined","pathSegments","split","currentFields","fields","currentField","i","length","segment","f","name","tab","tabs","buildPathTypes","pathTypes","segments","partialPath","slice","join","fieldType","Object","keys","meta"],"mappings":"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"}
|