private static IDictionary<string, IDictionary<string, string>> TransformMaps(Property maps)
        {
            var result = new Dictionary<string, IDictionary<string, string>>();

            if (maps?.Value?.Type != SyntaxNodes.ObjectExpression)
            {
                return result;
            }

            var objexpr = maps.Value as ObjectExpression;

            foreach (var p in objexpr.Properties)
            {
                var key = p.Key.GetKey();

                var literal = p.Value.As<ObjectExpression>();
                if (literal == null)
                {
                    continue;
                }

                var dict = new Dictionary<string, string>();

                foreach (var m in literal.Properties)
                {
                    dict[m.Key.GetKey()] = m.Value.GetValue(literal);
                }

                result[p.Key.GetKey()] = dict;
            }

            return result;
        }
        private static IEnumerable<RequirePackage> TransformPackages(SyntaxNode root, Property packages)
        {
            if (packages?.Value?.Type != SyntaxNodes.ArrayExpression)
            {
                return Enumerable.Empty<RequirePackage>();
            }

            var array = packages.Value.As<ArrayExpression>();

            return (from package in array.Elements
                    where package.Type == SyntaxNodes.ObjectExpression
                    select package.As<ObjectExpression>())
                .Select(
                    expr => new RequirePackage
                            {
                                Location = expr.GetProperty("location")?.GetValue(root),
                                Name = expr.GetProperty("name")?.GetValue(root),
                                Main = expr.GetProperty("main")?.GetValue(root)
                            })
                .Where(package =>
                       !string.IsNullOrEmpty(package.Location) ||
                       !string.IsNullOrEmpty(package.Name) ||
                       !string.IsNullOrEmpty(package.Main));
        }
        private static IDictionary<string, string> TransformPaths(SyntaxNode root, Property paths)
        {
            var result = new Dictionary<string, string>();

            if (paths.Value?.Type != SyntaxNodes.ObjectExpression)
            {
                return result;
            }

            var expr = paths.Value.As<ObjectExpression>();

            foreach (var p in expr.Properties)
            {
                result[p.Key.GetKey()] = p.GetValue(root);
            }

            return result;
        }