OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

build-extension-store.php

2 KB
<?php

declare(strict_types=1);

/**
 * Build-Helfer: erzeugt die Store-/Distributionsfassung der Vault-Browser-
 * Erweiterung aus der einzigen Quelle der Wahrheit – den Heredocs in
 * `src/Controllers/VaultApiController.php` (`extensionFiles()`).
 *
 * Die Dateien sind byte-identisch mit dem, was der Backend-Download unter
 * `/admin/vault/extension/download` ausliefert. Das Ergebnis ist für den
 * Chrome Web Store bzw. das eigenständige Repo `friloo/opennit-vault-extension`
 * gedacht.
 *
 * Nutzung:
 *   php bin/build-extension-store.php [ZIELVERZEICHNIS]
 *
 *   ZIELVERZEICHNIS  Ordner, in den manifest.json, *.js, *.html und die Icons
 *                    geschrieben werden. Default: ./build/opennit-vault-extension
 *
 * Es wird KEINE Web-Session, kein laufender Server und keine Datenbank benötigt:
 * die Extension-Dateien sind statisch aus dem Quellcode ableitbar.
 */

require __DIR__ . '/../vendor/autoload.php';

use OpenNIT\Controllers\VaultApiController;

$target = $argv[1] ?? (__DIR__ . '/../build/opennit-vault-extension');
$target = rtrim($target, '/');

if (!is_dir($target) && !mkdir($target, 0775, true) && !is_dir($target)) {
    fwrite(STDERR, "Zielverzeichnis konnte nicht angelegt werden: {$target}\n");
    exit(1);
}

// extensionFiles() nutzt keinen Objektzustand (nur weitere private Heredoc-
// Methoden + das gebrandete Icon aus public/), daher genügt eine Instanz ohne
// Konstruktor. Für einen generischen Store-Build bleibt die Server-URL leer.
$ref  = new ReflectionClass(VaultApiController::class);
$inst = $ref->newInstanceWithoutConstructor();

$method = $ref->getMethod('extensionFiles');
$method->setAccessible(true);

/** @var array<string,string> $files */
$files = $method->invoke($inst, '', 'OpenNIT Vault', '');

foreach ($files as $name => $content) {
    file_put_contents($target . '/' . $name, $content);
    printf("  %-16s %7d Bytes\n", $name, strlen($content));
}

printf("Fertig: %d Dateien nach %s geschrieben.\n", count($files), $target);