PHPackages                             azaharizaman/nexus-import - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. azaharizaman/nexus-import

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

azaharizaman/nexus-import
=========================

Framework-agnostic data import engine for Nexus ERP

v0.1.0-alpha1(1mo ago)00MITPHPPHP ^8.3

Since May 5Pushed 1mo agoCompare

[ Source](https://github.com/azaharizaman/nexus-import)[ Packagist](https://packagist.org/packages/azaharizaman/nexus-import)[ RSS](/packages/azaharizaman-nexus-import/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

Nexus\\Import
=============

[](#nexusimport)

[![PHP Version](https://camo.githubusercontent.com/ef0054230522e542bc1f908ac005c6c75888dea255bac910f9015e12095e31d7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e332d626c7565)](https://php.net)[![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)](LICENSE)![Framework Agnostic](https://camo.githubusercontent.com/fa599b5173a7b46ad7254240021cf295a9dcf6cde58ae3ea993ee088105dd572/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6672616d65776f726b2d61676e6f737469632d707572706c65)![Status](https://camo.githubusercontent.com/e3a94c8d52a8c68ee772aed70d0406ec9b7397acf47a8502a5456a1c838239ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617475732d70726f64756374696f6e25323072656164792d627269676874677265656e)

**Framework-agnostic data import engine with transformation, validation, and transaction management.**

The `Nexus\Import` package provides a high-integrity, modular import system for processing CSV, JSON, XML, and Excel files with configurable field mappings, data transformations, validation rules, duplicate detection, and flexible transaction strategies.

---

📚 Table of Contents
-------------------

[](#-table-of-contents)

- [Features](#features)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Core Concepts](#core-concepts)
    - [Value Objects](#1-value-objects)
    - [Built-in Transformation Rules](#2-built-in-transformation-rules)
    - [Validation Rules](#3-validation-rules)
    - [Import Handler](#4-import-handler)
    - [Transaction Manager](#5-transaction-manager)
- [Transaction Strategies](#transaction-strategies)
- [Error Handling](#error-handling)
- [Advanced Usage](#advanced-usage)
- [Available Interfaces](#available-interfaces)
- [Integration Examples](#integration-examples)
- [Architecture](#architecture)
- [Testing](#testing)
- [Documentation](#documentation)
- [License](#license)

---

Features
--------

[](#features)

- 🔄 **Multiple Import Formats**: CSV, JSON, XML, Excel (via Atomy integration)
- 🎯 **Field Mapping**: Map source fields to target fields with transformations
- ✨ **Data Transformations**: 13 built-in transformation rules (trim, upper, lower, date formatting, type casting, etc.)
- ✅ **Validation Engine**: Required fields, email, numeric, min/max, length, date validation
- 🔍 **Duplicate Detection**: Internal (within import file) and external (against existing data)
- 💾 **Transaction Strategies**: TRANSACTIONAL (single transaction), BATCH (transaction per batch), STREAM (no transaction)
- 🎭 **Import Modes**: CREATE, UPDATE, UPSERT, DELETE, SYNC
- 📊 **Comprehensive Error Reporting**: Row-level errors with severity (WARNING, ERROR, CRITICAL)
- 🚀 **Memory Efficient**: Streaming support for large datasets

Installation
------------

[](#installation)

```
composer require azaharizaman/nexus-import
```

Quick Start
-----------

[](#quick-start)

```
use Nexus\Import\Services\ImportManager;
use Nexus\Import\ValueObjects\{ImportFormat, ImportMode, ImportStrategy, FieldMapping};
use Nexus\Import\Parsers\CsvParser;

// 1. Create import manager
$importManager = new ImportManager(
    processor: $processor,  // ImportProcessorInterface
    authorizer: null,
    context: null,
    logger: $logger  // PSR-3 LoggerInterface
);

// 2. Register parsers
$importManager->registerParser(ImportFormat::CSV, new CsvParser());

// 3. Define field mappings
$mappings = [
    new FieldMapping(
        sourceField: 'customer_name',
        targetField: 'name',
        required: true,
        transformations: ['trim', 'capitalize']
    ),
    new FieldMapping(
        sourceField: 'email_address',
        targetField: 'email',
        required: true,
        transformations: ['trim', 'lower']
    ),
    new FieldMapping(
        sourceField: 'signup_date',
        targetField: 'created_at',
        transformations: [
            'parse_date:Y-m-d',
            'date_format:Y-m-d H:i:s'
        ]
    )
];

// 4. Define validation rules
$validationRules = [
    new ValidationRule('email', 'email', 'Invalid email format'),
    new ValidationRule('name', 'required', 'Name is required'),
    new ValidationRule('name', 'max_length', 'Name too long', 255)
];

// 5. Import data
$result = $importManager->import(
    filePath: '/path/to/customers.csv',
    format: ImportFormat::CSV,
    handler: $customerHandler,  // ImportHandlerInterface
    mappings: $mappings,
    mode: ImportMode::CREATE,
    strategy: ImportStrategy::BATCH,
    transactionManager: $transactionManager,  // TransactionManagerInterface
    validationRules: $validationRules
);

// 6. Check results
echo "Success: {$result->successCount}\n";
echo "Failed: {$result->failedCount}\n";
echo "Skipped: {$result->skippedCount}\n";
echo "Error Rate: {$result->getSuccessRate()}%\n";

// 7. Display errors
foreach ($result->getErrorsByField() as $field => $errors) {
    echo "Field '{$field}': " . count($errors) . " errors\n";
}
```

Core Components
---------------

[](#core-components)

### 1. Value Objects

[](#1-value-objects)

#### ImportFormat

[](#importformat)

```
enum ImportFormat: string
{
    case CSV = 'csv';
    case JSON = 'json';
    case XML = 'xml';
    case EXCEL = 'excel';

    public function requiresExternalParser(): bool; // true for EXCEL
}
```

#### ImportMode

[](#importmode)

```
enum ImportMode: string
{
    case CREATE = 'create';      // Insert new records only
    case UPDATE = 'update';      // Update existing records only
    case UPSERT = 'upsert';      // Insert or update
    case DELETE = 'delete';      // Delete existing records
    case SYNC = 'sync';          // Full synchronization

    public function canCreate(): bool;
    public function canUpdate(): bool;
    public function canDelete(): bool;
}
```

#### ImportStrategy

[](#importstrategy)

```
enum ImportStrategy: string
{
    case TRANSACTIONAL = 'transactional';  // Single transaction, rollback on error
    case BATCH = 'batch';                  // Transaction per batch, continue on failure
    case STREAM = 'stream';                // No transaction wrapper, row-by-row

    public function isMemoryEfficient(): bool;
}
```

#### FieldMapping

[](#fieldmapping)

```
new FieldMapping(
    sourceField: 'source_column',
    targetField: 'target_field',
    required: true,
    defaultValue: 'default',
    transformations: ['trim', 'upper', 'slug']  // Applied in order
);
```

### 2. Built-in Transformation Rules

[](#2-built-in-transformation-rules)

CategoryRuleDescriptionExample**String**`trim`Remove whitespace`" Hello "` → `"Hello"``upper`Uppercase`"hello"` → `"HELLO"``lower`Lowercase`"HELLO"` → `"hello"``capitalize`Capitalize words`"hello world"` → `"Hello World"``slug`URL-safe slug`"Hello World"` → `"hello-world"`**Type**`to_bool`Convert to boolean`"yes"` → `true``to_int`Convert to integer`"42"` → `42``to_float`Convert to float`"3.14"` → `3.14``to_string`Convert to string`42` → `"42"`**Date**`parse_date:format`Parse date`"2024-01-15"` with format `Y-m-d``date_format:format`Format dateFormat to `Y-m-d H:i:s`**Utility**`default:value`Fallback value`null` → `"N/A"``coalesce:val1,val2`First non-null`null, "default"` → `"default"`### 3. Validation Rules

[](#3-validation-rules)

```
new ValidationRule(field: 'email', type: 'email', message: 'Invalid email');
new ValidationRule(field: 'age', type: 'numeric', message: 'Must be numeric');
new ValidationRule(field: 'age', type: 'min', message: 'Min 18', constraint: 18);
new ValidationRule(field: 'age', type: 'max', message: 'Max 100', constraint: 100);
new ValidationRule(field: 'name', type: 'required', message: 'Name required');
new ValidationRule(field: 'name', type: 'min_length', message: 'Too short', constraint: 3);
new ValidationRule(field: 'name', type: 'max_length', message: 'Too long', constraint: 255);
new ValidationRule(field: 'birthdate', type: 'date', message: 'Invalid date');
new ValidationRule(field: 'active', type: 'boolean', message: 'Must be true/false');
```

### 4. Import Handler

[](#4-import-handler)

Implement `ImportHandlerInterface` to define domain-specific persistence logic:

```
use Nexus\Import\Contracts\ImportHandlerInterface;
use Nexus\Import\ValueObjects\ImportMode;

final class CustomerImportHandler implements ImportHandlerInterface
{
    public function handle(array $data, ImportMode $mode): void
    {
        match($mode) {
            ImportMode::CREATE => $this->repository->create($data),
            ImportMode::UPDATE => $this->repository->update($data),
            ImportMode::UPSERT => $this->repository->upsert($data),
            ImportMode::DELETE => $this->repository->delete($data),
            ImportMode::SYNC => $this->repository->sync($data)
        };
    }

    public function getUniqueKeyFields(): array
    {
        return ['email'];  // Duplicate detection on email
    }

    public function getRequiredFields(): array
    {
        return ['name', 'email'];
    }

    public function supportsMode(ImportMode $mode): bool
    {
        return $mode !== ImportMode::DELETE;  // Don't allow deletions
    }

    public function exists(array $uniqueData): bool
    {
        return $this->repository->existsByEmail($uniqueData['email']);
    }

    public function validateData(array $data): array
    {
        // Custom domain validation
        $errors = [];

        if (isset($data['age']) && $data['age'] < 18) {
            $errors[] = 'Customer must be 18 or older';
        }

        return $errors;
    }
}
```

### 5. Transaction Manager

[](#5-transaction-manager)

Implement `TransactionManagerInterface` for database transaction management:

```
use Nexus\Import\Contracts\TransactionManagerInterface;

final class LaravelTransactionManager implements TransactionManagerInterface
{
    public function begin(): void
    {
        DB::beginTransaction();
    }

    public function commit(): void
    {
        DB::commit();
    }

    public function rollback(): void
    {
        DB::rollBack();
    }

    public function savepoint(string $name): void
    {
        DB::statement("SAVEPOINT {$name}");
    }

    public function rollbackToSavepoint(string $name): void
    {
        DB::statement("ROLLBACK TO SAVEPOINT {$name}");
    }

    public function inTransaction(): bool
    {
        return DB::transactionLevel() > 0;
    }

    public function getTransactionLevel(): int
    {
        return DB::transactionLevel();
    }
}
```

Transaction Strategies
----------------------

[](#transaction-strategies)

### TRANSACTIONAL Strategy

[](#transactional-strategy)

- **Use Case**: Critical imports where all-or-nothing is required (e.g., financial data)
- **Behavior**: Single transaction wrapping entire import, rollback on any critical error
- **Memory**: Holds all changes in memory until commit
- **Error Handling**: One critical error fails entire import

```
$result = $importManager->import(
    strategy: ImportStrategy::TRANSACTIONAL,
    transactionManager: $transactionManager  // REQUIRED
);
```

### BATCH Strategy

[](#batch-strategy)

- **Use Case**: Large imports where partial success is acceptable
- **Behavior**: Transaction per batch (500 rows default), continue on batch failure
- **Memory**: Moderate - processes in chunks
- **Error Handling**: Failed batches are skipped, others continue

```
$result = $importManager->import(
    strategy: ImportStrategy::BATCH,
    transactionManager: $transactionManager  // OPTIONAL
);
```

### STREAM Strategy

[](#stream-strategy)

- **Use Case**: Very large files with minimal memory footprint
- **Behavior**: Row-by-row processing, no transaction wrapper
- **Memory**: Minimal - processes one row at a time
- **Error Handling**: Row failures don't affect other rows

```
$result = $importManager->import(
    strategy: ImportStrategy::STREAM
    // No transactionManager needed
);
```

Error Handling
--------------

[](#error-handling)

### Error Severity Levels

[](#error-severity-levels)

- **WARNING**: Non-critical issue, row processed successfully
- **ERROR**: Critical issue, row skipped
- **CRITICAL**: System failure, entire import may fail (TRANSACTIONAL mode)

### Accessing Errors

[](#accessing-errors)

```
// Get all errors
$allErrors = $result->getAllErrors();

// Get errors by severity
$errorCounts = $result->getErrorCountBySeverity();
// ['WARNING' => 5, 'ERROR' => 12, 'CRITICAL' => 0]

// Get errors by field
$fieldErrors = $result->getErrorsByField();
// ['email' => [ImportError, ImportError], 'age' => [ImportError]]

// Get errors by row
$rowErrors = $result->getErrorsByRow();
// [1 => [ImportError], 5 => [ImportError, ImportError]]

// Check success rate
    return $successRate = $result->getSuccessRate();  // 87.5%
```

---

Available Interfaces
--------------------

[](#available-interfaces)

The package defines 10 core interfaces for dependency injection:

### Primary Interfaces

[](#primary-interfaces)

InterfacePurposeImplementation Location**`ImportManagerInterface`**❌ Not provided - Use concrete `ImportManager`Consumer defines if abstraction needed**`ImportParserInterface`**Parse import files (CSV, JSON, XML, Excel)Package provides CSV/JSON/XML; Consumer implements Excel**`TransactionManagerInterface`**Database transaction managementConsumer implements (Laravel, Symfony, etc.)**`ImportHandlerInterface`**Domain-specific persistence logicConsumer implements per entity type**`ImportProcessorInterface`**Process import with strategy enforcementPackage provides `ImportProcessor`### Engine Interfaces

[](#engine-interfaces)

InterfacePurposeProvided Implementation**`TransformerInterface`**Apply transformation rules to data`DataTransformer`**`FieldMapperInterface`**Map source fields to target fields`FieldMapper`**`ImportValidatorInterface`**Validate import definitions`DefinitionValidator`**`DuplicateDetectorInterface`**Detect duplicate records`DuplicateDetector`### Optional Interfaces

[](#optional-interfaces)

InterfacePurposeRequired?**`ImportAuthorizerInterface`**Authorization checks❌ Optional - Pass `null` if not needed**`ImportContextInterface`**Tenant/context management❌ Optional - Pass `null` if not needed**See full API documentation:** [`docs/api-reference.md`](docs/api-reference.md)

---

Integration Examples
--------------------

[](#integration-examples)

### Laravel Integration

[](#laravel-integration)

```
// app/Services/Import/CustomerImportHandler.php
use Nexus\Import\Contracts\ImportHandlerInterface;

final class CustomerImportHandler implements ImportHandlerInterface
{
    public function __construct(
        private readonly CustomerRepository $repository
    ) {}

    public function handle(array $data, ImportMode $mode): void
    {
        match($mode) {
            ImportMode::CREATE => $this->repository->create($data),
            ImportMode::UPSERT => $this->repository->upsert($data),
        };
    }

    public function getUniqueKeyFields(): array
    {
        return ['email'];
    }
}

// routes/web.php
Route::post('/import/customers', function (Request $request, ImportManager $importManager) {
    $result = $importManager->import(
        filePath: $request->file('import_file')->getRealPath(),
        format: ImportFormat::CSV,
        handler: app(CustomerImportHandler::class),
        mappings: [/* field mappings */],
        mode: ImportMode::UPSERT
    );

    return response()->json([
        'success' => $result->successCount,
        'failed' => $result->failedCount,
        'errors' => $result->getAllErrors()
    ]);
});
```

**See complete integration guide:** [`docs/integration-guide.md`](docs/integration-guide.md)

**See working examples:** [`docs/examples/`](docs/examples/)

---

Advanced Usage
--------------

[](#advanced-usage)

### Custom Transformations

[](#custom-transformations)

```
use Nexus\Import\Core\Engine\DataTransformer;

$transformer = new DataTransformer();

// Register custom rule
$transformer->registerRule('encrypt', function($value) {
    return encrypt($value);
});

// Use in mapping
new FieldMapping(
    sourceField: 'ssn',
    targetField: 'encrypted_ssn',
    transformations: ['trim', 'encrypt']
);
```

### Auto-Mapping

[](#auto-mapping)

```
use Nexus\Import\Core\Engine\FieldMapper;

$fieldMapper = new FieldMapper($transformer);

// Automatically map matching field names
$autoMappings = $fieldMapper->autoMap(
    sourceHeaders: ['customer_name', 'email_address', 'phone_number'],
    targetFields: ['customer_name', 'email_address', 'phone']
);

// Result: Maps customer_name and email_address (exact match)
// phone_number doesn't match 'phone', must be manually defined
```

### Duplicate Detection

[](#duplicate-detection)

```
use Nexus\Import\Core\Engine\DuplicateDetector;

$duplicateDetector = new DuplicateDetector();

// Detect duplicates within import file
$duplicates = $duplicateDetector->detectInternal(
    rows: $definition->rows,
    uniqueKeyFields: ['email']
);

// Detect duplicates against existing data
$externalDuplicate = $duplicateDetector->detectExternal(
    row: $data,
    uniqueKeyFields: ['email'],
    existsCheck: fn($data) => Customer::where('email', $data['email'])->exists(),
    rowNumber: 1
);
```

---

Integration with Atomy (Laravel)
--------------------------------

[](#integration-with-atomy-laravel)

### 1. Create ExcelParser

[](#1-create-excelparser)

```
// apps/Atomy/app/Services/Import/ExcelParser.php
namespace App\Services\Import;

use Nexus\Import\Contracts\ImportParserInterface;
use Nexus\Import\ValueObjects\{ImportDefinition, ImportMetadata, ImportFormat};
use PhpOffice\PhpSpreadsheet\IOFactory;

final class ExcelParser implements ImportParserInterface
{
    public function parse(string $filePath, ImportMetadata $metadata): ImportDefinition
    {
        $spreadsheet = IOFactory::load($filePath);
        $worksheet = $spreadsheet->getActiveSheet();

        $headers = [];
        $rows = [];

        foreach ($worksheet->getRowIterator() as $index => $row) {
            $cellIterator = $row->getCellIterator();
            $cellIterator->setIterateOnlyExistingCells(false);

            $data = [];
            foreach ($cellIterator as $cell) {
                $data[] = $cell->getValue();
            }

            if ($index === 1) {
                $headers = $data;
            } else {
                $rows[] = array_combine($headers, $data);
            }
        }

        return new ImportDefinition($headers, $rows, $metadata);
    }

    public function supports(ImportFormat $format): bool
    {
        return $format === ImportFormat::EXCEL;
    }
}
```

### 2. Register in Service Provider

[](#2-register-in-service-provider)

```
// apps/Atomy/app/Providers/ImportServiceProvider.php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Nexus\Import\Services\{ImportManager, ImportProcessor};
use Nexus\Import\Parsers\{CsvParser, JsonParser, XmlParser};
use Nexus\Import\ValueObjects\ImportFormat;
use App\Services\Import\{ExcelParser, LaravelTransactionManager};

final class ImportServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        // Bind TransactionManager
        $this->app->singleton(TransactionManagerInterface::class, LaravelTransactionManager::class);

        // Bind ImportManager
        $this->app->singleton(ImportManager::class, function ($app) {
            $manager = new ImportManager(
                processor: $app->make(ImportProcessor::class),
                authorizer: null,
                context: null,
                logger: $app->make(LoggerInterface::class)
            );

            // Register native parsers
            $manager->registerParser(ImportFormat::CSV, new CsvParser());
            $manager->registerParser(ImportFormat::JSON, new JsonParser());
            $manager->registerParser(ImportFormat::XML, new XmlParser());

            // Register Excel parser (Atomy-specific)
            $manager->registerParser(ImportFormat::EXCEL, new ExcelParser());

            return $manager;
        });
    }
}
```

---

Architecture
------------

[](#architecture)

The `Nexus\Import` package follows strict framework-agnostic principles:

- **Pure PHP**: No Laravel dependencies in package code
- **Contract-Driven**: All external dependencies via interfaces
- **Immutable VOs**: Value objects are readonly and validated
- **Error Collection**: Transformations/validations collect errors (don't throw) for batch completion
- **Separation of Concerns**: Processor enforces strategies, Handler handles persistence

### Package Structure

[](#package-structure)

```
packages/Import/
├── src/
│   ├── Contracts/              # 10 interfaces
│   │   ├── ImportParserInterface.php
│   │   ├── TransactionManagerInterface.php
│   │   ├── TransformerInterface.php
│   │   ├── FieldMapperInterface.php
│   │   ├── ImportValidatorInterface.php
│   │   ├── ImportHandlerInterface.php
│   │   ├── ImportProcessorInterface.php
│   │   ├── DuplicateDetectorInterface.php
│   │   ├── ImportAuthorizerInterface.php
│   │   └── ImportContextInterface.php
│   ├── Core/Engine/           # 6 engine components
│   │   ├── DataTransformer.php
│   │   ├── FieldMapper.php
│   │   ├── DefinitionValidator.php
│   │   ├── DuplicateDetector.php
│   │   ├── ErrorCollector.php
│   │   └── BatchProcessor.php
│   ├── Exceptions/            # 7 exceptions
│   ├── Parsers/               # 3 native parsers (CSV/JSON/XML)
│   ├── Services/              # 2 services (Manager/Processor)
│   └── ValueObjects/          # 9 VOs (4 enums, 5 classes)
└── composer.json

```

---

Testing
-------

[](#testing)

### Running Package Tests

[](#running-package-tests)

```
# Run all tests
composer test

# Run with coverage
composer test:coverage

# Run specific test suite
./vendor/bin/phpunit --filter TransformerTest
```

### Current Test Status

[](#current-test-status)

**Coverage:** 0% (Tests pending implementation)
**Planned Tests:** ~65 tests (50 unit, 15 integration)
**Target Coverage:** 90%+

**See test documentation:** [`TEST_SUITE_SUMMARY.md`](TEST_SUITE_SUMMARY.md)

### Writing Custom Tests

[](#writing-custom-tests)

```
use PHPUnit\Framework\TestCase;
use Nexus\Import\Core\Engine\DataTransformer;

final class CustomTransformationTest extends TestCase
{
    public function test_custom_transformation_rule(): void
    {
        $transformer = new DataTransformer();

        $transformer->registerRule('reverse', fn($value) => strrev($value));

        $result = $transformer->apply('hello', ['reverse']);

        $this->assertSame('olleh', $result);
    }
}
```

---

Documentation
-------------

[](#documentation)

### Package Documentation

[](#package-documentation)

- **[Getting Started Guide](docs/getting-started.md)** - Quick start with Laravel integration
- **[API Reference](docs/api-reference.md)** - Complete interface and class documentation
- **[Integration Guide](docs/integration-guide.md)** - Laravel, Symfony, and vanilla PHP integration
- **[Basic Usage Example](docs/examples/basic-usage.php)** - Simple customer CSV import
- **[Advanced Usage Example](docs/examples/advanced-usage.php)** - Complex scenarios with validation

### Project Documentation

[](#project-documentation)

- **[Implementation Summary](IMPLEMENTATION_SUMMARY.md)** - Development metrics and progress
- **[Requirements](REQUIREMENTS.md)** - 78 documented requirements with traceability
- **[Test Suite Summary](TEST_SUITE_SUMMARY.md)** - Test coverage and planned tests
- **[Valuation Matrix](VALUATION_MATRIX.md)** - Package valuation ($160K estimated value)

---

License
-------

[](#license)

MIT License. See LICENSE file for details.

---

Contributing
------------

[](#contributing)

This package is part of the Nexus ERP monorepo. See main repository for contribution guidelines.

---

**Version:** 1.0.0
**Status:** Production Ready
**Maintained By:** Nexus Development Team
**Last Updated:** November 25, 2024

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance93

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 76.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

36d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/117408?v=4)[Azahari Zaman](/maintainers/azaharizaman)[@azaharizaman](https://github.com/azaharizaman)

---

Top Contributors

[![azaharizaman](https://avatars.githubusercontent.com/u/117408?v=4)](https://github.com/azaharizaman "azaharizaman (460 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (139 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/azaharizaman-nexus-import/health.svg)

```
[![Health](https://phpackages.com/badges/azaharizaman-nexus-import/health.svg)](https://phpackages.com/packages/azaharizaman-nexus-import)
```

###  Alternatives

[symfony/lock

Creates and manages locks, a mechanism to provide exclusive access to a shared resource

515135.1M619](/packages/symfony-lock)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.6k38.2k](/packages/matomo-matomo)[phpro/soap-client

A general purpose SoapClient library

8955.9M52](/packages/phpro-soap-client)[ecotone/ecotone

Enterprise architecture layer for Laravel and Symfony — CQRS, Event Sourcing, Durable Workflows (Sagas, Orchestrators), Projections, and Outbox messaging via PHP attributes.

562565.8k41](/packages/ecotone-ecotone)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

744284.3k34](/packages/civicrm-civicrm-core)[illuminate/broadcasting

The Illuminate Broadcasting package.

7126.9M199](/packages/illuminate-broadcasting)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
