@udondan/avanti 0.23.1 → 0.24.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.
Files changed (42) hide show
  1. package/README.md +128 -16
  2. package/dist/commands/diff.d.ts.map +1 -1
  3. package/dist/commands/diff.js +8 -4
  4. package/dist/commands/diff.js.map +1 -1
  5. package/dist/commands/pull.d.ts.map +1 -1
  6. package/dist/commands/pull.js +30 -6
  7. package/dist/commands/pull.js.map +1 -1
  8. package/dist/config-writeback.d.ts.map +1 -1
  9. package/dist/config-writeback.js +16 -4
  10. package/dist/config-writeback.js.map +1 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +152 -7
  13. package/dist/config.js.map +1 -1
  14. package/dist/diff.d.ts +6 -1
  15. package/dist/diff.d.ts.map +1 -1
  16. package/dist/diff.js +101 -24
  17. package/dist/diff.js.map +1 -1
  18. package/dist/sources/github.d.ts +1 -0
  19. package/dist/sources/github.d.ts.map +1 -1
  20. package/dist/sources/github.js +100 -0
  21. package/dist/sources/github.js.map +1 -1
  22. package/dist/sources/gitlab.d.ts +1 -0
  23. package/dist/sources/gitlab.d.ts.map +1 -1
  24. package/dist/sources/gitlab.js +161 -0
  25. package/dist/sources/gitlab.js.map +1 -1
  26. package/dist/sources/index.d.ts.map +1 -1
  27. package/dist/sources/index.js +40 -14
  28. package/dist/sources/index.js.map +1 -1
  29. package/dist/types.d.ts +33 -4
  30. package/dist/types.d.ts.map +1 -1
  31. package/dist/types.js.map +1 -1
  32. package/dist/variables-remote.d.ts.map +1 -1
  33. package/dist/variables-remote.js +86 -6
  34. package/dist/variables-remote.js.map +1 -1
  35. package/dist/variables.d.ts.map +1 -1
  36. package/dist/variables.js +96 -10
  37. package/dist/variables.js.map +1 -1
  38. package/dist/writer.d.ts +1 -0
  39. package/dist/writer.d.ts.map +1 -1
  40. package/dist/writer.js +122 -7
  41. package/dist/writer.js.map +1 -1
  42. package/package.json +5 -5
