diff --git a/src/lib/summaries.ts b/src/lib/summaries.ts
index f88d7ec..a8db87f 100644
--- a/src/lib/summaries.ts
+++ b/src/lib/summaries.ts
@@ -30,11 +30,42 @@ import {
type VersionsWrapper,
} from "$lib/legal"
+export const summarizeAggregateProperties: Summarizer = (access, value) => {
+ for (const summarizer of [
+ summarizeArticleProperties,
+ summarizeDossierLegislatifProperties,
+ summarizeIdccProperties,
+ summarizeJoProperties,
+ summarizeSectionTaProperties,
+ summarizeTextekaliProperties,
+ summarizeTextelrProperties,
+ summarizeTexteVersionProperties,
+ ]) {
+ const summary = summarizer(access, value)
+ if (summary !== undefined) {
+ return summary
+ }
+ }
+ return undefined
+}
+
export const summarizeArticleProperties: Summarizer = (access, value) => {
- if (access?.key === "article" && typeof value !== "number") {
+ if (
+ access?.key === "article" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of article by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "article", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "article") {
+ if (
+ access?.access?.key === "article" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "article", value)
}
@@ -96,7 +127,10 @@ export const summarizeArticleProperties: Summarizer = (access, value) => {
) {
return summarizeLienArt(access, value)
}
- if (access?.access?.key === "VERSION") {
+ if (
+ (access?.key === "VERSION" && !Array.isArray(value)) ||
+ (typeof access?.key === "number" && access?.access?.key === "VERSION")
+ ) {
const version = value as ArticleVersion
const lienArt = version.LIEN_ART
return {
@@ -137,12 +171,21 @@ export const summarizeDossierLegislatifProperties: Summarizer = (
access,
value,
) => {
- if (access?.key === "dossier_legislatif" && typeof value !== "number") {
+ if (
+ access?.key === "dossier_legislatif" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of dossier_legislatif by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "dossier_legislatif", value)
}
if (
- typeof access?.key === "number" &&
- access?.access?.key === "dossier_legislatif"
+ access?.access?.key === "dossier_legislatif" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
) {
return summarizeLegalObjectToLink(access, "dossier_legislatif", value)
}
@@ -160,10 +203,22 @@ export const summarizeDossierLegislatifProperties: Summarizer = (
}
export const summarizeIdccProperties: Summarizer = (access, value) => {
- if (access?.key === "idcc" && typeof value !== "number") {
+ if (
+ access?.key === "idcc" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of idcc by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "idcc", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "idcc") {
+ if (
+ access?.access?.key === "idcc" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "idcc", value)
}
@@ -171,10 +226,23 @@ export const summarizeIdccProperties: Summarizer = (access, value) => {
}
export const summarizeIdWrapperProperties: Summarizer = (access, value) => {
- if (access?.key === "id" && typeof value !== "number") {
+ if (
+ access?.key === "id" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of id by eli.
+ Object.keys(value as { [key: string]: unknown }).some(
+ // TODO: Fix regexp.
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "id", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "id") {
+ if (
+ access?.access?.key === "id" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "id", value)
}
@@ -182,10 +250,22 @@ export const summarizeIdWrapperProperties: Summarizer = (access, value) => {
}
export const summarizeJoProperties: Summarizer = (access, value) => {
- if (access?.key === "jo" && typeof value !== "number") {
+ if (
+ access?.key === "jo" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of jo by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "jo", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "jo") {
+ if (
+ access?.access?.key === "jo" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "jo", value)
}
@@ -455,10 +535,22 @@ export const summarizeLienSectionTaId: Summarizer = (access, value) => {
}
export const summarizeSectionTaProperties: Summarizer = (access, value) => {
- if (access?.key === "section_ta" && typeof value !== "number") {
+ if (
+ access?.key === "section_ta" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of section_ta by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "section_ta", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "section_ta") {
+ if (
+ access?.access?.key === "section_ta" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "section_ta", value)
}
@@ -506,10 +598,22 @@ export const summarizeSectionTaProperties: Summarizer = (access, value) => {
}
export const summarizeTextekaliProperties: Summarizer = (access, value) => {
- if (access?.key === "textekali" && typeof value !== "number") {
+ if (
+ access?.key === "textekali" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of textekali by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "textekali", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "textekali") {
+ if (
+ access?.access?.key === "textekali" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "textekali", value)
}
@@ -537,10 +641,22 @@ export const summarizeTextelrVersionLienTxt: Summarizer = (access, value) => {
}
export const summarizeTextelrProperties: Summarizer = (access, value) => {
- if (access?.key === "textelr" && typeof value !== "number") {
+ if (
+ access?.key === "textelr" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of textelr by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "textelr", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "textelr") {
+ if (
+ access?.access?.key === "textelr" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "textelr", value)
}
@@ -592,12 +708,22 @@ export const summarizeTextelrProperties: Summarizer = (access, value) => {
}
export const summarizeTexteVersionProperties: Summarizer = (access, value) => {
- if (access?.key === "texte_version" && typeof value !== "number") {
+ if (
+ access?.key === "texte_version" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of texte_version by id.
+ Object.keys(value as { [key: string]: unknown }).some(
+ // TODO: Fix regexp.
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "texte_version", value)
}
if (
- typeof access?.key === "number" &&
- access?.access?.key === "texte_version"
+ access?.access?.key === "texte_version" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
) {
return summarizeLegalObjectToLink(access, "texte_version", value)
}
@@ -695,10 +821,22 @@ export const summarizeVersionsWrapperProperties: Summarizer = (
access,
value,
) => {
- if (access?.key === "versions" && typeof value !== "number") {
+ if (
+ access?.key === "versions" &&
+ (value === undefined ||
+ // Ensure that value is not a dictionary of versions by eli.
+ Object.keys(value as { [key: string]: unknown }).some(
+ (key) => key.match(/^[A-Z]{8}\d{12}$/) === null,
+ ))
+ ) {
return summarizeLegalObject(access, "versions", value)
}
- if (typeof access?.key === "number" && access?.access?.key === "versions") {
+ if (
+ access?.access?.key === "versions" &&
+ (Array.isArray(access.parent) ||
+ (typeof access?.key === "string" &&
+ access.key.match(/^[A-Z]{8}\d{12}$/) !== null))
+ ) {
return summarizeLegalObjectToLink(access, "versions", value)
}
diff --git a/src/routes/articles/[id]/+page.svelte b/src/routes/articles/[id]/+page.svelte
index 7e3c1fa..2cdd894 100644
--- a/src/routes/articles/[id]/+page.svelte
+++ b/src/routes/articles/[id]/+page.svelte
@@ -3,7 +3,10 @@
import ArticleView from "$lib/components/ArticleView.svelte"
import IdPagesSwitcher from "$lib/components/IdPagesSwitcher.svelte"
- import { summarizeLegalObject } from "$lib/summaries"
+ import {
+ summarizeAggregateProperties,
+ summarizeLegalObject,
+ } from "$lib/summaries"
import type { PageData } from "./$types"
@@ -38,7 +41,12 @@
{#if showRawData}
-
+
{:else}
{/if}