@romanilyin/canonicalpath 2026.5.18-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE.md +331 -0
  2. package/LICENSE.ru.md +331 -0
  3. package/NOTICE.md +45 -0
  4. package/README.md +10 -0
  5. package/dist/canonicalfs/errors.d.ts +8 -0
  6. package/dist/canonicalfs/errors.d.ts.map +1 -0
  7. package/dist/canonicalfs/errors.js +19 -0
  8. package/dist/canonicalfs/errors.js.map +1 -0
  9. package/dist/canonicalfs/http.d.ts +29 -0
  10. package/dist/canonicalfs/http.d.ts.map +1 -0
  11. package/dist/canonicalfs/http.js +107 -0
  12. package/dist/canonicalfs/http.js.map +1 -0
  13. package/dist/canonicalfs/index.d.ts +8 -0
  14. package/dist/canonicalfs/index.d.ts.map +1 -0
  15. package/dist/canonicalfs/index.js +8 -0
  16. package/dist/canonicalfs/index.js.map +1 -0
  17. package/dist/canonicalfs/limitations.d.ts +2 -0
  18. package/dist/canonicalfs/limitations.d.ts.map +1 -0
  19. package/dist/canonicalfs/limitations.js +2 -0
  20. package/dist/canonicalfs/limitations.js.map +1 -0
  21. package/dist/canonicalfs/root.d.ts +17 -0
  22. package/dist/canonicalfs/root.d.ts.map +1 -0
  23. package/dist/canonicalfs/root.js +51 -0
  24. package/dist/canonicalfs/root.js.map +1 -0
  25. package/dist/canonicalfs/rpc.d.ts +15 -0
  26. package/dist/canonicalfs/rpc.d.ts.map +1 -0
  27. package/dist/canonicalfs/rpc.js +31 -0
  28. package/dist/canonicalfs/rpc.js.map +1 -0
  29. package/dist/canonicalfs/types.d.ts +25 -0
  30. package/dist/canonicalfs/types.d.ts.map +1 -0
  31. package/dist/canonicalfs/types.js +2 -0
  32. package/dist/canonicalfs/types.js.map +1 -0
  33. package/dist/canonicalfs/validate.d.ts +3 -0
  34. package/dist/canonicalfs/validate.d.ts.map +1 -0
  35. package/dist/canonicalfs/validate.js +36 -0
  36. package/dist/canonicalfs/validate.js.map +1 -0
  37. package/dist/canonicalpath/equal.d.ts +3 -0
  38. package/dist/canonicalpath/equal.d.ts.map +1 -0
  39. package/dist/canonicalpath/equal.js +5 -0
  40. package/dist/canonicalpath/equal.js.map +1 -0
  41. package/dist/canonicalpath/errors.d.ts +8 -0
  42. package/dist/canonicalpath/errors.d.ts.map +1 -0
  43. package/dist/canonicalpath/errors.js +19 -0
  44. package/dist/canonicalpath/errors.js.map +1 -0
  45. package/dist/canonicalpath/index.d.ts +11 -0
  46. package/dist/canonicalpath/index.d.ts.map +1 -0
  47. package/dist/canonicalpath/index.js +11 -0
  48. package/dist/canonicalpath/index.js.map +1 -0
  49. package/dist/canonicalpath/internal.d.ts +22 -0
  50. package/dist/canonicalpath/internal.d.ts.map +1 -0
  51. package/dist/canonicalpath/internal.js +135 -0
  52. package/dist/canonicalpath/internal.js.map +1 -0
  53. package/dist/canonicalpath/normalize.d.ts +3 -0
  54. package/dist/canonicalpath/normalize.d.ts.map +1 -0
  55. package/dist/canonicalpath/normalize.js +56 -0
  56. package/dist/canonicalpath/normalize.js.map +1 -0
  57. package/dist/canonicalpath/posix.d.ts +3 -0
  58. package/dist/canonicalpath/posix.d.ts.map +1 -0
  59. package/dist/canonicalpath/posix.js +13 -0
  60. package/dist/canonicalpath/posix.js.map +1 -0
  61. package/dist/canonicalpath/relative.d.ts +5 -0
  62. package/dist/canonicalpath/relative.d.ts.map +1 -0
  63. package/dist/canonicalpath/relative.js +57 -0
  64. package/dist/canonicalpath/relative.js.map +1 -0
  65. package/dist/canonicalpath/sanitize.d.ts +4 -0
  66. package/dist/canonicalpath/sanitize.d.ts.map +1 -0
  67. package/dist/canonicalpath/sanitize.js +36 -0
  68. package/dist/canonicalpath/sanitize.js.map +1 -0
  69. package/dist/canonicalpath/types.d.ts +28 -0
  70. package/dist/canonicalpath/types.d.ts.map +1 -0
  71. package/dist/canonicalpath/types.js +2 -0
  72. package/dist/canonicalpath/types.js.map +1 -0
  73. package/dist/canonicalpath/uri.d.ts +3 -0
  74. package/dist/canonicalpath/uri.d.ts.map +1 -0
  75. package/dist/canonicalpath/uri.js +49 -0
  76. package/dist/canonicalpath/uri.js.map +1 -0
  77. package/dist/canonicalpath/windows.d.ts +3 -0
  78. package/dist/canonicalpath/windows.d.ts.map +1 -0
  79. package/dist/canonicalpath/windows.js +12 -0
  80. package/dist/canonicalpath/windows.js.map +1 -0
  81. package/dist/canonicalpath/wsl.d.ts +5 -0
  82. package/dist/canonicalpath/wsl.d.ts.map +1 -0
  83. package/dist/canonicalpath/wsl.js +15 -0
  84. package/dist/canonicalpath/wsl.js.map +1 -0
  85. package/dist/unity-gateway/broker.d.ts +21 -0
  86. package/dist/unity-gateway/broker.d.ts.map +1 -0
  87. package/dist/unity-gateway/broker.js +140 -0
  88. package/dist/unity-gateway/broker.js.map +1 -0
  89. package/dist/unity-gateway/fake-bridge.d.ts +33 -0
  90. package/dist/unity-gateway/fake-bridge.d.ts.map +1 -0
  91. package/dist/unity-gateway/fake-bridge.js +214 -0
  92. package/dist/unity-gateway/fake-bridge.js.map +1 -0
  93. package/dist/unity-gateway/index.d.ts +6 -0
  94. package/dist/unity-gateway/index.d.ts.map +1 -0
  95. package/dist/unity-gateway/index.js +6 -0
  96. package/dist/unity-gateway/index.js.map +1 -0
  97. package/dist/unity-gateway/mcp-tools.d.ts +12 -0
  98. package/dist/unity-gateway/mcp-tools.d.ts.map +1 -0
  99. package/dist/unity-gateway/mcp-tools.js +265 -0
  100. package/dist/unity-gateway/mcp-tools.js.map +1 -0
  101. package/dist/unity-gateway/path-service.d.ts +25 -0
  102. package/dist/unity-gateway/path-service.d.ts.map +1 -0
  103. package/dist/unity-gateway/path-service.js +233 -0
  104. package/dist/unity-gateway/path-service.js.map +1 -0
  105. package/dist/unity-gateway/types.d.ts +168 -0
  106. package/dist/unity-gateway/types.d.ts.map +1 -0
  107. package/dist/unity-gateway/types.js +2 -0
  108. package/dist/unity-gateway/types.js.map +1 -0
  109. package/package.json +57 -0
