rivet-design 0.16.2 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/README.npm.md +8 -2
- package/bin/rivet.js +15 -7
- package/dist/agent-variants/variantContext.d.ts +1 -0
- package/dist/agent-variants/variantContext.d.ts.map +1 -1
- package/dist/agent-variants/variantContext.js +1 -1
- package/dist/agent-variants/variantContext.js.map +1 -1
- package/dist/cli/commandNames.d.ts +2 -0
- package/dist/cli/commandNames.d.ts.map +1 -1
- package/dist/cli/commandNames.js +16 -1
- package/dist/cli/commandNames.js.map +1 -1
- package/dist/cli/commands/libraryOpen.d.ts +10 -0
- package/dist/cli/commands/libraryOpen.d.ts.map +1 -0
- package/dist/cli/commands/libraryOpen.js +126 -0
- package/dist/cli/commands/libraryOpen.js.map +1 -0
- package/dist/cli/commands/open.d.ts +39 -0
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +35 -21
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +33 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/router.d.ts.map +1 -1
- package/dist/cli/router.js +34 -3
- package/dist/cli/router.js.map +1 -1
- package/dist/cli/serverHandshake.d.ts +7 -5
- package/dist/cli/serverHandshake.d.ts.map +1 -1
- package/dist/cli/serverHandshake.js +16 -12
- package/dist/cli/serverHandshake.js.map +1 -1
- package/dist/install/installationChannel.d.ts +4 -0
- package/dist/install/installationChannel.d.ts.map +1 -0
- package/dist/install/installationChannel.js +13 -0
- package/dist/install/installationChannel.js.map +1 -0
- package/dist/library/HubClient.d.ts +12 -0
- package/dist/library/HubClient.d.ts.map +1 -0
- package/dist/library/HubClient.js +109 -0
- package/dist/library/HubClient.js.map +1 -0
- package/dist/library/HubServer.d.ts +16 -0
- package/dist/library/HubServer.d.ts.map +1 -0
- package/dist/library/HubServer.js +95 -0
- package/dist/library/HubServer.js.map +1 -0
- package/dist/library/StaticPreviewServer.d.ts +7 -0
- package/dist/library/StaticPreviewServer.d.ts.map +1 -0
- package/dist/library/StaticPreviewServer.js +18 -0
- package/dist/library/StaticPreviewServer.js.map +1 -0
- package/dist/library/http.d.ts +11 -0
- package/dist/library/http.d.ts.map +1 -0
- package/dist/library/http.js +31 -0
- package/dist/library/http.js.map +1 -0
- package/dist/library/importFiles.d.ts +18 -0
- package/dist/library/importFiles.d.ts.map +1 -0
- package/dist/library/importFiles.js +184 -0
- package/dist/library/importFiles.js.map +1 -0
- package/dist/proxy-middleware/preview-bridge.d.ts.map +1 -1
- package/dist/proxy-middleware/preview-bridge.js +6 -16
- package/dist/proxy-middleware/preview-bridge.js.map +1 -1
- package/dist/routes/account.d.ts +4 -0
- package/dist/routes/account.d.ts.map +1 -0
- package/dist/routes/account.js +53 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/agentVariants.d.ts +2 -13
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +53 -79
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/library/app.d.ts +8 -0
- package/dist/routes/library/app.d.ts.map +1 -0
- package/dist/routes/library/app.js +26 -0
- package/dist/routes/library/app.js.map +1 -0
- package/dist/routes/library/index.d.ts +5 -0
- package/dist/routes/library/index.d.ts.map +1 -0
- package/dist/routes/library/index.js +32 -0
- package/dist/routes/library/index.js.map +1 -0
- package/dist/routes/library/middleware.d.ts +9 -0
- package/dist/routes/library/middleware.d.ts.map +1 -0
- package/dist/routes/library/middleware.js +58 -0
- package/dist/routes/library/middleware.js.map +1 -0
- package/dist/routes/library/navigation.d.ts +5 -0
- package/dist/routes/library/navigation.d.ts.map +1 -0
- package/dist/routes/library/navigation.js +39 -0
- package/dist/routes/library/navigation.js.map +1 -0
- package/dist/routes/library/projects.d.ts +5 -0
- package/dist/routes/library/projects.d.ts.map +1 -0
- package/dist/routes/library/projects.js +42 -0
- package/dist/routes/library/projects.js.map +1 -0
- package/dist/routes/library/schemas.d.ts +23 -0
- package/dist/routes/library/schemas.d.ts.map +1 -0
- package/dist/routes/library/schemas.js +10 -0
- package/dist/routes/library/schemas.js.map +1 -0
- package/dist/routes/library/staticPreview.d.ts +4 -0
- package/dist/routes/library/staticPreview.d.ts.map +1 -0
- package/dist/routes/library/staticPreview.js +39 -0
- package/dist/routes/library/staticPreview.js.map +1 -0
- package/dist/routes/library/types.d.ts +22 -0
- package/dist/routes/library/types.d.ts.map +1 -0
- package/dist/routes/library/types.js +3 -0
- package/dist/routes/library/types.js.map +1 -0
- package/dist/routes/library/variants.d.ts +5 -0
- package/dist/routes/library/variants.d.ts.map +1 -0
- package/dist/routes/library/variants.js +35 -0
- package/dist/routes/library/variants.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -30
- package/dist/server.js.map +1 -1
- package/dist/services/HistoryReplayService.js +1 -1
- package/dist/services/HistoryReplayService.js.map +1 -1
- package/dist/services/HubDiscovery.d.ts +46 -0
- package/dist/services/HubDiscovery.d.ts.map +1 -0
- package/dist/services/HubDiscovery.js +58 -0
- package/dist/services/HubDiscovery.js.map +1 -0
- package/dist/services/HubNavigation.d.ts +36 -0
- package/dist/services/HubNavigation.d.ts.map +1 -0
- package/dist/services/HubNavigation.js +76 -0
- package/dist/services/HubNavigation.js.map +1 -0
- package/dist/services/ProjectCardPreviews.d.ts +27 -0
- package/dist/services/ProjectCardPreviews.d.ts.map +1 -0
- package/dist/services/ProjectCardPreviews.js +112 -0
- package/dist/services/ProjectCardPreviews.js.map +1 -0
- package/dist/services/ProjectFolderPicker.d.ts +20 -0
- package/dist/services/ProjectFolderPicker.d.ts.map +1 -0
- package/dist/services/ProjectFolderPicker.js +174 -0
- package/dist/services/ProjectFolderPicker.js.map +1 -0
- package/dist/services/ProjectImport.d.ts +13 -0
- package/dist/services/ProjectImport.d.ts.map +1 -0
- package/dist/services/ProjectImport.js +226 -0
- package/dist/services/ProjectImport.js.map +1 -0
- package/dist/services/ProjectLibrary.d.ts +74 -0
- package/dist/services/ProjectLibrary.d.ts.map +1 -0
- package/dist/services/ProjectLibrary.js +261 -0
- package/dist/services/ProjectLibrary.js.map +1 -0
- package/dist/services/ProjectMetadataStore.d.ts +6 -19
- package/dist/services/ProjectMetadataStore.d.ts.map +1 -1
- package/dist/services/ProjectMetadataStore.js +29 -147
- package/dist/services/ProjectMetadataStore.js.map +1 -1
- package/dist/services/ProjectRegistry.d.ts +80 -0
- package/dist/services/ProjectRegistry.d.ts.map +1 -0
- package/dist/services/ProjectRegistry.js +147 -0
- package/dist/services/ProjectRegistry.js.map +1 -0
- package/dist/services/ProjectRuntimeService.d.ts +18 -0
- package/dist/services/ProjectRuntimeService.d.ts.map +1 -0
- package/dist/services/ProjectRuntimeService.js +143 -0
- package/dist/services/ProjectRuntimeService.js.map +1 -0
- package/dist/services/ProjectScreenshotService.d.ts +15 -0
- package/dist/services/ProjectScreenshotService.d.ts.map +1 -0
- package/dist/services/ProjectScreenshotService.js +90 -0
- package/dist/services/ProjectScreenshotService.js.map +1 -0
- package/dist/services/ProjectStorage.d.ts +20 -0
- package/dist/services/ProjectStorage.d.ts.map +1 -0
- package/dist/services/ProjectStorage.js +41 -0
- package/dist/services/ProjectStorage.js.map +1 -0
- package/dist/services/StaticLibraryPreviews.d.ts +21 -0
- package/dist/services/StaticLibraryPreviews.d.ts.map +1 -0
- package/dist/services/StaticLibraryPreviews.js +61 -0
- package/dist/services/StaticLibraryPreviews.js.map +1 -0
- package/dist/services/TelemetryService.d.ts +7 -0
- package/dist/services/TelemetryService.d.ts.map +1 -1
- package/dist/services/TelemetryService.js +7 -1
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/services/TreeStore.d.ts +8 -3
- package/dist/services/TreeStore.d.ts.map +1 -1
- package/dist/services/TreeStore.js +39 -18
- package/dist/services/TreeStore.js.map +1 -1
- package/dist/services/VariantGenerationService.d.ts +5 -0
- package/dist/services/VariantGenerationService.d.ts.map +1 -1
- package/dist/services/VariantGenerationService.js +13 -1
- package/dist/services/VariantGenerationService.js.map +1 -1
- package/dist/services/VariantHistoryService.d.ts +18 -162
- package/dist/services/VariantHistoryService.d.ts.map +1 -1
- package/dist/services/VariantHistoryService.js +187 -45
- package/dist/services/VariantHistoryService.js.map +1 -1
- package/dist/services/VariantRunService.d.ts +3 -0
- package/dist/services/VariantRunService.d.ts.map +1 -1
- package/dist/services/VariantRunService.js +2 -0
- package/dist/services/VariantRunService.js.map +1 -1
- package/dist/services/VariantsRuntime.d.ts +4 -0
- package/dist/services/VariantsRuntime.d.ts.map +1 -1
- package/dist/services/VariantsRuntime.js +6 -1
- package/dist/services/VariantsRuntime.js.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts +2 -0
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +1 -0
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/services/historyRoots.d.ts +14 -0
- package/dist/services/historyRoots.d.ts.map +1 -0
- package/dist/services/historyRoots.js +44 -0
- package/dist/services/historyRoots.js.map +1 -0
- package/dist/services/libraryErrors.d.ts +7 -0
- package/dist/services/libraryErrors.d.ts.map +1 -0
- package/dist/services/libraryErrors.js +14 -0
- package/dist/services/libraryErrors.js.map +1 -0
- package/dist/storage/library/BundleMetadataStore.d.ts +53 -0
- package/dist/storage/library/BundleMetadataStore.d.ts.map +1 -0
- package/dist/storage/library/BundleMetadataStore.js +317 -0
- package/dist/storage/library/BundleMetadataStore.js.map +1 -0
- package/dist/storage/library/CoordinatorRecords.d.ts +25 -0
- package/dist/storage/library/CoordinatorRecords.d.ts.map +1 -0
- package/dist/storage/library/CoordinatorRecords.js +84 -0
- package/dist/storage/library/CoordinatorRecords.js.map +1 -0
- package/dist/storage/library/ProjectPreviewCache.d.ts +34 -0
- package/dist/storage/library/ProjectPreviewCache.d.ts.map +1 -0
- package/dist/storage/library/ProjectPreviewCache.js +62 -0
- package/dist/storage/library/ProjectPreviewCache.js.map +1 -0
- package/dist/storage/library/ProjectRecords.d.ts +64 -0
- package/dist/storage/library/ProjectRecords.d.ts.map +1 -0
- package/dist/storage/library/ProjectRecords.js +139 -0
- package/dist/storage/library/ProjectRecords.js.map +1 -0
- package/dist/storage/library/database.d.ts +13 -0
- package/dist/storage/library/database.d.ts.map +1 -0
- package/dist/storage/library/database.js +106 -0
- package/dist/storage/library/database.js.map +1 -0
- package/dist/storage/library/migrations.d.ts +5 -0
- package/dist/storage/library/migrations.d.ts.map +1 -0
- package/dist/storage/library/migrations.js +61 -0
- package/dist/storage/library/migrations.js.map +1 -0
- package/dist/storage/library/schema/bundle.d.ts +734 -0
- package/dist/storage/library/schema/bundle.d.ts.map +1 -0
- package/dist/storage/library/schema/bundle.js +79 -0
- package/dist/storage/library/schema/bundle.js.map +1 -0
- package/dist/storage/library/schema/coordinator.d.ts +72 -0
- package/dist/storage/library/schema/coordinator.d.ts.map +1 -0
- package/dist/storage/library/schema/coordinator.js +12 -0
- package/dist/storage/library/schema/coordinator.js.map +1 -0
- package/dist/storage/library/schema/registry.d.ts +198 -0
- package/dist/storage/library/schema/registry.d.ts.map +1 -0
- package/dist/storage/library/schema/registry.js +32 -0
- package/dist/storage/library/schema/registry.js.map +1 -0
- package/dist/storage/library/sourcePresentation.d.ts +3 -0
- package/dist/storage/library/sourcePresentation.d.ts.map +1 -0
- package/dist/storage/library/sourcePresentation.js +70 -0
- package/dist/storage/library/sourcePresentation.js.map +1 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts +41 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts.map +1 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.js +120 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.js.map +1 -0
- package/dist/storage/project-metadata/database.d.ts +12 -0
- package/dist/storage/project-metadata/database.d.ts.map +1 -0
- package/dist/storage/project-metadata/database.js +79 -0
- package/dist/storage/project-metadata/database.js.map +1 -0
- package/dist/{services/projectMetadataMigrations.d.ts → storage/project-metadata/migrations.d.ts} +1 -1
- package/dist/storage/project-metadata/migrations.d.ts.map +1 -0
- package/dist/{services/projectMetadataMigrations.js → storage/project-metadata/migrations.js} +1 -1
- package/dist/storage/project-metadata/migrations.js.map +1 -0
- package/dist/storage/project-metadata/schema.d.ts +288 -0
- package/dist/storage/project-metadata/schema.d.ts.map +1 -0
- package/dist/storage/project-metadata/schema.js +35 -0
- package/dist/storage/project-metadata/schema.js.map +1 -0
- package/dist/types/account.d.ts +8 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +3 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/project-library.d.ts +28 -0
- package/dist/types/project-library.d.ts.map +1 -0
- package/dist/types/project-library.js +3 -0
- package/dist/types/project-library.js.map +1 -0
- package/dist/types/variant-history.d.ts +173 -0
- package/dist/types/variant-history.d.ts.map +1 -0
- package/dist/types/variant-history.js +3 -0
- package/dist/types/variant-history.js.map +1 -0
- package/dist/utils/htmlDocument.d.ts +13 -0
- package/dist/utils/htmlDocument.d.ts.map +1 -0
- package/dist/utils/htmlDocument.js +42 -0
- package/dist/utils/htmlDocument.js.map +1 -0
- package/dist/utils/windowPlacement.d.ts +20 -0
- package/dist/utils/windowPlacement.d.ts.map +1 -0
- package/dist/utils/windowPlacement.js +20 -0
- package/dist/utils/windowPlacement.js.map +1 -0
- package/package.json +10 -3
- package/scripts/verify-node-version.cjs +9 -6
- package/src/ui/dist/assets/LibraryApp-B2MZyxIp.js +16 -0
- package/src/ui/dist/assets/main-1IMq5Huu.css +1 -0
- package/src/ui/dist/assets/main-BId3Sa7r.js +438 -0
- package/src/ui/dist/favicon-16.png +0 -0
- package/src/ui/dist/favicon-32.png +0 -0
- package/src/ui/dist/favicon.ico +0 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/services/projectMetadataMigrations.d.ts.map +0 -1
- package/dist/services/projectMetadataMigrations.js.map +0 -1
- package/src/ui/dist/assets/main-BjwDfDy8.js +0 -423
- package/src/ui/dist/assets/main-Ct1aZend.css +0 -1
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProjectFolderPicker = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const util_1 = require("util");
|
|
12
|
+
const libraryErrors_1 = require("./libraryErrors");
|
|
13
|
+
const windowPlacement_1 = require("../utils/windowPlacement");
|
|
14
|
+
const execute = (0, util_1.promisify)(child_process_1.execFile);
|
|
15
|
+
const PICKER_TIMEOUT_MS = 5 * 60 * 1000;
|
|
16
|
+
const PICKER_OUTPUT_LIMIT = 64 * 1024;
|
|
17
|
+
const PICKER_TITLE = 'Open a Rivet project';
|
|
18
|
+
const MAC_FOLDER_SCRIPT = `
|
|
19
|
+
ObjC.import('AppKit');
|
|
20
|
+
const anchor = $.NSEvent.mouseLocation;
|
|
21
|
+
const application = $.NSApplication.sharedApplication;
|
|
22
|
+
application.setActivationPolicy($.NSApplicationActivationPolicyAccessory);
|
|
23
|
+
application.finishLaunching;
|
|
24
|
+
const panel = $.NSOpenPanel.openPanel;
|
|
25
|
+
panel.canChooseFiles = false;
|
|
26
|
+
panel.canChooseDirectories = true;
|
|
27
|
+
panel.allowsMultipleSelection = false;
|
|
28
|
+
panel.title = 'Open a Rivet project';
|
|
29
|
+
panel.prompt = 'Open';
|
|
30
|
+
const screens = $.NSScreen.screens;
|
|
31
|
+
let screen = $.NSScreen.mainScreen;
|
|
32
|
+
for (let index = 0; index < screens.count; index++) {
|
|
33
|
+
const candidate = screens.objectAtIndex(index);
|
|
34
|
+
if ($.NSPointInRect(anchor, candidate.frame)) {
|
|
35
|
+
screen = candidate;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const visible = screen.visibleFrame;
|
|
40
|
+
const position = (${windowPlacement_1.getWindowTopLeft.toString()})({
|
|
41
|
+
anchor,
|
|
42
|
+
bounds: {
|
|
43
|
+
x: visible.origin.x,
|
|
44
|
+
y: visible.origin.y,
|
|
45
|
+
width: visible.size.width,
|
|
46
|
+
height: visible.size.height,
|
|
47
|
+
},
|
|
48
|
+
size: {
|
|
49
|
+
width: panel.frame.size.width,
|
|
50
|
+
height: panel.frame.size.height,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
panel.setFrameTopLeftPoint($.NSMakePoint(position.x, position.y));
|
|
54
|
+
application.activateIgnoringOtherApps(true);
|
|
55
|
+
panel.makeKeyAndOrderFront(null);
|
|
56
|
+
panel.runModal === $.NSModalResponseOK ? ObjC.unwrap(panel.URL.path) : '';
|
|
57
|
+
`;
|
|
58
|
+
const WINDOWS_FOLDER_SCRIPT = `
|
|
59
|
+
$ErrorActionPreference = 'Stop'
|
|
60
|
+
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
|
61
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
62
|
+
[System.Windows.Forms.Application]::EnableVisualStyles()
|
|
63
|
+
$dialog = [System.Windows.Forms.FolderBrowserDialog]::new()
|
|
64
|
+
$dialog.Description = 'Open a Rivet project'
|
|
65
|
+
try {
|
|
66
|
+
if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
|
|
67
|
+
[Console]::Write($dialog.SelectedPath)
|
|
68
|
+
}
|
|
69
|
+
} finally {
|
|
70
|
+
$dialog.Dispose()
|
|
71
|
+
}`;
|
|
72
|
+
/** Selects host folder dialogs without constructing a shell command from user input. */
|
|
73
|
+
const folderPickerCommands = () => {
|
|
74
|
+
switch (process.platform) {
|
|
75
|
+
case 'darwin':
|
|
76
|
+
return [
|
|
77
|
+
{
|
|
78
|
+
executable: '/usr/bin/osascript',
|
|
79
|
+
args: ['-l', 'JavaScript', '-e', MAC_FOLDER_SCRIPT],
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
case 'win32':
|
|
83
|
+
return [
|
|
84
|
+
{
|
|
85
|
+
executable: 'powershell.exe',
|
|
86
|
+
args: [
|
|
87
|
+
'-NoProfile',
|
|
88
|
+
'-NonInteractive',
|
|
89
|
+
'-STA',
|
|
90
|
+
'-Command',
|
|
91
|
+
WINDOWS_FOLDER_SCRIPT,
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
case 'linux': {
|
|
96
|
+
const zenity = {
|
|
97
|
+
executable: 'zenity',
|
|
98
|
+
args: ['--file-selection', '--directory', '--title', PICKER_TITLE],
|
|
99
|
+
cancelExitCode: 1,
|
|
100
|
+
};
|
|
101
|
+
const kdialog = {
|
|
102
|
+
executable: 'kdialog',
|
|
103
|
+
args: ['--getexistingdirectory', os_1.default.homedir(), '--title', PICKER_TITLE],
|
|
104
|
+
cancelExitCode: 1,
|
|
105
|
+
};
|
|
106
|
+
return process.env.XDG_CURRENT_DESKTOP?.toLowerCase().includes('kde')
|
|
107
|
+
? [kdialog, zenity]
|
|
108
|
+
: [zenity, kdialog];
|
|
109
|
+
}
|
|
110
|
+
default:
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
/** Owns one system folder dialog at a time, independently of project registration. */
|
|
115
|
+
class ProjectFolderPicker {
|
|
116
|
+
active = null;
|
|
117
|
+
commands;
|
|
118
|
+
constructor({ commands = folderPickerCommands() } = {}) {
|
|
119
|
+
this.commands = commands;
|
|
120
|
+
}
|
|
121
|
+
/** Opens the host dialog and returns a verified folder, or null when cancelled. */
|
|
122
|
+
async pick() {
|
|
123
|
+
if (this.active)
|
|
124
|
+
throw new libraryErrors_1.LibraryError('folder_picker_busy', 'A folder picker is already open. Choose a folder or cancel it first.');
|
|
125
|
+
const controller = new AbortController();
|
|
126
|
+
this.active = controller;
|
|
127
|
+
try {
|
|
128
|
+
for (const command of this.commands) {
|
|
129
|
+
let output;
|
|
130
|
+
try {
|
|
131
|
+
const result = await execute(command.executable, command.args, {
|
|
132
|
+
encoding: 'utf8',
|
|
133
|
+
windowsHide: true,
|
|
134
|
+
timeout: PICKER_TIMEOUT_MS,
|
|
135
|
+
maxBuffer: PICKER_OUTPUT_LIMIT,
|
|
136
|
+
signal: controller.signal,
|
|
137
|
+
});
|
|
138
|
+
output = result.stdout;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (controller.signal.aborted)
|
|
142
|
+
return null;
|
|
143
|
+
const failure = error;
|
|
144
|
+
if (failure.code === 'ENOENT')
|
|
145
|
+
continue;
|
|
146
|
+
if (command.cancelExitCode !== undefined &&
|
|
147
|
+
failure.code === command.cancelExitCode &&
|
|
148
|
+
!failure.stderr?.trim())
|
|
149
|
+
return null;
|
|
150
|
+
throw new libraryErrors_1.LibraryError('folder_picker_unavailable', 'Could not open the system folder picker. Try again, or run rivet open --project <path> in a terminal.');
|
|
151
|
+
}
|
|
152
|
+
const selected = output.replace(/\r?\n$/, '');
|
|
153
|
+
if (!selected)
|
|
154
|
+
return null;
|
|
155
|
+
if (!path_1.default.isAbsolute(selected))
|
|
156
|
+
throw new Error('Select an existing folder.');
|
|
157
|
+
const canonical = await promises_1.default.realpath(selected);
|
|
158
|
+
if (!(await promises_1.default.stat(canonical)).isDirectory())
|
|
159
|
+
throw new Error('Select an existing folder.');
|
|
160
|
+
return canonical;
|
|
161
|
+
}
|
|
162
|
+
throw new libraryErrors_1.LibraryError('folder_picker_unavailable', 'No system folder picker is available. On Linux, install Zenity or KDialog, or run rivet open --project <path> in a terminal.');
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
this.active = null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** Dismisses the owned dialog when the coordinator shuts down. */
|
|
169
|
+
close() {
|
|
170
|
+
this.active?.abort();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.ProjectFolderPicker = ProjectFolderPicker;
|
|
174
|
+
//# sourceMappingURL=ProjectFolderPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectFolderPicker.js","sourceRoot":"","sources":["../../src/services/ProjectFolderPicker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ProjectRegistry } from './ProjectRegistry';
|
|
2
|
+
interface ImportOptions {
|
|
3
|
+
registry: ProjectRegistry;
|
|
4
|
+
projectId: string;
|
|
5
|
+
}
|
|
6
|
+
export type ProjectImportResult = {
|
|
7
|
+
status: 'imported' | 'current' | 'deferred' | 'diverged';
|
|
8
|
+
reason?: string;
|
|
9
|
+
};
|
|
10
|
+
/** Copies and verifies a quiescent source before publishing its durable bundle. */
|
|
11
|
+
export declare const importProject: ({ registry, projectId, }: ImportOptions) => Promise<ProjectImportResult>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ProjectImport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectImport.d.ts","sourceRoot":"","sources":["../../src/services/ProjectImport.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASzD,UAAU,aAAa;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAuEF,mFAAmF;AACnF,eAAO,MAAM,aAAa,GAAU,0BAGjC,aAAa,KAAG,OAAO,CAAC,mBAAmB,CAiM7C,CAAC"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.importProject = void 0;
|
|
7
|
+
const sourcePresentation_1 = require("../storage/library/sourcePresentation");
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const historyRoots_1 = require("./historyRoots");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const crypto_1 = require("crypto");
|
|
13
|
+
const serverHandshake_1 = require("../cli/serverHandshake");
|
|
14
|
+
const pid_1 = require("../utils/pid");
|
|
15
|
+
const TreeStore_1 = require("./TreeStore");
|
|
16
|
+
const ProjectStorage_1 = require("./ProjectStorage");
|
|
17
|
+
const BundleMetadataStore_1 = require("../storage/library/BundleMetadataStore");
|
|
18
|
+
const importFiles_1 = require("../library/importFiles");
|
|
19
|
+
const RECEIPT_FILENAME = 'import-receipt.json';
|
|
20
|
+
const RUNTIME_CHANNELS = ['production', 'local'];
|
|
21
|
+
/** Preserves active and uncertain writers rather than attempting to stop their work. */
|
|
22
|
+
const sourceCanWrite = (projectPath, channel) => {
|
|
23
|
+
const discovery = (0, serverHandshake_1.readHandshakeResult)(projectPath, channel);
|
|
24
|
+
if (discovery.status === 'invalid')
|
|
25
|
+
return true;
|
|
26
|
+
if (discovery.status === 'found' && (0, pid_1.isPidAlive)(discovery.handshake.pid))
|
|
27
|
+
return true;
|
|
28
|
+
const lock = path_1.default.join((0, serverHandshake_1.serverRuntimeDirectory)(projectPath, channel), 'server.lock');
|
|
29
|
+
try {
|
|
30
|
+
const holder = Number(fs_1.default.readFileSync(lock, 'utf8'));
|
|
31
|
+
return !Number.isInteger(holder) || holder <= 0 || (0, pid_1.isPidAlive)(holder);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return error.code !== 'ENOENT';
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
/** Verifies every referenced file and snapshot before an imported record is activated. */
|
|
38
|
+
const verifyImportedVariant = async ({ manifest, artifactRoot, trees, projectPath, }) => {
|
|
39
|
+
if (manifest.artifact.kind === 'diff')
|
|
40
|
+
await (0, importFiles_1.verifyArtifactFile)(artifactRoot, manifest.artifact.diffPath);
|
|
41
|
+
if (manifest.artifact.filesPath &&
|
|
42
|
+
!(await promises_1.default.stat(path_1.default.join(artifactRoot, manifest.artifact.filesPath))).isDirectory())
|
|
43
|
+
throw new Error('Missing saved files');
|
|
44
|
+
if (manifest.preview.kind === 'static')
|
|
45
|
+
await (0, importFiles_1.verifyArtifactFile)(artifactRoot, path_1.default.join(manifest.preview.rootPath, manifest.preview.entryPath));
|
|
46
|
+
for (const pointer of [manifest.tree, manifest.base, manifest.parent]) {
|
|
47
|
+
if (!pointer)
|
|
48
|
+
continue;
|
|
49
|
+
const resolved = await trees.resolveRef(projectPath, pointer.commitSha);
|
|
50
|
+
if (!resolved ||
|
|
51
|
+
('treeSha' in pointer && pointer.treeSha !== resolved.treeSha))
|
|
52
|
+
throw new Error(`Missing snapshot: ${pointer.commitSha}`);
|
|
53
|
+
await trees.retainSnapshot(projectPath, pointer.commitSha);
|
|
54
|
+
}
|
|
55
|
+
if (manifest.tree && manifest.serve?.kind === 'static') {
|
|
56
|
+
const extracted = await trees.extractToCache({
|
|
57
|
+
projectPath,
|
|
58
|
+
treeSha: manifest.tree.treeSha,
|
|
59
|
+
commitish: manifest.tree.commitSha,
|
|
60
|
+
});
|
|
61
|
+
await (0, importFiles_1.verifyArtifactFile)(extracted, manifest.serve.entryPath);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
/** Copies and verifies a quiescent source before publishing its durable bundle. */
|
|
65
|
+
const importProject = async ({ registry, projectId, }) => {
|
|
66
|
+
const project = registry.get(projectId);
|
|
67
|
+
const source = path_1.default.join(project.projectPath, '.rivet');
|
|
68
|
+
const nestedRoots = (0, historyRoots_1.nestedFreshSessionWorkdirs)(project.projectPath);
|
|
69
|
+
if (nestedRoots.length > 0) {
|
|
70
|
+
for (const projectPath of nestedRoots)
|
|
71
|
+
registry.attachHistoryRoot({ projectId, projectPath });
|
|
72
|
+
return {
|
|
73
|
+
status: 'deferred',
|
|
74
|
+
reason: 'This workspace contains nested project histories; they remain readable in their original locations',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (!project.isAvailable)
|
|
78
|
+
return {
|
|
79
|
+
status: project.storageKind === 'bundle' ? 'current' : 'deferred',
|
|
80
|
+
reason: 'Workspace is unavailable',
|
|
81
|
+
};
|
|
82
|
+
if (RUNTIME_CHANNELS.some((channel) => sourceCanWrite(project.projectPath, channel)))
|
|
83
|
+
return {
|
|
84
|
+
status: 'deferred',
|
|
85
|
+
reason: 'A source runtime or opener may still write history',
|
|
86
|
+
};
|
|
87
|
+
const locks = [];
|
|
88
|
+
try {
|
|
89
|
+
for (const channel of RUNTIME_CHANNELS) {
|
|
90
|
+
const lock = (0, serverHandshake_1.acquireStartLock)(project.projectPath, channel);
|
|
91
|
+
if (!lock) {
|
|
92
|
+
return {
|
|
93
|
+
status: 'deferred',
|
|
94
|
+
reason: 'A project opener holds the startup lock',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
locks.push(lock);
|
|
98
|
+
}
|
|
99
|
+
const hasWriter = RUNTIME_CHANNELS.some((channel) => {
|
|
100
|
+
const discovery = (0, serverHandshake_1.readHandshakeResult)(project.projectPath, channel);
|
|
101
|
+
return (discovery.status === 'invalid' ||
|
|
102
|
+
(discovery.status === 'found' && (0, pid_1.isPidAlive)(discovery.handshake.pid)));
|
|
103
|
+
});
|
|
104
|
+
if (hasWriter)
|
|
105
|
+
return { status: 'deferred', reason: 'Source runtime became available' };
|
|
106
|
+
const fingerprint = await (0, importFiles_1.sourceFingerprint)(source);
|
|
107
|
+
if (project.storageKind === 'bundle') {
|
|
108
|
+
return {
|
|
109
|
+
status: project.sourceFingerprint === fingerprint ? 'current' : 'diverged',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const destination = registry.bundleDirectory(projectId);
|
|
113
|
+
if (fs_1.default.existsSync(destination)) {
|
|
114
|
+
const receipt = JSON.parse(await promises_1.default.readFile(path_1.default.join(destination, RECEIPT_FILENAME), 'utf8'));
|
|
115
|
+
if (receipt.projectId !== projectId ||
|
|
116
|
+
receipt.sourceFingerprint !== fingerprint)
|
|
117
|
+
return {
|
|
118
|
+
status: 'diverged',
|
|
119
|
+
reason: 'An unpublished bundle differs from this source',
|
|
120
|
+
};
|
|
121
|
+
const metadata = await BundleMetadataStore_1.BundleMetadataStore.open({
|
|
122
|
+
directory: destination,
|
|
123
|
+
project,
|
|
124
|
+
});
|
|
125
|
+
try {
|
|
126
|
+
const trees = new TreeStore_1.TreeStore(new ProjectStorage_1.ProjectStorage([
|
|
127
|
+
{
|
|
128
|
+
projectPath: project.projectPath,
|
|
129
|
+
dataDirectory: destination,
|
|
130
|
+
cacheDirectory: path_1.default.join(registry.root, 'cache', projectId),
|
|
131
|
+
},
|
|
132
|
+
]));
|
|
133
|
+
const manifests = metadata.listVariants();
|
|
134
|
+
if (manifests.length !== (await (0, importFiles_1.readSourceManifests)(source)).length)
|
|
135
|
+
throw new Error('Incomplete published bundle');
|
|
136
|
+
for (const manifest of manifests) {
|
|
137
|
+
const relative = metadata.artifactPath(manifest.sessionId, manifest.variantId);
|
|
138
|
+
if (!relative)
|
|
139
|
+
throw new Error('Missing imported artifact path');
|
|
140
|
+
const artifactRoot = path_1.default.resolve(destination, relative);
|
|
141
|
+
if (!artifactRoot.startsWith(destination + path_1.default.sep))
|
|
142
|
+
throw new Error('Artifact escapes bundle');
|
|
143
|
+
await verifyImportedVariant({
|
|
144
|
+
manifest,
|
|
145
|
+
artifactRoot,
|
|
146
|
+
trees,
|
|
147
|
+
projectPath: project.projectPath,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
metadata.close();
|
|
153
|
+
}
|
|
154
|
+
registry.activateBundle({ projectId, sourceFingerprint: fingerprint });
|
|
155
|
+
return { status: 'imported' };
|
|
156
|
+
}
|
|
157
|
+
const stage = path_1.default.join(registry.root, 'staging', `${projectId}-${(0, crypto_1.randomUUID)()}`);
|
|
158
|
+
await promises_1.default.mkdir(stage, { recursive: true });
|
|
159
|
+
let metadata;
|
|
160
|
+
try {
|
|
161
|
+
const manifests = await (0, importFiles_1.readSourceManifests)(source);
|
|
162
|
+
const presentation = await (0, sourcePresentation_1.readSourcePresentation)(source);
|
|
163
|
+
await (0, importFiles_1.copySourceFiles)(source, stage);
|
|
164
|
+
await (0, importFiles_1.relocateContext)({
|
|
165
|
+
sourceDirectory: source,
|
|
166
|
+
stageDirectory: stage,
|
|
167
|
+
bundleDirectory: destination,
|
|
168
|
+
});
|
|
169
|
+
metadata = await BundleMetadataStore_1.BundleMetadataStore.open({ directory: stage, project });
|
|
170
|
+
const trees = new TreeStore_1.TreeStore(new ProjectStorage_1.ProjectStorage([
|
|
171
|
+
{
|
|
172
|
+
projectPath: project.projectPath,
|
|
173
|
+
dataDirectory: stage,
|
|
174
|
+
cacheDirectory: path_1.default.join(registry.root, 'cache', projectId),
|
|
175
|
+
},
|
|
176
|
+
]));
|
|
177
|
+
if (trees.hasStore(project.projectPath))
|
|
178
|
+
await trees.fsck(project.projectPath);
|
|
179
|
+
for (const manifest of manifests) {
|
|
180
|
+
const relative = path_1.default.join('variants', manifest.sessionId, manifest.variantId);
|
|
181
|
+
const artifactRoot = path_1.default.join(stage, relative);
|
|
182
|
+
await verifyImportedVariant({
|
|
183
|
+
manifest,
|
|
184
|
+
artifactRoot,
|
|
185
|
+
trees,
|
|
186
|
+
projectPath: project.projectPath,
|
|
187
|
+
});
|
|
188
|
+
metadata.upsertVariant(manifest, relative);
|
|
189
|
+
}
|
|
190
|
+
const sessions = new Set(manifests.map((manifest) => manifest.sessionId));
|
|
191
|
+
for (const sessionId of sessions) {
|
|
192
|
+
const sessionPath = path_1.default.join(stage, 'variants', sessionId, 'session.json');
|
|
193
|
+
if (!fs_1.default.existsSync(sessionPath))
|
|
194
|
+
continue;
|
|
195
|
+
const session = JSON.parse(await promises_1.default.readFile(sessionPath, 'utf8'));
|
|
196
|
+
if (session.schemaVersion !== 2 || session.sessionId !== sessionId)
|
|
197
|
+
throw new Error('Unsupported session metadata');
|
|
198
|
+
metadata.putSession(session);
|
|
199
|
+
}
|
|
200
|
+
if (presentation !== null)
|
|
201
|
+
metadata.setPresentation(JSON.parse(presentation));
|
|
202
|
+
if (metadata.listVariants().length !== manifests.length)
|
|
203
|
+
throw new Error('Imported history count does not match source');
|
|
204
|
+
metadata.close();
|
|
205
|
+
metadata = undefined;
|
|
206
|
+
if ((await (0, importFiles_1.sourceFingerprint)(source)) !== fingerprint)
|
|
207
|
+
throw new Error('Source history changed during import; retry after its writer stops');
|
|
208
|
+
await promises_1.default.writeFile(path_1.default.join(stage, RECEIPT_FILENAME), JSON.stringify({ projectId, sourceFingerprint: fingerprint }), { mode: 0o600 });
|
|
209
|
+
await promises_1.default.mkdir(path_1.default.dirname(destination), { recursive: true });
|
|
210
|
+
await promises_1.default.rename(stage, destination);
|
|
211
|
+
registry.activateBundle({ projectId, sourceFingerprint: fingerprint });
|
|
212
|
+
return { status: 'imported' };
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
metadata?.close();
|
|
216
|
+
await promises_1.default.rm(stage, { recursive: true, force: true });
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
for (const lock of locks)
|
|
222
|
+
lock.release();
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
exports.importProject = importProject;
|
|
226
|
+
//# sourceMappingURL=ProjectImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectImport.js","sourceRoot":"","sources":["../../src/services/ProjectImport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { LibraryProject, ProjectLibrarySnapshot } from '../types/project-library';
|
|
2
|
+
import type { HubNavigationTarget } from './HubNavigation';
|
|
3
|
+
import { ProjectRegistry, type RegisteredProject } from './ProjectRegistry';
|
|
4
|
+
import { type ProjectImportResult } from './ProjectImport';
|
|
5
|
+
import { VariantHistoryService, type VariantHistoryEntry, type VariantHistoryDetail } from './VariantHistoryService';
|
|
6
|
+
export interface LibraryVariant extends VariantHistoryEntry {
|
|
7
|
+
projectId: string;
|
|
8
|
+
projectPath: string;
|
|
9
|
+
}
|
|
10
|
+
interface VariantReference {
|
|
11
|
+
projectId: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
variantId: string;
|
|
14
|
+
}
|
|
15
|
+
/** Resolves the installation's library root, with explicit isolated roots for automation. */
|
|
16
|
+
export declare const currentLibraryRoot: (env?: NodeJS.ProcessEnv) => string;
|
|
17
|
+
/** Serves project-scoped saved history without starting application runtimes. */
|
|
18
|
+
export declare class ProjectLibrary {
|
|
19
|
+
readonly registry: ProjectRegistry;
|
|
20
|
+
private readonly owners;
|
|
21
|
+
readonly issues: Map<string, string>;
|
|
22
|
+
private isClosed;
|
|
23
|
+
private constructor();
|
|
24
|
+
/** Opens the project library independently of any selected workspace. */
|
|
25
|
+
static open(root?: string): Promise<ProjectLibrary>;
|
|
26
|
+
/** Registers an opened project and imports its quiescent supported history. */
|
|
27
|
+
prepare(projectPath: string): Promise<{
|
|
28
|
+
project: RegisteredProject;
|
|
29
|
+
migration: ProjectImportResult;
|
|
30
|
+
}>;
|
|
31
|
+
/** Relinks a working folder and refreshes its storage attachment. */
|
|
32
|
+
relink(args: {
|
|
33
|
+
projectId: string;
|
|
34
|
+
projectPath: string;
|
|
35
|
+
}): Promise<RegisteredProject>;
|
|
36
|
+
/** Closes cached metadata before changing the project's storage attachment. */
|
|
37
|
+
private invalidate;
|
|
38
|
+
/** Lists registered workspaces and known issues without opening saved history. */
|
|
39
|
+
listProjects(): LibraryProject[];
|
|
40
|
+
/** Builds the library view from saved history and current workspace availability. */
|
|
41
|
+
snapshot(): Promise<ProjectLibrarySnapshot>;
|
|
42
|
+
/** Applies metadata edits through the exact direction's authoritative history owner. */
|
|
43
|
+
updateVariant(args: VariantReference & {
|
|
44
|
+
label?: string;
|
|
45
|
+
status?: 'removed';
|
|
46
|
+
}): Promise<void>;
|
|
47
|
+
/** Verifies the selected project and saved direction before delivering navigation. */
|
|
48
|
+
assertNavigationTarget(target: HubNavigationTarget): Promise<void>;
|
|
49
|
+
/** Returns one shared history service for a project's persisted storage owner. */
|
|
50
|
+
history(projectId: string): Promise<VariantHistoryService>;
|
|
51
|
+
/** Registers a generated directory with the same history owner before generation writes. */
|
|
52
|
+
attachGeneratedRoot({ projectId, projectPath, }: {
|
|
53
|
+
projectId: string;
|
|
54
|
+
projectPath: string;
|
|
55
|
+
}): Promise<void>;
|
|
56
|
+
/** Lists one project's directions, including preserved generated history roots. */
|
|
57
|
+
private listProject;
|
|
58
|
+
/** Aggregates readable projects while retaining individual project availability errors. */
|
|
59
|
+
listVariants(projectId?: string): Promise<LibraryVariant[]>;
|
|
60
|
+
/** Resolves an exact reference together with the filesystem root that owns it. */
|
|
61
|
+
variant(reference: VariantReference): Promise<{
|
|
62
|
+
detail: VariantHistoryDetail;
|
|
63
|
+
projectPath: string;
|
|
64
|
+
history: VariantHistoryService;
|
|
65
|
+
} | null>;
|
|
66
|
+
/** Releases metadata connections; running project processes have separate lifetimes. */
|
|
67
|
+
close(): void;
|
|
68
|
+
/** Initializes one storage owner and shares it across concurrent library reads. */
|
|
69
|
+
private owner;
|
|
70
|
+
/** Attaches bundle metadata only when its registry activation is committed. */
|
|
71
|
+
private createOwner;
|
|
72
|
+
}
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=ProjectLibrary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectLibrary.d.ts","sourceRoot":"","sources":["../../src/services/ProjectLibrary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAK3D,OAAO,EACL,eAAe,EAEf,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI1E,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,GAC7B,MAAK,MAAM,CAAC,UAAwB,KACnC,MAKF,CAAC;AAEF,iFAAiF;AACjF,qBAAa,cAAc;IAIL,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAHtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IACnE,QAAQ,CAAC,MAAM,sBAA6B;IAC5C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO;IAEP,yEAAyE;WAC5D,IAAI,CAAC,IAAI,SAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIvE,+EAA+E;IACzE,OAAO,CACX,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,iBAAiB,CAAC;QAAC,SAAS,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAgC1E,qEAAqE;IAC/D,MAAM,CAAC,IAAI,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAO9B,+EAA+E;YACjE,UAAU;IASxB,kFAAkF;IAClF,YAAY,IAAI,cAAc,EAAE;IAMhC,qFAAqF;IAC/E,QAAQ,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAiBjD,wFAAwF;IAClF,aAAa,CACjB,IAAI,EAAE,gBAAgB,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,GAC9D,OAAO,CAAC,IAAI,CAAC;IAWhB,sFAAsF;IAChF,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAexE,kFAAkF;IAC5E,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhE,4FAA4F;IACtF,mBAAmB,CAAC,EACxB,SAAS,EACT,WAAW,GACZ,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjB,mFAAmF;YACrE,WAAW;IAuCzB,2FAA2F;IACrF,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBjE,kFAAkF;IAC5E,OAAO,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAClD,MAAM,EAAE,oBAAoB,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,qBAAqB,CAAC;KAChC,GAAG,IAAI,CAAC;IAcT,wFAAwF;IACxF,KAAK,IAAI,IAAI;IAcb,mFAAmF;IACnF,OAAO,CAAC,KAAK;IASb,+EAA+E;YACjE,WAAW;CA4B1B"}
|