@udondan/avanti 0.23.0 → 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.
- package/README.md +129 -16
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +8 -4
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +66 -40
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +30 -6
- package/dist/commands/pull.js.map +1 -1
- package/dist/config-writeback.d.ts.map +1 -1
- package/dist/config-writeback.js +16 -4
- package/dist/config-writeback.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +152 -7
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +6 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +101 -24
- package/dist/diff.js.map +1 -1
- package/dist/history.d.ts +1 -0
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +32 -0
- package/dist/history.js.map +1 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +18 -8
- package/dist/paths.js.map +1 -1
- package/dist/sources/github.d.ts +1 -0
- package/dist/sources/github.d.ts.map +1 -1
- package/dist/sources/github.js +100 -0
- package/dist/sources/github.js.map +1 -1
- package/dist/sources/gitlab.d.ts +1 -0
- package/dist/sources/gitlab.d.ts.map +1 -1
- package/dist/sources/gitlab.js +161 -0
- package/dist/sources/gitlab.js.map +1 -1
- package/dist/sources/index.d.ts.map +1 -1
- package/dist/sources/index.js +40 -14
- package/dist/sources/index.js.map +1 -1
- package/dist/types.d.ts +33 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/variables-remote.d.ts.map +1 -1
- package/dist/variables-remote.js +86 -6
- package/dist/variables-remote.js.map +1 -1
- package/dist/variables.d.ts.map +1 -1
- package/dist/variables.js +96 -10
- package/dist/variables.js.map +1 -1
- package/dist/writer.d.ts +1 -0
- package/dist/writer.d.ts.map +1 -1
- package/dist/writer.js +122 -7
- package/dist/writer.js.map +1 -1
- package/package.json +5 -5
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuPa,QAAA,sBAAsB,GAAqB;IACtD,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,UAAU;IACV,KAAK;IACL,UAAU;IACV,KAAK;CACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables-remote.d.ts","sourceRoot":"","sources":["../src/variables-remote.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"variables-remote.d.ts","sourceRoot":"","sources":["../src/variables-remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EAET,YAAY,EAEb,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAe,UAAU,EAAe,MAAM,WAAW,CAAC;AAuEjE,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,SAAS,CAAC,CAwGpB"}
|
package/dist/variables-remote.js
CHANGED
|
@@ -37,6 +37,56 @@ exports.resolveVariableSpec = resolveVariableSpec;
|
|
|
37
37
|
const variables_1 = require("./variables");
|
|
38
38
|
const sources_1 = require("./sources");
|
|
39
39
|
const binary_1 = require("./binary");
|
|
40
|
+
// Recursively resolve $var references in all string leaves of a JsonValue.
|
|
41
|
+
// `seen` tracks the current DFS path for cycle detection; it is backtracked
|
|
42
|
+
// after each object/array so shared (non-circular) references are not flagged.
|
|
43
|
+
function deepResolveVars(value, vars, path = '', seen = new WeakSet()) {
|
|
44
|
+
if (typeof value === 'string')
|
|
45
|
+
return (0, variables_1.resolveVars)(value, vars);
|
|
46
|
+
// Reject non-JSON-compatible primitives that can reach here from programmatic
|
|
47
|
+
// callers who bypass TypeScript (e.g. via `as any`).
|
|
48
|
+
if (typeof value === 'undefined' ||
|
|
49
|
+
typeof value === 'bigint' ||
|
|
50
|
+
typeof value === 'symbol' ||
|
|
51
|
+
typeof value === 'function') {
|
|
52
|
+
const at = path ? ` at ${path}` : '';
|
|
53
|
+
throw new Error(`Variable value has unsupported type "${typeof value}"${at} — only string, number, boolean, null, array, and plain object are allowed`);
|
|
54
|
+
}
|
|
55
|
+
if (Array.isArray(value)) {
|
|
56
|
+
if (seen.has(value)) {
|
|
57
|
+
const at = path ? ` at ${path}` : '';
|
|
58
|
+
throw new Error(`Variable value contains a circular reference${at}`);
|
|
59
|
+
}
|
|
60
|
+
seen.add(value);
|
|
61
|
+
const result = value.map((v, i) => deepResolveVars(v, vars, `${path}[${i}]`, seen));
|
|
62
|
+
seen.delete(value);
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
if (typeof value === 'object' && value !== null) {
|
|
66
|
+
if (seen.has(value)) {
|
|
67
|
+
const at = path ? ` at ${path}` : '';
|
|
68
|
+
throw new Error(`Variable value contains a circular reference${at}`);
|
|
69
|
+
}
|
|
70
|
+
const proto = Object.getPrototypeOf(value);
|
|
71
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
72
|
+
const typeName = value.constructor?.name ??
|
|
73
|
+
'unknown';
|
|
74
|
+
const at = path ? ` at ${path}` : '';
|
|
75
|
+
throw new Error(`Variable value contains a non-plain object (${typeName})${at} — only plain objects and arrays are supported as variable values. If loading from YAML, quote timestamps and other auto-typed values.`);
|
|
76
|
+
}
|
|
77
|
+
seen.add(value);
|
|
78
|
+
const out = Object.create(null);
|
|
79
|
+
for (const [k, v] of Object.entries(value)) {
|
|
80
|
+
const keyPart = /[.[\]"']/.test(k)
|
|
81
|
+
? `["${k.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"]`
|
|
82
|
+
: `.${k}`;
|
|
83
|
+
out[k] = deepResolveVars(v, vars, `${path}${keyPart}`, seen);
|
|
84
|
+
}
|
|
85
|
+
seen.delete(value);
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
40
90
|
async function resolveVariableSpec(spec, workingDir, cache) {
|
|
41
91
|
const resolved = Object.create(null);
|
|
42
92
|
let applyTemplate;
|
|
@@ -50,13 +100,43 @@ async function resolveVariableSpec(spec, workingDir, cache) {
|
|
|
50
100
|
throw new Error(`variables.${name}: ${msg}`, { cause: err });
|
|
51
101
|
}
|
|
52
102
|
}
|
|
103
|
+
else if (value === null) {
|
|
104
|
+
throw new Error(`variables.${name}: value must not be null`);
|
|
105
|
+
}
|
|
106
|
+
else if (typeof value === 'undefined' ||
|
|
107
|
+
typeof value === 'bigint' ||
|
|
108
|
+
typeof value === 'symbol' ||
|
|
109
|
+
typeof value === 'function') {
|
|
110
|
+
throw new Error(`variables.${name}: unsupported value type "${typeof value}" — value must be a string, number, boolean, list, or plain object`);
|
|
111
|
+
}
|
|
112
|
+
else if (typeof value !== 'object' ||
|
|
113
|
+
Array.isArray(value) ||
|
|
114
|
+
// Use `in` for TypeScript narrowing; Object.hasOwn guards against
|
|
115
|
+
// inherited `src` properties from programmatic callers.
|
|
116
|
+
!('src' in value) ||
|
|
117
|
+
!Object.hasOwn(value, 'src')) {
|
|
118
|
+
// Non-string, non-VariableEntry value (number, boolean, list, or plain
|
|
119
|
+
// object) — resolve $vars in any string leaves.
|
|
120
|
+
try {
|
|
121
|
+
// deepResolveVars returns JsonValue (handles nested nulls), but null
|
|
122
|
+
// is rejected above so the cast to VariableValue is sound.
|
|
123
|
+
// TS can't narrow VariableEntry away via Object.hasOwn; the cast is
|
|
124
|
+
// safe — only values without an own `src` reach this branch.
|
|
125
|
+
resolved[name] = deepResolveVars(value, resolved);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
129
|
+
throw new Error(`variables.${name}: ${msg}`, { cause: err });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
53
132
|
else {
|
|
133
|
+
const entry = value;
|
|
54
134
|
const synthetic = {
|
|
55
|
-
src:
|
|
135
|
+
src: entry.src,
|
|
56
136
|
target: name,
|
|
57
|
-
json:
|
|
58
|
-
yaml:
|
|
59
|
-
toml:
|
|
137
|
+
json: entry.json,
|
|
138
|
+
yaml: entry.yaml,
|
|
139
|
+
toml: entry.toml,
|
|
60
140
|
};
|
|
61
141
|
let result;
|
|
62
142
|
try {
|
|
@@ -79,10 +159,10 @@ async function resolveVariableSpec(spec, workingDir, cache) {
|
|
|
79
159
|
throw new Error(`variables.${name}: source resolved to binary content, which cannot be used as a variable value`);
|
|
80
160
|
}
|
|
81
161
|
let text = buf.toString('utf8');
|
|
82
|
-
if (
|
|
162
|
+
if (entry.template !== undefined) {
|
|
83
163
|
applyTemplate ??= (await Promise.resolve().then(() => __importStar(require('./processors/template')))).applyTemplate;
|
|
84
164
|
try {
|
|
85
|
-
text = await applyTemplate(text,
|
|
165
|
+
text = await applyTemplate(text, entry.template, resolved, srcPath || undefined);
|
|
86
166
|
}
|
|
87
167
|
catch (err) {
|
|
88
168
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables-remote.js","sourceRoot":"","sources":["../src/variables-remote.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"variables-remote.js","sourceRoot":"","sources":["../src/variables-remote.ts"],"names":[],"mappings":"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"}
|
package/dist/variables.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG7D,eAAO,MAAM,aAAa,aAAsB,CAAC;AAGjD,eAAO,MAAM,kBAAkB,aAW7B,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI,CAMtE;AAqGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CA4BlE;AAgBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CA4B3E;AAGD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAa3D;AAGD,wBAAgB,aAAa,CAAC,GAAG,GAAE,IAAiB,GAAG,SAAS,CAc/D;AAYD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA2B5D;AA6BD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI,CAkBN;AASD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,CAmCR"}
|
package/dist/variables.js
CHANGED
|
@@ -67,12 +67,90 @@ function validateVariables(vars) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
// Single-pass regex: $$ → literal $, then $env:NAME, then $
|
|
71
|
-
// Ordering within the alternation matters: $$ must
|
|
72
|
-
// consumed before
|
|
73
|
-
const TOKEN = /\$\$|\$env:([A-Za-z_][A-Za-z0-9_]*)|\$([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
70
|
+
// Single-pass regex: $$ → literal $, then $env:NAME, then ${expr} (braced),
|
|
71
|
+
// then $name (unbraced). Ordering within the alternation matters: $$ must
|
|
72
|
+
// come first so it is consumed before any other branch matches the second $.
|
|
73
|
+
const TOKEN = /\$\$|\$env:([A-Za-z_][A-Za-z0-9_]*)|\$\{([^}]*)\}|\$([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
74
|
+
// Strict grammar: name ( '.' propKey | '[' integer ']' )*
|
|
75
|
+
// Each segment must be explicitly separated — missing dots (arr[0]key) and
|
|
76
|
+
// consecutive dots (a..b) are rejected rather than silently accepted.
|
|
77
|
+
const PATH_GRAMMAR = /^([A-Za-z_][A-Za-z0-9_]*)((?:\.[A-Za-z_][A-Za-z0-9_]*|\[\d+\])*)$/;
|
|
78
|
+
const PATH_SEG = /\.([A-Za-z_][A-Za-z0-9_]*)|\[(\d+)\]/g;
|
|
79
|
+
// Parse an expression like "servers[1].host" into a variable name + segments.
|
|
80
|
+
function parsePath(expr) {
|
|
81
|
+
const m = PATH_GRAMMAR.exec(expr.trim());
|
|
82
|
+
if (!m) {
|
|
83
|
+
throw new Error(`Invalid path expression "\${${expr}}"`);
|
|
84
|
+
}
|
|
85
|
+
const name = m[1];
|
|
86
|
+
const segments = [];
|
|
87
|
+
PATH_SEG.lastIndex = 0;
|
|
88
|
+
let seg;
|
|
89
|
+
while ((seg = PATH_SEG.exec(m[2])) !== null) {
|
|
90
|
+
if (seg[1] !== undefined) {
|
|
91
|
+
segments.push({ type: 'prop', key: seg[1] });
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
segments.push({ type: 'index', index: Number(seg[2]) });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { name, segments };
|
|
98
|
+
}
|
|
99
|
+
// Walk a JsonValue tree following the parsed segments, returning the leaf.
|
|
100
|
+
function walkPath(root, segments, expr) {
|
|
101
|
+
let current = root;
|
|
102
|
+
for (const seg of segments) {
|
|
103
|
+
if (seg.type === 'prop') {
|
|
104
|
+
if (typeof current !== 'object' ||
|
|
105
|
+
current === null ||
|
|
106
|
+
Array.isArray(current)) {
|
|
107
|
+
throw new Error(`Cannot access property "${seg.key}" on non-object in "\${${expr}}"`);
|
|
108
|
+
}
|
|
109
|
+
if (!Object.hasOwn(current, seg.key)) {
|
|
110
|
+
throw new Error(`Property "${seg.key}" not found in "\${${expr}}"`);
|
|
111
|
+
}
|
|
112
|
+
current = current[seg.key];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
if (!Array.isArray(current)) {
|
|
116
|
+
throw new Error(`Cannot use index [${seg.index}] on non-array in "\${${expr}}"`);
|
|
117
|
+
}
|
|
118
|
+
if (seg.index >= current.length) {
|
|
119
|
+
throw new Error(`Index [${seg.index}] out of bounds (length ${current.length}) in "\${${expr}}"`);
|
|
120
|
+
}
|
|
121
|
+
current = current[seg.index];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return current;
|
|
125
|
+
}
|
|
126
|
+
// Evaluate a braced path expression like "servers[1].host" against vars.
|
|
127
|
+
// Returns null to signal reserved-var passthrough (caller should return the
|
|
128
|
+
// original match token unchanged). Primitive leaf values are coerced to
|
|
129
|
+
// string; objects/arrays are JSON-serialised.
|
|
130
|
+
function evaluatePath(vars, expr) {
|
|
131
|
+
const { name, segments } = parsePath(expr.trim());
|
|
132
|
+
if (exports.RESERVED_VARS.has(name))
|
|
133
|
+
return null;
|
|
134
|
+
if (!Object.hasOwn(vars, name))
|
|
135
|
+
throw new Error(`Undefined variable: \${${expr}}`);
|
|
136
|
+
const leaf = walkPath(vars[name], segments, expr);
|
|
137
|
+
if (leaf === null)
|
|
138
|
+
return 'null';
|
|
139
|
+
if (typeof leaf !== 'object')
|
|
140
|
+
return String(leaf);
|
|
141
|
+
return JSON.stringify(leaf);
|
|
142
|
+
}
|
|
143
|
+
// Stringify a variable value for unbraced $name substitution.
|
|
144
|
+
// Strings pass through; complex types are JSON-serialised.
|
|
145
|
+
function stringifyValue(v) {
|
|
146
|
+
if (v === null)
|
|
147
|
+
return 'null';
|
|
148
|
+
if (typeof v !== 'object')
|
|
149
|
+
return String(v);
|
|
150
|
+
return JSON.stringify(v);
|
|
151
|
+
}
|
|
74
152
|
function resolveVars(value, vars) {
|
|
75
|
-
return value.replace(TOKEN, (match, envName, varName) => {
|
|
153
|
+
return value.replace(TOKEN, (match, envName, bracedExpr, varName) => {
|
|
76
154
|
if (match === '$$')
|
|
77
155
|
return '$';
|
|
78
156
|
if (envName !== undefined) {
|
|
@@ -82,12 +160,16 @@ function resolveVars(value, vars) {
|
|
|
82
160
|
}
|
|
83
161
|
return val;
|
|
84
162
|
}
|
|
163
|
+
if (bracedExpr !== undefined) {
|
|
164
|
+
const result = evaluatePath(vars, bracedExpr);
|
|
165
|
+
return result !== null ? result : match;
|
|
166
|
+
}
|
|
85
167
|
if (exports.RESERVED_VARS.has(varName))
|
|
86
168
|
return match;
|
|
87
|
-
if (!(varName
|
|
169
|
+
if (!Object.hasOwn(vars, varName)) {
|
|
88
170
|
throw new Error(`Undefined variable: $${varName}`);
|
|
89
171
|
}
|
|
90
|
-
return vars[varName];
|
|
172
|
+
return stringifyValue(vars[varName]);
|
|
91
173
|
});
|
|
92
174
|
}
|
|
93
175
|
// Single-quote escaping for shell injection prevention.
|
|
@@ -104,7 +186,7 @@ function shellQuote(val) {
|
|
|
104
186
|
// On Unix the resolved script is passed to sh -c; on Windows it is
|
|
105
187
|
// Base64-encoded and passed to PowerShell via -EncodedCommand.
|
|
106
188
|
function resolveVarsShellSafe(value, vars) {
|
|
107
|
-
return value.replace(TOKEN, (match, envName, varName) => {
|
|
189
|
+
return value.replace(TOKEN, (match, envName, bracedExpr, varName) => {
|
|
108
190
|
if (match === '$$')
|
|
109
191
|
return '$';
|
|
110
192
|
if (envName !== undefined) {
|
|
@@ -114,12 +196,16 @@ function resolveVarsShellSafe(value, vars) {
|
|
|
114
196
|
}
|
|
115
197
|
return shellQuote(val);
|
|
116
198
|
}
|
|
199
|
+
if (bracedExpr !== undefined) {
|
|
200
|
+
const result = evaluatePath(vars, bracedExpr);
|
|
201
|
+
return result !== null ? shellQuote(result) : match;
|
|
202
|
+
}
|
|
117
203
|
if (exports.RESERVED_VARS.has(varName))
|
|
118
204
|
return match;
|
|
119
|
-
if (!(varName
|
|
205
|
+
if (!Object.hasOwn(vars, varName)) {
|
|
120
206
|
throw new Error(`Undefined variable: $${varName}`);
|
|
121
207
|
}
|
|
122
|
-
return shellQuote(vars[varName]);
|
|
208
|
+
return shellQuote(stringifyValue(vars[varName]));
|
|
123
209
|
});
|
|
124
210
|
}
|
|
125
211
|
// Build the per-file path variables for a resolved absolute target path.
|
package/dist/variables.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,8CAMC;AAqGD,kCA4BC;AAgBD,oDA4BC;AAGD,sCAaC;AAGD,sCAcC;AAYD,oDA2BC;AA6BD,0DAsBC;AASD,8CAyCC;AAtXD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAG7B,qFAAqF;AACxE,QAAA,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEjD,mFAAmF;AACtE,QAAA,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACxC,GAAG,qBAAa;IAChB,MAAM;IACN,MAAM;IACN,UAAU;IACV,UAAU;IACV,KAAK;IACL,SAAS;IACT,SAAS;IACT,MAAM;IACN,UAAU;CACX,CAAC,CAAC;AAEH,SAAgB,iBAAiB,CAAC,IAA8B;IAC9D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,0BAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,kCAAkC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,0EAA0E;AAC1E,6EAA6E;AAC7E,MAAM,KAAK,GACT,+EAA+E,CAAC;AAMlF,0DAA0D;AAC1D,2EAA2E;AAC3E,sEAAsE;AACtE,MAAM,YAAY,GAChB,mEAAmE,CAAC;AACtE,MAAM,QAAQ,GAAG,uCAAuC,CAAC;AAEzD,8EAA8E;AAC9E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,IAAI,GAA2B,CAAC;IAChC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,2EAA2E;AAC3E,SAAS,QAAQ,CACf,IAAe,EACf,QAAuB,EACvB,IAAY;IAEZ,IAAI,OAAO,GAAc,IAAI,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,IACE,OAAO,OAAO,KAAK,QAAQ;gBAC3B,OAAO,KAAK,IAAI;gBAChB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACtB,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,2BAA2B,GAAG,CAAC,GAAG,0BAA0B,IAAI,IAAI,CACrE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,GAAG,sBAAsB,IAAI,IAAI,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,qBAAqB,GAAG,CAAC,KAAK,yBAAyB,IAAI,IAAI,CAChE,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,UAAU,GAAG,CAAC,KAAK,2BAA2B,OAAO,CAAC,MAAM,YAAY,IAAI,IAAI,CACjF,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,4EAA4E;AAC5E,wEAAwE;AACxE,8CAA8C;AAC9C,SAAS,YAAY,CAAC,IAAe,EAAE,IAAY;IACjD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,qBAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,GAAG,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,8DAA8D;AAC9D,2DAA2D;AAC3D,SAAS,cAAc,CAAC,CAAY;IAClC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAe;IACxD,OAAO,KAAK,CAAC,OAAO,CAClB,KAAK,EACL,CACE,KAAK,EACL,OAA2B,EAC3B,UAA8B,EAC9B,OAA2B,EAC3B,EAAE;QACF,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9C,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,CAAC;QACD,IAAI,qBAAa,CAAC,GAAG,CAAC,OAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC,CAAC;IACxC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,2DAA2D;AAC3D,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;AAChD,CAAC;AAED,uEAAuE;AACvE,uEAAuE;AACvE,sEAAsE;AACtE,mEAAmE;AACnE,+DAA+D;AAC/D,SAAgB,oBAAoB,CAAC,KAAa,EAAE,IAAe;IACjE,OAAO,KAAK,CAAC,OAAO,CAClB,KAAK,EACL,CACE,KAAK,EACL,OAA2B,EAC3B,UAA8B,EAC9B,OAA2B,EAC3B,EAAE;QACF,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;QAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9C,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,CAAC;QACD,IAAI,qBAAa,CAAC,GAAG,CAAC,OAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CACF,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAgB,aAAa,CAAC,UAAkB;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAc,EAAE;QACrD,IAAI,EAAE,UAAU;QAChB,QAAQ;QACR,QAAQ;QACR,GAAG;QACH,OAAO;QACP,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;KAChC,CAAC,CAAC;AACL,CAAC;AAED,qEAAqE;AACrE,SAAgB,aAAa,CAAC,MAAY,IAAI,IAAI,EAAE;IAClD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG;QACX,GAAG,CAAC,WAAW,EAAE;QACjB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;KACnB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,QAAQ,GAAG;QACf,IAAI;QACJ,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;KACtB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,qEAAqE;AACrE,mFAAmF;AACnF,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,+DAA+D;AAC/D,uEAAuE;AACvE,uEAAuE;AACvE,kEAAkE;AAClE,2EAA2E;AAC3E,SAAgB,oBAAoB,CAAC,OAAe;IAClD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,kEAAkE,MAAM,CAAC,MAAM,MAAM,OAAO,GAAG,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,2BAA2B;IAC3D,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,wBAAwB,KAAK,oBAAoB,iBAAiB,yBAAyB,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;YAAE,OAAO,SAAS,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,mBAAmB,OAAO,GAAG,CACtI,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,0EAA0E;AAC1E,qEAAqE;AACrE,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,kDAAkD,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,gEAAgE;AAChE,0EAA0E;AAC1E,SAAS,aAAa,CAAC,CAAS;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,0EAA0E;AAC1E,gDAAgD;AAChD,mEAAmE;AACnE,SAAgB,uBAAuB,CACrC,UAAkB,EAClB,UAAkB,EAClB,WAAqB;IAErB,MAAM,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IAC5D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IAEjD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;QACxB,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO;IAC3D,CAAC;IAED,MAAM,IAAI,KAAK,CACb,gBAAgB,UAAU,sCAAsC;QAC9D,uCAAuC,CAC1C,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,oBAAoB;AACpB,iFAAiF;AACjF,yBAAyB;AACzB,kDAAkD;AAClD,mCAAmC;AACnC,8CAA8C;AAC9C,SAAgB,iBAAiB,CAC/B,OAAe,EACf,UAAkB,EAClB,UAAkB,EAClB,IAAe,EACf,WAAqB;IAErB,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAc,EAChC,IAAI,EACJ,QAAQ,CACT,CAAC;IAEF,IAAI,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,sEAAsE;QACtE,0EAA0E;QAC1E,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,oDAAoD,QAAQ,GAAG,CAChE,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE3D,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACb,gBAAgB,SAAS,wCAAwC,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/writer.d.ts
CHANGED
package/dist/writer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,EAAE,EACtB,SAAS,GAAE,MAAM,EAAO,GACvB,IAAI,CA0PN"}
|
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.
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
|
|
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, '.' +
|
|
55
|
-
|
|
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
|
-
|
|
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) {
|
package/dist/writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
72
|
+
"tsx": "4.22.2",
|
|
73
73
|
"typescript": "6.0.3",
|
|
74
|
-
"typescript-eslint": "8.59.
|
|
74
|
+
"typescript-eslint": "8.59.4",
|
|
75
75
|
"vitest": "4.1.6"
|
|
76
76
|
}
|
|
77
77
|
}
|