@tricoteuses/senat 2.8.6 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +1 -0
  2. package/lib/model/dosleg.d.ts +0 -29
  3. package/lib/model/questions.d.ts +20 -0
  4. package/lib/model/questions.js +32 -1
  5. package/lib/model/sens.d.ts +670 -82
  6. package/lib/raw_types/dosleg.d.ts +77 -1994
  7. package/lib/raw_types/questions.d.ts +70 -0
  8. package/lib/raw_types/sens.d.ts +5424 -1570
  9. package/lib/raw_types_schemats/ameli.d.ts +12 -2
  10. package/lib/raw_types_schemats/debats.d.ts +2 -2
  11. package/lib/raw_types_schemats/dosleg.d.ts +2 -1054
  12. package/lib/raw_types_schemats/questions.d.ts +4 -2
  13. package/lib/raw_types_schemats/sens.d.ts +4235 -29
  14. package/package.json +9 -10
  15. package/lib/aggregates.d.ts +0 -52
  16. package/lib/aggregates.js +0 -949
  17. package/lib/aggregates.mjs +0 -726
  18. package/lib/aggregates.ts +0 -852
  19. package/lib/config.mjs +0 -16
  20. package/lib/config.ts +0 -26
  21. package/lib/databases.mjs +0 -55
  22. package/lib/databases.ts +0 -68
  23. package/lib/datasets.mjs +0 -78
  24. package/lib/datasets.ts +0 -118
  25. package/lib/fields.d.ts +0 -10
  26. package/lib/fields.js +0 -68
  27. package/lib/fields.mjs +0 -22
  28. package/lib/fields.ts +0 -29
  29. package/lib/index.mjs +0 -7
  30. package/lib/index.ts +0 -64
  31. package/lib/inserters.d.ts +0 -98
  32. package/lib/inserters.js +0 -500
  33. package/lib/inserters.mjs +0 -360
  34. package/lib/inserters.ts +0 -521
  35. package/lib/legislatures.json +0 -38
  36. package/lib/loaders.mjs +0 -97
  37. package/lib/loaders.ts +0 -173
  38. package/lib/model/ameli.mjs +0 -57
  39. package/lib/model/ameli.ts +0 -86
  40. package/lib/model/debats.mjs +0 -43
  41. package/lib/model/debats.ts +0 -68
  42. package/lib/model/dosleg.mjs +0 -163
  43. package/lib/model/dosleg.ts +0 -204
  44. package/lib/model/index.mjs +0 -4
  45. package/lib/model/index.ts +0 -13
  46. package/lib/model/questions.mjs +0 -76
  47. package/lib/model/questions.ts +0 -102
  48. package/lib/model/sens.mjs +0 -339
  49. package/lib/model/sens.ts +0 -432
  50. package/lib/model/texte.mjs +0 -156
  51. package/lib/model/texte.ts +0 -174
  52. package/lib/raw_types_kysely/ameli.d.ts +0 -915
  53. package/lib/raw_types_kysely/ameli.js +0 -7
  54. package/lib/raw_types_kysely/ameli.mjs +0 -5
  55. package/lib/raw_types_kysely/ameli.ts +0 -951
  56. package/lib/raw_types_kysely/debats.d.ts +0 -207
  57. package/lib/raw_types_kysely/debats.js +0 -7
  58. package/lib/raw_types_kysely/debats.mjs +0 -5
  59. package/lib/raw_types_kysely/debats.ts +0 -222
  60. package/lib/raw_types_kysely/dosleg.d.ts +0 -3532
  61. package/lib/raw_types_kysely/dosleg.js +0 -7
  62. package/lib/raw_types_kysely/dosleg.mjs +0 -5
  63. package/lib/raw_types_kysely/dosleg.ts +0 -3621
  64. package/lib/raw_types_kysely/questions.d.ts +0 -414
  65. package/lib/raw_types_kysely/questions.js +0 -7
  66. package/lib/raw_types_kysely/questions.mjs +0 -5
  67. package/lib/raw_types_kysely/questions.ts +0 -426
  68. package/lib/raw_types_kysely/sens.d.ts +0 -4394
  69. package/lib/raw_types_kysely/sens.js +0 -7
  70. package/lib/raw_types_kysely/sens.mjs +0 -5
  71. package/lib/raw_types_kysely/sens.ts +0 -4499
  72. package/lib/raw_types_schemats/ameli.mjs +0 -2
  73. package/lib/raw_types_schemats/ameli.ts +0 -601
  74. package/lib/raw_types_schemats/debats.mjs +0 -2
  75. package/lib/raw_types_schemats/debats.ts +0 -145
  76. package/lib/raw_types_schemats/dosleg.mjs +0 -2
  77. package/lib/raw_types_schemats/dosleg.ts +0 -2193
  78. package/lib/raw_types_schemats/questions.mjs +0 -2
  79. package/lib/raw_types_schemats/questions.ts +0 -249
  80. package/lib/raw_types_schemats/sens.mjs +0 -2
  81. package/lib/raw_types_schemats/sens.ts +0 -2907
  82. package/lib/scripts/convert_data.mjs +0 -95
  83. package/lib/scripts/convert_data.ts +0 -119
  84. package/lib/scripts/datautil.mjs +0 -16
  85. package/lib/scripts/datautil.ts +0 -19
  86. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  87. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  88. package/lib/scripts/parse_textes.mjs +0 -38
  89. package/lib/scripts/parse_textes.ts +0 -52
  90. package/lib/scripts/retrieve_documents.mjs +0 -243
  91. package/lib/scripts/retrieve_documents.ts +0 -279
  92. package/lib/scripts/retrieve_open_data.mjs +0 -214
  93. package/lib/scripts/retrieve_open_data.ts +0 -261
  94. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -147
  95. package/lib/scripts/retrieve_senateurs_photos.ts +0 -177
  96. package/lib/scripts/retrieve_textes.d.ts +0 -1
  97. package/lib/scripts/retrieve_textes.mjs +0 -165
  98. package/lib/scripts/retrieve_textes.ts +0 -79
  99. package/lib/scripts/shared/cli_helpers.ts +0 -36
  100. package/lib/scripts/shared/util.ts +0 -33
  101. package/lib/strings.mjs +0 -18
  102. package/lib/strings.ts +0 -26
  103. package/lib/types/ameli.mjs +0 -13
  104. package/lib/types/ameli.ts +0 -21
  105. package/lib/types/debats.mjs +0 -2
  106. package/lib/types/debats.ts +0 -6
  107. package/lib/types/dosleg.mjs +0 -151
  108. package/lib/types/dosleg.ts +0 -284
  109. package/lib/types/questions.mjs +0 -1
  110. package/lib/types/questions.ts +0 -3
  111. package/lib/types/sens.mjs +0 -1
  112. package/lib/types/sens.ts +0 -12
  113. package/lib/types/sessions.mjs +0 -43
  114. package/lib/types/sessions.ts +0 -42
  115. package/lib/types/texte.mjs +0 -16
  116. package/lib/types/texte.ts +0 -66
  117. package/lib/typings/windows-1252.d.js +0 -2
  118. package/lib/typings/windows-1252.d.mjs +0 -2
  119. package/lib/typings/windows-1252.d.ts +0 -11
  120. package/lib/validators/config.mjs +0 -54
  121. package/lib/validators/config.ts +0 -79
  122. package/lib/validators/senat.d.ts +0 -0
  123. package/lib/validators/senat.js +0 -24
  124. package/lib/validators/senat.mjs +0 -24
  125. package/lib/validators/senat.ts +0 -26
