@dbx-tools/databricks 0.6.9 → 0.6.10

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.
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Databricks path recognition and normalization for {@link DatabricksFileSystem}.
3
+ *
4
+ * Roots may be written as:
5
+ * - Unity Catalog volume: `/Volumes/catalog/schema/volume` (also accepts `/Volume/...`)
6
+ * - Three-part volume id: `catalog.schema.volume` → `/Volumes/catalog/schema/volume`
7
+ * - Home shorthand: `~` / `~/...` → `/Workspace/Users/<userName>/...`
8
+ * - Workspace tree: `/Workspace/...`, `/Users/...`, `/Repos/...`, `/Shared/...`
9
+ * - DBFS: `/dbfs/...`
10
+ *
11
+ * @module
12
+ */
13
+ import type { WorkspaceClient } from "@databricks/sdk-experimental";
14
+ import { posixPath } from "@dbx-tools/shared-fs";
15
+ /** Which Databricks Files API serves an absolute path. */
16
+ export type DatabricksFilesBackend = "workspace" | "volumes" | "dbfs";
17
+ /** Options for synchronous {@link normalizeDatabricksRoot}. */
18
+ export interface NormalizeDatabricksRootOptions {
19
+ /**
20
+ * Username used to expand `~` → `/Workspace/Users/<userName>`.
21
+ * Required when {@link root} is `~` or `~/...`. Prefer
22
+ * {@link resolveDatabricksRoot} when the name should come from the workspace
23
+ * client.
24
+ */
25
+ userName?: string;
26
+ }
27
+ /** Options for async {@link resolveDatabricksRoot}. */
28
+ export interface ResolveDatabricksRootOptions {
29
+ /** Client used to resolve the current username for `~` expansion. */
30
+ client?: WorkspaceClient;
31
+ }
32
+ /** True when {@link input} is `~` or a path under `~/`. See {@link posixPath.isHomeRelativePath}. */
33
+ export declare const isHomeRelativePath: typeof posixPath.isHomeRelativePath;
34
+ /**
35
+ * Expand `~` / `~/...` to `/Workspace/Users/<userName>/...`.
36
+ * Non-home inputs are returned unchanged (POSIX separators only).
37
+ */
38
+ export declare function expandHomePath(input: string, userName: string): string;
39
+ /**
40
+ * Normalize a Databricks filesystem root to an absolute POSIX path.
41
+ *
42
+ * - `catalog.schema.volume` → `/Volumes/catalog/schema/volume`
43
+ * - `/Volume/...` → `/Volumes/...` (singular typo / shorthand)
44
+ * - `~` / `~/...` → `/Workspace/Users/<userName>/...` (needs {@link NormalizeDatabricksRootOptions.userName})
45
+ * - strips trailing slashes (except `/`)
46
+ *
47
+ * For `~` without a known username, use {@link resolveDatabricksRoot}.
48
+ */
49
+ export declare function normalizeDatabricksRoot(root: string, options?: NormalizeDatabricksRootOptions): string;
50
+ /**
51
+ * Like {@link normalizeDatabricksRoot}, but resolves `~` via
52
+ * {@link getCurrentUserName} (AppKit context user, else `currentUser.me()`).
53
+ */
54
+ export declare function resolveDatabricksRoot(root: string, options?: ResolveDatabricksRootOptions): Promise<string>;
55
+ /** True when {@link absolutePath} is served by the workspace objects API. */
56
+ export declare function isWorkspaceFilesPath(absolutePath: string): boolean;
57
+ /** True when {@link absolutePath} is a Unity Catalog volume path. */
58
+ export declare function isVolumesPath(absolutePath: string): boolean;
59
+ /** True when {@link absolutePath} is a DBFS path. */
60
+ export declare function isDbfsPath(absolutePath: string): boolean;
61
+ /**
62
+ * Pick the Databricks API backend for an absolute path.
63
+ *
64
+ * Volume three-part roots are normalized before this runs, so callers should
65
+ * pass paths from {@link normalizeDatabricksRoot} / {@link BaseFileSystem.resolvePath}.
66
+ */
67
+ export declare function resolveDatabricksFilesBackend(absolutePath: string): DatabricksFilesBackend;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Databricks path recognition and normalization for {@link DatabricksFileSystem}.
3
+ *
4
+ * Roots may be written as:
5
+ * - Unity Catalog volume: `/Volumes/catalog/schema/volume` (also accepts `/Volume/...`)
6
+ * - Three-part volume id: `catalog.schema.volume` → `/Volumes/catalog/schema/volume`
7
+ * - Home shorthand: `~` / `~/...` → `/Workspace/Users/<userName>/...`
8
+ * - Workspace tree: `/Workspace/...`, `/Users/...`, `/Repos/...`, `/Shared/...`
9
+ * - DBFS: `/dbfs/...`
10
+ *
11
+ * @module
12
+ */
13
+ import { posixPath } from "@dbx-tools/shared-fs";
14
+ import { getCurrentUserName } from "./workspace.js";
15
+ /** `catalog.schema.volume` (no slashes, exactly three dotted segments). */
16
+ const VOLUME_THREE_PART = /^([^.\/\s]+)\.([^.\/\s]+)\.([^.\/\s]+)$/;
17
+ /** True when {@link input} is `~` or a path under `~/`. See {@link posixPath.isHomeRelativePath}. */
18
+ export const isHomeRelativePath = posixPath.isHomeRelativePath;
19
+ /**
20
+ * Expand `~` / `~/...` to `/Workspace/Users/<userName>/...`.
21
+ * Non-home inputs are returned unchanged (POSIX separators only).
22
+ */
23
+ export function expandHomePath(input, userName) {
24
+ const name = userName.trim();
25
+ if (!name) {
26
+ throw new TypeError("Databricks home expansion requires a non-empty userName");
27
+ }
28
+ if (!isHomeRelativePath(input)) {
29
+ return posixPath.toPosix(input.trim());
30
+ }
31
+ return posixPath.expandHome(input, `/Workspace/Users/${name}`);
32
+ }
33
+ /**
34
+ * Normalize a Databricks filesystem root to an absolute POSIX path.
35
+ *
36
+ * - `catalog.schema.volume` → `/Volumes/catalog/schema/volume`
37
+ * - `/Volume/...` → `/Volumes/...` (singular typo / shorthand)
38
+ * - `~` / `~/...` → `/Workspace/Users/<userName>/...` (needs {@link NormalizeDatabricksRootOptions.userName})
39
+ * - strips trailing slashes (except `/`)
40
+ *
41
+ * For `~` without a known username, use {@link resolveDatabricksRoot}.
42
+ */
43
+ export function normalizeDatabricksRoot(root, options = {}) {
44
+ const trimmed = root.trim();
45
+ if (!trimmed) {
46
+ throw new TypeError("Databricks filesystem root cannot be empty");
47
+ }
48
+ if (isHomeRelativePath(trimmed)) {
49
+ if (!options.userName?.trim()) {
50
+ throw new TypeError(`Databricks home path "${root}" requires userName; use resolveDatabricksRoot() or pass userName`);
51
+ }
52
+ return posixPath.normalizeRoot(expandHomePath(trimmed, options.userName));
53
+ }
54
+ const threePart = VOLUME_THREE_PART.exec(trimmed);
55
+ if (threePart) {
56
+ return posixPath.normalizeRoot(`/Volumes/${threePart[1]}/${threePart[2]}/${threePart[3]}`);
57
+ }
58
+ let posix = posixPath.toPosix(trimmed);
59
+ if (posix === "/Volume" || posix.startsWith("/Volume/")) {
60
+ posix = `/Volumes${posix.slice("/Volume".length)}`;
61
+ }
62
+ if (!posixPath.isAbsolute(posix)) {
63
+ throw new TypeError(`Databricks filesystem root must be absolute, catalog.schema.volume, or ~, got: ${root}`);
64
+ }
65
+ return posixPath.normalizeRoot(posix);
66
+ }
67
+ /**
68
+ * Like {@link normalizeDatabricksRoot}, but resolves `~` via
69
+ * {@link getCurrentUserName} (AppKit context user, else `currentUser.me()`).
70
+ */
71
+ export async function resolveDatabricksRoot(root, options = {}) {
72
+ if (!isHomeRelativePath(root)) {
73
+ return normalizeDatabricksRoot(root);
74
+ }
75
+ const userName = await getCurrentUserName(options.client);
76
+ return normalizeDatabricksRoot(root, { userName });
77
+ }
78
+ /** True when {@link absolutePath} is served by the workspace objects API. */
79
+ export function isWorkspaceFilesPath(absolutePath) {
80
+ const p = posixPath.toPosix(absolutePath);
81
+ return (p === "/Workspace" ||
82
+ p.startsWith("/Workspace/") ||
83
+ p.startsWith("/Users/") ||
84
+ p.startsWith("/Repos/") ||
85
+ p.startsWith("/Shared/"));
86
+ }
87
+ /** True when {@link absolutePath} is a Unity Catalog volume path. */
88
+ export function isVolumesPath(absolutePath) {
89
+ const p = posixPath.toPosix(absolutePath);
90
+ return p === "/Volumes" || p.startsWith("/Volumes/");
91
+ }
92
+ /** True when {@link absolutePath} is a DBFS path. */
93
+ export function isDbfsPath(absolutePath) {
94
+ const p = posixPath.toPosix(absolutePath);
95
+ return p === "/dbfs" || p.startsWith("/dbfs/");
96
+ }
97
+ /**
98
+ * Pick the Databricks API backend for an absolute path.
99
+ *
100
+ * Volume three-part roots are normalized before this runs, so callers should
101
+ * pass paths from {@link normalizeDatabricksRoot} / {@link BaseFileSystem.resolvePath}.
102
+ */
103
+ export function resolveDatabricksFilesBackend(absolutePath) {
104
+ if (isDbfsPath(absolutePath))
105
+ return "dbfs";
106
+ if (isWorkspaceFilesPath(absolutePath))
107
+ return "workspace";
108
+ if (isVolumesPath(absolutePath))
109
+ return "volumes";
110
+ // Default: UC Files API (covers unusual absolute roots under the workspace host).
111
+ return "volumes";
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFicmlja3MtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUdILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtwRCwyRUFBMkU7QUFDM0UsTUFBTSxpQkFBaUIsR0FBRyx5Q0FBeUMsQ0FBQztBQW1CcEUscUdBQXFHO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztBQUUvRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxRQUFnQjtJQUM1RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLFNBQVMsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsSUFBWSxFQUNaLFVBQTBDLEVBQUU7SUFFNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxTQUFTLENBQUMsNENB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QUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxZQUFvQjtJQUNoRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUM1QyxJQUFJLG9CQUFvQixDQUFDLFlBQVksQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQzNELElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xELGtGQUFrRjtJQUNsRixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhYnJpY2tzIHBhdGggcmVjb2duaXRpb24gYW5kIG5vcm1hbGl6YXRpb24gZm9yIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbX0uXG4gKlxuICogUm9vdHMgbWF5IGJlIHdyaXR0ZW4gYXM6XG4gKiAtIFVuaXR5IENhdGFsb2cgdm9sdW1lOiBgL1ZvbHVtZXMvY2F0YWxvZy9zY2hlbWEvdm9sdW1lYCAoYWxzbyBhY2NlcHRzIGAvVm9sdW1lLy4uLmApXG4gKiAtIFRocmVlLXBhcnQgdm9sdW1lIGlkOiBgY2F0YWxvZy5zY2hlbWEudm9sdW1lYCDihpIgYC9Wb2x1bWVzL2NhdGFsb2cvc2NoZW1hL3ZvbHVtZWBcbiAqIC0gSG9tZSBzaG9ydGhhbmQ6IGB+YCAvIGB+Ly4uLmAg4oaSIGAvV29ya3NwYWNlL1VzZXJzLzx1c2VyTmFtZT4vLi4uYFxuICogLSBXb3Jrc3BhY2UgdHJlZTogYC9Xb3Jrc3BhY2UvLi4uYCwgYC9Vc2Vycy8uLi5gLCBgL1JlcG9zLy4uLmAsIGAvU2hhcmVkLy4uLmBcbiAqIC0gREJGUzogYC9kYmZzLy4uLmBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgcG9zaXhQYXRoIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXNlck5hbWUgfSBmcm9tIFwiLi93b3Jrc3BhY2UudHNcIjtcblxuLyoqIFdoaWNoIERhdGFicmlja3MgRmlsZXMgQVBJIHNlcnZlcyBhbiBhYnNvbHV0ZSBwYXRoLiAqL1xuZXhwb3J0IHR5cGUgRGF0YWJyaWNrc0ZpbGVzQmFja2VuZCA9IFwid29ya3NwYWNlXCIgfCBcInZvbHVtZXNcIiB8IFwiZGJmc1wiO1xuXG4vKiogYGNhdGFsb2cuc2NoZW1hLnZvbHVtZWAgKG5vIHNsYXNoZXMsIGV4YWN0bHkgdGhyZWUgZG90dGVkIHNlZ21lbnRzKS4gKi9cbmNvbnN0IFZPTFVNRV9USFJFRV9QQVJUID0gL14oW14uXFwvXFxzXSspXFwuKFteLlxcL1xcc10rKVxcLihbXi5cXC9cXHNdKykkLztcblxuLyoqIE9wdGlvbnMgZm9yIHN5bmNocm9ub3VzIHtAbGluayBub3JtYWxpemVEYXRhYnJpY2tzUm9vdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIE5vcm1hbGl6ZURhdGFicmlja3NSb290T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVc2VybmFtZSB1c2VkIHRvIGV4cGFuZCBgfmAg4oaSIGAvV29ya3NwYWNlL1VzZXJzLzx1c2VyTmFtZT5gLlxuICAgKiBSZXF1aXJlZCB3aGVuIHtAbGluayByb290fSBpcyBgfmAgb3IgYH4vLi4uYC4gUHJlZmVyXG4gICAqIHtAbGluayByZXNvbHZlRGF0YWJyaWNrc1Jvb3R9IHdoZW4gdGhlIG5hbWUgc2hvdWxkIGNvbWUgZnJvbSB0aGUgd29ya3NwYWNlXG4gICAqIGNsaWVudC5cbiAgICovXG4gIHVzZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgYXN5bmMge0BsaW5rIHJlc29sdmVEYXRhYnJpY2tzUm9vdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVEYXRhYnJpY2tzUm9vdE9wdGlvbnMge1xuICAvKiogQ2xpZW50IHVzZWQgdG8gcmVzb2x2ZSB0aGUgY3VycmVudCB1c2VybmFtZSBmb3IgYH5gIGV4cGFuc2lvbi4gKi9cbiAgY2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xufVxuXG4vKiogVHJ1ZSB3aGVuIHtAbGluayBpbnB1dH0gaXMgYH5gIG9yIGEgcGF0aCB1bmRlciBgfi9gLiBTZWUge0BsaW5rIHBvc2l4UGF0aC5pc0hvbWVSZWxhdGl2ZVBhdGh9LiAqL1xuZXhwb3J0IGNvbnN0IGlzSG9tZVJlbGF0aXZlUGF0aCA9IHBvc2l4UGF0aC5pc0hvbWVSZWxhdGl2ZVBhdGg7XG5cbi8qKlxuICogRXhwYW5kIGB+YCAvIGB+Ly4uLmAgdG8gYC9Xb3Jrc3BhY2UvVXNlcnMvPHVzZXJOYW1lPi8uLi5gLlxuICogTm9uLWhvbWUgaW5wdXRzIGFyZSByZXR1cm5lZCB1bmNoYW5nZWQgKFBPU0lYIHNlcGFyYXRvcnMgb25seSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRIb21lUGF0aChpbnB1dDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZSA9IHVzZXJOYW1lLnRyaW0oKTtcbiAgaWYgKCFuYW1lKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRhdGFicmlja3MgaG9tZSBleHBhbnNpb24gcmVxdWlyZXMgYSBub24tZW1wdHkgdXNlck5hbWVcIik7XG4gIH1cbiAgaWYgKCFpc0hvbWVSZWxhdGl2ZVBhdGgoaW5wdXQpKSB7XG4gICAgcmV0dXJuIHBvc2l4UGF0aC50b1Bvc2l4KGlucHV0LnRyaW0oKSk7XG4gIH1cbiAgcmV0dXJuIHBvc2l4UGF0aC5leHBhbmRIb21lKGlucHV0LCBgL1dvcmtzcGFjZS9Vc2Vycy8ke25hbWV9YCk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgRGF0YWJyaWNrcyBmaWxlc3lzdGVtIHJvb3QgdG8gYW4gYWJzb2x1dGUgUE9TSVggcGF0aC5cbiAqXG4gKiAtIGBjYXRhbG9nLnNjaGVtYS52b2x1bWVgIOKGkiBgL1ZvbHVtZXMvY2F0YWxvZy9zY2hlbWEvdm9sdW1lYFxuICogLSBgL1ZvbHVtZS8uLi5gIOKGkiBgL1ZvbHVtZXMvLi4uYCAoc2luZ3VsYXIgdHlwbyAvIHNob3J0aGFuZClcbiAqIC0gYH5gIC8gYH4vLi4uYCDihpIgYC9Xb3Jrc3BhY2UvVXNlcnMvPHVzZXJOYW1lPi8uLi5gIChuZWVkcyB7QGxpbmsgTm9ybWFsaXplRGF0YWJyaWNrc1Jvb3RPcHRpb25zLnVzZXJOYW1lfSlcbiAqIC0gc3RyaXBzIHRyYWlsaW5nIHNsYXNoZXMgKGV4Y2VwdCBgL2ApXG4gKlxuICogRm9yIGB+YCB3aXRob3V0IGEga25vd24gdXNlcm5hbWUsIHVzZSB7QGxpbmsgcmVzb2x2ZURhdGFicmlja3NSb290fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFicmlja3NSb290KFxuICByb290OiBzdHJpbmcsXG4gIG9wdGlvbnM6IE5vcm1hbGl6ZURhdGFicmlja3NSb290T3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IHJvb3QudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGF0YWJyaWNrcyBmaWxlc3lzdGVtIHJvb3QgY2Fubm90IGJlIGVtcHR5XCIpO1xuICB9XG5cbiAgaWYgKGlzSG9tZVJlbGF0aXZlUGF0aCh0cmltbWVkKSkge1xuICAgIGlmICghb3B0aW9ucy51c2VyTmFtZT8udHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgRGF0YWJyaWNrcyBob21lIHBhdGggXCIke3Jvb3R9XCIgcmVxdWlyZXMgdXNlck5hbWU7IHVzZSByZXNvbHZlRGF0YWJyaWNrc1Jvb3QoKSBvciBwYXNzIHVzZXJOYW1lYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwb3NpeFBhdGgubm9ybWFsaXplUm9vdChleHBhbmRIb21lUGF0aCh0cmltbWVkLCBvcHRpb25zLnVzZXJOYW1lKSk7XG4gIH1cblxuICBjb25zdCB0aHJlZVBhcnQgPSBWT0xVTUVfVEhSRUVfUEFSVC5leGVjKHRyaW1tZWQpO1xuICBpZiAodGhyZWVQYXJ0KSB7XG4gICAgcmV0dXJuIHBvc2l4UGF0aC5ub3JtYWxpemVSb290KGAvVm9sdW1lcy8ke3RocmVlUGFydFsxXX0vJHt0aHJlZVBhcnRbMl19LyR7dGhyZWVQYXJ0WzNdfWApO1xuICB9XG5cbiAgbGV0IHBvc2l4ID0gcG9zaXhQYXRoLnRvUG9zaXgodHJpbW1lZCk7XG4gIGlmIChwb3NpeCA9PT0gXCIvVm9sdW1lXCIgfHwgcG9zaXguc3RhcnRzV2l0aChcIi9Wb2x1bWUvXCIpKSB7XG4gICAgcG9zaXggPSBgL1ZvbHVtZXMke3Bvc2l4LnNsaWNlKFwiL1ZvbHVtZVwiLmxlbmd0aCl9YDtcbiAgfVxuXG4gIGlmICghcG9zaXhQYXRoLmlzQWJzb2x1dGUocG9zaXgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBEYXRhYnJpY2tzIGZpbGVzeXN0ZW0gcm9vdCBtdXN0IGJlIGFic29sdXRlLCBjYXRhbG9nLnNjaGVtYS52b2x1bWUsIG9yIH4sIGdvdDogJHtyb290fWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwb3NpeFBhdGgubm9ybWFsaXplUm9vdChwb3NpeCk7XG59XG5cbi8qKlxuICogTGlrZSB7QGxpbmsgbm9ybWFsaXplRGF0YWJyaWNrc1Jvb3R9LCBidXQgcmVzb2x2ZXMgYH5gIHZpYVxuICoge0BsaW5rIGdldEN1cnJlbnRVc2VyTmFtZX0gKEFwcEtpdCBjb250ZXh0IHVzZXIsIGVsc2UgYGN1cnJlbnRVc2VyLm1lKClgKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEYXRhYnJpY2tzUm9vdChcbiAgcm9vdDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlRGF0YWJyaWNrc1Jvb3RPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIWlzSG9tZVJlbGF0aXZlUGF0aChyb290KSkge1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhYnJpY2tzUm9vdChyb290KTtcbiAgfVxuICBjb25zdCB1c2VyTmFtZSA9IGF3YWl0IGdldEN1cnJlbnRVc2VyTmFtZShvcHRpb25zLmNsaWVudCk7XG4gIHJldHVybiBub3JtYWxpemVEYXRhYnJpY2tzUm9vdChyb290LCB7IHVzZXJOYW1lIH0pO1xufVxuXG4vKiogVHJ1ZSB3aGVuIHtAbGluayBhYnNvbHV0ZVBhdGh9IGlzIHNlcnZlZCBieSB0aGUgd29ya3NwYWNlIG9iamVjdHMgQVBJLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV29ya3NwYWNlRmlsZXNQYXRoKGFic29sdXRlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHAgPSBwb3NpeFBhdGgudG9Qb3NpeChhYnNvbHV0ZVBhdGgpO1xuICByZXR1cm4gKFxuICAgIHAgPT09IFwiL1dvcmtzcGFjZVwiIHx8XG4gICAgcC5zdGFydHNXaXRoKFwiL1dvcmtzcGFjZS9cIikgfHxcbiAgICBwLnN0YXJ0c1dpdGgoXCIvVXNlcnMvXCIpIHx8XG4gICAgcC5zdGFydHNXaXRoKFwiL1JlcG9zL1wiKSB8fFxuICAgIHAuc3RhcnRzV2l0aChcIi9TaGFyZWQvXCIpXG4gICk7XG59XG5cbi8qKiBUcnVlIHdoZW4ge0BsaW5rIGFic29sdXRlUGF0aH0gaXMgYSBVbml0eSBDYXRhbG9nIHZvbHVtZSBwYXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVm9sdW1lc1BhdGgoYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcCA9IHBvc2l4UGF0aC50b1Bvc2l4KGFic29sdXRlUGF0aCk7XG4gIHJldHVybiBwID09PSBcIi9Wb2x1bWVzXCIgfHwgcC5zdGFydHNXaXRoKFwiL1ZvbHVtZXMvXCIpO1xufVxuXG4vKiogVHJ1ZSB3aGVuIHtAbGluayBhYnNvbHV0ZVBhdGh9IGlzIGEgREJGUyBwYXRoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGJmc1BhdGgoYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcCA9IHBvc2l4UGF0aC50b1Bvc2l4KGFic29sdXRlUGF0aCk7XG4gIHJldHVybiBwID09PSBcIi9kYmZzXCIgfHwgcC5zdGFydHNXaXRoKFwiL2RiZnMvXCIpO1xufVxuXG4vKipcbiAqIFBpY2sgdGhlIERhdGFicmlja3MgQVBJIGJhY2tlbmQgZm9yIGFuIGFic29sdXRlIHBhdGguXG4gKlxuICogVm9sdW1lIHRocmVlLXBhcnQgcm9vdHMgYXJlIG5vcm1hbGl6ZWQgYmVmb3JlIHRoaXMgcnVucywgc28gY2FsbGVycyBzaG91bGRcbiAqIHBhc3MgcGF0aHMgZnJvbSB7QGxpbmsgbm9ybWFsaXplRGF0YWJyaWNrc1Jvb3R9IC8ge0BsaW5rIEJhc2VGaWxlU3lzdGVtLnJlc29sdmVQYXRofS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEYXRhYnJpY2tzRmlsZXNCYWNrZW5kKGFic29sdXRlUGF0aDogc3RyaW5nKTogRGF0YWJyaWNrc0ZpbGVzQmFja2VuZCB7XG4gIGlmIChpc0RiZnNQYXRoKGFic29sdXRlUGF0aCkpIHJldHVybiBcImRiZnNcIjtcbiAgaWYgKGlzV29ya3NwYWNlRmlsZXNQYXRoKGFic29sdXRlUGF0aCkpIHJldHVybiBcIndvcmtzcGFjZVwiO1xuICBpZiAoaXNWb2x1bWVzUGF0aChhYnNvbHV0ZVBhdGgpKSByZXR1cm4gXCJ2b2x1bWVzXCI7XG4gIC8vIERlZmF1bHQ6IFVDIEZpbGVzIEFQSSAoY292ZXJzIHVudXN1YWwgYWJzb2x1dGUgcm9vdHMgdW5kZXIgdGhlIHdvcmtzcGFjZSBob3N0KS5cbiAgcmV0dXJuIFwidm9sdW1lc1wiO1xufVxuIl19
@@ -1,11 +1,31 @@
1
1
  /**
2
- * Resolve the current Databricks workspace's URL and numeric id from the active
3
- * execution context (AppKit, when initialized), a default `WorkspaceClient`, or
4
- * the environment. Server-only.
2
+ * Resolve the current Databricks workspace's URL, numeric id, and client from
3
+ * the active execution context (AppKit, when initialized), a default
4
+ * {@link WorkspaceClient}, or the environment. Server-only.
5
5
  *
6
6
  * @module
7
7
  */
8
+ import { WorkspaceClient } from "@databricks/sdk-experimental";
8
9
  import { net } from "@dbx-tools/shared-core";
10
+ /**
11
+ * The AppKit execution-context workspace client when available, otherwise
12
+ * `undefined`. Never constructs a fallback client and never throws for a
13
+ * missing AppKit scope.
14
+ */
15
+ export declare function tryGetWorkspaceClient(): WorkspaceClient | undefined;
16
+ /**
17
+ * Resolve a {@link WorkspaceClient}: {@link tryGetWorkspaceClient} first, else
18
+ * a memoized default client from env / profile auth.
19
+ */
20
+ export declare function getWorkspaceClient(): Promise<WorkspaceClient>;
21
+ /**
22
+ * Current Databricks username for workspace home paths
23
+ * (`/Workspace/Users/<userName>`).
24
+ *
25
+ * Prefers `userName` on the AppKit execution context when set, otherwise
26
+ * calls `currentUser.me()` on {@link client} (or {@link getWorkspaceClient}).
27
+ */
28
+ export declare function getCurrentUserName(client?: WorkspaceClient): Promise<string>;
9
29
  /**
10
30
  * Resolve the current workspace host as a `net.UrlBuilder`: the workspace
11
31
  * `Config` host first, then the `DATABRICKS_HOST` env var, else `undefined`.
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Resolve the current Databricks workspace's URL and numeric id from the active
3
- * execution context (AppKit, when initialized), a default `WorkspaceClient`, or
4
- * the environment. Server-only.
2
+ * Resolve the current Databricks workspace's URL, numeric id, and client from
3
+ * the active execution context (AppKit, when initialized), a default
4
+ * {@link WorkspaceClient}, or the environment. Server-only.
5
5
  *
6
6
  * @module
7
7
  */
@@ -16,22 +16,59 @@ const WORKSPACE_ID_REGEX = /\d{10,20}/;
16
16
  * AppKit execution context to borrow a client from.
17
17
  */
18
18
  const getDefaultWorkspaceClient = functionModule.memoize(async () => new WorkspaceClient({}));
19
+ /**
20
+ * The AppKit execution-context workspace client when available, otherwise
21
+ * `undefined`. Never constructs a fallback client and never throws for a
22
+ * missing AppKit scope.
23
+ */
24
+ export function tryGetWorkspaceClient() {
25
+ return appkit.tryGetExecutionContext()?.client;
26
+ }
27
+ /**
28
+ * Resolve a {@link WorkspaceClient}: {@link tryGetWorkspaceClient} first, else
29
+ * a memoized default client from env / profile auth.
30
+ */
31
+ export async function getWorkspaceClient() {
32
+ return tryGetWorkspaceClient() ?? (await getDefaultWorkspaceClient());
33
+ }
19
34
  /**
20
35
  * The active workspace `Config`: the AppKit execution-context client's config
21
36
  * when AppKit is initialized, else the default client's. Returns `undefined`
22
37
  * (never throws) when neither is available.
23
38
  */
24
39
  async function getWorkspaceConfig() {
25
- let client = appkit.tryGetExecutionContext()?.client;
26
- if (!client) {
27
- try {
28
- client = await getDefaultWorkspaceClient();
29
- }
30
- catch {
31
- // no client available; fall back to the environment
32
- }
40
+ try {
41
+ return (await getWorkspaceClient()).config;
42
+ }
43
+ catch {
44
+ return undefined;
33
45
  }
34
- return client?.config;
46
+ }
47
+ /**
48
+ * Current Databricks username for workspace home paths
49
+ * (`/Workspace/Users/<userName>`).
50
+ *
51
+ * Prefers `userName` on the AppKit execution context when set, otherwise
52
+ * calls `currentUser.me()` on {@link client} (or {@link getWorkspaceClient}).
53
+ */
54
+ export async function getCurrentUserName(client) {
55
+ const contextUser = readContextUserName(appkit.tryGetExecutionContext());
56
+ if (contextUser)
57
+ return contextUser;
58
+ const resolved = client ?? (await getWorkspaceClient());
59
+ const me = await resolved.currentUser.me();
60
+ const userName = me.userName?.trim();
61
+ if (!userName) {
62
+ throw new Error("Databricks currentUser.me() did not return a userName");
63
+ }
64
+ return userName;
65
+ }
66
+ /** Best-effort `userName` off an AppKit execution context (shape varies by mode). */
67
+ function readContextUserName(ctx) {
68
+ if (typeof ctx !== "object" || ctx === null || !("userName" in ctx))
69
+ return undefined;
70
+ const value = ctx.userName;
71
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
35
72
  }
36
73
  /**
37
74
  * Resolve the current workspace host as a `net.UrlBuilder`: the workspace
@@ -66,4 +103,4 @@ export async function getWorkspaceId(workspaceHost) {
66
103
  }
67
104
  return undefined;
68
105
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsMkVBQTJFO0FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBRXZDOzs7O0dBSUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTlGOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsa0JBQWtCO0lBQy9CLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQXFDLENBQUM7SUFDcEYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLE1BQU0seUJBQXlCLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asb0RBQW9EO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWU7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQzFDLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxVQUFVO1lBQUUsT0FBTyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRSxJQUFJLGNBQWM7UUFBRSxPQUFPLGNBQWMsQ0FBQztJQUMxQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLGFBQXNCO0lBQ3pELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQzlELElBQUksV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3BDLGFBQWEsR0FBRyxhQUFhLElBQUksQ0FBQyxNQUFNLGVBQWUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ2pFLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmUgdGhlIGN1cnJlbnQgRGF0YWJyaWNrcyB3b3Jrc3BhY2UncyBVUkwgYW5kIG51bWVyaWMgaWQgZnJvbSB0aGUgYWN0aXZlXG4gKiBleGVjdXRpb24gY29udGV4dCAoQXBwS2l0LCB3aGVuIGluaXRpYWxpemVkKSwgYSBkZWZhdWx0IGBXb3Jrc3BhY2VDbGllbnRgLCBvclxuICogdGhlIGVudmlyb25tZW50LiBTZXJ2ZXItb25seS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb25maWcsIFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9zZGstZXhwZXJpbWVudGFsXCI7XG5pbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGZ1bmN0aW9uTW9kdWxlLCBuZXQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG4vKiogRGF0YWJyaWNrcyB3b3Jrc3BhY2UgaWRzIGFyZSBhIDEwLTIwIGRpZ2l0IHJ1biBlbWJlZGRlZCBpbiB0aGUgaG9zdC4gKi9cbmNvbnN0IFdPUktTUEFDRV9JRF9SRUdFWCA9IC9cXGR7MTAsMjB9LztcblxuLyoqXG4gKiBMYXppbHktY29uc3RydWN0ZWQgZGVmYXVsdCBgV29ya3NwYWNlQ2xpZW50YCAoZW52IC8gcHJvZmlsZSBhdXRoKSwgbWVtb2l6ZWQgc29cbiAqIGNvbnN0cnVjdGlvbiBoYXBwZW5zIGF0IG1vc3Qgb25jZSBwZXIgcHJvY2Vzcy4gVXNlZCBvbmx5IHdoZW4gdGhlcmUncyBub1xuICogQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IHRvIGJvcnJvdyBhIGNsaWVudCBmcm9tLlxuICovXG5jb25zdCBnZXREZWZhdWx0V29ya3NwYWNlQ2xpZW50ID0gZnVuY3Rpb25Nb2R1bGUubWVtb2l6ZShhc3luYyAoKSA9PiBuZXcgV29ya3NwYWNlQ2xpZW50KHt9KSk7XG5cbi8qKlxuICogVGhlIGFjdGl2ZSB3b3Jrc3BhY2UgYENvbmZpZ2A6IHRoZSBBcHBLaXQgZXhlY3V0aW9uLWNvbnRleHQgY2xpZW50J3MgY29uZmlnXG4gKiB3aGVuIEFwcEtpdCBpcyBpbml0aWFsaXplZCwgZWxzZSB0aGUgZGVmYXVsdCBjbGllbnQncy4gUmV0dXJucyBgdW5kZWZpbmVkYFxuICogKG5ldmVyIHRocm93cykgd2hlbiBuZWl0aGVyIGlzIGF2YWlsYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlQ29uZmlnKCk6IFByb21pc2U8Q29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gIGxldCBjbGllbnQgPSBhcHBraXQudHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpPy5jbGllbnQgYXMgV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHRyeSB7XG4gICAgICBjbGllbnQgPSBhd2FpdCBnZXREZWZhdWx0V29ya3NwYWNlQ2xpZW50KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBubyBjbGllbnQgYXZhaWxhYmxlOyBmYWxsIGJhY2sgdG8gdGhlIGVudmlyb25tZW50XG4gICAgfVxuICB9XG4gIHJldHVybiBjbGllbnQ/LmNvbmZpZztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjdXJyZW50IHdvcmtzcGFjZSBob3N0IGFzIGEgYG5ldC5VcmxCdWlsZGVyYDogdGhlIHdvcmtzcGFjZVxuICogYENvbmZpZ2AgaG9zdCBmaXJzdCwgdGhlbiB0aGUgYERBVEFCUklDS1NfSE9TVGAgZW52IHZhciwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZVVybCgpOiBQcm9taXNlPG5ldC5VcmxCdWlsZGVyIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldFdvcmtzcGFjZUNvbmZpZygpO1xuICBpZiAoY29uZmlnKSB7XG4gICAgY29uc3QgY29uZmlnSG9zdCA9IG5ldC51cmxCdWlsZGVyKGF3YWl0IGNvbmZpZy5nZXRIb3N0KCkpO1xuICAgIGlmIChjb25maWdIb3N0KSByZXR1cm4gY29uZmlnSG9zdDtcbiAgfVxuICBjb25zdCBkYXRhYnJpY2tzSG9zdCA9IG5ldC51cmxCdWlsZGVyKHByb2Nlc3MuZW52LkRBVEFCUklDS1NfSE9TVCk7XG4gIGlmIChkYXRhYnJpY2tzSG9zdCkgcmV0dXJuIGRhdGFicmlja3NIb3N0O1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIG51bWVyaWMgd29ya3NwYWNlIGlkOiB0aGUgd29ya3NwYWNlIGBDb25maWdgJ3MgYHdvcmtzcGFjZUlkYFxuICogZmlyc3QsIGVsc2UgdGhlIDEwLTIwIGRpZ2l0IHJ1biBvZiBgd29ya3NwYWNlSG9zdGAgKGRlZmF1bHRpbmcgdG9cbiAqIHtAbGluayBnZXRXb3Jrc3BhY2VVcmx9J3MgaG9zdCkuIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciB5aWVsZHMgYW4gaWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VJZCh3b3Jrc3BhY2VIb3N0Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgd29ya3NwYWNlSWQgPSAoYXdhaXQgZ2V0V29ya3NwYWNlQ29uZmlnKCkpPy53b3Jrc3BhY2VJZDtcbiAgaWYgKHdvcmtzcGFjZUlkKSByZXR1cm4gd29ya3NwYWNlSWQ7XG4gIHdvcmtzcGFjZUhvc3QgPSB3b3Jrc3BhY2VIb3N0ID8/IChhd2FpdCBnZXRXb3Jrc3BhY2VVcmwoKSk/Lmhvc3Q7XG4gIGlmICh3b3Jrc3BhY2VIb3N0KSB7XG4gICAgY29uc3QgbWF0Y2ggPSB3b3Jrc3BhY2VIb3N0Lm1hdGNoKFdPUktTUEFDRV9JRF9SRUdFWCk/LlswXTtcbiAgICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsMkVBQTJFO0FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBRXZDOzs7O0dBSUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTlGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU8sTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBcUMsQ0FBQztBQUNoRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsT0FBTyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsTUFBTSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsa0JBQWtCO0lBQy9CLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxNQUFNLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxNQUF3QjtJQUMvRCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBRXBDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixTQUFTLG1CQUFtQixDQUFDLEdBQVk7SUFDdkMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RGLE1BQU0sS0FBSyxHQUFJLEdBQThCLENBQUMsUUFBUSxDQUFDO0lBQ3ZELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDOUUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZTtJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFDMUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLFVBQVU7WUFBRSxPQUFPLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25FLElBQUksY0FBYztRQUFFLE9BQU8sY0FBYyxDQUFDO0lBQzFDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsYUFBc0I7SUFDekQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLGtCQUFrQixFQUFFLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDOUQsSUFBSSxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDcEMsYUFBYSxHQUFHLGFBQWEsSUFBSSxDQUFDLE1BQU0sZUFBZSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDakUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb2x2ZSB0aGUgY3VycmVudCBEYXRhYnJpY2tzIHdvcmtzcGFjZSdzIFVSTCwgbnVtZXJpYyBpZCwgYW5kIGNsaWVudCBmcm9tXG4gKiB0aGUgYWN0aXZlIGV4ZWN1dGlvbiBjb250ZXh0IChBcHBLaXQsIHdoZW4gaW5pdGlhbGl6ZWQpLCBhIGRlZmF1bHRcbiAqIHtAbGluayBXb3Jrc3BhY2VDbGllbnR9LCBvciB0aGUgZW52aXJvbm1lbnQuIFNlcnZlci1vbmx5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbmZpZywgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZnVuY3Rpb25Nb2R1bGUsIG5ldCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbi8qKiBEYXRhYnJpY2tzIHdvcmtzcGFjZSBpZHMgYXJlIGEgMTAtMjAgZGlnaXQgcnVuIGVtYmVkZGVkIGluIHRoZSBob3N0LiAqL1xuY29uc3QgV09SS1NQQUNFX0lEX1JFR0VYID0gL1xcZHsxMCwyMH0vO1xuXG4vKipcbiAqIExhemlseS1jb25zdHJ1Y3RlZCBkZWZhdWx0IGBXb3Jrc3BhY2VDbGllbnRgIChlbnYgLyBwcm9maWxlIGF1dGgpLCBtZW1vaXplZCBzb1xuICogY29uc3RydWN0aW9uIGhhcHBlbnMgYXQgbW9zdCBvbmNlIHBlciBwcm9jZXNzLiBVc2VkIG9ubHkgd2hlbiB0aGVyZSdzIG5vXG4gKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgdG8gYm9ycm93IGEgY2xpZW50IGZyb20uXG4gKi9cbmNvbnN0IGdldERlZmF1bHRXb3Jrc3BhY2VDbGllbnQgPSBmdW5jdGlvbk1vZHVsZS5tZW1vaXplKGFzeW5jICgpID0+IG5ldyBXb3Jrc3BhY2VDbGllbnQoe30pKTtcblxuLyoqXG4gKiBUaGUgQXBwS2l0IGV4ZWN1dGlvbi1jb250ZXh0IHdvcmtzcGFjZSBjbGllbnQgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICogYHVuZGVmaW5lZGAuIE5ldmVyIGNvbnN0cnVjdHMgYSBmYWxsYmFjayBjbGllbnQgYW5kIG5ldmVyIHRocm93cyBmb3IgYVxuICogbWlzc2luZyBBcHBLaXQgc2NvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlHZXRXb3Jrc3BhY2VDbGllbnQoKTogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudCBhcyBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHtAbGluayBXb3Jrc3BhY2VDbGllbnR9OiB7QGxpbmsgdHJ5R2V0V29ya3NwYWNlQ2xpZW50fSBmaXJzdCwgZWxzZVxuICogYSBtZW1vaXplZCBkZWZhdWx0IGNsaWVudCBmcm9tIGVudiAvIHByb2ZpbGUgYXV0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZUNsaWVudCgpOiBQcm9taXNlPFdvcmtzcGFjZUNsaWVudD4ge1xuICByZXR1cm4gdHJ5R2V0V29ya3NwYWNlQ2xpZW50KCkgPz8gKGF3YWl0IGdldERlZmF1bHRXb3Jrc3BhY2VDbGllbnQoKSk7XG59XG5cbi8qKlxuICogVGhlIGFjdGl2ZSB3b3Jrc3BhY2UgYENvbmZpZ2A6IHRoZSBBcHBLaXQgZXhlY3V0aW9uLWNvbnRleHQgY2xpZW50J3MgY29uZmlnXG4gKiB3aGVuIEFwcEtpdCBpcyBpbml0aWFsaXplZCwgZWxzZSB0aGUgZGVmYXVsdCBjbGllbnQncy4gUmV0dXJucyBgdW5kZWZpbmVkYFxuICogKG5ldmVyIHRocm93cykgd2hlbiBuZWl0aGVyIGlzIGF2YWlsYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlQ29uZmlnKCk6IFByb21pc2U8Q29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSkuY29uZmlnO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3VycmVudCBEYXRhYnJpY2tzIHVzZXJuYW1lIGZvciB3b3Jrc3BhY2UgaG9tZSBwYXRoc1xuICogKGAvV29ya3NwYWNlL1VzZXJzLzx1c2VyTmFtZT5gKS5cbiAqXG4gKiBQcmVmZXJzIGB1c2VyTmFtZWAgb24gdGhlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gKiBjYWxscyBgY3VycmVudFVzZXIubWUoKWAgb24ge0BsaW5rIGNsaWVudH0gKG9yIHtAbGluayBnZXRXb3Jrc3BhY2VDbGllbnR9KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyTmFtZShjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb250ZXh0VXNlciA9IHJlYWRDb250ZXh0VXNlck5hbWUoYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4gIGlmIChjb250ZXh0VXNlcikgcmV0dXJuIGNvbnRleHRVc2VyO1xuXG4gIGNvbnN0IHJlc29sdmVkID0gY2xpZW50ID8/IChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSk7XG4gIGNvbnN0IG1lID0gYXdhaXQgcmVzb2x2ZWQuY3VycmVudFVzZXIubWUoKTtcbiAgY29uc3QgdXNlck5hbWUgPSBtZS51c2VyTmFtZT8udHJpbSgpO1xuICBpZiAoIXVzZXJOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBjdXJyZW50VXNlci5tZSgpIGRpZCBub3QgcmV0dXJuIGEgdXNlck5hbWVcIik7XG4gIH1cbiAgcmV0dXJuIHVzZXJOYW1lO1xufVxuXG4vKiogQmVzdC1lZmZvcnQgYHVzZXJOYW1lYCBvZmYgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IChzaGFwZSB2YXJpZXMgYnkgbW9kZSkuICovXG5mdW5jdGlvbiByZWFkQ29udGV4dFVzZXJOYW1lKGN0eDogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgY3R4ICE9PSBcIm9iamVjdFwiIHx8IGN0eCA9PT0gbnVsbCB8fCAhKFwidXNlck5hbWVcIiBpbiBjdHgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IChjdHggYXMgeyB1c2VyTmFtZT86IHVua25vd24gfSkudXNlck5hbWU7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpID8gdmFsdWUudHJpbSgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGhvc3QgYXMgYSBgbmV0LlVybEJ1aWxkZXJgOiB0aGUgd29ya3NwYWNlXG4gKiBgQ29uZmlnYCBob3N0IGZpcnN0LCB0aGVuIHRoZSBgREFUQUJSSUNLU19IT1NUYCBlbnYgdmFyLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlVXJsKCk6IFByb21pc2U8bmV0LlVybEJ1aWxkZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0V29ya3NwYWNlQ29uZmlnKCk7XG4gIGlmIChjb25maWcpIHtcbiAgICBjb25zdCBjb25maWdIb3N0ID0gbmV0LnVybEJ1aWxkZXIoYXdhaXQgY29uZmlnLmdldEhvc3QoKSk7XG4gICAgaWYgKGNvbmZpZ0hvc3QpIHJldHVybiBjb25maWdIb3N0O1xuICB9XG4gIGNvbnN0IGRhdGFicmlja3NIb3N0ID0gbmV0LnVybEJ1aWxkZXIocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUKTtcbiAgaWYgKGRhdGFicmlja3NIb3N0KSByZXR1cm4gZGF0YWJyaWNrc0hvc3Q7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbnVtZXJpYyB3b3Jrc3BhY2UgaWQ6IHRoZSB3b3Jrc3BhY2UgYENvbmZpZ2AncyBgd29ya3NwYWNlSWRgXG4gKiBmaXJzdCwgZWxzZSB0aGUgMTAtMjAgZGlnaXQgcnVuIG9mIGB3b3Jrc3BhY2VIb3N0YCAoZGVmYXVsdGluZyB0b1xuICoge0BsaW5rIGdldFdvcmtzcGFjZVVybH0ncyBob3N0KS4gYHVuZGVmaW5lZGAgd2hlbiBuZWl0aGVyIHlpZWxkcyBhbiBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZUlkKHdvcmtzcGFjZUhvc3Q/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB3b3Jrc3BhY2VJZCA9IChhd2FpdCBnZXRXb3Jrc3BhY2VDb25maWcoKSk/LndvcmtzcGFjZUlkO1xuICBpZiAod29ya3NwYWNlSWQpIHJldHVybiB3b3Jrc3BhY2VJZDtcbiAgd29ya3NwYWNlSG9zdCA9IHdvcmtzcGFjZUhvc3QgPz8gKGF3YWl0IGdldFdvcmtzcGFjZVVybCgpKT8uaG9zdDtcbiAgaWYgKHdvcmtzcGFjZUhvc3QpIHtcbiAgICBjb25zdCBtYXRjaCA9IHdvcmtzcGFjZUhvc3QubWF0Y2goV09SS1NQQUNFX0lEX1JFR0VYKT8uWzBdO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"root":["../src/cloud.ts","../src/net.ts","../src/workspace.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/cloud.ts","../src/databricks-fs.ts","../src/databricks-path.ts","../src/net.ts","../src/workspace.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -12,16 +12,17 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@databricks/sdk-experimental": "^0.17.0",
15
- "@dbx-tools/appkit": "0.6.9",
16
- "@dbx-tools/shared-core": "0.6.9",
17
- "@dbx-tools/core": "0.6.9"
15
+ "@dbx-tools/appkit": "0.6.10",
16
+ "@dbx-tools/shared-core": "0.6.10",
17
+ "@dbx-tools/core": "0.6.10",
18
+ "@dbx-tools/shared-fs": "0.6.10"
18
19
  },
19
20
  "main": "./lib/index.js",
20
21
  "license": "UNLICENSED",
21
22
  "publishConfig": {
22
23
  "access": "public"
23
24
  },
24
- "version": "0.6.9",
25
+ "version": "0.6.10",
25
26
  "types": "./lib/index.d.ts",
26
27
  "type": "module",
27
28
  "exports": {