From c68451b254cb637381518c11cdf12ab479b7f334 Mon Sep 17 00:00:00 2001 From: Niko Maroulis Date: Mon, 16 Jun 2025 09:22:50 -0400 Subject: [PATCH] fixed issues with latest elixir version --- .tool-versions | 4 +-- lib/dotenv.ex | 77 ++++++++++++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/.tool-versions b/.tool-versions index d4d27c3..da99a44 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -erlang 23.1.1 -elixir 1.11.1-otp-23 \ No newline at end of file +erlang 28.0.1 +elixir 1.18.3-otp-27 diff --git a/lib/dotenv.ex b/lib/dotenv.ex index d827daf..de55678 100644 --- a/lib/dotenv.ex +++ b/lib/dotenv.ex @@ -24,37 +24,43 @@ defmodule Dotenv do Dotenv.Supervisor.start_link(env_path) end - @quotes_pattern ~r/^(['"])(.*)\1$/ - @pattern ~r/ - \A - (?:export\s+)? # optional export - ([\w\.]+) # key - (?:\s*=\s*|:\s+?) # separator - ( # optional value begin - '(?:\'|[^'])*?' # single quoted value - | # or - "(?:\"|[^"])*?" # double quoted value - | # or - [^#\n]+? # unquoted value - )? # value end - (?:\s*\#.*)? # optional comment - \z - /x - - # https://regex101.com/r/XrvCwE/1 - @env_expand_pattern ~r/ - (?:^|[^\\]) # prevent to expand \\$ - ( # get variable key pattern - \$ # - (?: # - ([A-Z0-9_]*[A-Z_]+[A-Z0-9_]*) # get variable key - | # - (?: # - {([A-Z0-9_]*[A-Z_]+[A-Z0-9_]*)} # get variable key between {} - ) # - ) # - ) # - /x + defp quotes_pattern do + ~r/^(['"])(.*)\1$/ + end + + defp pattern do + ~r/ + \A + (?:export\s+)? # optional export + ([\w\.]+) # key + (?:\s*=\s*|:\s+?) # separator + ( # optional value begin + '(?:\'|[^'])*?' # single quoted value + | # or + "(?:\"|[^"])*?" # double quoted value + | # or + [^#\n]+? # unquoted value + )? # value end + (?:\s*\#.*)? # optional comment + \z + /x + end + + defp env_expand_pattern do + ~r/ + (?:^|[^\\]) # prevent to expand \\$ + ( # get variable key pattern + \$ # + (?: # + ([A-Z0-9_]*[A-Z_]+[A-Z0-9_]*) # get variable key + | # + (?: # + {([A-Z0-9_]*[A-Z_]+[A-Z0-9_]*)} # get variable key between {} + ) # + ) # + ) # + /x + end ############################################################################## # Server API @@ -141,7 +147,7 @@ defmodule Dotenv do values = String.split(contents, "\n") values - |> Enum.flat_map(&Regex.scan(@pattern, &1)) + |> Enum.flat_map(&Regex.scan(pattern(), &1)) |> trim_quotes_from_values |> Enum.reduce([], &expand_env/2) |> Enum.reduce(Map.new(), &collect_into_map/2) @@ -158,14 +164,11 @@ defmodule Dotenv do end defp trim_quotes(value) do - String.replace(value, @quotes_pattern, "\\2") + String.replace(value, quotes_pattern(), "\\2") end - # without value - defp expand_env([_whole, _k], acc), do: acc - defp expand_env([whole, k, v], acc) do - matchs = Regex.scan(@env_expand_pattern, v) + matchs = Regex.scan(env_expand_pattern(), v) new_value = case Enum.empty?(matchs) do