mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-22 07:57:55 +00:00
refactor: Move pezkuwi-sdk-ui to separate repo, add postinstall for mobile
- Remove pezkuwi-sdk-ui from pwap (now at /home/mamostehp/pezkuwi-sdk-ui) - Add scripts/fix-pezkuwi-packages.cjs for @pezkuwi package path fixes - Add postinstall hook to mobile package.json - Update metro.config.cjs documentation - Update backend @pezkuwi/api version to 16.5.11 pezkuwi-sdk-ui is now a standalone repo at: https://github.com/pezkuwichain/pezkuwi-sdk-ui Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Postinstall script to fix @pezkuwi packages with incorrect main field paths
|
||||
*
|
||||
* Problem: Some @pezkuwi packages have package.json paths that don't match
|
||||
* their actual file structure. This causes Metro bundler to fail.
|
||||
*
|
||||
* This script automatically detects and fixes broken paths after npm install.
|
||||
*
|
||||
* Examples of fixes:
|
||||
* - main: "./cjs/build/cjs/index.js" → "./cjs/index.js" (when ./cjs/index.js exists)
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// Find all possible node_modules locations
|
||||
function findNodeModulesPaths() {
|
||||
const paths = [];
|
||||
let currentDir = __dirname;
|
||||
|
||||
// Walk up the directory tree to find all node_modules
|
||||
while (currentDir !== path.dirname(currentDir)) {
|
||||
const nodeModulesPath = path.join(currentDir, 'node_modules');
|
||||
if (fs.existsSync(nodeModulesPath)) {
|
||||
paths.push(nodeModulesPath);
|
||||
}
|
||||
currentDir = path.dirname(currentDir);
|
||||
}
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
// Find all @pezkuwi packages in a node_modules directory
|
||||
function findPezkuwiPackages(nodeModulesPath) {
|
||||
const pezkuwiDir = path.join(nodeModulesPath, '@pezkuwi');
|
||||
if (!fs.existsSync(pezkuwiDir)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const packages = [];
|
||||
try {
|
||||
const entries = fs.readdirSync(pezkuwiDir, { withFileTypes: true });
|
||||
for (const entry of entries) {
|
||||
if (entry.isDirectory()) {
|
||||
const packageDir = path.join(pezkuwiDir, entry.name);
|
||||
const packageJsonPath = path.join(packageDir, 'package.json');
|
||||
if (fs.existsSync(packageJsonPath)) {
|
||||
packages.push({ dir: packageDir, packageJson: packageJsonPath });
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn(`Warning: Could not read ${pezkuwiDir}: ${err.message}`);
|
||||
}
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
// Check if a file path is valid (exists)
|
||||
function fileExists(packageDir, relativePath) {
|
||||
if (!relativePath) return false;
|
||||
const fullPath = path.join(packageDir, relativePath);
|
||||
return fs.existsSync(fullPath);
|
||||
}
|
||||
|
||||
// Try to find the correct path for a broken reference
|
||||
function findCorrectPath(packageDir, brokenPath) {
|
||||
if (!brokenPath) return null;
|
||||
|
||||
// Pattern: "./cjs/build/cjs/index.js" should be "./cjs/index.js"
|
||||
if (brokenPath.includes('/build/cjs/')) {
|
||||
const fixedPath = brokenPath.replace('/build/cjs/', '/');
|
||||
if (fileExists(packageDir, fixedPath)) {
|
||||
return fixedPath;
|
||||
}
|
||||
}
|
||||
|
||||
// Pattern: "./build/cjs/index.js" might need to be "./cjs/index.js"
|
||||
// But only if ./build/cjs/index.js doesn't exist
|
||||
if (brokenPath.startsWith('./build/cjs/') && !fileExists(packageDir, brokenPath)) {
|
||||
const fixedPath = brokenPath.replace('./build/cjs/', './cjs/');
|
||||
if (fileExists(packageDir, fixedPath)) {
|
||||
return fixedPath;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Fix a single package.json file
|
||||
function fixPackageJson({ dir, packageJson }) {
|
||||
let content;
|
||||
try {
|
||||
content = fs.readFileSync(packageJson, 'utf8');
|
||||
} catch (err) {
|
||||
console.warn(`Warning: Could not read ${packageJson}: ${err.message}`);
|
||||
return { fixed: false, details: [] };
|
||||
}
|
||||
|
||||
let pkg;
|
||||
try {
|
||||
pkg = JSON.parse(content);
|
||||
} catch (err) {
|
||||
console.warn(`Warning: Could not parse ${packageJson}: ${err.message}`);
|
||||
return { fixed: false, details: [] };
|
||||
}
|
||||
|
||||
const fixes = [];
|
||||
|
||||
// Check main field
|
||||
if (pkg.main && !fileExists(dir, pkg.main)) {
|
||||
const correctPath = findCorrectPath(dir, pkg.main);
|
||||
if (correctPath) {
|
||||
fixes.push({ field: 'main', from: pkg.main, to: correctPath });
|
||||
pkg.main = correctPath;
|
||||
}
|
||||
}
|
||||
|
||||
// Check module field
|
||||
if (pkg.module && !fileExists(dir, pkg.module)) {
|
||||
const correctPath = findCorrectPath(dir, pkg.module);
|
||||
if (correctPath) {
|
||||
fixes.push({ field: 'module', from: pkg.module, to: correctPath });
|
||||
pkg.module = correctPath;
|
||||
}
|
||||
}
|
||||
|
||||
// Check types field
|
||||
if (pkg.types && !fileExists(dir, pkg.types)) {
|
||||
// For types, try the same patterns
|
||||
let correctPath = findCorrectPath(dir, pkg.types);
|
||||
// Also try replacing .d.ts patterns
|
||||
if (!correctPath && pkg.types.includes('/build/cjs/')) {
|
||||
const fixedPath = pkg.types.replace('/build/cjs/', '/');
|
||||
if (fileExists(dir, fixedPath)) {
|
||||
correctPath = fixedPath;
|
||||
}
|
||||
}
|
||||
if (correctPath) {
|
||||
fixes.push({ field: 'types', from: pkg.types, to: correctPath });
|
||||
pkg.types = correctPath;
|
||||
}
|
||||
}
|
||||
|
||||
if (fixes.length > 0) {
|
||||
try {
|
||||
fs.writeFileSync(packageJson, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
|
||||
return { fixed: true, details: fixes };
|
||||
} catch (err) {
|
||||
console.error(`Error: Could not write ${packageJson}: ${err.message}`);
|
||||
return { fixed: false, details: [] };
|
||||
}
|
||||
}
|
||||
|
||||
return { fixed: false, details: [] };
|
||||
}
|
||||
|
||||
// Main function
|
||||
function main() {
|
||||
console.log('--- @pezkuwi Package Path Fixer ---');
|
||||
|
||||
const nodeModulesPaths = findNodeModulesPaths();
|
||||
if (nodeModulesPaths.length === 0) {
|
||||
console.log('No node_modules directories found.');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Found ${nodeModulesPaths.length} node_modules location(s)`);
|
||||
|
||||
let totalFixed = 0;
|
||||
let totalChecked = 0;
|
||||
|
||||
for (const nodeModulesPath of nodeModulesPaths) {
|
||||
const packages = findPezkuwiPackages(nodeModulesPath);
|
||||
|
||||
for (const pkg of packages) {
|
||||
totalChecked++;
|
||||
const result = fixPackageJson(pkg);
|
||||
if (result.fixed) {
|
||||
const relativePath = path.relative(process.cwd(), pkg.packageJson);
|
||||
console.log(` Fixed: ${relativePath}`);
|
||||
for (const detail of result.details) {
|
||||
console.log(` ${detail.field}: ${detail.from} → ${detail.to}`);
|
||||
}
|
||||
totalFixed++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\nChecked ${totalChecked} @pezkuwi packages, fixed ${totalFixed}`);
|
||||
console.log('--- Done ---\n');
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user