@@ -1,174 +0,0 @@
1
- import { JSDOM } from "jsdom"
2
-
3
- import { AKN_WORKFLOW_IDENTIFICATION_STRUCTURE_REGEXP, AKN_IDENTIFICATION_STRUCTURE_REGEXP } from "../scripts/datautil"
4
- import {
5
- Alinea,
6
- Article,
7
- Division,
8
- DivisionContent,
9
- DivisionTag,
10
- DivisionType,
11
- FlatTexte, Step,
12
- Version,
13
- } from "../types/texte"
14
-
15
- function buildWorklow (metaElement: HTMLMetaElement): Step[] {
16
- const stepElements = metaElement.querySelectorAll("workflow step")
17
- const steps: Step[] = []
18
- for (const stepElement of stepElements) {
19
- const identification = stepElement.getAttribute("href") ?? ""
20
- const identificationParts = AKN_WORKFLOW_IDENTIFICATION_STRUCTURE_REGEXP.exec(identification)?.groups
21
- steps.push({
22
- eId: stepElement.getAttribute("eId")!,
23
- date: stepElement.getAttribute("date") ? new Date(stepElement.getAttribute("date") ?? "") : null,
24
- type: identificationParts?.type || null,
25
- session: identificationParts?.session || null,
26
- numero: identificationParts?.numTexte || null,
27
- version: identificationParts?.version ? identificationParts.version as Version : null,
28
- outcome: stepElement.getAttribute("outcome"),
29
- })
30
- }
31
- return steps
32
- }
33
-
34
- function buildDivision (node: Node, index: number): Division {
35
- const eId = (node as Element).getAttribute("eId")!
36
- const tag = node.nodeName as DivisionTag
37
- const level = DivisionType[tag]
38
- const titleNode = (node as Element).querySelector("num")
39
- const subtitleNode = (node as Element).querySelector("heading")
40
- const headings: DivisionContent[] = [
41
- ...(titleNode ? [{
42
- text: titleNode.textContent?.trim() ?? null,
43
- html: titleNode.innerHTML?.trim() ?? null,
44
- }] : []),
45
- ...(subtitleNode ? [{
46
- text: subtitleNode.textContent?.trim() ?? null,
47
- html: subtitleNode.innerHTML?.trim() ?? null,
48
- }] : []),
49
- ]
50
- const division = {
51
- index,
52
- eId,
53
- tag,
54
- level,
55
- headings,
56
- }
57
- if (tag === "article") {
58
- (division as Article).alineas = []
59
- }
60
- return division
61
- }
62
-
63
- function buildAlinea (contentNode: Node, alineaNode: Node): Alinea {
64
- const eId = (alineaNode as Element).getAttribute("eId")!
65
- const heading = {
66
- text: (alineaNode as Element).querySelector("num")?.textContent ?? null,
67
- }
68
- const pastille = (alineaNode as Element).getAttribute("data:pastille") ?? null
69
- return {
70
- eId,
71
- heading,
72
- text: (contentNode as Element).textContent?.trim() ?? null,
73
- html: (contentNode as Element).innerHTML?.trim() ?? null,
74
- pastille,
75
- }
76
- }
77
-
78
- function buildEmptyArticle (index: number): Article {
79
- return {
80
- index: index,
81
- eId: "",
82
- tag: "article",
83
- level: DivisionType["article"],
84
- headings: [],
85
- alineas: [],
86
- }
87
- }
88
-
89
- function flattenTexte (texteContentRoot: Node): Division[] {
90
- const divisions: Division[] = []
91
- let divisionIndex = 0
92
- const iter = (node: Node) => {
93
- if (node.nodeName === "content") {
94
- return
95
- }
96
- switch (node.nodeName) {
97
- case "tome":
98
- case "part":
99
- case "book":
100
- case "title":
101
- case "subtitle":
102
- case "chapter":
103
- case "section":
104
- case "subsection":
105
- case "paragraph":
106
- case "article":
107
- divisions.push(buildDivision(node, divisionIndex++))
108
- break
109
- }
110
- if (node.nodeName === "alinea") {
111
- Array.from(node.childNodes)
112
- // Find direct content children programmatically
113
- // because `:scope` selector does not work
114
- // https://github.com/jsdom/jsdom/issues/2998
115
- .filter((alineaChildNode: Node) => alineaChildNode.nodeName === "content")
116
- .forEach((alineaContentNode: Node) => {
117
- // Hypothesis: alineas should always be enclosed in articles
118
- let lastArticle = divisions.findLast(division => division.tag === "article") as Article
119
- if (!lastArticle) {
120
- lastArticle = buildEmptyArticle(divisionIndex++)
121
- divisions.push(lastArticle)
122
- }
123
- lastArticle.alineas.push(buildAlinea(alineaContentNode, node))
124
- })
125
- }
126
- if (node.hasChildNodes()) {
127
- node.childNodes.forEach((childNode: Node) => iter(childNode))
128
- }
129
- }
130
- iter(texteContentRoot)
131
- return divisions
132
- }
133
-
134
- export function transformTexte (document: Document): FlatTexte | null {
135
- let transformedTexte = null
136
- const metaElement = document.querySelector("meta")
137
- const identification = metaElement?.querySelector("FRBRExpression FRBRuri")?.getAttribute("value") ?? ""
138
- const identificationParts = AKN_IDENTIFICATION_STRUCTURE_REGEXP.exec(identification)?.groups
139
- const bodyElement = document.querySelector("body")
140
- try {
141
- transformedTexte = {
142
- title: metaElement?.querySelector("FRBRalias[name='intitule-court']")
143
- ?.getAttribute("value") || null,
144
- signetDossierLegislatifSenat:
145
- metaElement?.querySelector("FRBRalias[name='signet-dossier-legislatif-senat']")
146
- ?.getAttribute("value") || null,
147
- urlSenat: metaElement?.querySelector("FRBRalias[name='url-senat']")?.getAttribute("value") || null,
148
- urlAssemblee: metaElement?.querySelector("FRBRalias[name='url-AN']")?.getAttribute("value") || null,
149
- type: identificationParts?.type || null,
150
- session: identificationParts?.session || null,
151
- numero: identificationParts?.numTexte ? parseInt(identificationParts.numTexte) : null,
152
- version: identificationParts?.version ? identificationParts.version as Version : null,
153
- workflow: metaElement ? buildWorklow(metaElement) : [],
154
- divisions: bodyElement ? flattenTexte(bodyElement) : [],
155
- }
156
- } catch (error: any) {
157
- console.error(`Could not parse texte with error ${error}`)
158
- }
159
- return transformedTexte
160
- }
161
-
162
- export function parseTexte (texteXml: string): FlatTexte | null {
163
- const { document } = (new JSDOM(texteXml, {
164
- contentType: "text/xml",
165
- })).window
166
- return transformTexte(document)
167
- }
168
-
169
- // Prevent from memory leak
170
- // https://github.com/jsdom/jsdom/issues/2583#issuecomment-559520814
171
- export async function parseTexteFromFile (xmlFilePath: string): Promise<FlatTexte | null> {
172
- const { document } = (await JSDOM.fromFile(xmlFilePath, { contentType: "text/xml" })).window
173
- return transformTexte(document)
174
- }