gitlab-catalog-browser 0.1.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/LICENSE +201 -0
- package/README.md +75 -0
- package/bin/gitlab-ci-cli.js +29 -0
- package/dist/api/catalog.d.ts +38 -0
- package/dist/api/catalog.d.ts.map +1 -0
- package/dist/api/catalog.js +72 -0
- package/dist/api/catalog.js.map +1 -0
- package/dist/api/gitlab.d.ts +69 -0
- package/dist/api/gitlab.d.ts.map +1 -0
- package/dist/api/gitlab.js +226 -0
- package/dist/api/gitlab.js.map +1 -0
- package/dist/api/lint.d.ts +61 -0
- package/dist/api/lint.d.ts.map +1 -0
- package/dist/api/lint.js +41 -0
- package/dist/api/lint.js.map +1 -0
- package/dist/cache/schema-cache.d.ts +54 -0
- package/dist/cache/schema-cache.d.ts.map +1 -0
- package/dist/cache/schema-cache.js +124 -0
- package/dist/cache/schema-cache.js.map +1 -0
- package/dist/commands/batch.d.ts +19 -0
- package/dist/commands/batch.d.ts.map +1 -0
- package/dist/commands/batch.js +174 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/catalog.d.ts +42 -0
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/commands/catalog.js +158 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/component.d.ts +46 -0
- package/dist/commands/component.d.ts.map +1 -0
- package/dist/commands/component.js +213 -0
- package/dist/commands/component.js.map +1 -0
- package/dist/commands/pipeline.d.ts +61 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +880 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/setup.d.ts +119 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +391 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skills.d.ts +39 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +208 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/validate.d.ts +27 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +201 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config/loader.d.ts +80 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +217 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +46 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +45 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +437 -0
- package/dist/index.js.map +1 -0
- package/dist/output/table.d.ts +28 -0
- package/dist/output/table.d.ts.map +1 -0
- package/dist/output/table.js +67 -0
- package/dist/output/table.js.map +1 -0
- package/dist/types/api.d.ts +66 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +61 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/catalog.d.ts +77 -0
- package/dist/types/catalog.d.ts.map +1 -0
- package/dist/types/catalog.js +5 -0
- package/dist/types/catalog.js.map +1 -0
- package/package.json +60 -0
- package/skill-data/core/reference.md +127 -0
- package/skill-data/core/templates.md +97 -0
- package/skill-data/core/workflows.md +84 -0
- package/skill-data/manifest.json +12 -0
- package/skill-data/templates/basic-pipeline.yml +29 -0
- package/skill-data/templates/docker-build.yml +38 -0
- package/skill-data/templates/multi-stage.yml +43 -0
- package/skills/gitlab-catalog-browser/SKILL.md +49 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader for gitlab-ci-cli.
|
|
3
|
+
*
|
|
4
|
+
* Loads configuration from multiple sources with proper precedence:
|
|
5
|
+
* 1. User config file (~/.gitlab-ci-cli.json) — lowest priority
|
|
6
|
+
* 2. Project config file (./.gitlab-ci-cli.json) — overrides user
|
|
7
|
+
* 3. Environment variables (GITLAB_CI_CLI_*) — overrides files
|
|
8
|
+
* 4. CLI flags — highest priority
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { DEFAULT_CONFIG, ENV_VAR_MAP, } from './types.js';
|
|
14
|
+
// ──────────────────────────────────────────────
|
|
15
|
+
// Constants
|
|
16
|
+
// ──────────────────────────────────────────────
|
|
17
|
+
const CONFIG_FILENAME = '.gitlab-ci-cli.json';
|
|
18
|
+
/**
|
|
19
|
+
* Known config keys (including optional ones like `token`, `project`).
|
|
20
|
+
* Used to check key membership instead of `in config` since optional
|
|
21
|
+
* keys may not be present in the default config object.
|
|
22
|
+
*/
|
|
23
|
+
export const CONFIG_KEYS = [
|
|
24
|
+
'gitlabUrl',
|
|
25
|
+
'token',
|
|
26
|
+
'project',
|
|
27
|
+
'timeout',
|
|
28
|
+
'output',
|
|
29
|
+
];
|
|
30
|
+
// ──────────────────────────────────────────────
|
|
31
|
+
// File loading
|
|
32
|
+
// ──────────────────────────────────────────────
|
|
33
|
+
/**
|
|
34
|
+
* Read and parse a JSON config file.
|
|
35
|
+
* Returns null if the file doesn't exist.
|
|
36
|
+
* Returns a string error message prefixed with 'ERROR:' if the JSON is invalid.
|
|
37
|
+
*/
|
|
38
|
+
export function readConfigFile(filePath) {
|
|
39
|
+
if (!existsSync(filePath))
|
|
40
|
+
return null;
|
|
41
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(raw);
|
|
44
|
+
// Strip $schema before treating as config
|
|
45
|
+
if (parsed.$schema) {
|
|
46
|
+
delete parsed.$schema;
|
|
47
|
+
}
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
52
|
+
return `ERROR: Invalid JSON in ${filePath}: ${msg}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Safely parse a config file result, returning the parsed config or null.
|
|
57
|
+
* If the result is an error string, it's returned as a warning.
|
|
58
|
+
*/
|
|
59
|
+
function parseFileResult(result) {
|
|
60
|
+
if (result === null)
|
|
61
|
+
return { config: null, warning: null };
|
|
62
|
+
if (typeof result === 'string') {
|
|
63
|
+
return { config: null, warning: result };
|
|
64
|
+
}
|
|
65
|
+
return { config: result, warning: null };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Find and load a config file for the given directory.
|
|
69
|
+
* Returns null if no config file exists.
|
|
70
|
+
* Returns a warning string prefixed with 'ERROR:' if invalid JSON.
|
|
71
|
+
*/
|
|
72
|
+
export function loadProjectConfig(startDir = process.cwd()) {
|
|
73
|
+
const projectPath = join(startDir, CONFIG_FILENAME);
|
|
74
|
+
return readConfigFile(projectPath);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Load the user-level config file from the home directory.
|
|
78
|
+
* Returns null if no config file exists.
|
|
79
|
+
* Returns a warning string prefixed with 'ERROR:' if invalid JSON.
|
|
80
|
+
*/
|
|
81
|
+
export function loadUserConfig() {
|
|
82
|
+
const userPath = join(homedir(), CONFIG_FILENAME);
|
|
83
|
+
return readConfigFile(userPath);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Load both user and project config files.
|
|
87
|
+
* Returns [userConfig, projectConfig] where each may be null or an error string.
|
|
88
|
+
*/
|
|
89
|
+
export function loadConfigFiles() {
|
|
90
|
+
return {
|
|
91
|
+
user: loadUserConfig(),
|
|
92
|
+
project: loadProjectConfig(),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// ──────────────────────────────────────────────
|
|
96
|
+
// Merging
|
|
97
|
+
// ──────────────────────────────────────────────
|
|
98
|
+
/**
|
|
99
|
+
* Merge two config objects.
|
|
100
|
+
* Project-level values override user-level values.
|
|
101
|
+
*/
|
|
102
|
+
export function mergeConfigs(base, override) {
|
|
103
|
+
return { ...base, ...override };
|
|
104
|
+
}
|
|
105
|
+
// ──────────────────────────────────────────────
|
|
106
|
+
// Environment variable overrides
|
|
107
|
+
// ──────────────────────────────────────────────
|
|
108
|
+
/**
|
|
109
|
+
* Read environment variables and apply overrides.
|
|
110
|
+
* Returns a partial config with only the env-overridden keys.
|
|
111
|
+
*/
|
|
112
|
+
export function readEnvOverrides() {
|
|
113
|
+
const overrides = {};
|
|
114
|
+
const warnings = [];
|
|
115
|
+
for (const mapping of ENV_VAR_MAP) {
|
|
116
|
+
const raw = process.env[mapping.envVar];
|
|
117
|
+
if (raw === undefined || raw === '')
|
|
118
|
+
continue;
|
|
119
|
+
try {
|
|
120
|
+
const value = mapping.parse ? mapping.parse(raw) : raw;
|
|
121
|
+
overrides[mapping.key] = value;
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
warnings.push(`Warning: ${mapping.envVar}=${raw} could not be parsed: ${err instanceof Error ? err.message : String(err)}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return { overrides, warnings };
|
|
128
|
+
}
|
|
129
|
+
// ──────────────────────────────────────────────
|
|
130
|
+
// Full resolution
|
|
131
|
+
// ──────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Build the full configuration by applying the precedence chain:
|
|
134
|
+
* 1. Start with defaults
|
|
135
|
+
* 2. Overlay user config file
|
|
136
|
+
* 3. Overlay project config file
|
|
137
|
+
* 4. Overlay environment variables
|
|
138
|
+
* 5. Overlay CLI flags
|
|
139
|
+
*
|
|
140
|
+
* Returns a ResolvedConfig with source tracking and warnings.
|
|
141
|
+
*/
|
|
142
|
+
export function getConfig(cliFlags) {
|
|
143
|
+
const warnings = [];
|
|
144
|
+
const sources = {};
|
|
145
|
+
// Track the source of each config key as we go
|
|
146
|
+
const track = (key, source) => {
|
|
147
|
+
sources[key] = source;
|
|
148
|
+
};
|
|
149
|
+
// 1. Start with defaults
|
|
150
|
+
const config = { ...DEFAULT_CONFIG };
|
|
151
|
+
for (const key of Object.keys(DEFAULT_CONFIG)) {
|
|
152
|
+
track(key, 'default');
|
|
153
|
+
}
|
|
154
|
+
// 2. Load config files
|
|
155
|
+
const files = loadConfigFiles();
|
|
156
|
+
// Process user config
|
|
157
|
+
const userResult = parseFileResult(files.user);
|
|
158
|
+
if (userResult.warning) {
|
|
159
|
+
warnings.push(userResult.warning.replace('ERROR:', 'Warning:'));
|
|
160
|
+
}
|
|
161
|
+
if (userResult.config) {
|
|
162
|
+
for (const [key, value] of Object.entries(userResult.config)) {
|
|
163
|
+
if (value !== undefined && CONFIG_KEYS.includes(key)) {
|
|
164
|
+
config[key] = value;
|
|
165
|
+
track(key, 'user-file');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Process project config
|
|
170
|
+
const projectResult = parseFileResult(files.project);
|
|
171
|
+
if (projectResult.warning) {
|
|
172
|
+
warnings.push(projectResult.warning.replace('ERROR:', 'Warning:'));
|
|
173
|
+
}
|
|
174
|
+
if (projectResult.config) {
|
|
175
|
+
for (const [key, value] of Object.entries(projectResult.config)) {
|
|
176
|
+
if (value !== undefined && CONFIG_KEYS.includes(key)) {
|
|
177
|
+
config[key] = value;
|
|
178
|
+
track(key, 'project-file');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// 3. Environment variables
|
|
183
|
+
const { overrides: envOverrides, warnings: envWarnings } = readEnvOverrides();
|
|
184
|
+
warnings.push(...envWarnings);
|
|
185
|
+
for (const [key, value] of Object.entries(envOverrides)) {
|
|
186
|
+
if (value !== undefined && CONFIG_KEYS.includes(key)) {
|
|
187
|
+
config[key] = value;
|
|
188
|
+
track(key, 'env-var');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// 4. CLI flags
|
|
192
|
+
if (cliFlags) {
|
|
193
|
+
for (const [key, value] of Object.entries(cliFlags)) {
|
|
194
|
+
if (value !== undefined && CONFIG_KEYS.includes(key)) {
|
|
195
|
+
config[key] = value;
|
|
196
|
+
track(key, 'cli-flag');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
config: config,
|
|
202
|
+
sources: sources,
|
|
203
|
+
warnings,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
// ──────────────────────────────────────────────
|
|
207
|
+
// Convenience: load and get a specific config value
|
|
208
|
+
// ──────────────────────────────────────────────
|
|
209
|
+
/**
|
|
210
|
+
* Quick access to the resolved config for cases where
|
|
211
|
+
* full ResolvedConfig tracking is not needed.
|
|
212
|
+
* Wraps getConfig() and returns just the config object.
|
|
213
|
+
*/
|
|
214
|
+
export function loadConfig(cliFlags) {
|
|
215
|
+
return getConfig(cliFlags).config;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAKL,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,iDAAiD;AACjD,YAAY;AACZ,iDAAiD;AAEjD,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAgC;IACtD,WAAW;IACX,OAAO;IACP,SAAS;IACT,SAAS;IACT,QAAQ;CACT,CAAC;AAEF,iDAAiD;AACjD,eAAe;AACf,iDAAiD;AAEjD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAChD,0CAA0C;QAC1C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,0BAA0B,QAAQ,KAAK,GAAG,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,MAAqC;IAErC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACpD,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;IAClD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,IAAI,EAAE,cAAc,EAAE;QACtB,OAAO,EAAE,iBAAiB,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,UAAU;AACV,iDAAiD;AAEjD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,IAA6B,EAC7B,QAAiC;IAEjC,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,iDAAiD;AACjD,iCAAiC;AACjC,iDAAiD;AAEjD;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAI9B,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QAE9C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACtD,SAAqC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CACX,YAAY,OAAO,CAAC,MAAM,IAAI,GAAG,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC;AAcD,iDAAiD;AACjD,kBAAkB;AAClB,iDAAiD;AAEjD;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,QAA2B;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAiC,EAAE,CAAC;IAEjD,+CAA+C;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAyB,EAAE,MAAoB,EAAE,EAAE;QAChE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACxB,CAAC,CAAC;IAEF,yBAAyB;IACzB,MAAM,MAAM,GAAmB,EAAE,GAAG,cAAc,EAAE,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAgC,EAAE,CAAC;QAC7E,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACxB,CAAC;IAED,uBAAuB;IACvB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,sBAAsB;IACtB,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,GAA2B,CAAC,EAAE,CAAC;gBAC5E,MAA6C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC5D,KAAK,CAAC,GAA2B,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,IAAI,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,GAA2B,CAAC,EAAE,CAAC;gBAC5E,MAA6C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC5D,KAAK,CAAC,GAA2B,EAAE,cAAc,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9E,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,IAAI,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,GAA2B,CAAC,EAAE,CAAC;YAC5E,MAA6C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC5D,KAAK,CAAC,GAA2B,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,GAA2B,CAAC,EAAE,CAAC;gBAC5E,MAA6C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC5D,KAAK,CAAC,GAA2B,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAwB;QAChC,OAAO,EAAE,OAAqD;QAC9D,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,oDAAoD;AACpD,iDAAiD;AAEjD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAA2B;IACpD,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type definitions for gitlab-ci-cli.
|
|
3
|
+
*
|
|
4
|
+
* Defines the config shape, defaults, and type-safe accessors.
|
|
5
|
+
*/
|
|
6
|
+
export interface GitLabCIConfig {
|
|
7
|
+
/** GitLab instance URL (default: https://gitlab.com) */
|
|
8
|
+
gitlabUrl: string;
|
|
9
|
+
/** GitLab personal access token */
|
|
10
|
+
token?: string;
|
|
11
|
+
/** Default project path for validation context */
|
|
12
|
+
project?: string;
|
|
13
|
+
/** API request timeout in milliseconds (default: 30000) */
|
|
14
|
+
timeout: number;
|
|
15
|
+
/** Default output format (default: 'table') */
|
|
16
|
+
output: 'table' | 'json';
|
|
17
|
+
}
|
|
18
|
+
export declare const DEFAULT_CONFIG: GitLabCIConfig;
|
|
19
|
+
export type ConfigSource = 'default' | 'user-file' | 'project-file' | 'env-var' | 'cli-flag';
|
|
20
|
+
export interface ConfigEntry<T> {
|
|
21
|
+
value: T;
|
|
22
|
+
source: ConfigSource;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolvedConfig {
|
|
25
|
+
config: GitLabCIConfig;
|
|
26
|
+
/** Per-key source tracking for debugging */
|
|
27
|
+
sources: Record<keyof GitLabCIConfig, ConfigSource>;
|
|
28
|
+
/** List of warnings generated during loading (e.g. invalid JSON) */
|
|
29
|
+
warnings: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Maps environment variable names to config keys.
|
|
33
|
+
* Each tuple is [envVarName, configKey, parser?].
|
|
34
|
+
*/
|
|
35
|
+
export declare const ENV_VAR_MAP: Array<{
|
|
36
|
+
envVar: string;
|
|
37
|
+
key: keyof GitLabCIConfig;
|
|
38
|
+
parse?: (raw: string) => unknown;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Shape of the raw config file (with optional $schema field).
|
|
42
|
+
*/
|
|
43
|
+
export interface RawConfigFile extends Partial<GitLabCIConfig> {
|
|
44
|
+
$schema?: string;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAEhB,+CAA+C;IAC/C,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,cAAc,EAAE,cAInB,CAAC;AAMX,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AAE7F,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,cAAc,EAAE,YAAY,CAAC,CAAC;IACpD,oEAAoE;IACpE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC,CAqBA,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,cAAc,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type definitions for gitlab-ci-cli.
|
|
3
|
+
*
|
|
4
|
+
* Defines the config shape, defaults, and type-safe accessors.
|
|
5
|
+
*/
|
|
6
|
+
// ──────────────────────────────────────────────
|
|
7
|
+
// Defaults
|
|
8
|
+
// ──────────────────────────────────────────────
|
|
9
|
+
export const DEFAULT_CONFIG = {
|
|
10
|
+
gitlabUrl: 'https://gitlab.com',
|
|
11
|
+
timeout: 30000,
|
|
12
|
+
output: 'table',
|
|
13
|
+
};
|
|
14
|
+
// ──────────────────────────────────────────────
|
|
15
|
+
// Environment Variable Mapping
|
|
16
|
+
// ──────────────────────────────────────────────
|
|
17
|
+
/**
|
|
18
|
+
* Maps environment variable names to config keys.
|
|
19
|
+
* Each tuple is [envVarName, configKey, parser?].
|
|
20
|
+
*/
|
|
21
|
+
export const ENV_VAR_MAP = [
|
|
22
|
+
{ envVar: 'GITLAB_CI_CLI_URL', key: 'gitlabUrl' },
|
|
23
|
+
{ envVar: 'GITLAB_CI_CLI_TOKEN', key: 'token' },
|
|
24
|
+
{ envVar: 'GITLAB_CI_CLI_PROJECT', key: 'project' },
|
|
25
|
+
{
|
|
26
|
+
envVar: 'GITLAB_CI_CLI_TIMEOUT',
|
|
27
|
+
key: 'timeout',
|
|
28
|
+
parse: (raw) => {
|
|
29
|
+
const n = parseInt(raw, 10);
|
|
30
|
+
if (isNaN(n) || n <= 0)
|
|
31
|
+
throw new Error(`Invalid timeout value: ${raw}`);
|
|
32
|
+
return n;
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
envVar: 'GITLAB_CI_CLI_OUTPUT',
|
|
37
|
+
key: 'output',
|
|
38
|
+
parse: (raw) => {
|
|
39
|
+
if (raw !== 'table' && raw !== 'json')
|
|
40
|
+
throw new Error(`Invalid output format: ${raw}. Must be 'table' or 'json'`);
|
|
41
|
+
return raw;
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH,iDAAiD;AACjD,WAAW;AACX,iDAAiD;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,SAAS,EAAE,oBAAoB;IAC/B,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,OAAO;CACP,CAAC;AAqBX,iDAAiD;AACjD,+BAA+B;AAC/B,iDAAiD;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAInB;IACH,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,WAAW,EAAE;IACjD,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE;IAC/C,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG,EAAE,SAAS,EAAE;IACnD;QACE,MAAM,EAAE,uBAAuB;QAC/B,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,CAAC,GAAW,EAAU,EAAE;YAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC;QACX,CAAC;KACF;IACD;QACE,MAAM,EAAE,sBAAsB;QAC9B,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,CAAC,GAAW,EAAoB,EAAE;YACvC,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,6BAA6B,CAAC,CAAC;YACnH,OAAO,GAAG,CAAC;QACb,CAAC;KACF;CACF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* gitlab-catalog-browser — CLI entry point
|
|
4
|
+
*
|
|
5
|
+
* Main entry point for the `gitlab-ci-cli` command.
|
|
6
|
+
* Registers all commands using Commander.js.
|
|
7
|
+
* Loads configuration at startup and makes it available to all commands.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
|