@tricoteuses/senat 2.7.1 → 2.8.4

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 (119) hide show
  1. package/lib/aggregates.d.ts +52 -0
  2. package/lib/aggregates.js +949 -0
  3. package/lib/aggregates.mjs +726 -0
  4. package/lib/aggregates.ts +852 -0
  5. package/lib/config.mjs +16 -0
  6. package/lib/config.ts +26 -0
  7. package/lib/databases.mjs +55 -0
  8. package/lib/databases.ts +68 -0
  9. package/lib/datasets.mjs +78 -0
  10. package/lib/datasets.ts +118 -0
  11. package/lib/fields.d.ts +10 -0
  12. package/lib/fields.js +68 -0
  13. package/lib/fields.mjs +22 -0
  14. package/lib/fields.ts +29 -0
  15. package/lib/index.mjs +7 -0
  16. package/lib/index.ts +64 -0
  17. package/lib/inserters.d.ts +98 -0
  18. package/lib/inserters.js +500 -0
  19. package/lib/inserters.mjs +360 -0
  20. package/lib/inserters.ts +521 -0
  21. package/lib/loaders.d.ts +1 -0
  22. package/lib/loaders.js +5 -0
  23. package/lib/loaders.mjs +97 -0
  24. package/lib/loaders.ts +173 -0
  25. package/lib/model/agenda.js +22 -22
  26. package/lib/model/ameli.mjs +57 -0
  27. package/lib/model/ameli.ts +86 -0
  28. package/lib/model/debats.mjs +43 -0
  29. package/lib/model/debats.ts +68 -0
  30. package/lib/model/dosleg.mjs +163 -0
  31. package/lib/model/dosleg.ts +204 -0
  32. package/lib/model/index.mjs +4 -0
  33. package/lib/model/index.ts +13 -0
  34. package/lib/model/questions.d.ts +0 -20
  35. package/lib/model/questions.js +1 -32
  36. package/lib/model/questions.mjs +76 -0
  37. package/lib/model/questions.ts +102 -0
  38. package/lib/model/sens.mjs +339 -0
  39. package/lib/model/sens.ts +432 -0
  40. package/lib/model/texte.mjs +156 -0
  41. package/lib/model/texte.ts +174 -0
  42. package/lib/raw_types/ameli.d.ts +20 -0
  43. package/lib/raw_types/questions.d.ts +4 -70
  44. package/lib/raw_types_kysely/ameli.d.ts +915 -0
  45. package/lib/raw_types_kysely/ameli.js +7 -0
  46. package/lib/raw_types_kysely/ameli.mjs +5 -0
  47. package/lib/raw_types_kysely/ameli.ts +951 -0
  48. package/lib/raw_types_kysely/debats.d.ts +207 -0
  49. package/lib/raw_types_kysely/debats.js +7 -0
  50. package/lib/raw_types_kysely/debats.mjs +5 -0
  51. package/lib/raw_types_kysely/debats.ts +222 -0
  52. package/lib/raw_types_kysely/dosleg.d.ts +3532 -0
  53. package/lib/raw_types_kysely/dosleg.js +7 -0
  54. package/lib/raw_types_kysely/dosleg.mjs +5 -0
  55. package/lib/raw_types_kysely/dosleg.ts +3621 -0
  56. package/lib/raw_types_kysely/questions.d.ts +414 -0
  57. package/lib/raw_types_kysely/questions.js +7 -0
  58. package/lib/raw_types_kysely/questions.mjs +5 -0
  59. package/lib/raw_types_kysely/questions.ts +426 -0
  60. package/lib/raw_types_kysely/sens.d.ts +4394 -0
  61. package/lib/raw_types_kysely/sens.js +7 -0
  62. package/lib/raw_types_kysely/sens.mjs +5 -0
  63. package/lib/raw_types_kysely/sens.ts +4499 -0
  64. package/lib/raw_types_schemats/ameli.mjs +2 -0
  65. package/lib/raw_types_schemats/ameli.ts +601 -0
  66. package/lib/raw_types_schemats/debats.mjs +2 -0
  67. package/lib/raw_types_schemats/debats.ts +145 -0
  68. package/lib/raw_types_schemats/dosleg.mjs +2 -0
  69. package/lib/raw_types_schemats/dosleg.ts +2193 -0
  70. package/lib/raw_types_schemats/questions.mjs +2 -0
  71. package/lib/raw_types_schemats/questions.ts +249 -0
  72. package/lib/raw_types_schemats/sens.mjs +2 -0
  73. package/lib/raw_types_schemats/sens.ts +2907 -0
  74. package/lib/scripts/convert_data.mjs +95 -0
  75. package/lib/scripts/convert_data.ts +119 -0
  76. package/lib/scripts/data-download.d.ts +1 -0
  77. package/lib/scripts/data-download.js +9 -0
  78. package/lib/scripts/datautil.mjs +16 -0
  79. package/lib/scripts/datautil.ts +19 -0
  80. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  81. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  82. package/lib/scripts/parse_textes.mjs +38 -0
  83. package/lib/scripts/parse_textes.ts +52 -0
  84. package/lib/scripts/retrieve_documents.mjs +243 -0
  85. package/lib/scripts/retrieve_documents.ts +279 -0
  86. package/lib/scripts/retrieve_open_data.js +11 -9
  87. package/lib/scripts/retrieve_open_data.mjs +214 -0
  88. package/lib/scripts/retrieve_open_data.ts +261 -0
  89. package/lib/scripts/retrieve_senateurs_photos.mjs +147 -0
  90. package/lib/scripts/retrieve_senateurs_photos.ts +177 -0
  91. package/lib/scripts/retrieve_textes.d.ts +1 -0
  92. package/lib/scripts/retrieve_textes.mjs +165 -0
  93. package/lib/scripts/retrieve_textes.ts +79 -0
  94. package/lib/scripts/shared/cli_helpers.ts +36 -0
  95. package/lib/scripts/shared/util.ts +33 -0
  96. package/lib/strings.mjs +18 -0
  97. package/lib/strings.ts +26 -0
  98. package/lib/types/ameli.mjs +13 -0
  99. package/lib/types/ameli.ts +21 -0
  100. package/lib/types/debats.mjs +2 -0
  101. package/lib/types/debats.ts +6 -0
  102. package/lib/types/dosleg.mjs +151 -0
  103. package/lib/types/dosleg.ts +284 -0
  104. package/lib/types/questions.mjs +1 -0
  105. package/lib/types/questions.ts +3 -0
  106. package/lib/types/sens.mjs +1 -0
  107. package/lib/types/sens.ts +12 -0
  108. package/lib/types/sessions.mjs +43 -0
  109. package/lib/types/sessions.ts +42 -0
  110. package/lib/types/texte.mjs +16 -0
  111. package/lib/types/texte.ts +66 -0
  112. package/lib/typings/windows-1252.d.js +2 -0
  113. package/lib/typings/windows-1252.d.mjs +2 -0
  114. package/lib/typings/windows-1252.d.ts +11 -0
  115. package/lib/validators/config.mjs +54 -0
  116. package/lib/validators/config.ts +79 -0
  117. package/lib/validators/senat.mjs +24 -0
  118. package/lib/validators/senat.ts +26 -0
  119. package/package.json +7 -5
