nawabari 0.1.0 → 0.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/README.md +213 -5
- package/dist/cli.js +320 -6
- package/dist/cli.js.map +1 -1
- package/dist/contract.d.ts +9 -0
- package/dist/contract.js +172 -0
- package/dist/contract.js.map +1 -0
- package/dist/domain/doctor.d.ts +1 -1
- package/dist/domain/doctor.js +99 -90
- package/dist/domain/doctor.js.map +1 -1
- package/dist/domain/errors.d.ts +1 -1
- package/dist/domain/errors.js +5 -1
- package/dist/domain/errors.js.map +1 -1
- package/dist/domain/session-backend.d.ts +11 -1
- package/dist/domain/session-backend.js +247 -3
- package/dist/domain/session-backend.js.map +1 -1
- package/dist/domain/session.d.ts +131 -0
- package/dist/domain/session.js +6 -0
- package/dist/domain/session.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/git.d.ts +40 -0
- package/dist/git.js +415 -30
- package/dist/git.js.map +1 -1
- package/dist/operation-authorization.d.ts +73 -0
- package/dist/operation-authorization.js +42 -0
- package/dist/operation-authorization.js.map +1 -0
- package/dist/presentation.js +49 -19
- package/dist/presentation.js.map +1 -1
- package/dist/resource-claims.d.ts +65 -0
- package/dist/resource-claims.js +398 -0
- package/dist/resource-claims.js.map +1 -0
- package/dist/session-registry.d.ts +215 -1
- package/dist/session-registry.js +1749 -185
- package/dist/session-registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { SessionRegistryError } from "./errors.js";
|
|
5
|
+
export const RESOURCE_CLAIM_SCHEMA_VERSION = 1;
|
|
6
|
+
export const RESOURCE_CLAIM_MODES = ["read", "write", "exclusive-write"];
|
|
7
|
+
/**
|
|
8
|
+
* The resource authority intentionally uses one conservative matrix:
|
|
9
|
+
* read/read overlap is shared; every other overlapping pair conflicts.
|
|
10
|
+
* A non-overlapping pair is always compatible, regardless of mode.
|
|
11
|
+
*/
|
|
12
|
+
export const RESOURCE_CLAIM_COMPATIBILITY_MATRIX = Object.freeze({
|
|
13
|
+
read: Object.freeze({ read: "compatible", write: "conflict", "exclusive-write": "conflict" }),
|
|
14
|
+
write: Object.freeze({ read: "conflict", write: "conflict", "exclusive-write": "conflict" }),
|
|
15
|
+
"exclusive-write": Object.freeze({ read: "conflict", write: "conflict", "exclusive-write": "conflict" }),
|
|
16
|
+
});
|
|
17
|
+
const CLAIM_ID_PREFIX = "claim-";
|
|
18
|
+
const MAX_SYMLINK_SCAN_ENTRIES = 20_000;
|
|
19
|
+
const WINDOWS_ABSOLUTE_PATH = /^[A-Za-z]:[\\/]/u;
|
|
20
|
+
const WINDOWS_DRIVE_RELATIVE_PATH = /^[A-Za-z]:/u;
|
|
21
|
+
const UNSUPPORTED_GLOB_SYNTAX = /[\[\]{}()]/u;
|
|
22
|
+
const WILDCARD_CHARACTERS = /[*?]/u;
|
|
23
|
+
const ISO_TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u;
|
|
24
|
+
export function isResourceClaimMode(value) {
|
|
25
|
+
return typeof value === "string" && RESOURCE_CLAIM_MODES.includes(value);
|
|
26
|
+
}
|
|
27
|
+
export function canonicalClaimId(sessionId, resource, mode) {
|
|
28
|
+
const digest = createHash("sha256")
|
|
29
|
+
.update(sessionId)
|
|
30
|
+
.update("\u0000")
|
|
31
|
+
.update(mode)
|
|
32
|
+
.update("\u0000")
|
|
33
|
+
.update(resource)
|
|
34
|
+
.digest("hex");
|
|
35
|
+
return `${CLAIM_ID_PREFIX}${digest}`;
|
|
36
|
+
}
|
|
37
|
+
export function canonicalizeClaimInput(input, owner) {
|
|
38
|
+
if (!isRecord(input)) {
|
|
39
|
+
throw claimError("INVALID_CLAIM", "A resource claim must be an object");
|
|
40
|
+
}
|
|
41
|
+
if (!isResourceClaimMode(input.mode)) {
|
|
42
|
+
throw claimError("INVALID_CLAIM", "Resource claim mode is unsupported", {
|
|
43
|
+
mode: stringifyDetail(input.mode),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const repositoryId = input.repositoryId ?? input.repository_id;
|
|
47
|
+
if (repositoryId !== undefined && repositoryId !== owner.repositoryId) {
|
|
48
|
+
throw claimError("CLAIM_REPOSITORY_MISMATCH", "Resource claim repository does not match its session", {
|
|
49
|
+
expectedRepositoryId: owner.repositoryId,
|
|
50
|
+
actualRepositoryId: repositoryId,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const sessionId = input.sessionId ?? input.session_id;
|
|
54
|
+
if (sessionId !== undefined && sessionId !== owner.sessionId) {
|
|
55
|
+
throw claimError("CLAIM_SESSION_MISMATCH", "Resource claim session does not match its owner", {
|
|
56
|
+
expectedSessionId: owner.sessionId,
|
|
57
|
+
actualSessionId: sessionId,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const worktreePath = input.worktreePath ?? input.worktree_path;
|
|
61
|
+
if (worktreePath !== undefined && typeof worktreePath !== "string") {
|
|
62
|
+
throw claimError("CLAIM_SESSION_MISMATCH", "Resource claim worktree must be a string", {
|
|
63
|
+
expectedWorktreePath: owner.worktreePath,
|
|
64
|
+
actualWorktreePath: stringifyDetail(worktreePath),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (worktreePath !== undefined && path.resolve(worktreePath) !== owner.worktreePath) {
|
|
68
|
+
throw claimError("CLAIM_SESSION_MISMATCH", "Resource claim worktree does not match its session", {
|
|
69
|
+
expectedWorktreePath: owner.worktreePath,
|
|
70
|
+
actualWorktreePath: worktreePath,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
resource: canonicalizeClaimResource(input.resource, owner.worktreePath),
|
|
75
|
+
mode: input.mode,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Canonicalize a claim lexically and against the physical worktree. The
|
|
80
|
+
* operation is deliberately conservative: it rejects syntax that cannot be
|
|
81
|
+
* represented unambiguously instead of guessing what a caller meant.
|
|
82
|
+
*/
|
|
83
|
+
export function canonicalizeClaimResource(resource, worktreePath) {
|
|
84
|
+
validateResourceString(resource);
|
|
85
|
+
const canonical = canonicalResourceSyntax(resource);
|
|
86
|
+
const root = canonicalWorktreeRoot(worktreePath);
|
|
87
|
+
const segments = canonical.split("/");
|
|
88
|
+
const wildcardIndex = segments.findIndex((segment) => WILDCARD_CHARACTERS.test(segment));
|
|
89
|
+
const staticSegments = wildcardIndex === -1 ? segments : segments.slice(0, wildcardIndex);
|
|
90
|
+
const staticPath = walkStaticPath(root, staticSegments, canonical);
|
|
91
|
+
if (wildcardIndex !== -1) {
|
|
92
|
+
// A glob can select a symlink that does not exist yet. Inspect all current
|
|
93
|
+
// candidates below the first wildcard and reject the whole claim when
|
|
94
|
+
// physical ambiguity is observable. Future callers must still revalidate.
|
|
95
|
+
assertNoSymlinkCandidates(staticPath, segments.slice(wildcardIndex).includes("**"), canonical);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const candidate = path.resolve(root, ...segments);
|
|
99
|
+
assertWithinRoot(root, candidate, canonical);
|
|
100
|
+
const entry = lstatIfPresent(candidate);
|
|
101
|
+
if (entry?.isSymbolicLink()) {
|
|
102
|
+
throw claimError("CLAIM_SYMLINK_ESCAPE", "Resource path is a symbolic link", { resource: canonical });
|
|
103
|
+
}
|
|
104
|
+
if (entry !== undefined) {
|
|
105
|
+
try {
|
|
106
|
+
assertWithinRoot(root, fs.realpathSync.native(candidate), canonical);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
if (error instanceof SessionRegistryError)
|
|
110
|
+
throw error;
|
|
111
|
+
throw claimError("CLAIM_SYMLINK_ESCAPE", "Resource path escapes its owning worktree", {
|
|
112
|
+
resource: canonical,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return canonical;
|
|
118
|
+
}
|
|
119
|
+
/** Validate a resource already persisted as canonical without requiring its worktree to exist. */
|
|
120
|
+
export function assertCanonicalClaimResource(resource) {
|
|
121
|
+
validateResourceString(resource);
|
|
122
|
+
if (canonicalResourceSyntax(resource) !== resource) {
|
|
123
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Persisted resource is not canonical", { resource });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export function createResourceClaim(input, owner, timestamp) {
|
|
127
|
+
if (!isResourceClaimMode(input.mode)) {
|
|
128
|
+
throw claimError("INVALID_CLAIM", "Resource claim mode is unsupported", {
|
|
129
|
+
mode: stringifyDetail(input.mode),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
assertCanonicalClaimResource(input.resource);
|
|
133
|
+
if (!isTimestamp(timestamp)) {
|
|
134
|
+
throw claimError("INVALID_CLAIM", "Claim timestamp is not canonical", { timestamp });
|
|
135
|
+
}
|
|
136
|
+
return Object.freeze({
|
|
137
|
+
schemaVersion: RESOURCE_CLAIM_SCHEMA_VERSION,
|
|
138
|
+
claimId: canonicalClaimId(owner.sessionId, input.resource, input.mode),
|
|
139
|
+
sessionId: owner.sessionId,
|
|
140
|
+
repositoryId: owner.repositoryId,
|
|
141
|
+
worktreePath: owner.worktreePath,
|
|
142
|
+
resource: input.resource,
|
|
143
|
+
mode: input.mode,
|
|
144
|
+
createdAt: timestamp,
|
|
145
|
+
updatedAt: timestamp,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
export function cloneResourceClaim(claim) {
|
|
149
|
+
return Object.freeze({ ...claim });
|
|
150
|
+
}
|
|
151
|
+
export function claimsOverlap(left, right) {
|
|
152
|
+
return globPatternsOverlap(left.resource, right.resource);
|
|
153
|
+
}
|
|
154
|
+
/** Match a canonical concrete repository resource against a persisted claim. */
|
|
155
|
+
export function resourceMatchesClaim(claim, resource) {
|
|
156
|
+
return globPatternsOverlap(claim.resource, resource);
|
|
157
|
+
}
|
|
158
|
+
/** Apply the existing claim compatibility matrix to one concrete resource. */
|
|
159
|
+
export function resourceClaimConflictsWithAccess(claim, resource, requiredMode) {
|
|
160
|
+
return (resourceMatchesClaim(claim, resource) &&
|
|
161
|
+
RESOURCE_CLAIM_COMPATIBILITY_MATRIX[claim.mode][requiredMode] === "conflict");
|
|
162
|
+
}
|
|
163
|
+
export function claimsConflict(left, right) {
|
|
164
|
+
return claimsOverlap(left, right) && RESOURCE_CLAIM_COMPATIBILITY_MATRIX[left.mode][right.mode] === "conflict";
|
|
165
|
+
}
|
|
166
|
+
export function claimSortKey(claim) {
|
|
167
|
+
return `${claim.resource}\u0000${claim.mode}\u0000${claim.sessionId}\u0000${claim.claimId}`;
|
|
168
|
+
}
|
|
169
|
+
export function sortResourceClaims(claims) {
|
|
170
|
+
return [...claims].sort((left, right) => compareCodePointStrings(claimSortKey(left), claimSortKey(right)));
|
|
171
|
+
}
|
|
172
|
+
export function compareCodePointStrings(left, right) {
|
|
173
|
+
if (left < right)
|
|
174
|
+
return -1;
|
|
175
|
+
if (left > right)
|
|
176
|
+
return 1;
|
|
177
|
+
return 0;
|
|
178
|
+
}
|
|
179
|
+
export function claimError(code, message, details = {}) {
|
|
180
|
+
return new SessionRegistryError(code, message, details);
|
|
181
|
+
}
|
|
182
|
+
function validateResourceString(resource) {
|
|
183
|
+
if (typeof resource !== "string" || resource.length === 0) {
|
|
184
|
+
throw claimError("INVALID_CLAIM_RESOURCE", "Claim resource must be a non-empty string");
|
|
185
|
+
}
|
|
186
|
+
if (resource.includes("\u0000")) {
|
|
187
|
+
throw claimError("INVALID_CLAIM_RESOURCE", "Claim resource contains a NUL byte");
|
|
188
|
+
}
|
|
189
|
+
if (resource !== resource.normalize("NFC")) {
|
|
190
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Claim resource is not Unicode-normalized", { resource });
|
|
191
|
+
}
|
|
192
|
+
if (resource.includes("\\")) {
|
|
193
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Backslash separators and escapes are unsupported", { resource });
|
|
194
|
+
}
|
|
195
|
+
if (resource.startsWith("/") || WINDOWS_ABSOLUTE_PATH.test(resource) || WINDOWS_DRIVE_RELATIVE_PATH.test(resource)) {
|
|
196
|
+
throw claimError("CLAIM_PATH_TRAVERSAL", "Claim resource must be repository-relative", { resource });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function canonicalResourceSyntax(resource) {
|
|
200
|
+
const segments = resource.split("/");
|
|
201
|
+
if (segments.some((segment) => segment === "..")) {
|
|
202
|
+
throw claimError("CLAIM_PATH_TRAVERSAL", "Claim resource contains a parent traversal segment", { resource });
|
|
203
|
+
}
|
|
204
|
+
if (segments.length === 0 || segments.some((segment) => segment.length === 0 || segment === ".")) {
|
|
205
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Claim resource contains ambiguous path separators", { resource });
|
|
206
|
+
}
|
|
207
|
+
if (segments.some((segment) => UNSUPPORTED_GLOB_SYNTAX.test(segment))) {
|
|
208
|
+
throw claimError("UNSUPPORTED_CLAIM_GLOB", "Claim resource uses unsupported glob syntax", { resource });
|
|
209
|
+
}
|
|
210
|
+
for (const segment of segments) {
|
|
211
|
+
if (segment.includes("**") && segment !== "**") {
|
|
212
|
+
throw claimError("UNSUPPORTED_CLAIM_GLOB", "Double-star must occupy a complete path segment", { resource });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (segments.length === 1 && segments[0] === "**")
|
|
216
|
+
return "**";
|
|
217
|
+
return segments.join("/");
|
|
218
|
+
}
|
|
219
|
+
function canonicalWorktreeRoot(worktreePath) {
|
|
220
|
+
const lexical = path.resolve(worktreePath);
|
|
221
|
+
const entry = lstatIfPresent(lexical);
|
|
222
|
+
if (entry?.isSymbolicLink()) {
|
|
223
|
+
throw claimError("CLAIM_SYMLINK_ESCAPE", "The owning session worktree is a symbolic link", {
|
|
224
|
+
worktree: lexical,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
if (entry === undefined || !entry.isDirectory()) {
|
|
228
|
+
throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", "The owning session worktree is missing or not a directory", { worktree: lexical });
|
|
229
|
+
}
|
|
230
|
+
let realpath;
|
|
231
|
+
try {
|
|
232
|
+
realpath = fs.realpathSync.native(lexical);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", "The owning session worktree cannot be resolved", { worktree: lexical }, error);
|
|
236
|
+
}
|
|
237
|
+
if (path.resolve(realpath) !== lexical) {
|
|
238
|
+
throw claimError("CLAIM_SYMLINK_ESCAPE", "The owning worktree has a symbolic-link alias", {
|
|
239
|
+
worktree: lexical,
|
|
240
|
+
realpath,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
return realpath;
|
|
244
|
+
}
|
|
245
|
+
function walkStaticPath(root, segments, resource) {
|
|
246
|
+
let current = root;
|
|
247
|
+
for (let index = 0; index < segments.length; index += 1) {
|
|
248
|
+
const segment = segments[index];
|
|
249
|
+
current = path.join(current, segment);
|
|
250
|
+
assertWithinRoot(root, current, resource);
|
|
251
|
+
const entry = lstatIfPresent(current);
|
|
252
|
+
if (entry?.isSymbolicLink()) {
|
|
253
|
+
throw claimError("CLAIM_SYMLINK_ESCAPE", "Claim path contains a symbolic link", { resource });
|
|
254
|
+
}
|
|
255
|
+
if (entry !== undefined && !entry.isDirectory() && index !== segments.length - 1) {
|
|
256
|
+
throw claimError("INVALID_CLAIM_RESOURCE", "Claim path traverses a non-directory", { resource });
|
|
257
|
+
}
|
|
258
|
+
if (entry === undefined)
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
return current;
|
|
262
|
+
}
|
|
263
|
+
function assertNoSymlinkCandidates(root, recursive, resource) {
|
|
264
|
+
if (!fs.existsSync(root))
|
|
265
|
+
return;
|
|
266
|
+
let inspected = 0;
|
|
267
|
+
const visit = (directory, deep) => {
|
|
268
|
+
let entries;
|
|
269
|
+
try {
|
|
270
|
+
entries = fs.readdirSync(directory, { withFileTypes: true });
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Could not inspect glob candidates", { resource });
|
|
274
|
+
}
|
|
275
|
+
for (const entry of entries) {
|
|
276
|
+
inspected += 1;
|
|
277
|
+
if (inspected > MAX_SYMLINK_SCAN_ENTRIES) {
|
|
278
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Glob candidate set is too large to validate safely", { resource });
|
|
279
|
+
}
|
|
280
|
+
if (entry.isSymbolicLink()) {
|
|
281
|
+
throw claimError("CLAIM_SYMLINK_ESCAPE", "Glob may select a symbolic link", { resource });
|
|
282
|
+
}
|
|
283
|
+
if (deep && entry.isDirectory())
|
|
284
|
+
visit(path.join(directory, entry.name), true);
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
visit(root, recursive);
|
|
288
|
+
}
|
|
289
|
+
function assertWithinRoot(root, candidate, resource) {
|
|
290
|
+
const relative = path.relative(root, candidate);
|
|
291
|
+
if (relative === "" ||
|
|
292
|
+
(relative !== "" && (relative.startsWith(`..${path.sep}`) || relative === ".." || path.isAbsolute(relative)))) {
|
|
293
|
+
throw claimError("CLAIM_PATH_TRAVERSAL", "Claim resource escapes its owning worktree", { resource });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
function lstatIfPresent(candidate) {
|
|
297
|
+
try {
|
|
298
|
+
return fs.lstatSync(candidate);
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
if (isNodeError(error) && error.code === "ENOENT")
|
|
302
|
+
return undefined;
|
|
303
|
+
throw claimError("CLAIM_AMBIGUOUS_PATH", "Could not inspect claim path", { path: candidate });
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function globPatternsOverlap(left, right) {
|
|
307
|
+
const leftSegments = left.split("/");
|
|
308
|
+
const rightSegments = right.split("/");
|
|
309
|
+
const queue = [[0, 0, false]];
|
|
310
|
+
const visited = new Set();
|
|
311
|
+
while (queue.length > 0) {
|
|
312
|
+
const [leftIndex, rightIndex, consumed] = queue.shift();
|
|
313
|
+
const key = `${leftIndex}:${rightIndex}:${consumed ? 1 : 0}`;
|
|
314
|
+
if (visited.has(key))
|
|
315
|
+
continue;
|
|
316
|
+
visited.add(key);
|
|
317
|
+
if (leftIndex === leftSegments.length && rightIndex === rightSegments.length) {
|
|
318
|
+
if (consumed)
|
|
319
|
+
return true;
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
const leftGlobStar = leftSegments[leftIndex] === "**";
|
|
323
|
+
const rightGlobStar = rightSegments[rightIndex] === "**";
|
|
324
|
+
if (leftGlobStar) {
|
|
325
|
+
queue.push([leftIndex + 1, rightIndex, consumed]);
|
|
326
|
+
queue.push([leftIndex, rightIndex, true]);
|
|
327
|
+
}
|
|
328
|
+
if (rightGlobStar) {
|
|
329
|
+
queue.push([leftIndex, rightIndex + 1, consumed]);
|
|
330
|
+
queue.push([leftIndex, rightIndex, true]);
|
|
331
|
+
}
|
|
332
|
+
if (leftGlobStar && rightGlobStar) {
|
|
333
|
+
queue.push([leftIndex + 1, rightIndex + 1, consumed]);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (leftIndex >= leftSegments.length || rightIndex >= rightSegments.length)
|
|
337
|
+
continue;
|
|
338
|
+
if (rightGlobStar) {
|
|
339
|
+
queue.push([leftIndex + 1, rightIndex, true]);
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
if (leftGlobStar) {
|
|
343
|
+
queue.push([leftIndex, rightIndex + 1, true]);
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
if (segmentPatternsOverlap(leftSegments[leftIndex], rightSegments[rightIndex])) {
|
|
347
|
+
queue.push([leftIndex + 1, rightIndex + 1, true]);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
function segmentPatternsOverlap(left, right) {
|
|
353
|
+
const queue = [[0, 0, false]];
|
|
354
|
+
const visited = new Set();
|
|
355
|
+
while (queue.length > 0) {
|
|
356
|
+
const [leftIndex, rightIndex, consumed] = queue.shift();
|
|
357
|
+
const key = `${leftIndex}:${rightIndex}:${consumed ? 1 : 0}`;
|
|
358
|
+
if (visited.has(key))
|
|
359
|
+
continue;
|
|
360
|
+
visited.add(key);
|
|
361
|
+
if (leftIndex === left.length && rightIndex === right.length) {
|
|
362
|
+
if (consumed)
|
|
363
|
+
return true;
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
const leftChar = left[leftIndex];
|
|
367
|
+
const rightChar = right[rightIndex];
|
|
368
|
+
if (leftChar === "*")
|
|
369
|
+
queue.push([leftIndex + 1, rightIndex, consumed]);
|
|
370
|
+
if (rightChar === "*")
|
|
371
|
+
queue.push([leftIndex, rightIndex + 1, consumed]);
|
|
372
|
+
if (leftChar === "*" && rightIndex < right.length)
|
|
373
|
+
queue.push([leftIndex, rightIndex + 1, true]);
|
|
374
|
+
if (rightChar === "*" && leftIndex < left.length)
|
|
375
|
+
queue.push([leftIndex + 1, rightIndex, true]);
|
|
376
|
+
if (leftIndex < left.length && rightIndex < right.length && leftChar !== "*" && rightChar !== "*") {
|
|
377
|
+
if (leftChar === "?" || rightChar === "?" || leftChar === rightChar) {
|
|
378
|
+
queue.push([leftIndex + 1, rightIndex + 1, true]);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
function isTimestamp(value) {
|
|
385
|
+
return (ISO_TIMESTAMP_PATTERN.test(value) && !Number.isNaN(Date.parse(value)) && new Date(value).toISOString() === value);
|
|
386
|
+
}
|
|
387
|
+
function isRecord(value) {
|
|
388
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
389
|
+
}
|
|
390
|
+
function isNodeError(error) {
|
|
391
|
+
return error instanceof Error && "code" in error && typeof error.code === "string";
|
|
392
|
+
}
|
|
393
|
+
function stringifyDetail(value) {
|
|
394
|
+
return typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
395
|
+
? String(value)
|
|
396
|
+
: "<invalid>";
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=resource-claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-claims.js","sourceRoot":"","sources":["../src/resource-claims.ts"],"names":[],"mappings":"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"}
|