@udondan/avanti 0.2.1 → 0.3.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 +10 -0
- package/README.md +254 -14
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +9 -5
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +9 -5
- package/dist/commands/pull.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +35 -5
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +2 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +32 -8
- package/dist/diff.js.map +1 -1
- package/dist/processors/post.d.ts +2 -1
- package/dist/processors/post.d.ts.map +1 -1
- package/dist/processors/post.js +4 -2
- package/dist/processors/post.js.map +1 -1
- package/dist/processors/replace.d.ts +2 -2
- package/dist/processors/replace.d.ts.map +1 -1
- package/dist/processors/replace.js +7 -4
- package/dist/processors/replace.js.map +1 -1
- package/dist/sources/index.d.ts +2 -2
- package/dist/sources/index.d.ts.map +1 -1
- package/dist/sources/index.js +35 -18
- package/dist/sources/index.js.map +1 -1
- package/dist/sources/local.d.ts +1 -1
- package/dist/sources/local.d.ts.map +1 -1
- package/dist/sources/local.js +10 -7
- package/dist/sources/local.js.map +1 -1
- package/dist/types.d.ts +7 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/variables.d.ts +5 -0
- package/dist/variables.d.ts.map +1 -0
- package/dist/variables.js +34 -0
- package/dist/variables.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.0](https://github.com/udondan/avanti/compare/v0.2.1...v0.3.0) (2026-05-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add inline raw source content ([#7](https://github.com/udondan/avanti/issues/7)) ([dd46cba](https://github.com/udondan/avanti/commit/dd46cba2a8a79f2882847a7da3beaf5ae002b799))
|
|
9
|
+
* add variables and env var support ([#10](https://github.com/udondan/avanti/issues/10)) ([c5eea93](https://github.com/udondan/avanti/commit/c5eea9374d3fb3aeeb6413e6bf6aecfe825465b4))
|
|
10
|
+
* add working directory constraint and -w/--working-dir flag ([#9](https://github.com/udondan/avanti/issues/9)) ([5cc731e](https://github.com/udondan/avanti/commit/5cc731e223e4dca893f26f64158f2377c077cbe8))
|
|
11
|
+
* resolve variables in target path ([#12](https://github.com/udondan/avanti/issues/12)) ([9aa64fb](https://github.com/udondan/avanti/commit/9aa64fb121ad5a9a052df5ac2afa096fcf1f728a))
|
|
12
|
+
|
|
3
13
|
## [0.2.1](https://github.com/udondan/avanti/compare/v0.2.0...v0.2.1) (2026-05-07)
|
|
4
14
|
|
|
5
15
|
|
package/README.md
CHANGED
|
@@ -4,12 +4,13 @@ Assemble local files from any source via a declarative YAML spec.
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- Fetch files from **HTTP/HTTPS**, **local paths**, **GitLab** (via `glab`), **GitHub** (via `gh`),
|
|
7
|
+
- Fetch files from **HTTP/HTTPS**, **local paths**, **GitLab** (via `glab`), **GitHub** (via `gh`), **shell commands**, or **inline raw content**
|
|
8
8
|
- **Multi-source entries** — combine multiple sources into a single file by providing `src` as a list
|
|
9
9
|
- **Atomic writes** — all files are staged to a temp dir first; targets are only written if everything succeeds
|
|
10
10
|
- **Diff preview** — see exactly what will change before applying
|
|
11
11
|
- **Post-processing** — apply text replacements (string or regex) and/or pipe content through a shell script
|
|
12
12
|
- **Directory sync** — recursively sync directories from GitLab/GitHub/local sources
|
|
13
|
+
- **Variables** — define reusable values in a `variables:` block and reference them anywhere with `$name`; use `$env:NAME` for environment variables
|
|
13
14
|
|
|
14
15
|
## Requirements
|
|
15
16
|
|
|
@@ -35,11 +36,12 @@ npx @udondan/avanti --help
|
|
|
35
36
|
avanti [options] [command]
|
|
36
37
|
|
|
37
38
|
Options:
|
|
38
|
-
-c, --config <path>
|
|
39
|
+
-c, --config <path> path to config file (default: auto-detected)
|
|
40
|
+
-w, --working-dir <path> working directory for resolving paths (default: current directory)
|
|
39
41
|
|
|
40
42
|
Commands:
|
|
41
|
-
diff
|
|
42
|
-
pull [--yes]
|
|
43
|
+
diff Show diff between remote sources and local files
|
|
44
|
+
pull [--yes] Pull remote sources and write to local files
|
|
43
45
|
```
|
|
44
46
|
|
|
45
47
|
### `avanti diff`
|
|
@@ -50,6 +52,28 @@ Shows a colored git-diff-like output of what would change. Exits `0` if no chang
|
|
|
50
52
|
|
|
51
53
|
Fetches all sources, shows the diff, and prompts for confirmation before writing. Use `--yes` to skip the prompt.
|
|
52
54
|
|
|
55
|
+
## Working Directory
|
|
56
|
+
|
|
57
|
+
All relative `src` and `target` paths are resolved relative to the **working directory** — the directory where you invoke `avanti`, or the path given with `-C`.
|
|
58
|
+
|
|
59
|
+
This is independent of where the config file lives. A config loaded from another directory with `-c /shared/avanti.yml` still resolves all paths from your working directory (or the one you specify with `-C`).
|
|
60
|
+
|
|
61
|
+
Use `-C` to deploy the same config to multiple locations without `cd`-ing there first:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
avanti -c /shared/avanti.yml -C /project-a pull
|
|
65
|
+
avanti -c /shared/avanti.yml -C /project-b pull
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Path Constraints
|
|
69
|
+
|
|
70
|
+
Avanti enforces that target paths cannot escape the working directory:
|
|
71
|
+
|
|
72
|
+
- **Relative targets** are resolved under the working directory. A path like `../../etc/passwd` is rejected.
|
|
73
|
+
- **Absolute targets** (e.g. `/etc/hosts`) are only permitted when the working directory is `/`. If your working directory is any other path, absolute targets are an error.
|
|
74
|
+
|
|
75
|
+
These rules apply to `target` values in your config. Source (`src`) paths are reads-only and are not restricted.
|
|
76
|
+
|
|
53
77
|
## Configuration
|
|
54
78
|
|
|
55
79
|
Create one of the following files in your project root (searched in this order, case-insensitive):
|
|
@@ -62,12 +86,15 @@ Create one of the following files in your project root (searched in this order,
|
|
|
62
86
|
Example:
|
|
63
87
|
|
|
64
88
|
```yaml
|
|
89
|
+
variables:
|
|
90
|
+
email: you@example.com
|
|
91
|
+
|
|
65
92
|
files:
|
|
66
93
|
- src: http://www.example.com/example.yml
|
|
67
94
|
target: my-example.yml
|
|
68
95
|
replace:
|
|
69
96
|
- from: '{EMAIL}'
|
|
70
|
-
to:
|
|
97
|
+
to: $email
|
|
71
98
|
- from: /\d+/
|
|
72
99
|
to: number
|
|
73
100
|
|
|
@@ -97,14 +124,14 @@ files:
|
|
|
97
124
|
|
|
98
125
|
### File Entry Fields
|
|
99
126
|
|
|
100
|
-
| Field | Required | Description
|
|
101
|
-
| --------- | ----------- |
|
|
102
|
-
| `src` | Yes | Source (see below). May be a single source or a **list** of sources to concatenate.
|
|
103
|
-
| `target` | Conditional | Local path to write to. Required for `exec:` sources and when `src` is a list. May be omitted when filename is inferable. |
|
|
104
|
-
| `ref` | No | Branch, tag, or `$latest` (resolves to latest tag). GitLab/GitHub only.
|
|
105
|
-
| `mode` | No | File permission mode, e.g. `"0755"`
|
|
106
|
-
| `replace` | No | List of `{from, to}` replacement rules. `from` may be a plain string or `/pattern/flags` regex.
|
|
107
|
-
| `post` | No | Shell script. Content is piped via stdin; stdout is used as the result. Runs after `replace`.
|
|
127
|
+
| Field | Required | Description |
|
|
128
|
+
| --------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
|
129
|
+
| `src` | Yes | Source (see below). May be a single source or a **list** of sources to concatenate. |
|
|
130
|
+
| `target` | Conditional | Local path to write to. Required for `exec:` and `raw:` sources and when `src` is a list. May be omitted when filename is inferable. |
|
|
131
|
+
| `ref` | No | Branch, tag, or `$latest` (resolves to latest tag). GitLab/GitHub only. |
|
|
132
|
+
| `mode` | No | File permission mode, e.g. `"0755"` |
|
|
133
|
+
| `replace` | No | List of `{from, to}` replacement rules. `from` may be a plain string or `/pattern/flags` regex. |
|
|
134
|
+
| `post` | No | Shell script. Content is piped via stdin; stdout is used as the result. Runs after `replace`. |
|
|
108
135
|
|
|
109
136
|
### Source Types
|
|
110
137
|
|
|
@@ -116,12 +143,16 @@ src: ~/templates/file.txt
|
|
|
116
143
|
src: /absolute/path/file.txt
|
|
117
144
|
```
|
|
118
145
|
|
|
119
|
-
**Map** — for exec, gitlab, github:
|
|
146
|
+
**Map** — for exec, gitlab, github, raw:
|
|
120
147
|
|
|
121
148
|
```yaml
|
|
122
149
|
src:
|
|
123
150
|
exec: <shell command> # stdout becomes file content; target required
|
|
124
151
|
|
|
152
|
+
src:
|
|
153
|
+
raw: | # inline content; target required
|
|
154
|
+
your content here
|
|
155
|
+
|
|
125
156
|
src:
|
|
126
157
|
gitlab:
|
|
127
158
|
project: group/repo # GitLab project path
|
|
@@ -150,6 +181,215 @@ target: combined.txt
|
|
|
150
181
|
|
|
151
182
|
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.
|
|
152
183
|
|
|
184
|
+
### Variables
|
|
185
|
+
|
|
186
|
+
Define reusable values at the top level under `variables:`:
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
variables:
|
|
190
|
+
email: you@example.com
|
|
191
|
+
version: '1.2.3'
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Reference them anywhere in the config with `$name`:
|
|
195
|
+
|
|
196
|
+
```yaml
|
|
197
|
+
files:
|
|
198
|
+
- src:
|
|
199
|
+
gitlab:
|
|
200
|
+
project: group/project
|
|
201
|
+
file: renovate.json
|
|
202
|
+
ref: $version # resolved to "1.2.3"
|
|
203
|
+
replace:
|
|
204
|
+
- from: '{EMAIL}'
|
|
205
|
+
to: $email # resolved to "you@example.com"
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Variables are resolved in every string field: `target`, `ref`, `exec` commands, HTTP URLs, local paths, `raw` content, `replace` rules (`from` and `to`), and `post` scripts.
|
|
209
|
+
|
|
210
|
+
**Environment variables** use the `$env:NAME` form:
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
213
|
+
replace:
|
|
214
|
+
- from: /secret-token/
|
|
215
|
+
to: $env:MY_SECRET # reads process.env.MY_SECRET at runtime
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Referencing an undefined variable or a missing environment variable is an error.
|
|
219
|
+
|
|
220
|
+
`$latest` is reserved for GitLab's "latest tag" resolution and cannot be used as a variable name.
|
|
221
|
+
|
|
222
|
+
## Use Cases
|
|
223
|
+
|
|
224
|
+
### Composable AI Agent Instructions (CLAUDE.md / AGENTS.md)
|
|
225
|
+
|
|
226
|
+
Assemble agent instruction files from multiple sources: a static header defined inline, team-specific rules from a shared GitLab repo, and company-wide standards from GitHub — all merged into one file. Every developer runs `avanti pull` and stays in sync without copy-paste drift across dozens of repos.
|
|
227
|
+
|
|
228
|
+
```yaml
|
|
229
|
+
# .avanti.yml
|
|
230
|
+
variables:
|
|
231
|
+
team: backend
|
|
232
|
+
jira_project: BE
|
|
233
|
+
oncall_channel: '#backend-oncall'
|
|
234
|
+
|
|
235
|
+
files:
|
|
236
|
+
- src:
|
|
237
|
+
- raw: |
|
|
238
|
+
# AI Assistant Guidelines
|
|
239
|
+
<!-- THIS FILE IS MANAGED — run `avanti pull` to update -->
|
|
240
|
+
- gitlab:
|
|
241
|
+
project: platform/ai-standards
|
|
242
|
+
file: teams/backend-rules.md
|
|
243
|
+
ref: main
|
|
244
|
+
- github:
|
|
245
|
+
repo: org/shared-prompts
|
|
246
|
+
file: company-standards.md
|
|
247
|
+
ref: main
|
|
248
|
+
- raw: |
|
|
249
|
+
## Team Context
|
|
250
|
+
Team: $team
|
|
251
|
+
Jira project: $jira_project
|
|
252
|
+
Oncall: $oncall_channel
|
|
253
|
+
target: CLAUDE.md
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Shared Tooling Config (Renovate, ESLint, Prettier, TSConfig)
|
|
257
|
+
|
|
258
|
+
A platform team owns canonical configs in a central repo. Projects pull them and stay current. Pin all files to the same version in one place — bump `standards_ref` and `avanti diff` shows every file that will change before you apply it.
|
|
259
|
+
|
|
260
|
+
```yaml
|
|
261
|
+
variables:
|
|
262
|
+
standards_ref: v2.4.1
|
|
263
|
+
|
|
264
|
+
files:
|
|
265
|
+
- src:
|
|
266
|
+
github:
|
|
267
|
+
repo: org/standards
|
|
268
|
+
file: renovate.json
|
|
269
|
+
ref: $standards_ref
|
|
270
|
+
|
|
271
|
+
- src:
|
|
272
|
+
github:
|
|
273
|
+
repo: org/standards
|
|
274
|
+
file: eslint.config.js
|
|
275
|
+
ref: $standards_ref
|
|
276
|
+
|
|
277
|
+
- src:
|
|
278
|
+
github:
|
|
279
|
+
repo: org/standards
|
|
280
|
+
file: tsconfig.base.json
|
|
281
|
+
ref: $standards_ref
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### CI/CD: Shared Workflow Fragments
|
|
285
|
+
|
|
286
|
+
Pull reusable CI steps from a central repo into each project. A managed header makes it obvious the file should not be edited by hand.
|
|
287
|
+
|
|
288
|
+
```yaml
|
|
289
|
+
files:
|
|
290
|
+
- src:
|
|
291
|
+
- raw: |
|
|
292
|
+
# THIS FILE IS MANAGED — run `avanti pull` to update
|
|
293
|
+
- github:
|
|
294
|
+
repo: org/ci-templates
|
|
295
|
+
file: workflows/security-scan.yml
|
|
296
|
+
ref: main
|
|
297
|
+
target: .github/workflows/security-scan.yml
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Use `avanti diff` in CI to detect drift — if a project's checked-in file no longer matches the source, the pipeline fails.
|
|
301
|
+
|
|
302
|
+
### Environment-Specific Config from a Single Spec
|
|
303
|
+
|
|
304
|
+
One config file adapts to any environment via variables and env vars. No duplicate specs, no templating hacks.
|
|
305
|
+
|
|
306
|
+
```yaml
|
|
307
|
+
variables:
|
|
308
|
+
region: eu-west-1
|
|
309
|
+
|
|
310
|
+
files:
|
|
311
|
+
- src:
|
|
312
|
+
github:
|
|
313
|
+
repo: org/infra
|
|
314
|
+
file: k8s/deployment-template.yaml
|
|
315
|
+
ref: $env:DEPLOY_VERSION
|
|
316
|
+
target: k8s/deployment.yaml
|
|
317
|
+
replace:
|
|
318
|
+
- from: '{ENV}'
|
|
319
|
+
to: $env:ENVIRONMENT
|
|
320
|
+
- from: '{REGION}'
|
|
321
|
+
to: $region
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
CI sets `DEPLOY_VERSION` and `ENVIRONMENT`; the config pins every file to exactly the version being deployed.
|
|
325
|
+
|
|
326
|
+
### Secrets from Vault or AWS SSM
|
|
327
|
+
|
|
328
|
+
Use `exec:` to pull secrets at runtime and write them to a local file. Config variables handle structure; env vars keep credentials out of git.
|
|
329
|
+
|
|
330
|
+
```yaml
|
|
331
|
+
variables:
|
|
332
|
+
org: acme
|
|
333
|
+
region: us-east-1
|
|
334
|
+
|
|
335
|
+
files:
|
|
336
|
+
- src:
|
|
337
|
+
exec: >
|
|
338
|
+
aws ssm get-parameter
|
|
339
|
+
--name /$org/$region/db-config
|
|
340
|
+
--profile $env:AWS_PROFILE
|
|
341
|
+
--with-decryption
|
|
342
|
+
--query Parameter.Value --output text
|
|
343
|
+
target: config/db.json
|
|
344
|
+
mode: '0600'
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Multi-Project Deployment
|
|
348
|
+
|
|
349
|
+
Pair a shared config with `-w` to stamp files across many service directories without duplicating the spec:
|
|
350
|
+
|
|
351
|
+
```sh
|
|
352
|
+
for dir in services/*/; do
|
|
353
|
+
avanti -c shared/avanti.yml -w "$dir" pull --yes
|
|
354
|
+
done
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Developer Onboarding Bootstrap
|
|
358
|
+
|
|
359
|
+
A single `avanti pull` populates a new project with everything it needs: editor config, CI workflows, linting rules, AI instructions — all from blessed central sources, all up to date.
|
|
360
|
+
|
|
361
|
+
```yaml
|
|
362
|
+
files:
|
|
363
|
+
- src:
|
|
364
|
+
github:
|
|
365
|
+
repo: org/standards
|
|
366
|
+
file: .editorconfig
|
|
367
|
+
ref: main
|
|
368
|
+
|
|
369
|
+
- src:
|
|
370
|
+
github:
|
|
371
|
+
repo: org/standards
|
|
372
|
+
file: .prettierrc
|
|
373
|
+
ref: main
|
|
374
|
+
|
|
375
|
+
- src:
|
|
376
|
+
- raw: |
|
|
377
|
+
# AI Assistant Guidelines
|
|
378
|
+
<!-- THIS FILE IS MANAGED — run `avanti pull` to update -->
|
|
379
|
+
- github:
|
|
380
|
+
repo: org/ai-standards
|
|
381
|
+
file: CLAUDE.md
|
|
382
|
+
ref: main
|
|
383
|
+
target: CLAUDE.md
|
|
384
|
+
|
|
385
|
+
- src:
|
|
386
|
+
github:
|
|
387
|
+
repo: org/ci-templates
|
|
388
|
+
file: workflows/
|
|
389
|
+
ref: main
|
|
390
|
+
target: .github/workflows/
|
|
391
|
+
```
|
|
392
|
+
|
|
153
393
|
## Exit Codes
|
|
154
394
|
|
|
155
395
|
| Code | Meaning |
|
package/dist/cli.js
CHANGED
|
@@ -9,7 +9,8 @@ program
|
|
|
9
9
|
.name('avanti')
|
|
10
10
|
.description('Assemble local files from any source via a declarative YAML spec')
|
|
11
11
|
.version('0.1.0')
|
|
12
|
-
.option('-c, --config <path>', 'path to config file')
|
|
12
|
+
.option('-c, --config <path>', 'path to config file')
|
|
13
|
+
.option('-w, --working-dir <path>', 'working directory for resolving relative paths (default: current directory)');
|
|
13
14
|
program.addCommand((0, diff_1.diffCommand)());
|
|
14
15
|
program.addCommand((0, pull_1.pullCommand)());
|
|
15
16
|
program.parse(process.argv);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,0CAA8C;AAC9C,0CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACV,kEAAkE,CACnE;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,0CAA8C;AAC9C,0CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACV,kEAAkE,CACnE;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CACL,0BAA0B,EAC1B,6EAA6E,CAC9E,CAAC;AAEJ,OAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,WAAW,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,WAAW,IAAI,OAAO,CAsDrC"}
|
package/dist/commands/diff.js
CHANGED
|
@@ -36,6 +36,10 @@ function diffCommand() {
|
|
|
36
36
|
.description('Show diff between remote sources and local files')
|
|
37
37
|
.action(async (_options, cmd) => {
|
|
38
38
|
const configPath = (0, config_1.resolveConfigPath)(cmd.parent?.opts().config);
|
|
39
|
+
const rawWorkingDir = cmd.parent?.opts().workingDir;
|
|
40
|
+
const workingDir = rawWorkingDir
|
|
41
|
+
? path.resolve(rawWorkingDir)
|
|
42
|
+
: process.cwd();
|
|
39
43
|
let config;
|
|
40
44
|
try {
|
|
41
45
|
config = (0, config_1.loadConfig)(configPath);
|
|
@@ -44,19 +48,19 @@ function diffCommand() {
|
|
|
44
48
|
console.error(err.message);
|
|
45
49
|
process.exit(2);
|
|
46
50
|
}
|
|
47
|
-
const baseDir = path.dirname(configPath);
|
|
48
51
|
const allDiffs = [];
|
|
49
52
|
let hasError = false;
|
|
53
|
+
const vars = config.variables ?? {};
|
|
50
54
|
for (const entry of config.files) {
|
|
51
55
|
try {
|
|
52
|
-
const result = await (0, sources_1.fetchSource)(entry);
|
|
56
|
+
const result = await (0, sources_1.fetchSource)(entry, workingDir, vars);
|
|
53
57
|
for (const [relPath, rawContent] of result.files) {
|
|
54
58
|
let content = rawContent;
|
|
55
59
|
if (entry.replace?.length)
|
|
56
|
-
content = (0, replace_1.applyReplace)(content, entry.replace);
|
|
60
|
+
content = (0, replace_1.applyReplace)(content, entry.replace, vars);
|
|
57
61
|
if (entry.post)
|
|
58
|
-
content = (0, post_1.applyPost)(content, entry.post);
|
|
59
|
-
const targetPath = (0, diff_1.resolveTargetPath)(entry, relPath,
|
|
62
|
+
content = (0, post_1.applyPost)(content, entry.post, vars);
|
|
63
|
+
const targetPath = (0, diff_1.resolveTargetPath)(entry, relPath, workingDir, vars);
|
|
60
64
|
allDiffs.push((0, diff_1.computeDiff)(targetPath, content));
|
|
61
65
|
}
|
|
62
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,2CAA6B;AAC7B,sCAA0D;AAC1D,wCAAyC;AACzC,mDAAqD;AACrD,6CAA+C;AAC/C,kCAAqE;AAGrE,SAAgB,WAAW;IACzB,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,GAAY,EAAE,EAAE;QAChD,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAClC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,MAA4B,CAChD,CAAC;QACF,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,2CAA6B;AAC7B,sCAA0D;AAC1D,wCAAyC;AACzC,mDAAqD;AACrD,6CAA+C;AAC/C,kCAAqE;AAGrE,SAAgB,WAAW;IACzB,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,GAAY,EAAE,EAAE;QAChD,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAClC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,MAA4B,CAChD,CAAC;QACF,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,UAAgC,CAAC;QAC1E,MAAM,UAAU,GAAG,aAAa;YAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAElB,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAe,EAAE,CAAC;QAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAW,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC1D,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjD,IAAI,OAAO,GAAG,UAAU,CAAC;oBACzB,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM;wBACvB,OAAO,GAAG,IAAA,sBAAY,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACvD,IAAI,KAAK,CAAC,IAAI;wBAAE,OAAO,GAAG,IAAA,gBAAS,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC/D,MAAM,UAAU,GAAG,IAAA,wBAAiB,EAClC,KAAK,EACL,OAAO,EACP,UAAU,EACV,IAAI,CACL,CAAC;oBACF,QAAQ,CAAC,IAAI,CAAC,IAAA,kBAAW,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CACX,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAC3E,CAAC;gBACF,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAA,iBAAU,EAAC,QAAQ,CAAC,CAAC;QAErB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC;AAtDD,kCAsDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,WAAW,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,WAAW,IAAI,OAAO,CAkFrC"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -52,6 +52,10 @@ function pullCommand() {
|
|
|
52
52
|
.option('-y, --yes', 'skip confirmation prompt')
|
|
53
53
|
.action(async (options, cmd) => {
|
|
54
54
|
const configPath = (0, config_1.resolveConfigPath)(cmd.parent?.opts().config);
|
|
55
|
+
const rawWorkingDir = cmd.parent?.opts().workingDir;
|
|
56
|
+
const workingDir = rawWorkingDir
|
|
57
|
+
? path.resolve(rawWorkingDir)
|
|
58
|
+
: process.cwd();
|
|
55
59
|
let config;
|
|
56
60
|
try {
|
|
57
61
|
config = (0, config_1.loadConfig)(configPath);
|
|
@@ -60,20 +64,20 @@ function pullCommand() {
|
|
|
60
64
|
console.error(err.message);
|
|
61
65
|
process.exit(2);
|
|
62
66
|
}
|
|
63
|
-
const baseDir = path.dirname(configPath);
|
|
64
67
|
const allDiffs = [];
|
|
65
68
|
const writeTargets = [];
|
|
66
69
|
let hasError = false;
|
|
70
|
+
const vars = config.variables ?? {};
|
|
67
71
|
for (const entry of config.files) {
|
|
68
72
|
try {
|
|
69
|
-
const result = await (0, sources_1.fetchSource)(entry);
|
|
73
|
+
const result = await (0, sources_1.fetchSource)(entry, workingDir, vars);
|
|
70
74
|
for (const [relPath, rawContent] of result.files) {
|
|
71
75
|
let content = rawContent;
|
|
72
76
|
if (entry.replace?.length)
|
|
73
|
-
content = (0, replace_1.applyReplace)(content, entry.replace);
|
|
77
|
+
content = (0, replace_1.applyReplace)(content, entry.replace, vars);
|
|
74
78
|
if (entry.post)
|
|
75
|
-
content = (0, post_1.applyPost)(content, entry.post);
|
|
76
|
-
const targetPath = (0, diff_1.resolveTargetPath)(entry, relPath,
|
|
79
|
+
content = (0, post_1.applyPost)(content, entry.post, vars);
|
|
80
|
+
const targetPath = (0, diff_1.resolveTargetPath)(entry, relPath, workingDir, vars);
|
|
77
81
|
allDiffs.push((0, diff_1.computeDiff)(targetPath, content));
|
|
78
82
|
writeTargets.push({ targetPath, content, mode: entry.mode });
|
|
79
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,2CAA6B;AAC7B,mDAAqC;AACrC,sCAA0D;AAC1D,wCAAyC;AACzC,mDAAqD;AACrD,6CAA+C;AAC/C,kCAAqE;AACrE,sCAAqD;AAGrD,KAAK,UAAU,OAAO,CAAC,QAAgB;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CACL,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG;gBACjC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CACxC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,OAAgB,EAAE,GAAY,EAAE,EAAE;QAC/C,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAClC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,MAA4B,CAChD,CAAC;QACF,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
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,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EAKhB,MAAM,SAAS,CAAC;AAUjB,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAyE9D"}
|
package/dist/config.js
CHANGED
|
@@ -27,6 +27,7 @@ exports.loadConfig = exports.resolveConfigPath = void 0;
|
|
|
27
27
|
const fs = __importStar(require("fs"));
|
|
28
28
|
const path = __importStar(require("path"));
|
|
29
29
|
const yaml = __importStar(require("js-yaml"));
|
|
30
|
+
const variables_1 = require("./variables");
|
|
30
31
|
const CONFIG_CANDIDATES = [
|
|
31
32
|
'.avanti.yml',
|
|
32
33
|
'.avanti.yaml',
|
|
@@ -67,6 +68,7 @@ function loadConfig(configPath) {
|
|
|
67
68
|
if (!Array.isArray(obj['files'])) {
|
|
68
69
|
throw new Error('Config must have a "files" array');
|
|
69
70
|
}
|
|
71
|
+
const variables = parseVariables(obj['variables']);
|
|
70
72
|
const files = obj['files'].map((entry, i) => {
|
|
71
73
|
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
72
74
|
throw new Error(`files[${i}]: must be an object`);
|
|
@@ -82,9 +84,11 @@ function loadConfig(configPath) {
|
|
|
82
84
|
if (Array.isArray(src) && !e['target']) {
|
|
83
85
|
throw new Error(`files[${i}]: "target" is required when "src" is a list`);
|
|
84
86
|
}
|
|
85
|
-
// exec sources must have a target
|
|
86
|
-
if (!Array.isArray(src) &&
|
|
87
|
-
|
|
87
|
+
// exec/raw sources must have a target
|
|
88
|
+
if (!Array.isArray(src) &&
|
|
89
|
+
(isExecSrc(src) || isRawSrc(src)) &&
|
|
90
|
+
!e['target']) {
|
|
91
|
+
throw new Error(`files[${i}]: "target" is required for exec/raw sources`);
|
|
88
92
|
}
|
|
89
93
|
const fileEntry = { src };
|
|
90
94
|
if (typeof e['target'] === 'string')
|
|
@@ -101,9 +105,26 @@ function loadConfig(configPath) {
|
|
|
101
105
|
}
|
|
102
106
|
return fileEntry;
|
|
103
107
|
});
|
|
104
|
-
return { files };
|
|
108
|
+
return { variables, files };
|
|
105
109
|
}
|
|
106
110
|
exports.loadConfig = loadConfig;
|
|
111
|
+
function parseVariables(raw) {
|
|
112
|
+
if (raw === undefined || raw === null)
|
|
113
|
+
return {};
|
|
114
|
+
if (typeof raw !== 'object' || Array.isArray(raw)) {
|
|
115
|
+
throw new Error('"variables" must be a map of string keys to string values');
|
|
116
|
+
}
|
|
117
|
+
const obj = raw;
|
|
118
|
+
const vars = {};
|
|
119
|
+
for (const [key, val] of Object.entries(obj)) {
|
|
120
|
+
if (typeof val !== 'string') {
|
|
121
|
+
throw new Error(`variables.${key}: value must be a string`);
|
|
122
|
+
}
|
|
123
|
+
vars[key] = val;
|
|
124
|
+
}
|
|
125
|
+
(0, variables_1.validateVariables)(vars);
|
|
126
|
+
return vars;
|
|
127
|
+
}
|
|
107
128
|
function parseSingleSrc(raw, i, j) {
|
|
108
129
|
const loc = j !== undefined ? `files[${i}].src[${j}]` : `files[${i}].src`;
|
|
109
130
|
// Plain string → http/https URL or local path
|
|
@@ -140,6 +161,12 @@ function parseSingleSrc(raw, i, j) {
|
|
|
140
161
|
},
|
|
141
162
|
};
|
|
142
163
|
}
|
|
164
|
+
if ('raw' in obj) {
|
|
165
|
+
if (typeof obj['raw'] !== 'string') {
|
|
166
|
+
throw new Error(`${loc}.raw: must be a string`);
|
|
167
|
+
}
|
|
168
|
+
return { raw: obj['raw'] };
|
|
169
|
+
}
|
|
143
170
|
if ('github' in obj) {
|
|
144
171
|
const gh = obj['github'];
|
|
145
172
|
if (!gh || typeof gh !== 'object' || Array.isArray(gh)) {
|
|
@@ -160,11 +187,14 @@ function parseSingleSrc(raw, i, j) {
|
|
|
160
187
|
},
|
|
161
188
|
};
|
|
162
189
|
}
|
|
163
|
-
throw new Error(`${loc}: unknown source type. Must be a string or map with exec/gitlab/github`);
|
|
190
|
+
throw new Error(`${loc}: unknown source type. Must be a string or map with exec/gitlab/github/raw`);
|
|
164
191
|
}
|
|
165
192
|
function isExecSrc(src) {
|
|
166
193
|
return typeof src === 'object' && 'exec' in src;
|
|
167
194
|
}
|
|
195
|
+
function isRawSrc(src) {
|
|
196
|
+
return typeof src === 'object' && 'raw' in src;
|
|
197
|
+
}
|
|
168
198
|
function parseReplaceRule(r, i, j) {
|
|
169
199
|
if (!r || typeof r !== 'object' || Array.isArray(r)) {
|
|
170
200
|
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/diff.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Variables } from './types';
|
|
1
2
|
export interface FileDiff {
|
|
2
3
|
targetPath: string;
|
|
3
4
|
isNew: boolean;
|
|
@@ -9,5 +10,5 @@ export declare function formatDiff(diff: FileDiff): string;
|
|
|
9
10
|
export declare function printDiffs(diffs: FileDiff[]): void;
|
|
10
11
|
export declare function resolveTargetPath(entry: {
|
|
11
12
|
target?: string;
|
|
12
|
-
}, relPath: string,
|
|
13
|
+
}, relPath: string, workingDir: string, vars?: Variables): string;
|
|
13
14
|
//# sourceMappingURL=diff.d.ts.map
|
package/dist/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,CAgB5E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAajD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CASlD;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,SAAc,GACnB,MAAM,CA2BR"}
|
package/dist/diff.js
CHANGED
|
@@ -31,6 +31,7 @@ const fs = __importStar(require("fs"));
|
|
|
31
31
|
const path = __importStar(require("path"));
|
|
32
32
|
const diff_1 = require("diff");
|
|
33
33
|
const chalk_1 = __importDefault(require("chalk"));
|
|
34
|
+
const variables_1 = require("./variables");
|
|
34
35
|
function computeDiff(targetPath, newContent) {
|
|
35
36
|
const isNew = !fs.existsSync(targetPath);
|
|
36
37
|
const oldContent = isNew ? '' : fs.readFileSync(targetPath, 'utf8');
|
|
@@ -68,16 +69,39 @@ function printDiffs(diffs) {
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
exports.printDiffs = printDiffs;
|
|
71
|
-
function resolveTargetPath(entry, relPath,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
function resolveTargetPath(entry, relPath, workingDir, vars = {}) {
|
|
73
|
+
let resolved;
|
|
74
|
+
const target = entry.target ? (0, variables_1.resolveVars)(entry.target, vars) : undefined;
|
|
75
|
+
if (target) {
|
|
76
|
+
if (path.isAbsolute(target)) {
|
|
77
|
+
if (workingDir !== '/') {
|
|
78
|
+
throw new Error(`Absolute target path "${target}" is not allowed when working directory is not "/". Use a relative path or run with -C /.`);
|
|
79
|
+
}
|
|
80
|
+
if (target.endsWith('/') || target.endsWith(path.sep)) {
|
|
81
|
+
return path.resolve(target, relPath);
|
|
82
|
+
}
|
|
83
|
+
return target;
|
|
76
84
|
}
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
if (target.endsWith('/') || target.endsWith(path.sep)) {
|
|
86
|
+
resolved = path.resolve(workingDir, target, relPath);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
resolved = path.resolve(workingDir, target);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
resolved = path.resolve(workingDir, relPath);
|
|
79
94
|
}
|
|
80
|
-
|
|
95
|
+
assertWithinWorkingDir(resolved, workingDir);
|
|
96
|
+
return resolved;
|
|
81
97
|
}
|
|
82
98
|
exports.resolveTargetPath = resolveTargetPath;
|
|
99
|
+
function assertWithinWorkingDir(resolvedPath, workingDir) {
|
|
100
|
+
const prefix = workingDir.endsWith(path.sep)
|
|
101
|
+
? workingDir
|
|
102
|
+
: workingDir + path.sep;
|
|
103
|
+
if (resolvedPath !== workingDir && !resolvedPath.startsWith(prefix)) {
|
|
104
|
+
throw new Error(`Target path "${resolvedPath}" escapes working directory "${workingDir}".`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
83
107
|
//# sourceMappingURL=diff.js.map
|
package/dist/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,+BAA2C;AAC3C,kDAA0B;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/processors/post.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/processors/post.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,SAAc,GACnB,MAAM,CAgBR"}
|
package/dist/processors/post.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.applyPost = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const variables_1 = require("../variables");
|
|
6
|
+
function applyPost(content, script, vars = {}) {
|
|
7
|
+
const resolvedScript = (0, variables_1.resolveVars)(script, vars);
|
|
8
|
+
const result = (0, child_process_1.spawnSync)('sh', ['-c', resolvedScript], {
|
|
7
9
|
input: content,
|
|
8
10
|
encoding: 'utf8',
|
|
9
11
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/processors/post.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAE1C,SAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/processors/post.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAE1C,4CAA2C;AAE3C,SAAgB,SAAS,CACvB,OAAe,EACf,MAAc,EACd,OAAkB,EAAE;IAEpB,MAAM,cAAc,GAAG,IAAA,uBAAW,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,IAAI,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;QACrD,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AApBD,8BAoBC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ReplaceRule } from '../types';
|
|
2
|
-
export declare function applyReplace(content: string, rules: ReplaceRule[]): string;
|
|
1
|
+
import { ReplaceRule, Variables } from '../types';
|
|
2
|
+
export declare function applyReplace(content: string, rules: ReplaceRule[], vars?: Variables): string;
|
|
3
3
|
//# sourceMappingURL=replace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../../src/processors/replace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../../src/processors/replace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAWlD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAAE,EACpB,IAAI,GAAE,SAAc,GACnB,MAAM,CAaR"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.applyReplace = void 0;
|
|
4
|
+
const variables_1 = require("../variables");
|
|
4
5
|
function parseFrom(from) {
|
|
5
6
|
const match = from.match(/^\/(.+)\/([gimsuy]*)$/);
|
|
6
7
|
if (match) {
|
|
@@ -8,15 +9,17 @@ function parseFrom(from) {
|
|
|
8
9
|
}
|
|
9
10
|
return from;
|
|
10
11
|
}
|
|
11
|
-
function applyReplace(content, rules) {
|
|
12
|
+
function applyReplace(content, rules, vars = {}) {
|
|
12
13
|
let result = content;
|
|
13
14
|
for (const rule of rules) {
|
|
14
|
-
const
|
|
15
|
+
const from = (0, variables_1.resolveVars)(rule.from, vars);
|
|
16
|
+
const to = (0, variables_1.resolveVars)(rule.to, vars);
|
|
17
|
+
const pattern = parseFrom(from);
|
|
15
18
|
if (typeof pattern === 'string') {
|
|
16
|
-
result = result.split(pattern).join(
|
|
19
|
+
result = result.split(pattern).join(to);
|
|
17
20
|
}
|
|
18
21
|
else {
|
|
19
|
-
result = result.replace(pattern,
|
|
22
|
+
result = result.replace(pattern, to);
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace.js","sourceRoot":"","sources":["../../src/processors/replace.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"replace.js","sourceRoot":"","sources":["../../src/processors/replace.ts"],"names":[],"mappings":";;;AACA,4CAA2C;AAE3C,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAClD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,YAAY,CAC1B,OAAe,EACf,KAAoB,EACpB,OAAkB,EAAE;IAEpB,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,uBAAW,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAA,uBAAW,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAjBD,oCAiBC"}
|
package/dist/sources/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FileEntry } from '../types';
|
|
1
|
+
import { FileEntry, Variables } from '../types';
|
|
2
2
|
export interface FetchResult {
|
|
3
3
|
files: Map<string, string>;
|
|
4
4
|
}
|
|
5
|
-
export declare function fetchSource(entry: FileEntry): Promise<FetchResult>;
|
|
5
|
+
export declare function fetchSource(entry: FileEntry, workingDir: string, vars?: Variables): Promise<FetchResult>;
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAW,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;AAQzD,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,CAqEtB"}
|
package/dist/sources/index.js
CHANGED
|
@@ -25,44 +25,52 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.fetchSource = void 0;
|
|
27
27
|
const path = __importStar(require("path"));
|
|
28
|
+
const variables_1 = require("../variables");
|
|
28
29
|
const http_1 = require("./http");
|
|
29
30
|
const local_1 = require("./local");
|
|
30
31
|
const exec_1 = require("./exec");
|
|
31
32
|
const gitlab_1 = require("./gitlab");
|
|
32
33
|
const github_1 = require("./github");
|
|
33
|
-
async function fetchOneSrc(src) {
|
|
34
|
+
async function fetchOneSrc(src, workingDir, vars) {
|
|
34
35
|
if (typeof src === 'string') {
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
const resolved = (0, variables_1.resolveVars)(src, vars);
|
|
37
|
+
if (resolved.startsWith('http://') || resolved.startsWith('https://')) {
|
|
38
|
+
return (0, http_1.fetchHttp)(resolved);
|
|
37
39
|
}
|
|
38
|
-
const result = (0, local_1.fetchLocal)(
|
|
39
|
-
// For a single-file local result, return the first (and only) value
|
|
40
|
+
const result = (0, local_1.fetchLocal)(resolved, workingDir);
|
|
40
41
|
const values = Array.from(result.files.values());
|
|
41
42
|
return values.join('\n');
|
|
42
43
|
}
|
|
44
|
+
if ('raw' in src) {
|
|
45
|
+
return (0, variables_1.resolveVars)(src.raw, vars);
|
|
46
|
+
}
|
|
43
47
|
if ('exec' in src) {
|
|
44
|
-
return (0, exec_1.fetchExec)(src.exec);
|
|
48
|
+
return (0, exec_1.fetchExec)((0, variables_1.resolveVars)(src.exec, vars));
|
|
45
49
|
}
|
|
46
50
|
if ('gitlab' in src) {
|
|
47
|
-
const result = (0, gitlab_1.fetchGitLab)(src.gitlab.project, src.gitlab.file, src.gitlab.ref
|
|
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
|
+
? (0, variables_1.resolveVars)(src.gitlab.ref, vars)
|
|
53
|
+
: undefined);
|
|
48
54
|
const values = Array.from(result.files.values());
|
|
49
55
|
return values.join('\n');
|
|
50
56
|
}
|
|
51
57
|
if ('github' in src) {
|
|
52
|
-
const result = (0, github_1.fetchGitHub)(src.github.repo, src.github.file, src.github.ref
|
|
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
|
+
? (0, variables_1.resolveVars)(src.github.ref, vars)
|
|
60
|
+
: undefined);
|
|
53
61
|
const values = Array.from(result.files.values());
|
|
54
62
|
return values.join('\n');
|
|
55
63
|
}
|
|
56
64
|
throw new Error(`Unknown source type: ${JSON.stringify(src)}`);
|
|
57
65
|
}
|
|
58
|
-
async function fetchSource(entry) {
|
|
66
|
+
async function fetchSource(entry, workingDir, vars = {}) {
|
|
59
67
|
const { src } = entry;
|
|
60
68
|
// List src → fetch each, concatenate with newline
|
|
61
69
|
if (Array.isArray(src)) {
|
|
62
70
|
const parts = [];
|
|
63
71
|
for (let i = 0; i < src.length; i++) {
|
|
64
72
|
try {
|
|
65
|
-
parts.push(await fetchOneSrc(src[i]));
|
|
73
|
+
parts.push(await fetchOneSrc(src[i], workingDir, vars));
|
|
66
74
|
}
|
|
67
75
|
catch (err) {
|
|
68
76
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -74,29 +82,38 @@ async function fetchSource(entry) {
|
|
|
74
82
|
}
|
|
75
83
|
// Single src — original behaviour
|
|
76
84
|
if (typeof src === 'string') {
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
const resolved = (0, variables_1.resolveVars)(src, vars);
|
|
86
|
+
if (resolved.startsWith('http://') || resolved.startsWith('https://')) {
|
|
87
|
+
const content = await (0, http_1.fetchHttp)(resolved);
|
|
79
88
|
const filename = entry.target
|
|
80
89
|
? path.basename(entry.target)
|
|
81
|
-
: ((0, http_1.inferFilenameFromUrl)(
|
|
90
|
+
: ((0, http_1.inferFilenameFromUrl)(resolved) ?? 'download');
|
|
82
91
|
return { files: new Map([[filename, content]]) };
|
|
83
92
|
}
|
|
84
93
|
// Local path (absolute, ~/, or relative)
|
|
85
|
-
const result = (0, local_1.fetchLocal)(
|
|
94
|
+
const result = (0, local_1.fetchLocal)(resolved, workingDir);
|
|
86
95
|
return { files: result.files };
|
|
87
96
|
}
|
|
88
97
|
// Map sources
|
|
98
|
+
if ('raw' in src) {
|
|
99
|
+
const filename = path.basename(entry.target);
|
|
100
|
+
return { files: new Map([[filename, (0, variables_1.resolveVars)(src.raw, vars)]]) };
|
|
101
|
+
}
|
|
89
102
|
if ('exec' in src) {
|
|
90
|
-
const content = (0, exec_1.fetchExec)(src.exec);
|
|
91
|
-
const filename = path.basename(entry.target);
|
|
103
|
+
const content = (0, exec_1.fetchExec)((0, variables_1.resolveVars)(src.exec, vars));
|
|
104
|
+
const filename = path.basename(entry.target);
|
|
92
105
|
return { files: new Map([[filename, content]]) };
|
|
93
106
|
}
|
|
94
107
|
if ('gitlab' in src) {
|
|
95
|
-
const result = (0, gitlab_1.fetchGitLab)(src.gitlab.project, src.gitlab.file, src.gitlab.ref
|
|
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
|
|
109
|
+
? (0, variables_1.resolveVars)(src.gitlab.ref, vars)
|
|
110
|
+
: undefined);
|
|
96
111
|
return { files: result.files };
|
|
97
112
|
}
|
|
98
113
|
if ('github' in src) {
|
|
99
|
-
const result = (0, github_1.fetchGitHub)(src.github.repo, src.github.file, src.github.ref
|
|
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
|
|
115
|
+
? (0, variables_1.resolveVars)(src.github.ref, vars)
|
|
116
|
+
: undefined);
|
|
100
117
|
return { files: result.files };
|
|
101
118
|
}
|
|
102
119
|
throw new Error(`Unknown source type: ${JSON.stringify(src)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,iCAAyD;AACzD,mCAAqC;AACrC,iCAAmC;AACnC,qCAAuC;AACvC,qCAAuC;AAMvC,KAAK,UAAU,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sources/local.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/sources/local.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/sources/local.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAoBvE"}
|
package/dist/sources/local.js
CHANGED
|
@@ -26,14 +26,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.fetchLocal = void 0;
|
|
27
27
|
const fs = __importStar(require("fs"));
|
|
28
28
|
const path = __importStar(require("path"));
|
|
29
|
-
function
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
function fetchLocal(src, workingDir) {
|
|
30
|
+
let resolved;
|
|
31
|
+
if (src.startsWith('~/')) {
|
|
32
|
+
resolved = path.join(process.env['HOME'] ?? '~', src.slice(2));
|
|
33
|
+
}
|
|
34
|
+
else if (path.isAbsolute(src)) {
|
|
35
|
+
resolved = src;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
resolved = path.resolve(workingDir, src);
|
|
32
39
|
}
|
|
33
|
-
return p;
|
|
34
|
-
}
|
|
35
|
-
function fetchLocal(src) {
|
|
36
|
-
const resolved = expandHome(src);
|
|
37
40
|
if (!fs.existsSync(resolved)) {
|
|
38
41
|
throw new Error(`Local source not found: ${resolved}`);
|
|
39
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/sources/local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAM7B,
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/sources/local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAM7B,SAAgB,UAAU,CAAC,GAAW,EAAE,UAAkB;IACxD,IAAI,QAAgB,CAAC;IACrB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AApBD,gCAoBC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,OAAe,EACf,GAAwB;IAExB,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export type Variables = Record<string, string>;
|
|
1
2
|
export interface ReplaceRule {
|
|
2
3
|
from: string;
|
|
3
4
|
to: string;
|
|
@@ -19,8 +20,11 @@ export interface GitHubSrc {
|
|
|
19
20
|
export interface ExecSrc {
|
|
20
21
|
exec: string;
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
export interface RawSrc {
|
|
24
|
+
raw: string;
|
|
25
|
+
}
|
|
26
|
+
/** src can be a plain string (http/https URL or local path) or a map for gitlab/github/exec/raw */
|
|
27
|
+
export type FileSrc = string | GitLabSrc | GitHubSrc | ExecSrc | RawSrc;
|
|
24
28
|
export interface FileEntry {
|
|
25
29
|
src: FileSrc | FileSrc[];
|
|
26
30
|
target?: string;
|
|
@@ -29,6 +33,7 @@ export interface FileEntry {
|
|
|
29
33
|
post?: string;
|
|
30
34
|
}
|
|
31
35
|
export interface FileFerryConfig {
|
|
36
|
+
variables?: Variables;
|
|
32
37
|
files: FileEntry[];
|
|
33
38
|
}
|
|
34
39
|
//# sourceMappingURL=types.d.ts.map
|
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,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
|
|
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;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Variables } from './types';
|
|
2
|
+
export declare const RESERVED_VARS: Set<string>;
|
|
3
|
+
export declare function validateVariables(vars: Variables): void;
|
|
4
|
+
export declare function resolveVars(value: string, vars: Variables): string;
|
|
5
|
+
//# sourceMappingURL=variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,aAAa,aAAsB,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAMvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAwBlE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveVars = exports.validateVariables = exports.RESERVED_VARS = void 0;
|
|
4
|
+
// $latest is a special sentinel used by the GitLab source to resolve the newest tag.
|
|
5
|
+
exports.RESERVED_VARS = new Set(['latest']);
|
|
6
|
+
function validateVariables(vars) {
|
|
7
|
+
for (const name of Object.keys(vars)) {
|
|
8
|
+
if (exports.RESERVED_VARS.has(name)) {
|
|
9
|
+
throw new Error(`Variable name "${name}" is reserved and cannot be used`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.validateVariables = validateVariables;
|
|
14
|
+
function resolveVars(value, vars) {
|
|
15
|
+
// First pass: $env:NAME → process.env value (must come before $name pass)
|
|
16
|
+
const afterEnv = value.replace(/\$env:([A-Za-z_][A-Za-z0-9_]*)/g, (_, name) => {
|
|
17
|
+
const val = process.env[name];
|
|
18
|
+
if (val === undefined) {
|
|
19
|
+
throw new Error(`Undefined environment variable: $env:${name}`);
|
|
20
|
+
}
|
|
21
|
+
return val;
|
|
22
|
+
});
|
|
23
|
+
// Second pass: $name → variable value (reserved names are passed through unchanged)
|
|
24
|
+
return afterEnv.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g, (match, name) => {
|
|
25
|
+
if (exports.RESERVED_VARS.has(name))
|
|
26
|
+
return match;
|
|
27
|
+
if (!(name in vars)) {
|
|
28
|
+
throw new Error(`Undefined variable: $${name}`);
|
|
29
|
+
}
|
|
30
|
+
return vars[name];
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
exports.resolveVars = resolveVars;
|
|
34
|
+
//# sourceMappingURL=variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":";;;AAEA,qFAAqF;AACxE,QAAA,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEjD,SAAgB,iBAAiB,CAAC,IAAe;IAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,qBAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,kCAAkC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC;AAND,8CAMC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAe;IACxD,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAC5B,iCAAiC,EACjC,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CACF,CAAC;IAEF,oFAAoF;IACpF,OAAO,QAAQ,CAAC,OAAO,CACrB,6BAA6B,EAC7B,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACtB,IAAI,qBAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CACF,CAAC;AACJ,CAAC;AAxBD,kCAwBC"}
|