@amalgm/live 0.2.81-main.39176188543 → 0.2.81-main.39180364781
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/PURPOSE.md +3 -1
- package/dist/detection/enrollment.d.ts +22 -11
- package/dist/detection/enrollment.d.ts.map +1 -1
- package/dist/detection/enrollment.js +219 -59
- package/dist/detection/enrollment.js.map +1 -1
- package/dist/files/commands.d.ts +4 -1
- package/dist/files/commands.d.ts.map +1 -1
- package/dist/files/commands.js +4 -0
- package/dist/files/commands.js.map +1 -1
- package/dist/records/publication.d.ts +1 -1
- package/dist/records/publication.d.ts.map +1 -1
- package/dist/records/publication.js +4 -3
- package/dist/records/publication.js.map +1 -1
- package/dist-cjs/detection/enrollment.js +220 -59
- package/dist-cjs/detection/enrollment.js.map +1 -1
- package/dist-cjs/files/commands.js +4 -0
- package/dist-cjs/files/commands.js.map +1 -1
- package/dist-cjs/records/publication.js +4 -3
- package/dist-cjs/records/publication.js.map +1 -1
- package/package.json +5 -5
package/PURPOSE.md
CHANGED
|
@@ -169,7 +169,9 @@ or certify a new wire contract, cloud migration or cross-machine rollout.
|
|
|
169
169
|
have no implicit exclusion; Live's own databases and coordination files
|
|
170
170
|
live in the `.amalgm/live/` folder Shell hands it.
|
|
171
171
|
`.amalgmignore` selects later publication, never physical observation,
|
|
172
|
-
registration or cold transfer.
|
|
172
|
+
registration or cold transfer. It reads exactly as Git reads a root
|
|
173
|
+
`.gitignore`; new ground starts with Live's default lines, each visible
|
|
174
|
+
and deletable.
|
|
173
175
|
Ignoring an already registered file preserves its UUID and last recorded
|
|
174
176
|
result; it does not remove the file from the registered snapshot.
|
|
175
177
|
Each materialized root reads its own tracked policy. Ignore never gates
|
|
@@ -3,24 +3,33 @@
|
|
|
3
3
|
*
|
|
4
4
|
* User ground enrolls everything except local-only folders (Core's
|
|
5
5
|
* `isLocalOnlyPath`: `.amalgm` or `.private` at any depth) and paths excluded
|
|
6
|
-
* by its tracked `.amalgmignore
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* by its tracked `.amalgmignore`. That file reads exactly as Git reads a root
|
|
7
|
+
* `.gitignore` (gitignore(5)), byte for byte and case-sensitively, so one
|
|
8
|
+
* file gives every machine one answer; `.gitignore` itself never decides
|
|
9
|
+
* Amalgm enrollment. There are no implicit dependency, dotfile, cache, or
|
|
10
|
+
* secret exclusions: the defaults new ground starts with are visible lines of
|
|
11
|
+
* that file. Portable paths already use `/`; a host converts its native
|
|
9
12
|
* separator at the boundary. A literal `\\` is therefore preserved as part of
|
|
10
13
|
* a POSIX filename for ignore rules, while the local-only rule also splits on
|
|
11
14
|
* it and so errs toward keeping a folder local. The policy is pure
|
|
12
|
-
* strings-in/verdict-out and never inspects disk itself
|
|
15
|
+
* strings-in/verdict-out and never inspects disk itself: the caller says
|
|
16
|
+
* whether a path names a folder, as Git asks the filesystem.
|
|
13
17
|
*/
|
|
14
|
-
/** The injected policy shape: relative path
|
|
15
|
-
|
|
18
|
+
/** The injected policy shape: relative path and whether it names a folder
|
|
19
|
+
* (a workspace, folder or repository; never a link) in, verdict out. */
|
|
20
|
+
export type EnrollmentPolicy = (relPath: string, directory: boolean) => boolean;
|
|
16
21
|
/** A root's compiled `.amalgmignore`, which can also answer for a whole
|
|
17
22
|
* subtree without visiting its paths. */
|
|
18
23
|
export interface UserGroundEnrollmentPolicy {
|
|
19
|
-
(relPath: string): boolean;
|
|
24
|
+
(relPath: string, directory: boolean): boolean;
|
|
20
25
|
/** No path strictly beneath this directory can be excluded by a user rule.
|
|
21
26
|
* Conservative: false whenever a rule might match there. */
|
|
22
27
|
includesAllBeneath(directory: string): boolean;
|
|
23
28
|
}
|
|
29
|
+
/** The `.amalgmignore` new ground starts with, exactly as the file reads.
|
|
30
|
+
* Each default is one line of it, so adding a default is adding a line; the
|
|
31
|
+
* user owns the file from then on. */
|
|
32
|
+
export declare const DEFAULT_AMALGM_IGNORE = "# Rebuildable on any computer, so not sent to the cloud. Delete a line to send it.\nnode_modules/\n.venv/\n__pycache__/\n.next/\n.nuxt/\n.turbo/\n.parcel-cache/\n.gradle/\n.pytest_cache/\n.mypy_cache/\n.ruff_cache/\n.cache/\n.DS_Store\n";
|
|
24
33
|
/**
|
|
25
34
|
* One normalized spelling for portable enrollment and ignore matching.
|
|
26
35
|
* Portable relative paths use `/`. Do not reinterpret `\\`: it is a valid,
|
|
@@ -28,10 +37,12 @@ export interface UserGroundEnrollmentPolicy {
|
|
|
28
37
|
*/
|
|
29
38
|
export declare function normalizedRelativePath(relPath: string): string;
|
|
30
39
|
/**
|
|
31
|
-
* Compile the root `.amalgmignore` for a user ground.
|
|
32
|
-
*
|
|
33
|
-
* excluded
|
|
34
|
-
*
|
|
40
|
+
* Compile the root `.amalgmignore` for a user ground. As in Git, the last
|
|
41
|
+
* rule that matches a path decides it, `!` negates, and a path beneath an
|
|
42
|
+
* excluded folder is excluded whatever later rules say. Only local-only
|
|
43
|
+
* folders are structurally excluded here, and no rule can re-include them; a
|
|
44
|
+
* filename never proves that it is machine-local state. The policy file
|
|
45
|
+
* itself always travels.
|
|
35
46
|
*/
|
|
36
47
|
export declare function createUserGroundEnrollmentPolicy(ignoreText?: string): UserGroundEnrollmentPolicy;
|
|
37
48
|
//# sourceMappingURL=enrollment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrollment.d.ts","sourceRoot":"","sources":["../../src/detection/enrollment.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"enrollment.d.ts","sourceRoot":"","sources":["../../src/detection/enrollment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;wEACwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;AAEhF;yCACyC;AACzC,MAAM,WAAW,0BAA0B;IACzC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/C;gEAC4D;IAC5D,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAChD;AAED;;sCAEsC;AACtC,eAAO,MAAM,qBAAqB,iPAcjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK9D;AAkKD;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAAC,UAAU,SAAK,GAAG,0BAA0B,CA0C5F"}
|
|
@@ -3,15 +3,37 @@
|
|
|
3
3
|
*
|
|
4
4
|
* User ground enrolls everything except local-only folders (Core's
|
|
5
5
|
* `isLocalOnlyPath`: `.amalgm` or `.private` at any depth) and paths excluded
|
|
6
|
-
* by its tracked `.amalgmignore
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* by its tracked `.amalgmignore`. That file reads exactly as Git reads a root
|
|
7
|
+
* `.gitignore` (gitignore(5)), byte for byte and case-sensitively, so one
|
|
8
|
+
* file gives every machine one answer; `.gitignore` itself never decides
|
|
9
|
+
* Amalgm enrollment. There are no implicit dependency, dotfile, cache, or
|
|
10
|
+
* secret exclusions: the defaults new ground starts with are visible lines of
|
|
11
|
+
* that file. Portable paths already use `/`; a host converts its native
|
|
9
12
|
* separator at the boundary. A literal `\\` is therefore preserved as part of
|
|
10
13
|
* a POSIX filename for ignore rules, while the local-only rule also splits on
|
|
11
14
|
* it and so errs toward keeping a folder local. The policy is pure
|
|
12
|
-
* strings-in/verdict-out and never inspects disk itself
|
|
15
|
+
* strings-in/verdict-out and never inspects disk itself: the caller says
|
|
16
|
+
* whether a path names a folder, as Git asks the filesystem.
|
|
13
17
|
*/
|
|
14
18
|
import { isLocalOnlyPath, USER_IGNORE_FILE_NAME } from '@amalgm/core/identity';
|
|
19
|
+
/** The `.amalgmignore` new ground starts with, exactly as the file reads.
|
|
20
|
+
* Each default is one line of it, so adding a default is adding a line; the
|
|
21
|
+
* user owns the file from then on. */
|
|
22
|
+
export const DEFAULT_AMALGM_IGNORE = `# Rebuildable on any computer, so not sent to the cloud. Delete a line to send it.
|
|
23
|
+
node_modules/
|
|
24
|
+
.venv/
|
|
25
|
+
__pycache__/
|
|
26
|
+
.next/
|
|
27
|
+
.nuxt/
|
|
28
|
+
.turbo/
|
|
29
|
+
.parcel-cache/
|
|
30
|
+
.gradle/
|
|
31
|
+
.pytest_cache/
|
|
32
|
+
.mypy_cache/
|
|
33
|
+
.ruff_cache/
|
|
34
|
+
.cache/
|
|
35
|
+
.DS_Store
|
|
36
|
+
`;
|
|
15
37
|
/**
|
|
16
38
|
* One normalized spelling for portable enrollment and ignore matching.
|
|
17
39
|
* Portable relative paths use `/`. Do not reinterpret `\\`: it is a valid,
|
|
@@ -23,94 +45,232 @@ export function normalizedRelativePath(relPath) {
|
|
|
23
45
|
.replace(/^\/+|\/+$/g, '')
|
|
24
46
|
.replace(/\/{2,}/g, '/');
|
|
25
47
|
}
|
|
26
|
-
|
|
27
|
-
|
|
48
|
+
const encoder = new TextEncoder();
|
|
49
|
+
/** Text as one character per UTF-8 byte, the units Git matches. */
|
|
50
|
+
function byteString(text) {
|
|
51
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
52
|
+
if (text.charCodeAt(index) > 0x7f) {
|
|
53
|
+
let bytes = '';
|
|
54
|
+
for (const byte of encoder.encode(text))
|
|
55
|
+
bytes += String.fromCharCode(byte);
|
|
56
|
+
return bytes;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return text;
|
|
60
|
+
}
|
|
61
|
+
const hex = (code) => `\\x${code.toString(16).padStart(2, '0')}`;
|
|
62
|
+
const literal = (character) => /[0-9A-Za-z]/.test(character) ? character : hex(character.charCodeAt(0));
|
|
63
|
+
/** Git's ASCII-only character classes, as regex class members. */
|
|
64
|
+
const CLASSES = new Map([
|
|
65
|
+
['alnum', '\\x30-\\x39\\x41-\\x5a\\x61-\\x7a'], ['alpha', '\\x41-\\x5a\\x61-\\x7a'], ['blank', '\\x09\\x20'],
|
|
66
|
+
['cntrl', '\\x00-\\x1f\\x7f'], ['digit', '\\x30-\\x39'], ['graph', '\\x21-\\x7e'], ['lower', '\\x61-\\x7a'],
|
|
67
|
+
['print', '\\x20-\\x7e'], ['punct', '\\x21-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7e'],
|
|
68
|
+
['space', '\\x09\\x0a\\x0d\\x20'], ['upper', '\\x41-\\x5a'], ['xdigit', '\\x30-\\x39\\x41-\\x46\\x61-\\x66'],
|
|
69
|
+
]);
|
|
70
|
+
/** The bracket expression opening at pattern[open], read as Git's wildmatch
|
|
71
|
+
* reads it: its regex and the index after its `]`, or null when the rule can
|
|
72
|
+
* never match, being unterminated or naming an unknown class. A bracket never
|
|
73
|
+
* matches `/`. */
|
|
74
|
+
function bracket(pattern, open) {
|
|
75
|
+
let index = open + 1;
|
|
76
|
+
const negated = pattern[index] === '!' || pattern[index] === '^';
|
|
77
|
+
if (negated)
|
|
78
|
+
index += 1;
|
|
79
|
+
let members = '';
|
|
80
|
+
// The member a following `-` may extend into a range: none at the start
|
|
81
|
+
// or after a range or class. The first member is read even when it is `]`.
|
|
82
|
+
let previous = null;
|
|
83
|
+
do {
|
|
84
|
+
const character = pattern[index];
|
|
85
|
+
if (character === undefined)
|
|
86
|
+
return null;
|
|
87
|
+
if (character === '\\') {
|
|
88
|
+
const escaped = pattern[index += 1];
|
|
89
|
+
if (escaped === undefined)
|
|
90
|
+
return null;
|
|
91
|
+
previous = escaped.charCodeAt(0);
|
|
92
|
+
members += hex(previous);
|
|
93
|
+
}
|
|
94
|
+
else if (character === '-' && previous !== null && index + 1 < pattern.length && pattern[index + 1] !== ']') {
|
|
95
|
+
let high = pattern[index += 1];
|
|
96
|
+
if (high === '\\')
|
|
97
|
+
high = pattern[index += 1];
|
|
98
|
+
if (high === undefined)
|
|
99
|
+
return null;
|
|
100
|
+
if (previous <= high.charCodeAt(0))
|
|
101
|
+
members += `${hex(previous)}-${hex(high.charCodeAt(0))}`;
|
|
102
|
+
previous = null;
|
|
103
|
+
}
|
|
104
|
+
else if (character === '[' && pattern[index + 1] === ':') {
|
|
105
|
+
const name = index + 2, close = pattern.indexOf(']', name);
|
|
106
|
+
if (close === -1)
|
|
107
|
+
return null;
|
|
108
|
+
if (close === name || pattern[close - 1] !== ':') {
|
|
109
|
+
// No `:]` closes it: the `[` is a member and the `:` is read next.
|
|
110
|
+
previous = 0x5b;
|
|
111
|
+
members += hex(previous);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const named = CLASSES.get(pattern.slice(name, close - 1));
|
|
115
|
+
if (named === undefined)
|
|
116
|
+
return null;
|
|
117
|
+
members += named;
|
|
118
|
+
previous = null;
|
|
119
|
+
index = close;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
previous = character.charCodeAt(0);
|
|
124
|
+
members += hex(previous);
|
|
125
|
+
}
|
|
126
|
+
index += 1;
|
|
127
|
+
} while (pattern[index] !== ']');
|
|
128
|
+
return { source: `(?!/)[${negated ? '^' : ''}${members}]`, next: index + 1 };
|
|
28
129
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
130
|
+
/** The regex of a wildmatch pattern, or null when it can never match. Its
|
|
131
|
+
* start counts as a segment boundary for `**`, as it does where Git hands
|
|
132
|
+
* wildmatch the pattern past a literal prefix it compared first. */
|
|
133
|
+
function wildSource(pattern) {
|
|
134
|
+
let source = '';
|
|
135
|
+
for (let index = 0; index < pattern.length;) {
|
|
32
136
|
const character = pattern[index];
|
|
33
137
|
if (character === '*') {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
expression += '.*';
|
|
43
|
-
}
|
|
138
|
+
let end = index;
|
|
139
|
+
while (pattern[end] === '*')
|
|
140
|
+
end += 1;
|
|
141
|
+
const bounded = end - index > 1 && (index === 0 || pattern[index - 1] === '/')
|
|
142
|
+
&& (end === pattern.length || pattern[end] === '/' || (pattern[end] === '\\' && pattern[end + 1] === '/'));
|
|
143
|
+
if (bounded && pattern[end] === '/') {
|
|
144
|
+
source += '(?:.*/)?';
|
|
145
|
+
index = end + 1;
|
|
44
146
|
}
|
|
45
147
|
else {
|
|
46
|
-
|
|
148
|
+
source += bounded ? '.*' : '[^/]*';
|
|
149
|
+
index = end;
|
|
47
150
|
}
|
|
48
151
|
}
|
|
49
152
|
else if (character === '?') {
|
|
50
|
-
|
|
153
|
+
source += '[^/]';
|
|
154
|
+
index += 1;
|
|
155
|
+
}
|
|
156
|
+
else if (character === '[') {
|
|
157
|
+
const set = bracket(pattern, index);
|
|
158
|
+
if (set === null)
|
|
159
|
+
return null;
|
|
160
|
+
source += set.source;
|
|
161
|
+
index = set.next;
|
|
162
|
+
}
|
|
163
|
+
else if (character === '\\') {
|
|
164
|
+
if (index + 1 === pattern.length)
|
|
165
|
+
return null;
|
|
166
|
+
source += literal(pattern[index + 1]);
|
|
167
|
+
index += 2;
|
|
51
168
|
}
|
|
52
169
|
else {
|
|
53
|
-
|
|
170
|
+
source += literal(character);
|
|
171
|
+
index += 1;
|
|
54
172
|
}
|
|
55
173
|
}
|
|
56
|
-
return
|
|
174
|
+
return source;
|
|
57
175
|
}
|
|
176
|
+
/** Git's `trim_trailing_spaces`: a trailing run of spaces goes unless a `\`
|
|
177
|
+
* escapes its first one. */
|
|
178
|
+
function trimTrailingSpaces(line) {
|
|
179
|
+
let space = -1;
|
|
180
|
+
for (let index = 0; index < line.length; index += 1) {
|
|
181
|
+
if (line[index] === ' ') {
|
|
182
|
+
if (space === -1)
|
|
183
|
+
space = index;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
if (line[index] === '\\' && (index += 1) === line.length)
|
|
187
|
+
return line;
|
|
188
|
+
space = -1;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return space === -1 ? line : line.slice(0, space);
|
|
192
|
+
}
|
|
193
|
+
/** One line of the file as a rule, or null when it names none that can
|
|
194
|
+
* match. */
|
|
58
195
|
function ignoreRule(line) {
|
|
59
|
-
let value = line.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
let negated = false;
|
|
63
|
-
if (value.startsWith('!')) {
|
|
64
|
-
negated = true;
|
|
196
|
+
let value = trimTrailingSpaces(line.split('\0')[0]);
|
|
197
|
+
const negated = value.startsWith('!');
|
|
198
|
+
if (negated)
|
|
65
199
|
value = value.slice(1);
|
|
66
|
-
|
|
200
|
+
const directoryOnly = value.endsWith('/');
|
|
201
|
+
if (directoryOnly)
|
|
202
|
+
value = value.slice(0, -1);
|
|
67
203
|
if (!value)
|
|
68
204
|
return null;
|
|
69
|
-
const
|
|
70
|
-
if (
|
|
205
|
+
const rule = { negated, directoryOnly };
|
|
206
|
+
if (!value.includes('/')) {
|
|
207
|
+
const source = wildSource(value);
|
|
208
|
+
return source === null ? null : { ...rule, basename: true, source, expression: new RegExp(`^${source}$`, 's'), head: null };
|
|
209
|
+
}
|
|
210
|
+
// Git compares a path rule's literal opening as text, then matches the
|
|
211
|
+
// rest as a pattern of its own.
|
|
212
|
+
if (value.startsWith('/'))
|
|
71
213
|
value = value.slice(1);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (!value)
|
|
214
|
+
const opening = value.search(/[*?[\\]|$/), head = value.slice(0, opening), rest = wildSource(value.slice(opening));
|
|
215
|
+
if (rest === null)
|
|
75
216
|
return null;
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
const prefix = rooted ? '^' : '(?:^|/)';
|
|
79
|
-
// A rooted expression opens with the pattern's text up to its first glob.
|
|
80
|
-
const head = rooted ? value.slice(0, value.search(/[*?]|$/)) : null;
|
|
81
|
-
return { negated, expression: new RegExp(`${prefix}${body}(?:$|/)`), head };
|
|
217
|
+
const source = [...head].map(literal).join('') + rest;
|
|
218
|
+
return { ...rule, basename: false, source, expression: new RegExp(`^${source}$`, 's'), head };
|
|
82
219
|
}
|
|
83
220
|
/**
|
|
84
|
-
* Compile the root `.amalgmignore` for a user ground.
|
|
85
|
-
*
|
|
86
|
-
* excluded
|
|
87
|
-
*
|
|
221
|
+
* Compile the root `.amalgmignore` for a user ground. As in Git, the last
|
|
222
|
+
* rule that matches a path decides it, `!` negates, and a path beneath an
|
|
223
|
+
* excluded folder is excluded whatever later rules say. Only local-only
|
|
224
|
+
* folders are structurally excluded here, and no rule can re-include them; a
|
|
225
|
+
* filename never proves that it is machine-local state. The policy file
|
|
226
|
+
* itself always travels.
|
|
88
227
|
*/
|
|
89
228
|
export function createUserGroundEnrollmentPolicy(ignoreText = '') {
|
|
90
|
-
const
|
|
229
|
+
const text = byteString(String(ignoreText));
|
|
230
|
+
const rules = (text.startsWith('\xef\xbb\xbf') ? text.slice(3) : text).split('\n')
|
|
231
|
+
.map(line => line && !line.startsWith('#') ? ignoreRule(line.replace(/\r$/, '')) : null)
|
|
91
232
|
.filter((rule) => rule !== null);
|
|
92
|
-
const
|
|
233
|
+
const excluding = rules.filter(rule => !rule.negated);
|
|
234
|
+
// Only an excluding rule can exclude, at the path or at a folder above it,
|
|
235
|
+
// so a path none of them could match there is included without a walk.
|
|
236
|
+
const candidate = new RegExp([
|
|
237
|
+
...excluding.filter(rule => !rule.basename).map(rule => `^(?:${rule.source})(?=/|$)`),
|
|
238
|
+
...excluding.filter(rule => rule.basename).map(rule => `(?:^|/)(?:${rule.source})(?=/|$)`),
|
|
239
|
+
].join('|') || '(?!)', 's');
|
|
240
|
+
const excludedHere = (path, directory) => {
|
|
241
|
+
const name = path.slice(path.lastIndexOf('/') + 1);
|
|
242
|
+
for (let index = rules.length - 1; index >= 0; index -= 1) {
|
|
243
|
+
const rule = rules[index];
|
|
244
|
+
if (rule.directoryOnly && !directory)
|
|
245
|
+
continue;
|
|
246
|
+
if (rule.expression.test(rule.basename ? name : path))
|
|
247
|
+
return !rule.negated;
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
};
|
|
251
|
+
const includes = (input, directory) => {
|
|
93
252
|
const relPath = normalizedRelativePath(input);
|
|
94
253
|
if (!relPath || isLocalOnlyPath(relPath))
|
|
95
254
|
return false;
|
|
96
255
|
if (relPath === USER_IGNORE_FILE_NAME)
|
|
97
256
|
return true;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
257
|
+
const path = byteString(relPath);
|
|
258
|
+
if (!candidate.test(path))
|
|
259
|
+
return true;
|
|
260
|
+
for (let slash = path.indexOf('/'); slash !== -1; slash = path.indexOf('/', slash + 1)) {
|
|
261
|
+
if (excludedHere(path.slice(0, slash), true))
|
|
262
|
+
return false;
|
|
102
263
|
}
|
|
103
|
-
return !
|
|
264
|
+
return !excludedHere(path, directory);
|
|
104
265
|
};
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
//
|
|
266
|
+
// A path beneath the directory begins with the directory and its
|
|
267
|
+
// separator, and one a rooted rule matches begins with that rule's head, so
|
|
268
|
+
// both are prefixes of one path. Local-only folders are structural, never
|
|
269
|
+
// ground.
|
|
109
270
|
const includesAllBeneath = (directory) => {
|
|
110
|
-
const base = normalizedRelativePath(directory);
|
|
271
|
+
const base = byteString(normalizedRelativePath(directory));
|
|
111
272
|
const beneath = base ? `${base}/` : '';
|
|
112
|
-
return
|
|
113
|
-
|| (rule.head !== null && !rule.head.startsWith(beneath) && !beneath.startsWith(rule.head)));
|
|
273
|
+
return excluding.every(rule => rule.head !== null && !rule.head.startsWith(beneath) && !beneath.startsWith(rule.head));
|
|
114
274
|
};
|
|
115
275
|
return Object.assign(includes, { includesAllBeneath });
|
|
116
276
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrollment.js","sourceRoot":"","sources":["../../src/detection/enrollment.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"enrollment.js","sourceRoot":"","sources":["../../src/detection/enrollment.ts"],"names":[],"mappings":"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"}
|
package/dist/files/commands.d.ts
CHANGED
|
@@ -10,11 +10,14 @@ export interface FilesRegisterPorts {
|
|
|
10
10
|
/** Resolve and prove an external directory without enrolling its contents. */
|
|
11
11
|
inspectExternalWorkspace(path: string): Promise<ExternalWorkspaceInspection>;
|
|
12
12
|
readonly randomUuid: () => string;
|
|
13
|
-
/** The sole effect of register: render the reference and local binding
|
|
13
|
+
/** The sole effect of register: render the reference and local binding,
|
|
14
|
+
* after placing `starterPolicy` as the root's `.amalgmignore` when given and
|
|
15
|
+
* nothing stands at that name, so its first observation already reads it. */
|
|
14
16
|
declareWorkspaceReference(input: {
|
|
15
17
|
readonly workspaceId: string;
|
|
16
18
|
readonly workspaceName: string;
|
|
17
19
|
readonly absolutePath: string;
|
|
20
|
+
readonly starterPolicy: string | null;
|
|
18
21
|
}): Promise<{
|
|
19
22
|
readonly created: boolean;
|
|
20
23
|
readonly referenceName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/files/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/files/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/files/commands.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { UUID_PATTERN, containedRecords, materializableRecords, sameRecords, snapshotFromRecords, travelingRecords, } from '../entities/index.js';
|
|
2
|
+
import { DEFAULT_AMALGM_IGNORE } from '../detection/enrollment.js';
|
|
2
3
|
function uuid(value, label) {
|
|
3
4
|
const normalized = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
4
5
|
if (!UUID_PATTERN.test(normalized))
|
|
@@ -24,10 +25,13 @@ export async function registerFilesWorkspace(path, ports) {
|
|
|
24
25
|
const workspaceId = inspected.workspaceId === null
|
|
25
26
|
? uuid(ports.randomUuid(), 'generated workspace id')
|
|
26
27
|
: uuid(inspected.workspaceId, 'existing workspace id');
|
|
28
|
+
// Ground starts with the defaults once, when it is first given identity;
|
|
29
|
+
// what the user does with the file after that is theirs.
|
|
27
30
|
const declared = await ports.declareWorkspaceReference({
|
|
28
31
|
workspaceId,
|
|
29
32
|
workspaceName,
|
|
30
33
|
absolutePath,
|
|
34
|
+
starterPolicy: inspected.workspaceId === null ? DEFAULT_AMALGM_IGNORE : null,
|
|
31
35
|
});
|
|
32
36
|
return {
|
|
33
37
|
workspaceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/files/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/files/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ export declare class PublicationScopeExceeded extends Error {
|
|
|
51
51
|
export interface PublicationInput<T extends PublicationNode> {
|
|
52
52
|
readonly before: readonly T[];
|
|
53
53
|
readonly observed: readonly T[];
|
|
54
|
-
readonly includes: (relativePath: string, rootId: string) => boolean;
|
|
54
|
+
readonly includes: (relativePath: string, rootId: string, directory: boolean) => boolean;
|
|
55
55
|
/** A closed scope. Targets are the identities whose results this
|
|
56
56
|
* selection decides, of any type: a before target no observed target
|
|
57
57
|
* names is a proved removal, an observed one no before target names is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publication.d.ts","sourceRoot":"","sources":["../../src/records/publication.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAwD,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7F,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,eAAe;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,eAAe;IAC7D,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;CAClD;AAMD,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CAC/C;AAED;;sCAEsC;AACtC,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAI3F;AAED;;;;;;;;;mDASmD;AACnD,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,EACvF,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,GAAG,OAAO,CAKzD;AAED;;qEAEqE;AACrE,qBAAa,wBAAyB,SAAQ,KAAK;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE;gBAA5B,SAAS,EAAE,SAAS,MAAM,EAAE;CAGlD;
|
|
1
|
+
{"version":3,"file":"publication.d.ts","sourceRoot":"","sources":["../../src/records/publication.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAwD,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7F,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,eAAe;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,eAAe;IAC7D,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;CAClD;AAMD,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CAC/C;AAED;;sCAEsC;AACtC,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAI3F;AAED;;;;;;;;;mDASmD;AACnD,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,EACvF,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,GAAG,OAAO,CAKzD;AAED;;qEAEqE;AACrE,qBAAa,wBAAyB,SAAQ,KAAK;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE;gBAA5B,SAAS,EAAE,SAAS,MAAM,EAAE;CAGlD;AAmJD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,eAAe;IACzD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;IACzF;;;;;;;;;;;;;2DAauD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;CACvC;AAED;;;;;uEAKuE;AACvE,wBAAiB,sBAAsB,CAAC,CAAC,SAAS,eAAe,EAC/D,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACzB,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CA+KhC;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAEhH"}
|
|
@@ -173,7 +173,7 @@ function* addresses(rows) {
|
|
|
173
173
|
result.set(current.uuid, {
|
|
174
174
|
rootId: inherited?.rootId ?? current.uuid,
|
|
175
175
|
path: inherited === null ? '' : inherited.path ? `${inherited.path}/${localName}` : localName,
|
|
176
|
-
policyPath: current.relativePath,
|
|
176
|
+
policyPath: current.relativePath, directory: CONTAINERS.has(current.type),
|
|
177
177
|
ownerId: parent?.type === 'repo.git' ? parent.uuid : inherited?.ownerId ?? null,
|
|
178
178
|
localName, siblings: projection?.dependencies.get(current.uuid) ?? new Set(),
|
|
179
179
|
});
|
|
@@ -265,11 +265,12 @@ export function* selectPublicationSteps(input) {
|
|
|
265
265
|
const held = new Map();
|
|
266
266
|
// Policy answers for an address, so an identity both inventories place at
|
|
267
267
|
// one policy address under one root asks it once.
|
|
268
|
-
const admitted = (id, address) => !address || address.rootId === id || input.includes(address.policyPath, address.rootId);
|
|
268
|
+
const admitted = (id, address) => !address || address.rootId === id || input.includes(address.policyPath, address.rootId, address.directory);
|
|
269
269
|
yield* eachStep(ids, id => {
|
|
270
270
|
const prior = priorAddresses.get(id), current = observedAddresses.get(id);
|
|
271
271
|
const asked = prior !== undefined && current !== undefined
|
|
272
|
-
&& prior.policyPath === current.policyPath && prior.rootId === current.rootId
|
|
272
|
+
&& prior.policyPath === current.policyPath && prior.rootId === current.rootId
|
|
273
|
+
&& prior.directory === current.directory;
|
|
273
274
|
if (!admitted(id, prior) || (!asked && !admitted(id, current)))
|
|
274
275
|
held.set(id, 'ignored');
|
|
275
276
|
});
|