@udondan/avanti 0.1.0 → 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.
Files changed (47) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +254 -14
  3. package/dist/cli.js +2 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/diff.d.ts.map +1 -1
  6. package/dist/commands/diff.js +9 -5
  7. package/dist/commands/diff.js.map +1 -1
  8. package/dist/commands/pull.d.ts.map +1 -1
  9. package/dist/commands/pull.js +9 -5
  10. package/dist/commands/pull.js.map +1 -1
  11. package/dist/config.d.ts +1 -1
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +85 -55
  14. package/dist/config.js.map +1 -1
  15. package/dist/diff.d.ts +2 -1
  16. package/dist/diff.d.ts.map +1 -1
  17. package/dist/diff.js +42 -18
  18. package/dist/diff.js.map +1 -1
  19. package/dist/processors/post.d.ts +2 -1
  20. package/dist/processors/post.d.ts.map +1 -1
  21. package/dist/processors/post.js +7 -5
  22. package/dist/processors/post.js.map +1 -1
  23. package/dist/processors/replace.d.ts +2 -2
  24. package/dist/processors/replace.d.ts.map +1 -1
  25. package/dist/processors/replace.js +8 -5
  26. package/dist/processors/replace.js.map +1 -1
  27. package/dist/sources/exec.js +3 -3
  28. package/dist/sources/github.js +15 -15
  29. package/dist/sources/gitlab.js +11 -11
  30. package/dist/sources/http.js +5 -5
  31. package/dist/sources/index.d.ts +2 -2
  32. package/dist/sources/index.d.ts.map +1 -1
  33. package/dist/sources/index.js +47 -30
  34. package/dist/sources/index.js.map +1 -1
  35. package/dist/sources/local.d.ts +1 -1
  36. package/dist/sources/local.d.ts.map +1 -1
  37. package/dist/sources/local.js +12 -9
  38. package/dist/sources/local.js.map +1 -1
  39. package/dist/types.d.ts +7 -2
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/variables.d.ts +5 -0
  42. package/dist/variables.d.ts.map +1 -0
  43. package/dist/variables.js +34 -0
  44. package/dist/variables.js.map +1 -0
  45. package/dist/writer.js +3 -3
  46. package/package.json +19 -7
  47. package/.claude/settings.local.json +0 -9
@@ -27,24 +27,24 @@ exports.fetchGitLab = void 0;
27
27
  const child_process_1 = require("child_process");
28
28
  const path = __importStar(require("path"));