package/dist/writer.js CHANGED
@@ -40,19 +40,53 @@ const path = __importStar(require("path"));
40
40
  function atomicWrite(targets, deletions = []) {
41
41
  // Stage each file as a sibling temp file on the same filesystem as the
42
42
  // destination so that renameSync (rename(2)) is atomic on POSIX.
43
+ const mvTargets = targets.filter((t) => !t.writeInPlace);
44
+ const inPlaceTargets = targets.filter((t) => t.writeInPlace);
43
45
  const staged = [];
44
46
  const backupTemps = [];
45
47
  try {
46
- // Phase 1: write all temp files. No backups yet — if any write fails we
47
- // don't want orphaned backup files for targets whose destinations haven't
48
- // changed yet.
49
- for (const t of targets) {
48
+ // Phase 1 (mv targets): write all temp files. Backups are deferred to
49
+ // Phase 2 so that a staging failure here never creates an orphaned backup
50
+ // for a destination that hasn't been modified yet.
51
+ // In-place targets skip this phase (no temp file); their backups are still
52
+ // created in Phase 2. If Phase 4 fails after open (which truncates the
53
+ // file), the destination may be empty or partially written — the backup
54
+ // captures the pre-write content and can be used for recovery.
55
+ for (const t of mvTargets) {
50
56
  const dir = path.dirname(t.targetPath);
51
57
  if (!fs.existsSync(dir)) {
52
58
  fs.mkdirSync(dir, { recursive: true });
53
59
  }
54
- const tmpFile = path.join(dir, '.' + path.basename(t.targetPath) + '.avanti-tmp');
55
- fs.writeFileSync(tmpFile, t.content);
60
+ const tmpFile = path.join(dir, '.' +
61
+ path.basename(t.targetPath) +
62
+ '.' +
63
+ crypto.randomBytes(8).toString('hex') +
64
+ '.avanti-tmp');
65
+ // O_CREAT|O_EXCL rejects any pre-existing entry at this path (including
66
+ // symlinks — POSIX guarantees EEXIST when O_EXCL is set and the path
67
+ // resolves to a symlink). O_NOFOLLOW is belt-and-suspenders on POSIX.
68
+ // The random suffix makes pre-creation attacks impractical regardless.
69
+ const oNoFollow = fs.constants['O_NOFOLLOW'] ?? 0;
70
+ const tmpFd = fs.openSync(tmpFile, fs.constants.O_WRONLY |
71
+ fs.constants.O_CREAT |
72
+ fs.constants.O_EXCL |
73
+ oNoFollow, 0o666);
74
+ // Register for cleanup before the write so a writeSync failure (e.g.
75
+ // ENOSPC) doesn't leave an orphan .avanti-tmp in the target directory.
76
+ const stagingEntry = {
77
+ tmp: tmpFile,
78
+ dest: t.targetPath,
79
+ };
80
+ staged.push(stagingEntry);
81
+ try {
82
+ let written = 0;
83
+ while (written < t.content.length) {
84
+ written += fs.writeSync(tmpFd, t.content, written, t.content.length - written);
85
+ }
86
+ }
87
+ finally {
88
+ fs.closeSync(tmpFd);
89
+ }
56
90
  // Resolve the effective mode: explicit config value wins; otherwise
57
91
  // preserve the existing file's full permission bits (0o7777) so rename(2)
58
92
  // doesn't silently reset them to the umask default. New files get the
@@ -69,7 +103,7 @@ function atomicWrite(targets, deletions = []) {
69
103
  // file doesn't exist yet — leave the temp file's umask permissions
70
104
  }
71
105
  }
72
- staged.push({ tmp: tmpFile, dest: t.targetPath, effectiveMode });
106
+ stagingEntry.effectiveMode = effectiveMode;
73
107
  }
74
108
  // Phase 2: all staging succeeded — now create backups.
75
109
  // Phase 2a: copy each source file to a uniquely-named temp in the backup
@@ -106,6 +140,87 @@ function atomicWrite(targets, deletions = []) {
106
140
  fs.chmodSync(s.dest, s.effectiveMode);
107
141
  }
108
142
  }
143
+ // Phase 4: in-place writes — preserve inode, not atomic
144
+ for (const t of inPlaceTargets) {
145
+ const dir = path.dirname(t.targetPath);
146
+ if (!fs.existsSync(dir)) {
147
+ fs.mkdirSync(dir, { recursive: true });
148
+ }
149
+ const existingEntry = fs.lstatSync(t.targetPath, {
150
+ throwIfNoEntry: false,
151
+ });
152
+ // Fast-path rejection of non-regular, non-symlink entries (FIFOs,
153
+ // sockets, devices): opening a FIFO with O_WRONLY blocks until a reader
154
+ // connects; device/socket writes have unpredictable side effects. Not
155
+ // relied on for correctness — the fstat check on the opened fd (below,
156
+ // POSIX path) closes the TOCTOU window if the path is replaced after
157
+ // this check.
158
+ if (existingEntry &&
159
+ !existingEntry.isFile() &&
160
+ !existingEntry.isSymbolicLink()) {
161
+ throw new Error(`writeInPlace: ${t.targetPath} is not a regular file; refusing to write`);
162
+ }
163
+ let effectiveMode;
164
+ if (t.mode) {
165
+ effectiveMode = parseInt(t.mode, 8);
166
+ }
167
+ else if (existingEntry?.isFile()) {
168
+ effectiveMode = existingEntry.mode & 0o7777;
169
+ }
170
+ // Refuse to follow a symlink — unlike renameSync, which replaces the
171
+ // symlink itself, writeFileSync would write through it to the target.
172
+ // On POSIX: open with O_NOFOLLOW so the kernel rejects symlinks
173
+ // atomically (no TOCTOU window); ELOOP means the path is a symlink.
174
+ // O_NONBLOCK prevents blocking at open(2) if the lstatSync pre-check
175
+ // lost a TOCTOU race and the path became a FIFO with no reader.
176
+ // fstatSync on the opened fd then closes the remaining TOCTOU window by
177
+ // validating the type after open, before any write.
178
+ // On Windows: O_NOFOLLOW is not available; fall back to an lstat check
179
+ // (best-effort — a narrow TOCTOU race remains).
180
+ const oNoFollow = fs.constants['O_NOFOLLOW'] ?? 0;
181
+ const oNonBlock = fs.constants['O_NONBLOCK'] ?? 0;
182
+ if (oNoFollow !== 0) {
183
+ let fd;
184
+ try {
185
+ fd = fs.openSync(t.targetPath, fs.constants.O_WRONLY |
186
+ fs.constants.O_CREAT |
187
+ fs.constants.O_TRUNC |
188
+ oNoFollow |
189
+ oNonBlock, effectiveMode ?? 0o666);
190
+ }
191
+ catch (err) {
192
+ if (err.code === 'ELOOP') {
193
+ throw new Error(`writeInPlace: ${t.targetPath} is a symlink; refusing to follow`, { cause: err });
194
+ }
195
+ throw err;
196
+ }
197
+ try {
198
+ // fstat validates the type on the opened fd, catching any non-regular
199
+ // file that slipped past the lstatSync pre-check via a TOCTOU race.
200
+ if (!fs.fstatSync(fd).isFile()) {
201
+ throw new Error(`writeInPlace: ${t.targetPath} is not a regular file; refusing to write`);
202
+ }
203
+ let written = 0;
204
+ while (written < t.content.length) {
205
+ written += fs.writeSync(fd, t.content, written, t.content.length - written);
206
+ }
207
+ }
208
+ finally {
209
+ fs.closeSync(fd);
210
+ }
211
+ }
212
+ else {
213
+ if (existingEntry?.isSymbolicLink()) {
214
+ throw new Error(`writeInPlace: ${t.targetPath} is a symlink; refusing to follow`);
215
+ }
216
+ fs.writeFileSync(t.targetPath, t.content, {
217
+ mode: effectiveMode ?? 0o666,
218
+ });
219
+ }
220
+ if (effectiveMode !== undefined) {
221
+ fs.chmodSync(t.targetPath, effectiveMode);
222
+ }
223
+ }
109
224
  }
