Add function summarizeAggregateProperties.

This commit is contained in:
Emmanuel 2022-09-01 09:45:34 +02:00
parent b24eb4712b
commit 1b6a2b7aed
2 changed files with 171 additions and 25 deletions

View file

@ -30,11 +30,42 @@ import {
type VersionsWrapper, type VersionsWrapper,
} from "$lib/legal" } 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) => { 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) 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) return summarizeLegalObjectToLink(access, "article", value)
} }
@ -96,7 +127,10 @@ export const summarizeArticleProperties: Summarizer = (access, value) => {
) { ) {
return summarizeLienArt(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 version = value as ArticleVersion
const lienArt = version.LIEN_ART const lienArt = version.LIEN_ART
return { return {
@ -137,12 +171,21 @@ export const summarizeDossierLegislatifProperties: Summarizer = (
access, access,
value, 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) return summarizeLegalObject(access, "dossier_legislatif", value)
} }
if ( 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) return summarizeLegalObjectToLink(access, "dossier_legislatif", value)
} }
@ -160,10 +203,22 @@ export const summarizeDossierLegislatifProperties: Summarizer = (
} }
export const summarizeIdccProperties: Summarizer = (access, value) => { 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) 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) return summarizeLegalObjectToLink(access, "idcc", value)
} }
@ -171,10 +226,23 @@ export const summarizeIdccProperties: Summarizer = (access, value) => {
} }
export const summarizeIdWrapperProperties: 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) 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) return summarizeLegalObjectToLink(access, "id", value)
} }
@ -182,10 +250,22 @@ export const summarizeIdWrapperProperties: Summarizer = (access, value) => {
} }
export const summarizeJoProperties: 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) 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) return summarizeLegalObjectToLink(access, "jo", value)
} }
@ -455,10 +535,22 @@ export const summarizeLienSectionTaId: Summarizer = (access, value) => {
} }
export const summarizeSectionTaProperties: 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) 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) return summarizeLegalObjectToLink(access, "section_ta", value)
} }
@ -506,10 +598,22 @@ export const summarizeSectionTaProperties: Summarizer = (access, value) => {
} }
export const summarizeTextekaliProperties: 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) 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) return summarizeLegalObjectToLink(access, "textekali", value)
} }
@ -537,10 +641,22 @@ export const summarizeTextelrVersionLienTxt: Summarizer = (access, value) => {
} }
export const summarizeTextelrProperties: 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) 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) return summarizeLegalObjectToLink(access, "textelr", value)
} }
@ -592,12 +708,22 @@ export const summarizeTextelrProperties: Summarizer = (access, value) => {
} }
export const summarizeTexteVersionProperties: 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) return summarizeLegalObject(access, "texte_version", value)
} }
if ( 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) return summarizeLegalObjectToLink(access, "texte_version", value)
} }
@ -695,10 +821,22 @@ export const summarizeVersionsWrapperProperties: Summarizer = (
access, access,
value, 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) 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) return summarizeLegalObjectToLink(access, "versions", value)
} }

View file

@ -3,7 +3,10 @@
import ArticleView from "$lib/components/ArticleView.svelte" import ArticleView from "$lib/components/ArticleView.svelte"
import IdPagesSwitcher from "$lib/components/IdPagesSwitcher.svelte" import IdPagesSwitcher from "$lib/components/IdPagesSwitcher.svelte"
import { summarizeLegalObject } from "$lib/summaries" import {
summarizeAggregateProperties,
summarizeLegalObject,
} from "$lib/summaries"
import type { PageData } from "./$types" import type { PageData } from "./$types"
@ -38,7 +41,12 @@
</form> </form>
{#if showRawData} {#if showRawData}
<TreeView frame={false} open value={data} /> <TreeView
frame={false}
open
summarize={summarizeAggregateProperties}
value={data}
/>
{:else} {:else}
<ArticleView {article} {data} /> <ArticleView {article} {data} />
{/if} {/if}