mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-22 21:47:56 +00:00
12feaee1b1
- 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>
196 lines
5.6 KiB
JavaScript
196 lines
5.6 KiB
JavaScript
#!/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();
|