110
225
  finally {
111
226
  for (const tmp of backupTemps) {
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udondan/avanti",
3
- "version": "0.23.1",
3
+ "version": "0.24.0",
4
4
  "description": "Assemble local files from any source via a declarative YAML spec",
5
5
  "bin": {
6
6
  "avanti": "dist/cli.js"
@@ -41,7 +41,7 @@
41
41
  "url": "https://github.com/udondan/avanti.git"
42
42
  },
43
43
  "dependencies": {
44
- "@aws-sdk/client-s3": "3.1048.0",
44
+ "@aws-sdk/client-s3": "3.1049.0",
45
45
  "@aws-sdk/client-secrets-manager": "3.1048.0",
46
46
  "@aws-sdk/client-ssm": "3.1048.0",
47
47
  "chalk": "5.6.2",
@@ -64,14 +64,14 @@
64
64
  "@types/ejs": "3.1.5",
65
65
  "@types/js-yaml": "4.0.9",
66
66
  "@types/mustache": "4.2.6",
67
- "@types/node": "25.8.0",
67
+ "@types/node": "25.9.0",
68
68
  "@types/nunjucks": "3.2.6",
69
69
  "eslint": "10.4.0",
70
70
  "eslint-config-prettier": "10.1.8",
71
71
  "prettier": "3.8.3",
72
- "tsx": "4.22.1",
72
+ "tsx": "4.22.2",
73
73
  "typescript": "6.0.3",
74
- "typescript-eslint": "8.59.3",
74
+ "typescript-eslint": "8.59.4",
75
75
  "vitest": "4.1.6"
76
76
  }
77
77
  }