@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.
- package/README.md +40 -1
- package/index.ts +8 -3
- package/lib/index.d.ts +8 -3
- package/lib/index.js +7 -4
- package/lib/src/databricks-fs.d.ts +93 -0
- package/lib/src/databricks-fs.js +330 -0
- package/lib/src/databricks-path.d.ts +67 -0
- package/lib/src/databricks-path.js +113 -0
- package/lib/src/workspace.d.ts +23 -3
- package/lib/src/workspace.js +50 -13
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
- package/src/databricks-fs.ts +444 -0
- package/src/databricks-path.ts +157 -0
- package/src/workspace.ts +51 -11
|
@@ -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
|
package/lib/src/workspace.d.ts
CHANGED
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolve the current Databricks workspace's URL
|
|
3
|
-
* execution context (AppKit, when initialized), a default
|
|
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`.
|
package/lib/src/workspace.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolve the current Databricks workspace's URL
|
|
3
|
-
* execution context (AppKit, when initialized), a default
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsMkVBQTJFO0FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBRXZDOzs7O0dBSUc7QUFDSCxNQUFNLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTlGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU8sTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBcUMsQ0FBQztBQUNoRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsT0FBTyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsTUFBTSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsa0JBQWtCO0lBQy9CLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxNQUFNLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxNQUF3QjtJQUMvRCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBRXBDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixTQUFTLG1CQUFtQixDQUFDLEdBQVk7SUFDdkMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RGLE1BQU0sS0FBSyxHQUFJLEdBQThCLENBQUMsUUFBUSxDQUFDO0lBQ3ZELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDOUUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZTtJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7SUFDMUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLFVBQVU7WUFBRSxPQUFPLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25FLElBQUksY0FBYztRQUFFLE9BQU8sY0FBYyxDQUFDO0lBQzFDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsYUFBc0I7SUFDekQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLGtCQUFrQixFQUFFLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDOUQsSUFBSSxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDcEMsYUFBYSxHQUFHLGFBQWEsSUFBSSxDQUFDLE1BQU0sZUFBZSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDakUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb2x2ZSB0aGUgY3VycmVudCBEYXRhYnJpY2tzIHdvcmtzcGFjZSdzIFVSTCwgbnVtZXJpYyBpZCwgYW5kIGNsaWVudCBmcm9tXG4gKiB0aGUgYWN0aXZlIGV4ZWN1dGlvbiBjb250ZXh0IChBcHBLaXQsIHdoZW4gaW5pdGlhbGl6ZWQpLCBhIGRlZmF1bHRcbiAqIHtAbGluayBXb3Jrc3BhY2VDbGllbnR9LCBvciB0aGUgZW52aXJvbm1lbnQuIFNlcnZlci1vbmx5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbmZpZywgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZnVuY3Rpb25Nb2R1bGUsIG5ldCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbi8qKiBEYXRhYnJpY2tzIHdvcmtzcGFjZSBpZHMgYXJlIGEgMTAtMjAgZGlnaXQgcnVuIGVtYmVkZGVkIGluIHRoZSBob3N0LiAqL1xuY29uc3QgV09SS1NQQUNFX0lEX1JFR0VYID0gL1xcZHsxMCwyMH0vO1xuXG4vKipcbiAqIExhemlseS1jb25zdHJ1Y3RlZCBkZWZhdWx0IGBXb3Jrc3BhY2VDbGllbnRgIChlbnYgLyBwcm9maWxlIGF1dGgpLCBtZW1vaXplZCBzb1xuICogY29uc3RydWN0aW9uIGhhcHBlbnMgYXQgbW9zdCBvbmNlIHBlciBwcm9jZXNzLiBVc2VkIG9ubHkgd2hlbiB0aGVyZSdzIG5vXG4gKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgdG8gYm9ycm93IGEgY2xpZW50IGZyb20uXG4gKi9cbmNvbnN0IGdldERlZmF1bHRXb3Jrc3BhY2VDbGllbnQgPSBmdW5jdGlvbk1vZHVsZS5tZW1vaXplKGFzeW5jICgpID0+IG5ldyBXb3Jrc3BhY2VDbGllbnQoe30pKTtcblxuLyoqXG4gKiBUaGUgQXBwS2l0IGV4ZWN1dGlvbi1jb250ZXh0IHdvcmtzcGFjZSBjbGllbnQgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICogYHVuZGVmaW5lZGAuIE5ldmVyIGNvbnN0cnVjdHMgYSBmYWxsYmFjayBjbGllbnQgYW5kIG5ldmVyIHRocm93cyBmb3IgYVxuICogbWlzc2luZyBBcHBLaXQgc2NvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlHZXRXb3Jrc3BhY2VDbGllbnQoKTogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk/LmNsaWVudCBhcyBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHtAbGluayBXb3Jrc3BhY2VDbGllbnR9OiB7QGxpbmsgdHJ5R2V0V29ya3NwYWNlQ2xpZW50fSBmaXJzdCwgZWxzZVxuICogYSBtZW1vaXplZCBkZWZhdWx0IGNsaWVudCBmcm9tIGVudiAvIHByb2ZpbGUgYXV0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZUNsaWVudCgpOiBQcm9taXNlPFdvcmtzcGFjZUNsaWVudD4ge1xuICByZXR1cm4gdHJ5R2V0V29ya3NwYWNlQ2xpZW50KCkgPz8gKGF3YWl0IGdldERlZmF1bHRXb3Jrc3BhY2VDbGllbnQoKSk7XG59XG5cbi8qKlxuICogVGhlIGFjdGl2ZSB3b3Jrc3BhY2UgYENvbmZpZ2A6IHRoZSBBcHBLaXQgZXhlY3V0aW9uLWNvbnRleHQgY2xpZW50J3MgY29uZmlnXG4gKiB3aGVuIEFwcEtpdCBpcyBpbml0aWFsaXplZCwgZWxzZSB0aGUgZGVmYXVsdCBjbGllbnQncy4gUmV0dXJucyBgdW5kZWZpbmVkYFxuICogKG5ldmVyIHRocm93cykgd2hlbiBuZWl0aGVyIGlzIGF2YWlsYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlQ29uZmlnKCk6IFByb21pc2U8Q29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSkuY29uZmlnO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3VycmVudCBEYXRhYnJpY2tzIHVzZXJuYW1lIGZvciB3b3Jrc3BhY2UgaG9tZSBwYXRoc1xuICogKGAvV29ya3NwYWNlL1VzZXJzLzx1c2VyTmFtZT5gKS5cbiAqXG4gKiBQcmVmZXJzIGB1c2VyTmFtZWAgb24gdGhlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gKiBjYWxscyBgY3VycmVudFVzZXIubWUoKWAgb24ge0BsaW5rIGNsaWVudH0gKG9yIHtAbGluayBnZXRXb3Jrc3BhY2VDbGllbnR9KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyTmFtZShjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb250ZXh0VXNlciA9IHJlYWRDb250ZXh0VXNlck5hbWUoYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4gIGlmIChjb250ZXh0VXNlcikgcmV0dXJuIGNvbnRleHRVc2VyO1xuXG4gIGNvbnN0IHJlc29sdmVkID0gY2xpZW50ID8/IChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSk7XG4gIGNvbnN0IG1lID0gYXdhaXQgcmVzb2x2ZWQuY3VycmVudFVzZXIubWUoKTtcbiAgY29uc3QgdXNlck5hbWUgPSBtZS51c2VyTmFtZT8udHJpbSgpO1xuICBpZiAoIXVzZXJOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBjdXJyZW50VXNlci5tZSgpIGRpZCBub3QgcmV0dXJuIGEgdXNlck5hbWVcIik7XG4gIH1cbiAgcmV0dXJuIHVzZXJOYW1lO1xufVxuXG4vKiogQmVzdC1lZmZvcnQgYHVzZXJOYW1lYCBvZmYgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IChzaGFwZSB2YXJpZXMgYnkgbW9kZSkuICovXG5mdW5jdGlvbiByZWFkQ29udGV4dFVzZXJOYW1lKGN0eDogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgY3R4ICE9PSBcIm9iamVjdFwiIHx8IGN0eCA9PT0gbnVsbCB8fCAhKFwidXNlck5hbWVcIiBpbiBjdHgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IChjdHggYXMgeyB1c2VyTmFtZT86IHVua25vd24gfSkudXNlck5hbWU7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpID8gdmFsdWUudHJpbSgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGhvc3QgYXMgYSBgbmV0LlVybEJ1aWxkZXJgOiB0aGUgd29ya3NwYWNlXG4gKiBgQ29uZmlnYCBob3N0IGZpcnN0LCB0aGVuIHRoZSBgREFUQUJSSUNLU19IT1NUYCBlbnYgdmFyLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlVXJsKCk6IFByb21pc2U8bmV0LlVybEJ1aWxkZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0V29ya3NwYWNlQ29uZmlnKCk7XG4gIGlmIChjb25maWcpIHtcbiAgICBjb25zdCBjb25maWdIb3N0ID0gbmV0LnVybEJ1aWxkZXIoYXdhaXQgY29uZmlnLmdldEhvc3QoKSk7XG4gICAgaWYgKGNvbmZpZ0hvc3QpIHJldHVybiBjb25maWdIb3N0O1xuICB9XG4gIGNvbnN0IGRhdGFicmlja3NIb3N0ID0gbmV0LnVybEJ1aWxkZXIocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUKTtcbiAgaWYgKGRhdGFicmlja3NIb3N0KSByZXR1cm4gZGF0YWJyaWNrc0hvc3Q7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbnVtZXJpYyB3b3Jrc3BhY2UgaWQ6IHRoZSB3b3Jrc3BhY2UgYENvbmZpZ2AncyBgd29ya3NwYWNlSWRgXG4gKiBmaXJzdCwgZWxzZSB0aGUgMTAtMjAgZGlnaXQgcnVuIG9mIGB3b3Jrc3BhY2VIb3N0YCAoZGVmYXVsdGluZyB0b1xuICoge0BsaW5rIGdldFdvcmtzcGFjZVVybH0ncyBob3N0KS4gYHVuZGVmaW5lZGAgd2hlbiBuZWl0aGVyIHlpZWxkcyBhbiBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZUlkKHdvcmtzcGFjZUhvc3Q/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB3b3Jrc3BhY2VJZCA9IChhd2FpdCBnZXRXb3Jrc3BhY2VDb25maWcoKSk/LndvcmtzcGFjZUlkO1xuICBpZiAod29ya3NwYWNlSWQpIHJldHVybiB3b3Jrc3BhY2VJZDtcbiAgd29ya3NwYWNlSG9zdCA9IHdvcmtzcGFjZUhvc3QgPz8gKGF3YWl0IGdldFdvcmtzcGFjZVVybCgpKT8uaG9zdDtcbiAgaWYgKHdvcmtzcGFjZUhvc3QpIHtcbiAgICBjb25zdCBtYXRjaCA9IHdvcmtzcGFjZUhvc3QubWF0Y2goV09SS1NQQUNFX0lEX1JFR0VYKT8uWzBdO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -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.
|
|
16
|
-
"@dbx-tools/shared-core": "0.6.
|
|
17
|
-
"@dbx-tools/core": "0.6.
|
|
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.
|
|
25
|
+
"version": "0.6.10",
|
|
25
26
|
"types": "./lib/index.d.ts",
|
|
26
27
|
"type": "module",
|
|
27
28
|
"exports": {
|