@@ -0,0 +1,107 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { fsError } from "./errors.js";
3
+ export class CanonicalFSHTTPClient {
4
+ endpoint;
5
+ capabilityToken;
6
+ fetchImpl;
7
+ constructor(endpoint, options) {
8
+ const capabilityToken = options.capabilityToken.trim();
9
+ if (capabilityToken === "")
10
+ throw fsError("ERR_DAEMON", "capabilityToken is required");
11
+ this.endpoint = endpoint.replace(/\/+$/, "");
12
+ this.capabilityToken = capabilityToken;
13
+ this.fetchImpl = options.fetch ?? fetch;
14
+ }
15
+ async openProject(projectId, hostRoot) {
16
+ await this.call("/v1/projects/open", { project_id: projectId, host_root: hostRoot });
17
+ }
18
+ async capabilities() {
19
+ const response = await this.request("GET", "/v1/caps");
20
+ return {
21
+ authRequired: response.auth_required,
22
+ endpoints: response.endpoints,
23
+ limits: {
24
+ maxRequestBytes: response.limits.max_request_bytes,
25
+ defaultReadBytes: response.limits.default_read_bytes,
26
+ maxReadBytes: response.limits.max_read_bytes,
27
+ maxResponseBytes: response.limits.max_response_bytes,
28
+ },
29
+ };
30
+ }
31
+ async closeProject(projectId) {
32
+ await this.call("/v1/projects/close", { project_id: projectId });
33
+ }
34
+ async readFile(projectId, rel) {
35
+ const response = await this.call("/v1/fs/readFile", { project_id: projectId, path: rel });
36
+ return fromBase64(response.data_base64 ?? "");
37
+ }
38
+ async writeFile(projectId, rel, data) {
39
+ await this.call("/v1/fs/writeFile", { project_id: projectId, path: rel, data_base64: toBase64(data) });
40
+ }
41
+ async stat(projectId, rel) {
42
+ const response = await this.call("/v1/fs/stat", { project_id: projectId, path: rel });
43
+ if (!response.stat)
44
+ throw fsError("ERR_DAEMON", "stat response is missing");
45
+ return { path: response.stat.path, size: response.stat.size, isDirectory: response.stat.is_directory };
46
+ }
47
+ async mkdirAll(projectId, rel) {
48
+ await this.call("/v1/fs/mkdirAll", { project_id: projectId, path: rel });
49
+ }
50
+ async remove(projectId, rel) {
51
+ await this.call("/v1/fs/remove", { project_id: projectId, path: rel });
52
+ }
53
+ async rename(projectId, oldRel, newRel) {
54
+ await this.call("/v1/fs/rename", { project_id: projectId, path: oldRel, target: newRel });
55
+ }
56
+ async call(path, body) {
57
+ return this.request("POST", path, body);
58
+ }
59
+ async request(method, path, body) {
60
+ const headers = { authorization: `Bearer ${this.capabilityToken}` };
61
+ if (body)
62
+ headers["content-type"] = "application/json";
63
+ const response = await this.fetchImpl(`${this.endpoint}${path}`, {
64
+ method,
65
+ headers,
66
+ body: body ? JSON.stringify(body) : undefined,
67
+ });
68
+ let payload;
69
+ try {
70
+ payload = (await response.json());
71
+ }
72
+ catch {
73
+ throw fsError("ERR_DAEMON", "daemon response is not valid JSON");
74
+ }
75
+ if (!response.ok || payload.error)
76
+ throwTransportError(payload.error ?? { code: "ERR_DAEMON", message: response.statusText });
77
+ return payload;
78
+ }
79
+ }
80
+ function throwTransportError(error) {
81
+ switch (error.code) {
82
+ case "ERR_ABSOLUTE_PATH":
83
+ case "ERR_ARCHIVE_TRAVERSAL":
84
+ case "ERR_DRIVE_RELATIVE_PATH":
85
+ case "ERR_NUL_BYTE":
86
+ case "ERR_OUTSIDE_ROOT":
87
+ case "ERR_RACE_DETECTED":
88
+ case "ERR_READ_LIMIT_EXCEEDED":
89
+ case "ERR_REQUEST_TOO_LARGE":
90
+ case "ERR_RESPONSE_TOO_LARGE":
91
+ case "ERR_ROOT_NOT_ALLOWED":
92
+ case "ERR_SYMLINK_ESCAPE":
93
+ case "ERR_UNAUTHORIZED":
94
+ case "ERR_UNSUPPORTED_OPERATION":
95
+ case "ERR_DAEMON":
96
+ throw fsError(error.code, error.message);
97
+ default:
98
+ throw new Error(`${error.code}: ${error.message}`);
99
+ }
100
+ }
101
+ function toBase64(data) {
102
+ return Buffer.from(data).toString("base64");
103
+ }
104
+ function fromBase64(data) {
105
+ return new Uint8Array(Buffer.from(data, "base64"));
106
+ }
107
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/canonicalfs/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./errors.js";
2
+ export * from "./http.js";
3
+ export * from "./limitations.js";
4
+ export * from "./root.js";
5
+ export * from "./rpc.js";
6
+ export * from "./types.js";
7
+ export * from "./validate.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/canonicalfs/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from "./errors.js";
2
+ export * from "./http.js";
3
+ export * from "./limitations.js";
4
+ export * from "./root.js";
5
+ export * from "./rpc.js";
6
+ export * from "./types.js";
7
+ export * from "./validate.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/canonicalfs/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const canonicalFSLimitations = "TypeScript canonicalfs is best-effort or RPC-only and must not claim TOCTOU-proof security. For security-sensitive agent file operations, use the Go daemon canonicalfs implementation.";
2
+ //# sourceMappingURL=limitations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitations.d.ts","sourceRoot":"","sources":["../../src/canonicalfs/limitations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,4LACwJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const canonicalFSLimitations = "TypeScript canonicalfs is best-effort or RPC-only and must not claim TOCTOU-proof security. For security-sensitive agent file operations, use the Go daemon canonicalfs implementation.";
2
+ //# sourceMappingURL=limitations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitations.js","sourceRoot":"","sources":["../../src/canonicalfs/limitations.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GACjC,yLAAyL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { CanonicalRelativePath } from "../canonicalpath/types.js";
2
+ import type { FileStat } from "./types.js";
3
+ export declare class BestEffortCanonicalFSRoot {
4
+ readonly projectId: string;
5
+ readonly hostRoot?: string | undefined;
6
+ constructor(projectId: string, hostRoot?: string | undefined);
7
+ readFile(rel: string): Promise<Uint8Array>;
8
+ writeFile(rel: string, data: Uint8Array): Promise<void>;
9
+ mkdirAll(rel: string): Promise<void>;
10
+ remove(rel: string): Promise<void>;
11
+ rename(oldRel: string, newRel: string): Promise<void>;
12
+ stat(rel: string): Promise<FileStat>;
13
+ validate(rel: string): CanonicalRelativePath;
14
+ private resolveBestEffort;
15
+ private resolveCleanBestEffort;
16
+ }
17
+ //# sourceMappingURL=root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/canonicalfs/root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3C,qBAAa,yBAAyB;IAElC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM;gBADjB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,YAAA;IAGtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAM1C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB;IAI5C,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,sBAAsB;CAI/B"}
@@ -0,0 +1,51 @@
1
+ import { mkdir, readFile, rename as fsRename, rm, stat, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fsError } from "./errors.js";
4
+ import { canonicalFSLimitations } from "./limitations.js";
5
+ import { validateRelativePath } from "./validate.js";
6
+ // Local Node filesystem operations are lexical best-effort helpers only.
7
+ // Use CanonicalFSRPCRoot/CanonicalFSHTTPClient with the Go daemon for security-sensitive I/O.
8
+ export class BestEffortCanonicalFSRoot {
9
+ projectId;
10
+ hostRoot;
11
+ constructor(projectId, hostRoot) {
12
+ this.projectId = projectId;
13
+ this.hostRoot = hostRoot;
14
+ }
15
+ async readFile(rel) {
16
+ return readFile(this.resolveBestEffort(rel));
17
+ }
18
+ async writeFile(rel, data) {
19
+ const target = this.resolveBestEffort(rel);
20
+ await mkdir(path.dirname(target), { recursive: true });
21
+ await writeFile(target, data);
22
+ }
23
+ async mkdirAll(rel) {
24
+ await mkdir(this.resolveBestEffort(rel), { recursive: true });
25
+ }
26
+ async remove(rel) {
27
+ await rm(this.resolveBestEffort(rel), { recursive: true, force: false });
28
+ }
29
+ async rename(oldRel, newRel) {
30
+ const oldClean = validateRelativePath(oldRel);
31
+ const newClean = validateRelativePath(newRel);
32
+ await fsRename(this.resolveCleanBestEffort(oldClean), this.resolveCleanBestEffort(newClean));
33
+ }
34
+ async stat(rel) {
35
+ const clean = validateRelativePath(rel);
36
+ const info = await stat(this.resolveCleanBestEffort(clean));
37
+ return { path: clean, size: info.size, isDirectory: info.isDirectory() };
38
+ }
39
+ validate(rel) {
40
+ return validateRelativePath(rel);
41
+ }
42
+ resolveBestEffort(rel) {
43
+ return this.resolveCleanBestEffort(validateRelativePath(rel));
44
+ }
45
+ resolveCleanBestEffort(rel) {
46
+ if (!this.hostRoot)
47
+ throw fsError("ERR_OUTSIDE_ROOT", `hostRoot is required for local TypeScript canonicalfs. ${canonicalFSLimitations}`);
48
+ return path.join(this.hostRoot, rel);
49
+ }
50
+ }
51
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/canonicalfs/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,yEAAyE;AACzE,8FAA8F;AAC9F,MAAM,OAAO,yBAAyB;IAEzB;IACA;IAFX,YACW,SAAiB,EACjB,QAAiB;QADjB,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAS;IACzB,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,IAAgB;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAc;QACzC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IAC3E,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAEO,iBAAiB,CAAC,GAAW;QACnC,OAAO,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAEO,sBAAsB,CAAC,GAA0B;QACvD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE,0DAA0D,sBAAsB,EAAE,CAAC,CAAC;QAC1I,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { CanonicalRelativePath } from "../canonicalpath/types.js";
2
+ import type { CanonicalFSClient, FileStat } from "./types.js";
3
+ export declare class CanonicalFSRPCRoot {
4
+ readonly projectId: string;
5
+ private readonly client;
6
+ constructor(projectId: string, client: CanonicalFSClient);
7
+ readFile(rel: string): Promise<Uint8Array>;
8
+ writeFile(rel: string, data: Uint8Array): Promise<void>;
9
+ stat(rel: string): Promise<FileStat>;
10
+ mkdirAll(rel: string): Promise<void>;
11
+ remove(rel: string): Promise<void>;
12
+ rename(oldRel: string, newRel: string): Promise<void>;
13
+ validate(rel: string): CanonicalRelativePath;
14
+ }
15
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/canonicalfs/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG9D,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADd,SAAS,EAAE,MAAM,EACT,MAAM,EAAE,iBAAiB;IAGtC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB;CAG7C"}
@@ -0,0 +1,31 @@
1
+ import { validateRelativePath } from "./validate.js";
2
+ export class CanonicalFSRPCRoot {
3
+ projectId;
4
+ client;
5
+ constructor(projectId, client) {
6
+ this.projectId = projectId;
7
+ this.client = client;
8
+ }
9
+ async readFile(rel) {
10
+ return this.client.readFile(this.projectId, this.validate(rel));
11
+ }
12
+ async writeFile(rel, data) {
13
+ return this.client.writeFile(this.projectId, this.validate(rel), data);
14
+ }
15
+ async stat(rel) {
16
+ return this.client.stat(this.projectId, this.validate(rel));
17
+ }
18
+ async mkdirAll(rel) {
19
+ return this.client.mkdirAll(this.projectId, this.validate(rel));
20
+ }
21
+ async remove(rel) {
22
+ return this.client.remove(this.projectId, this.validate(rel));
23
+ }
24
+ async rename(oldRel, newRel) {
25
+ return this.client.rename(this.projectId, this.validate(oldRel), this.validate(newRel));
26
+ }
27
+ validate(rel) {
28
+ return validateRelativePath(rel);
29
+ }
30
+ }
31
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/canonicalfs/rpc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,OAAO,kBAAkB;IAElB;IACQ;IAFnB,YACW,SAAiB,EACT,MAAyB;QADjC,cAAS,GAAT,SAAS,CAAQ;QACT,WAAM,GAAN,MAAM,CAAmB;IACzC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,IAAgB;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAc;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { CanonicalRelativePath } from "../canonicalpath/types.js";
2
+ export interface FileStat {
3
+ path: CanonicalRelativePath;
4
+ size: number;
5
+ isDirectory: boolean;
6
+ }
7
+ export interface CanonicalFSDaemonCapabilities {
8
+ authRequired: boolean;
9
+ endpoints: string[];
10
+ limits: {
11
+ maxRequestBytes: number;
12
+ defaultReadBytes: number;
13
+ maxReadBytes: number;
14
+ maxResponseBytes: number;
15
+ };
16
+ }
17
+ export interface CanonicalFSClient {
18
+ readFile(projectId: string, rel: CanonicalRelativePath): Promise<Uint8Array>;
19
+ writeFile(projectId: string, rel: CanonicalRelativePath, data: Uint8Array): Promise<void>;
20
+ stat(projectId: string, rel: CanonicalRelativePath): Promise<FileStat>;
21
+ mkdirAll(projectId: string, rel: CanonicalRelativePath): Promise<void>;
22
+ remove(projectId: string, rel: CanonicalRelativePath): Promise<void>;
23
+ rename(projectId: string, oldRel: CanonicalRelativePath, newRel: CanonicalRelativePath): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/canonicalfs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE;QACN,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7E,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/canonicalfs/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { CanonicalRelativePath } from "../canonicalpath/types.js";
2
+ export declare function validateRelativePath(rel: string): CanonicalRelativePath;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/canonicalfs/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAqBvE"}
@@ -0,0 +1,36 @@
1
+ import { fsError } from "./errors.js";
2
+ export function validateRelativePath(rel) {
3
+ if (rel.includes("\0"))
4
+ throw fsError("ERR_NUL_BYTE", "path contains NUL");
5
+ if (rel === "" || rel === ".")
6
+ return ".";
7
+ if (isAbsolutePathLike(rel))
8
+ throw fsError("ERR_ABSOLUTE_PATH", "path must be relative to root");
9
+ if (isDriveRelativePathLike(rel))
10
+ throw fsError("ERR_DRIVE_RELATIVE_PATH", "Windows drive-relative paths are not accepted in CanonicalFS relative paths");
11
+ if (rel.includes("\\")) {
12
+ throw fsError("ERR_OUTSIDE_ROOT", "backslash separators are not accepted in CanonicalFS relative paths");
13
+ }
14
+ const parts = [];
15
+ for (const part of rel.split("/")) {
16
+ if (part === "" || part === ".")
17
+ continue;
18
+ if (part === "..") {
19
+ if (parts.length === 0)
20
+ throw fsError("ERR_OUTSIDE_ROOT", "path escapes root");
21
+ parts.pop();
22
+ continue;
23
+ }
24
+ parts.push(part);
25
+ }
26
+ return (parts.length === 0 ? "." : parts.join("/"));
27
+ }
28
+ function isAbsolutePathLike(rel) {
29
+ if (rel.startsWith("/") || rel.startsWith("\\\\"))
30
+ return true;
31
+ return /^[A-Za-z]:[\\/]/.test(rel);
32
+ }
33
+ function isDriveRelativePathLike(rel) {
34
+ return /^[A-Za-z]:($|[^\\/])/.test(rel);
35
+ }
36
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/canonicalfs/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IAC3E,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,GAA4B,CAAC;IACnE,IAAI,kBAAkB,CAAC,GAAG,CAAC;QAAE,MAAM,OAAO,CAAC,mBAAmB,EAAE,+BAA+B,CAAC,CAAC;IACjG,IAAI,uBAAuB,CAAC,GAAG,CAAC;QAAE,MAAM,OAAO,CAAC,yBAAyB,EAAE,6EAA6E,CAAC,CAAC;IAC1J,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,kBAAkB,EAAE,qEAAqE,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG;YAAE,SAAS;QAC1C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;YAC/E,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAA0B,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,OAAO,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { NormalizeOptions } from "./types.js";
2
+ export declare function isEqual(left: string, right: string, options?: NormalizeOptions): boolean;
3
+ //# sourceMappingURL=equal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equal.d.ts","sourceRoot":"","sources":["../../src/canonicalpath/equal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAE5F"}
@@ -0,0 +1,5 @@
1
+ import { normalize } from "./normalize.js";
2
+ export function isEqual(left, right, options = {}) {
3
+ return normalize(left, options) === normalize(right, options);
4
+ }
5
+ //# sourceMappingURL=equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equal.js","sourceRoot":"","sources":["../../src/canonicalpath/equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,UAA4B,EAAE;IACjF,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ErrorCode = "ERR_ABSOLUTE_PATH" | "ERR_ALTERNATE_DATA_STREAM" | "ERR_DRIVE_RELATIVE_PATH" | "ERR_EMPTY_PATH" | "ERR_ENCODED_SEPARATOR" | "ERR_INVALID_COMPONENT" | "ERR_INVALID_PATH" | "ERR_INVALID_PERCENT_ENCODING" | "ERR_INVALID_URI" | "ERR_NUL_BYTE" | "ERR_OUTSIDE_ROOT" | "ERR_RESERVED_DEVICE_NAME" | "ERR_UNSUPPORTED_URI_SCHEME";
2
+ export declare class CanonicalPathError extends Error {
3
+ readonly code: ErrorCode;
4
+ constructor(code: ErrorCode, message: string);
5
+ }
6
+ export declare function pathError(code: ErrorCode, message: string): CanonicalPathError;
7
+ export declare function errorCode(error: unknown): string;
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/canonicalpath/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,mBAAmB,GACnB,2BAA2B,GAC3B,yBAAyB,GACzB,gBAAgB,GAChB,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,GAClB,8BAA8B,GAC9B,iBAAiB,GACjB,cAAc,GACd,kBAAkB,GAClB,0BAA0B,GAC1B,4BAA4B,CAAC;AAEjC,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;gBAEb,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAE9E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIhD"}
@@ -0,0 +1,19 @@
1
+ export class CanonicalPathError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(`${code}: ${message}`);
5
+ this.name = "CanonicalPathError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function pathError(code, message) {
10
+ return new CanonicalPathError(code, message);
11
+ }
12
+ export function errorCode(error) {
13
+ if (error instanceof CanonicalPathError)
14
+ return error.code;
15
+ if (error instanceof Error)
16
+ return error.message;
17
+ return String(error);
18
+ }
19
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/canonicalpath/errors.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAY;IAEzB,YAAY,IAAe,EAAE,OAAe;QAC1C,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,OAAe;IACxD,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,KAAK,YAAY,kBAAkB;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC3D,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from "./errors.js";
2
+ export * from "./equal.js";
3
+ export * from "./normalize.js";
4
+ export * from "./posix.js";
5
+ export * from "./relative.js";
6
+ export * from "./sanitize.js";
7
+ export * from "./types.js";
8
+ export * from "./uri.js";
9
+ export * from "./windows.js";
10
+ export * from "./wsl.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/canonicalpath/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from "./errors.js";
2
+ export * from "./equal.js";
3
+ export * from "./normalize.js";
4
+ export * from "./posix.js";
5
+ export * from "./relative.js";
6
+ export * from "./sanitize.js";
7
+ export * from "./types.js";
8
+ export * from "./uri.js";
9
+ export * from "./windows.js";
10
+ export * from "./wsl.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/canonicalpath/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { WSLOptions } from "./types.js";
2
+ export declare function isAsciiLetter(value: string): boolean;
3
+ export declare function hasUriScheme(value: string): boolean;
4
+ export declare function hasDriveRoot(value: string): boolean;
5
+ export declare function isDriveRelative(value: string): boolean;
6
+ export declare function isUriWindowsDrivePath(value: string): boolean;
7
+ export declare function isAbsolutePathLike(value: string): boolean;
8
+ export declare function unwrapWindowsExtendedPrefix(value: string): string;
9
+ export declare function mapWSLDrive(value: string, options: WSLOptions | undefined): string | undefined;
10
+ export declare function splitRoot(value: string): {
11
+ prefix: string;
12
+ rest: string;
13
+ };
14
+ export declare function cleanCanonical(value: string): string;
15
+ export declare function canonicalParts(value: string): {
16
+ prefix: string;
17
+ parts: string[];
18
+ };
19
+ export declare function hasWindowsADS(value: string): boolean;
20
+ export declare function hasReservedDeviceName(value: string): boolean;
21
+ export declare function isReservedDeviceBase(base: string): boolean;
22
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/canonicalpath/internal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAa9F;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAWzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAuBpD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAUjF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY5D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D"}