@lowlighter/toolbox 1.0.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.
Files changed (47) hide show
  1. package/README.md +14 -0
  2. package/clone.d.ts +9 -0
  3. package/clone.js +37 -0
  4. package/deno.lock +53 -0
  5. package/env.d.ts +28 -0
  6. package/env.js +28 -0
  7. package/evaluate.d.ts +49 -0
  8. package/evaluate.js +90 -0
  9. package/events.d.ts +8 -0
  10. package/events.js +28 -0
  11. package/filesystem.d.ts +19 -0
  12. package/filesystem.js +40 -0
  13. package/fixtures/filesystem/a/b/foo.txt +1 -0
  14. package/fixtures/filesystem/a/c/bar.txt +1 -0
  15. package/fixtures/filesystem/a/c/baz.txt +1 -0
  16. package/fixtures/filesystem/a/d/qux.ts +1 -0
  17. package/format.d.ts +9 -0
  18. package/format.js +21 -0
  19. package/identicon.d.ts +6 -0
  20. package/identicon.js +32 -0
  21. package/imgb64.d.ts +1 -0
  22. package/imgb64.js +15 -0
  23. package/mod.ts +1 -0
  24. package/noop.d.ts +1 -0
  25. package/noop.js +2 -0
  26. package/package.json +116 -0
  27. package/permissions.d.ts +1 -0
  28. package/permissions.js +31 -0
  29. package/pluralize.d.ts +6 -0
  30. package/pluralize.js +44 -0
  31. package/promises.d.ts +1 -0
  32. package/promises.js +12 -0
  33. package/resolve.d.ts +5 -0
  34. package/resolve.js +18 -0
  35. package/scripts/code_quality.d.ts +0 -0
  36. package/scripts/code_quality.js +210 -0
  37. package/scripts/download_lambda_chromium.d.ts +10 -0
  38. package/scripts/download_lambda_chromium.js +133 -0
  39. package/scripts/highlight_coverage.d.ts +0 -0
  40. package/scripts/highlight_coverage.js +62 -0
  41. package/scripts/publish/_utils.js +95 -0
  42. package/scripts/publish/npm.d.ts +11 -0
  43. package/scripts/publish/npm.js +130 -0
  44. package/scripts/publish/x.d.ts +20 -0
  45. package/scripts/publish/x.js +303 -0
  46. package/timezone.d.ts +2 -0
  47. package/timezone.js +8 -0
