@udondan/avanti 0.3.2 → 0.5.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/CHANGELOG.md +20 -0
- package/README.md +72 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +36 -0
- package/dist/config.js.map +1 -1
- package/dist/fetch.d.ts +3 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +37 -0
- package/dist/fetch.js.map +1 -0
- package/dist/processors/json.d.ts +4 -0
- package/dist/processors/json.d.ts.map +1 -0
- package/dist/processors/json.js +76 -0
- package/dist/processors/json.js.map +1 -0
- package/dist/sources/github.d.ts +1 -1
- package/dist/sources/github.d.ts.map +1 -1
- package/dist/sources/github.js +124 -20
- package/dist/sources/github.js.map +1 -1
- package/dist/sources/gitlab.d.ts +1 -1
- package/dist/sources/gitlab.d.ts.map +1 -1
- package/dist/sources/gitlab.js +136 -48
- package/dist/sources/gitlab.js.map +1 -1
- package/dist/sources/http.d.ts.map +1 -1
- package/dist/sources/http.js +5 -24
- package/dist/sources/http.js.map +1 -1
- package/dist/sources/index.d.ts.map +1 -1
- package/dist/sources/index.js +38 -21
- package/dist/sources/index.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.0](https://github.com/udondan/avanti/compare/v0.4.0...v0.5.0) (2026-05-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **fetch:** add exponential backoff retry for all HTTP requests ([#27](https://github.com/udondan/avanti/issues/27)) ([2caf0f3](https://github.com/udondan/avanti/commit/2caf0f3dc368fd6a7cead8a2946dc4504693d6f1))
|
|
9
|
+
* **sources:** replace mandatory CLI tools with native HTTP for GitHub and GitLab ([#21](https://github.com/udondan/avanti/issues/21)) ([990b8ee](https://github.com/udondan/avanti/commit/990b8eedc60047d9743eb69358d0967852c8d9a2))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Performance Improvements
|
|
13
|
+
|
|
14
|
+
* parallelize directory file fetches for GitHub and GitLab ([#26](https://github.com/udondan/avanti/issues/26)) ([c11d2e2](https://github.com/udondan/avanti/commit/c11d2e25871eccf75398cf11eb6b315db7c7a16b))
|
|
15
|
+
|
|
16
|
+
## [0.4.0](https://github.com/udondan/avanti/compare/v0.3.2...v0.4.0) (2026-05-07)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* **json:** add JSON merge and pretty-print processor ([#19](https://github.com/udondan/avanti/issues/19)) ([6fab171](https://github.com/udondan/avanti/commit/6fab171e1d1b85e86060213f6f0be6b9606ca96f))
|
|
22
|
+
|
|
3
23
|
## [0.3.2](https://github.com/udondan/avanti/compare/v0.3.1...v0.3.2) (2026-05-07)
|
|
4
24
|
|
|
5
25
|
|
package/README.md
CHANGED
|
@@ -15,8 +15,8 @@ Assemble local files from any source via a declarative YAML spec.
|
|
|
15
15
|
## Requirements
|
|
16
16
|
|
|
17
17
|
- Node.js 18+
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
|
|
19
|
+
The `glab` and `gh` CLIs are **optional**. Public repositories are accessed directly over HTTPS without any tools installed. The CLIs are only used as a fallback for private repositories or private instances when no token is configured.
|
|
20
20
|
|
|
21
21
|
## Install
|
|
22
22
|
|
|
@@ -131,6 +131,7 @@ files:
|
|
|
131
131
|
| `mode` | No | File permission mode, e.g. `"0755"` |
|
|
132
132
|
| `replace` | No | List of `{from, to}` replacement rules. `from` may be a plain string or `/pattern/flags` regex. |
|
|
133
133
|
| `post` | No | Shell script. Content is piped via stdin; stdout is used as the result. Runs after `replace`. |
|
|
134
|
+
| `json` | No | JSON merge/format options (see below). When set, sources are parsed as JSON and the result is pretty-printed with 2-space indent. |
|
|
134
135
|
|
|
135
136
|
### Source Types
|
|
136
137
|
|
|
@@ -162,7 +163,7 @@ src:
|
|
|
162
163
|
github:
|
|
163
164
|
repo: owner/repo # GitHub owner/repo
|
|
164
165
|
file: path/to/file.txt # file or directory in repo
|
|
165
|
-
ref: main # branch or
|
|
166
|
+
ref: main # branch, tag, or $latest (optional)
|
|
166
167
|
```
|
|
167
168
|
|
|
168
169
|
### Directory Sources
|
|
@@ -210,6 +211,48 @@ target: combined.txt
|
|
|
210
211
|
|
|
211
212
|
Sources are fetched in order and joined with a newline. Post-processing (`replace`, `post`) is applied to the combined result. If any source fails, the entire entry is aborted.
|
|
212
213
|
|
|
214
|
+
### JSON Merging
|
|
215
|
+
|
|
216
|
+
Add a `json` block to merge multiple JSON sources into a single valid JSON file, or to pretty-print a single JSON source with 2-space indentation.
|
|
217
|
+
|
|
218
|
+
```yaml
|
|
219
|
+
files:
|
|
220
|
+
- src:
|
|
221
|
+
- ./defaults.json
|
|
222
|
+
- type: github
|
|
223
|
+
repo: org/configs
|
|
224
|
+
file: overrides.json
|
|
225
|
+
target: merged.json
|
|
226
|
+
json:
|
|
227
|
+
conflicts: last_wins # abort | first_wins | last_wins (default)
|
|
228
|
+
arrays: replace # replace (default) | concat
|
|
229
|
+
objects: merge # merge (default) | replace
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Options:**
|
|
233
|
+
|
|
234
|
+
- `conflicts` — what to do when the same key holds a scalar (or an array/object when their strategy is `replace`):
|
|
235
|
+
- `last_wins` _(default)_ — the last source's value wins
|
|
236
|
+
- `first_wins` — the first source's value is kept
|
|
237
|
+
- `abort` — throw an error (identical values are not considered a conflict)
|
|
238
|
+
- `arrays` — how to combine arrays at the same key:
|
|
239
|
+
- `replace` _(default)_ — the later source's array replaces the earlier one
|
|
240
|
+
- `concat` — arrays are concatenated (no deduplication)
|
|
241
|
+
- `objects` — how to combine objects (maps) at the same key:
|
|
242
|
+
- `merge` _(default)_ — deep merge, applying the same rules recursively to nested keys
|
|
243
|
+
- `replace` — the later source's object replaces the earlier one entirely
|
|
244
|
+
|
|
245
|
+
All options are optional. `json: {}` is valid and just pretty-prints the source.
|
|
246
|
+
|
|
247
|
+
**Pretty-printing a single file** — `json` works on single-source entries too:
|
|
248
|
+
|
|
249
|
+
```yaml
|
|
250
|
+
files:
|
|
251
|
+
- src: ./minified.json
|
|
252
|
+
target: pretty.json
|
|
253
|
+
json: {}
|
|
254
|
+
```
|
|
255
|
+
|
|
213
256
|
### Variables
|
|
214
257
|
|
|
215
258
|
Define reusable values at the top level under `variables:`:
|
|
@@ -246,7 +289,32 @@ replace:
|
|
|
246
289
|
|
|
247
290
|
Referencing an undefined variable or a missing environment variable is an error.
|
|
248
291
|
|
|
249
|
-
`$latest` is reserved
|
|
292
|
+
`$latest` is a reserved keyword that resolves to the latest published version and cannot be used as a variable name. For GitLab it resolves to the latest tag sorted by semantic version. For GitHub it resolves to the tag of the latest release; if the repository has no releases, it falls back to the most recently created tag.
|
|
293
|
+
|
|
294
|
+
### Authentication
|
|
295
|
+
|
|
296
|
+
Public repositories on github.com and gitlab.com work without any configuration. For private repositories or private instances, supply a token via environment variable:
|
|
297
|
+
|
|
298
|
+
| Platform | Environment variable | Header sent |
|
|
299
|
+
| -------- | ---------------------------------------- | ------------------------------- |
|
|
300
|
+
| GitHub | `GITHUB_TOKEN` | `Authorization: Bearer <token>` |
|
|
301
|
+
| GitLab | `GITLAB_TOKEN` or `GITLAB_PRIVATE_TOKEN` | `PRIVATE-TOKEN: <token>` |
|
|
302
|
+
|
|
303
|
+
If a request fails with a 401, 403, or 404 response and `gh` / `glab` is installed and authenticated, the tool falls back to the CLI automatically. This means existing CLI setups continue to work for private repos without any extra configuration.
|
|
304
|
+
|
|
305
|
+
### Private Instances
|
|
306
|
+
|
|
307
|
+
**GitLab** — set `GITLAB_HOST` to override the default `gitlab.com`:
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
GITLAB_HOST=gitlab.mycompany.com avanti pull
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**GitHub Enterprise Server** — set `GITHUB_HOST` to override the default `github.com` (API requests go to `https://{GITHUB_HOST}/api/v3`):
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
GITHUB_HOST=github.mycompany.com avanti pull
|
|
317
|
+
```
|
|
250
318
|
|
|
251
319
|
## Use Cases
|
|
252
320
|
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EAShB,MAAM,SAAS,CAAC;AAUjB,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CA6E9D"}
|
package/dist/config.js
CHANGED
|
@@ -103,6 +103,9 @@ function loadConfig(configPath) {
|
|
|
103
103
|
}
|
|
104
104
|
fileEntry.replace = e['replace'].map((r, j) => parseReplaceRule(r, i, j));
|
|
105
105
|
}
|
|
106
|
+
if (e['json'] !== undefined) {
|
|
107
|
+
fileEntry.json = parseJsonMergeOptions(e['json'], i);
|
|
108
|
+
}
|
|
106
109
|
return fileEntry;
|
|
107
110
|
});
|
|
108
111
|
return { variables, files };
|
|
@@ -195,6 +198,39 @@ function isExecSrc(src) {
|
|
|
195
198
|
function isRawSrc(src) {
|
|
196
199
|
return typeof src === 'object' && 'raw' in src;
|
|
197
200
|
}
|
|
201
|
+
function parseJsonMergeOptions(raw, i) {
|
|
202
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
203
|
+
throw new Error(`files[${i}]: "json" must be an object`);
|
|
204
|
+
}
|
|
205
|
+
const obj = raw;
|
|
206
|
+
const opts = {};
|
|
207
|
+
const conflictValues = [
|
|
208
|
+
'abort',
|
|
209
|
+
'first_wins',
|
|
210
|
+
'last_wins',
|
|
211
|
+
];
|
|
212
|
+
if (obj['conflicts'] !== undefined) {
|
|
213
|
+
if (!conflictValues.includes(obj['conflicts'])) {
|
|
214
|
+
throw new Error(`files[${i}].json.conflicts: must be one of ${conflictValues.join(', ')}`);
|
|
215
|
+
}
|
|
216
|
+
opts.conflicts = obj['conflicts'];
|
|
217
|
+
}
|
|
218
|
+
const arrayValues = ['replace', 'concat'];
|
|
219
|
+
if (obj['arrays'] !== undefined) {
|
|
220
|
+
if (!arrayValues.includes(obj['arrays'])) {
|
|
221
|
+
throw new Error(`files[${i}].json.arrays: must be one of ${arrayValues.join(', ')}`);
|
|
222
|
+
}
|
|
223
|
+
opts.arrays = obj['arrays'];
|
|
224
|
+
}
|
|
225
|
+
const objectValues = ['replace', 'merge'];
|
|
226
|
+
if (obj['objects'] !== undefined) {
|
|
227
|
+
if (!objectValues.includes(obj['objects'])) {
|
|
228
|
+
throw new Error(`files[${i}].json.objects: must be one of ${objectValues.join(', ')}`);
|
|
229
|
+
}
|
|
230
|
+
opts.objects = obj['objects'];
|
|
231
|
+
}
|
|
232
|
+
return opts;
|
|
233
|
+
}
|
|
198
234
|
function parseReplaceRule(r, i, j) {
|
|
199
235
|
if (!r || typeof r !== 'object' || Array.isArray(r)) {
|
|
200
236
|
throw new Error(`files[${i}].replace[${j}]: must be an object`);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAgC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":";AA0BA,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
|
package/dist/fetch.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchWithRetry = void 0;
|
|
4
|
+
const MAX_RETRIES = 5;
|
|
5
|
+
const BASE_DELAY_MS = 1_000;
|
|
6
|
+
const MAX_DELAY_MS = 60_000;
|
|
7
|
+
function sleep(ms) {
|
|
8
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
+
}
|
|
10
|
+
function retryDelayMs(attempt, headers) {
|
|
11
|
+
// Retry-After: seconds to wait (GitHub secondary rate limit, GitLab)
|
|
12
|
+
const retryAfter = headers.get('Retry-After');
|
|
13
|
+
if (retryAfter) {
|
|
14
|
+
const secs = parseInt(retryAfter, 10);
|
|
15
|
+
if (!isNaN(secs) && secs > 0)
|
|
16
|
+
return Math.min(secs * 1_000, MAX_DELAY_MS);
|
|
17
|
+
}
|
|
18
|
+
// X-RateLimit-Reset: Unix timestamp when the limit resets (GitHub primary rate limit)
|
|
19
|
+
const resetAt = headers.get('X-RateLimit-Reset');
|
|
20
|
+
if (resetAt) {
|
|
21
|
+
const waitMs = parseInt(resetAt, 10) * 1_000 - Date.now();
|
|
22
|
+
if (waitMs > 0)
|
|
23
|
+
return Math.min(waitMs, MAX_DELAY_MS);
|
|
24
|
+
}
|
|
25
|
+
return Math.min(BASE_DELAY_MS * 2 ** attempt, MAX_DELAY_MS);
|
|
26
|
+
}
|
|
27
|
+
async function fetchWithRetry(url, options = {}) {
|
|
28
|
+
for (let attempt = 0;; attempt++) {
|
|
29
|
+
const res = await fetch(url, options);
|
|
30
|
+
const shouldRetry = res.status === 429 || (res.status >= 500 && res.status <= 599);
|
|
31
|
+
if (!shouldRetry || attempt >= MAX_RETRIES)
|
|
32
|
+
return res;
|
|
33
|
+
await sleep(retryDelayMs(attempt, res.headers));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.fetchWithRetry = fetchWithRetry;
|
|
37
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":";;;AAAA,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,OAAgB;IACrD,qEAAqE;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC;IAC5E,CAAC;IAED,sFAAsF;IACtF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1D,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,GAAW,EACX,UAAuB,EAAE;IAEzB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,WAAW;YAAE,OAAO,GAAG,CAAC;QACvD,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAXD,wCAWC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/processors/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AA+D5C,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,gBAAqB,GAC1B,MAAM,CA0BR;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQlD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatJson = exports.mergeJson = void 0;
|
|
4
|
+
function isPlainObject(v) {
|
|
5
|
+
return v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
6
|
+
}
|
|
7
|
+
function mergeValues(path, a, b, opts) {
|
|
8
|
+
// Identical values — no conflict
|
|
9
|
+
if (JSON.stringify(a) === JSON.stringify(b))
|
|
10
|
+
return a;
|
|
11
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
12
|
+
if (opts.arrays === 'concat')
|
|
13
|
+
return [...a, ...b];
|
|
14
|
+
// arrays: replace — fall through to conflict handling
|
|
15
|
+
}
|
|
16
|
+
else if (isPlainObject(a) && isPlainObject(b)) {
|
|
17
|
+
if (opts.objects === 'merge')
|
|
18
|
+
return deepMerge(a, b, opts, path);
|
|
19
|
+
// objects: replace — fall through to conflict handling
|
|
20
|
+
}
|
|
21
|
+
const loc = path || '(root)';
|
|
22
|
+
if (opts.conflicts === 'abort') {
|
|
23
|
+
throw new Error(`JSON conflict at ${loc}`);
|
|
24
|
+
}
|
|
25
|
+
if (opts.conflicts === 'first_wins')
|
|
26
|
+
return a;
|
|
27
|
+
return b;
|
|
28
|
+
}
|
|
29
|
+
function deepMerge(a, b, opts, basePath) {
|
|
30
|
+
const result = { ...a };
|
|
31
|
+
for (const [key, bVal] of Object.entries(b)) {
|
|
32
|
+
const childPath = basePath ? `${basePath}.${key}` : key;
|
|
33
|
+
if (key in result) {
|
|
34
|
+
result[key] = mergeValues(childPath, result[key], bVal, opts);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
result[key] = bVal;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
function mergeJson(parts, opts = {}) {
|
|
43
|
+
const resolved = {
|
|
44
|
+
conflicts: opts.conflicts ?? 'last_wins',
|
|
45
|
+
arrays: opts.arrays ?? 'replace',
|
|
46
|
+
objects: opts.objects ?? 'merge',
|
|
47
|
+
};
|
|
48
|
+
if (parts.length === 0)
|
|
49
|
+
return 'null';
|
|
50
|
+
const parsed = parts.map((p, i) => {
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(p);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw new Error(`[source ${i}]: invalid JSON: ${e.message}`, { cause: e });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
let result = parsed[0];
|
|
59
|
+
for (let i = 1; i < parsed.length; i++) {
|
|
60
|
+
result = mergeValues('', result, parsed[i], resolved);
|
|
61
|
+
}
|
|
62
|
+
return JSON.stringify(result, null, 2);
|
|
63
|
+
}
|
|
64
|
+
exports.mergeJson = mergeJson;
|
|
65
|
+
function formatJson(content) {
|
|
66
|
+
try {
|
|
67
|
+
return JSON.stringify(JSON.parse(content), null, 2);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
throw new Error(`invalid JSON: ${e.message}`, {
|
|
71
|
+
cause: e,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.formatJson = formatJson;
|
|
76
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/processors/json.ts"],"names":[],"mappings":";;;AAgBA,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAClB,IAAY,EACZ,CAAY,EACZ,CAAY,EACZ,IAAqB;IAErB,iCAAiC;IACjC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,sDAAsD;IACxD,CAAC;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjE,uDAAuD;IACzD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,QAAQ,CAAC;IAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY;QAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,SAAS,CAChB,CAA4B,EAC5B,CAA4B,EAC5B,IAAqB,EACrB,QAAgB;IAEhB,MAAM,MAAM,GAA8B,EAAE,GAAG,CAAC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,SAAS,CACvB,KAAe,EACf,OAAyB,EAAE;IAE3B,MAAM,QAAQ,GAAoB;QAChC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,WAAW;QACxC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;KACjC,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAEtC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAc,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,WAAW,CAAC,oBAAqB,CAAiB,CAAC,OAAO,EAAE,EAC5D,EAAE,KAAK,EAAE,CAAC,EAAE,CACb,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AA7BD,8BA6BC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAkB,CAAiB,CAAC,OAAO,EAAE,EAAE;YAC7D,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AARD,gCAQC"}
|
package/dist/sources/github.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface GitHubResult {
|
|
2
2
|
files: Map<string, string>;
|
|
3
3
|
}
|
|
4
|
-
export declare function fetchGitHub(repo: string, file: string, ref: string | undefined): GitHubResult
|
|
4
|
+
export declare function fetchGitHub(repo: string, file: string, ref: string | undefined): Promise<GitHubResult>;
|
|
5
5
|
//# sourceMappingURL=github.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/sources/github.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/sources/github.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAgOD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,YAAY,CAAC,CA4BvB"}
|
package/dist/sources/github.js
CHANGED
|
@@ -26,22 +26,50 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.fetchGitHub = void 0;
|
|
27
27
|
const child_process_1 = require("child_process");
|
|
28
28
|
const path = __importStar(require("path"));
|
|
29
|
+
const fetch_1 = require("../fetch");
|
|
30
|
+
function getApiBase() {
|
|
31
|
+
const host = process.env.GITHUB_HOST;
|
|
32
|
+
return host ? `https://${host}/api/v3` : 'https://api.github.com';
|
|
33
|
+
}
|
|
34
|
+
function apiHeaders() {
|
|
35
|
+
const headers = {
|
|
36
|
+
Accept: 'application/vnd.github+json',
|
|
37
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
38
|
+
'User-Agent': 'scync',
|
|
39
|
+
};
|
|
40
|
+
const token = process.env.GITHUB_TOKEN;
|
|
41
|
+
if (token)
|
|
42
|
+
headers.Authorization = `Bearer ${token}`;
|
|
43
|
+
return headers;
|
|
44
|
+
}
|
|
45
|
+
function shouldFallback(status) {
|
|
46
|
+
return status === 401 || status === 403 || status === 404;
|
|
47
|
+
}
|
|
48
|
+
function isGhAvailable() {
|
|
49
|
+
return !(0, child_process_1.spawnSync)('gh', ['--version'], { encoding: 'utf8' }).error;
|
|
50
|
+
}
|
|
29
51
|
function ghRun(args) {
|
|
30
52
|
const result = (0, child_process_1.spawnSync)('gh', args, { encoding: 'utf8' });
|
|
31
|
-
if (result.error)
|
|
32
|
-
|
|
33
|
-
if (msg.includes('ENOENT')) {
|
|
34
|
-
throw new Error('gh CLI not found. Install it from https://cli.github.com');
|
|
35
|
-
}
|
|
36
|
-
throw new Error(`gh error: ${msg}`);
|
|
37
|
-
}
|
|
53
|
+
if (result.error)
|
|
54
|
+
throw new Error(`gh error: ${result.error.message}`);
|
|
38
55
|
return {
|
|
39
56
|
stdout: result.stdout ?? '',
|
|
40
57
|
stderr: result.stderr ?? '',
|
|
41
58
|
status: result.status,
|
|
42
59
|
};
|
|
43
60
|
}
|
|
44
|
-
function detectPathType(repo, filePath, ref) {
|
|
61
|
+
async function detectPathType(repo, filePath, ref) {
|
|
62
|
+
const res = await (0, fetch_1.fetchWithRetry)(`${getApiBase()}/repos/${repo}/contents/${filePath}?ref=${encodeURIComponent(ref)}`, { headers: apiHeaders() });
|
|
63
|
+
if (res.ok) {
|
|
64
|
+
const data = await res.json();
|
|
65
|
+
return Array.isArray(data) ? 'directory' : 'file';
|
|
66
|
+
}
|
|
67
|
+
if (shouldFallback(res.status) && isGhAvailable()) {
|
|
68
|
+
return detectPathTypeViaCli(repo, filePath, ref);
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`Failed to stat ${filePath} in ${repo}@${ref}: HTTP ${res.status}`);
|
|
71
|
+
}
|
|
72
|
+
function detectPathTypeViaCli(repo, filePath, ref) {
|
|
45
73
|
const res = ghRun([
|
|
46
74
|
'api',
|
|
47
75
|
`repos/${repo}/contents/${filePath}?ref=${encodeURIComponent(ref)}`,
|
|
@@ -53,7 +81,18 @@ function detectPathType(repo, filePath, ref) {
|
|
|
53
81
|
}
|
|
54
82
|
return res.stdout.trim();
|
|
55
83
|
}
|
|
56
|
-
function fetchFile(repo, filePath, ref) {
|
|
84
|
+
async function fetchFile(repo, filePath, ref) {
|
|
85
|
+
const res = await (0, fetch_1.fetchWithRetry)(`${getApiBase()}/repos/${repo}/contents/${filePath}?ref=${encodeURIComponent(ref)}`, { headers: apiHeaders() });
|
|
86
|
+
if (!res.ok) {
|
|
87
|
+
if (shouldFallback(res.status) && isGhAvailable()) {
|
|
88
|
+
return fetchFileViaCli(repo, filePath, ref);
|
|
89
|
+
}
|
|
90
|
+
throw new Error(`Failed to fetch ${filePath} from ${repo}@${ref}: HTTP ${res.status}`);
|
|
91
|
+
}
|
|
92
|
+
const data = (await res.json());
|
|
93
|
+
return Buffer.from(data.content.replace(/\n/g, ''), 'base64').toString('utf8');
|
|
94
|
+
}
|
|
95
|
+
function fetchFileViaCli(repo, filePath, ref) {
|
|
57
96
|
const res = ghRun([
|
|
58
97
|
'api',
|
|
59
98
|
`repos/${repo}/contents/${filePath}?ref=${encodeURIComponent(ref)}`,
|
|
@@ -66,7 +105,21 @@ function fetchFile(repo, filePath, ref) {
|
|
|
66
105
|
const b64 = res.stdout.trim().replace(/\\n/g, '').replace(/\n/g, '');
|
|
67
106
|
return Buffer.from(b64, 'base64').toString('utf8');
|
|
68
107
|
}
|
|
69
|
-
function listTree(repo, dirPath, ref) {
|
|
108
|
+
async function listTree(repo, dirPath, ref) {
|
|
109
|
+
const res = await (0, fetch_1.fetchWithRetry)(`${getApiBase()}/repos/${repo}/git/trees/${encodeURIComponent(ref)}?recursive=1`, { headers: apiHeaders() });
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
if (shouldFallback(res.status) && isGhAvailable()) {
|
|
112
|
+
return listTreeViaCli(repo, dirPath, ref);
|
|
113
|
+
}
|
|
114
|
+
throw new Error(`Failed to list tree ${dirPath} in ${repo}@${ref}: HTTP ${res.status}`);
|
|
115
|
+
}
|
|
116
|
+
const data = (await res.json());
|
|
117
|
+
const prefix = `${dirPath}/`;
|
|
118
|
+
return data.tree
|
|
119
|
+
.filter((item) => item.type === 'blob' && item.path.startsWith(prefix))
|
|
120
|
+
.map((item) => item.path);
|
|
121
|
+
}
|
|
122
|
+
function listTreeViaCli(repo, dirPath, ref) {
|
|
70
123
|
const res = ghRun([
|
|
71
124
|
'api',
|
|
72
125
|
`repos/${repo}/git/trees/${encodeURIComponent(ref)}?recursive=1`,
|
|
@@ -78,24 +131,75 @@ function listTree(repo, dirPath, ref) {
|
|
|
78
131
|
}
|
|
79
132
|
return res.stdout.trim().split('\n').filter(Boolean);
|
|
80
133
|
}
|
|
81
|
-
function
|
|
82
|
-
|
|
134
|
+
async function resolveRef(repo, ref) {
|
|
135
|
+
if (ref !== '$latest')
|
|
136
|
+
return ref ?? 'HEAD';
|
|
137
|
+
// Try latest release first
|
|
138
|
+
const relRes = await (0, fetch_1.fetchWithRetry)(`${getApiBase()}/repos/${repo}/releases/latest`, {
|
|
139
|
+
headers: apiHeaders(),
|
|
140
|
+
});
|
|
141
|
+
if (relRes.ok) {
|
|
142
|
+
const rel = (await relRes.json());
|
|
143
|
+
return rel.tag_name;
|
|
144
|
+
}
|
|
145
|
+
// No releases (404) — fall back to most recent tag
|
|
146
|
+
if (relRes.status === 404) {
|
|
147
|
+
const tagRes = await (0, fetch_1.fetchWithRetry)(`${getApiBase()}/repos/${repo}/tags?per_page=1`, { headers: apiHeaders() });
|
|
148
|
+
if (tagRes.ok) {
|
|
149
|
+
const tags = (await tagRes.json());
|
|
150
|
+
if (tags.length)
|
|
151
|
+
return tags[0].name;
|
|
152
|
+
throw new Error(`No releases or tags found for ${repo}`);
|
|
153
|
+
}
|
|
154
|
+
if (shouldFallback(tagRes.status) && isGhAvailable()) {
|
|
155
|
+
return resolveRefViaCli(repo);
|
|
156
|
+
}
|
|
157
|
+
throw new Error(`Failed to resolve $latest for ${repo}: HTTP ${tagRes.status}`);
|
|
158
|
+
}
|
|
159
|
+
if (shouldFallback(relRes.status) && isGhAvailable()) {
|
|
160
|
+
return resolveRefViaCli(repo);
|
|
161
|
+
}
|
|
162
|
+
throw new Error(`Failed to resolve $latest for ${repo}: HTTP ${relRes.status}`);
|
|
163
|
+
}
|
|
164
|
+
function resolveRefViaCli(repo) {
|
|
165
|
+
const res = ghRun([
|
|
166
|
+
'api',
|
|
167
|
+
`repos/${repo}/releases/latest`,
|
|
168
|
+
'--jq',
|
|
169
|
+
'.tag_name',
|
|
170
|
+
]);
|
|
171
|
+
if (res.status === 0 && res.stdout.trim())
|
|
172
|
+
return res.stdout.trim();
|
|
173
|
+
// Fall back to most recent tag
|
|
174
|
+
const tagRes = ghRun([
|
|
175
|
+
'api',
|
|
176
|
+
`repos/${repo}/tags?per_page=1`,
|
|
177
|
+
'--jq',
|
|
178
|
+
'.[0].name',
|
|
179
|
+
]);
|
|
180
|
+
if (tagRes.status !== 0 || !tagRes.stdout.trim()) {
|
|
181
|
+
throw new Error(`No releases or tags found for ${repo}`);
|
|
182
|
+
}
|
|
183
|
+
return tagRes.stdout.trim();
|
|
184
|
+
}
|
|
185
|
+
async function fetchGitHub(repo, file, ref) {
|
|
186
|
+
const resolvedRef = await resolveRef(repo, ref);
|
|
83
187
|
const normalizedPath = file.replace(/\/$/, '');
|
|
84
188
|
const isDirectory = file.endsWith('/') ||
|
|
85
|
-
detectPathType(repo, normalizedPath, resolvedRef) === 'directory';
|
|
189
|
+
(await detectPathType(repo, normalizedPath, resolvedRef)) === 'directory';
|
|
86
190
|
if (!isDirectory) {
|
|
87
|
-
const content = fetchFile(repo, normalizedPath, resolvedRef);
|
|
191
|
+
const content = await fetchFile(repo, normalizedPath, resolvedRef);
|
|
88
192
|
return { files: new Map([[path.basename(normalizedPath), content]]) };
|
|
89
193
|
}
|
|
90
|
-
const paths = listTree(repo, normalizedPath, resolvedRef);
|
|
194
|
+
const paths = await listTree(repo, normalizedPath, resolvedRef);
|
|
91
195
|
if (!paths.length) {
|
|
92
196
|
throw new Error(`Failed to fetch ${file} from ${repo}@${resolvedRef} (not a file or empty directory)`);
|
|
93
197
|
}
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return { files };
|
|
198
|
+
const entries = await Promise.all(paths.map(async (p) => [
|
|
199
|
+
path.relative(normalizedPath, p),
|
|
200
|
+
await fetchFile(repo, p, resolvedRef),
|
|
201
|
+
]));
|
|
202
|
+
return { files: new Map(entries) };
|
|
99
203
|
}
|
|
100
204
|
exports.fetchGitHub = fetchGitHub;
|
|
101
205
|
//# sourceMappingURL=github.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/sources/github.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAC1C,2CAA6B;
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/sources/github.ts"],"names":[],"mappings":"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"}
|
package/dist/sources/gitlab.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export interface GitLabResult {
|
|
|
2
2
|
/** Map of relative path → content */
|
|
3
3
|
files: Map<string, string>;
|
|
4
4
|
}
|
|
5
|
-
export declare function fetchGitLab(project: string, file: string, ref: string | undefined): GitLabResult
|
|
5
|
+
export declare function fetchGitLab(project: string, file: string, ref: string | undefined): Promise<GitLabResult>;
|
|
6
6
|
//# sourceMappingURL=gitlab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/sources/gitlab.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/sources/gitlab.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAgTD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,YAAY,CAAC,CAqCvB"}
|
package/dist/sources/gitlab.js
CHANGED
|
@@ -28,31 +28,44 @@ const child_process_1 = require("child_process");
|
|
|
28
28
|
const fs = __importStar(require("fs"));
|
|
29
29
|
const os = __importStar(require("os"));
|
|
30
30
|
const path = __importStar(require("path"));
|
|
31
|
+
const fetch_1 = require("../fetch");
|
|
32
|
+
function getHost() {
|
|
33
|
+
return process.env.GITLAB_HOST ?? 'gitlab.com';
|
|
34
|
+
}
|
|
35
|
+
function apiHeaders() {
|
|
36
|
+
const headers = { 'User-Agent': 'scync' };
|
|
37
|
+
const token = process.env.GITLAB_TOKEN ?? process.env.GITLAB_PRIVATE_TOKEN;
|
|
38
|
+
if (token)
|
|
39
|
+
headers['PRIVATE-TOKEN'] = token;
|
|
40
|
+
return headers;
|
|
41
|
+
}
|
|
42
|
+
function shouldFallback(status) {
|
|
43
|
+
return status === 401 || status === 403 || status === 404;
|
|
44
|
+
}
|
|
45
|
+
function isGlabAvailable() {
|
|
46
|
+
return !(0, child_process_1.spawnSync)('glab', ['--version'], { encoding: 'utf8' }).error;
|
|
47
|
+
}
|
|
31
48
|
function glabRun(args) {
|
|
32
49
|
const result = (0, child_process_1.spawnSync)('glab', args, { encoding: 'utf8' });
|
|
33
|
-
if (result.error)
|
|
34
|
-
|
|
35
|
-
if (msg.includes('ENOENT')) {
|
|
36
|
-
throw new Error('glab CLI not found. Install it from https://gitlab.com/gitlab-org/cli');
|
|
37
|
-
}
|
|
38
|
-
throw new Error(`glab error: ${msg}`);
|
|
39
|
-
}
|
|
50
|
+
if (result.error)
|
|
51
|
+
throw new Error(`glab error: ${result.error.message}`);
|
|
40
52
|
return {
|
|
41
53
|
stdout: result.stdout ?? '',
|
|
42
54
|
stderr: result.stderr ?? '',
|
|
43
55
|
status: result.status,
|
|
44
56
|
};
|
|
45
57
|
}
|
|
46
|
-
function resolveRef(project, ref) {
|
|
58
|
+
async function resolveRef(project, ref) {
|
|
47
59
|
if (!ref || ref === '$latest') {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
const host = getHost();
|
|
61
|
+
const res = await (0, fetch_1.fetchWithRetry)(`https://${host}/api/v4/projects/${encodeURIComponent(project)}/repository/tags?order_by=version&sort=desc&per_page=1`, { headers: apiHeaders() });
|
|
62
|
+
if (!res.ok) {
|
|
63
|
+
if (shouldFallback(res.status) && isGlabAvailable()) {
|
|
64
|
+
return resolveRefViaCli(project);
|
|
65
|
+
}
|
|
66
|
+
throw new Error(`Failed to resolve $latest for ${project}: HTTP ${res.status}`);
|
|
54
67
|
}
|
|
55
|
-
const tags =
|
|
68
|
+
const tags = (await res.json());
|
|
56
69
|
if (!tags.length) {
|
|
57
70
|
throw new Error(`No tags found for ${project} (needed to resolve $latest)`);
|
|
58
71
|
}
|
|
@@ -60,7 +73,53 @@ function resolveRef(project, ref) {
|
|
|
60
73
|
}
|
|
61
74
|
return ref;
|
|
62
75
|
}
|
|
63
|
-
function
|
|
76
|
+
function resolveRefViaCli(project) {
|
|
77
|
+
const res = glabRun([
|
|
78
|
+
'api',
|
|
79
|
+
`projects/${encodeURIComponent(project)}/repository/tags?order_by=version&sort=desc&per_page=1`,
|
|
80
|
+
]);
|
|
81
|
+
if (res.status !== 0) {
|
|
82
|
+
throw new Error(`Failed to resolve $latest for ${project}: ${res.stderr}`);
|
|
83
|
+
}
|
|
84
|
+
const tags = JSON.parse(res.stdout);
|
|
85
|
+
if (!tags.length) {
|
|
86
|
+
throw new Error(`No tags found for ${project} (needed to resolve $latest)`);
|
|
87
|
+
}
|
|
88
|
+
return tags[0].name;
|
|
89
|
+
}
|
|
90
|
+
async function detectPathType(project, filePath, ref) {
|
|
91
|
+
const host = getHost();
|
|
92
|
+
const encodedPath = encodeURIComponent(filePath);
|
|
93
|
+
const res = await (0, fetch_1.fetchWithRetry)(`https://${host}/api/v4/projects/${encodeURIComponent(project)}/repository/files/${encodedPath}?ref=${encodeURIComponent(ref)}`, { headers: apiHeaders() });
|
|
94
|
+
if (res.ok)
|
|
95
|
+
return 'file';
|
|
96
|
+
if (shouldFallback(res.status) && isGlabAvailable()) {
|
|
97
|
+
return detectPathTypeViaCli(project, filePath, ref);
|
|
98
|
+
}
|
|
99
|
+
// Assume directory; downstream calls will surface the real error if wrong
|
|
100
|
+
return 'directory';
|
|
101
|
+
}
|
|
102
|
+
function detectPathTypeViaCli(project, filePath, ref) {
|
|
103
|
+
const encodedPath = encodeURIComponent(filePath);
|
|
104
|
+
const res = glabRun([
|
|
105
|
+
'api',
|
|
106
|
+
`projects/${encodeURIComponent(project)}/repository/files/${encodedPath}?ref=${encodeURIComponent(ref)}`,
|
|
107
|
+
]);
|
|
108
|
+
return res.status === 0 ? 'file' : 'directory';
|
|
109
|
+
}
|
|
110
|
+
async function fetchFile(project, filePath, ref) {
|
|
111
|
+
const host = getHost();
|
|
112
|
+
const encodedPath = encodeURIComponent(filePath);
|
|
113
|
+
const res = await (0, fetch_1.fetchWithRetry)(`https://${host}/api/v4/projects/${encodeURIComponent(project)}/repository/files/${encodedPath}/raw?ref=${encodeURIComponent(ref)}`, { headers: apiHeaders() });
|
|
114
|
+
if (!res.ok) {
|
|
115
|
+
if (shouldFallback(res.status) && isGlabAvailable()) {
|
|
116
|
+
return fetchFileViaCli(project, filePath, ref);
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Failed to fetch ${filePath} from ${project}@${ref}: HTTP ${res.status}`);
|
|
119
|
+
}
|
|
120
|
+
return res.text();
|
|
121
|
+
}
|
|
122
|
+
function fetchFileViaCli(project, filePath, ref) {
|
|
64
123
|
const encodedPath = encodeURIComponent(filePath);
|
|
65
124
|
const res = glabRun([
|
|
66
125
|
'api',
|
|
@@ -71,7 +130,28 @@ function fetchFile(project, filePath, ref) {
|
|
|
71
130
|
}
|
|
72
131
|
return res.stdout;
|
|
73
132
|
}
|
|
74
|
-
function listTree(project, dirPath, ref) {
|
|
133
|
+
async function listTree(project, dirPath, ref) {
|
|
134
|
+
const host = getHost();
|
|
135
|
+
const allPaths = [];
|
|
136
|
+
const perPage = 100;
|
|
137
|
+
let page = 1;
|
|
138
|
+
while (true) {
|
|
139
|
+
const res = await (0, fetch_1.fetchWithRetry)(`https://${host}/api/v4/projects/${encodeURIComponent(project)}/repository/tree?path=${encodeURIComponent(dirPath)}&ref=${encodeURIComponent(ref)}&recursive=true&per_page=${perPage}&page=${page}`, { headers: apiHeaders() });
|
|
140
|
+
if (!res.ok) {
|
|
141
|
+
if (shouldFallback(res.status) && isGlabAvailable()) {
|
|
142
|
+
return listTreeViaCli(project, dirPath, ref);
|
|
143
|
+
}
|
|
144
|
+
throw new Error(`Failed to list tree ${dirPath} in ${project}@${ref}: HTTP ${res.status}`);
|
|
145
|
+
}
|
|
146
|
+
const items = (await res.json());
|
|
147
|
+
allPaths.push(...items.filter((i) => i.type === 'blob').map((i) => i.path));
|
|
148
|
+
if (items.length < perPage)
|
|
149
|
+
break;
|
|
150
|
+
page++;
|
|
151
|
+
}
|
|
152
|
+
return allPaths;
|
|
153
|
+
}
|
|
154
|
+
function listTreeViaCli(project, dirPath, ref) {
|
|
75
155
|
const allPaths = [];
|
|
76
156
|
const perPage = 100;
|
|
77
157
|
let page = 1;
|
|
@@ -102,36 +182,18 @@ function collectFiles(baseDir, dir, files) {
|
|
|
102
182
|
}
|
|
103
183
|
}
|
|
104
184
|
}
|
|
105
|
-
function
|
|
106
|
-
const encodedPath = encodeURIComponent(filePath);
|
|
107
|
-
const res = glabRun([
|
|
108
|
-
'api',
|
|
109
|
-
`projects/${encodeURIComponent(project)}/repository/files/${encodedPath}?ref=${encodeURIComponent(ref)}`,
|
|
110
|
-
]);
|
|
111
|
-
return res.status === 0 ? 'file' : 'directory';
|
|
112
|
-
}
|
|
113
|
-
// Downloads the directory as a tar.gz archive (one API call) and extracts it locally.
|
|
114
|
-
// Returns null if the archive approach fails, so the caller can fall back.
|
|
115
|
-
function fetchDirectoryViaArchive(project, dirPath, ref) {
|
|
116
|
-
const encodedProject = encodeURIComponent(project);
|
|
117
|
-
const result = (0, child_process_1.spawnSync)('glab', [
|
|
118
|
-
'api',
|
|
119
|
-
`projects/${encodedProject}/repository/archive.tar.gz?sha=${encodeURIComponent(ref)}&path=${encodeURIComponent(dirPath)}`,
|
|
120
|
-
], { encoding: 'buffer' });
|
|
121
|
-
if (result.error || result.status !== 0 || !result.stdout?.length)
|
|
122
|
-
return null;
|
|
185
|
+
function extractArchive(buf, dirPath) {
|
|
123
186
|
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scync-gl-'));
|
|
124
187
|
try {
|
|
125
188
|
const archivePath = path.join(tmpDir, 'archive.tar.gz');
|
|
126
189
|
const extractDir = path.join(tmpDir, 'extracted');
|
|
127
|
-
fs.writeFileSync(archivePath,
|
|
190
|
+
fs.writeFileSync(archivePath, buf);
|
|
128
191
|
fs.mkdirSync(extractDir);
|
|
129
192
|
const tarResult = (0, child_process_1.spawnSync)('tar', ['-xzf', archivePath, '-C', extractDir], {
|
|
130
193
|
encoding: 'utf8',
|
|
131
194
|
});
|
|
132
195
|
if (tarResult.status !== 0)
|
|
133
196
|
return null;
|
|
134
|
-
// The archive root is a single dir with a dynamic name (project-ref-sha/)
|
|
135
197
|
const rootEntries = fs.readdirSync(extractDir);
|
|
136
198
|
if (rootEntries.length !== 1)
|
|
137
199
|
return null;
|
|
@@ -146,28 +208,54 @@ function fetchDirectoryViaArchive(project, dirPath, ref) {
|
|
|
146
208
|
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
147
209
|
}
|
|
148
210
|
}
|
|
149
|
-
function
|
|
150
|
-
const
|
|
211
|
+
async function fetchDirectoryViaArchive(project, dirPath, ref) {
|
|
212
|
+
const host = getHost();
|
|
213
|
+
const encodedProject = encodeURIComponent(project);
|
|
214
|
+
const res = await (0, fetch_1.fetchWithRetry)(`https://${host}/api/v4/projects/${encodedProject}/repository/archive.tar.gz?sha=${encodeURIComponent(ref)}&path=${encodeURIComponent(dirPath)}`, { headers: apiHeaders() });
|
|
215
|
+
if (!res.ok) {
|
|
216
|
+
if (shouldFallback(res.status) && isGlabAvailable()) {
|
|
217
|
+
return fetchDirectoryViaArchiveViaCli(project, dirPath, ref);
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
222
|
+
if (!buf.length)
|
|
223
|
+
return null;
|
|
224
|
+
return extractArchive(buf, dirPath);
|
|
225
|
+
}
|
|
226
|
+
function fetchDirectoryViaArchiveViaCli(project, dirPath, ref) {
|
|
227
|
+
const encodedProject = encodeURIComponent(project);
|
|
228
|
+
const result = (0, child_process_1.spawnSync)('glab', [
|
|
229
|
+
'api',
|
|
230
|
+
`projects/${encodedProject}/repository/archive.tar.gz?sha=${encodeURIComponent(ref)}&path=${encodeURIComponent(dirPath)}`,
|
|
231
|
+
], { encoding: 'buffer' });
|
|
232
|
+
if (result.error || result.status !== 0 || !result.stdout?.length)
|
|
233
|
+
return null;
|
|
234
|
+
return extractArchive(result.stdout, dirPath);
|
|
235
|
+
}
|
|
236
|
+
async function fetchGitLab(project, file, ref) {
|
|
237
|
+
const resolvedRef = await resolveRef(project, ref);
|
|
151
238
|
const normalizedPath = file.replace(/\/$/, '');
|
|
152
239
|
const isDirectory = file.endsWith('/') ||
|
|
153
|
-
detectPathType(project, normalizedPath, resolvedRef) ===
|
|
240
|
+
(await detectPathType(project, normalizedPath, resolvedRef)) ===
|
|
241
|
+
'directory';
|
|
154
242
|
if (!isDirectory) {
|
|
155
|
-
const content = fetchFile(project, normalizedPath, resolvedRef);
|
|
243
|
+
const content = await fetchFile(project, normalizedPath, resolvedRef);
|
|
156
244
|
return { files: new Map([[path.basename(normalizedPath), content]]) };
|
|
157
245
|
}
|
|
158
246
|
// Directory — archive approach first (one API call), then fall back to per-file fetches
|
|
159
|
-
const archived = fetchDirectoryViaArchive(project, normalizedPath, resolvedRef);
|
|
247
|
+
const archived = await fetchDirectoryViaArchive(project, normalizedPath, resolvedRef);
|
|
160
248
|
if (archived)
|
|
161
249
|
return { files: archived };
|
|
162
|
-
const paths = listTree(project, normalizedPath, resolvedRef);
|
|
250
|
+
const paths = await listTree(project, normalizedPath, resolvedRef);
|
|
163
251
|
if (!paths.length) {
|
|
164
252
|
throw new Error(`Failed to fetch ${file} from ${project}@${resolvedRef} (not a file or empty directory)`);
|
|
165
253
|
}
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return { files };
|
|
254
|
+
const entries = await Promise.all(paths.map(async (p) => [
|
|
255
|
+
path.relative(normalizedPath, p),
|
|
256
|
+
await fetchFile(project, p, resolvedRef),
|
|
257
|
+
]));
|
|
258
|
+
return { files: new Map(entries) };
|
|
171
259
|
}
|
|
172
260
|
exports.fetchGitLab = fetchGitLab;
|
|
173
261
|
//# sourceMappingURL=gitlab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/sources/gitlab.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/sources/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/sources/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/sources/http.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQpE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI5D"}
|
package/dist/sources/http.js
CHANGED
|
@@ -24,9 +24,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.fetchHttp = exports.inferFilenameFromUrl = void 0;
|
|
27
|
-
const https = __importStar(require("https"));
|
|
28
|
-
const http = __importStar(require("http"));
|
|
29
27
|
const path = __importStar(require("path"));
|
|
28
|
+
const fetch_1 = require("../fetch");
|
|
30
29
|
function inferFilenameFromUrl(url) {
|
|
31
30
|
try {
|
|
32
31
|
const u = new URL(url);
|
|
@@ -39,28 +38,10 @@ function inferFilenameFromUrl(url) {
|
|
|
39
38
|
}
|
|
40
39
|
exports.inferFilenameFromUrl = inferFilenameFromUrl;
|
|
41
40
|
async function fetchHttp(url) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (res.statusCode &&
|
|
47
|
-
res.statusCode >= 300 &&
|
|
48
|
-
res.statusCode < 400 &&
|
|
49
|
-
res.headers.location) {
|
|
50
|
-
fetchHttp(res.headers.location).then(resolve).catch(reject);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (res.statusCode && res.statusCode >= 400) {
|
|
54
|
-
reject(new Error(`HTTP ${res.statusCode} fetching ${url}`));
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const chunks = [];
|
|
58
|
-
res.on('data', (chunk) => chunks.push(chunk));
|
|
59
|
-
res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
|
60
|
-
res.on('error', reject);
|
|
61
|
-
})
|
|
62
|
-
.on('error', reject);
|
|
63
|
-
});
|
|
41
|
+
const res = await (0, fetch_1.fetchWithRetry)(url);
|
|
42
|
+
if (!res.ok)
|
|
43
|
+
throw new Error(`HTTP ${res.status} fetching ${url}`);
|
|
44
|
+
return res.text();
|
|
64
45
|
}
|
|
65
46
|
exports.fetchHttp = fetchHttp;
|
|
66
47
|
//# sourceMappingURL=http.js.map
|
package/dist/sources/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/sources/http.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/sources/http.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,oCAA0C;AAE1C,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,IAAI,IAAI,SAAS,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AARD,oDAQC;AAEM,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAc,EAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,CAAC;IACnE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAJD,8BAIC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAW,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAW,SAAS,EAAE,MAAM,UAAU,CAAC;AASzD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAoDD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,WAAW,CAAC,CA2EtB"}
|
package/dist/sources/index.js
CHANGED
|
@@ -31,6 +31,7 @@ const local_1 = require("./local");
|
|
|
31
31
|
const exec_1 = require("./exec");
|
|
32
32
|
const gitlab_1 = require("./gitlab");
|
|
33
33
|
const github_1 = require("./github");
|
|
34
|
+
const json_1 = require("../processors/json");
|
|
34
35
|
async function fetchOneSrc(src, workingDir, vars) {
|
|
35
36
|
if (typeof src === 'string') {
|
|
36
37
|
const resolved = (0, variables_1.resolveVars)(src, vars);
|
|
@@ -48,14 +49,14 @@ async function fetchOneSrc(src, workingDir, vars) {
|
|
|
48
49
|
return (0, exec_1.fetchExec)((0, variables_1.resolveVars)(src.exec, vars));
|
|
49
50
|
}
|
|
50
51
|
if ('gitlab' in src) {
|
|
51
|
-
const result = (0, gitlab_1.fetchGitLab)((0, variables_1.resolveVars)(src.gitlab.project, vars), (0, variables_1.resolveVars)(src.gitlab.file, vars), src.gitlab.ref !== undefined
|
|
52
|
+
const result = await (0, gitlab_1.fetchGitLab)((0, variables_1.resolveVars)(src.gitlab.project, vars), (0, variables_1.resolveVars)(src.gitlab.file, vars), src.gitlab.ref !== undefined
|
|
52
53
|
? (0, variables_1.resolveVars)(src.gitlab.ref, vars)
|
|
53
54
|
: undefined);
|
|
54
55
|
const values = Array.from(result.files.values());
|
|
55
56
|
return values.join('\n');
|
|
56
57
|
}
|
|
57
58
|
if ('github' in src) {
|
|
58
|
-
const result = (0, github_1.fetchGitHub)((0, variables_1.resolveVars)(src.github.repo, vars), (0, variables_1.resolveVars)(src.github.file, vars), src.github.ref !== undefined
|
|
59
|
+
const result = await (0, github_1.fetchGitHub)((0, variables_1.resolveVars)(src.github.repo, vars), (0, variables_1.resolveVars)(src.github.file, vars), src.github.ref !== undefined
|
|
59
60
|
? (0, variables_1.resolveVars)(src.github.ref, vars)
|
|
60
61
|
: undefined);
|
|
61
62
|
const values = Array.from(result.files.values());
|
|
@@ -65,7 +66,7 @@ async function fetchOneSrc(src, workingDir, vars) {
|
|
|
65
66
|
}
|
|
66
67
|
async function fetchSource(entry, workingDir, vars = {}) {
|
|
67
68
|
const { src } = entry;
|
|
68
|
-
// List src → fetch each, concatenate with newline
|
|
69
|
+
// List src → fetch each, then merge as JSON or concatenate with newline
|
|
69
70
|
if (Array.isArray(src)) {
|
|
70
71
|
const parts = [];
|
|
71
72
|
for (let i = 0; i < src.length; i++) {
|
|
@@ -78,9 +79,13 @@ async function fetchSource(entry, workingDir, vars = {}) {
|
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
81
|
const filename = path.basename(entry.target);
|
|
81
|
-
|
|
82
|
+
const content = entry.json
|
|
83
|
+
? (0, json_1.mergeJson)(parts, entry.json)
|
|
84
|
+
: parts.join('\n');
|
|
85
|
+
return { files: new Map([[filename, content]]) };
|
|
82
86
|
}
|
|
83
|
-
// Single src —
|
|
87
|
+
// Single src — fetch then optionally format as JSON
|
|
88
|
+
let singleResult;
|
|
84
89
|
if (typeof src === 'string') {
|
|
85
90
|
const resolved = (0, variables_1.resolveVars)(src, vars);
|
|
86
91
|
if (resolved.startsWith('http://') || resolved.startsWith('https://')) {
|
|
@@ -88,35 +93,47 @@ async function fetchSource(entry, workingDir, vars = {}) {
|
|
|
88
93
|
const filename = entry.target
|
|
89
94
|
? path.basename(entry.target)
|
|
90
95
|
: ((0, http_1.inferFilenameFromUrl)(resolved) ?? 'download');
|
|
91
|
-
|
|
96
|
+
singleResult = { files: new Map([[filename, content]]) };
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Local path (absolute, ~/, or relative)
|
|
100
|
+
const result = (0, local_1.fetchLocal)(resolved, workingDir);
|
|
101
|
+
singleResult = { files: result.files };
|
|
92
102
|
}
|
|
93
|
-
// Local path (absolute, ~/, or relative)
|
|
94
|
-
const result = (0, local_1.fetchLocal)(resolved, workingDir);
|
|
95
|
-
return { files: result.files };
|
|
96
103
|
}
|
|
97
|
-
|
|
98
|
-
if ('raw' in src) {
|
|
104
|
+
else if ('raw' in src) {
|
|
99
105
|
const filename = path.basename(entry.target);
|
|
100
|
-
|
|
106
|
+
singleResult = {
|
|
107
|
+
files: new Map([[filename, (0, variables_1.resolveVars)(src.raw, vars)]]),
|
|
108
|
+
};
|
|
101
109
|
}
|
|
102
|
-
if ('exec' in src) {
|
|
110
|
+
else if ('exec' in src) {
|
|
103
111
|
const content = (0, exec_1.fetchExec)((0, variables_1.resolveVars)(src.exec, vars));
|
|
104
112
|
const filename = path.basename(entry.target);
|
|
105
|
-
|
|
113
|
+
singleResult = { files: new Map([[filename, content]]) };
|
|
106
114
|
}
|
|
107
|
-
if ('gitlab' in src) {
|
|
108
|
-
const result = (0, gitlab_1.fetchGitLab)((0, variables_1.resolveVars)(src.gitlab.project, vars), (0, variables_1.resolveVars)(src.gitlab.file, vars), src.gitlab.ref !== undefined
|
|
115
|
+
else if ('gitlab' in src) {
|
|
116
|
+
const result = await (0, gitlab_1.fetchGitLab)((0, variables_1.resolveVars)(src.gitlab.project, vars), (0, variables_1.resolveVars)(src.gitlab.file, vars), src.gitlab.ref !== undefined
|
|
109
117
|
? (0, variables_1.resolveVars)(src.gitlab.ref, vars)
|
|
110
118
|
: undefined);
|
|
111
|
-
|
|
119
|
+
singleResult = { files: result.files };
|
|
112
120
|
}
|
|
113
|
-
if ('github' in src) {
|
|
114
|
-
const result = (0, github_1.fetchGitHub)((0, variables_1.resolveVars)(src.github.repo, vars), (0, variables_1.resolveVars)(src.github.file, vars), src.github.ref !== undefined
|
|
121
|
+
else if ('github' in src) {
|
|
122
|
+
const result = await (0, github_1.fetchGitHub)((0, variables_1.resolveVars)(src.github.repo, vars), (0, variables_1.resolveVars)(src.github.file, vars), src.github.ref !== undefined
|
|
115
123
|
? (0, variables_1.resolveVars)(src.github.ref, vars)
|
|
116
124
|
: undefined);
|
|
117
|
-
|
|
125
|
+
singleResult = { files: result.files };
|
|
118
126
|
}
|
|
119
|
-
|
|
127
|
+
else {
|
|
128
|
+
throw new Error(`Unknown source type: ${JSON.stringify(src)}`);
|
|
129
|
+
}
|
|
130
|
+
if (!entry.json)
|
|
131
|
+
return singleResult;
|
|
132
|
+
const formatted = new Map();
|
|
133
|
+
for (const [k, v] of singleResult.files) {
|
|
134
|
+
formatted.set(k, (0, json_1.formatJson)(v));
|
|
135
|
+
}
|
|
136
|
+
return { files: formatted };
|
|
120
137
|
}
|
|
121
138
|
exports.fetchSource = fetchSource;
|
|
122
139
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,4CAA2C;AAC3C,iCAAyD;AACzD,mCAAqC;AACrC,iCAAmC;AACnC,qCAAuC;AACvC,qCAAuC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -25,12 +25,21 @@ export interface RawSrc {
|
|
|
25
25
|
}
|
|
26
26
|
/** src can be a plain string (http/https URL or local path) or a map for gitlab/github/exec/raw */
|
|
27
27
|
export type FileSrc = string | GitLabSrc | GitHubSrc | ExecSrc | RawSrc;
|
|
28
|
+
export type JsonConflictStrategy = 'abort' | 'first_wins' | 'last_wins';
|
|
29
|
+
export type JsonArrayStrategy = 'replace' | 'concat';
|
|
30
|
+
export type JsonObjectStrategy = 'replace' | 'merge';
|
|
31
|
+
export interface JsonMergeOptions {
|
|
32
|
+
conflicts?: JsonConflictStrategy;
|
|
33
|
+
arrays?: JsonArrayStrategy;
|
|
34
|
+
objects?: JsonObjectStrategy;
|
|
35
|
+
}
|
|
28
36
|
export interface FileEntry {
|
|
29
37
|
src: FileSrc | FileSrc[];
|
|
30
38
|
target?: string;
|
|
31
39
|
mode?: string;
|
|
32
40
|
replace?: ReplaceRule[];
|
|
33
41
|
post?: string;
|
|
42
|
+
json?: JsonMergeOptions;
|
|
34
43
|
}
|
|
35
44
|
export interface FileFerryConfig {
|
|
36
45
|
variables?: Variables;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,mGAAmG;AACnG,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,mGAAmG;AACnG,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AACrD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
|