From 92871da51a46b0428b1a5f7acd1c35ecc937b78a Mon Sep 17 00:00:00 2001
From: David Smadja <david.smadja@assemblee-nationale.fr>
Date: Mon, 10 Feb 2025 14:40:33 +0100
Subject: [PATCH] Modify url templates placeholders in env file

---
 example.env             |  4 ++--
 src/lib/repositories.ts | 43 +++++++++++++++--------------------------
 2 files changed, 18 insertions(+), 29 deletions(-)

diff --git a/example.env b/example.env
index 5a791d6b3..a158b1a04 100644
--- a/example.env
+++ b/example.env
@@ -75,8 +75,8 @@ PUBLIC_MATOMO_SUBDOMAINS="*.DOMAIN"
 PUBLIC_OPENFISCA_BRANCH="master"
 PUBLIC_OPENFISCA_GROUP="openfisca"
 PUBLIC_OPENFISCA_PROJECT="openfisca-france"
-PUBLIC_OPENFISCA_REPOSITORY_RAW_URL_TEMPLATE="https://raw.githubusercontent.com/${group}/${project}/${branch}/${path}"
-PUBLIC_OPENFISCA_REPOSITORY_URL_TEMPLATE="https://github.com/${group}/${project}/blob/${branch}/${path}"
+PUBLIC_OPENFISCA_REPOSITORY_RAW_URL_TEMPLATE="https://raw.githubusercontent.com/$<group>/$<project>/$<branch>/$<path>"
+PUBLIC_OPENFISCA_REPOSITORY_URL_TEMPLATE="https://github.com/$<group>/$<project>/blob/$<branch>/$<path>"
 
 # URL of portal site (used when clicking on left logo in menu bar)
 PUBLIC_PORTAL_URL="https://leximpact.an.fr/"
diff --git a/src/lib/repositories.ts b/src/lib/repositories.ts
index e67c77c49..3a7243af4 100644
--- a/src/lib/repositories.ts
+++ b/src/lib/repositories.ts
@@ -1,5 +1,4 @@
 import type { Parameter } from "@openfisca/json-model"
-
 export interface RepositoryConfig {
   branch: string
   group: string
@@ -12,40 +11,30 @@ export function newParameterRepositoryRawUrl(
   { branch, group, project, rawUrlTemplate }: RepositoryConfig,
   parameter: Parameter,
 ): string | undefined {
-  const path = parameter.file_path
+  const path = parameter.file_path;
   if (path === undefined) {
-    return undefined
+    return undefined;
   }
-  // Can't use:
-  // return eval("`" + rawUrlTemplate + "`")
-  // because using direct eval with a bundler is not recommended and may cause problems
-  // (more info: https://esbuild.github.io/link/direct-eval)
-  return new Function(
-    "branch",
-    "group",
-    "project",
-    "path",
-    "return `" + rawUrlTemplate + "`",
-  )(branch, group, project, path)
+  const url = rawUrlTemplate
+    .replace("$<group>", group)
+    .replace("$<project>", project)
+    .replace("$<branch>", branch)
+    .replace("$<path>", path);
+  return url;
 }
 
 export function newParameterRepositoryUrl(
   { branch, group, project, urlTemplate }: RepositoryConfig,
   parameter: Parameter,
 ): string | undefined {
-  const path = parameter.file_path
+  const path = parameter.file_path;
   if (path === undefined) {
-    return undefined
+    return undefined;
   }
-  // Can't use:
-  // return eval("`" + urlTemplate + "`")
-  // because using direct eval with a bundler is not recommended and may cause problems
-  // (more info: https://esbuild.github.io/link/direct-eval)
-  return new Function(
-    "branch",
-    "group",
-    "project",
-    "path",
-    "return `" + urlTemplate + "`",
-  )(branch, group, project, path)
+  const url = urlTemplate
+    .replace("$<group>", group)
+    .replace("$<project>", project)
+    .replace("$<branch>", branch)
+    .replace("$<path>", path);
+  return url;
 }
-- 
GitLab