@@ -0,0 +1,133 @@
1
+ // Imports
2
+ // deno-lint-ignore-file no-console no-external-import
3
+ import { brotliDecompressSync } from "node:zlib";
4
+ import { ensureDir, exists } from "@std/fs";
5
+ import { basename, dirname, join, resolve } from "@std/path";
6
+ import { UntarStream } from "@std/tar";
7
+ import { toArrayBuffer } from "@std/streams";
8
+ import { parseArgs } from "@std/cli";
9
+ /** Locks. */ const locks = new Map();
10
+ /** Download Chromium binary for AWS Lambda environment. */ export function chromium({ version = "141.0.0", path = "/tmp/chromium", arch = Deno.build.arch, force = false, env = true, debug = false } = {}) {
11
+ // Install browser
12
+ path = resolve(path);
13
+ if (!locks.has(path)) {
14
+ locks.set(path, // deno-lint-ignore no-async-promise-executor
15
+ new Promise(async (resolve, reject)=>{
16
+ try {
17
+ if (!await exists(path) || force) {
18
+ const url = `https://github.com/Sparticuz/chromium/releases/download/v${version}/chromium-v${version}-pack.${{
19
+ x86_64: "x64",
20
+ aarch64: "arm64"
21
+ }[arch] ?? "unknown"}.tar`;
22
+ if (debug) console.debug(`Downloading Chromium v${version} from ${url}`);
23
+ const response = await fetch(url);
24
+ if (!response.ok) {
25
+ await response.body?.cancel();
26
+ throw new Error(`Failed to download Chromium: ${response.status} ${url}`);
27
+ }
28
+ await extract(response.body, {
29
+ path: dirname(path),
30
+ debug
31
+ });
32
+ }
33
+ resolve(path);
34
+ } catch (error) {
35
+ reject(error);
36
+ }
37
+ }));
38
+ }
39
+ // Set environment variables
40
+ if (env) {
41
+ if (!Deno.env.get("FONTCONFIG_PATH")) {
42
+ Deno.env.set("FONTCONFIG_PATH", join(dirname(path), "fonts"));
43
+ if (debug) console.debug(`Set FONTCONFIG_PATH to ${Deno.env.get("FONTCONFIG_PATH")}`);
44
+ }
45
+ if (!Deno.env.get("LD_LIBRARY_PATH")?.includes(join(dirname(path), "al2023"))) {
46
+ Deno.env.set("LD_LIBRARY_PATH", [
47
+ join(dirname(path), "al2023"),
48
+ Deno.env.get("LD_LIBRARY_PATH")
49
+ ].join(":"));
50
+ if (debug) console.debug(`Set LD_LIBRARY_PATH to ${Deno.env.get("LD_LIBRARY_PATH")}`);
51
+ }
52
+ }
53
+ return locks.get(path);
54
+ }
55
+ /** Extract tar stream. */ async function extract(stream, { path, debug }) {
56
+ for await (const entry of stream.pipeThrough(new UntarStream())){
57
+ if (!entry.readable) continue;
58
+ let name = basename(entry.path);
59
+ let buffer = await toArrayBuffer(entry.readable);
60
+ if (name.endsWith(".br")) {
61
+ name = basename(name, ".br");
62
+ buffer = brotliDecompressSync(buffer, {
63
+ chunkSize: 2 ** 21
64
+ });
65
+ }
66
+ if (name.endsWith(".tar")) {
67
+ name = basename(name, ".tar");
68
+ await extract(ReadableStream.from([
69
+ new Uint8Array(buffer)
70
+ ]), {
71
+ path: name === "swiftshader" ? path : join(path, name),
72
+ debug
73
+ });
74
+ continue;
75
+ }
76
+ name = join(path, name);
77
+ await ensureDir(dirname(name));
78
+ await Deno.writeFile(name, new Uint8Array(buffer));
79
+ await Deno.chmod(name, 0o700);
80
+ if (debug) console.debug(`Extracted ${name}`);
81
+ }
82
+ }
83
+ if (import.meta.main) {
84
+ const args = parseArgs(Deno.args, {
85
+ string: [
86
+ "version",
87
+ "path",
88
+ "arch"
89
+ ],
90
+ boolean: [
91
+ "env",
92
+ "force",
93
+ "debug",
94
+ "help"
95
+ ],
96
+ alias: {
97
+ v: "version",
98
+ p: "path",
99
+ a: "arch",
100
+ e: "env",
101
+ f: "force",
102
+ d: "debug",
103
+ h: "help"
104
+ }
105
+ });
106
+ if (args.help) {
107
+ console.log(`Downloads Chromium binary for AWS Lambda environment.
108
+
109
+ Usage:
110
+ deno run jsr:@libs/toolbox/download-lambda-chromium [options]
111
+
112
+ Options:
113
+ -v, --version Chromium version. Default is 141.0.0
114
+ -p, --path Path to save Chromium binary. Default is /tmp/chromium
115
+ -a, --arch System architecture. Default is current architecture
116
+ -e, --env Set environment variables for FONTCONFIG_PATH and LD_LIBRARY_PATH (requires --allow-env). Default is true
117
+ -f, --force Force download even if file exists
118
+ -d, --debug Enable debug logging
119
+ -h, --help Show this help message
120
+ `);
121
+ Deno.exit(2);
122
+ }
123
+ const path = await chromium({
124
+ version: args.version,
125
+ path: args.path,
126
+ arch: args.arch,
127
+ env: args.env,
128
+ force: args.force,
129
+ debug: args.debug
130
+ });
131
+ console.log(path);
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9saWJzL2xpYnMvQGxpYnMvdG9vbGJveC9zY3JpcHRzL2Rvd25sb2FkX2xhbWJkYV9jaHJvbWl1bS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGUgbm8tY29uc29sZSBuby1leHRlcm5hbC1pbXBvcnRcbmltcG9ydCB0eXBlIHsgQnVmZmVyIH0gZnJvbSBcIm5vZGU6YnVmZmVyXCJcbmltcG9ydCB7IGJyb3RsaURlY29tcHJlc3NTeW5jIH0gZnJvbSBcIm5vZGU6emxpYlwiXG5pbXBvcnQgeyBlbnN1cmVEaXIsIGV4aXN0cyB9IGZyb20gXCJAc3RkL2ZzXCJcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIkBzdGQvcGF0aFwiXG5pbXBvcnQgeyBVbnRhclN0cmVhbSB9IGZyb20gXCJAc3RkL3RhclwiXG5pbXBvcnQgeyB0b0FycmF5QnVmZmVyIH0gZnJvbSBcIkBzdGQvc3RyZWFtc1wiXG5pbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiQHN0ZC9jbGlcIlxuXG4vKiogTG9ja3MuICovXG5jb25zdCBsb2NrcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZz4+KClcblxuLyoqIENocm9taXVtIGRvd25sb2FkIG9wdGlvbnMuICovXG5leHBvcnQgdHlwZSBDaHJvbWl1bU9wdGlvbnMgPSB7XG4gIC8qKiBDaHJvbWl1bSB2ZXJzaW9uLiBEZWZhdWx0IGlzIGAxNDEuMC4wYC4gKi9cbiAgdmVyc2lvbj86IHN0cmluZ1xuICAvKiogUGF0aCB0byBzYXZlIENocm9taXVtIGJpbmFyeS4gRGVmYXVsdCBpcyBgL3RtcC9jaHJvbWl1bWAuICovXG4gIHBhdGg/OiBzdHJpbmdcbiAgLyoqIFN5c3RlbSBhcmNoaXRlY3R1cmUuIERlZmF1bHQgaXMgY3VycmVudCBhcmNoaXRlY3R1cmUuICovXG4gIGFyY2g/OiB0eXBlb2YgRGVuby5idWlsZC5hcmNoXG4gIC8qKiBEb3dubG9hZCBVUkwuICovXG4gIHVybD86IHN0cmluZ1xuICAvKiogRm9yY2UgZG93bmxvYWQgZXZlbiBpZiBmaWxlIGV4aXN0cy4gKi9cbiAgZm9yY2U/OiBib29sZWFuXG4gIC8qKiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBgRk9OVENPTkZJR19QQVRIYCBhbmQgYExEX0xJQlJBUllfUEFUSGAgKHJlcXVpcmVzIC0tYWxsb3ctZW52KS4gRGVmYXVsdCBpcyBgdHJ1ZWAuICovXG4gIGVudj86IGJvb2xlYW5cbiAgLyoqIEVuYWJsZSBkZWJ1Z2dpbmcuICovXG4gIGRlYnVnPzogYm9vbGVhblxufVxuXG4vKiogRG93bmxvYWQgQ2hyb21pdW0gYmluYXJ5IGZvciBBV1MgTGFtYmRhIGVudmlyb25tZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNocm9taXVtKHsgdmVyc2lvbiA9IFwiMTQxLjAuMFwiLCBwYXRoID0gXCIvdG1wL2Nocm9taXVtXCIsIGFyY2ggPSBEZW5vLmJ1aWxkLmFyY2gsIGZvcmNlID0gZmFsc2UsIGVudiA9IHRydWUsIGRlYnVnID0gZmFsc2UgfTogQ2hyb21pdW1PcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBJbnN0YWxsIGJyb3dzZXJcbiAgcGF0aCA9IHJlc29sdmUocGF0aClcbiAgaWYgKCFsb2Nrcy5oYXMocGF0aCkpIHtcbiAgICBsb2Nrcy5zZXQoXG4gICAgICBwYXRoLFxuICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoKCFhd2FpdCBleGlzdHMocGF0aCkpIHx8IGZvcmNlKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9naXRodWIuY29tL1NwYXJ0aWN1ei9jaHJvbWl1bS9yZWxlYXNlcy9kb3dubG9hZC92JHt2ZXJzaW9ufS9jaHJvbWl1bS12JHt2ZXJzaW9ufS1wYWNrLiR7eyB4ODZfNjQ6IFwieDY0XCIsIGFhcmNoNjQ6IFwiYXJtNjRcIiB9W2FyY2hdID8/IFwidW5rbm93blwifS50YXJgXG4gICAgICAgICAgICBpZiAoZGVidWcpXG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYERvd25sb2FkaW5nIENocm9taXVtIHYke3ZlcnNpb259IGZyb20gJHt1cmx9YClcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICBhd2FpdCByZXNwb25zZS5ib2R5Py5jYW5jZWwoKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCBDaHJvbWl1bTogJHtyZXNwb25zZS5zdGF0dXN9ICR7dXJsfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBleHRyYWN0KHJlc3BvbnNlLmJvZHkhLCB7IHBhdGg6IGRpcm5hbWUocGF0aCksIGRlYnVnIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUocGF0aClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIClcbiAgfVxuICAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIGlmIChlbnYpIHtcbiAgICBpZiAoIURlbm8uZW52LmdldChcIkZPTlRDT05GSUdfUEFUSFwiKSkge1xuICAgICAgRGVuby5lbnYuc2V0KFwiRk9OVENPTkZJR19QQVRIXCIsIGpvaW4oZGlybmFtZShwYXRoKSwgXCJmb250c1wiKSlcbiAgICAgIGlmIChkZWJ1ZylcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgU2V0IEZPTlRDT05GSUdfUEFUSCB0byAke0Rlbm8uZW52LmdldChcIkZPTlRDT05GSUdfUEFUSFwiKX1gKVxuICAgIH1cbiAgICBpZiAoIURlbm8uZW52LmdldChcIkxEX0xJQlJBUllfUEFUSFwiKT8uaW5jbHVkZXMoam9pbihkaXJuYW1lKHBhdGgpLCBcImFsMjAyM1wiKSkpIHtcbiAgICAgIERlbm8uZW52LnNldChcIkxEX0xJQlJBUllfUEFUSFwiLCBbam9pbihkaXJuYW1lKHBhdGgpLCBcImFsMjAyM1wiKSwgRGVuby5lbnYuZ2V0KFwiTERfTElCUkFSWV9QQVRIXCIpXS5qb2luKFwiOlwiKSlcbiAgICAgIGlmIChkZWJ1ZylcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgU2V0IExEX0xJQlJBUllfUEFUSCB0byAke0Rlbm8uZW52LmdldChcIkxEX0xJQlJBUllfUEFUSFwiKX1gKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsb2Nrcy5nZXQocGF0aCkhXG59XG5cbi8qKiBFeHRyYWN0IHRhciBzdHJlYW0uICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0KHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheTxBcnJheUJ1ZmZlcj4+LCB7IHBhdGgsIGRlYnVnIH06IHsgcGF0aDogc3RyaW5nOyBkZWJ1Zz86IGJvb2xlYW4gfSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIHN0cmVhbS5waXBlVGhyb3VnaChuZXcgVW50YXJTdHJlYW0oKSkpIHtcbiAgICBpZiAoIWVudHJ5LnJlYWRhYmxlKVxuICAgICAgY29udGludWVcbiAgICBsZXQgbmFtZSA9IGJhc2VuYW1lKGVudHJ5LnBhdGgpXG4gICAgbGV0IGJ1ZmZlciA9IGF3YWl0IHRvQXJyYXlCdWZmZXIoZW50cnkucmVhZGFibGUpIGFzIEFycmF5QnVmZmVyIHwgQnVmZmVyPEFycmF5QnVmZmVyTGlrZT5cbiAgICBpZiAobmFtZS5lbmRzV2l0aChcIi5iclwiKSkge1xuICAgICAgbmFtZSA9IGJhc2VuYW1lKG5hbWUsIFwiLmJyXCIpXG4gICAgICBidWZmZXIgPSBicm90bGlEZWNvbXByZXNzU3luYyhidWZmZXIsIHsgY2h1bmtTaXplOiAyICoqIDIxIH0pXG4gICAgfVxuICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiLnRhclwiKSkge1xuICAgICAgbmFtZSA9IGJhc2VuYW1lKG5hbWUsIFwiLnRhclwiKVxuICAgICAgYXdhaXQgZXh0cmFjdChSZWFkYWJsZVN0cmVhbS5mcm9tKFtuZXcgVWludDhBcnJheShidWZmZXIpXSksIHsgcGF0aDogbmFtZSA9PT0gXCJzd2lmdHNoYWRlclwiID8gcGF0aCA6IGpvaW4ocGF0aCwgbmFtZSksIGRlYnVnIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBuYW1lID0gam9pbihwYXRoLCBuYW1lKVxuICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKG5hbWUpKVxuICAgIGF3YWl0IERlbm8ud3JpdGVGaWxlKG5hbWUsIG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpXG4gICAgYXdhaXQgRGVuby5jaG1vZChuYW1lLCAwbzcwMClcbiAgICBpZiAoZGVidWcpXG4gICAgICBjb25zb2xlLmRlYnVnKGBFeHRyYWN0ZWQgJHtuYW1lfWApXG4gIH1cbn1cblxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcbiAgY29uc3QgYXJncyA9IHBhcnNlQXJncyhEZW5vLmFyZ3MsIHsgc3RyaW5nOiBbXCJ2ZXJzaW9uXCIsIFwicGF0aFwiLCBcImFyY2hcIl0sIGJvb2xlYW46IFtcImVudlwiLCBcImZvcmNlXCIsIFwiZGVidWdcIiwgXCJoZWxwXCJdLCBhbGlhczogeyB2OiBcInZlcnNpb25cIiwgcDogXCJwYXRoXCIsIGE6IFwiYXJjaFwiLCBlOiBcImVudlwiLCBmOiBcImZvcmNlXCIsIGQ6IFwiZGVidWdcIiwgaDogXCJoZWxwXCIgfSB9KVxuICBpZiAoYXJncy5oZWxwKSB7XG4gICAgY29uc29sZS5sb2coYERvd25sb2FkcyBDaHJvbWl1bSBiaW5hcnkgZm9yIEFXUyBMYW1iZGEgZW52aXJvbm1lbnQuXG5cblVzYWdlOlxuICBkZW5vIHJ1biBqc3I6QGxpYnMvdG9vbGJveC9kb3dubG9hZC1sYW1iZGEtY2hyb21pdW0gW29wdGlvbnNdXG5cbk9wdGlvbnM6XG4gIC12LCAtLXZlcnNpb24gICAgICAgQ2hyb21pdW0gdmVyc2lvbi4gRGVmYXVsdCBpcyAxNDEuMC4wXG4gIC1wLCAtLXBhdGggICAgICAgICAgUGF0aCB0byBzYXZlIENocm9taXVtIGJpbmFyeS4gRGVmYXVsdCBpcyAvdG1wL2Nocm9taXVtXG4gIC1hLCAtLWFyY2ggICAgICAgICAgU3lzdGVtIGFyY2hpdGVjdHVyZS4gRGVmYXVsdCBpcyBjdXJyZW50IGFyY2hpdGVjdHVyZVxuICAtZSwgLS1lbnYgICAgICAgICAgIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIEZPTlRDT05GSUdfUEFUSCBhbmQgTERfTElCUkFSWV9QQVRIIChyZXF1aXJlcyAtLWFsbG93LWVudikuIERlZmF1bHQgaXMgdHJ1ZVxuICAtZiwgLS1mb3JjZSAgICAgICAgIEZvcmNlIGRvd25sb2FkIGV2ZW4gaWYgZmlsZSBleGlzdHNcbiAgLWQsIC0tZGVidWcgICAgICAgICBFbmFibGUgZGVidWcgbG9nZ2luZ1xuICAtaCwgLS1oZWxwICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcbmApXG4gICAgRGVuby5leGl0KDIpXG4gIH1cbiAgY29uc3QgcGF0aCA9IGF3YWl0IGNocm9taXVtKHsgdmVyc2lvbjogYXJncy52ZXJzaW9uLCBwYXRoOiBhcmdzLnBhdGgsIGFyY2g6IGFyZ3MuYXJjaCBhcyB0eXBlb2YgRGVuby5idWlsZC5hcmNoLCBlbnY6IGFyZ3MuZW52LCBmb3JjZTogYXJncy5mb3JjZSwgZGVidWc6IGFyZ3MuZGVidWcgfSlcbiAgY29uc29sZS5sb2cocGF0aClcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1Ysc0RBQXNEO0FBRXRELFNBQVMsb0JBQW9CLFFBQVEsWUFBVztBQUNoRCxTQUFTLFNBQVMsRUFBRSxNQUFNLFFBQVEsVUFBUztBQUMzQyxTQUFTLFFBQVEsRUFB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
File without changes
@@ -0,0 +1,62 @@
1
+ // deno-lint-ignore-file no-console
2
+ import { parseArgs } from "@std/cli";
3
+ import { gray, green } from "@std/fmt/colors";
4
+ import { expandGlob } from "@std/fs";
5
+ // deno-lint-ignore no-import-prefix
6
+ const { default: hljs } = await import("highlight.js");
7
+ const args = parseArgs(Deno.args, {
8
+ string: [
9
+ "root",
10
+ "language"
11
+ ],
12
+ boolean: [
13
+ "help"
14
+ ],
15
+ default: {
16
+ root: "coverage",
17
+ language: "ts"
18
+ }
19
+ });
20
+ if (args.help) {
21
+ console.error(`Usage: deno run --allow-read --allow-write jsr:@libs/toolbox/scripts/highlight-coverage`);
22
+ console.error(``);
23
+ console.error(`Enhances HTML coverage reports generated by "deno coverage --html" with matcha.css styling and highlight.js syntax highlighting.`);
24
+ console.error(``);
25
+ console.error(`Options:`);
26
+ console.error(` --root=DIR Root directory to search for html coverage reports (default: coverage)`);
27
+ console.error(` --language=LANG Language used for syntax highlighting (default: ts)`);
28
+ console.error(` --help Show this help message`);
29
+ console.error(``);
30
+ Deno.exit(2);
31
+ }
32
+ const stylesheets = [
33
+ "@root",
34
+ "@syntax-highlighting",
35
+ "@istanbul-coverage"
36
+ ].map((name)=>`<link rel='stylesheet' href='https://matcha.mizu.sh/styles/${name}/mod.css'>`).join("");
37
+ const entities = {
38
+ "&lt;": "<",
39
+ "&gt;": ">",
40
+ "&quot;": '"',
41
+ "&#39;": "'",
42
+ "&amp;": "&"
43
+ };
44
+ for await (const { path } of expandGlob("**/*.html", {
45
+ root: args.root
46
+ })){
47
+ let html = await Deno.readTextFile(path);
48
+ if (!/<title>Coverage report/.test(html)) {
49
+ console.error(gray(`∅ ${path}`));
50
+ continue;
51
+ }
52
+ if (!html.includes("matcha.mizu.sh")) html = html.replace("</head>", `${stylesheets}</head>`);
53
+ html = html.replace(/<pre class='prettyprint'>([\s\S]*?)<\/pre>/g, (_, code)=>{
54
+ const text = Object.entries(entities).reduce((text, [entity, character])=>text.replaceAll(entity, character), code.replace(/<[^>]*>/g, ""));
55
+ return `<pre class='prettyprint hljs' data-highlighted='true'>${hljs.highlight(text, {
56
+ language: args.language
57
+ }).value}</pre>`;
58
+ });
59
+ await Deno.writeTextFile(path, html);
60
+ console.error(green(`✓ ${path}`));
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9saWJzL2xpYnMvQGxpYnMvdG9vbGJveC9zY3JpcHRzL2hpZ2hsaWdodF9jb3ZlcmFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkZW5vLWxpbnQtaWdub3JlLWZpbGUgbm8tY29uc29sZVxuaW1wb3J0IHsgcGFyc2VBcmdzIH0gZnJvbSBcIkBzdGQvY2xpXCJcbmltcG9ydCB7IGdyYXksIGdyZWVuIH0gZnJvbSBcIkBzdGQvZm10L2NvbG9yc1wiXG5pbXBvcnQgeyBleHBhbmRHbG9iIH0gZnJvbSBcIkBzdGQvZnNcIlxuLy8gZGVuby1saW50LWlnbm9yZSBuby1pbXBvcnQtcHJlZml4XG5jb25zdCB7IGRlZmF1bHQ6IGhsanMgfSA9IGF3YWl0IGltcG9ydChcImhpZ2hsaWdodC5qc1wiKVxuXG5jb25zdCBhcmdzID0gcGFyc2VBcmdzKERlbm8uYXJncywgeyBzdHJpbmc6IFtcInJvb3RcIiwgXCJsYW5ndWFnZVwiXSwgYm9vbGVhbjogW1wiaGVscFwiXSwgZGVmYXVsdDogeyByb290OiBcImNvdmVyYWdlXCIsIGxhbmd1YWdlOiBcInRzXCIgfSB9KVxuaWYgKGFyZ3MuaGVscCkge1xuICBjb25zb2xlLmVycm9yKGBVc2FnZTogZGVubyBydW4gLS1hbGxvdy1yZWFkIC0tYWxsb3ctd3JpdGUganNyOkBsaWJzL3Rvb2xib3gvc2NyaXB0cy9oaWdobGlnaHQtY292ZXJhZ2VgKVxuICBjb25zb2xlLmVycm9yKGBgKVxuICBjb25zb2xlLmVycm9yKGBFbmhhbmNlcyBIVE1MIGNvdmVyYWdlIHJlcG9ydHMgZ2VuZXJhdGVkIGJ5IFwiZGVubyBjb3ZlcmFnZSAtLWh0bWxcIiB3aXRoIG1hdGNoYS5jc3Mgc3R5bGluZyBhbmQgaGlnaGxpZ2h0LmpzIHN5bnRheCBoaWdobGlnaHRpbmcuYClcbiAgY29uc29sZS5lcnJvcihgYClcbiAgY29uc29sZS5lcnJvcihgT3B0aW9uczpgKVxuICBjb25zb2xlLmVycm9yKGAgIC0tcm9vdD1ESVIgICAgICAgUm9vdCBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBodG1sIGNvdmVyYWdlIHJlcG9ydHMgKGRlZmF1bHQ6IGNvdmVyYWdlKWApXG4gIGNvbnNvbGUuZXJyb3IoYCAgLS1sYW5ndWFnZT1MQU5HICBMYW5ndWFnZSB1c2VkIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIChkZWZhdWx0OiB0cylgKVxuICBjb25zb2xlLmVycm9yKGAgIC0taGVscCAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZWApXG4gIGNvbnNvbGUuZXJyb3IoYGApXG4gIERlbm8uZXhpdCgyKVxufVxuXG5jb25zdCBzdHlsZXNoZWV0cyA9IFtcIkByb290XCIsIFwiQHN5bnRheC1oaWdobGlnaHRpbmdcIiwgXCJAaXN0YW5idWwtY292ZXJhZ2VcIl0ubWFwKChuYW1lKSA9PiBgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSdodHRwczovL21hdGNoYS5taXp1LnNoL3N0eWxlcy8ke25hbWV9L21vZC5jc3MnPmApLmpvaW4oXCJcIilcbmNvbnN0IGVudGl0aWVzID0geyBcIiZsdDtcIjogXCI8XCIsIFwiJmd0O1wiOiBcIj5cIiwgXCImcXVvdDtcIjogJ1wiJywgXCImIzM5O1wiOiBcIidcIiwgXCImYW1wO1wiOiBcIiZcIiB9XG5cbmZvciBhd2FpdCAoY29uc3QgeyBwYXRoIH0gb2YgZXhwYW5kR2xvYihcIioqLyouaHRtbFwiLCB7IHJvb3Q6IGFyZ3Mucm9vdCB9KSkge1xuICBsZXQgaHRtbCA9IGF3YWl0IERlbm8ucmVhZFRleHRGaWxlKHBhdGgpXG4gIGlmICghLzx0aXRsZT5Db3ZlcmFnZSByZXBvcnQvLnRlc3QoaHRtbCkpIHtcbiAgICBjb25zb2xlLmVycm9yKGdyYXkoYOKIhSAke3BhdGh9YCkpXG4gICAgY29udGludWVcbiAgfVxuICBpZiAoIWh0bWwuaW5jbHVkZXMoXCJtYXRjaGEubWl6dS5zaFwiKSlcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKFwiPC9oZWFkPlwiLCBgJHtzdHlsZXNoZWV0c308L2hlYWQ+YClcbiAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPHByZSBjbGFzcz0ncHJldHR5cHJpbnQnPihbXFxzXFxTXSo/KTxcXC9wcmU+L2csIChfLCBjb2RlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gT2JqZWN0LmVudHJpZXMoZW50aXRpZXMpLnJlZHVjZSgodGV4dCwgW2VudGl0eSwgY2hhcmFjdGVyXSkgPT4gdGV4dC5yZXBsYWNlQWxsKGVudGl0eSwgY2hhcmFjdGVyKSwgY29kZS5yZXBsYWNlKC88W14+XSo+L2csIFwiXCIpKVxuICAgIHJldHVybiBgPHByZSBjbGFzcz0ncHJldHR5cHJpbnQgaGxqcycgZGF0YS1oaWdobGlnaHRlZD0ndHJ1ZSc+JHtobGpzLmhpZ2hsaWdodCh0ZXh0LCB7IGxhbmd1YWdlOiBhcmdzLmxhbmd1YWdlIH0pLnZhbHVlfTwvcHJlPmBcbiAgfSlcbiAgYXdhaXQgRGVuby53cml0ZVRleHRGaWxlKHBhdGgsIGh0bWwpXG4gIGNvbnNvbGUuZXJyb3IoZ3JlZW4oYOKckyAke3BhdGh9YCkpXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBQ25DLFNBQVMsU0FBUyxRQUFRLFdBQVU7QUFDcEMsU0FBUyxJQUFJLEVBQUUsS0FBSyxRQUFRLGtCQUFpQjtBQUM3QyxTQUFTLFVBQVUsUUFBUSxVQUFTO0FBQ3BDLG9DQUFvQztBQUNwQyxNQUFNLEVBQUUsU0FBUyxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxNQUFNLE9BQU8sVUFBVSxLQUFLLElBQUksRUFBRTtFQUFFLFFBQVE7SUFBQztJQUFRO0dBQVc7RUFBRSxTQUFTO0lBQUM7R0FBTztFQUFFLFNBQVM7SUFBRSxNQUFNO0lBQVksVUFBVTtFQUFLO0FBQUU7QUFDbkksSUFBSSxLQUFLLElBQUksRUFBRTtFQUNiLFFBQVEsS0FBSyxDQUFDLENBQUMsdUZBQXVGLENBQUM7RUFDdkcsUUFBUSxLQUFLLENBQUMsRUFBRTtFQUNoQixRQUFRLEtBQUssQ0FBQyxDQUFDLGdJQUFnSSxDQUFDO0VBQ2hKLFFBQVEsS0FBSyxDQUFDLEVBQUU7RUFDaEIsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUM7RUFDeEIsUUFBUSxLQUFLLENBQUMsQ0FBQyx5RkFBeUYsQ0FBQztFQUN6RyxRQUFRLEtBQUssQ0FBQyxDQUFDLHNFQUFzRSxDQUFDO0VBQ3RGLFFBQVEsS0FBSyxDQUFDLENBQUMseUNBQXlDLENBQUM7RUFDekQsUUFBUSxLQUFLLENBQUMsRUFBRTtFQUNoQixLQUFLLElBQUksQ0FBQztBQUNaO0FBRUEsTUFBTSxjQUFjO0VBQUM7RUFBUztFQUF3QjtDQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVMsQ0FBQywyREFBMkQsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUMvSyxNQUFNLFdBQVc7RUFBRSxRQUFRO0VBQUssUUFBUTtFQUFLLFVBQVU7RUFBSyxTQUFTO0VBQUssU0FBUztBQUFJO0FBRXZGLFdBQVcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLFdBQVcsYUFBYTtFQUFFLE1BQU0sS0FBSyxJQUFJO0FBQUMsR0FBSTtFQUN6RSxJQUFJLE9BQU8sTUFBTSxLQUFLLFlBQVksQ0FBQztFQUNuQyxJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQyxPQUFPO0lBQ3hDLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTTtJQUM5QjtFQUNGO0VBQ0EsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLG1CQUNqQixPQUFPLEtBQUssT0FBTyxDQUFDLFdBQVcsR0FBRyxZQUFZLE9BQU8sQ0FBQztFQUN4RCxPQUFPLEtBQUssT0FBTyxDQUFDLCtDQUErQyxDQUFDLEdBQUc7SUFDckUsTUFBTSxPQUFPLE9BQU8sT0FBTyxDQUFDLFVBQVUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsVUFBVSxHQUFLLEtBQUssVUFBVSxDQUFDLFFBQVEsWUFBWSxLQUFLLE9BQU8sQ0FBQyxZQUFZO0lBQ3pJLE9BQU8sQ0FBQyxzREFBc0QsRUFBRSxLQUFLLFNBQVMsQ0FBQyxNQUFNO01BQUUsVUFBVSxLQUFLLFFBQVE7SUFBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7RUFDakk7RUFDQSxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU07RUFDL0IsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNO0FBQ2pDIn0=
@@ -0,0 +1,95 @@
1
+ // Imports
2
+ import { expandGlob } from "@std/fs";
3
+ import { dirname, resolve } from "@std/path";
4
+ import * as JSONC from "@std/jsonc/parse";
5
+ /**
6
+ * Rewrite the scope of import specifiers in file content.
7
+ *
8
+ * An empty `to` removes the scope entirely.
9
+ *
10
+ * ```ts
11
+ * import { rescope } from "./_utils.ts"
12
+ * rescope('import { command } from "@lowlighter/run/command"', { from: "@libs", to: "@lowlighter" })
13
+ * ```
14
+ */ export function rescope(content, { from, to }) {
15
+ return content.replaceAll(`"${from}/`, to ? `"${to}/` : `"`);
16
+ }
17
+ /**
18
+ * Resolve all imports from file content against an import map.
19
+ *
20
+ * Bare specifiers matching an import map entry are replaced by their mapped value,
21
+ * and specifiers matching a trailing-slash entry have their prefix substituted.
22
+ *
23
+ * Both static imports and statically analyzable dynamic imports (i.e. `import()` calls with a string literal) are resolved.
24
+ *
25
+ * ```ts
26
+ * import { unmap } from "./_utils.ts"
27
+ * unmap('import { command } from "@lowlighter/run/command"', { "@lowlighter/run/": "jsr:@libs/run@^3.0.0/" })
28
+ * ```
29
+ */ export function unmap(content, imports) {
30
+ let resolved = 0;
31
+ const directories = Object.keys(imports).filter((module)=>module.endsWith("/"));
32
+ const remap = (module)=>{
33
+ let mapped = null;
34
+ if (module in imports) mapped = imports[module];
35
+ else if (directories.some((directory)=>module.startsWith(directory))) {
36
+ const [directory] = directories.filter((directory)=>module.startsWith(directory)).sort((a, b)=>b.length - a.length);
37
+ mapped = module.replace(directory, imports[directory]);
38
+ }
39
+ return mapped;
40
+ };
41
+ const substitute = (match, statement, quote, module)=>{
42
+ const mapped = remap(module);
43
+ if (typeof mapped === "string") {
44
+ resolved++;
45
+ return `${statement}${mapped}${quote}`;
46
+ }
47
+ return match;
48
+ };
49
+ const result = content.replace(/^(?<statement>\s*(?:import|export)\s*(?:(?:\s+type)?\s+(?:[^\n]+?|(?:\{[\s\S]*?\}))\s+from\s+)?(?<quote>["']))(?<module>[^\n]+?)\k<quote>/gm, substitute).replace(/(?<statement>\bimport\s*\(\s*(?<quote>["']))(?<module>[^"'\n]+?)\k<quote>/g, substitute);
50
+ return {
51
+ result,
52
+ resolved
53
+ };
54
+ }
55
+ /**
56
+ * Compute an import map for workspace members.
57
+ *
58
+ * The workspace root is located by walking up from `cwd` until a `deno.json(c)` manifest with a `workspace` field is found.
59
+ * Each member with a `name` and `version` is mapped to its jsr.io counterpart (e.g. `@libs/run/` → `jsr:@libs/run@^3.0.0/`),
60
+ * so cross-package imports resolved through the workspace keep working once published on deno.land/x.
61
+ */ export async function workspaceImports(cwd = Deno.cwd()) {
62
+ const imports = {};
63
+ for(let root = resolve(cwd);; root = dirname(root)){
64
+ const parsed = manifest(root);
65
+ if (parsed?.workspace) {
66
+ for (const member of parsed.workspace){
67
+ for await (const { path } of expandGlob(`${member}/deno.json?(c)`, {
68
+ root,
69
+ includeDirs: false
70
+ })){
71
+ const { name, version } = manifest(dirname(path));
72
+ if (!name || !version) continue;
73
+ imports[name] = `jsr:${name}@^${version}`;
74
+ imports[`${name}/`] = `jsr:${name}@^${version}/`;
75
+ }
76
+ }
77
+ return imports;
78
+ }
79
+ if (root === dirname(root)) return imports;
80
+ }
81
+ }
82
+ /** Read and parse the `deno.jsonc` or `deno.json` manifest from a directory (`null` when absent). */ export function manifest(directory) {
83
+ for (const filename of [
84
+ "deno.jsonc",
85
+ "deno.json"
86
+ ]){
87
+ try {
88
+ return JSONC.parse(Deno.readTextFileSync(resolve(directory, filename)));
89
+ } catch (error) {
90
+ if (!(error instanceof Deno.errors.NotFound)) throw error;
91
+ }
92
+ }
93
+ return null;
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9saWJzL2xpYnMvQGxpYnMvdG9vbGJveC9zY3JpcHRzL3B1Ymxpc2gvX3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCB0eXBlIHsgTnVsbGFibGUgfSBmcm9tIFwiQGxpYnMvdHlwaW5nXCJcbmltcG9ydCB7IGV4cGFuZEdsb2IgfSBmcm9tIFwiQHN0ZC9mc1wiXG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSBcIkBzdGQvcGF0aFwiXG5pbXBvcnQgKiBhcyBKU09OQyBmcm9tIFwiQHN0ZC9qc29uYy9wYXJzZVwiXG5cbi8qKlxuICogUmV3cml0ZSB0aGUgc2NvcGUgb2YgaW1wb3J0IHNwZWNpZmllcnMgaW4gZmlsZSBjb250ZW50LlxuICpcbiAqIEFuIGVtcHR5IGB0b2AgcmVtb3ZlcyB0aGUgc2NvcGUgZW50aXJlbHkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlc2NvcGUgfSBmcm9tIFwiLi9fdXRpbHMudHNcIlxuICogcmVzY29wZSgnaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gXCJAbGlicy9ydW4vY29tbWFuZFwiJywgeyBmcm9tOiBcIkBsaWJzXCIsIHRvOiBcIkBsb3dsaWdodGVyXCIgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzY29wZShjb250ZW50OiBzdHJpbmcsIHsgZnJvbSwgdG8gfTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gIHJldHVybiBjb250ZW50LnJlcGxhY2VBbGwoYFwiJHtmcm9tfS9gLCB0byA/IGBcIiR7dG99L2AgOiBgXCJgKVxufVxuXG4vKipcbiAqIFJlc29sdmUgYWxsIGltcG9ydHMgZnJvbSBmaWxlIGNvbnRlbnQgYWdhaW5zdCBhbiBpbXBvcnQgbWFwLlxuICpcbiAqIEJhcmUgc3BlY2lmaWVycyBtYXRjaGluZyBhbiBpbXBvcnQgbWFwIGVudHJ5IGFyZSByZXBsYWNlZCBieSB0aGVpciBtYXBwZWQgdmFsdWUsXG4gKiBhbmQgc3BlY2lmaWVycyBtYXRjaGluZyBhIHRyYWlsaW5nLXNsYXNoIGVudHJ5IGhhdmUgdGhlaXIgcHJlZml4IHN1YnN0aXR1dGVkLlxuICpcbiAqIEJvdGggc3RhdGljIGltcG9ydHMgYW5kIHN0YXRpY2FsbHkgYW5hbHl6YWJsZSBkeW5hbWljIGltcG9ydHMgKGkuZS4gYGltcG9ydCgpYCBjYWxscyB3aXRoIGEgc3RyaW5nIGxpdGVyYWwpIGFyZSByZXNvbHZlZC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdW5tYXAgfSBmcm9tIFwiLi9fdXRpbHMudHNcIlxuICogdW5tYXAoJ2ltcG9ydCB7IGNvbW1hbmQgfSBmcm9tIFwiQGxpYnMvcnVuL2NvbW1hbmRcIicsIHsgXCJAbGlicy9ydW4vXCI6IFwianNyOkBsaWJzL3J1bkBeMy4wLjAvXCIgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5tYXAoY29udGVudDogc3RyaW5nLCBpbXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogeyByZXN1bHQ6IHN0cmluZzsgcmVzb2x2ZWQ6IG51bWJlciB9IHtcbiAgbGV0IHJlc29sdmVkID0gMFxuICBjb25zdCBkaXJlY3RvcmllcyA9IE9iamVjdC5rZXlzKGltcG9ydHMpLmZpbHRlcigobW9kdWxlKSA9PiBtb2R1bGUuZW5kc1dpdGgoXCIvXCIpKVxuICBjb25zdCByZW1hcCA9IChtb2R1bGU6IHN0cmluZykgPT4ge1xuICAgIGxldCBtYXBwZWQgPSBudWxsIGFzIE51bGxhYmxlPHN0cmluZz5cbiAgICBpZiAobW9kdWxlIGluIGltcG9ydHMpXG4gICAgICBtYXBwZWQgPSBpbXBvcnRzW21vZHVsZV1cbiAgICBlbHNlIGlmIChkaXJlY3Rvcmllcy5zb21lKChkaXJlY3RvcnkpID0+IG1vZHVsZS5zdGFydHNXaXRoKGRpcmVjdG9yeSkpKSB7XG4gICAgICBjb25zdCBbZGlyZWN0b3J5XSA9IGRpcmVjdG9yaWVzLmZpbHRlcigoZGlyZWN0b3J5KSA9PiBtb2R1bGUuc3RhcnRzV2l0aChkaXJlY3RvcnkpKS5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVxuICAgICAgbWFwcGVkID0gbW9kdWxlLnJlcGxhY2UoZGlyZWN0b3J5LCBpbXBvcnRzW2RpcmVjdG9yeV0pXG4gICAgfVxuICAgIHJldHVybiBtYXBwZWRcbiAgfVxuICBjb25zdCBzdWJzdGl0dXRlID0gKG1hdGNoOiBzdHJpbmcsIHN0YXRlbWVudDogc3RyaW5nLCBxdW90ZTogc3RyaW5nLCBtb2R1bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1hcHBlZCA9IHJlbWFwKG1vZHVsZSlcbiAgICBpZiAodHlwZW9mIG1hcHBlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmVzb2x2ZWQrK1xuICAgICAgcmV0dXJuIGAke3N0YXRlbWVudH0ke21hcHBlZH0ke3F1b3RlfWBcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gY29udGVudFxuICAgIC5yZXBsYWNlKC9eKD88c3RhdGVtZW50PlxccyooPzppbXBvcnR8ZXhwb3J0KVxccyooPzooPzpcXHMrdHlwZSk/XFxzKyg/OlteXFxuXSs/fCg/Olxce1tcXHNcXFNdKj9cXH0pKVxccytmcm9tXFxzKyk/KD88cXVvdGU+W1wiJ10pKSg/PG1vZHVsZT5bXlxcbl0rPylcXGs8cXVvdGU+L2dtLCBzdWJzdGl0dXRlKVxuICAgIC5yZXBsYWNlKC8oPzxzdGF0ZW1lbnQ+XFxiaW1wb3J0XFxzKlxcKFxccyooPzxxdW90ZT5bXCInXSkpKD88bW9kdWxlPlteXCInXFxuXSs/KVxcazxxdW90ZT4vZywgc3Vic3RpdHV0ZSlcbiAgcmV0dXJuIHsgcmVzdWx0LCByZXNvbHZlZCB9XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhbiBpbXBvcnQgbWFwIGZvciB3b3Jrc3BhY2UgbWVtYmVycy5cbiAqXG4gKiBUaGUgd29ya3NwYWNlIHJvb3QgaXMgbG9jYXRlZCBieSB3YWxraW5nIHVwIGZyb20gYGN3ZGAgdW50aWwgYSBgZGVuby5qc29uKGMpYCBtYW5pZmVzdCB3aXRoIGEgYHdvcmtzcGFjZWAgZmllbGQgaXMgZm91bmQuXG4gKiBFYWNoIG1lbWJlciB3aXRoIGEgYG5hbWVgIGFuZCBgdmVyc2lvbmAgaXMgbWFwcGVkIHRvIGl0cyBqc3IuaW8gY291bnRlcnBhcnQgKGUuZy4gYEBsaWJzL3J1bi9gIOKGkiBganNyOkBsaWJzL3J1bkBeMy4wLjAvYCksXG4gKiBzbyBjcm9zcy1wYWNrYWdlIGltcG9ydHMgcmVzb2x2ZWQgdGhyb3VnaCB0aGUgd29ya3NwYWNlIGtlZXAgd29ya2luZyBvbmNlIHB1Ymxpc2hlZCBvbiBkZW5vLmxhbmQveC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtzcGFjZUltcG9ydHMoY3dkOiBzdHJpbmcgPSBEZW5vLmN3ZCgpKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGltcG9ydHMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGZvciAobGV0IHJvb3QgPSByZXNvbHZlKGN3ZCk7OyByb290ID0gZGlybmFtZShyb290KSkge1xuICAgIGNvbnN0IHBhcnNlZCA9IG1hbmlmZXN0KHJvb3QpXG4gICAgaWYgKHBhcnNlZD8ud29ya3NwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBwYXJzZWQud29ya3NwYWNlKSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgeyBwYXRoIH0gb2YgZXhwYW5kR2xvYihgJHttZW1iZXJ9L2Rlbm8uanNvbj8oYylgLCB7IHJvb3QsIGluY2x1ZGVEaXJzOiBmYWxzZSB9KSkge1xuICAgICAgICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWFuaWZlc3QoZGlybmFtZShwYXRoKSkhXG4gICAgICAgICAgaWYgKCghbmFtZSkgfHwgKCF2ZXJzaW9uKSlcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgaW1wb3J0c1tuYW1lXSA9IGBqc3I6JHtuYW1lfUBeJHt2ZXJzaW9ufWBcbiAgICAgICAgICBpbXBvcnRzW2Ake25hbWV9L2BdID0gYGpzcjoke25hbWV9QF4ke3ZlcnNpb259L2BcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGltcG9ydHNcbiAgICB9XG4gICAgaWYgKHJvb3QgPT09IGRpcm5hbWUocm9vdCkpXG4gICAgICByZXR1cm4gaW1wb3J0c1xuICB9XG59XG5cbi8qKiBQYXJzZWQgYGRlbm8uanNvbihjKWAgbWFuaWZlc3QuICovXG50eXBlIE1hbmlmZXN0ID0geyBuYW1lPzogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nOyB3b3Jrc3BhY2U/OiBzdHJpbmdbXTsgaW1wb3J0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IHB1Ymxpc2g/OiB7IGV4Y2x1ZGU/OiBzdHJpbmdbXSB9IH1cblxuLyoqIFJlYWQgYW5kIHBhcnNlIHRoZSBgZGVuby5qc29uY2Agb3IgYGRlbm8uanNvbmAgbWFuaWZlc3QgZnJvbSBhIGRpcmVjdG9yeSAoYG51bGxgIHdoZW4gYWJzZW50KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdChkaXJlY3Rvcnk6IHN0cmluZyk6IE51bGxhYmxlPE1hbmlmZXN0PiB7XG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgW1wiZGVuby5qc29uY1wiLCBcImRlbm8uanNvblwiXSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTkMucGFyc2UoRGVuby5yZWFkVGV4dEZpbGVTeW5jKHJlc29sdmUoZGlyZWN0b3J5LCBmaWxlbmFtZSkpKSBhcyBNYW5pZmVzdFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBRVYsU0FBUyxVQUFVLFFBQVEs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
@@ -0,0 +1,11 @@
1
+ /** Publish a package on npm registries. */ export declare function publish({}?: Options): Promise<{
2
+ name: string;
3
+ version: string;
4
+ directory: string;
5
+ }>;
6
+ /** Publishing options for {@linkcode publish()}. */ export type Options = {
7
+ /** Path to the package to publish (defaults to the current working directory). */ package?: string;
8
+ /** Scope to publish under: `"@"` keeps the original scope (default), `""` removes the scope, any other value replaces it. */ scope?: string;
9
+ /** Whether to publish with private (restricted) registry access (defaults to `false`). */ private?: boolean;
10
+ /** Do not actually publish (the package is packed and rewritten, but `npm publish` is run with `--dry-run`). */ dryrun?: boolean;
11
+ };
@@ -0,0 +1,130 @@
1
+ // deno-lint-ignore-file no-console
2
+ /**
3
+ * Publish a package on npm registries.
4
+ *
5
+ * 1. Run `deno pack` to create an npm-compatible tarball
6
+ * 2. Extract it and rewrite the package scope (e.g. `@libs/git` → `@lowlighter/git`), both in `package.json` and in compiled files
7
+ * 3. Add `dependencies` entries for workspace members imported by the package (which `deno pack` leaves as bare specifiers)
8
+ * 4. Run `npm publish` on the extracted package
9
+ *
10
+ * Authentication is expected to be configured beforehand (e.g. through a `~/.npmrc` file).
11
+ *
12
+ * @module
13
+ */ // Imports
14
+ import { parseArgs } from "@std/cli";
15
+ import { expandGlob } from "@std/fs";
16
+ import { command } from "@lowlighter/run/command";
17
+ import { rescope, workspaceImports } from "./_utils.js";
18
+ import { cyan, gray, green } from "@std/fmt/colors";
19
+ /** Publish a package on npm registries. */ export async function publish({ package: pkg = Deno.cwd(), scope = "@", private: restricted = false, dryrun = false } = {}) {
20
+ // Create npm-compatible tarball and extract it
21
+ const env = Deno.env.toObject();
22
+ const directory = await Deno.makeTempDir();
23
+ console.error(`packing ${pkg} to ${directory}`);
24
+ await command("deno", [
25
+ "pack",
26
+ "--allow-dirty",
27
+ "--quiet",
28
+ "--output",
29
+ `${directory}/package.tgz`
30
+ ], {
31
+ env,
32
+ cwd: pkg,
33
+ throw: true
34
+ });
35
+ await command("tar", [
36
+ "--extract",
37
+ "--gzip",
38
+ `--file=${directory}/package.tgz`,
39
+ `--directory=${directory}`
40
+ ], {
41
+ env,
42
+ throw: true
43
+ });
44
+ // Rewrite package scope and register workspace dependencies
45
+ const manifest = JSON.parse(await Deno.readTextFile(`${directory}/package/package.json`));
46
+ if (!manifest.name.startsWith("@")) throw new RangeError(`Package name is not scoped: ${manifest.name}`);
47
+ const from = manifest.name.split("/")[0];
48
+ const to = scope === "@" ? from : scope;
49
+ const rename = (name)=>to ? name.replace(from, to) : name.replace(`${from}/`, "");
50
+ const workspace = await workspaceImports(pkg);
51
+ const members = Object.fromEntries(Object.entries(workspace).filter(([member])=>!member.endsWith("/")).map(([member, jsr])=>[
52
+ member,
53
+ jsr.match(/@\^(?<version>.*)$/).groups.version
54
+ ]));
55
+ manifest.name = rename(manifest.name);
56
+ console.error(`rewriting scope ${from} → ${to || "(no scope)"} for ${manifest.name}@${manifest.version}`);
57
+ for await (const { path } of expandGlob("package/**/*.{js,mjs,cjs,ts,mts,cts}", {
58
+ root: directory,
59
+ includeDirs: false
60
+ })){
61
+ const content = await Deno.readTextFile(path);
62
+ for (const [member, version] of Object.entries(members)){
63
+ if (new RegExp(`["']${member}(?:/[^"']*)?["']`).test(content)) {
64
+ manifest.dependencies ??= {};
65
+ manifest.dependencies[rename(member)] ??= `^${version}`;
66
+ }
67
+ }
68
+ await Deno.writeTextFile(path, rescope(content, {
69
+ from,
70
+ to
71
+ }));
72
+ }
73
+ const manifestJson = JSON.stringify(manifest, null, 2);
74
+ console.error(gray(manifestJson));
75
+ await Deno.writeTextFile(`${directory}/package/package.json`, `${manifestJson}\n`);
76
+ // Publish extracted package
77
+ console.error(cyan(`publishing ${manifest.name}@${manifest.version}${dryrun ? " (dryrun)" : ""}`));
78
+ await command("npm", [
79
+ "publish",
80
+ `${directory}/package`,
81
+ "--access",
82
+ restricted ? "restricted" : "public",
83
+ ...dryrun ? [
84
+ "--dry-run"
85
+ ] : []
86
+ ], {
87
+ env,
88
+ throw: true
89
+ });
90
+ console.error(green(`published ${manifest.name}@${manifest.version}`));
91
+ return {
92
+ name: manifest.name,
93
+ version: manifest.version,
94
+ directory
95
+ };
96
+ }
97
+ // Entry point
98
+ if (import.meta.main) {
99
+ const args = parseArgs(Deno.args, {
100
+ string: [
101
+ "package",
102
+ "scope"
103
+ ],
104
+ boolean: [
105
+ "private",
106
+ "dryrun",
107
+ "help"
108
+ ],
109
+ default: {
110
+ scope: "@"
111
+ }
112
+ });
113
+ if (args.help) {
114
+ console.error("Usage: deno run --allow-all jsr:@libs/toolbox/scripts/publish/npm [options]");
115
+ console.error("");
116
+ console.error("Options:");
117
+ console.error(" --package [package] Path to the package to publish (defaults to the current working directory)");
118
+ console.error(" --scope [scope=@] Scope to publish under (`@` keeps the original scope, an empty value removes it, any other value replaces it)");
119
+ console.error(" --private Publish with private (restricted) registry access (default: public)");
120
+ console.error(" --dryrun Do not actually publish");
121
+ Deno.exit(2);
122
+ }
123
+ await publish({
124
+ package: args.package,
125
+ scope: args.scope,
126
+ private: args.private,
127
+ dryrun: args.dryrun
128
+ });
129
+ }
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9saWJzL2xpYnMvQGxpYnMvdG9vbGJveC9zY3JpcHRzL3B1Ymxpc2gvbnBtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZSBuby1jb25zb2xlXG4vKipcbiAqIFB1Ymxpc2ggYSBwYWNrYWdlIG9uIG5wbSByZWdpc3RyaWVzLlxuICpcbiAqIDEuIFJ1biBgZGVubyBwYWNrYCB0byBjcmVhdGUgYW4gbnBtLWNvbXBhdGlibGUgdGFyYmFsbFxuICogMi4gRXh0cmFjdCBpdCBhbmQgcmV3cml0ZSB0aGUgcGFja2FnZSBzY29wZSAoZS5nLiBgQGxpYnMvZ2l0YCDihpIgYEBsb3dsaWdodGVyL2dpdGApLCBib3RoIGluIGBwYWNrYWdlLmpzb25gIGFuZCBpbiBjb21waWxlZCBmaWxlc1xuICogMy4gQWRkIGBkZXBlbmRlbmNpZXNgIGVudHJpZXMgZm9yIHdvcmtzcGFjZSBtZW1iZXJzIGltcG9ydGVkIGJ5IHRoZSBwYWNrYWdlICh3aGljaCBgZGVubyBwYWNrYCBsZWF2ZXMgYXMgYmFyZSBzcGVjaWZpZXJzKVxuICogNC4gUnVuIGBucG0gcHVibGlzaGAgb24gdGhlIGV4dHJhY3RlZCBwYWNrYWdlXG4gKlxuICogQXV0aGVudGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY29uZmlndXJlZCBiZWZvcmVoYW5kIChlLmcuIHRocm91Z2ggYSBgfi8ubnBtcmNgIGZpbGUpLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tIFwiQHN0ZC9jbGlcIlxuaW1wb3J0IHsgZXhwYW5kR2xvYiB9IGZyb20gXCJAc3RkL2ZzXCJcbmltcG9ydCB7IGNvbW1hbmQgfSBmcm9tIFwiQGxpYnMvcnVuL2NvbW1hbmRcIlxuaW1wb3J0IHsgcmVzY29wZSwgd29ya3NwYWNlSW1wb3J0cyB9IGZyb20gXCIuL191dGlscy5qc1wiXG5pbXBvcnQgeyBjeWFuLCBncmF5LCBncmVlbiB9IGZyb20gXCJAc3RkL2ZtdC9jb2xvcnNcIlxuXG4vKiogUHVibGlzaCBhIHBhY2thZ2Ugb24gbnBtIHJlZ2lzdHJpZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaCh7IHBhY2thZ2U6IHBrZyA9IERlbm8uY3dkKCksIHNjb3BlID0gXCJAXCIsIHByaXZhdGU6IHJlc3RyaWN0ZWQgPSBmYWxzZSwgZHJ5cnVuID0gZmFsc2UgfTogT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nOyBkaXJlY3Rvcnk6IHN0cmluZyB9PiB7XG4gIC8vIENyZWF0ZSBucG0tY29tcGF0aWJsZSB0YXJiYWxsIGFuZCBleHRyYWN0IGl0XG4gIGNvbnN0IGVudiA9IERlbm8uZW52LnRvT2JqZWN0KClcbiAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgRGVuby5tYWtlVGVtcERpcigpXG4gIGNvbnNvbGUuZXJyb3IoYHBhY2tpbmcgJHtwa2d9IHRvICR7ZGlyZWN0b3J5fWApXG4gIGF3YWl0IGNvbW1hbmQoXCJkZW5vXCIsIFtcInBhY2tcIiwgXCItLWFsbG93LWRpcnR5XCIsIFwiLS1xdWlldFwiLCBcIi0tb3V0cHV0XCIsIGAke2RpcmVjdG9yeX0vcGFja2FnZS50Z3pgXSwgeyBlbnYsIGN3ZDogcGtnLCB0aHJvdzogdHJ1ZSB9KVxuICBhd2FpdCBjb21tYW5kKFwidGFyXCIsIFtcIi0tZXh0cmFjdFwiLCBcIi0tZ3ppcFwiLCBgLS1maWxlPSR7ZGlyZWN0b3J5fS9wYWNrYWdlLnRnemAsIGAtLWRpcmVjdG9yeT0ke2RpcmVjdG9yeX1gXSwgeyBlbnYsIHRocm93OiB0cnVlIH0pXG5cbiAgLy8gUmV3cml0ZSBwYWNrYWdlIHNjb3BlIGFuZCByZWdpc3RlciB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzXG4gIGNvbnN0IG1hbmlmZXN0ID0gSlNPTi5wYXJzZShhd2FpdCBEZW5vLnJlYWRUZXh0RmlsZShgJHtkaXJlY3Rvcnl9L3BhY2thZ2UvcGFja2FnZS5qc29uYCkpIGFzIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmc7IGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfVxuICBpZiAoIW1hbmlmZXN0Lm5hbWUuc3RhcnRzV2l0aChcIkBcIikpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBhY2thZ2UgbmFtZSBpcyBub3Qgc2NvcGVkOiAke21hbmlmZXN0Lm5hbWV9YClcbiAgY29uc3QgZnJvbSA9IG1hbmlmZXN0Lm5hbWUuc3BsaXQoXCIvXCIpWzBdXG4gIGNvbnN0IHRvID0gc2NvcGUgPT09IFwiQFwiID8gZnJvbSA6IHNjb3BlXG4gIGNvbnN0IHJlbmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHRvID8gbmFtZS5yZXBsYWNlKGZyb20sIHRvKSA6IG5hbWUucmVwbGFjZShgJHtmcm9tfS9gLCBcIlwiKVxuICBjb25zdCB3b3Jrc3BhY2UgPSBhd2FpdCB3b3Jrc3BhY2VJbXBvcnRzKHBrZylcbiAgY29uc3QgbWVtYmVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh3b3Jrc3BhY2UpXG4gICAgICAuZmlsdGVyKChbbWVtYmVyXSkgPT4gIW1lbWJlci5lbmRzV2l0aChcIi9cIikpXG4gICAgICAubWFwKChbbWVtYmVyLCBqc3JdKSA9PiBbbWVtYmVyLCBqc3IubWF0Y2goL0BcXF4oPzx2ZXJzaW9uPi4qKSQvKSEuZ3JvdXBzIS52ZXJzaW9uXSksXG4gIClcbiAgbWFuaWZlc3QubmFtZSA9IHJlbmFtZShtYW5pZmVzdC5uYW1lKVxuICBjb25zb2xlLmVycm9yKGByZXdyaXRpbmcgc2NvcGUgJHtmcm9tfSDihpIgJHt0byB8fCBcIihubyBzY29wZSlcIn0gZm9yICR7bWFuaWZlc3QubmFtZX1AJHttYW5pZmVzdC52ZXJzaW9ufWApXG4gIGZvciBhd2FpdCAoY29uc3QgeyBwYXRoIH0gb2YgZXhwYW5kR2xvYihcInBhY2thZ2UvKiovKi57anMsbWpzLGNqcyx0cyxtdHMsY3RzfVwiLCB7IHJvb3Q6IGRpcmVjdG9yeSwgaW5jbHVkZURpcnM6IGZhbHNlIH0pKSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IERlbm8ucmVhZFRleHRGaWxlKHBhdGgpXG4gICAgZm9yIChjb25zdCBbbWVtYmVyLCB2ZXJzaW9uXSBvZiBPYmplY3QuZW50cmllcyhtZW1iZXJzKSkge1xuICAgICAgaWYgKG5ldyBSZWdFeHAoYFtcIiddJHttZW1iZXJ9KD86L1teXCInXSopP1tcIiddYCkudGVzdChjb250ZW50KSkge1xuICAgICAgICBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgPz89IHt9XG4gICAgICAgIG1hbmlmZXN0LmRlcGVuZGVuY2llc1tyZW5hbWUobWVtYmVyKV0gPz89IGBeJHt2ZXJzaW9ufWBcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgRGVuby53cml0ZVRleHRGaWxlKHBhdGgsIHJlc2NvcGUoY29udGVudCwgeyBmcm9tLCB0byB9KSlcbiAgfVxuICBjb25zdCBtYW5pZmVzdEpzb24gPSBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMilcbiAgY29uc29sZS5lcnJvcihncmF5KG1hbmlmZXN0SnNvbikpXG4gIGF3YWl0IERlbm8ud3JpdGVUZXh0RmlsZShgJHtkaXJlY3Rvcnl9L3BhY2thZ2UvcGFja2FnZS5qc29uYCwgYCR7bWFuaWZlc3RKc29ufVxcbmApXG5cbiAgLy8gUHVibGlzaCBleHRyYWN0ZWQgcGFja2FnZVxuICBjb25zb2xlLmVycm9yKGN5YW4oYHB1Ymxpc2hpbmcgJHttYW5pZmVzdC5uYW1lfUAke21hbmlmZXN0LnZlcnNpb259JHtkcnlydW4gPyBcIiAoZHJ5cnVuKVwiIDogXCJcIn1gKSlcbiAgYXdhaXQgY29tbWFuZChcIm5wbVwiLCBbXCJwdWJsaXNoXCIsIGAke2RpcmVjdG9yeX0vcGFja2FnZWAsIFwiLS1hY2Nlc3NcIiwgcmVzdHJpY3RlZCA/IFwicmVzdHJpY3RlZFwiIDogXCJwdWJsaWNcIiwgLi4uKGRyeXJ1biA/IFtcIi0tZHJ5LXJ1blwiXSA6IFtdKV0sIHsgZW52LCB0aHJvdzogdHJ1ZSB9KVxuICBjb25zb2xlLmVycm9yKGdyZWVuKGBwdWJsaXNoZWQgJHttYW5pZmVzdC5uYW1lfUAke21hbmlmZXN0LnZlcnNpb259YCkpXG4gIHJldHVybiB7IG5hbWU6IG1hbmlmZXN0Lm5hbWUsIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb24sIGRpcmVjdG9yeSB9XG59XG5cbi8qKiBQdWJsaXNoaW5nIG9wdGlvbnMgZm9yIHtAbGlua2NvZGUgcHVibGlzaCgpfS4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSB7XG4gIC8qKiBQYXRoIHRvIHRoZSBwYWNrYWdlIHRvIHB1Ymxpc2ggKGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KS4gKi9cbiAgcGFja2FnZT86IHN0cmluZ1xuICAvKiogU2NvcGUgdG8gcHVibGlzaCB1bmRlcjogYFwiQFwiYCBrZWVwcyB0aGUgb3JpZ2luYWwgc2NvcGUgKGRlZmF1bHQpLCBgXCJcImAgcmVtb3ZlcyB0aGUgc2NvcGUsIGFueSBvdGhlciB2YWx1ZSByZXBsYWNlcyBpdC4gKi9cbiAgc2NvcGU/OiBzdHJpbmdcbiAgLyoqIFdoZXRoZXIgdG8gcHVibGlzaCB3aXRoIHByaXZhdGUgKHJlc3RyaWN0ZWQpIHJlZ2lzdHJ5IGFjY2VzcyAoZGVmYXVsdHMgdG8gYGZhbHNlYCkuICovXG4gIHByaXZhdGU/OiBib29sZWFuXG4gIC8qKiBEbyBub3QgYWN0dWFsbHkgcHVibGlzaCAodGhlIHBhY2thZ2UgaXMgcGFja2VkIGFuZCByZXdyaXR0ZW4sIGJ1dCBgbnBtIHB1Ymxpc2hgIGlzIHJ1biB3aXRoIGAtLWRyeS1ydW5gKS4gKi9cbiAgZHJ5cnVuPzogYm9vbGVhblxufVxuXG4vLyBFbnRyeSBwb2ludFxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcbiAgY29uc3QgYXJncyA9IHBhcnNlQXJncyhEZW5vLmFyZ3MsIHsgc3RyaW5nOiBbXCJwYWNrYWdlXCIsIFwic2NvcGVcIl0sIGJvb2xlYW46IFtcInByaXZhdGVcIiwgXCJkcnlydW5cIiwgXCJoZWxwXCJdLCBkZWZhdWx0OiB7IHNjb3BlOiBcIkBcIiB9IH0pXG4gIGlmIChhcmdzLmhlbHApIHtcbiAgICBjb25zb2xlLmVycm9yKFwiVXNhZ2U6IGRlbm8gcnVuIC0tYWxsb3ctYWxsIGpzcjpAbGlicy90b29sYm94L3NjcmlwdHMvcHVibGlzaC9ucG0gW29wdGlvbnNdXCIpXG4gICAgY29uc29sZS5lcnJvcihcIlwiKVxuICAgIGNvbnNvbGUuZXJyb3IoXCJPcHRpb25zOlwiKVxuICAgIGNvbnNvbGUuZXJyb3IoXCIgIC0tcGFja2FnZSBbcGFja2FnZV0gIFBhdGggdG8gdGhlIHBhY2thZ2UgdG8gcHVibGlzaCAoZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpXCIpXG4gICAgY29uc29sZS5lcnJvcihcIiAgLS1zY29wZSBbc2NvcGU9QF0gICAgU2NvcGUgdG8gcHVibGlzaCB1bmRlciAoYEBgIGtlZXBzIHRoZSBvcmlnaW5hbCBzY29wZSwgYW4gZW1wdHkgdmFsdWUgcmVtb3ZlcyBpdCwgYW55IG90aGVyIHZhbHVlIHJlcGxhY2VzIGl0KVwiKVxuICAgIGNvbnNvbGUuZXJyb3IoXCIgIC0tcHJpdmF0ZSAgICAgICAgICAgIFB1Ymxpc2ggd2l0aCBwcml2YXRlIChyZXN0cmljdGVkKSByZWdpc3RyeSBhY2Nlc3MgKGRlZmF1bHQ6IHB1YmxpYylcIilcbiAgICBjb25zb2xlLmVycm9yKFwiICAtLWRyeXJ1biAgICAgICAgICAgICBEbyBub3QgYWN0dWFsbHkgcHVibGlzaFwiKVxuICAgIERlbm8uZXhpdCgyKVxuICB9XG4gIGF3YWl0IHB1Ymxpc2goeyBwYWNrYWdlOiBhcmdzLnBhY2thZ2UsIHNjb3BlOiBhcmdzLnNjb3BlLCBwcml2YXRlOiBhcmdzLnByaXZhdGUsIGRyeXJ1bjogYXJncy5kcnlydW4gfSlcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUM7QUFDbkM7Ozs7Ozs7Ozs7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
@@ -0,0 +1,20 @@
1
+ /** Publish a package on deno.land/x. */ export declare function publish({}: Options): Promise<{
2
+ name: string;
3
+ version: string;
4
+ url: string;
5
+ changed: boolean;
6
+ }>;
7
+ /** Publishing options for {@linkcode publish()}. */ export type Options = {
8
+ /** GitHub API token. */ token: string;
9
+ /** GitHub repository (e.g. `octocat/hello-world`). */ repository: string;
10
+ /** Package name on deno.land/x. */ name: string;
11
+ /** Version to publish. */ version: string;
12
+ /** Subdirectory of the repository to publish (optional). */ directory?: string;
13
+ /** Path to an import map. When specified, a temporary branch with all imports resolved is created and published instead. */ map?: string;
14
+ /** Activate the webhook before publishing and restore its state afterwards. */ reactive?: boolean;
15
+ /** Remove the tag after publishing. */ remove?: boolean;
16
+ /** Maximum number of attempts for publishing operations to complete. */ attempts?: number;
17
+ /** Delay between each attempt (in milliseconds). */ delay?: number;
18
+ /** Do not actually publish (no file is written and no mutating git or remote call is made). */ dryrun?: boolean;
19
+ /** Fetch implementation (mostly used for testing purposes). */ fetcher?: typeof fetch;
20
+ };