Пример #1
0
        private static void ParseLicenseAsExpression(string value, PackageJsonLicense result)
        {
            if (value.IsNullOrEmpty() || Unlicensed.EqualsIgnoreCase(value))
            {
                return;
            }

            if (value.StartsWithIgnoreCase(FileLicense))
            {
                value       = value.Substring(FileLicense.Length).Trim();
                result.Type = "file";
            }

            result.Value = value;
        }
Пример #2
0
        public PackageJsonLicense GetLicense()
        {
            var result = new PackageJsonLicense
            {
                Type = "expression"
            };

            var node = Content.GetValue("license");

            if (node != null)
            {
                if (node is JObject obj)
                {
                    node = obj.GetValue("type");
                }

                if (node is JValue value)
                {
                    ParseLicenseAsExpression(value.Value as string, result);
                }

                return(result);
            }

            if (Content.GetValue("licenses") is JArray nodes)
            {
                var codes = nodes
                            .OfType <JObject>()
                            .Select(i => (i.GetValue("type") as JValue)?.Value as string)
                            .Where(i => !i.IsNullOrEmpty())
                            .Distinct(StringComparer.OrdinalIgnoreCase)
                            .ToList();

                if (codes.Count == 1)
                {
                    result.Value = codes[0];
                }
                else if (codes.Count > 1)
                {
                    result.Value = "(" + string.Join(" OR ", codes) + ")";
                }
            }

            return(result);
        }