/// <summary>
        /// Deserializes all definitions and events from the specified directory.
        /// </summary>
        /// <param name="compiler">The condition compiler to use.</param>
        /// <param name="path">The path to the directory.</param>
        /// <returns>A tuple of definitions and events from the directory.</returns>
        public static DefinitionCollection DeserializeFromDirectory(IConditionCompiler compiler, string path)
        {
            List <BaseDefinition> defs = new List <BaseDefinition>();

            foreach (string file in Directory.EnumerateFiles(path, "*.json", SearchOption.AllDirectories))
            {
                string         json             = File.ReadAllText(file);
                DefinitionFile?deserializedFile = JsonSerializer.Deserialize <DefinitionFile>(json, JsonOptions);

                if (deserializedFile != null)
                {
                    foreach (BaseDefinition eve in deserializedFile.AllDefinitions)
                    {
                        if (eve is ITopLevelDefinition toplevel)
                        {
                            toplevel.SourceFile = file;
                        }

                        defs.Add(eve);
                    }
                }
            }

            var definitions = new DefinitionCollection(defs);

            definitions.Attach(compiler);
            return(definitions);
        }