29
29
  function glabRun(args) {
30
- const result = (0, child_process_1.spawnSync)("glab", args, { encoding: "utf8" });
30
+ const result = (0, child_process_1.spawnSync)('glab', args, { encoding: 'utf8' });
31
31
  if (result.error) {
32
- const msg = result.error.message ?? "";
33
- if (msg.includes("ENOENT")) {
34
- throw new Error("glab CLI not found. Install it from https://gitlab.com/gitlab-org/cli");
32
+ const msg = result.error.message ?? '';
33
+ if (msg.includes('ENOENT')) {
34
+ throw new Error('glab CLI not found. Install it from https://gitlab.com/gitlab-org/cli');
35
35
  }
36
36
  throw new Error(`glab error: ${msg}`);
37
37
  }
38
38
  return {
39
- stdout: result.stdout ?? "",
40
- stderr: result.stderr ?? "",
39
+ stdout: result.stdout ?? '',
40
+ stderr: result.stderr ?? '',
41
41
  status: result.status,
42
42
  };
43
43
  }
44
44
  function resolveRef(project, ref) {
45
- if (!ref || ref === "$latest") {
45
+ if (!ref || ref === '$latest') {
46
46
  const res = glabRun([
47
- "api",
47
+ 'api',
48
48
  `projects/${encodeURIComponent(project)}/repository/tags?order_by=version&sort=desc&per_page=1`,
49
49
  ]);
50
50
  if (res.status !== 0) {
@@ -61,7 +61,7 @@ function resolveRef(project, ref) {
61
61
  function fetchFile(project, filePath, ref) {
62
62
  const encodedPath = encodeURIComponent(filePath);
63
63
  const res = glabRun([
64
- "api",
64
+ 'api',
65
65
  `projects/${encodeURIComponent(project)}/repository/files/${encodedPath}/raw?ref=${encodeURIComponent(ref)}`,
66
66
  ]);
67
67
  if (res.status !== 0) {
@@ -71,14 +71,14 @@ function fetchFile(project, filePath, ref) {
71
71
  }
72
72
  function listTree(project, dirPath, ref) {
73
73
  const res = glabRun([
74
- "api",
74
+ 'api',
75
75
  `projects/${encodeURIComponent(project)}/repository/tree?path=${encodeURIComponent(dirPath)}&ref=${encodeURIComponent(ref)}&recursive=true&per_page=100`,
76
76
  ]);
77
77
  if (res.status !== 0) {
78
78
  throw new Error(`Failed to list tree ${dirPath} in ${project}@${ref}: ${res.stderr}`);
79
79
  }
80
80
  const items = JSON.parse(res.stdout);
81
- return items.filter((i) => i.type === "blob").map((i) => i.path);
81
+ return items.filter((i) => i.type === 'blob').map((i) => i.path);
82
82
  }
83
83
  function fetchGitLab(project, file, ref) {
84
84
  const resolvedRef = resolveRef(project, ref);
@@ -40,7 +40,7 @@ function inferFilenameFromUrl(url) {
40
40
  exports.inferFilenameFromUrl = inferFilenameFromUrl;
41
41
  async function fetchHttp(url) {
42
42
  return new Promise((resolve, reject) => {
43
- const mod = url.startsWith("https") ? https : http;
43
+ const mod = url.startsWith('https') ? https : http;
44
44
  mod
45
45
  .get(url, (res) => {
46
46
  if (res.statusCode &&
@@ -55,11 +55,11 @@ async function fetchHttp(url) {
55
55
  return;
56
56
  }
57
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);
58
+ res.on('data', (chunk) => chunks.push(chunk));
59
+ res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
60
+ res.on('error', reject);
61
61
  })
62
- .on("error", reject);
62
+ .on('error', reject);
63
63
  });
64
64
  }
65
65
  exports.fetchHttp = fetchHttp;
@@ -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;AAO9C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAwCD,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CA2DxE"}
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"}
@@ -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
- if (typeof src === "string") {
35
- if (src.startsWith("http://") || src.startsWith("https://")) {
36
- return (0, http_1.fetchHttp)(src);
34
+ async function fetchOneSrc(src, workingDir, vars) {
35
+ if (typeof src === 'string') {
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)(src);
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
- return values.join("\n");
42
+ return values.join('\n');
42
43
  }
43
- if ("exec" in src) {
44
- return (0, exec_1.fetchExec)(src.exec);
44
+ if ('raw' in src) {
45
+ return (0, variables_1.resolveVars)(src.raw, vars);
45
46
  }
46
- if ("gitlab" in src) {
47
- const result = (0, gitlab_1.fetchGitLab)(src.gitlab.project, src.gitlab.file, src.gitlab.ref);
47
+ if ('exec' in src) {
48
+ return (0, exec_1.fetchExec)((0, variables_1.resolveVars)(src.exec, vars));
49
+ }
50
+ 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
+ ? (0, variables_1.resolveVars)(src.gitlab.ref, vars)
53
+ : undefined);
48
54
  const values = Array.from(result.files.values());
49
- return values.join("\n");
55
+ return values.join('\n');
50
56
  }
51
- if ("github" in src) {
52
- const result = (0, github_1.fetchGitHub)(src.github.repo, src.github.file, src.github.ref);
57
+ 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
+ ? (0, variables_1.resolveVars)(src.github.ref, vars)
60
+ : undefined);
53
61
  const values = Array.from(result.files.values());
54
- return values.join("\n");
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);
@@ -70,33 +78,42 @@ async function fetchSource(entry) {
70
78
  }
71
79
  }
72
80
  const filename = path.basename(entry.target);
73
- return { files: new Map([[filename, parts.join("\n")]]) };
81
+ return { files: new Map([[filename, parts.join('\n')]]) };
74
82
  }
75
83
  // Single src — original behaviour
76
- if (typeof src === "string") {
77
- if (src.startsWith("http://") || src.startsWith("https://")) {
78
- const content = await (0, http_1.fetchHttp)(src);
84
+ if (typeof src === 'string') {
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)(src) ?? "download");
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)(src);
94
+ const result = (0, local_1.fetchLocal)(resolved, workingDir);
86
95
  return { files: result.files };
87
96
  }
88
97
  // Map sources
89
- if ("exec" in src) {
90
- const content = (0, exec_1.fetchExec)(src.exec);
91
- const filename = path.basename(entry.target); // target required, validated in config
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
+ }
102
+ if ('exec' in src) {
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
- if ("gitlab" in src) {
95
- const result = (0, gitlab_1.fetchGitLab)(src.gitlab.project, src.gitlab.file, src.gitlab.ref);
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
109
+ ? (0, variables_1.resolveVars)(src.gitlab.ref, vars)
110
+ : undefined);
96
111
  return { files: result.files };
97
112
  }
98
- if ("github" in src) {
99
- const result = (0, github_1.fetchGitHub)(src.github.repo, src.github.file, src.github.ref);
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
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export interface LocalResult {
2
2
  files: Map<string, string>;
3
3
  }
4
- export declare function fetchLocal(src: string): LocalResult;
4
+ export declare function fetchLocal(src: string, workingDir: string): LocalResult;
5
5
  //# sourceMappingURL=local.d.ts.map
@@ -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;AASD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAanD"}
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"}
@@ -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 expandHome(p) {
30
- if (p.startsWith("~/")) {
31
- return path.join(process.env["HOME"] ?? "~", p.slice(2));
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
  }
@@ -43,7 +46,7 @@ function fetchLocal(src) {
43
46
  readDirRecursive(resolved, resolved, files);
44
47
  }
45
48
  else {
46
- files.set(path.basename(resolved), fs.readFileSync(resolved, "utf8"));
49
+ files.set(path.basename(resolved), fs.readFileSync(resolved, 'utf8'));
47
50
  }
48
51
  return { files };
49
52
  }
@@ -57,7 +60,7 @@ function readDirRecursive(base, current, out) {
57
60
  readDirRecursive(base, full, out);
58
61
  }
59
62
  else {
60
- out.set(rel, fs.readFileSync(full, "utf8"));
63
+ out.set(rel, fs.readFileSync(full, 'utf8'));
61
64
  }
62
65
  }
63
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/sources/local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAM7B,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW;IACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,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;AAbD,gCAaC;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"}
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
- /** src can be a plain string (http/https URL or local path) or a map for gitlab/github/exec */
23
- export type FileSrc = string | GitLabSrc | GitHubSrc | ExecSrc;
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
@@ -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,+FAA+F;AAC/F,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,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,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
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"}
package/dist/writer.js CHANGED
@@ -28,13 +28,13 @@ const fs = __importStar(require("fs"));
28
28
  const os = __importStar(require("os"));
29
29
  const path = __importStar(require("path"));
30
30
  function atomicWrite(targets) {
31
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "fileferry-"));
31
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'fileferry-'));
32
32
  try {
33
33
  // Stage all files to temp dir first
34
34
  const staged = [];
35
35
  for (const t of targets) {
36
- const tmpFile = path.join(tmpDir, path.basename(t.targetPath) + "-" + staged.length);
37
- fs.writeFileSync(tmpFile, t.content, "utf8");
36
+ const tmpFile = path.join(tmpDir, path.basename(t.targetPath) + '-' + staged.length);
37
+ fs.writeFileSync(tmpFile, t.content, 'utf8');
38
38
  staged.push({ tmp: tmpFile, dest: t.targetPath, mode: t.mode });
39
39
  }
40
40
  // All staging succeeded — now write to real targets
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udondan/avanti",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Assemble local files from any source via a declarative YAML spec",
5
5
  "bin": {
6
6
  "avanti": "dist/cli.js"
@@ -21,8 +21,20 @@
21
21
  "files",
22
22
  "yaml"
23
23
  ],
24
- "author": "Daniel Schroeder <deemes79@googlemail.com>",
24
+ "author": {
25
+ "name": "Daniel Schroeder",
26
+ "email": "deemes79@googlemail.com",
27
+ "url": "https://udondan.com/"
28
+ },
29
+ "funding": {
30
+ "type": "github",
31
+ "url": "https://github.com/sponsors/udondan"
32
+ },
25
33
  "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/udondan/avanti.git"
37
+ },
26
38
  "dependencies": {
27
39
  "chalk": "5.3.0",
28
40
  "commander": "12.1.0",
@@ -30,16 +42,16 @@
30
42
  "js-yaml": "4.1.1"
31
43
  },
32
44
  "devDependencies": {
33
- "@eslint/js": "^10.0.1",
45
+ "@eslint/js": "10.0.1",
34
46
  "@types/diff": "5.2.1",
35
47
  "@types/js-yaml": "4.0.9",
36
48
  "@types/node": "20.14.0",
37
- "eslint": "^10.3.0",
38
- "eslint-config-prettier": "^10.1.8",
39
- "prettier": "^3.8.3",
49
+ "eslint": "10.3.0",
50
+ "eslint-config-prettier": "10.1.8",
51
+ "prettier": "3.8.3",
40
52
  "tsx": "4.15.0",
41
53
  "typescript": "5.4.5",
42
- "typescript-eslint": "^8.59.2",
54
+ "typescript-eslint": "8.59.2",
43
55
  "vitest": "1.6.0"
44
56
  }
45
57
  }
@@ -1,9 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(bun run *)",
5
- "Bash(git fetch *)",
6
- "Bash(git rebase *)"
7
- ]
8
- }
9
- }