@delance/runtime 2023.12.101 → 2023.12.103
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/install.mjs +96 -51
- package/package.json +12 -7
package/install.mjs
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import assert from 'node:assert';
|
|
3
|
+
import assert, {AssertionError} from 'node:assert';
|
|
4
|
+
import {subtle} from 'node:crypto';
|
|
4
5
|
import fs from 'node:fs/promises';
|
|
5
6
|
import path from 'node:path';
|
|
6
7
|
import delance from '@delance/builder';
|
|
7
|
-
import {BlobWriter, TextWriter, ZipReader} from '@zip.js/zip.js';
|
|
8
|
+
import {BlobReader, BlobWriter, TextWriter, ZipReader} from '@zip.js/zip.js';
|
|
9
|
+
import pMap from 'p-map';
|
|
10
|
+
import pRetry, {AbortError} from 'p-retry';
|
|
8
11
|
|
|
9
12
|
import pkg from './package.json' assert {type: 'json'};
|
|
10
13
|
|
|
@@ -15,6 +18,15 @@ function reverse(string) {
|
|
|
15
18
|
return [...string].reverse().join('');
|
|
16
19
|
}
|
|
17
20
|
|
|
21
|
+
const output = path.resolve('out/');
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
await fs.mkdir(output);
|
|
25
|
+
} catch {
|
|
26
|
+
// Already processed, exit
|
|
27
|
+
process.exit();
|
|
28
|
+
}
|
|
29
|
+
|
|
18
30
|
const baseURL = new URL(reverse('/moc.oidutslausiv.ecalptekram//:sptth'));
|
|
19
31
|
const publisher = reverse('nohtyp-sm');
|
|
20
32
|
const extension = reverse('ecnalyp-edocsv');
|
|
@@ -27,62 +39,95 @@ const download = new URL(
|
|
|
27
39
|
|
|
28
40
|
await fetch(items);
|
|
29
41
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
const vsix = await pRetry(async () => {
|
|
43
|
+
const response = await fetch(download, {
|
|
44
|
+
headers: {
|
|
45
|
+
'User-Agent': 'Mozilla/5.0 (Delance) Gecko/20100101 Firefox/120.0',
|
|
46
|
+
},
|
|
47
|
+
credentials: 'include',
|
|
48
|
+
redirect: 'follow',
|
|
49
|
+
referrer: items.href,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
if (response.status === 429) {
|
|
53
|
+
const delay = response.headers.get('retry-after');
|
|
54
|
+
if (delay) {
|
|
55
|
+
throw new Error('Rate limited');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
38
58
|
|
|
39
|
-
if (!
|
|
40
|
-
|
|
41
|
-
}
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
throw new AbortError(response.statusText);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const vsix = await response.blob();
|
|
64
|
+
|
|
65
|
+
const hash = Array.from(
|
|
66
|
+
new Uint8Array(
|
|
67
|
+
await subtle.digest('SHA-256', await vsix.arrayBuffer()),
|
|
68
|
+
),
|
|
69
|
+
)
|
|
70
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
71
|
+
.join('');
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
assert.equal(hash, pkg.delance.sha256, 'sha256 mismatch');
|
|
75
|
+
} catch (error) {
|
|
76
|
+
if (error instanceof AssertionError) {
|
|
77
|
+
throw new AbortError(error);
|
|
78
|
+
}
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return vsix;
|
|
83
|
+
});
|
|
42
84
|
|
|
43
|
-
const zip = new ZipReader(
|
|
85
|
+
const zip = new ZipReader(new BlobReader(vsix));
|
|
44
86
|
|
|
45
87
|
const prefix = 'extension/dist/';
|
|
46
|
-
const output = path.resolve('out/');
|
|
47
|
-
await fs.mkdir(output);
|
|
48
88
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
89
|
+
await pMap(
|
|
90
|
+
await zip.getEntries(),
|
|
91
|
+
async (entry) => {
|
|
92
|
+
const filename = path.normalize(entry.filename);
|
|
93
|
+
if (!filename.startsWith(prefix)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
55
96
|
|
|
56
|
-
|
|
97
|
+
console.time(filename);
|
|
98
|
+
const dest = filename.slice(prefix.length);
|
|
57
99
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
100
|
+
if (entry.directory) {
|
|
101
|
+
await fs.mkdir(path.join(output, dest), {recursive: true});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
62
104
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
105
|
+
let file;
|
|
106
|
+
if (dest.endsWith('.bundle.js')) {
|
|
107
|
+
if (dest.startsWith('browser.')) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const writer = new TextWriter();
|
|
111
|
+
assert(entry.getData !== undefined);
|
|
112
|
+
await entry.getData(writer);
|
|
113
|
+
|
|
114
|
+
const script = await delance(await writer.getData());
|
|
115
|
+
file = new Blob([script], {type: 'text/javascript'});
|
|
116
|
+
} else {
|
|
117
|
+
const writer = new BlobWriter();
|
|
118
|
+
assert(entry.getData !== undefined);
|
|
119
|
+
await entry.getData(writer);
|
|
120
|
+
file = await writer.getData();
|
|
68
121
|
}
|
|
69
|
-
const writer = new TextWriter();
|
|
70
|
-
assert(entry.getData !== undefined);
|
|
71
|
-
await entry.getData(writer);
|
|
72
|
-
|
|
73
|
-
/** @type string */
|
|
74
|
-
const script = await delance(await writer.getData());
|
|
75
|
-
file = new Blob([script], {type: 'text/javascript', encoding: 'utf-8'});
|
|
76
|
-
} else {
|
|
77
|
-
const writer = new BlobWriter();
|
|
78
|
-
assert(entry.getData !== undefined);
|
|
79
|
-
await entry.getData(writer);
|
|
80
|
-
file = await writer.getData();
|
|
81
|
-
}
|
|
82
122
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
123
|
+
await fs.mkdir(path.join(output, path.dirname(dest)), {
|
|
124
|
+
recursive: true,
|
|
125
|
+
});
|
|
126
|
+
await fs.writeFile(
|
|
127
|
+
path.join(output, dest),
|
|
128
|
+
Buffer.from(await file.arrayBuffer()),
|
|
129
|
+
);
|
|
130
|
+
console.timeEnd(filename);
|
|
131
|
+
},
|
|
132
|
+
{concurrency: 4},
|
|
133
|
+
);
|
package/package.json
CHANGED
|
@@ -1,25 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delance/runtime",
|
|
3
|
-
"version": "2023.12.
|
|
3
|
+
"version": "2023.12.103",
|
|
4
4
|
"description": "Runtime and entrypoint for the lance",
|
|
5
5
|
"license": "0BSD",
|
|
6
6
|
"bin": {
|
|
7
7
|
"delance-langserver": "langserver.cjs"
|
|
8
8
|
},
|
|
9
|
+
"delance": {
|
|
10
|
+
"sha256": "ced330505c34f8fd9797b43054e51c8e1757bc0f549b78b81f62a6ee374970d2"
|
|
11
|
+
},
|
|
9
12
|
"files": [
|
|
10
13
|
"langserver.cjs",
|
|
11
14
|
"install.mjs"
|
|
12
15
|
],
|
|
13
|
-
"scripts": {
|
|
14
|
-
"postinstall": "node install.mjs"
|
|
15
|
-
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@delance/builder": "^0.2.
|
|
18
|
-
"@zip.js/zip.js": "^2.7.32"
|
|
17
|
+
"@delance/builder": "^0.2.5",
|
|
18
|
+
"@zip.js/zip.js": "^2.7.32",
|
|
19
|
+
"p-map": "^7.0.1",
|
|
20
|
+
"p-retry": "^6.2.0"
|
|
19
21
|
},
|
|
20
22
|
"devDependencies": {
|
|
21
23
|
"@biomejs/biome": "^1.4",
|
|
22
24
|
"@types/node": "^20",
|
|
23
25
|
"typescript": "^5.3"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"postinstall": "node install.mjs"
|
|
24
29
|
}
|
|
25
|
-
}
|
|
30
|
+
}
|