package/lib/config.mjs ADDED
@@ -0,0 +1,16 @@
1
+ require("dotenv").config();
2
+ import { validateConfig } from "./validators/config";
3
+ const config = {
4
+ db: {
5
+ host: process.env.TRICOTEUSES_SENAT_DB_HOST || "localhost",
6
+ password: process.env.TRICOTEUSES_SENAT_DB_PASSWORD || "opendata",
7
+ port: process.env.TRICOTEUSES_SENAT_DB_PORT || 5432,
8
+ user: process.env.TRICOTEUSES_SENAT_DB_USER || "opendata",
9
+ },
10
+ };
11
+ const [validConfig, error] = validateConfig(config);
12
+ if (error !== null) {
13
+ console.error(`Error in configuration:\n${JSON.stringify(validConfig, null, 2)}\nError:\n${JSON.stringify(error, null, 2)}`);
14
+ process.exit(-1);
15
+ }
16
+ export default validConfig;
package/lib/config.ts ADDED
@@ -0,0 +1,26 @@
1
+ require("dotenv").config()
2
+
3
+ import { validateConfig } from "./validators/config"
4
+
5
+ const config = {
6
+ db: {
7
+ host: process.env.TRICOTEUSES_SENAT_DB_HOST || "localhost",
8
+ password: process.env.TRICOTEUSES_SENAT_DB_PASSWORD || "opendata",
9
+ port: process.env.TRICOTEUSES_SENAT_DB_PORT || 5432,
10
+ user: process.env.TRICOTEUSES_SENAT_DB_USER || "opendata",
11
+ },
12
+ }
13
+
14
+ const [validConfig, error] = validateConfig(config)
15
+ if (error !== null) {
16
+ console.error(
17
+ `Error in configuration:\n${JSON.stringify(
18
+ validConfig,
19
+ null,
20
+ 2,
21
+ )}\nError:\n${JSON.stringify(error, null, 2)}`,
22
+ )
23
+ process.exit(-1)
24
+ }
25
+
26
+ export default validConfig
@@ -0,0 +1,55 @@
1
+ import { Kysely, PostgresDialect } from "kysely";
2
+ import * as pg from "pg";
3
+ import Cursor from "pg-cursor";
4
+ import PgPromise from "pg-promise";
5
+ import config from "./config";
6
+ import { datasets } from "./datasets";
7
+ const int8TypeId = 20;
8
+ // Map int8 to number.
9
+ pg.types.setTypeParser(int8TypeId, (val) => {
10
+ return parseInt(val, 10);
11
+ });
12
+ export const pgPromise = PgPromise();
13
+ export const dbNames = ["ameli", "debats", "dosleg"];
14
+ export const dbByName = {};
15
+ for (const name of dbNames) {
16
+ dbByName[name] = pgPromise({
17
+ database: name,
18
+ host: config.db.host,
19
+ password: config.db.password,
20
+ port: config.db.port,
21
+ user: config.db.user,
22
+ });
23
+ }
24
+ function createDb(database, schema) {
25
+ const dialect = new PostgresDialect({
26
+ pool: new pg.Pool({
27
+ database: database,
28
+ host: config.db.host,
29
+ user: config.db.user,
30
+ password: config.db.password,
31
+ port: config.db.port,
32
+ max: 10,
33
+ }),
34
+ cursor: Cursor,
35
+ });
36
+ return new Kysely({
37
+ log: ["error"],
38
+ dialect: dialect,
39
+ }).withSchema(schema);
40
+ }
41
+ export const dbDosleg = createDb(datasets.dosleg.database, datasets.dosleg.schema);
42
+ export const dbQuestions = createDb(datasets.questions.database, datasets.questions.schema);
43
+ export const dbSens = createDb(datasets.sens.database, datasets.sens.schema);
44
+ export let dbSharedConnectionObjectByName = {};
45
+ export async function checkDatabase(name) {
46
+ // Check that database exists.
47
+ const db = dbByName[name];
48
+ dbSharedConnectionObjectByName[name] = await db.connect();
49
+ return db;
50
+ }
51
+ export async function checkDatabases() {
52
+ for (const name of dbNames) {
53
+ await checkDatabase(name);
54
+ }
55
+ }
@@ -0,0 +1,68 @@
1
+ import { Kysely, PostgresDialect } from "kysely"
2
+ import * as pg from "pg"
3
+ import Cursor from "pg-cursor"
4
+ import PgPromise from "pg-promise"
5
+
6
+ import config from "./config"
7
+ import { datasets } from "./datasets"
8
+ import { DB as DoslegDatabase } from "./raw_types_kysely/dosleg"
9
+ import { DB as QuestionsDatabase } from "./raw_types_kysely/questions"
10
+ import { DB as SensDatabase } from "./raw_types_kysely/sens"
11
+
12
+ const int8TypeId = 20
13
+ // Map int8 to number.
14
+ pg.types.setTypeParser(int8TypeId, (val) => {
15
+ return parseInt(val, 10)
16
+ })
17
+
18
+ export const pgPromise = PgPromise()
19
+ export const dbNames = ["ameli", "debats", "dosleg"]
20
+ export const dbByName: { [name: string]: any } = {}
21
+ for (const name of dbNames) {
22
+ dbByName[name] = pgPromise({
23
+ database: name,
24
+ host: config.db.host,
25
+ password: config.db.password,
26
+ port: config.db.port,
27
+ user: config.db.user,
28
+ })
29
+ }
30
+
31
+ function createDb<T> (database: string, schema: string) {
32
+ const dialect = new PostgresDialect({
33
+ pool: new pg.Pool({
34
+ database: database,
35
+ host: config.db.host,
36
+ user: config.db.user,
37
+ password: config.db.password,
38
+ port: config.db.port,
39
+ max: 10,
40
+ }),
41
+ cursor: Cursor,
42
+ })
43
+ return new Kysely<T>({
44
+ log: ["error"],
45
+ dialect: dialect,
46
+ }).withSchema(schema)
47
+ }
48
+
49
+ export const dbDosleg = createDb<DoslegDatabase>(datasets.dosleg.database, datasets.dosleg.schema)
50
+ export const dbQuestions = createDb<QuestionsDatabase>(datasets.questions.database, datasets.questions.schema)
51
+ export const dbSens = createDb<SensDatabase>(datasets.sens.database, datasets.sens.schema)
52
+
53
+ export let dbSharedConnectionObjectByName: {
54
+ [name: string]: PgPromise.IConnected<unknown, any>
55
+ } = {}
56
+
57
+ export async function checkDatabase(name: string) {
58
+ // Check that database exists.
59
+ const db = dbByName[name]
60
+ dbSharedConnectionObjectByName[name] = await db.connect()
61
+ return db
62
+ }
63
+
64
+ export async function checkDatabases() {
65
+ for (const name of dbNames) {
66
+ await checkDatabase(name)
67
+ }
68
+ }
@@ -0,0 +1,78 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import assert from "assert";
4
+ export var EnabledDatasets;
5
+ (function (EnabledDatasets) {
6
+ EnabledDatasets[EnabledDatasets["None"] = 0] = "None";
7
+ EnabledDatasets[EnabledDatasets["Ameli"] = 1] = "Ameli";
8
+ EnabledDatasets[EnabledDatasets["Debats"] = 2] = "Debats";
9
+ EnabledDatasets[EnabledDatasets["DosLeg"] = 4] = "DosLeg";
10
+ EnabledDatasets[EnabledDatasets["Questions"] = 8] = "Questions";
11
+ EnabledDatasets[EnabledDatasets["Sens"] = 16] = "Sens";
12
+ EnabledDatasets[EnabledDatasets["PhotosSenateurs"] = 32] = "PhotosSenateurs";
13
+ EnabledDatasets[EnabledDatasets["All"] = 63] = "All";
14
+ })(EnabledDatasets || (EnabledDatasets = {}));
15
+ export const datasets = {
16
+ ameli: {
17
+ database: "ameli",
18
+ repairEncoding: false,
19
+ repairZip: (dataset, dataDir) => {
20
+ const sqlFilename = `${dataset.database}.sql`;
21
+ const sqlFilePath = path.join(dataDir, sqlFilename);
22
+ fs.removeSync(sqlFilePath);
23
+ fs.moveSync(path.join(dataDir, "var", "opt", "opendata", sqlFilename), sqlFilePath);
24
+ },
25
+ schema: "public",
26
+ title: "Amendements",
27
+ url: "https://data.senat.fr/data/ameli/ameli.zip",
28
+ },
29
+ debats: {
30
+ database: "debats",
31
+ repairEncoding: true,
32
+ schema: "public",
33
+ title: "Informations relatives aux comptes rendus intégraux de la séance publique",
34
+ url: "https://data.senat.fr/data/debats/debats.zip",
35
+ },
36
+ dosleg: {
37
+ database: "dosleg",
38
+ repairEncoding: true,
39
+ schema: "public",
40
+ title: "Dossiers législatifs",
41
+ url: "https://data.senat.fr/data/dosleg/dosleg.zip",
42
+ },
43
+ questions: {
44
+ database: "questions",
45
+ repairEncoding: true,
46
+ schema: "questions",
47
+ title: "Questions écrites et orales posées par les sénateurs au Gouvernement",
48
+ url: "https://data.senat.fr/data/questions/questions.zip",
49
+ },
50
+ sens: {
51
+ database: "sens",
52
+ repairEncoding: true,
53
+ repairZip: (dataset, dataDir) => {
54
+ const sqlFilename = `${dataset.database}.sql`;
55
+ const sqlFilePath = path.join(dataDir, sqlFilename);
56
+ fs.removeSync(sqlFilePath);
57
+ fs.moveSync(path.join(dataDir, "export_sens.sql"), sqlFilePath);
58
+ },
59
+ schema: "public",
60
+ title: "Sénateurs (y compris organes et présence)",
61
+ url: "https://data.senat.fr/data/senateurs/export_sens.zip",
62
+ },
63
+ };
64
+ export function getEnabledDatasets(categories) {
65
+ categories.map((datasetName) => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
66
+ return categories.reduce((enabledDatasets, datasetName) => enabledDatasets |
67
+ EnabledDatasets[datasetName], EnabledDatasets.None);
68
+ }
69
+ export function getChosenFromEnabledDatasets(categories) {
70
+ const enabledDatasets = getEnabledDatasets(categories);
71
+ return [
72
+ enabledDatasets & EnabledDatasets.Ameli ? datasets.ameli : null,
73
+ enabledDatasets & EnabledDatasets.Debats ? datasets.debats : null,
74
+ enabledDatasets & EnabledDatasets.DosLeg ? datasets.dosleg : null,
75
+ enabledDatasets & EnabledDatasets.Questions ? datasets.questions : null,
76
+ enabledDatasets & EnabledDatasets.Sens ? datasets.sens : null,
77
+ ].filter((dataset) => dataset !== null);
78
+ }
@@ -0,0 +1,118 @@
1
+ import fs from "fs-extra"
2
+ import path from "path"
3
+ import assert from "assert"
4
+
5
+ export interface Dataset {
6
+ database: string
7
+ repairEncoding: boolean
8
+ repairZip?: (dataset: Dataset, dataDir: string) => void
9
+ schema: string
10
+ title: string
11
+ url: string
12
+ }
13
+
14
+ export interface Datasets {
15
+ ameli: Dataset
16
+ debats: Dataset
17
+ dosleg: Dataset
18
+ questions: Dataset
19
+ sens: Dataset
20
+ }
21
+
22
+ export enum EnabledDatasets {
23
+ None = 0,
24
+ Ameli = 1 << 0,
25
+ Debats = 1 << 1,
26
+ DosLeg = 1 << 2,
27
+ Questions = 1 << 3,
28
+ Sens = 1 << 4,
29
+ PhotosSenateurs = 1 << 5,
30
+ All = Ameli | Debats | DosLeg | Questions | Sens | PhotosSenateurs,
31
+ }
32
+
33
+ export const datasets: Datasets = {
34
+ ameli: {
35
+ database: "ameli",
36
+ repairEncoding: false,
37
+ repairZip: (dataset: Dataset, dataDir: string) => {
38
+ const sqlFilename = `${dataset.database}.sql`
39
+ const sqlFilePath = path.join(dataDir, sqlFilename)
40
+ fs.removeSync(sqlFilePath)
41
+ fs.moveSync(
42
+ path.join(dataDir, "var", "opt", "opendata", sqlFilename),
43
+ sqlFilePath,
44
+ )
45
+ },
46
+ schema: "public",
47
+ title: "Amendements",
48
+ url: "https://data.senat.fr/data/ameli/ameli.zip",
49
+ },
50
+ debats: {
51
+ database: "debats",
52
+ repairEncoding: true,
53
+ schema: "public",
54
+ title:
55
+ "Informations relatives aux comptes rendus intégraux de la séance publique",
56
+ url: "https://data.senat.fr/data/debats/debats.zip",
57
+ },
58
+ dosleg: {
59
+ database: "dosleg",
60
+ repairEncoding: true,
61
+ schema: "public",
62
+ title: "Dossiers législatifs",
63
+ url: "https://data.senat.fr/data/dosleg/dosleg.zip",
64
+ },
65
+ questions: {
66
+ database: "questions",
67
+ repairEncoding: true,
68
+ schema: "questions",
69
+ title:
70
+ "Questions écrites et orales posées par les sénateurs au Gouvernement",
71
+ url: "https://data.senat.fr/data/questions/questions.zip",
72
+ },
73
+ sens: {
74
+ database: "sens",
75
+ repairEncoding: true,
76
+ repairZip: (dataset: Dataset, dataDir: string) => {
77
+ const sqlFilename = `${dataset.database}.sql`
78
+ const sqlFilePath = path.join(dataDir, sqlFilename)
79
+ fs.removeSync(sqlFilePath)
80
+ fs.moveSync(path.join(dataDir, "export_sens.sql"), sqlFilePath)
81
+ },
82
+ schema: "public",
83
+ title: "Sénateurs (y compris organes et présence)",
84
+ url: "https://data.senat.fr/data/senateurs/export_sens.zip",
85
+ },
86
+ }
87
+
88
+ export function getEnabledDatasets(categories: any): EnabledDatasets {
89
+ categories.map((datasetName: string) =>
90
+ assert.notStrictEqual(
91
+ (EnabledDatasets as any as { [name: string]: EnabledDatasets })[
92
+ datasetName
93
+ ],
94
+ undefined,
95
+ `Unknown name of dataset: ${datasetName}`,
96
+ ),
97
+ )
98
+
99
+ return categories.reduce(
100
+ (enabledDatasets: EnabledDatasets, datasetName: string): EnabledDatasets =>
101
+ enabledDatasets |
102
+ (EnabledDatasets as any as { [name: string]: EnabledDatasets })[
103
+ datasetName
104
+ ],
105
+ EnabledDatasets.None,
106
+ )
107
+ }
108
+
109
+ export function getChosenFromEnabledDatasets(categories: any): Dataset[] {
110
+ const enabledDatasets = getEnabledDatasets(categories)
111
+ return [
112
+ enabledDatasets & EnabledDatasets.Ameli ? datasets.ameli : null,
113
+ enabledDatasets & EnabledDatasets.Debats ? datasets.debats : null,
114
+ enabledDatasets & EnabledDatasets.DosLeg ? datasets.dosleg : null,
115
+ enabledDatasets & EnabledDatasets.Questions ? datasets.questions : null,
116
+ enabledDatasets & EnabledDatasets.Sens ? datasets.sens : null,
117
+ ].filter((dataset: Dataset | null) => dataset !== null) as Dataset[]
118
+ }
@@ -0,0 +1,10 @@
1
+ export declare function parseIntFields(fieldsNames: string[], entry: {
2
+ [fieldName: string]: any;
3
+ } | null): {
4
+ [fieldName: string]: any;
5
+ } | null;
6
+ export declare function trimFieldsRight(fieldsNames: string[], entry: {
7
+ [fieldName: string]: any;
8
+ } | null): {
9
+ [fieldName: string]: any;
10
+ } | null;
package/lib/fields.js ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.js");
4
+ require("core-js/modules/es.symbol.description.js");
5
+ require("core-js/modules/es.symbol.iterator.js");
6
+ require("core-js/modules/es.array.from.js");
7
+ require("core-js/modules/es.array.is-array.js");
8
+ require("core-js/modules/es.array.iterator.js");
9
+ require("core-js/modules/es.array.slice.js");
10
+ require("core-js/modules/es.date.to-string.js");
11
+ require("core-js/modules/es.function.name.js");
12
+ require("core-js/modules/es.object.define-property.js");
13
+ require("core-js/modules/es.object.to-string.js");
14
+ require("core-js/modules/es.regexp.exec.js");
15
+ require("core-js/modules/es.regexp.to-string.js");
16
+ require("core-js/modules/es.string.iterator.js");
17
+ require("core-js/modules/web.dom-collections.iterator.js");
18
+ Object.defineProperty(exports, "__esModule", {
19
+ value: true
20
+ });
21
+ exports.parseIntFields = parseIntFields;
22
+ exports.trimFieldsRight = trimFieldsRight;
23
+ require("core-js/modules/es.parse-int.js");
24
+ require("core-js/modules/es.string.trim-end.js");
25
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
26
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
27
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
28
+ function parseIntFields(fieldsNames, entry) {
29
+ if (entry === null) {
30
+ return null;
31
+ }
32
+ var _iterator = _createForOfIteratorHelper(fieldsNames),
33
+ _step;
34
+ try {
35
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
36
+ var fieldName = _step.value;
37
+ if (entry[fieldName] !== null) {
38
+ entry[fieldName] = parseInt(entry[fieldName]);
39
+ }
40
+ }
41
+ } catch (err) {
42
+ _iterator.e(err);
43
+ } finally {
44
+ _iterator.f();
45
+ }
46
+ return entry;
47
+ }
48
+ function trimFieldsRight(fieldsNames, entry) {
49
+ if (entry === null) {
50
+ return null;
51
+ }
52
+ var _iterator2 = _createForOfIteratorHelper(fieldsNames),
53
+ _step2;
54
+ try {
55
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
56
+ var fieldName = _step2.value;
57
+ if (entry[fieldName] != null) {
58
+ entry[fieldName] = entry[fieldName].trimEnd();
59
+ }
60
+ }
61
+ } catch (err) {
62
+ _iterator2.e(err);
63
+ } finally {
64
+ _iterator2.f();
65
+ }
66
+ return entry;
67
+ }
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUludEZpZWxkcyIsImZpZWxkc05hbWVzIiwiZW50cnkiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwiZmllbGROYW1lIiwidmFsdWUiLCJwYXJzZUludCIsImVyciIsImUiLCJmIiwidHJpbUZpZWxkc1JpZ2h0IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRyaW1FbmQiXSwic291cmNlcyI6WyIuLi9zcmMvZmllbGRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwYXJzZUludEZpZWxkcyhcbiAgZmllbGRzTmFtZXM6IHN0cmluZ1tdLFxuICBlbnRyeTogeyBbZmllbGROYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwsXG4pOiB7IFtmaWVsZE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgZmllbGRzTmFtZXMpIHtcbiAgICBpZiAoZW50cnlbZmllbGROYW1lXSAhPT0gbnVsbCkge1xuICAgICAgZW50cnlbZmllbGROYW1lXSA9IHBhcnNlSW50KGVudHJ5W2ZpZWxkTmFtZV0pXG4gICAgfVxuICB9XG4gIHJldHVybiBlbnRyeVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbUZpZWxkc1JpZ2h0KFxuICBmaWVsZHNOYW1lczogc3RyaW5nW10sXG4gIGVudHJ5OiB7IFtmaWVsZE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCxcbik6IHsgW2ZpZWxkTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBmaWVsZHNOYW1lcykge1xuICAgIGlmIChlbnRyeVtmaWVsZE5hbWVdICE9IG51bGwpIHtcbiAgICAgIGVudHJ5W2ZpZWxkTmFtZV0gPSBlbnRyeVtmaWVsZE5hbWVdLnRyaW1FbmQoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZW50cnlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sU0FBU0EsY0FBY0EsQ0FDNUJDLFdBQXFCLEVBQ3JCQyxLQUEwQyxFQUNMO0VBQ3JDLElBQUlBLEtBQUssS0FBSyxJQUFJLEVBQUU7SUFDbEIsT0FBTyxJQUFJO0VBQ2I7RUFBQyxJQUFBQyxTQUFBLEdBQUFDLDBCQUFBLENBQ3VCSCxXQUFXO0lBQUFJLEtBQUE7RUFBQTtJQUFuQyxLQUFBRixTQUFBLENBQUFHLENBQUEsTUFBQUQsS0FBQSxHQUFBRixTQUFBLENBQUFJLENBQUEsSUFBQUMsSUFBQSxHQUFxQztNQUFBLElBQTFCQyxTQUFTLEdBQUFKLEtBQUEsQ0FBQUssS0FBQTtNQUNsQixJQUFJUixLQUFLLENBQUNPLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM3QlAsS0FBSyxDQUFDTyxTQUFTLENBQUMsR0FBR0UsUUFBUSxDQUFDVCxLQUFLLENBQUNPLFNBQVMsQ0FBQyxDQUFDO01BQy9DO0lBQ0Y7RUFBQyxTQUFBRyxHQUFBO0lBQUFULFNBQUEsQ0FBQVUsQ0FBQSxDQUFBRCxHQUFBO0VBQUE7SUFBQVQsU0FBQSxDQUFBVyxDQUFBO0VBQUE7RUFDRCxPQUFPWixLQUFLO0FBQ2Q7QUFFTyxTQUFTYSxlQUFlQSxDQUM3QmQsV0FBcUIsRUFDckJDLEtBQTBDLEVBQ0w7RUFDckMsSUFBSUEsS0FBSyxLQUFLLElBQUksRUFBRTtJQUNsQixPQUFPLElBQUk7RUFDYjtFQUFDLElBQUFjLFVBQUEsR0FBQVosMEJBQUEsQ0FDdUJILFdBQVc7SUFBQWdCLE1BQUE7RUFBQTtJQUFuQyxLQUFBRCxVQUFBLENBQUFWLENBQUEsTUFBQVcsTUFBQSxHQUFBRCxVQUFBLENBQUFULENBQUEsSUFBQUMsSUFBQSxHQUFxQztNQUFBLElBQTFCQyxTQUFTLEdBQUFRLE1BQUEsQ0FBQVAsS0FBQTtNQUNsQixJQUFJUixLQUFLLENBQUNPLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUM1QlAsS0FBSyxDQUFDTyxTQUFTLENBQUMsR0FBR1AsS0FBSyxDQUFDTyxTQUFTLENBQUMsQ0FBQ1MsT0FBTyxDQUFDLENBQUM7TUFDL0M7SUFDRjtFQUFDLFNBQUFOLEdBQUE7SUFBQUksVUFBQSxDQUFBSCxDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBSSxVQUFBLENBQUFGLENBQUE7RUFBQTtFQUNELE9BQU9aLEtBQUs7QUFDZCIsImlnbm9yZUxpc3QiOltdfQ==
package/lib/fields.mjs ADDED
@@ -0,0 +1,22 @@
1
+ export function parseIntFields(fieldsNames, entry) {
2
+ if (entry === null) {
3
+ return null;
4
+ }
5
+ for (const fieldName of fieldsNames) {
6
+ if (entry[fieldName] !== null) {
7
+ entry[fieldName] = parseInt(entry[fieldName]);
8
+ }
9
+ }
10
+ return entry;
11
+ }
12
+ export function trimFieldsRight(fieldsNames, entry) {
13
+ if (entry === null) {
14
+ return null;
15
+ }
16
+ for (const fieldName of fieldsNames) {
17
+ if (entry[fieldName] != null) {
18
+ entry[fieldName] = entry[fieldName].trimEnd();
19
+ }
20
+ }
21
+ return entry;
22
+ }
package/lib/fields.ts ADDED
@@ -0,0 +1,29 @@
1
+ export function parseIntFields(
2
+ fieldsNames: string[],
3
+ entry: { [fieldName: string]: any } | null,
4
+ ): { [fieldName: string]: any } | null {
5
+ if (entry === null) {
6
+ return null
7
+ }
8
+ for (const fieldName of fieldsNames) {
9
+ if (entry[fieldName] !== null) {
10
+ entry[fieldName] = parseInt(entry[fieldName])
11
+ }
12
+ }
13
+ return entry
14
+ }
15
+
16
+ export function trimFieldsRight(
17
+ fieldsNames: string[],
18
+ entry: { [fieldName: string]: any } | null,
19
+ ): { [fieldName: string]: any } | null {
20
+ if (entry === null) {
21
+ return null
22
+ }
23
+ for (const fieldName of fieldsNames) {
24
+ if (entry[fieldName] != null) {
25
+ entry[fieldName] = entry[fieldName].trimEnd()
26
+ }
27
+ }
28
+ return entry
29
+ }
package/lib/index.mjs ADDED
@@ -0,0 +1,7 @@
1
+ export { allFollows, Aggregator, } from "./aggregates";
2
+ export { insertAudReferences, insertDateSeanceReferences, insertAuteurReferences, insertDocAttReferences, insertEcrReferences, insertLecassReferences, insertLecassrapReferences, insertLectureReferences, insertLoiReferences, insertRapReferences, insertTexteReferences, } from "./inserters";
3
+ export { sesFieldsToParseInt, sesFieldsToTrim, subFieldsToParseInt, subFieldsToTrim, txtAmeliFieldsToTrim, } from "./types/ameli";
4
+ export { debatsFieldsToTrim, lecassdebFieldsToTrim, } from "./types/debats";
5
+ export { assFieldsToTrim, audFieldsToTrim, auteurFieldsToTrim, dateSeanceFieldsToTrim, deccocFieldsToTrim, denrapFieldsToTrim, docattFieldsToParseInt, docattFieldsToTrim, ecrFieldsToTrim, etaloiFieldsToTrim, lecassFieldsToTrim, lecassrapFieldsToTrim, lectureFieldsToTrim, loiFieldsToTrim, orgFieldsToTrim, oritxtFieldsToTrim, quaFieldsToTrim, rapFieldsToParseInt, rapFieldsToTrim, raporgFieldsToTrim, scrFieldsToTrim, texteFieldsToParseInt, texteFieldsToTrim, typattFieldsToTrim, typlecFieldsToTrim, typloiFieldsToTrim, typtxtFieldsToTrim, typurlFieldsToTrim, } from "./types/dosleg";
6
+ export { Session } from "./types/sessions";
7
+ export { parseIntFields, trimFieldsRight, } from "./fields";
package/lib/index.ts ADDED
@@ -0,0 +1,64 @@
1
+ export {
2
+ allFollows,
3
+ Aggregator,
4
+ } from "./aggregates"
5
+ export {
6
+ insertAudReferences,
7
+ insertDateSeanceReferences,
8
+ insertAuteurReferences,
9
+ insertDocAttReferences,
10
+ insertEcrReferences,
11
+ insertLecassReferences,
12
+ insertLecassrapReferences,
13
+ insertLectureReferences,
14
+ insertLoiReferences,
15
+ insertRapReferences,
16
+ insertTexteReferences,
17
+ OutputData,
18
+ } from "./inserters"
19
+ export {
20
+ Ses, sesFieldsToParseInt, sesFieldsToTrim,
21
+ Sub, subFieldsToParseInt, subFieldsToTrim,
22
+ TxtAmeli, txtAmeliFieldsToTrim,
23
+ } from "./types/ameli"
24
+ export {
25
+ Debat, debatsFieldsToTrim,
26
+ LecAssDeb, lecassdebFieldsToTrim,
27
+ } from "./types/debats"
28
+ export {
29
+ Ass, assFieldsToTrim,
30
+ Aud, audFieldsToTrim,
31
+ Auteur, auteurFieldsToTrim,
32
+ DateSeance, dateSeanceFieldsToTrim,
33
+ DecCoc, deccocFieldsToTrim,
34
+ DenRap, denrapFieldsToTrim,
35
+ DocAtt, docattFieldsToParseInt, docattFieldsToTrim,
36
+ Ecr, ecrFieldsToTrim,
37
+ EtaLoi, etaloiFieldsToTrim,
38
+ LecAss, lecassFieldsToTrim,
39
+ LecAssRap, lecassrapFieldsToTrim,
40
+ Lecture, lectureFieldsToTrim,
41
+ Loi, loiFieldsToTrim,
42
+ Org, orgFieldsToTrim,
43
+ OriTxt, oritxtFieldsToTrim,
44
+ Qua, quaFieldsToTrim,
45
+ Rap, rapFieldsToParseInt, rapFieldsToTrim,
46
+ RapOrg, raporgFieldsToTrim,
47
+ Scr, scrFieldsToTrim,
48
+ Texte, texteFieldsToParseInt, texteFieldsToTrim,
49
+ TypAtt, typattFieldsToTrim,
50
+ TypLec, typlecFieldsToTrim,
51
+ TypLoi, typloiFieldsToTrim,
52
+ TypTxt, typtxtFieldsToTrim,
53
+ TypUrl, typurlFieldsToTrim,
54
+
55
+ } from "./types/dosleg"
56
+ export {
57
+ Photo,
58
+ Sen,
59
+ } from "./types/sens"
60
+ export { Session } from "./types/sessions"
61
+ export {
62
+ parseIntFields,
63
+ trimFieldsRight,
64
+ } from "./fields"
@@ -0,0 +1,98 @@
1
+ import { TxtAmeli } from "./types/ameli";
2
+ import { Debat } from "./types/debats";
3
+ import { Ass, Aud, Auteur, DateSeance, DecCoc, DenRap, DocAtt, Ecr, EtaLoi, LecAss, LecAssRap, Lecture, Loi, Org, OriTxt, Qua, Rap, Scr, Texte, TypAtt, TypLec, TypLoi, TypTxt, TypUrl } from "./types/dosleg";
4
+ export interface OutputData {
5
+ readonly ass?: {
6
+ [id: string]: Ass;
7
+ };
8
+ readonly aud?: {
9
+ [id: string]: Aud;
10
+ };
11
+ readonly auteur?: {
12
+ [id: string]: Auteur;
13
+ };
14
+ readonly date_seance?: {
15
+ [id: string]: DateSeance;
16
+ };
17
+ readonly debats?: {
18
+ [id: string]: Debat;
19
+ };
20
+ readonly deccoc?: {
21
+ [id: string]: DecCoc;
22
+ };
23
+ readonly denrap?: {
24
+ [id: string]: DenRap;
25
+ };
26
+ readonly docatt?: {
27
+ [id: string]: DocAtt;
28
+ };
29
+ readonly ecr?: {
30
+ [id: string]: Ecr;
31
+ };
32
+ readonly etaloi?: {
33
+ [id: string]: EtaLoi;
34
+ };
35
+ readonly lecass?: {
36
+ [id: string]: LecAss;
37
+ };
38
+ readonly lecassrap?: {
39
+ [id: string]: LecAssRap;
40
+ };
41
+ readonly lecture?: {
42
+ [id: string]: Lecture;
43
+ };
44
+ readonly loi?: {
45
+ [id: string]: Loi;
46
+ };
47
+ readonly org?: {
48
+ [id: string]: Org;
49
+ };
50
+ readonly oritxt?: {
51
+ [id: string]: OriTxt;
52
+ };
53
+ readonly qua?: {
54
+ [id: string]: Qua;
55
+ };
56
+ readonly rap?: {
57
+ [id: string]: Rap;
58
+ };
59
+ readonly scr?: {
60
+ [id: string]: Scr;
61
+ };
62
+ readonly texte?: {
63
+ [id: string]: Texte;
64
+ };
65
+ readonly typatt?: {
66
+ [id: string]: TypAtt;
67
+ };
68
+ readonly typlec?: {
69
+ [id: string]: TypLec;
70
+ };
71
+ readonly typloi?: {
72
+ [id: string]: TypLoi;
73
+ };
74
+ readonly typtxt?: {
75
+ [id: string]: TypTxt;
76
+ };
77
+ readonly typurl?: {
78
+ [id: string]: TypUrl;
79
+ };
80
+ readonly txt_ameli?: {
81
+ [id: string]: TxtAmeli;
82
+ };
83
+ }
84
+ type VisitedIdsByTableName = {
85
+ [tableName: string]: Set<number | string>;
86
+ };
87
+ export declare function insertAudReferences(aud: Aud, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Aud;
88
+ export declare function insertAuteurReferences(auteur: Auteur, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Auteur;
89
+ export declare function insertDateSeanceReferences(dateSeance: DateSeance, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): DateSeance;
90
+ export declare function insertDocAttReferences(docatt: DocAtt, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, performInsertRapReferences?: boolean): DocAtt;
91
+ export declare function insertEcrReferences(ecr: Ecr, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Ecr;
92
+ export declare function insertLecassrapReferences(lecassrap: LecAssRap, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): LecAssRap;
93
+ export declare function insertLecassReferences(lecass: LecAss, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): LecAss;
94
+ export declare function insertLectureReferences(lecture: Lecture, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Lecture;
95
+ export declare function insertLoiReferences(loi: Loi, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Loi;
96
+ export declare function insertRapReferences(rap: Rap, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Rap;
97
+ export declare function insertTexteReferences(texte: Texte, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Texte;
98
+ export {};