@lvce-editor/shared-process 0.81.15 → 0.82.1
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/package.json +2 -2
- package/src/parts/BuiltinExtensionsPath/BuiltinExtensionsPath.js +1 -1
- package/src/parts/Cli/Cli.js +2 -0
- package/src/parts/ExtensionList/ExtensionList.js +8 -0
- package/src/parts/ExtensionManagement/ExtensionManagement.js +15 -0
- package/src/parts/ExtensionManifestInputType/ExtensionManifestInputType.js +1 -0
- package/src/parts/ExtensionManifests/ExtensionManifests.js +3 -0
- package/src/parts/ExtensionManifests/ExtensionManifestsFromLinkedExtension.js +17 -0
- package/src/parts/GetExtensionEtags/GetExtensionEtags.js +17 -3
- package/src/parts/HandleElectronReady/HandleElectronReady.js +14 -3
- package/src/parts/Platform/Platform.js +3 -3
- package/src/parts/PreloadUrl/PreloadUrl.js +1 -1
- package/src/parts/Process/Process.js +12 -1
- package/src/parts/TransientLinkedExtensions/TransientLinkedExtensions.js +66 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/shared-process",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.82.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@lvce-editor/assert": "1.5.1",
|
|
21
21
|
"@lvce-editor/auth-process": "1.6.0",
|
|
22
|
-
"@lvce-editor/extension-host-helper-process": "0.
|
|
22
|
+
"@lvce-editor/extension-host-helper-process": "0.82.1",
|
|
23
23
|
"@lvce-editor/ipc": "16.0.0",
|
|
24
24
|
"@lvce-editor/json-rpc": "8.0.0",
|
|
25
25
|
"@lvce-editor/jsonc-parser": "1.5.0",
|
|
@@ -2,6 +2,6 @@ import { join } from 'path';
|
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
3
|
export const getBuiltinExtensionsPath = () => {
|
|
4
4
|
const staticServerPath = fileURLToPath(import.meta.resolve('@lvce-editor/static-server'));
|
|
5
|
-
const builtinExtensionsPath = join(staticServerPath, '..', '..', 'static', '
|
|
5
|
+
const builtinExtensionsPath = join(staticServerPath, '..', '..', 'static', '318496f', 'extensions');
|
|
6
6
|
return builtinExtensionsPath;
|
|
7
7
|
};
|
package/src/parts/Cli/Cli.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as CliModule from '../CliModule/CliModule.js';
|
|
2
2
|
import * as Logger from '../Logger/Logger.js';
|
|
3
3
|
import * as Process from '../Process/Process.js';
|
|
4
|
+
import * as TransientLinkedExtensions from '../TransientLinkedExtensions/TransientLinkedExtensions.js';
|
|
4
5
|
export const handleCliArgs = async (parsedArgs) => {
|
|
5
6
|
const module = await CliModule.getModule(parsedArgs);
|
|
6
7
|
try {
|
|
8
|
+
await TransientLinkedExtensions.validate();
|
|
7
9
|
await module.handleCliArgs(parsedArgs._);
|
|
8
10
|
}
|
|
9
11
|
catch (error) {
|
|
@@ -3,6 +3,7 @@ import * as ExtensionManifestInputType from '../ExtensionManifestInputType/Exten
|
|
|
3
3
|
import * as ExtensionManifestStatus from '../ExtensionManifestStatus/ExtensionManifestStatus.js';
|
|
4
4
|
import * as ExtensionManifests from '../ExtensionManifests/ExtensionManifests.js';
|
|
5
5
|
import * as PlatformPaths from '../PlatformPaths/PlatformPaths.js';
|
|
6
|
+
import * as TransientLinkedExtensions from '../TransientLinkedExtensions/TransientLinkedExtensions.js';
|
|
6
7
|
import * as BuiltinExtensionsPath from '../BuiltinExtensionsPath/BuiltinExtensionsPath.js';
|
|
7
8
|
import { VError } from '../VError/VError.js';
|
|
8
9
|
const getManifestVersion = (json) => {
|
|
@@ -42,7 +43,14 @@ const getManifestInfos = (manifests) => {
|
|
|
42
43
|
};
|
|
43
44
|
export const list = async () => {
|
|
44
45
|
try {
|
|
46
|
+
const transientLinkedExtensions = TransientLinkedExtensions.getLinkedExtensions().map((link) => {
|
|
47
|
+
return {
|
|
48
|
+
type: ExtensionManifestInputType.LinkedExtension,
|
|
49
|
+
path: link.resolvedPath,
|
|
50
|
+
};
|
|
51
|
+
});
|
|
45
52
|
const manifests = await ExtensionManifests.getAll([
|
|
53
|
+
...transientLinkedExtensions,
|
|
46
54
|
{
|
|
47
55
|
type: ExtensionManifestInputType.LinkedExtensionsFolder,
|
|
48
56
|
path: PlatformPaths.getLinkedExtensionsPath(),
|
|
@@ -7,6 +7,7 @@ import * as ExtensionManifests from '../ExtensionManifests/ExtensionManifests.js
|
|
|
7
7
|
import * as GetEtagFromStats from '../GetEtagFromStats/GetEtagFromStats.js';
|
|
8
8
|
import * as GetExtensionEtags from '../GetExtensionEtags/GetExtensionEtags.js';
|
|
9
9
|
import * as PlatformPaths from '../PlatformPaths/PlatformPaths.js';
|
|
10
|
+
import * as TransientLinkedExtensions from '../TransientLinkedExtensions/TransientLinkedExtensions.js';
|
|
10
11
|
import { VError } from '../VError/VError.js';
|
|
11
12
|
export const enable = async (id) => {
|
|
12
13
|
try {
|
|
@@ -80,11 +81,18 @@ export const getInstalledExtensions = () => {
|
|
|
80
81
|
], BuiltinExtensionsPath.getBuiltinExtensionsPath());
|
|
81
82
|
};
|
|
82
83
|
export const getExtensions = () => {
|
|
84
|
+
const transientLinkedExtensions = TransientLinkedExtensions.getLinkedExtensions().map((link) => {
|
|
85
|
+
return {
|
|
86
|
+
type: ExtensionManifestInputType.LinkedExtension,
|
|
87
|
+
path: link.resolvedPath,
|
|
88
|
+
};
|
|
89
|
+
});
|
|
83
90
|
return ExtensionManifests.getAll([
|
|
84
91
|
{
|
|
85
92
|
type: ExtensionManifestInputType.OnlyExtension,
|
|
86
93
|
path: PlatformPaths.getOnlyExtensionPath(),
|
|
87
94
|
},
|
|
95
|
+
...transientLinkedExtensions,
|
|
88
96
|
{
|
|
89
97
|
type: ExtensionManifestInputType.Folder,
|
|
90
98
|
path: PlatformPaths.getLinkedExtensionsPath(),
|
|
@@ -100,11 +108,18 @@ export const getExtensions = () => {
|
|
|
100
108
|
], BuiltinExtensionsPath.getBuiltinExtensionsPath());
|
|
101
109
|
};
|
|
102
110
|
export const getExtensionsEtag = async () => {
|
|
111
|
+
const transientLinkedExtensions = TransientLinkedExtensions.getLinkedExtensions().map((link) => {
|
|
112
|
+
return {
|
|
113
|
+
type: ExtensionManifestInputType.LinkedExtension,
|
|
114
|
+
path: link.resolvedPath,
|
|
115
|
+
};
|
|
116
|
+
});
|
|
103
117
|
const stats = await GetExtensionEtags.getExtensionEtags([
|
|
104
118
|
{
|
|
105
119
|
type: ExtensionManifestInputType.OnlyExtension,
|
|
106
120
|
path: PlatformPaths.getOnlyExtensionPath(),
|
|
107
121
|
},
|
|
122
|
+
...transientLinkedExtensions,
|
|
108
123
|
{
|
|
109
124
|
type: ExtensionManifestInputType.Folder,
|
|
110
125
|
path: PlatformPaths.getLinkedExtensionsPath(),
|
|
@@ -2,6 +2,7 @@ import * as DeduplicateExtensions from '../DeduplicateExtensions/DeduplicateExte
|
|
|
2
2
|
import { getDisabledExtensionIds } from '../ExtensionManagement/ExtensionManagement.js';
|
|
3
3
|
import * as ExtensionManifestInputType from '../ExtensionManifestInputType/ExtensionManifestInputType.js';
|
|
4
4
|
import * as ExtensionManifestsGetFromFolder from './ExtensionManifestsFromFolder.js';
|
|
5
|
+
import * as ExtensionManifestsGetFromLinkedExtension from './ExtensionManifestsFromLinkedExtension.js';
|
|
5
6
|
import * as ExtensionManifestsGetFromLinkedExtensionsFolder from './ExtensionManifestsFromLinkedExtensionsFolder.js';
|
|
6
7
|
import * as ExtensionManifestsGetFromOnlyExtension from './ExtensionManifestsFromOnlyExtension.js';
|
|
7
8
|
const getModule = (type) => {
|
|
@@ -10,6 +11,8 @@ const getModule = (type) => {
|
|
|
10
11
|
return ExtensionManifestsGetFromFolder;
|
|
11
12
|
case ExtensionManifestInputType.OnlyExtension:
|
|
12
13
|
return ExtensionManifestsGetFromOnlyExtension;
|
|
14
|
+
case ExtensionManifestInputType.LinkedExtension:
|
|
15
|
+
return ExtensionManifestsGetFromLinkedExtension;
|
|
13
16
|
case ExtensionManifestInputType.LinkedExtensionsFolder:
|
|
14
17
|
return ExtensionManifestsGetFromLinkedExtensionsFolder;
|
|
15
18
|
default:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as ExtensionManifest from '../ExtensionManifest/ExtensionManifest.js';
|
|
2
|
+
import * as ExtensionManifestStatus from '../ExtensionManifestStatus/ExtensionManifestStatus.js';
|
|
3
|
+
export const getExtensionManifests = async (path) => {
|
|
4
|
+
if (!path) {
|
|
5
|
+
return [];
|
|
6
|
+
}
|
|
7
|
+
const manifest = await ExtensionManifest.get(path);
|
|
8
|
+
if (manifest.status === ExtensionManifestStatus.Rejected) {
|
|
9
|
+
return [manifest];
|
|
10
|
+
}
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
...manifest,
|
|
14
|
+
symlink: path,
|
|
15
|
+
},
|
|
16
|
+
];
|
|
17
|
+
};
|
|
@@ -11,13 +11,26 @@ const serializeStats = (stats) => {
|
|
|
11
11
|
size,
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
|
+
const getManifestStats = async (path) => {
|
|
15
|
+
const absolutePath = join(path, 'extension.json');
|
|
16
|
+
try {
|
|
17
|
+
const stats = await stat(absolutePath);
|
|
18
|
+
return [serializeStats(stats)];
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (IsEnoentError.isEnoentError(error)) {
|
|
22
|
+
const monoRepoPath = join(path, 'packages', 'extension', 'extension.json');
|
|
23
|
+
const stats = await stat(monoRepoPath);
|
|
24
|
+
return [serializeStats(stats)];
|
|
25
|
+
}
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
14
29
|
const getOnly = async (path) => {
|
|
15
30
|
if (!path) {
|
|
16
31
|
return [];
|
|
17
32
|
}
|
|
18
|
-
|
|
19
|
-
const stats = await stat(absolutePath);
|
|
20
|
-
return [serializeStats(stats)];
|
|
33
|
+
return getManifestStats(path);
|
|
21
34
|
};
|
|
22
35
|
const getFolder = async (path) => {
|
|
23
36
|
try {
|
|
@@ -42,6 +55,7 @@ const get = (input) => {
|
|
|
42
55
|
case ExtensionManifestInputType.LinkedExtensionsFolder:
|
|
43
56
|
return getFolder(input.path);
|
|
44
57
|
case ExtensionManifestInputType.OnlyExtension:
|
|
58
|
+
case ExtensionManifestInputType.LinkedExtension:
|
|
45
59
|
return getOnly(input.path);
|
|
46
60
|
default:
|
|
47
61
|
return [];
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import * as AppWindow from '../AppWindow/AppWindow.js';
|
|
2
2
|
import * as Assert from '../Assert/Assert.js';
|
|
3
|
+
import * as ExitCode from '../ExitCode/ExitCode.js';
|
|
4
|
+
import * as Logger from '../Logger/Logger.js';
|
|
3
5
|
import * as Preferences from '../Preferences/Preferences.js';
|
|
4
6
|
import * as PreloadUrl from '../PreloadUrl/PreloadUrl.js';
|
|
7
|
+
import * as Process from '../Process/Process.js';
|
|
8
|
+
import * as TransientLinkedExtensions from '../TransientLinkedExtensions/TransientLinkedExtensions.js';
|
|
5
9
|
export const handleElectronReady = async (parsedArgs, workingDirectory) => {
|
|
6
10
|
Assert.object(parsedArgs);
|
|
7
11
|
Assert.string(workingDirectory);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
try {
|
|
13
|
+
await TransientLinkedExtensions.validate();
|
|
14
|
+
const preferences = await Preferences.getAllSafe();
|
|
15
|
+
const preloadUrl = PreloadUrl.getPreloadUrl();
|
|
16
|
+
await AppWindow.createAppWindow({ preferences, parsedArgs, workingDirectory, preloadUrl });
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
Logger.error(error);
|
|
20
|
+
Process.exit(ExitCode.ExpectedError);
|
|
21
|
+
}
|
|
11
22
|
};
|
|
@@ -41,9 +41,9 @@ export const getAppImageName = () => {
|
|
|
41
41
|
export const getSetupName = () => {
|
|
42
42
|
return 'Lvce-Setup';
|
|
43
43
|
};
|
|
44
|
-
export const version = '0.
|
|
45
|
-
export const commit = '
|
|
46
|
-
export const date = '2026-05-
|
|
44
|
+
export const version = '0.82.1';
|
|
45
|
+
export const commit = '318496f';
|
|
46
|
+
export const date = '2026-05-28T15:23:50.000Z';
|
|
47
47
|
export const getVersion = () => {
|
|
48
48
|
return version;
|
|
49
49
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import * as Root from '../Root/Root.js';
|
|
3
3
|
export const getPreloadUrl = () => {
|
|
4
|
-
return join(Root.root, 'static', '
|
|
4
|
+
return join(Root.root, 'static', '318496f', 'packages', 'preload', 'dist', 'index.js');
|
|
5
5
|
};
|
|
@@ -12,7 +12,18 @@ export const exit = (code) => {
|
|
|
12
12
|
export const setExitCode = (exitCode) => {
|
|
13
13
|
process.exitCode = exitCode;
|
|
14
14
|
};
|
|
15
|
-
export const
|
|
15
|
+
export const argv = new Proxy([], {
|
|
16
|
+
get(_target, property) {
|
|
17
|
+
const value = Reflect.get(process.argv, property);
|
|
18
|
+
if (typeof value === 'function') {
|
|
19
|
+
return value.bind(process.argv);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
},
|
|
23
|
+
set(_target, property, value) {
|
|
24
|
+
return Reflect.set(process.argv, property, value);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
16
27
|
export const cwd = () => {
|
|
17
28
|
return process.cwd();
|
|
18
29
|
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as ErrorCodes from '../ErrorCodes/ErrorCodes.js';
|
|
2
|
+
import * as FileSystem from '../FileSystem/FileSystem.js';
|
|
3
|
+
import * as Path from '../Path/Path.js';
|
|
4
|
+
import * as Process from '../Process/Process.js';
|
|
5
|
+
const getCliLinkArgs = () => {
|
|
6
|
+
const links = [];
|
|
7
|
+
const argv = Process.argv.slice(2);
|
|
8
|
+
for (let i = 0; i < argv.length; i++) {
|
|
9
|
+
const arg = argv[i];
|
|
10
|
+
if (arg === '--link') {
|
|
11
|
+
const value = argv[i + 1];
|
|
12
|
+
links.push({
|
|
13
|
+
path: value || '',
|
|
14
|
+
source: '--link',
|
|
15
|
+
});
|
|
16
|
+
i++;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (arg.startsWith('--link=')) {
|
|
20
|
+
links.push({
|
|
21
|
+
path: arg.slice('--link='.length),
|
|
22
|
+
source: '--link',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return links;
|
|
27
|
+
};
|
|
28
|
+
const resolveLinkPath = (path) => {
|
|
29
|
+
if (Path.isAbsolute(path)) {
|
|
30
|
+
return path;
|
|
31
|
+
}
|
|
32
|
+
return Path.join(Process.cwd(), path);
|
|
33
|
+
};
|
|
34
|
+
export const getLinkedExtensions = () => {
|
|
35
|
+
return getCliLinkArgs().map((link) => {
|
|
36
|
+
return {
|
|
37
|
+
...link,
|
|
38
|
+
resolvedPath: resolveLinkPath(link.path),
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const createMissingPathError = (link) => {
|
|
43
|
+
const error = new Error(`Failed to start: ${link.source} requires a folder path`);
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
error.code = ErrorCodes.ENOENT;
|
|
46
|
+
return error;
|
|
47
|
+
};
|
|
48
|
+
const createPathNotFoundError = (link) => {
|
|
49
|
+
const message = link.path === link.resolvedPath ? link.path : `${link.path} (resolved to ${link.resolvedPath})`;
|
|
50
|
+
const error = new Error(`Failed to start: ${link.source} path does not exist: ${message}`);
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
error.code = ErrorCodes.ENOENT;
|
|
53
|
+
return error;
|
|
54
|
+
};
|
|
55
|
+
export const validate = async () => {
|
|
56
|
+
const links = getLinkedExtensions();
|
|
57
|
+
for (const link of links) {
|
|
58
|
+
if (!link.path) {
|
|
59
|
+
throw createMissingPathError(link);
|
|
60
|
+
}
|
|
61
|
+
if (!(await FileSystem.exists(link.resolvedPath))) {
|
|
62
|
+
throw createPathNotFoundError(link);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return links;
|
|
66
|
+
};
|