@tricoteuses/senat 2.22.16 → 3.0.0
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.
- package/README.md +168 -0
- package/lib/aggregates.d.ts +52 -0
- package/lib/aggregates.js +930 -0
- package/lib/aggregates.mjs +713 -0
- package/lib/aggregates.ts +833 -0
- package/lib/config.d.ts +10 -0
- package/lib/config.js +16 -0
- package/lib/config.mjs +16 -0
- package/lib/config.ts +26 -0
- package/lib/databases.d.ts +2 -0
- package/lib/databases.js +26 -0
- package/lib/databases.mjs +57 -0
- package/lib/databases.ts +71 -0
- package/lib/datasets.d.ts +34 -0
- package/lib/datasets.js +233 -0
- package/lib/datasets.mjs +78 -0
- package/lib/datasets.ts +118 -0
- package/lib/fields.d.ts +10 -0
- package/lib/fields.js +68 -0
- package/lib/fields.mjs +22 -0
- package/lib/fields.ts +29 -0
- package/lib/git.d.ts +26 -0
- package/lib/git.js +167 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +1 -0
- package/lib/index.mjs +7 -0
- package/lib/index.ts +64 -0
- package/lib/inserters.d.ts +98 -0
- package/lib/inserters.js +500 -0
- package/lib/inserters.mjs +360 -0
- package/lib/inserters.ts +521 -0
- package/lib/legislatures.json +38 -0
- package/lib/loaders.d.ts +58 -0
- package/lib/loaders.js +286 -0
- package/lib/loaders.mjs +158 -0
- package/lib/loaders.ts +271 -0
- package/lib/model/agenda.d.ts +6 -0
- package/lib/model/agenda.js +148 -0
- package/lib/model/ameli.d.ts +51 -0
- package/lib/model/ameli.js +149 -0
- package/lib/model/ameli.mjs +84 -0
- package/lib/model/ameli.ts +100 -0
- package/lib/model/commission.d.ts +18 -0
- package/lib/model/commission.js +269 -0
- package/lib/model/debats.d.ts +67 -0
- package/lib/model/debats.js +95 -0
- package/lib/model/debats.mjs +43 -0
- package/lib/model/debats.ts +68 -0
- package/lib/model/documents.d.ts +12 -0
- package/lib/model/documents.js +151 -0
- package/lib/model/dosleg.d.ts +7 -0
- package/lib/model/dosleg.js +326 -0
- package/lib/model/dosleg.mjs +196 -0
- package/lib/model/dosleg.ts +240 -0
- package/lib/model/index.d.ts +7 -0
- package/lib/model/index.js +7 -0
- package/lib/model/index.mjs +5 -0
- package/lib/model/index.ts +15 -0
- package/lib/model/questions.d.ts +45 -0
- package/lib/model/questions.js +89 -0
- package/lib/model/questions.mjs +71 -0
- package/lib/model/questions.ts +93 -0
- package/lib/model/scrutins.d.ts +13 -0
- package/lib/model/scrutins.js +114 -0
- package/lib/model/seance.d.ts +3 -0
- package/lib/model/seance.js +267 -0
- package/lib/model/sens.d.ts +146 -0
- package/lib/model/sens.js +454 -0
- package/lib/model/sens.mjs +415 -0
- package/lib/model/sens.ts +516 -0
- package/lib/model/texte.d.ts +7 -0
- package/lib/model/texte.js +256 -0
- package/lib/model/texte.mjs +208 -0
- package/lib/model/texte.ts +229 -0
- package/lib/model/util.d.ts +9 -0
- package/lib/model/util.js +38 -0
- package/lib/model/util.mjs +19 -0
- package/lib/model/util.ts +32 -0
- package/lib/parsers/texte.d.ts +7 -0
- package/lib/parsers/texte.js +228 -0
- package/lib/raw_types/ameli.d.ts +914 -0
- package/lib/raw_types/ameli.js +5 -0
- package/lib/raw_types/ameli.mjs +163 -0
- package/lib/raw_types/debats.d.ts +207 -0
- package/lib/raw_types/debats.js +5 -0
- package/lib/raw_types/debats.mjs +58 -0
- package/lib/raw_types/dosleg.d.ts +1619 -0
- package/lib/raw_types/dosleg.js +5 -0
- package/lib/raw_types/dosleg.mjs +438 -0
- package/lib/raw_types/questions.d.ts +419 -0
- package/lib/raw_types/questions.js +5 -0
- package/lib/raw_types/questions.mjs +11 -0
- package/lib/raw_types/senat.d.ts +11368 -0
- package/lib/raw_types/senat.js +5 -0
- package/lib/raw_types/sens.d.ts +8248 -0
- package/lib/raw_types/sens.js +5 -0
- package/lib/raw_types/sens.mjs +508 -0
- package/lib/raw_types_kysely/ameli.d.ts +915 -0
- package/lib/raw_types_kysely/ameli.js +7 -0
- package/lib/raw_types_kysely/ameli.mjs +5 -0
- package/lib/raw_types_kysely/ameli.ts +951 -0
- package/lib/raw_types_kysely/debats.d.ts +207 -0
- package/lib/raw_types_kysely/debats.js +7 -0
- package/lib/raw_types_kysely/debats.mjs +5 -0
- package/lib/raw_types_kysely/debats.ts +222 -0
- package/lib/raw_types_kysely/dosleg.d.ts +3532 -0
- package/lib/raw_types_kysely/dosleg.js +7 -0
- package/lib/raw_types_kysely/dosleg.mjs +5 -0
- package/lib/raw_types_kysely/dosleg.ts +3621 -0
- package/lib/raw_types_kysely/questions.d.ts +414 -0
- package/lib/raw_types_kysely/questions.js +7 -0
- package/lib/raw_types_kysely/questions.mjs +5 -0
- package/lib/raw_types_kysely/questions.ts +426 -0
- package/lib/raw_types_kysely/sens.d.ts +4394 -0
- package/lib/raw_types_kysely/sens.js +7 -0
- package/lib/raw_types_kysely/sens.mjs +5 -0
- package/lib/raw_types_kysely/sens.ts +4499 -0
- package/lib/raw_types_schemats/ameli.d.ts +539 -0
- package/lib/raw_types_schemats/ameli.js +2 -0
- package/lib/raw_types_schemats/ameli.mjs +2 -0
- package/lib/raw_types_schemats/ameli.ts +601 -0
- package/lib/raw_types_schemats/debats.d.ts +127 -0
- package/lib/raw_types_schemats/debats.js +2 -0
- package/lib/raw_types_schemats/debats.mjs +2 -0
- package/lib/raw_types_schemats/debats.ts +145 -0
- package/lib/raw_types_schemats/dosleg.d.ts +977 -0
- package/lib/raw_types_schemats/dosleg.js +2 -0
- package/lib/raw_types_schemats/dosleg.mjs +2 -0
- package/lib/raw_types_schemats/dosleg.ts +2193 -0
- package/lib/raw_types_schemats/questions.d.ts +235 -0
- package/lib/raw_types_schemats/questions.js +2 -0
- package/lib/raw_types_schemats/questions.mjs +2 -0
- package/lib/raw_types_schemats/questions.ts +249 -0
- package/lib/raw_types_schemats/sens.d.ts +6915 -0
- package/lib/raw_types_schemats/sens.js +2 -0
- package/lib/raw_types_schemats/sens.mjs +2 -0
- package/lib/raw_types_schemats/sens.ts +2907 -0
- package/lib/scripts/convert_data.d.ts +1 -0
- package/lib/scripts/convert_data.js +354 -0
- package/lib/scripts/convert_data.mjs +181 -0
- package/lib/scripts/convert_data.ts +243 -0
- package/lib/scripts/data-download.d.ts +1 -0
- package/lib/scripts/data-download.js +12 -0
- package/lib/scripts/datautil.d.ts +8 -0
- package/lib/scripts/datautil.js +34 -0
- package/lib/scripts/datautil.mjs +16 -0
- package/lib/scripts/datautil.ts +19 -0
- package/lib/scripts/images/transparent_150x192.jpg +0 -0
- package/lib/scripts/images/transparent_155x225.jpg +0 -0
- package/lib/scripts/parse_textes.d.ts +1 -0
- package/lib/scripts/parse_textes.js +44 -0
- package/lib/scripts/parse_textes.mjs +46 -0
- package/lib/scripts/parse_textes.ts +65 -0
- package/lib/scripts/retrieve_agenda.d.ts +1 -0
- package/lib/scripts/retrieve_agenda.js +132 -0
- package/lib/scripts/retrieve_cr_commission.d.ts +1 -0
- package/lib/scripts/retrieve_cr_commission.js +364 -0
- package/lib/scripts/retrieve_cr_seance.d.ts +6 -0
- package/lib/scripts/retrieve_cr_seance.js +347 -0
- package/lib/scripts/retrieve_documents.d.ts +3 -0
- package/lib/scripts/retrieve_documents.js +219 -0
- package/lib/scripts/retrieve_documents.mjs +249 -0
- package/lib/scripts/retrieve_documents.ts +298 -0
- package/lib/scripts/retrieve_open_data.d.ts +1 -0
- package/lib/scripts/retrieve_open_data.js +315 -0
- package/lib/scripts/retrieve_open_data.mjs +217 -0
- package/lib/scripts/retrieve_open_data.ts +268 -0
- package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
- package/lib/scripts/retrieve_senateurs_photos.js +147 -0
- package/lib/scripts/retrieve_senateurs_photos.mjs +147 -0
- package/lib/scripts/retrieve_senateurs_photos.ts +177 -0
- package/lib/scripts/retrieve_videos.d.ts +1 -0
- package/lib/scripts/retrieve_videos.js +461 -0
- package/lib/scripts/shared/cli_helpers.d.ts +95 -0
- package/lib/scripts/shared/cli_helpers.js +91 -0
- package/lib/scripts/shared/cli_helpers.ts +36 -0
- package/lib/scripts/shared/util.d.ts +4 -0
- package/lib/scripts/shared/util.js +35 -0
- package/lib/scripts/shared/util.ts +33 -0
- package/lib/scripts/test_iter_load.d.ts +1 -0
- package/lib/scripts/test_iter_load.js +12 -0
- package/lib/src/config.d.ts +22 -0
- package/lib/src/config.js +17 -7
- package/lib/src/conversion_textes.js +5 -1
- package/lib/src/databases.d.ts +2 -1
- package/lib/src/databases_postgres.d.ts +4 -0
- package/lib/src/databases_postgres.js +23 -0
- package/lib/src/datasets.d.ts +4 -0
- package/lib/src/datasets.js +16 -2
- package/lib/src/git.d.ts +1 -0
- package/lib/src/git.js +45 -11
- package/lib/src/index.d.ts +19 -8
- package/lib/src/index.js +6 -1
- package/lib/src/loaders.js +10 -4
- package/lib/src/model/agenda.js +2 -2
- package/lib/src/model/ameli.d.ts +64 -52
- package/lib/src/model/ameli.js +147 -145
- package/lib/src/model/ameli_postgres.d.ts +67 -0
- package/lib/src/model/ameli_postgres.js +150 -0
- package/lib/src/model/commission.d.ts +3 -2
- package/lib/src/model/commission.js +2 -2
- package/lib/src/model/debats.d.ts +38 -66
- package/lib/src/model/debats.js +110 -93
- package/lib/src/model/documents.d.ts +32 -12
- package/lib/src/model/documents.js +171 -130
- package/lib/src/model/dosleg.d.ts +142 -5
- package/lib/src/model/dosleg.js +298 -156
- package/lib/src/model/questions.d.ts +54 -45
- package/lib/src/model/questions.js +89 -87
- package/lib/src/model/scrutins.d.ts +48 -13
- package/lib/src/model/scrutins.js +118 -111
- package/lib/src/model/seance.js +3 -3
- package/lib/src/model/sens.d.ts +109 -179
- package/lib/src/model/sens.js +384 -484
- package/lib/src/model/util.d.ts +0 -8
- package/lib/src/model/util.js +0 -23
- package/lib/src/parsers/texte.js +7 -7
- package/lib/src/raw_types/ameli.d.ts +1651 -803
- package/lib/src/raw_types/ameli.js +1816 -5
- package/lib/src/raw_types/debats.d.ts +353 -180
- package/lib/src/raw_types/debats.js +517 -5
- package/lib/src/raw_types/dosleg.d.ts +2862 -1527
- package/lib/src/raw_types/dosleg.js +4354 -5
- package/lib/src/raw_types/questions.d.ts +671 -395
- package/lib/src/raw_types/questions.js +1303 -5
- package/lib/src/raw_types/sens.d.ts +7743 -8148
- package/lib/src/raw_types/sens.js +10429 -5
- package/lib/src/raw_types_schemats/ameli.d.ts +4 -2
- package/lib/src/raw_types_schemats/debats.d.ts +2 -2
- package/lib/src/raw_types_schemats/dosleg.d.ts +2 -2
- package/lib/src/raw_types_schemats/questions.d.ts +2 -2
- package/lib/src/raw_types_schemats/sens.d.ts +10 -4216
- package/lib/src/scripts/convert_data.js +7 -6
- package/lib/src/scripts/convert_xml_to_html.js +2 -2
- package/lib/src/scripts/data-download.js +3 -2
- package/lib/src/scripts/retrieve_agenda.js +21 -9
- package/lib/src/scripts/retrieve_cr_commission.js +17 -17
- package/lib/src/scripts/retrieve_cr_seance.d.ts +14 -1
- package/lib/src/scripts/retrieve_cr_seance.js +10 -11
- package/lib/src/scripts/retrieve_documents.d.ts +11 -2
- package/lib/src/scripts/retrieve_documents.js +25 -14
- package/lib/src/scripts/retrieve_open_data.js +514 -153
- package/lib/src/scripts/retrieve_senateurs_photos.js +25 -11
- package/lib/src/scripts/retrieve_videos.js +12 -11
- package/lib/src/scripts/shared/cli_helpers.d.ts +1 -6
- package/lib/src/scripts/shared/cli_helpers.js +9 -8
- package/lib/src/scripts/shared/incremental_import_sql.d.ts +2 -0
- package/lib/src/scripts/shared/incremental_import_sql.js +894 -0
- package/lib/src/scripts/shared/prefixed_tables.d.ts +10 -0
- package/lib/src/scripts/shared/prefixed_tables.js +36 -0
- package/lib/src/scripts/shared/schema_version.d.ts +3 -0
- package/lib/src/scripts/shared/schema_version.js +97 -0
- package/lib/src/scripts/shared/staging_import.d.ts +3 -0
- package/lib/src/scripts/shared/staging_import.js +80 -0
- package/lib/src/scripts/shared/staging_metadata_sql.d.ts +1 -0
- package/lib/src/scripts/shared/staging_metadata_sql.js +221 -0
- package/lib/src/scripts/validate_prefixed_tables.d.ts +1 -0
- package/lib/src/scripts/validate_prefixed_tables.js +101 -0
- package/lib/src/types/ameli.d.ts +4 -4
- package/lib/src/types/debats.d.ts +2 -2
- package/lib/src/types/dosleg.d.ts +39 -39
- package/lib/src/types/questions.d.ts +2 -2
- package/lib/src/types/sens.d.ts +0 -2
- package/lib/src/types/texte.d.ts +1 -1
- package/lib/src/utils/cr_spliting.d.ts +9 -6
- package/lib/src/utils/cr_spliting.js +6 -101
- package/lib/src/utils/reunion_odj_building.d.ts +7 -3
- package/lib/src/utils/reunion_parsing.d.ts +2 -1
- package/lib/src/utils/reunion_parsing.js +2 -2
- package/lib/src/videos/match.js +8 -5
- package/lib/src/videos/pipeline.d.ts +6 -2
- package/lib/src/videos/pipeline.js +21 -8
- package/lib/src/videos/search.js +6 -2
- package/lib/strings.d.ts +1 -0
- package/lib/strings.js +18 -0
- package/lib/strings.mjs +18 -0
- package/lib/strings.ts +26 -0
- package/lib/tests/incrementalImportSql.test.d.ts +1 -0
- package/lib/tests/incrementalImportSql.test.js +155 -0
- package/lib/tests/prefixedTables.test.d.ts +1 -0
- package/lib/tests/prefixedTables.test.js +22 -0
- package/lib/tests/schemaVersion.test.d.ts +1 -0
- package/lib/tests/schemaVersion.test.js +23 -0
- package/lib/tests/validatePrefixedTables.test.d.ts +1 -0
- package/lib/tests/validatePrefixedTables.test.js +14 -0
- package/lib/types/agenda.d.ts +44 -0
- package/lib/types/agenda.js +1 -0
- package/lib/types/ameli.d.ts +5 -0
- package/lib/types/ameli.js +1 -0
- package/lib/types/ameli.mjs +13 -0
- package/lib/types/ameli.ts +21 -0
- package/lib/types/compte_rendu.d.ts +83 -0
- package/lib/types/compte_rendu.js +1 -0
- package/lib/types/debats.d.ts +2 -0
- package/lib/types/debats.js +1 -0
- package/lib/types/debats.mjs +2 -0
- package/lib/types/debats.ts +6 -0
- package/lib/types/dosleg.d.ts +70 -0
- package/lib/types/dosleg.js +1 -0
- package/lib/types/dosleg.mjs +151 -0
- package/lib/types/dosleg.ts +284 -0
- package/lib/types/questions.d.ts +2 -0
- package/lib/types/questions.js +1 -0
- package/lib/types/questions.mjs +1 -0
- package/lib/types/questions.ts +3 -0
- package/lib/types/sens.d.ts +10 -0
- package/lib/types/sens.js +1 -0
- package/lib/types/sens.mjs +1 -0
- package/lib/types/sens.ts +12 -0
- package/lib/types/sessions.d.ts +5 -0
- package/lib/types/sessions.js +84 -0
- package/lib/types/sessions.mjs +43 -0
- package/lib/types/sessions.ts +42 -0
- package/lib/types/texte.d.ts +74 -0
- package/lib/types/texte.js +16 -0
- package/lib/types/texte.mjs +16 -0
- package/lib/types/texte.ts +76 -0
- package/lib/typings/windows-1252.d.js +2 -0
- package/lib/typings/windows-1252.d.mjs +2 -0
- package/lib/typings/windows-1252.d.ts +11 -0
- package/lib/utils/cr_spliting.d.ts +28 -0
- package/lib/utils/cr_spliting.js +265 -0
- package/lib/utils/date.d.ts +10 -0
- package/lib/utils/date.js +100 -0
- package/lib/utils/nvs-timecode.d.ts +7 -0
- package/lib/utils/nvs-timecode.js +79 -0
- package/lib/utils/reunion_grouping.d.ts +9 -0
- package/lib/utils/reunion_grouping.js +361 -0
- package/lib/utils/reunion_odj_building.d.ts +5 -0
- package/lib/utils/reunion_odj_building.js +154 -0
- package/lib/utils/reunion_parsing.d.ts +23 -0
- package/lib/utils/reunion_parsing.js +209 -0
- package/lib/utils/scoring.d.ts +14 -0
- package/lib/utils/scoring.js +147 -0
- package/lib/utils/string_cleaning.d.ts +7 -0
- package/lib/utils/string_cleaning.js +57 -0
- package/lib/validators/config.d.ts +9 -0
- package/lib/validators/config.js +10 -0
- package/lib/validators/config.mjs +54 -0
- package/lib/validators/config.ts +79 -0
- package/lib/validators/senat.d.ts +0 -0
- package/lib/validators/senat.js +28 -0
- package/lib/validators/senat.mjs +24 -0
- package/lib/validators/senat.ts +26 -0
- package/package.json +11 -11
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export declare const categoriesOption: {
|
|
2
|
+
alias: string;
|
|
3
|
+
defaultValue: string[];
|
|
4
|
+
help: string;
|
|
5
|
+
multiple: boolean;
|
|
6
|
+
name: string;
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
};
|
|
9
|
+
export declare const dataDirDefaultOption: {
|
|
10
|
+
defaultOption: boolean;
|
|
11
|
+
help: string;
|
|
12
|
+
name: string;
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
};
|
|
15
|
+
export declare const fromSessionOption: {
|
|
16
|
+
defaultValue: number;
|
|
17
|
+
help: string;
|
|
18
|
+
name: string;
|
|
19
|
+
type: NumberConstructor;
|
|
20
|
+
};
|
|
21
|
+
export declare const silentOption: {
|
|
22
|
+
alias: string;
|
|
23
|
+
help: string;
|
|
24
|
+
name: string;
|
|
25
|
+
type: BooleanConstructor;
|
|
26
|
+
};
|
|
27
|
+
export declare const verboseOption: {
|
|
28
|
+
alias: string;
|
|
29
|
+
help: string;
|
|
30
|
+
name: string;
|
|
31
|
+
type: BooleanConstructor;
|
|
32
|
+
};
|
|
33
|
+
export declare const onlyRecentOption: {
|
|
34
|
+
help: string;
|
|
35
|
+
name: string;
|
|
36
|
+
type: NumberConstructor;
|
|
37
|
+
};
|
|
38
|
+
export declare const keepDirOption: {
|
|
39
|
+
help: string;
|
|
40
|
+
name: string;
|
|
41
|
+
type: BooleanConstructor;
|
|
42
|
+
};
|
|
43
|
+
export declare const cloneOption: {
|
|
44
|
+
alias: string;
|
|
45
|
+
help: string;
|
|
46
|
+
name: string;
|
|
47
|
+
type: StringConstructor;
|
|
48
|
+
};
|
|
49
|
+
export declare const commitOption: {
|
|
50
|
+
help: string;
|
|
51
|
+
name: string;
|
|
52
|
+
type: BooleanConstructor;
|
|
53
|
+
};
|
|
54
|
+
export declare const remoteOption: {
|
|
55
|
+
alias: string;
|
|
56
|
+
help: string;
|
|
57
|
+
multiple: boolean;
|
|
58
|
+
name: string;
|
|
59
|
+
type: StringConstructor;
|
|
60
|
+
};
|
|
61
|
+
export declare const pullOption: {
|
|
62
|
+
alias: string;
|
|
63
|
+
help: string;
|
|
64
|
+
name: string;
|
|
65
|
+
type: BooleanConstructor;
|
|
66
|
+
};
|
|
67
|
+
export declare const fetchDocumentsOption: {
|
|
68
|
+
help: string;
|
|
69
|
+
name: string;
|
|
70
|
+
type: BooleanConstructor;
|
|
71
|
+
};
|
|
72
|
+
export declare const parseDocumentsOption: {
|
|
73
|
+
help: string;
|
|
74
|
+
name: string;
|
|
75
|
+
type: BooleanConstructor;
|
|
76
|
+
};
|
|
77
|
+
export declare const commonOptions: ({
|
|
78
|
+
defaultOption: boolean;
|
|
79
|
+
help: string;
|
|
80
|
+
name: string;
|
|
81
|
+
type: StringConstructor;
|
|
82
|
+
} | {
|
|
83
|
+
help: string;
|
|
84
|
+
name: string;
|
|
85
|
+
type: NumberConstructor;
|
|
86
|
+
} | {
|
|
87
|
+
help: string;
|
|
88
|
+
name: string;
|
|
89
|
+
type: BooleanConstructor;
|
|
90
|
+
} | {
|
|
91
|
+
alias: string;
|
|
92
|
+
help: string;
|
|
93
|
+
name: string;
|
|
94
|
+
type: StringConstructor;
|
|
95
|
+
})[];
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export const categoriesOption = {
|
|
2
|
+
alias: "k",
|
|
3
|
+
defaultValue: ["All"],
|
|
4
|
+
help: "categories of datasets to reorganize; default All",
|
|
5
|
+
multiple: true,
|
|
6
|
+
name: "categories",
|
|
7
|
+
type: String,
|
|
8
|
+
};
|
|
9
|
+
export const dataDirDefaultOption = {
|
|
10
|
+
defaultOption: true,
|
|
11
|
+
help: "directory containing Sénat open data files",
|
|
12
|
+
name: "dataDir",
|
|
13
|
+
type: String,
|
|
14
|
+
};
|
|
15
|
+
export const fromSessionOption = {
|
|
16
|
+
defaultValue: 2022,
|
|
17
|
+
help: "session year to retrieve data from; default 2022",
|
|
18
|
+
name: "fromSession",
|
|
19
|
+
type: Number,
|
|
20
|
+
};
|
|
21
|
+
export const silentOption = {
|
|
22
|
+
alias: "s",
|
|
23
|
+
help: "don't log anything",
|
|
24
|
+
name: "silent",
|
|
25
|
+
type: Boolean,
|
|
26
|
+
};
|
|
27
|
+
export const verboseOption = {
|
|
28
|
+
alias: "v",
|
|
29
|
+
help: "verbose logs",
|
|
30
|
+
name: "verbose",
|
|
31
|
+
type: Boolean,
|
|
32
|
+
};
|
|
33
|
+
export const onlyRecentOption = {
|
|
34
|
+
help: "retrieve only documents created within the last N days (that are not already downloaded)",
|
|
35
|
+
name: "only-recent",
|
|
36
|
+
type: Number,
|
|
37
|
+
};
|
|
38
|
+
export const keepDirOption = {
|
|
39
|
+
help: "keep directories when cleaning data",
|
|
40
|
+
name: "keepDir",
|
|
41
|
+
type: Boolean,
|
|
42
|
+
};
|
|
43
|
+
export const cloneOption = {
|
|
44
|
+
alias: "C",
|
|
45
|
+
help: "clone repositories from given group (or organization) git URL",
|
|
46
|
+
name: "clone",
|
|
47
|
+
type: String,
|
|
48
|
+
};
|
|
49
|
+
export const commitOption = {
|
|
50
|
+
help: "commit clean files",
|
|
51
|
+
name: "commit",
|
|
52
|
+
type: Boolean,
|
|
53
|
+
};
|
|
54
|
+
export const remoteOption = {
|
|
55
|
+
alias: "r",
|
|
56
|
+
help: "push commit to given remote",
|
|
57
|
+
multiple: true,
|
|
58
|
+
name: "remote",
|
|
59
|
+
type: String,
|
|
60
|
+
};
|
|
61
|
+
export const pullOption = {
|
|
62
|
+
alias: "p",
|
|
63
|
+
help: "pull repositories before proceeding",
|
|
64
|
+
name: "pull",
|
|
65
|
+
type: Boolean,
|
|
66
|
+
};
|
|
67
|
+
export const fetchDocumentsOption = {
|
|
68
|
+
help: "download documents",
|
|
69
|
+
name: "fetchDocuments",
|
|
70
|
+
type: Boolean,
|
|
71
|
+
};
|
|
72
|
+
export const parseDocumentsOption = {
|
|
73
|
+
help: "parse documents",
|
|
74
|
+
name: "parseDocuments",
|
|
75
|
+
type: Boolean,
|
|
76
|
+
};
|
|
77
|
+
export const commonOptions = [
|
|
78
|
+
categoriesOption,
|
|
79
|
+
dataDirDefaultOption,
|
|
80
|
+
fromSessionOption,
|
|
81
|
+
silentOption,
|
|
82
|
+
verboseOption,
|
|
83
|
+
onlyRecentOption,
|
|
84
|
+
keepDirOption,
|
|
85
|
+
cloneOption,
|
|
86
|
+
commitOption,
|
|
87
|
+
remoteOption,
|
|
88
|
+
pullOption,
|
|
89
|
+
fetchDocumentsOption,
|
|
90
|
+
parseDocumentsOption,
|
|
91
|
+
];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const categoriesOption = {
|
|
2
|
+
alias: "k",
|
|
3
|
+
defaultValue: ["All"],
|
|
4
|
+
help: "categories of datasets to reorganize",
|
|
5
|
+
multiple: true,
|
|
6
|
+
name: "categories",
|
|
7
|
+
type: String,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const dataDirDefaultOption = {
|
|
11
|
+
defaultOption: true,
|
|
12
|
+
help: "directory containing Sénat open data files",
|
|
13
|
+
name: "dataDir",
|
|
14
|
+
type: String,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const silentOption = {
|
|
18
|
+
alias: "s",
|
|
19
|
+
help: "don't log anything",
|
|
20
|
+
name: "silent",
|
|
21
|
+
type: Boolean,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const verboseOption = {
|
|
25
|
+
alias: "v",
|
|
26
|
+
help: "verbose logs",
|
|
27
|
+
name: "verbose",
|
|
28
|
+
type: Boolean,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const commonOptions = [
|
|
32
|
+
categoriesOption,
|
|
33
|
+
dataDirDefaultOption,
|
|
34
|
+
silentOption,
|
|
35
|
+
verboseOption,
|
|
36
|
+
]
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function isOptionEmptyOrHasValue(option: string, value: string): boolean;
|
|
2
|
+
export declare function ensureAndClearDirSync(dir: string): void;
|
|
3
|
+
export declare function ensureAndClearDir(path: string): void;
|
|
4
|
+
export declare function fetchWithRetry(url: string, retries?: number, backoff?: number): Promise<Response>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
export function isOptionEmptyOrHasValue(option, value) {
|
|
4
|
+
return !option || option.length === 0 || option.includes(value);
|
|
5
|
+
}
|
|
6
|
+
export function ensureAndClearDirSync(dir) {
|
|
7
|
+
fs.ensureDirSync(dir);
|
|
8
|
+
for (const name of fs.readdirSync(dir)) {
|
|
9
|
+
fs.rmSync(path.join(dir, name), { recursive: true, force: true });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function ensureAndClearDir(path) {
|
|
13
|
+
if (!fs.existsSync(path)) {
|
|
14
|
+
fs.mkdirSync(path, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
fs.emptyDirSync(path);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function fetchWithRetry(url, retries = 3, backoff = 300) {
|
|
21
|
+
for (let attempt = 0; attempt < retries; attempt++) {
|
|
22
|
+
try {
|
|
23
|
+
return await fetch(url);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (attempt === retries - 1) {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
console.warn(`Fetch attempt ${attempt + 1} for ${url} failed. Retrying in ${backoff}ms…`);
|
|
30
|
+
await new Promise((resolve) => setTimeout(resolve, backoff));
|
|
31
|
+
backoff *= 2;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Failed to fetch ${url} after ${retries} attempts`);
|
|
35
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import fs from "fs-extra"
|
|
2
|
+
|
|
3
|
+
export function isOptionEmptyOrHasValue (option: string, value: string) {
|
|
4
|
+
return !option || option.length === 0 || option.includes(value)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function ensureAndClearDir (path: string) {
|
|
8
|
+
if (!fs.existsSync(path)) {
|
|
9
|
+
fs.mkdirSync(path, { recursive: true })
|
|
10
|
+
} else {
|
|
11
|
+
fs.emptyDirSync(path)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function fetchWithRetry (
|
|
16
|
+
url: string,
|
|
17
|
+
retries: number = 3,
|
|
18
|
+
backoff: number = 300,
|
|
19
|
+
): Promise<Response> {
|
|
20
|
+
for (let attempt = 0; attempt < retries; attempt++) {
|
|
21
|
+
try {
|
|
22
|
+
return await fetch(url)
|
|
23
|
+
} catch (error) {
|
|
24
|
+
if (attempt === retries - 1) {
|
|
25
|
+
throw error
|
|
26
|
+
}
|
|
27
|
+
console.warn(`Fetch attempt ${attempt + 1} for ${url} failed. Retrying in ${backoff}ms…`)
|
|
28
|
+
await new Promise((resolve) => setTimeout(resolve, backoff))
|
|
29
|
+
backoff *= 2
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`Failed to fetch ${url} after ${retries} attempts`)
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { iterLoadSenatRapports } from "../loaders";
|
|
2
|
+
import commandLineArgs from "command-line-args";
|
|
3
|
+
import { dataDirDefaultOption } from "./shared/cli_helpers";
|
|
4
|
+
const optionsDefinitions = [dataDirDefaultOption];
|
|
5
|
+
const options = commandLineArgs(optionsDefinitions);
|
|
6
|
+
const session = 2024;
|
|
7
|
+
const sinceCommit = undefined;
|
|
8
|
+
for (const { item: rapport } of iterLoadSenatRapports(options["dataDir"], session, {
|
|
9
|
+
sinceCommit: sinceCommit,
|
|
10
|
+
})) {
|
|
11
|
+
console.log(rapport);
|
|
12
|
+
}
|
package/lib/src/config.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
export declare const dbSchema: z.ZodObject<{
|
|
4
|
+
host: z.ZodString;
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
password: z.ZodString;
|
|
7
|
+
port: z.ZodCoercedNumber<unknown>;
|
|
8
|
+
user: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export type DbConfig = z.infer<typeof dbSchema>;
|
|
3
11
|
export declare const configSchema: z.ZodObject<{
|
|
4
12
|
db: z.ZodObject<{
|
|
5
13
|
host: z.ZodString;
|
|
@@ -8,6 +16,13 @@ export declare const configSchema: z.ZodObject<{
|
|
|
8
16
|
port: z.ZodCoercedNumber<unknown>;
|
|
9
17
|
user: z.ZodString;
|
|
10
18
|
}, z.core.$strip>;
|
|
19
|
+
stagingDb: z.ZodObject<{
|
|
20
|
+
host: z.ZodString;
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
password: z.ZodString;
|
|
23
|
+
port: z.ZodCoercedNumber<unknown>;
|
|
24
|
+
user: z.ZodString;
|
|
25
|
+
}, z.core.$strip>;
|
|
11
26
|
}, z.core.$strip>;
|
|
12
27
|
declare const _default: {
|
|
13
28
|
db: {
|
|
@@ -17,5 +32,12 @@ declare const _default: {
|
|
|
17
32
|
port: number;
|
|
18
33
|
user: string;
|
|
19
34
|
};
|
|
35
|
+
stagingDb: {
|
|
36
|
+
host: string;
|
|
37
|
+
name: string;
|
|
38
|
+
password: string;
|
|
39
|
+
port: number;
|
|
40
|
+
user: string;
|
|
41
|
+
};
|
|
20
42
|
};
|
|
21
43
|
export default _default;
|
package/lib/src/config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
const dbSchema = z.object({
|
|
3
|
+
export const dbSchema = z.object({
|
|
4
4
|
host: z.string().trim().min(1, "Must not be empty"),
|
|
5
5
|
name: z.string().trim().min(1, "Must not be empty"),
|
|
6
6
|
password: z.string().trim().min(1, "Must not be empty"),
|
|
@@ -9,19 +9,29 @@ const dbSchema = z.object({
|
|
|
9
9
|
});
|
|
10
10
|
export const configSchema = z.object({
|
|
11
11
|
db: dbSchema,
|
|
12
|
+
stagingDb: dbSchema,
|
|
12
13
|
});
|
|
13
14
|
const config = {
|
|
14
15
|
db: {
|
|
15
|
-
host: process.env["
|
|
16
|
-
name: process.env["
|
|
17
|
-
password: process.env["
|
|
18
|
-
port: process.env["
|
|
19
|
-
user: process.env["
|
|
16
|
+
host: process.env["DB_HOST"] || "localhost",
|
|
17
|
+
name: process.env["DB_NAME"] || "senat",
|
|
18
|
+
password: process.env["DB_PASSWORD"] || "opendata",
|
|
19
|
+
port: process.env["DB_PORT"] || 5432,
|
|
20
|
+
user: process.env["DB_USER"] || "opendata",
|
|
21
|
+
},
|
|
22
|
+
stagingDb: {
|
|
23
|
+
host: process.env["STAGING_DB_HOST"] || process.env["DB_HOST"] || "localhost",
|
|
24
|
+
name: process.env["STAGING_DB_NAME"] || "senat_staging",
|
|
25
|
+
password: process.env["STAGING_DB_PASSWORD"] || process.env["DB_PASSWORD"] || "opendata",
|
|
26
|
+
port: process.env["STAGING_DB_PORT"] || process.env["DB_PORT"] || 5432,
|
|
27
|
+
user: process.env["STAGING_DB_USER"] || process.env["DB_USER"] || "opendata",
|
|
20
28
|
},
|
|
21
29
|
};
|
|
22
30
|
const result = configSchema.safeParse(config);
|
|
23
31
|
if (!result.success) {
|
|
24
|
-
|
|
32
|
+
const issues = JSON.stringify(result.error.issues, null, 2);
|
|
33
|
+
const serializedConfig = JSON.stringify(config, null, 2);
|
|
34
|
+
console.error(`Error in configuration:\n${serializedConfig}\nError:\n${issues}`);
|
|
25
35
|
process.exit(-1);
|
|
26
36
|
}
|
|
27
37
|
export default result.data;
|
|
@@ -186,7 +186,11 @@ p.has-alinea {
|
|
|
186
186
|
<div class="header-type">${metadata.type || ""}</div>
|
|
187
187
|
<div class="header-authors">${metadata.authors || ""}</div>
|
|
188
188
|
${metadata.commission
|
|
189
|
-
?
|
|
189
|
+
? [
|
|
190
|
+
`<div class="header-commission">Envoyée à la ${metadata.commission.toLowerCase()},`,
|
|
191
|
+
"sous réserve de la constitution éventuelle d'une commission spéciale dans les conditions prévues",
|
|
192
|
+
"par le Règlement.</div>",
|
|
193
|
+
].join(" ")
|
|
190
194
|
: ""}
|
|
191
195
|
</div>
|
|
192
196
|
<h1>${metadata.title || ""}</h1>
|
package/lib/src/databases.d.ts
CHANGED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import postgres from "postgres";
|
|
2
|
+
export type SqlValue = postgres.ParameterOrJSON<never>;
|
|
3
|
+
export declare const sql: postgres.Sql<{}>;
|
|
4
|
+
export declare function streamUnsafeQuery<T>(query: string, params?: readonly unknown[], batchSize?: number): AsyncGenerator<T, void, unknown>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import postgres from "postgres";
|
|
2
|
+
import config from "./config";
|
|
3
|
+
export const sql = postgres({
|
|
4
|
+
database: config.db.name,
|
|
5
|
+
host: config.db.host,
|
|
6
|
+
password: config.db.password,
|
|
7
|
+
port: config.db.port,
|
|
8
|
+
transform: {
|
|
9
|
+
undefined: null,
|
|
10
|
+
},
|
|
11
|
+
user: config.db.user,
|
|
12
|
+
});
|
|
13
|
+
function toSqlValue(value) {
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
export async function* streamUnsafeQuery(query, params = [], batchSize = 100) {
|
|
17
|
+
const values = params.map(toSqlValue);
|
|
18
|
+
for await (const rows of sql.unsafe(query, values).cursor(batchSize)) {
|
|
19
|
+
for (const row of rows) {
|
|
20
|
+
yield row;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
package/lib/src/datasets.d.ts
CHANGED
package/lib/src/datasets.js
CHANGED
|
@@ -167,6 +167,12 @@ export const datasets = {
|
|
|
167
167
|
{ name: "idx_senmat", columns: ["senmat"] },
|
|
168
168
|
],
|
|
169
169
|
},
|
|
170
|
+
mergeKeys: {
|
|
171
|
+
corscr: ["sesann", "scrnum", "corscrord"],
|
|
172
|
+
docsea: ["evtseacle", "docseaord"],
|
|
173
|
+
gen: ["gencod"],
|
|
174
|
+
},
|
|
175
|
+
rowMultisetMergeTables: ["amescr"],
|
|
170
176
|
},
|
|
171
177
|
questions: {
|
|
172
178
|
database: "questions",
|
|
@@ -183,6 +189,7 @@ export const datasets = {
|
|
|
183
189
|
sortquestion: [{ name: "idx_sorquecod", columns: ["sorquecod"] }],
|
|
184
190
|
etatquestion: [{ name: "idx_etaquecod", columns: ["etaquecod"] }],
|
|
185
191
|
},
|
|
192
|
+
rowMultisetMergeTables: ["tam_reponses"],
|
|
186
193
|
},
|
|
187
194
|
sens: {
|
|
188
195
|
database: "sens",
|
|
@@ -213,12 +220,19 @@ export const datasets = {
|
|
|
213
220
|
{ name: "idx_typmancod", columns: ["typmancod"] },
|
|
214
221
|
],
|
|
215
222
|
},
|
|
223
|
+
mergeKeys: {
|
|
224
|
+
activite: ["actid"],
|
|
225
|
+
},
|
|
216
226
|
},
|
|
217
227
|
};
|
|
228
|
+
function getEnabledDatasetByName(datasetName) {
|
|
229
|
+
const enabledDataset = EnabledDatasets[datasetName];
|
|
230
|
+
return typeof enabledDataset === "number" ? enabledDataset : undefined;
|
|
231
|
+
}
|
|
218
232
|
export function getEnabledDatasets(categories) {
|
|
219
|
-
categories.map((datasetName) => assert.notStrictEqual(
|
|
233
|
+
categories.map((datasetName) => assert.notStrictEqual(getEnabledDatasetByName(datasetName), undefined, `Unknown name of dataset: ${datasetName}`));
|
|
220
234
|
return categories.reduce((enabledDatasets, datasetName) => {
|
|
221
|
-
const enabledDataset =
|
|
235
|
+
const enabledDataset = getEnabledDatasetByName(datasetName);
|
|
222
236
|
return enabledDatasets | (enabledDataset || EnabledDatasets.None);
|
|
223
237
|
}, EnabledDatasets.None);
|
|
224
238
|
}
|
package/lib/src/git.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare function initRepo(repositoryDir: string): void;
|
|
2
2
|
export declare function commit(repositoryDir: string, message: string): boolean;
|
|
3
3
|
export declare function commitAndPush(repositoryDir: string, message: string, remotes?: string[]): number;
|
|
4
|
+
export declare function pull(repositoryDir: string, remote?: string, branch?: string): boolean;
|
|
4
5
|
export declare function resetAndPull(gitDir: string): boolean;
|
|
5
6
|
export declare function clone(gitGroupUrl: string | undefined, gitName: string, workingDir: string): void;
|
|
6
7
|
export declare function run(repositoryDir: string, args: string, verbose?: boolean): string;
|
package/lib/src/git.js
CHANGED
|
@@ -5,6 +5,15 @@ const MAXBUFFER = 50 * 1024 * 1024;
|
|
|
5
5
|
const GIT_LOCK_RETRY_DELAY_MS = 1000;
|
|
6
6
|
const GIT_LOCK_RETRY_COUNT = 5;
|
|
7
7
|
const GIT_LOCK_STALE_AFTER_MS = 2 * 60 * 1000;
|
|
8
|
+
function asExecSyncError(error) {
|
|
9
|
+
return error;
|
|
10
|
+
}
|
|
11
|
+
function outputToString(output) {
|
|
12
|
+
if (output == null) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
return Buffer.isBuffer(output) ? output.toString("utf-8") : output;
|
|
16
|
+
}
|
|
8
17
|
function sleep(ms) {
|
|
9
18
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
10
19
|
}
|
|
@@ -12,7 +21,7 @@ function getIndexLockPath(repositoryDir) {
|
|
|
12
21
|
return path.join(repositoryDir, ".git", "index.lock");
|
|
13
22
|
}
|
|
14
23
|
function isIndexLockError(error) {
|
|
15
|
-
const stderr =
|
|
24
|
+
const stderr = error instanceof Error ? outputToString(asExecSyncError(error).stderr) : "";
|
|
16
25
|
return /index\.lock': File exists\./.test(stderr);
|
|
17
26
|
}
|
|
18
27
|
function removeStaleIndexLock(repositoryDir) {
|
|
@@ -81,9 +90,9 @@ export function commit(repositoryDir, message) {
|
|
|
81
90
|
});
|
|
82
91
|
return true;
|
|
83
92
|
}
|
|
84
|
-
catch (
|
|
85
|
-
|
|
86
|
-
|
|
93
|
+
catch (error) {
|
|
94
|
+
const childProcess = asExecSyncError(error);
|
|
95
|
+
if (childProcess.stdout === null || !/nothing to commit|rien à valider/.test(outputToString(childProcess.stdout))) {
|
|
87
96
|
console.error(childProcess.output);
|
|
88
97
|
throw childProcess;
|
|
89
98
|
}
|
|
@@ -102,10 +111,11 @@ export function commitAndPush(repositoryDir, message, remotes) {
|
|
|
102
111
|
stdio: ["ignore", "ignore", "pipe"],
|
|
103
112
|
});
|
|
104
113
|
}
|
|
105
|
-
catch (
|
|
114
|
+
catch (error) {
|
|
115
|
+
const childProcess = asExecSyncError(error);
|
|
106
116
|
// Don't stop when push fails.
|
|
107
117
|
console.error(childProcess.output);
|
|
108
|
-
exitCode = childProcess.status;
|
|
118
|
+
exitCode = childProcess.status ?? 1;
|
|
109
119
|
}
|
|
110
120
|
}
|
|
111
121
|
}
|
|
@@ -115,6 +125,27 @@ export function commitAndPush(repositoryDir, message, remotes) {
|
|
|
115
125
|
}
|
|
116
126
|
return exitCode;
|
|
117
127
|
}
|
|
128
|
+
export function pull(repositoryDir, remote = "origin", branch = "master") {
|
|
129
|
+
initRepo(repositoryDir);
|
|
130
|
+
const statusOutput = execSync("git status --porcelain", {
|
|
131
|
+
cwd: repositoryDir,
|
|
132
|
+
env: process.env,
|
|
133
|
+
encoding: "utf-8",
|
|
134
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
135
|
+
maxBuffer: MAXBUFFER,
|
|
136
|
+
}).trim();
|
|
137
|
+
if (statusOutput.length > 0) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
execSync(`git pull --rebase ${remote} ${branch}`, {
|
|
141
|
+
cwd: repositoryDir,
|
|
142
|
+
env: process.env,
|
|
143
|
+
encoding: "utf-8",
|
|
144
|
+
stdio: ["ignore", "ignore", "pipe"],
|
|
145
|
+
maxBuffer: MAXBUFFER,
|
|
146
|
+
});
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
118
149
|
export function resetAndPull(gitDir) {
|
|
119
150
|
execSync("git reset --hard origin/master", {
|
|
120
151
|
cwd: gitDir,
|
|
@@ -154,9 +185,11 @@ export function run(repositoryDir, args, verbose) {
|
|
|
154
185
|
console.log(output);
|
|
155
186
|
return output;
|
|
156
187
|
}
|
|
157
|
-
catch (
|
|
158
|
-
|
|
159
|
-
|
|
188
|
+
catch (error) {
|
|
189
|
+
const childProcess = asExecSyncError(error);
|
|
190
|
+
for (const output of ["stdout", "stderr"]) {
|
|
191
|
+
console.error(`${output}: ${outputToString(childProcess[output])}`);
|
|
192
|
+
}
|
|
160
193
|
throw childProcess;
|
|
161
194
|
}
|
|
162
195
|
}
|
|
@@ -175,8 +208,9 @@ export function test(repositoryDir, args, verbose) {
|
|
|
175
208
|
console.log(output);
|
|
176
209
|
return true;
|
|
177
210
|
}
|
|
178
|
-
catch (
|
|
179
|
-
|
|
211
|
+
catch (error) {
|
|
212
|
+
const childProcess = asExecSyncError(error);
|
|
213
|
+
if (childProcess.status !== 0)
|
|
180
214
|
return false;
|
|
181
215
|
throw childProcess;
|
|
182
216
|
}
|