diff --git a/cli/go.mod b/cli/go.mod index 9ad835ea1acac6f47013e6bdc7d9f19ac5e988c5..e88a59ba0f57d13510b5cf00affe712e25999e5a 100644 --- a/cli/go.mod +++ b/cli/go.mod @@ -1,3 +1,5 @@ module cli go 1.18 + +require github.com/Masterminds/semver/v3 v3.1.1 diff --git a/cli/go.sum b/cli/go.sum new file mode 100644 index 0000000000000000000000000000000000000000..471bde90bb2e48c4593d65f12500b1d83585bfa8 --- /dev/null +++ b/cli/go.sum @@ -0,0 +1,2 @@ +github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= diff --git a/cli/main.go b/cli/main.go index 6d36bf58b2bbc20d11d2f836409b1b85f3fc822f..957a26b193bfcffcf2fe19f4de08be08adef291c 100644 --- a/cli/main.go +++ b/cli/main.go @@ -35,6 +35,8 @@ func output(depRoot *model.DepTree, taskInfo report.TaskInfo) { reportFunc = report.Html case ".json": reportFunc = report.Json + case ".spdx": + reportFunc = report.Spdx default: reportFunc = report.Json } diff --git a/cli/out.spdx b/cli/out.spdx new file mode 100644 index 0000000000000000000000000000000000000000..007a80604e94e7f1025e458447b43424784bf6c2 --- /dev/null +++ b/cli/out.spdx @@ -0,0 +1,1148 @@ +SPDXVersion: SPDX-2.2 +DataLicense: CC0-1.0 +SPDXID: SPDXRef-DOCUMENT +DocumentName: C:\Users\Xmirror\Desktop\example\test\php-test +DocumentNamespace: +Creator: +Created: 2022-06-22T08:31:34Z + + +##### Package representing the C:\Users\Xmirror\Desktop\example\test\php-test + +PackageName: C:\Users\Xmirror\Desktop\example\test\php-test +SPDXID: SPDXRef-Package-C:\Users\Xmirror\Desktop\example\test\php-test + +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the guzzlehttp/guzzle + +PackageName: guzzlehttp/guzzle +SPDXID: SPDXRef-Package-guzzlehttp.guzzle +PackageVersion: 7.4.3 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the laravel/framework + +PackageName: laravel/framework +SPDXID: SPDXRef-Package-laravel.framework +PackageVersion: v9.16.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the laravel/sanctum + +PackageName: laravel/sanctum +SPDXID: SPDXRef-Package-laravel.sanctum-v2.15.1 +PackageVersion: v2.15.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the laravel/tinker + +PackageName: laravel/tinker +SPDXID: SPDXRef-Package-laravel.tinker +PackageVersion: v2.7.2 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the guzzlehttp/promises + +PackageName: guzzlehttp/promises +SPDXID: SPDXRef-Package-guzzlehttp.promises-1.5.1 +PackageVersion: 1.5.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the guzzlehttp/psr7 + +PackageName: guzzlehttp/psr7 +SPDXID: SPDXRef-Package-guzzlehttp.psr7 +PackageVersion: 2.2.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/http-client + +PackageName: psr/http-client +SPDXID: SPDXRef-Package-psr.http-client-1.0.1 +PackageVersion: 1.0.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/deprecation-contracts + +PackageName: symfony/deprecation-contracts +SPDXID: SPDXRef-Package-symfony.deprecation-contracts-v3.1.0 +PackageVersion: v3.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the doctrine/inflector + +PackageName: doctrine/inflector +SPDXID: SPDXRef-Package-doctrine.inflector-2.0.4 +PackageVersion: 2.0.4 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the dragonmantank/cron-expression + +PackageName: dragonmantank/cron-expression +SPDXID: SPDXRef-Package-dragonmantank.cron-expression +PackageVersion: v3.3.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the egulias/email-validator + +PackageName: egulias/email-validator +SPDXID: SPDXRef-Package-egulias.email-validator +PackageVersion: 3.2 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the fruitcake/php-cors + +PackageName: fruitcake/php-cors +SPDXID: SPDXRef-Package-fruitcake.php-cors-v1.2.0 +PackageVersion: v1.2.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the laravel/serializable-closure + +PackageName: laravel/serializable-closure +SPDXID: SPDXRef-Package-laravel.serializable-closure-v1.2.0 +PackageVersion: v1.2.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the league/commonmark + +PackageName: league/commonmark +SPDXID: SPDXRef-Package-league.commonmark +PackageVersion: 2.3.2 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the league/flysystem + +PackageName: league/flysystem +SPDXID: SPDXRef-Package-league.flysystem +PackageVersion: 3.0.20 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the monolog/monolog + +PackageName: monolog/monolog +SPDXID: SPDXRef-Package-monolog.monolog-2.6.0 +PackageVersion: 2.6.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the nesbot/carbon + +PackageName: nesbot/carbon +SPDXID: SPDXRef-Package-nesbot.carbon +PackageVersion: 2.58.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/container + +PackageName: psr/container +SPDXID: SPDXRef-Package-psr.container-2.0.2 +PackageVersion: 2.0.2 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/log + +PackageName: psr/log +SPDXID: SPDXRef-Package-psr.log-3.0.0 +PackageVersion: 3.0.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/simple-cache + +PackageName: psr/simple-cache +SPDXID: SPDXRef-Package-psr.simple-cache-3.0.0 +PackageVersion: 3.0.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the ramsey/uuid + +PackageName: ramsey/uuid +SPDXID: SPDXRef-Package-ramsey.uuid +PackageVersion: 4.3.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/console + +PackageName: symfony/console +SPDXID: SPDXRef-Package-symfony.console +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/error-handler + +PackageName: symfony/error-handler +SPDXID: SPDXRef-Package-symfony.error-handler-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/finder + +PackageName: symfony/finder +SPDXID: SPDXRef-Package-symfony.finder-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/http-foundation + +PackageName: symfony/http-foundation +SPDXID: SPDXRef-Package-symfony.http-foundation-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/http-kernel + +PackageName: symfony/http-kernel +SPDXID: SPDXRef-Package-symfony.http-kernel +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/mailer + +PackageName: symfony/mailer +SPDXID: SPDXRef-Package-symfony.mailer-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/mime + +PackageName: symfony/mime +SPDXID: SPDXRef-Package-symfony.mime-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/process + +PackageName: symfony/process +SPDXID: SPDXRef-Package-symfony.process-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/routing + +PackageName: symfony/routing +SPDXID: SPDXRef-Package-symfony.routing-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/var-dumper + +PackageName: symfony/var-dumper +SPDXID: SPDXRef-Package-symfony.var-dumper-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the tijsverkoyen/css-to-inline-styles + +PackageName: tijsverkoyen/css-to-inline-styles +SPDXID: SPDXRef-Package-tijsverkoyen.css-to-inline-styles +PackageVersion: 2.2.4 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the vlucas/phpdotenv + +PackageName: vlucas/phpdotenv +SPDXID: SPDXRef-Package-vlucas.phpdotenv +PackageVersion: v5.4.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the voku/portable-ascii + +PackageName: voku/portable-ascii +SPDXID: SPDXRef-Package-voku.portable-ascii-2.0.1 +PackageVersion: 2.0.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psy/psysh + +PackageName: psy/psysh +SPDXID: SPDXRef-Package-psy.psysh +PackageVersion: v0.11.5 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/http-factory + +PackageName: psr/http-factory +SPDXID: SPDXRef-Package-psr.http-factory-1.0.1 +PackageVersion: 1.0.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/http-message + +PackageName: psr/http-message +SPDXID: SPDXRef-Package-psr.http-message-1.0.1 +PackageVersion: 1.0.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the ralouphie/getallheaders + +PackageName: ralouphie/getallheaders +SPDXID: SPDXRef-Package-ralouphie.getallheaders-3.0.3 +PackageVersion: 3.0.3 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the webmozart/assert + +PackageName: webmozart/assert +SPDXID: SPDXRef-Package-webmozart.assert-1.11.0 +PackageVersion: 1.11.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the doctrine/lexer + +PackageName: doctrine/lexer +SPDXID: SPDXRef-Package-doctrine.lexer-1.2.3 +PackageVersion: 1.2.3 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-intl-idn + +PackageName: symfony/polyfill-intl-idn +SPDXID: SPDXRef-Package-symfony.polyfill-intl-idn +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the league/config + +PackageName: league/config +SPDXID: SPDXRef-Package-league.config +PackageVersion: v1.1.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the psr/event-dispatcher + +PackageName: psr/event-dispatcher +SPDXID: SPDXRef-Package-psr.event-dispatcher-1.0.0 +PackageVersion: 1.0.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-php80 + +PackageName: symfony/polyfill-php80 +SPDXID: SPDXRef-Package-symfony.polyfill-php80-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the league/mime-type-detection + +PackageName: league/mime-type-detection +SPDXID: SPDXRef-Package-league.mime-type-detection-1.11.0 +PackageVersion: 1.11.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-mbstring + +PackageName: symfony/polyfill-mbstring +SPDXID: SPDXRef-Package-symfony.polyfill-mbstring-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/translation + +PackageName: symfony/translation +SPDXID: SPDXRef-Package-symfony.translation +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the brick/math + +PackageName: brick/math +SPDXID: SPDXRef-Package-brick.math-0.9.3 +PackageVersion: 0.9.3 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the ramsey/collection + +PackageName: ramsey/collection +SPDXID: SPDXRef-Package-ramsey.collection +PackageVersion: 1.2.2 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/service-contracts + +PackageName: symfony/service-contracts +SPDXID: SPDXRef-Package-symfony.service-contracts-v3.1.0 +PackageVersion: v3.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/string + +PackageName: symfony/string +SPDXID: SPDXRef-Package-symfony.string +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/event-dispatcher + +PackageName: symfony/event-dispatcher +SPDXID: SPDXRef-Package-symfony.event-dispatcher +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-ctype + +PackageName: symfony/polyfill-ctype +SPDXID: SPDXRef-Package-symfony.polyfill-ctype-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/css-selector + +PackageName: symfony/css-selector +SPDXID: SPDXRef-Package-symfony.css-selector-v6.1.0 +PackageVersion: v6.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the graham-campbell/result-type + +PackageName: graham-campbell/result-type +SPDXID: SPDXRef-Package-graham-campbell.result-type-v1.0.4 +PackageVersion: v1.0.4 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the phpoption/phpoption + +PackageName: phpoption/phpoption +SPDXID: SPDXRef-Package-phpoption.phpoption-1.8.1 +PackageVersion: 1.8.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the nikic/php-parser + +PackageName: nikic/php-parser +SPDXID: SPDXRef-Package-nikic.php-parser-v4.14.0 +PackageVersion: v4.14.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-intl-normalizer + +PackageName: symfony/polyfill-intl-normalizer +SPDXID: SPDXRef-Package-symfony.polyfill-intl-normalizer-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-php72 + +PackageName: symfony/polyfill-php72 +SPDXID: SPDXRef-Package-symfony.polyfill-php72-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the dflydev/dot-access-data + +PackageName: dflydev/dot-access-data +SPDXID: SPDXRef-Package-dflydev.dot-access-data-v3.0.1 +PackageVersion: v3.0.1 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the nette/schema + +PackageName: nette/schema +SPDXID: SPDXRef-Package-nette.schema +PackageVersion: v1.2.2 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/translation-contracts + +PackageName: symfony/translation-contracts +SPDXID: SPDXRef-Package-symfony.translation-contracts-v3.1.0 +PackageVersion: v3.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-php81 + +PackageName: symfony/polyfill-php81 +SPDXID: SPDXRef-Package-symfony.polyfill-php81-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/polyfill-intl-grapheme + +PackageName: symfony/polyfill-intl-grapheme +SPDXID: SPDXRef-Package-symfony.polyfill-intl-grapheme-v1.26.0 +PackageVersion: v1.26.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the symfony/event-dispatcher-contracts + +PackageName: symfony/event-dispatcher-contracts +SPDXID: SPDXRef-Package-symfony.event-dispatcher-contracts-v3.1.0 +PackageVersion: v3.1.0 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +##### Package representing the nette/utils + +PackageName: nette/utils +SPDXID: SPDXRef-Package-nette.utils-v3.2.7 +PackageVersion: v3.2.7 +PackageSupplier: +PackageDownloadLocation: NOASSERTION +FilesAnalyzed: false +PackageChecksum: : +PackageHomePage: NOASSERTION +PackageLicenseConcluded: NOASSERTION +PackageLicenseDeclared: NOASSERTION +PackageCopyrightText: NOASSERTION +PackageLicenseComments: NOASSERTION +PackageComment: NOASSERTION + +Relationship: SPDXRef-DOCUMENT DESCRIBES C:\Users\Xmirror\Desktop\example\test\php-test +Relationship: SPDXRef-Package-C:\Users\Xmirror\Desktop\example\test\php-test DEPENDS_ON SPDXRef-Package-guzzlehttp.guzzle +Relationship: SPDXRef-Package-C:\Users\Xmirror\Desktop\example\test\php-test DEPENDS_ON SPDXRef-Package-laravel.framework +Relationship: SPDXRef-Package-C:\Users\Xmirror\Desktop\example\test\php-test DEPENDS_ON SPDXRef-Package-laravel.sanctum-v2.15.1 +Relationship: SPDXRef-Package-C:\Users\Xmirror\Desktop\example\test\php-test DEPENDS_ON SPDXRef-Package-laravel.tinker +Relationship: SPDXRef-Package-guzzlehttp.guzzle DEPENDS_ON SPDXRef-Package-guzzlehttp.promises-1.5.1 +Relationship: SPDXRef-Package-guzzlehttp.guzzle DEPENDS_ON SPDXRef-Package-guzzlehttp.psr7 +Relationship: SPDXRef-Package-guzzlehttp.guzzle DEPENDS_ON SPDXRef-Package-psr.http-client-1.0.1 +Relationship: SPDXRef-Package-guzzlehttp.guzzle DEPENDS_ON SPDXRef-Package-symfony.deprecation-contracts-v3.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-doctrine.inflector-2.0.4 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-dragonmantank.cron-expression +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-egulias.email-validator +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-fruitcake.php-cors-v1.2.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-laravel.serializable-closure-v1.2.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-league.commonmark +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-league.flysystem +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-monolog.monolog-2.6.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-nesbot.carbon +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-psr.container-2.0.2 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-psr.log-3.0.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-psr.simple-cache-3.0.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-ramsey.uuid +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.console +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.error-handler-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.finder-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.http-foundation-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.http-kernel +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.mailer-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.mime-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.process-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.routing-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-symfony.var-dumper-v6.1.0 +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-tijsverkoyen.css-to-inline-styles +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-vlucas.phpdotenv +Relationship: SPDXRef-Package-laravel.framework DEPENDS_ON SPDXRef-Package-voku.portable-ascii-2.0.1 +Relationship: SPDXRef-Package-laravel.tinker DEPENDS_ON SPDXRef-Package-psy.psysh +Relationship: SPDXRef-Package-guzzlehttp.psr7 DEPENDS_ON SPDXRef-Package-psr.http-factory-1.0.1 +Relationship: SPDXRef-Package-guzzlehttp.psr7 DEPENDS_ON SPDXRef-Package-psr.http-message-1.0.1 +Relationship: SPDXRef-Package-guzzlehttp.psr7 DEPENDS_ON SPDXRef-Package-ralouphie.getallheaders-3.0.3 +Relationship: SPDXRef-Package-dragonmantank.cron-expression DEPENDS_ON SPDXRef-Package-webmozart.assert-1.11.0 +Relationship: SPDXRef-Package-egulias.email-validator DEPENDS_ON SPDXRef-Package-doctrine.lexer-1.2.3 +Relationship: SPDXRef-Package-egulias.email-validator DEPENDS_ON SPDXRef-Package-symfony.polyfill-intl-idn +Relationship: SPDXRef-Package-league.commonmark DEPENDS_ON SPDXRef-Package-league.config +Relationship: SPDXRef-Package-league.commonmark DEPENDS_ON SPDXRef-Package-psr.event-dispatcher-1.0.0 +Relationship: SPDXRef-Package-league.commonmark DEPENDS_ON SPDXRef-Package-symfony.polyfill-php80-v1.26.0 +Relationship: SPDXRef-Package-league.flysystem DEPENDS_ON SPDXRef-Package-league.mime-type-detection-1.11.0 +Relationship: SPDXRef-Package-nesbot.carbon DEPENDS_ON SPDXRef-Package-symfony.polyfill-mbstring-v1.26.0 +Relationship: SPDXRef-Package-nesbot.carbon DEPENDS_ON SPDXRef-Package-symfony.translation +Relationship: SPDXRef-Package-ramsey.uuid DEPENDS_ON SPDXRef-Package-brick.math-0.9.3 +Relationship: SPDXRef-Package-ramsey.uuid DEPENDS_ON SPDXRef-Package-ramsey.collection +Relationship: SPDXRef-Package-symfony.console DEPENDS_ON SPDXRef-Package-symfony.service-contracts-v3.1.0 +Relationship: SPDXRef-Package-symfony.console DEPENDS_ON SPDXRef-Package-symfony.string +Relationship: SPDXRef-Package-symfony.http-kernel DEPENDS_ON SPDXRef-Package-symfony.event-dispatcher +Relationship: SPDXRef-Package-symfony.http-kernel DEPENDS_ON SPDXRef-Package-symfony.polyfill-ctype-v1.26.0 +Relationship: SPDXRef-Package-tijsverkoyen.css-to-inline-styles DEPENDS_ON SPDXRef-Package-symfony.css-selector-v6.1.0 +Relationship: SPDXRef-Package-vlucas.phpdotenv DEPENDS_ON SPDXRef-Package-graham-campbell.result-type-v1.0.4 +Relationship: SPDXRef-Package-vlucas.phpdotenv DEPENDS_ON SPDXRef-Package-phpoption.phpoption-1.8.1 +Relationship: SPDXRef-Package-psy.psysh DEPENDS_ON SPDXRef-Package-nikic.php-parser-v4.14.0 +Relationship: SPDXRef-Package-symfony.polyfill-intl-idn DEPENDS_ON SPDXRef-Package-symfony.polyfill-intl-normalizer-v1.26.0 +Relationship: SPDXRef-Package-symfony.polyfill-intl-idn DEPENDS_ON SPDXRef-Package-symfony.polyfill-php72-v1.26.0 +Relationship: SPDXRef-Package-league.config DEPENDS_ON SPDXRef-Package-dflydev.dot-access-data-v3.0.1 +Relationship: SPDXRef-Package-league.config DEPENDS_ON SPDXRef-Package-nette.schema +Relationship: SPDXRef-Package-symfony.translation DEPENDS_ON SPDXRef-Package-symfony.translation-contracts-v3.1.0 +Relationship: SPDXRef-Package-ramsey.collection DEPENDS_ON SPDXRef-Package-symfony.polyfill-php81-v1.26.0 +Relationship: SPDXRef-Package-symfony.string DEPENDS_ON SPDXRef-Package-symfony.polyfill-intl-grapheme-v1.26.0 +Relationship: SPDXRef-Package-symfony.event-dispatcher DEPENDS_ON SPDXRef-Package-symfony.event-dispatcher-contracts-v3.1.0 +Relationship: SPDXRef-Package-nette.schema DEPENDS_ON SPDXRef-Package-nette.utils-v3.2.7 \ No newline at end of file diff --git a/util/report/spdx.go b/util/report/spdx.go new file mode 100644 index 0000000000000000000000000000000000000000..385469e7ab8197dec4e26da8ef3ac08de0487ee5 --- /dev/null +++ b/util/report/spdx.go @@ -0,0 +1,129 @@ +package report + +import ( + "bytes" + "fmt" + "path" + "strings" + "text/template" + "time" + "util/logs" + "util/model" +) + +// 记录节点名与pacakge的对应关系 +var nodePkg = make(map[*model.DepTree]Package) + +func init() { + replacers := []string{"/", ".", "_", "-"} + replacer = strings.NewReplacer(replacers...) +} +func Spdx(dep *model.DepTree, taskInfo TaskInfo) []byte { + format(dep) + doc := buildDocument(dep, taskInfo) + addPkgToDoc(dep, doc) + addRelation(dep, doc) + tmpl := template.New("tagValue") + tmpl, err := tmpl.Parse(T) + + if err != nil { + logs.Warn(err) + } + templateBuffer := new(bytes.Buffer) + err = tmpl.Execute(templateBuffer, doc) + if err != nil { + logs.Warn(err) + } + return templateBuffer.Bytes() +} + +// 为document添加relationship字段 +func addRelation(dep *model.DepTree, doc *Document) { + doc.Relationships = append(doc.Relationships, Relationship{ + SPDXElementID: "SPDXRef-DOCUMENT", + RelatedSPDXElement: doc.DocumentName, + RelationshipType: "DESCRIBES", + }) + q := []*model.DepTree{dep} + for len(q) > 0 { + n := q[0] + if pkg, ok := nodePkg[n]; ok { + if !pkg.RootPackage { + q = append(q[1:], n.Children...) + continue + } + for _, sub := range n.Children { + if subpkg, ok := nodePkg[sub]; ok { + doc.Relationships = append(doc.Relationships, Relationship{ + SPDXElementID: pkg.SPDXID, + RelatedSPDXElement: subpkg.SPDXID, + RelationshipType: "DEPENDS_ON", + }) + } + } + } + q = append(q[1:], n.Children...) + } +} + +// 为document添加packages字段 +func addPkgToDoc(root *model.DepTree, doc *Document) { + if root.Name == "" { + root.Name = doc.DocumentName + } + q := []*model.DepTree{root} + for len(q) > 0 { + n := q[0] + q = append(q[1:], n.Children...) + doc.Packages = append(doc.Packages, buildPkg(n)) + } +} + +// 构建package +func buildPkg(dep *model.DepTree) Package { + pkg := Package{ + PackageName: dep.Name, + SPDXID: "NOASSERTION", + PackageVersion: dep.VersionStr, + PackageSupplier: dep.Vendor, + PackageDownloadLocation: "NOASSERTION", + FilesAnalyzed: false, + PackageChecksums: []PackageChecksum{{}}, + PackageHomePage: "NOASSERTION", + PackageLicenseConcluded: "NOASSERTION", + PackageLicenseDeclared: "NOASSERTION", + PackageCopyrightText: "NOASSERTION", + PackageLicenseComments: "NOASSERTION", + PackageComment: "NOASSERTION", + RootPackage: len(dep.Children) > 0, + } + pkg.SPDXID = setPkgSPDXID(dep.Name, dep.VersionStr, pkg.RootPackage) + nodePkg[dep] = pkg + return pkg +} + +// 初始化Document +func buildDocument(root *model.DepTree, taskInfo TaskInfo) *Document { + return &Document{ + SPDXVersion: "SPDX-2.2", + DataLicense: "CC0-1.0", + SPDXID: "SPDXRef-DOCUMENT", + DocumentName: path.Base(taskInfo.AppName), + DocumentNamespace: "", + CreationInfo: CreationInfo{ + Creators: []string{}, + Created: time.Now().UTC().Format(time.RFC3339), + }, + Packages: []Package{}, + Relationships: []Relationship{}, + ExtractedLicensingInfos: []ExtractedLicensingInfo{}, + } +} + +// 设置package的SPDXID +func setPkgSPDXID(s, v string, flag bool) string { + if flag { + return fmt.Sprintf("SPDXRef-Package-%s", replacer.Replace(s)) + } + return fmt.Sprintf("SPDXRef-Package-%s-%s", replacer.Replace(s), v) +} diff --git a/util/report/spdx_type.go b/util/report/spdx_type.go new file mode 100644 index 0000000000000000000000000000000000000000..aa2c97fee54fcbcf85c92edc138fb194296ff8c6 --- /dev/null +++ b/util/report/spdx_type.go @@ -0,0 +1,101 @@ +package report + +import "strings" + +var replacer *strings.Replacer + +type HashAlgorithm string +type Package struct { + PackageName string `json:"name,omitempty"` + SPDXID string `json:"SPDXID,omitempty"` + PackageVersion string `json:"versionInfo,omitempty"` + PackageSupplier string `json:"supplier,omitempty"` + PackageDownloadLocation string `json:"downloadLocation,omitempty"` + FilesAnalyzed bool `json:"filesAnalyzed"` + PackageChecksums []PackageChecksum `json:"checksums"` + PackageHomePage string `json:"homepage,omitempty"` + PackageLicenseConcluded string `json:"licenseConcluded,omitempty"` + PackageLicenseDeclared string `json:"licenseDeclared,omitempty"` + PackageCopyrightText string `json:"copyrightText,omitempty"` + PackageLicenseComments string `json:"licenseComments,omitempty"` + PackageComment string `json:"comment,omitempty"` + RootPackage bool `json:"-"` +} + +type Document struct { + SPDXVersion string `json:"spdxVersion,omitempty"` + DataLicense string `json:"dataLicense,omitempty"` + SPDXID string `json:"SPDXID,omitempty"` + DocumentName string `json:"name,omitempty"` + DocumentNamespace string `json:"documentNamespace,omitempty"` + CreationInfo CreationInfo `json:"creationInfo,omitempty"` + Packages []Package `json:"packages,omitempty"` + Relationships []Relationship `json:"relationships,omitempty"` + ExtractedLicensingInfos []ExtractedLicensingInfo `json:"hasExtractedLicensingInfos,omitempty"` +} + +type CreationInfo struct { + Comment string `json:"comment,omitempty"` + Created string `json:"created,omitempty"` + Creators []string `json:"creators,omitempty"` + LicenceListVersion string `json:"licenseListVersion,omitempty"` +} + +type Relationship struct { + SPDXElementID string `json:"spdxElementId,omitempty"` + RelatedSPDXElement string `json:"relatedSpdxElement,omitempty"` + RelationshipType string `json:"relationshipType,omitempty"` +} +type ExtractedLicensingInfo struct { + LicenseID string `json:"licenseId,omitempty"` + ExtractedText string `json:"extractedText,omitempty"` + LicenseName string `json:"name,omitempty"` + LicenseComment string `json:"comment,omitempty"` +} +type PackageChecksum struct { + Algorithm HashAlgorithm `json:"algorithm"` + Value string `json:"checksumValue"` +} + +const T = `SPDXVersion: {{ .SPDXVersion }} +DataLicense: {{ .DataLicense }} +SPDXID: {{ .SPDXID }} +DocumentName: {{ .DocumentName }} +DocumentNamespace: {{ .DocumentNamespace }} +Creator: {{ range .CreationInfo.Creators }}{{ . -}} {{ end }} +Created: {{ .CreationInfo.Created }} + +{{ range .Packages }} +##### Package representing the {{.PackageName}} + +PackageName: {{ .PackageName }} +SPDXID: {{ .SPDXID }} +{{ with .PackageVersion -}} +PackageVersion: {{ . }} +{{- end }} +PackageSupplier: {{ .PackageSupplier }} +PackageDownloadLocation: {{ .PackageDownloadLocation }} +FilesAnalyzed: {{ .FilesAnalyzed }} +{{- range .PackageChecksums }} +PackageChecksum: {{ .Algorithm }}: {{ .Value }} +{{- end }} +PackageHomePage: {{ .PackageHomePage }} +PackageLicenseConcluded: {{ .PackageLicenseConcluded }} +PackageLicenseDeclared: {{ .PackageLicenseDeclared }} +PackageCopyrightText: {{ .PackageCopyrightText }} +PackageLicenseComments: {{ .PackageLicenseComments }} +PackageComment: {{ .PackageComment }} +{{ end }} +{{- range .Relationships }} +Relationship: {{ .SPDXElementID }} {{ .RelationshipType }} {{ .RelatedSPDXElement }} +{{- end }} + +{{- with .ExtractedLicensingInfos -}} +##### Non-standard license +{{ range . }} +LicenseID: {{ .LicenseID }} +ExtractedText: {{ .ExtractedText }} +LicenseName: {{ .LicenseName }} +LicenseComment: {{ .LicenseComment }} +{{- end -}} +{{- end -}}`