@delance/runtime 2024.2.103 → 2024.2.105
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/dist/langserver.cjs +3 -0
- package/install.mjs +89 -56
- package/langserver.cjs +1 -1
- package/package.json +3 -3
package/install.mjs
CHANGED
|
@@ -4,6 +4,7 @@ import assert, {AssertionError} from 'node:assert';
|
|
|
4
4
|
import {subtle} from 'node:crypto';
|
|
5
5
|
import fs from 'node:fs/promises';
|
|
6
6
|
import path from 'node:path';
|
|
7
|
+
import process from 'node:process';
|
|
7
8
|
import delance from '@delance/builder';
|
|
8
9
|
import {BlobReader, BlobWriter, TextWriter, ZipReader} from '@zip.js/zip.js';
|
|
9
10
|
import pMap from 'p-map';
|
|
@@ -18,81 +19,106 @@ function reverse(string) {
|
|
|
18
19
|
return [...string].reverse().join('');
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
const output = path.resolve(
|
|
22
|
+
const output = path.resolve(`dist/v${pkg.version}-${pkg.delance.sha256}`);
|
|
22
23
|
|
|
24
|
+
await fs.mkdir(output, {recursive: true});
|
|
25
|
+
|
|
26
|
+
let processed = true;
|
|
23
27
|
try {
|
|
24
|
-
await fs.
|
|
28
|
+
await fs.access(path.join(output, 'server.bundle.js'));
|
|
25
29
|
} catch {
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
await fs.access(path.join(output, 'server.bundle.js'));
|
|
29
|
-
} catch {
|
|
30
|
-
processed = false;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (processed) {
|
|
34
|
-
process.exit();
|
|
35
|
-
}
|
|
30
|
+
processed = false;
|
|
36
31
|
}
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const items = new URL(`/items?itemName=${publisher}.${extension}`, baseURL);
|
|
43
|
-
const download = new URL(
|
|
44
|
-
`/_apis/public/gallery/publishers/${publisher}/vsextensions/${extension}/${pkg.version}/vspackage`,
|
|
45
|
-
baseURL,
|
|
46
|
-
);
|
|
33
|
+
if (processed) {
|
|
34
|
+
process.exit();
|
|
35
|
+
}
|
|
47
36
|
|
|
48
|
-
|
|
37
|
+
/** @type {Blob?} */
|
|
38
|
+
let vsix = null;
|
|
49
39
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
40
|
+
if (process.env.DELANCE_VSIX) {
|
|
41
|
+
try {
|
|
42
|
+
vsix = new Blob([await fs.readFile(process.env.DELANCE_VSIX)]);
|
|
43
|
+
const hash = Array.from(
|
|
44
|
+
new Uint8Array(
|
|
45
|
+
await subtle.digest('SHA-256', await vsix.arrayBuffer()),
|
|
46
|
+
),
|
|
47
|
+
)
|
|
48
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
49
|
+
.join('');
|
|
59
50
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
|
|
51
|
+
assert.equal(hash, pkg.delance.sha256, 'sha256 mismatch');
|
|
52
|
+
} catch (e) {
|
|
53
|
+
if (/** @type {Error & {syscall: string}} */ (e)?.syscall === 'open') {
|
|
54
|
+
console.error(e);
|
|
55
|
+
} else {
|
|
56
|
+
throw e;
|
|
64
57
|
}
|
|
65
58
|
}
|
|
59
|
+
}
|
|
66
60
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
if (!vsix) {
|
|
62
|
+
const baseURL = new URL(reverse('/moc.oidutslausiv.ecalptekram//:sptth'));
|
|
63
|
+
const publisher = reverse('nohtyp-sm');
|
|
64
|
+
const extension = reverse('ecnalyp-edocsv');
|
|
65
|
+
|
|
66
|
+
const items = new URL(`/items?itemName=${publisher}.${extension}`, baseURL);
|
|
67
|
+
const download = new URL(
|
|
68
|
+
`/_apis/public/gallery/publishers/${publisher}/vsextensions/${extension}/${pkg.version}/vspackage`,
|
|
69
|
+
baseURL,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
await fetch(items);
|
|
73
|
+
|
|
74
|
+
vsix = await pRetry(async () => {
|
|
75
|
+
const response = await fetch(download, {
|
|
76
|
+
headers: {
|
|
77
|
+
'User-Agent':
|
|
78
|
+
'Mozilla/5.0 (Delance) Gecko/20100101 Firefox/120.0',
|
|
79
|
+
},
|
|
80
|
+
credentials: 'include',
|
|
81
|
+
redirect: 'follow',
|
|
82
|
+
referrer: items.href,
|
|
83
|
+
});
|
|
70
84
|
|
|
71
|
-
|
|
85
|
+
if (response.status === 429) {
|
|
86
|
+
const delay = response.headers.get('retry-after');
|
|
87
|
+
if (delay) {
|
|
88
|
+
throw new Error('Rate limited');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
72
91
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
),
|
|
77
|
-
)
|
|
78
|
-
.map((b) => b.toString(16).padStart(2, '0'))
|
|
79
|
-
.join('');
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
throw new AbortError(response.statusText);
|
|
94
|
+
}
|
|
80
95
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
const vsix = await response.blob();
|
|
97
|
+
|
|
98
|
+
const hash = Array.from(
|
|
99
|
+
new Uint8Array(
|
|
100
|
+
await subtle.digest('SHA-256', await vsix.arrayBuffer()),
|
|
101
|
+
),
|
|
102
|
+
)
|
|
103
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
104
|
+
.join('');
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
assert.equal(hash, pkg.delance.sha256, 'sha256 mismatch');
|
|
108
|
+
} catch (error) {
|
|
109
|
+
if (error instanceof AssertionError) {
|
|
110
|
+
throw new AbortError(error);
|
|
111
|
+
}
|
|
112
|
+
throw error;
|
|
86
113
|
}
|
|
87
|
-
throw error;
|
|
88
|
-
}
|
|
89
114
|
|
|
90
|
-
|
|
91
|
-
});
|
|
115
|
+
return vsix;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
92
118
|
|
|
93
119
|
const zip = new ZipReader(new BlobReader(vsix));
|
|
94
120
|
|
|
95
|
-
const prefix = 'extension/dist/';
|
|
121
|
+
const prefix = path.normalize('extension/dist/');
|
|
96
122
|
|
|
97
123
|
await pMap(
|
|
98
124
|
await zip.getEntries(),
|
|
@@ -139,3 +165,10 @@ await pMap(
|
|
|
139
165
|
},
|
|
140
166
|
{concurrency: 4},
|
|
141
167
|
);
|
|
168
|
+
|
|
169
|
+
await fs.writeFile(
|
|
170
|
+
'dist/langserver.cjs',
|
|
171
|
+
`#!/usr/bin/env node
|
|
172
|
+
|
|
173
|
+
require('./v${pkg.version}-${pkg.delance.sha256}/server.bundle.js');`,
|
|
174
|
+
);
|
package/langserver.cjs
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delance/runtime",
|
|
3
|
-
"version": "2024.2.
|
|
3
|
+
"version": "2024.2.105",
|
|
4
4
|
"description": "Runtime and entrypoint for the lance",
|
|
5
5
|
"license": "0BSD",
|
|
6
6
|
"bin": {
|
|
7
|
-
"delance-langserver": "langserver.cjs"
|
|
7
|
+
"delance-langserver": "dist/langserver.cjs"
|
|
8
8
|
},
|
|
9
9
|
"delance": {
|
|
10
|
-
"sha256": "
|
|
10
|
+
"sha256": "e37455263fed9be67bfe74609fb22d011215a213cd76454cb1b7bab96c01df47"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
13
|
"langserver.cjs",
|