@mmnto/totem 2.0.0 → 2.2.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/dist/compiler.d.ts +12 -0
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +17 -3
- package/dist/compiler.js.map +1 -1
- package/dist/config-schema.d.ts +28 -3
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +22 -3
- package/dist/config-schema.js.map +1 -1
- package/dist/config-schema.test.js +33 -0
- package/dist/config-schema.test.js.map +1 -1
- package/dist/describe.d.ts +19 -0
- package/dist/describe.d.ts.map +1 -1
- package/dist/describe.js +83 -12
- package/dist/describe.js.map +1 -1
- package/dist/describe.test.js +69 -2
- package/dist/describe.test.js.map +1 -1
- package/dist/gate-engine.d.ts +11 -1
- package/dist/gate-engine.d.ts.map +1 -1
- package/dist/gate-engine.js +27 -5
- package/dist/gate-engine.js.map +1 -1
- package/dist/gate-types.d.ts +17 -2
- package/dist/gate-types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/parity-detect.d.ts +41 -4
- package/dist/parity-detect.d.ts.map +1 -1
- package/dist/parity-detect.js +264 -1
- package/dist/parity-detect.js.map +1 -1
- package/dist/parity-detect.orientation-rows.test.d.ts +17 -0
- package/dist/parity-detect.orientation-rows.test.d.ts.map +1 -0
- package/dist/parity-detect.orientation-rows.test.js +357 -0
- package/dist/parity-detect.orientation-rows.test.js.map +1 -0
- package/dist/parity-label-canon.d.ts +160 -0
- package/dist/parity-label-canon.d.ts.map +1 -0
- package/dist/parity-label-canon.js +220 -0
- package/dist/parity-label-canon.js.map +1 -0
- package/dist/parity-label-canon.test.d.ts +11 -0
- package/dist/parity-label-canon.test.d.ts.map +1 -0
- package/dist/parity-label-canon.test.js +296 -0
- package/dist/parity-label-canon.test.js.map +1 -0
- package/dist/parity-manifest.d.ts +9 -0
- package/dist/parity-manifest.d.ts.map +1 -1
- package/dist/parity-manifest.js +47 -0
- package/dist/parity-manifest.js.map +1 -1
- package/dist/parity-manifest.test.js +45 -0
- package/dist/parity-manifest.test.js.map +1 -1
- package/dist/recurrence-stats.d.ts +10 -10
- package/dist/retrospect.d.ts +42 -42
- package/dist/selection-manifest.d.ts +4 -4
- package/dist/selection-manifest.d.ts.map +1 -1
- package/dist/selection-manifest.js +2 -0
- package/dist/selection-manifest.js.map +1 -1
- package/dist/transport-shield.d.ts +190 -0
- package/dist/transport-shield.d.ts.map +1 -0
- package/dist/transport-shield.fold.test.d.ts +2 -0
- package/dist/transport-shield.fold.test.d.ts.map +1 -0
- package/dist/transport-shield.fold.test.js +439 -0
- package/dist/transport-shield.fold.test.js.map +1 -0
- package/dist/transport-shield.js +1040 -0
- package/dist/transport-shield.js.map +1 -0
- package/dist/transport-shield.test.d.ts +2 -0
- package/dist/transport-shield.test.d.ts.map +1 -0
- package/dist/transport-shield.test.js +298 -0
- package/dist/transport-shield.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { findHeredocs, tokenizeShell, transportShieldEvaluator, } from './transport-shield.js';
|
|
3
|
+
// The falsification-leg fold on mmnto-ai/totem#2799 (F1–F5, F8, F9) and the
|
|
4
|
+
// ADR-109 false-positive budget fixture (F6). Each row here is a shape the first
|
|
5
|
+
// build got wrong, pinned so it stays fixed.
|
|
6
|
+
const NO_DIR = '/nonexistent/.totem';
|
|
7
|
+
const run = (command, platform = 'linux', tool = 'Bash') => transportShieldEvaluator({ tool, command, platform }, NO_DIR);
|
|
8
|
+
describe('transport-shield fold — the tokenizer keeps POSIX double-quote semantics (F1)', () => {
|
|
9
|
+
it('a backslash inside double quotes survives unless it escapes $, `, ", \\ or newline', () => {
|
|
10
|
+
expect(tokenizeShell('sed -i "s/\\r//" f.txt')[0]?.tokens).toEqual([
|
|
11
|
+
'sed',
|
|
12
|
+
'-i',
|
|
13
|
+
's/\\r//',
|
|
14
|
+
'f.txt',
|
|
15
|
+
]);
|
|
16
|
+
expect(tokenizeShell('echo "a\\$b \\"q\\" \\\\ x"')[0]?.tokens).toEqual([
|
|
17
|
+
'echo',
|
|
18
|
+
'a$b "q" \\ x',
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
21
|
+
it('denies the double-quoted spelling of a sed -i escape and an inline body escape (the charter rows)', () => {
|
|
22
|
+
expect(run('sed -i "s/\\r//" f.txt').provenance.ref).toBe('sed-i-escape');
|
|
23
|
+
expect(run('node -e "console.log(\'a\\d\')"').provenance.ref).toBe('inline-body-escape');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('transport-shield fold — -b is scoped to gh and reported as written (F2)', () => {
|
|
27
|
+
it('denies gh -b /x and gh --body=/x on win32 Bash, naming the flag the user typed', () => {
|
|
28
|
+
const short = run('gh pr comment 5 -b /x', 'win32');
|
|
29
|
+
expect(short.disposition).toBe('deny');
|
|
30
|
+
expect(short.provenance.matched).toBe('-b /x');
|
|
31
|
+
const eq = run('gh pr comment 5 --body=/x', 'win32');
|
|
32
|
+
expect(eq.provenance.matched).toBe('--body=/x');
|
|
33
|
+
});
|
|
34
|
+
it('allows -b on programs where it is not a body', () => {
|
|
35
|
+
for (const cmd of [
|
|
36
|
+
'diff -b /d/Dev/a.txt /d/Dev/b.txt',
|
|
37
|
+
'curl -b /tmp/cookies.txt https://api.github.com',
|
|
38
|
+
'cp -b /tmp/a /tmp/b',
|
|
39
|
+
'sort -b /tmp/list.txt',
|
|
40
|
+
'du -b /d/Dev/totem',
|
|
41
|
+
'grep -b /usr/local notes.txt',
|
|
42
|
+
]) {
|
|
43
|
+
expect(run(cmd, 'win32').disposition, cmd).toBe('allow');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('transport-shield fold — sed -i reads the expression operand, never a filename (F3)', () => {
|
|
48
|
+
it('allows a Windows path as the sed file operand', () => {
|
|
49
|
+
expect(run("sed -i 's/a/b/' 'C:\\temp\\f.txt'").disposition).toBe('allow');
|
|
50
|
+
expect(run("sed -i 's/a/b/' 'a\\b.txt'").disposition).toBe('allow');
|
|
51
|
+
});
|
|
52
|
+
it('still denies a backslash in the expression, as -e and as the first operand', () => {
|
|
53
|
+
expect(run("sed -i -e 's/\\t/ /' 'C:\\temp\\f.txt'").provenance.ref).toBe('sed-i-escape');
|
|
54
|
+
expect(run("sed -i 's/\\t/ /' f.txt").provenance.matched).toBe('s/\\t/ /');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('transport-shield fold — heredoc operators in quotes and here-strings are not heredocs (F4)', () => {
|
|
58
|
+
it('ignores << inside a quoted argument and the <<< here-string operator', () => {
|
|
59
|
+
expect(findHeredocs("grep '<<EOF' notes.md")).toEqual([]);
|
|
60
|
+
expect(findHeredocs('bash <<< "hello"')).toEqual([]);
|
|
61
|
+
expect(run("grep '<<EOF' notes.md\ngrep 'a\\d' other.md").disposition).toBe('allow');
|
|
62
|
+
expect(run('bash <<< "hello"\nsed -n \'s/a\\/b/p\' f').disposition).toBe('allow');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('transport-shield fold — the terminator is an exact line, tabs stripped only for <<- (F5)', () => {
|
|
66
|
+
it('an indented delimiter word inside the body does not end a plain heredoc', () => {
|
|
67
|
+
const cmd = "cat > f <<'EOF'\na\n EOF\nx\\d\nEOF";
|
|
68
|
+
expect(findHeredocs(cmd)[0]?.body).toBe('a\n EOF\nx\\d\n');
|
|
69
|
+
expect(run(cmd).provenance.ref).toBe('heredoc-escape');
|
|
70
|
+
});
|
|
71
|
+
it('a tab-indented delimiter ends a <<- heredoc; a CRLF or trailing-space terminator does not, as in bash', () => {
|
|
72
|
+
expect(findHeredocs("cat <<-'EOF'\n\tbody\n\tEOF\nafter")[0]?.body).toBe('\tbody\n');
|
|
73
|
+
expect(findHeredocs("cat <<'EOF'\r\nbody\r\nEOF\r\n")[0]?.unterminated).toBe(true);
|
|
74
|
+
expect(findHeredocs("cat <<'EOF'\nbody\nEOF \nafter")[0]?.unterminated).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe('transport-shield fold pass 2 — quotes never span heredoc bodies; rows read the program position; the MSYS cure is honoured', () => {
|
|
78
|
+
it('an apostrophe inside a heredoc body does not hide a later heredoc (P2-F14) or expose its text as a command (P2-F15)', () => {
|
|
79
|
+
const two = "gh pr comment 2799 --body-file - <<PRBODY\nThe fold doesn't break it.\nPRBODY\ncat > .totem/note.md <<NOTE\npath C:\\Users\\me\nNOTE";
|
|
80
|
+
expect(findHeredocs(two)).toHaveLength(2);
|
|
81
|
+
expect(run(two, 'win32').provenance.ref).toBe('heredoc-escape');
|
|
82
|
+
const hidden = "cat <<EOF\ndon't\nEOF\ncat <<EOF2\ngh pr comment 5 -b /some/path\nEOF2";
|
|
83
|
+
expect(run(hidden, 'win32').disposition).toBe('allow');
|
|
84
|
+
});
|
|
85
|
+
it('a heredoc after a double-quoted argument carrying an apostrophe or an escaped quote is still found', () => {
|
|
86
|
+
expect(findHeredocs('echo "it\'s fine" && cat <<EOF\nx\\d\nEOF')).toHaveLength(1);
|
|
87
|
+
expect(findHeredocs('echo "a \\" b" && cat <<EOF\nx\\d\nEOF')).toHaveLength(1);
|
|
88
|
+
});
|
|
89
|
+
it('MSYS_NO_PATHCONV=1 is honoured by msys-body-slash, as its own cure says (P2-F16)', () => {
|
|
90
|
+
expect(run('MSYS_NO_PATHCONV=1 gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
91
|
+
expect(run('gh pr comment 5 -b /x', 'win32').disposition).toBe('deny');
|
|
92
|
+
});
|
|
93
|
+
it('a program name mentioned as an argument is not an invocation (P2-F17); wrappers and assignments are skipped', () => {
|
|
94
|
+
expect(run('grep gh -b /usr/local n.txt', 'win32').disposition).toBe('allow');
|
|
95
|
+
expect(run('echo gh -b /x', 'win32').disposition).toBe('allow');
|
|
96
|
+
expect(run("git log --grep sed -i 's/a\\t/b/'").disposition).toBe('allow');
|
|
97
|
+
expect(run("which node -e 'a\\d'").disposition).toBe('allow');
|
|
98
|
+
expect(run('GH_TOKEN=x gh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
99
|
+
expect(run('sudo /usr/bin/gh pr comment 5 --body /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
100
|
+
expect(run("time sed -i 's/\\t/ /' f").provenance.ref).toBe('sed-i-escape');
|
|
101
|
+
});
|
|
102
|
+
it("BSD sed's empty backup-suffix operand is not the expression (P2-F21)", () => {
|
|
103
|
+
expect(run("sed -i '' 's/a\\t/b/' f", 'darwin').provenance.ref).toBe('sed-i-escape');
|
|
104
|
+
});
|
|
105
|
+
it('a heredoc inside a bash -c operand is quoted text to the scanner — a disclosed corpus gap, not a row (P2-F19)', () => {
|
|
106
|
+
expect(run('bash -c "cat <<EOF\nx\\\\d\nEOF"').disposition).toBe('allow');
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('transport-shield fold — --eval= and line continuations (F8, F9)', () => {
|
|
110
|
+
it('denies the --eval= joined form and a line-continued --body', () => {
|
|
111
|
+
expect(run('node --eval="console.log(\'a\\d\')"').provenance.ref).toBe('inline-body-escape');
|
|
112
|
+
expect(run('gh pr comment 1 --body \\\n "/gemini review"', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('transport-shield fold pass 3 — comments, arithmetic, backslash-quoted delimiters, continuations, every body flag', () => {
|
|
116
|
+
it('a # comment carrying an apostrophe never hides a later heredoc or program (P3-F1)', () => {
|
|
117
|
+
const lead = "# don't clobber the file\ncat > f.mjs <<'EOF'\nconst re = /\\d+/;\nEOF";
|
|
118
|
+
expect(findHeredocs(lead)).toHaveLength(1);
|
|
119
|
+
expect(run(lead).provenance.ref).toBe('heredoc-escape');
|
|
120
|
+
expect(run("# don't forget\nsed -i 's/\\t/ /' f").provenance.ref).toBe('sed-i-escape');
|
|
121
|
+
expect(run("# it's fine\ngh pr comment 5 --body /gemini", 'win32').provenance.ref).toBe('msys-body-slash');
|
|
122
|
+
expect(run("echo hi # don't\ncat > f <<'EOF'\nx\\d\nEOF").provenance.ref).toBe('heredoc-escape');
|
|
123
|
+
expect(run("cat <<EOF # it's the body\nx\\d\nEOF").provenance.ref).toBe('heredoc-escape');
|
|
124
|
+
});
|
|
125
|
+
it('comment text is discarded, never tokenized as arguments (P3-F5); $# and a # inside a word are not comments', () => {
|
|
126
|
+
expect(run('gh pr comment 5 --body-file notes.md # was --body /gemini review', 'win32').disposition).toBe('allow');
|
|
127
|
+
expect(run("sed -i -e 's/a/b/' f.txt # -e 's/c/d/'").disposition).toBe('allow');
|
|
128
|
+
expect(tokenizeShell('echo $# a#b # c')[0]?.tokens).toEqual(['echo', '$#', 'a#b']);
|
|
129
|
+
expect(tokenizeShell('echo a # c\ngh pr view 1').map((s) => s.tokens)).toEqual([
|
|
130
|
+
['echo', 'a'],
|
|
131
|
+
['gh', 'pr', 'view', '1'],
|
|
132
|
+
]);
|
|
133
|
+
});
|
|
134
|
+
it('a backslash-continued sed -i is one line to bash and is allowed; a quoted newline still denies (P3-F2)', () => {
|
|
135
|
+
expect(run("grep -q x f && \\\n sed -i 's/foo/bar/' file.ts").disposition).toBe('allow');
|
|
136
|
+
expect(run("sed -i 's/foo/bar/' \\\n packages/core/src/file.ts").disposition).toBe('allow');
|
|
137
|
+
expect(run("sed -i \\\n 's/foo/bar/' file.ts").disposition).toBe('allow');
|
|
138
|
+
expect(run("sed -i 's/a/b\nc/' f").provenance.ref).toBe('sed-i-escape');
|
|
139
|
+
expect(run("cd x\nsed -i 's/foo/bar/' f").disposition).toBe('allow');
|
|
140
|
+
});
|
|
141
|
+
it('<< inside $(( … )) or (( … )) is a shift, not a heredoc (P3-F3)', () => {
|
|
142
|
+
expect(findHeredocs('mask=$((1 << n))\necho done')).toEqual([]);
|
|
143
|
+
expect(findHeredocs('(( mask = 1 << n ))\necho done')).toEqual([]);
|
|
144
|
+
expect(run('mask=$((1 << n))\ngh pr comment 5 -b /gemini', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
145
|
+
expect(run('(( mask = 1 << n ))\ngh pr comment 5 -b /gemini', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
146
|
+
expect(run("mask=$((1 << n))\nsed -i 's/a/b/' 'C:\\x\\y.txt'").disposition).toBe('allow');
|
|
147
|
+
expect(findHeredocs('x=$((1 << n)) && cat <<EOF\nbody\nEOF')).toHaveLength(1);
|
|
148
|
+
});
|
|
149
|
+
it('a backslash-quoted delimiter (<<\\EOF) is a quoted heredoc (P3-F4)', () => {
|
|
150
|
+
const span = findHeredocs('cat > f <<\\EOF\nconst re = /\\d+/;\nEOF')[0];
|
|
151
|
+
expect(span?.quoted).toBe(true);
|
|
152
|
+
expect(span?.delimiter).toBe('EOF');
|
|
153
|
+
expect(span?.unterminated).toBe(false);
|
|
154
|
+
expect(run('cat > f <<\\EOF\nconst re = /\\d+/;\nEOF').provenance.ref).toBe('heredoc-escape');
|
|
155
|
+
expect(run('cat > f <<\\EOF\ngh pr comment 5 -b /some/path\nEOF', 'win32').disposition).toBe('allow');
|
|
156
|
+
expect(run("cat > f <<\\EOF\nit's fine\nEOF\ncat > g <<EOF\nx\\d\nEOF").provenance.ref).toBe('heredoc-escape');
|
|
157
|
+
});
|
|
158
|
+
it('env VAR=x prog and a &-backgrounded first command still reach the program (P3-F7)', () => {
|
|
159
|
+
expect(run('env GH_TOKEN=x gh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
160
|
+
expect(run('sleep 1 & gh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
161
|
+
expect(tokenizeShell('cmd 2>&1 | tee log; x &>/dev/null; y &').map((s) => s.tokens)).toEqual([
|
|
162
|
+
['cmd', '2>&1'],
|
|
163
|
+
['tee', 'log'],
|
|
164
|
+
['x', '&>/dev/null'],
|
|
165
|
+
['y'],
|
|
166
|
+
]);
|
|
167
|
+
});
|
|
168
|
+
it("a later real --body is read when an earlier -b was another option's value (P3-F8)", () => {
|
|
169
|
+
expect(run('gh issue create --title -b --body /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
170
|
+
expect(run('gh issue create --title -b --body-file notes.md', 'win32').disposition).toBe('allow');
|
|
171
|
+
});
|
|
172
|
+
it('a literal $( inside single quotes is not a subshell to the warn row (P3-F11)', () => {
|
|
173
|
+
expect(run("grep -n '$(git show origin/main:.totem/x.md)' notes.md", 'win32').disposition).toBe('allow');
|
|
174
|
+
expect(run('echo $(git show origin/main:.totem/x.md)', 'win32').disposition).toBe('warn');
|
|
175
|
+
expect(run('echo "$(git show origin/main:.totem/x.md)"', 'win32').disposition).toBe('warn');
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe('transport-shield fold pass 3, re-armed — a # that continues a word, an escaped quote, a dotted delimiter', () => {
|
|
179
|
+
it('a # right after a $( … ) continues the word and is not a comment (P3b-F1)', () => {
|
|
180
|
+
const cmd = "cat $(echo f)#1 <<'EOF'\nconst re = /\\d+/;\nEOF";
|
|
181
|
+
expect(findHeredocs(cmd)).toHaveLength(1);
|
|
182
|
+
expect(run(cmd).provenance.ref).toBe('heredoc-escape');
|
|
183
|
+
expect(tokenizeShell('echo $(true)#x; gh pr view 1').map((s) => s.tokens)).toEqual([
|
|
184
|
+
['echo', '$(true)#x'],
|
|
185
|
+
['gh', 'pr', 'view', '1'],
|
|
186
|
+
]);
|
|
187
|
+
});
|
|
188
|
+
it("an unquoted \\' opens no single-quoted region for the warn row (P3b-F3)", () => {
|
|
189
|
+
expect(run("awk -F\\' '{print $2}' f; echo $(git show origin/main:x.md)", 'win32').disposition).toBe('warn');
|
|
190
|
+
expect(run("echo \\' $(git show origin/main:x.md)", 'win32').disposition).toBe('warn');
|
|
191
|
+
expect(run("echo 'a' $(git show origin/main:x.md)", 'win32').disposition).toBe('warn');
|
|
192
|
+
});
|
|
193
|
+
it('an operator ) begins a word and a substitution ) continues one, so a # after each reads as bash reads it (P3c-F1)', () => {
|
|
194
|
+
// A `#` after a subshell's or a case pattern's `)` is a comment in bash (an
|
|
195
|
+
// operator token precedes it); after `$( … )` or `<( … )` it continues the word.
|
|
196
|
+
expect(run("(echo a)#it's a note\ncat <<'EOF'\nx\\d\nEOF").provenance.ref).toBe('heredoc-escape');
|
|
197
|
+
expect(run("case $x in\na)#don't\n echo hit;;\nesac\ncat <<'EOF'\ny\\d\nEOF").provenance.ref).toBe('heredoc-escape');
|
|
198
|
+
expect(run("(echo a)#see <<'EOF'\nx\\d\nEOF").disposition).toBe('allow');
|
|
199
|
+
expect(findHeredocs("$(a)# it's\ncat <<'EOF'\nx\\d\nEOF")).toEqual([]);
|
|
200
|
+
expect(findHeredocs("diff <(echo a) <(echo b)#it's\ncat <<'EOF'\nx\\d\nEOF")).toEqual([]);
|
|
201
|
+
expect(run("(cd x && ls)#don't forget\ngh pr comment 5 -b /x", 'win32').provenance.ref).toBe('msys-body-slash');
|
|
202
|
+
expect(tokenizeShell('(echo a)#x\ndiff <(echo a) <(echo b)#y').map((s) => s.tokens)).toEqual([
|
|
203
|
+
['echo', 'a'],
|
|
204
|
+
['diff', '<(echo a)', '<(echo b)#y'],
|
|
205
|
+
]);
|
|
206
|
+
});
|
|
207
|
+
it('a delimiter word is read whole as bash delimits it — 1EOF, $X (literally), and a word ending at an operator (P3c-F2)', () => {
|
|
208
|
+
const two = findHeredocs("cat <<1EOF\nit's\n1EOF\ncat <<'EOF'\nx\\d\nEOF");
|
|
209
|
+
expect(two.map((s) => [s.delimiter, s.unterminated])).toEqual([
|
|
210
|
+
['1EOF', false],
|
|
211
|
+
['EOF', false],
|
|
212
|
+
]);
|
|
213
|
+
expect(run("cat <<1EOF\nit's\n1EOF\ncat <<'EOF'\nx\\d\nEOF").provenance.ref).toBe('heredoc-escape');
|
|
214
|
+
expect(run("cat <<1EOF\nit's\n1EOF\nsed -i 's/a/b/' 'C:\\x'").disposition).toBe('allow');
|
|
215
|
+
expect(findHeredocs('cat <<$X\nbody\nEOF\n')[0]?.unterminated).toBe(true);
|
|
216
|
+
expect(findHeredocs('x=$(cat <<EOF)\nplain\nEOF\n')[0]?.delimiter).toBe('EOF');
|
|
217
|
+
expect(findHeredocs('cat <<EOF;\nplain\nEOF\n')[0]?.delimiter).toBe('EOF');
|
|
218
|
+
});
|
|
219
|
+
it('a delimiter word may carry . and - (EOF.TXT, EOF-1), so the body terminates where bash terminates it', () => {
|
|
220
|
+
const spans = findHeredocs("cat <<EOF.TXT\nplain\nEOF.TXT\ncat <<'EOF-1'\nx\nEOF-1\nafter");
|
|
221
|
+
expect(spans.map((s) => [s.delimiter, s.quoted, s.unterminated])).toEqual([
|
|
222
|
+
['EOF.TXT', false, false],
|
|
223
|
+
['EOF-1', true, false],
|
|
224
|
+
]);
|
|
225
|
+
expect(run("cat <<EOF.TXT\nplain\nEOF.TXT\nsed -i 's/a/b/' 'C:\\x'").disposition).toBe('allow');
|
|
226
|
+
expect(run('cat <<EOF.TXT\nx\\d\nEOF.TXT').provenance.ref).toBe('heredoc-escape');
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
describe('transport-shield — the bot round on mmnto-ai/totem#2804 (Gemini, Greptile, CodeRabbit findings folded)', () => {
|
|
230
|
+
it('a ) inside quotes never closes a substitution, so a later positive is still reached (Gemini, tokenizeShell)', () => {
|
|
231
|
+
expect(tokenizeShell('x=$(echo ")") && gh pr view 1').map((s) => s.tokens)).toEqual([
|
|
232
|
+
['x=$(echo ")")'],
|
|
233
|
+
['gh', 'pr', 'view', '1'],
|
|
234
|
+
]);
|
|
235
|
+
expect(run('x=$(echo ")") && gh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
236
|
+
expect(run("x=$(echo ')') && sed -i 's/\\t/ /' f").provenance.ref).toBe('sed-i-escape');
|
|
237
|
+
});
|
|
238
|
+
it('a ) inside quotes never closes the subshell the warn row scans (Gemini, msys-rev-path-subshell)', () => {
|
|
239
|
+
expect(run('echo $(echo ")" && git show origin/main:x.md)', 'win32').disposition).toBe('warn');
|
|
240
|
+
expect(run('echo $(echo ")") $(git show origin/main:x.md)', 'win32').disposition).toBe('warn');
|
|
241
|
+
});
|
|
242
|
+
it('a PowerShell block comment carrying a quote hides nothing (Greptile)', () => {
|
|
243
|
+
expect(run("Write-Output <# \" #> ; sed -i 's/\\d/x/' file", 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
244
|
+
expect(run("<# don't #>\nsed -i 's/\\t/ /' f", 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
245
|
+
expect(run("<# it's\nmulti-line #>\ncat <<'EOF'\nx\\d\nEOF", 'win32', 'PowerShell').provenance.ref).toBe('heredoc-escape');
|
|
246
|
+
expect(run("Write-Output <# note #> 'plain'", 'win32', 'PowerShell').disposition).toBe('allow');
|
|
247
|
+
});
|
|
248
|
+
it('the MSYS opt-out is an assignment the shell applies to the judged segment, never a substring (CodeRabbit)', () => {
|
|
249
|
+
expect(run('MSYS_NO_PATHCONV=1 echo hi && gh pr comment 5 -b /tmp/p', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
250
|
+
expect(run('# use MSYS_NO_PATHCONV=1\ngh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
251
|
+
expect(run('cat <<EOF\nMSYS_NO_PATHCONV=1\nEOF\ngh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
252
|
+
// A bare assignment sets a shell variable a later program never sees.
|
|
253
|
+
expect(run('MSYS_NO_PATHCONV=1; gh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
254
|
+
expect(run('export MSYS_NO_PATHCONV=1; gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
255
|
+
expect(run('export MSYS_NO_PATHCONV=1 && echo $(git show origin/main:x.md)', 'win32').disposition).toBe('allow');
|
|
256
|
+
expect(run('MSYS_NO_PATHCONV=1 gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
257
|
+
expect(run('env MSYS_NO_PATHCONV=1 gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
258
|
+
expect(run('MSYS_NO_PATHCONV=1 echo hi && echo $(git show origin/main:x.md)', 'win32').disposition).toBe('warn');
|
|
259
|
+
});
|
|
260
|
+
it('a <# inside a PowerShell string literal is text and silences nothing; a real block beside it is still blanked (re-arm, BRb-F1)', () => {
|
|
261
|
+
expect(run("Write-Output '<#' ; sed -i 's/a\\t/b/' f", 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
262
|
+
expect(run('Write-Output "<#" ; cat > f <<\'EOF\'\nconst re = /\\d+/;\nEOF', 'win32', 'PowerShell')
|
|
263
|
+
.provenance.ref).toBe('heredoc-escape');
|
|
264
|
+
expect(run("Write-Output 'it''s <#' ; sed -i 's/a\\t/b/' f", 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
265
|
+
expect(run('Write-Output "a`"<#" ; sed -i \'s/a\\t/b/\' f', 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
266
|
+
expect(run("Write-Output '<#' <# it's #> ; sed -i 's/a\\t/b/' f", 'win32', 'PowerShell').provenance
|
|
267
|
+
.ref).toBe('sed-i-escape');
|
|
268
|
+
expect(run("Write-Output '<#' 'plain'", 'win32', 'PowerShell').disposition).toBe('allow');
|
|
269
|
+
});
|
|
270
|
+
it('the opt-out is honoured through every shell form that exports it, with any value, until an unset (re-arm, BRb-F4 / F8)', () => {
|
|
271
|
+
expect(run('declare -x MSYS_NO_PATHCONV=1; gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
272
|
+
expect(run('typeset -x MSYS_NO_PATHCONV=1; gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
273
|
+
expect(run('set -a; MSYS_NO_PATHCONV=1; set +a; gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
274
|
+
expect(run('MSYS_NO_PATHCONV=1; export MSYS_NO_PATHCONV; gh pr comment 5 -b /x', 'win32')
|
|
275
|
+
.disposition).toBe('allow');
|
|
276
|
+
expect(run('MSYS_NO_PATHCONV=0 gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
277
|
+
expect(run('MSYS_NO_PATHCONV= gh pr comment 5 -b /x', 'win32').disposition).toBe('allow');
|
|
278
|
+
expect(run('export MSYS_NO_PATHCONV=1; unset MSYS_NO_PATHCONV; gh pr comment 5 -b /x', 'win32')
|
|
279
|
+
.provenance.ref).toBe('msys-body-slash');
|
|
280
|
+
expect(run('declare MSYS_NO_PATHCONV=1; gh pr comment 5 -b /x', 'win32').provenance.ref).toBe('msys-body-slash');
|
|
281
|
+
});
|
|
282
|
+
it("a PowerShell # line comment carrying a quote leaves a later block blanked and a block's body unexposed (termination check, BRc-F1)", () => {
|
|
283
|
+
const miss = "# don't edit generated files\n<# the reviewer's note #>\nsed -i 's/\\r$//' file.txt";
|
|
284
|
+
expect(run(miss, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
285
|
+
expect(run("# don't edit generated files\n<# reviewer's note #>\ncat > f <<'EOF'\nx\\y\nEOF", 'win32', 'PowerShell').provenance.ref).toBe('heredoc-escape');
|
|
286
|
+
const benign = "# don't edit generated files\n<#\n sed -i 's/\\r$//' file.txt\n#>\nWrite-Output ok";
|
|
287
|
+
expect(run(benign, 'win32', 'PowerShell').disposition).toBe('allow');
|
|
288
|
+
expect(run("Write-Output a#b ; <# it's #> ; sed -i 's/\\t/ /' f", 'win32', 'PowerShell').provenance
|
|
289
|
+
.ref).toBe('sed-i-escape');
|
|
290
|
+
});
|
|
291
|
+
it('the scanners read PowerShell in one walk: a # after a substitution, a brace, a closing quote or an = (final check, BRd-F1 / F2)', () => {
|
|
292
|
+
const sed = "\nsed -i 's/\\r$//' f";
|
|
293
|
+
expect(run("Write-Output $(1)#c <# it's #>" + sed, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
294
|
+
expect(run("if ($true) { Write-Output x }#c <# it's #>" + sed, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
295
|
+
expect(run("Write-Output $(1)#c <# ; sed -i 's/\\r$//' f #>", 'win32', 'PowerShell').disposition).toBe('allow');
|
|
296
|
+
// A `#` is read by bash's word-boundary rule for both tools: `'a'#b` is one
|
|
297
|
+
// word under either grammar to the scanners.
|
|
298
|
+
expect(tokenizeShell("echo 'a'#b")[0]?.tokens).toEqual(['echo', 'a#b']);
|
|
299
|
+
expect(tokenizeShell("echo 'a'#b", { powershell: true })[0]?.tokens).toEqual(['echo', 'a#b']);
|
|
300
|
+
});
|
|
301
|
+
it("PowerShell's own token boundaries are disclosed, not modelled: the scanners read a # after a string, an = or a ) by bash's rule (the bot-round record)", () => {
|
|
302
|
+
const tail = " ; sed -i 's/\\d/x/' f";
|
|
303
|
+
// Where PowerShell reads code and bash's rule agrees — the positive is reached.
|
|
304
|
+
// PSParser: Command(x=a#c) StatementSeparator(;) Command(sed).
|
|
305
|
+
expect(run("x='a'#c" + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
306
|
+
// PSParser: CommandArgument(a=#b) / CommandArgument($x=#c) — one token each, the sed runs.
|
|
307
|
+
expect(run('Write-Output a=#b' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
308
|
+
expect(run('Write-Output $x=#c' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
309
|
+
expect(run('Write-Output http://h/p?a=#t' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
310
|
+
// Where PowerShell reads a comment and bash's rule reads code — the over-scan
|
|
311
|
+
// direction: the tail PowerShell would never run is denied anyway. Disclosed.
|
|
312
|
+
expect(run('Write-Output "a"#c' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
313
|
+
expect(run('$x=#c' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
314
|
+
expect(run('Write-Output $(1)#c' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
315
|
+
// The miss direction of that class: such a comment carrying text the scanners
|
|
316
|
+
// read as shell syntax on the line before a LATER positive — five carriers,
|
|
317
|
+
// each confirmed by execution (PowerShell runs the sed in every one). Disclosed
|
|
318
|
+
// in the header; pinned here so a future model of it shows up as a change.
|
|
319
|
+
for (const carrier of ["don't", 'say "', 'note <#', 'note \\', 'note $(']) {
|
|
320
|
+
const cmd = `Write-Output 'a'#${carrier}\nsed -i 's/\\r$//' f`;
|
|
321
|
+
expect(run(cmd, 'win32', 'PowerShell').disposition, carrier).toBe('allow');
|
|
322
|
+
}
|
|
323
|
+
expect(run("Write-Output 'a'#don't\n<# note #>\nsed -i 's/\\r$//' f", 'win32', 'PowerShell')
|
|
324
|
+
.disposition).toBe('allow');
|
|
325
|
+
// The two rules that DID hold: a `<# … #>` inside a `$( … )` is a comment there
|
|
326
|
+
// too (PSParser: GroupStart Number Comment(<# ) #>) GroupEnd), and a
|
|
327
|
+
// backtick-escaped quote does not end a double-quoted string.
|
|
328
|
+
expect(run('Write-Output $(1 <# ) #>)' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
329
|
+
expect(run('Write-Output $(Write-Output ")" <# ) #>)' + tail, 'win32', 'PowerShell').provenance.ref).toBe('sed-i-escape');
|
|
330
|
+
});
|
|
331
|
+
it('an operand after -- is a file sed edits, never a script (final check, BRd-F3)', () => {
|
|
332
|
+
expect(run("sed -i -- 's/a\\t/b/' -nfile").provenance.ref).toBe('sed-i-escape');
|
|
333
|
+
expect(run("sed -i -- 's/a\\t/b/' -file").provenance.ref).toBe('sed-i-escape');
|
|
334
|
+
});
|
|
335
|
+
it('a clustered -nf is a script file too (termination check, BRc-F5)', () => {
|
|
336
|
+
expect(run("sed -i -nf 'C:\\t.sed' file").disposition).toBe('allow');
|
|
337
|
+
expect(run("sed -i -Enf 'C:\\t.sed' file").disposition).toBe('allow');
|
|
338
|
+
expect(run("sed -i -if 's/a\\t/b/' file").provenance.ref).toBe('sed-i-escape');
|
|
339
|
+
});
|
|
340
|
+
it("GNU's attached -fFILE and -f- are script files too (re-arm, BRb-F3)", () => {
|
|
341
|
+
expect(run("sed -i -fscript.sed 'C:\\temp\\f.txt'").disposition).toBe('allow');
|
|
342
|
+
expect(run("sed -i -f- 'C:\\temp\\f.txt'").disposition).toBe('allow');
|
|
343
|
+
});
|
|
344
|
+
it('a -f / --file script path is never the sed expression, and with a script file no positional operand is (CodeRabbit)', () => {
|
|
345
|
+
// Quoted, so the backslashes reach the operand (unquoted ones are bash escapes).
|
|
346
|
+
expect(run("sed -i -f 'C:\\tmp\\script.sed' file").disposition).toBe('allow');
|
|
347
|
+
expect(run("sed -i --file=C:\\tmp\\script.sed 'C:\\temp\\f.txt'").disposition).toBe('allow');
|
|
348
|
+
expect(run("sed -i -f script.sed -e 's/a\\t/b/' f").provenance.ref).toBe('sed-i-escape');
|
|
349
|
+
});
|
|
350
|
+
it('the newline arm reads the expression operand only, never a file operand (CodeRabbit)', () => {
|
|
351
|
+
expect(run('sed -i \'s/a/b/\' "f\ng"').disposition).toBe('allow');
|
|
352
|
+
expect(run("sed -i 's/a/b\nc/' f").provenance.ref).toBe('sed-i-escape');
|
|
353
|
+
expect(run("sed -i -e 's/a/b\nc/' f").provenance.matched).toBe('s/a/b c/');
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
describe('transport-shield — the false-positive budget fixture (ADR-109; F6)', () => {
|
|
357
|
+
// Everyday commands that share a token with a row. Budget: ZERO denies. A deny
|
|
358
|
+
// here is a defect in a row, never a reason to widen the corpus by hand.
|
|
359
|
+
const BENIGN = [
|
|
360
|
+
['git status -sb', 'win32'],
|
|
361
|
+
['git log --oneline -5 origin/main', 'win32'],
|
|
362
|
+
['gh pr view 2802 --json state,mergeable', 'win32'],
|
|
363
|
+
['gh pr comment 5 --body-file notes.md', 'win32'],
|
|
364
|
+
['gh pr comment 5 --body "@coderabbitai review"', 'win32'],
|
|
365
|
+
["gh api repos/mmnto-ai/totem/pulls/1/files --jq '.[].filename'", 'win32'],
|
|
366
|
+
['diff -b /d/Dev/a.txt /d/Dev/b.txt', 'win32'],
|
|
367
|
+
['curl -b /tmp/cookies.txt https://api.github.com', 'win32'],
|
|
368
|
+
['cp -b /tmp/a /tmp/b', 'win32'],
|
|
369
|
+
['sort -b /tmp/list.txt', 'win32'],
|
|
370
|
+
['du -b /d/Dev/totem', 'win32'],
|
|
371
|
+
['grep -b /usr/local notes.txt', 'win32'],
|
|
372
|
+
['grep gh -b /usr/local n.txt', 'win32'],
|
|
373
|
+
['echo gh -b /x', 'win32'],
|
|
374
|
+
["git log --grep sed -i 's/a\\t/b/'", 'win32'],
|
|
375
|
+
["which node -e 'a\\d'", 'win32'],
|
|
376
|
+
['MSYS_NO_PATHCONV=1 gh pr comment 5 -b /x', 'win32'],
|
|
377
|
+
["cat <<EOF\ndon't\nEOF\ncat <<EOF2\ngh pr comment 5 -b /some/path\nEOF2", 'win32'],
|
|
378
|
+
["grep -rn 'gate-wrapper' packages/cli/src --include=*.ts", 'win32'],
|
|
379
|
+
["grep '<<EOF' notes.md", 'win32'],
|
|
380
|
+
['bash <<< "hello world"', 'win32'],
|
|
381
|
+
["sed -n '1,5p' file", 'win32'],
|
|
382
|
+
["sed -i 's/a/b/' file", 'win32'],
|
|
383
|
+
["sed -i 's/a/b/' 'C:\\temp\\f.txt'", 'win32'],
|
|
384
|
+
["printf '%s\\n' 'a line' >> file.txt", 'win32'],
|
|
385
|
+
['node -e "console.log(1 + 1)"', 'win32'],
|
|
386
|
+
['node scripts/patch.mjs --dry-run', 'win32'],
|
|
387
|
+
['python3 -c "print(2 ** 10)"', 'win32'],
|
|
388
|
+
["cat > notes.md <<'EOF'\nhello world\nsecond line\nEOF", 'win32'],
|
|
389
|
+
['cat <<EOF\nplain body\nEOF', 'win32'],
|
|
390
|
+
['pnpm --filter @mmnto/cli exec vitest run src/commands/gate.test.ts', 'win32'],
|
|
391
|
+
['pnpm build && pnpm test', 'win32'],
|
|
392
|
+
['ls -la D:/Dev/worktrees | head -5', 'win32'],
|
|
393
|
+
['MSYS_NO_PATHCONV=1 git show origin/main:.totem/x.md', 'win32'],
|
|
394
|
+
['git show origin/main:.totem/x.md', 'win32'],
|
|
395
|
+
['echo "path: C:\\Users\\me"', 'linux'],
|
|
396
|
+
["awk -F: '{print $1}' /etc/passwd", 'linux'],
|
|
397
|
+
['find . -name "*.ts" -exec wc -l {} +', 'linux'],
|
|
398
|
+
['xargs -0 rm -f < list.txt', 'linux'],
|
|
399
|
+
['tar -czf out.tgz -C /tmp dir', 'linux'],
|
|
400
|
+
['docker run --rm -v "$PWD:/w" img', 'linux'],
|
|
401
|
+
['gh pr comment 5 --body "/gemini review"', 'linux'],
|
|
402
|
+
['gh pr comment 5 --body "/gemini review"', 'darwin'],
|
|
403
|
+
// Pass 3: comments, continuations, arithmetic, a backslash-quoted delimiter, & and 2>&1.
|
|
404
|
+
['gh pr comment 5 --body-file notes.md # was --body /gemini review', 'win32'],
|
|
405
|
+
["sed -i -e 's/a/b/' f.txt # -e 's/c/d/'", 'win32'],
|
|
406
|
+
["grep -q x f && \\\n sed -i 's/foo/bar/' file.ts", 'win32'],
|
|
407
|
+
["sed -i 's/foo/bar/' \\\n packages/core/src/file.ts", 'win32'],
|
|
408
|
+
["mask=$((1 << n))\nsed -i 's/a/b/' 'C:\\x\\y.txt'", 'win32'],
|
|
409
|
+
['cat > f <<\\EOF\ngh pr comment 5 -b /some/path\nEOF', 'win32'],
|
|
410
|
+
["grep -n '$(git show origin/main:.totem/x.md)' notes.md", 'win32'],
|
|
411
|
+
['cmd 2>&1 | tee log', 'win32'],
|
|
412
|
+
['gh issue create --title -b --body-file notes.md', 'win32'],
|
|
413
|
+
["cat <<EOF.TXT\nplain\nEOF.TXT\nsed -i 's/a/b/' 'C:\\x'", 'win32'],
|
|
414
|
+
["awk -F\\' '{print $2}' f", 'win32'],
|
|
415
|
+
["(echo a)#see <<'EOF'\nx\\d\nEOF", 'win32'],
|
|
416
|
+
["cat <<1EOF\nit's\n1EOF\nsed -i 's/a/b/' 'C:\\x'", 'win32'],
|
|
417
|
+
["(cd x && make) # it's done\ncat <<'EOF'\nplain\nEOF", 'win32'],
|
|
418
|
+
// The bot round: quoted parens in a substitution, a sed script file, an opt-out on another segment.
|
|
419
|
+
['x=$(echo ")") && gh pr view 1', 'win32'],
|
|
420
|
+
["sed -i -f 'C:\\tmp\\script.sed' file", 'win32'],
|
|
421
|
+
['MSYS_NO_PATHCONV=1 echo hi && gh pr view 1', 'win32'],
|
|
422
|
+
["Write-Output <# note #> 'plain'", 'win32'],
|
|
423
|
+
// The re-arm: a string-borne <#, the export forms, GNU's attached -f.
|
|
424
|
+
["Write-Output '<#' 'plain'", 'win32'],
|
|
425
|
+
['declare -x MSYS_NO_PATHCONV=1; gh pr comment 5 -b /x', 'win32'],
|
|
426
|
+
['MSYS_NO_PATHCONV=0 gh pr comment 5 -b /x', 'win32'],
|
|
427
|
+
["sed -i -fscript.sed 'C:\\temp\\f.txt'", 'win32'],
|
|
428
|
+
["sed -i -nf 'C:\\t.sed' file", 'win32'],
|
|
429
|
+
];
|
|
430
|
+
it('denies none of the benign corpus (budget: 0)', () => {
|
|
431
|
+
const denies = BENIGN.filter(([cmd, platform]) => run(cmd, platform).disposition === 'deny').map(([cmd]) => cmd);
|
|
432
|
+
expect(denies).toEqual([]);
|
|
433
|
+
});
|
|
434
|
+
it('the PowerShell tool sees the benign corpus the same way', () => {
|
|
435
|
+
const denies = BENIGN.filter(([cmd, platform]) => run(cmd, platform, 'PowerShell').disposition === 'deny').map(([cmd]) => cmd);
|
|
436
|
+
expect(denies).toEqual([]);
|
|
437
|
+
});
|
|
438
|
+
});
|
|
439
|
+
//# sourceMappingURL=transport-shield.fold.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport-shield.fold.test.js","sourceRoot":"","sources":["../src/transport-shield.fold.test.ts"],"names":[],"mappings":"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"}
|