@algorandfoundation/puya-ts 1.2.0-beta.2 → 1.2.0-beta.21
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 +7 -5
- package/{analyser-service-DSK9g7zQ.js → analyser-service-CGprVWba.js} +409 -372
- package/analyser-service-CGprVWba.js.map +1 -0
- package/analyserService.mjs +7 -6
- package/analyserService.mjs.map +1 -1
- package/arc4-clientgen-C7FQSt3R.js +324 -0
- package/arc4-clientgen-C7FQSt3R.js.map +1 -0
- package/arc4-clientgen.d.ts +6 -0
- package/awst/intrinsic-factory.d.ts +4 -2
- package/awst/node-factory.d.ts +1 -0
- package/awst/nodes.d.ts +22 -2
- package/awst/to-code-visitor.d.ts +2 -0
- package/awst/validation/awst-traverser.d.ts +3 -1
- package/awst/wtypes.d.ts +8 -1
- package/awst_build/arc4-util.d.ts +1 -38
- package/awst_build/ast-visitors/contract-method-visitor.d.ts +0 -2
- package/awst_build/eb/arc28/arc-28-emit-function-builder.d.ts +1 -2
- package/awst_build/eb/arc4/uintn.d.ts +1 -1
- package/awst_build/eb/arc4/util.d.ts +1 -0
- package/awst_build/eb/array-like/util.d.ts +0 -1
- package/awst_build/eb/logged-error-builder.d.ts +11 -0
- package/awst_build/models/decorator-data.d.ts +1 -0
- package/awst_build/ptypes/for-export.d.ts +0 -1
- package/awst_build/ptypes/index.d.ts +2 -0
- package/bin/puyats-clientgen.d.ts +2 -0
- package/bin/puyats-clientgen.mjs +101 -0
- package/bin/puyats-clientgen.mjs.map +1 -0
- package/bin/puyats-ls.mjs +21 -46
- package/bin/puyats-ls.mjs.map +1 -1
- package/bin/run-cli.mjs +18 -12
- package/bin/run-cli.mjs.map +1 -1
- package/{check-node-version-BtcNqlid.js → check-node-version-DcMVGPC-.js} +3 -3
- package/{check-node-version-BtcNqlid.js.map → check-node-version-DcMVGPC-.js.map} +1 -1
- package/cli/build-command.d.ts +2 -0
- package/cli.mjs +36 -76
- package/cli.mjs.map +1 -1
- package/clientgen.d.ts +1 -0
- package/code-fix/{invalid-non-null-assertion.d.ts → no-op-non-null-assertion.d.ts} +1 -1
- package/{compile-Cj7vjDbw.js → compile-D0CpLiRh.js} +13 -4
- package/compile-D0CpLiRh.js.map +1 -0
- package/compile.d.ts +1 -1
- package/constants.d.ts +1 -1
- package/contract-class-model-CLKobHyV.js +5574 -0
- package/contract-class-model-CLKobHyV.js.map +1 -0
- package/index.d.ts +1 -1
- package/index.mjs +17 -10
- package/index.mjs.map +1 -1
- package/logger/index.d.ts +1 -0
- package/{options-Cbipn6vL.js → options-B93nVWrL.js} +2419 -8288
- package/options-B93nVWrL.js.map +1 -0
- package/options.d.ts +4 -0
- package/package.json +13 -12
- package/puya/puya-service.d.ts +5 -1
- package/{resolve-puya-path-CsuzbFH2.js → resolve-puya-path-D7qDcdPx.js} +9 -45
- package/resolve-puya-path-D7qDcdPx.js.map +1 -0
- package/semver-BPw8lYGI.js +45 -0
- package/semver-BPw8lYGI.js.map +1 -0
- package/util/typed-message-port.d.ts +2 -2
- package/util-BhM5b2cL.js +63 -0
- package/util-BhM5b2cL.js.map +1 -0
- package/visitor/syntax-names.d.ts +190 -190
- package/analyser-service-DSK9g7zQ.js.map +0 -1
- package/compile-Cj7vjDbw.js.map +0 -1
- package/options-Cbipn6vL.js.map +0 -1
- package/puya/index.d.ts +0 -14
- package/resolve-puya-path-CsuzbFH2.js.map +0 -1
- package/util/arc4-signature-parser.d.ts +0 -14
package/options.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export declare class CompileOptions {
|
|
|
24
24
|
readonly outputTeal: boolean;
|
|
25
25
|
readonly outputArc32: boolean;
|
|
26
26
|
readonly outputArc56: boolean;
|
|
27
|
+
readonly outputClient: boolean;
|
|
27
28
|
readonly outputSsaIr: boolean;
|
|
28
29
|
readonly outputOptimizationIr: boolean;
|
|
29
30
|
readonly outputDestructuredIr: boolean;
|
|
@@ -32,6 +33,7 @@ export declare class CompileOptions {
|
|
|
32
33
|
readonly outputSourceMap: boolean;
|
|
33
34
|
readonly debugLevel: number;
|
|
34
35
|
readonly optimizationLevel: number;
|
|
36
|
+
readonly treatWarningsAsErrors: boolean;
|
|
35
37
|
readonly targetAvmVersion: number;
|
|
36
38
|
readonly cliTemplateDefinitions: Record<string, Uint8Array | bigint>;
|
|
37
39
|
readonly templateVarsPrefix: string;
|
|
@@ -57,6 +59,7 @@ export declare class PuyaOptions {
|
|
|
57
59
|
outputTeal: boolean;
|
|
58
60
|
outputArc32: boolean;
|
|
59
61
|
outputArc56: boolean;
|
|
62
|
+
outputClient: boolean;
|
|
60
63
|
outputSsaIr: boolean;
|
|
61
64
|
outputOptimizationIr: boolean;
|
|
62
65
|
outputDestructuredIr: boolean;
|
|
@@ -65,6 +68,7 @@ export declare class PuyaOptions {
|
|
|
65
68
|
outputSourceMap: boolean;
|
|
66
69
|
debugLevel: number;
|
|
67
70
|
optimizationLevel: number;
|
|
71
|
+
treatWarningsAsErrors: boolean;
|
|
68
72
|
targetAvmVersion: number;
|
|
69
73
|
cliTemplateDefinitions: Record<string, Uint8Array | bigint>;
|
|
70
74
|
templateVarsPrefix: string;
|
package/package.json
CHANGED
|
@@ -4,34 +4,34 @@
|
|
|
4
4
|
"**"
|
|
5
5
|
],
|
|
6
6
|
"name": "@algorandfoundation/puya-ts",
|
|
7
|
-
"version": "1.2.0-beta.
|
|
7
|
+
"version": "1.2.0-beta.21",
|
|
8
8
|
"description": "Compiles Algorand TypeScript into byte code which runs on the Algorand Virtual Machine (AVM)",
|
|
9
9
|
"private": false,
|
|
10
10
|
"author": "Algorand foundation",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@algorandfoundation/
|
|
13
|
+
"@algorandfoundation/algokit-utils": "10.0.0-alpha.45",
|
|
14
|
+
"@algorandfoundation/algorand-typescript": "1.2.0-beta.21",
|
|
14
15
|
"arcsecond": "^5.0.0",
|
|
15
16
|
"argparse": "^2.0.1",
|
|
16
|
-
"chalk": "^5.
|
|
17
|
+
"chalk": "^5.6.2",
|
|
17
18
|
"change-case": "^5.4.4",
|
|
18
19
|
"cross-spawn": "7.0.6",
|
|
19
|
-
"glob": "^
|
|
20
|
-
"minimatch": "^10.
|
|
20
|
+
"glob": "^13.0.0",
|
|
21
|
+
"minimatch": "^10.1.2",
|
|
21
22
|
"pathe": "^2.0.3",
|
|
22
23
|
"polytype": "^0.17.0",
|
|
23
24
|
"signal-exit": "^4.1.0",
|
|
24
|
-
"tar": "^7.
|
|
25
|
+
"tar": "^7.5.10",
|
|
25
26
|
"tslib": "^2.8.1",
|
|
26
|
-
"typescript": "^5.
|
|
27
|
-
"vscode-jsonrpc": "^8.2.
|
|
27
|
+
"typescript": "^5.9.3",
|
|
28
|
+
"vscode-jsonrpc": "^8.2.1",
|
|
28
29
|
"vscode-languageserver": "^9.0.1",
|
|
29
30
|
"vscode-languageserver-textdocument": "^1.0.12",
|
|
30
|
-
"vscode-uri": "^3.1.0"
|
|
31
|
-
"which": "^5.0.0"
|
|
31
|
+
"vscode-uri": "^3.1.0"
|
|
32
32
|
},
|
|
33
33
|
"overrides": {
|
|
34
|
-
"undici": "^6.
|
|
34
|
+
"undici": "^6.24.1"
|
|
35
35
|
},
|
|
36
36
|
"bundleDependencies": [
|
|
37
37
|
"vscode-jsonrpc",
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"bin": {
|
|
45
45
|
"puya-ts": "./bin/run-cli.mjs",
|
|
46
46
|
"puyats": "./bin/run-cli.mjs",
|
|
47
|
-
"puyats-ls": "./bin/puyats-ls.mjs"
|
|
47
|
+
"puyats-ls": "./bin/puyats-ls.mjs",
|
|
48
|
+
"puyats-clientgen": "./bin/puyats-clientgen.mjs"
|
|
48
49
|
},
|
|
49
50
|
"exports": {
|
|
50
51
|
".": {
|
package/puya/puya-service.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Arc56Contract } from '@algorandfoundation/algokit-utils/abi';
|
|
1
2
|
import type { RootNode } from '../awst/nodes';
|
|
2
3
|
import type { SourceLocation } from '../awst/source-location';
|
|
3
4
|
import type { PuyaOptions } from '../options';
|
|
@@ -17,6 +18,9 @@ interface Log {
|
|
|
17
18
|
interface LogResult {
|
|
18
19
|
logs: Log[];
|
|
19
20
|
}
|
|
21
|
+
interface CompileResult extends LogResult {
|
|
22
|
+
arc56: Record<string, Arc56Contract>;
|
|
23
|
+
}
|
|
20
24
|
export type PuyaServiceOptions = {
|
|
21
25
|
puyaPath: string;
|
|
22
26
|
};
|
|
@@ -24,7 +28,7 @@ export declare class PuyaService {
|
|
|
24
28
|
private readonly connection;
|
|
25
29
|
constructor(options: PuyaServiceOptions);
|
|
26
30
|
analyse(programDirectory: AbsolutePath, awst: RootNode[]): Promise<LogResult>;
|
|
27
|
-
compile(params: CompileParams): Promise<
|
|
31
|
+
compile(params: CompileParams): Promise<CompileResult>;
|
|
28
32
|
shutdown(): Promise<void>;
|
|
29
33
|
}
|
|
30
34
|
export {};
|
|
@@ -1,42 +1,20 @@
|
|
|
1
|
+
import { __addDisposableResource, __disposeResources } from 'tslib';
|
|
1
2
|
import * as fs from 'fs';
|
|
2
3
|
import fs__default, { rmdirSync, existsSync, statSync, mkdirSync } from 'fs';
|
|
3
|
-
import {
|
|
4
|
-
import pathe__default from 'pathe';
|
|
5
|
-
import { C as Constants, cZ as logger, d6 as sleep, d7 as InternalError } from './options-Cbipn6vL.js';
|
|
6
|
-
import { __addDisposableResource, __disposeResources } from 'tslib';
|
|
4
|
+
import { l as logger, d as Constants, I as InternalError } from './contract-class-model-CLKobHyV.js';
|
|
7
5
|
import { onExit } from 'signal-exit';
|
|
6
|
+
import { a7 as sleep } from './options-B93nVWrL.js';
|
|
8
7
|
import { spawn } from 'cross-spawn';
|
|
9
8
|
import * as require$$3 from 'crypto';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
10
|
import * as path from 'path';
|
|
11
|
+
import pathe__default from 'pathe';
|
|
11
12
|
import * as tar from 'tar';
|
|
12
13
|
import { globIterateSync } from 'glob';
|
|
13
14
|
import { writeFileSync } from 'node:fs';
|
|
14
15
|
import { gzipSync } from 'node:zlib';
|
|
15
16
|
import require$$2 from 'os';
|
|
16
|
-
|
|
17
|
-
function packageVersion() {
|
|
18
|
-
let dirName = pathe__default.dirname(fileURLToPath(import.meta.url));
|
|
19
|
-
while (true) {
|
|
20
|
-
const packageJsonPath = pathe__default.join(dirName, 'package.json');
|
|
21
|
-
if (fs__default.existsSync(packageJsonPath)) {
|
|
22
|
-
return JSON.parse(fs__default.readFileSync(packageJsonPath, 'utf8')).version;
|
|
23
|
-
}
|
|
24
|
-
if (dirName === pathe__default.dirname(dirName))
|
|
25
|
-
break;
|
|
26
|
-
dirName = pathe__default.dirname(dirName);
|
|
27
|
-
}
|
|
28
|
-
return 'unknown';
|
|
29
|
-
}
|
|
30
|
-
function appVersion(options) {
|
|
31
|
-
const name = options?.name ?? 'puya-ts';
|
|
32
|
-
const withAVMVersion = options?.withAVMVersion ?? true;
|
|
33
|
-
const version = packageVersion();
|
|
34
|
-
return [`${name} ${version}`]
|
|
35
|
-
.concat(withAVMVersion
|
|
36
|
-
? ['', 'Targets:', `puya ${Constants.targetedPuyaVersion}`, `AVM ${Constants.supportedAvmVersions.join(', ')}`]
|
|
37
|
-
: [`puya ${Constants.targetedPuyaVersion}`])
|
|
38
|
-
.join('\n');
|
|
39
|
-
}
|
|
17
|
+
import { p as parseSemVer } from './semver-BPw8lYGI.js';
|
|
40
18
|
|
|
41
19
|
const lockPaths = new Set();
|
|
42
20
|
function acquireLock(path, options) {
|
|
@@ -91,7 +69,6 @@ onExit(() => {
|
|
|
91
69
|
class InvokeCliError extends Error {
|
|
92
70
|
exit;
|
|
93
71
|
constructor(exit) {
|
|
94
|
-
this.exit = exit;
|
|
95
72
|
if (exit.code) {
|
|
96
73
|
super(`Exited with code ${exit.code}`);
|
|
97
74
|
}
|
|
@@ -101,6 +78,7 @@ class InvokeCliError extends Error {
|
|
|
101
78
|
else {
|
|
102
79
|
super('Exited with unknown cause');
|
|
103
80
|
}
|
|
81
|
+
this.exit = exit;
|
|
104
82
|
}
|
|
105
83
|
}
|
|
106
84
|
function invokeCli(options) {
|
|
@@ -456,20 +434,6 @@ async function verifyChecksum(filePath, fileName, checksumFilePath) {
|
|
|
456
434
|
});
|
|
457
435
|
}
|
|
458
436
|
|
|
459
|
-
function parseSemVer(version) {
|
|
460
|
-
const matched = /^(\d+)\.(\d+)\.(\d+)(-.*)?$/.exec(version);
|
|
461
|
-
if (!matched) {
|
|
462
|
-
throw new InternalError(`Invalid version string: ${version}`);
|
|
463
|
-
}
|
|
464
|
-
return {
|
|
465
|
-
major: Number(matched[1]),
|
|
466
|
-
minor: Number(matched[2]),
|
|
467
|
-
rev: Number(matched[3]),
|
|
468
|
-
suffix: matched[4] ?? '',
|
|
469
|
-
formatted: version,
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
|
|
473
437
|
async function resolvePuyaPath(options) {
|
|
474
438
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
475
439
|
try {
|
|
@@ -514,5 +478,5 @@ function isBinaryCached(cachePath) {
|
|
|
514
478
|
return false;
|
|
515
479
|
}
|
|
516
480
|
|
|
517
|
-
export {
|
|
518
|
-
//# sourceMappingURL=resolve-puya-path-
|
|
481
|
+
export { resolvePuyaPath as r };
|
|
482
|
+
//# sourceMappingURL=resolve-puya-path-D7qDcdPx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-puya-path-D7qDcdPx.js","sources":["../src/util/lock-file.ts","../src/util/invoke-cli.ts","../src/puya/run-puya.ts","../src/puya/check-puya-version.ts","../src/util/generate-temp-file.ts","../src/puya/puya-binary.ts","../src/puya/resolve-puya-path.ts"],"sourcesContent":["import { existsSync, mkdirSync, rmdirSync, statSync } from 'fs'\nimport { onExit } from 'signal-exit'\nimport { logger } from '../logger'\nimport { sleep } from './sleep'\n\nconst lockPaths = new Set<string>()\n\nfunction acquireLock(path: string, options?: { staleMs?: number }) {\n const { staleMs = 60 * 1000 } = options ?? {}\n lockPaths.add(path)\n\n if (existsSync(path)) {\n const now = Date.now()\n const fileStat = statSync(path)\n\n if (now - fileStat.mtime.getTime() > staleMs) {\n // Remove the lock file if it has expired\n rmdirSync(path)\n } else {\n throw new Error('Lock file already exists')\n }\n }\n\n mkdirSync(path, { recursive: true })\n}\n\nexport async function createLockFile(\n path: string,\n options?: { staleMs?: number; maxRetries?: number; delayMs?: number },\n): Promise<AsyncDisposable> {\n const { maxRetries = 3, delayMs = 1000 } = options ?? {}\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n acquireLock(path, options)\n\n return {\n async [Symbol.asyncDispose]() {\n await unlockFile(path)\n },\n }\n } catch (err) {\n logger.debug(undefined, `Failed to acquire lock file ${path}: ${err}`)\n await sleep(delayMs)\n }\n }\n\n throw new Error('Failed to lock file')\n}\n\nasync function unlockFile(path: string): Promise<void> {\n try {\n rmdirSync(path)\n lockPaths.delete(path)\n } catch (err) {\n logger.warn(undefined, `Failed to unlock file ${path}: ${err}`)\n }\n}\n\nonExit(() => {\n for (const path of lockPaths) {\n unlockFile(path)\n }\n})\n","import { spawn } from 'cross-spawn'\n\ntype InvokeCliOptions = {\n command: string\n args: string[]\n cwd?: string\n onReceiveLine?(line: string): void\n dontThrowOnNonzeroCode?: boolean\n}\n\ntype InvokeCliResponse = {\n lines: string[]\n code: number\n}\n\ntype CliExit = {\n code?: number | null\n signal?: NodeJS.Signals | null\n}\n\nclass InvokeCliError extends Error {\n exit: CliExit\n\n constructor(exit: CliExit) {\n if (exit.code) {\n super(`Exited with code ${exit.code}`)\n } else if (exit.signal) {\n super(`Exited with signal ${exit.signal}`)\n } else {\n super('Exited with unknown cause')\n }\n\n this.exit = exit\n }\n}\n\nexport function invokeCli(options: InvokeCliOptions): Promise<InvokeCliResponse> {\n return new Promise<InvokeCliResponse>((resolve, reject) => {\n const lineAggregator = new LineAggregator(options.onReceiveLine)\n const process = spawn(options.command, options.args, {\n stdio: 'pipe',\n })\n\n process.stdout.on('data', (data) => lineAggregator.aggregate(data))\n process.once('close', (code) => {\n if (code !== 0 && !options.dontThrowOnNonzeroCode) {\n reject(new InvokeCliError({ code }))\n }\n lineAggregator.flush()\n resolve({\n code: code ?? 0,\n lines: lineAggregator.lines,\n })\n })\n process.once('exit', (code, signal) => {\n if (signal !== null) {\n reject(new InvokeCliError({ signal }))\n }\n if (code !== 0 && !options.dontThrowOnNonzeroCode) {\n reject(new InvokeCliError({ code }))\n }\n lineAggregator.flush()\n resolve({\n code: code ?? 0,\n lines: lineAggregator.lines,\n })\n })\n process.once('error', reject)\n })\n}\n\nclass LineAggregator {\n #line = ''\n #lines: string[] = []\n constructor(private readonly onLine?: (line: string) => void) {}\n\n aggregate(chunk: Buffer<ArrayBufferLike> | null | undefined) {\n if (chunk === undefined || chunk === null) return\n const text = chunk.toString('utf-8')\n for (const c of text) {\n switch (c) {\n case '\\n':\n this.flushLine()\n break\n case '\\r':\n continue\n default:\n this.#line += c\n break\n }\n }\n }\n\n flush() {\n if (this.#line) this.flushLine()\n }\n\n private flushLine() {\n this.#lines.push(this.#line)\n this.onLine?.(this.#line)\n this.#line = ''\n }\n\n get lines() {\n return this.#lines\n }\n}\n","import { logger } from '../logger'\nimport { invokeCli } from '../util/invoke-cli'\n\nexport async function runPuya({\n command,\n args,\n cwd,\n onOutput,\n}: {\n command: string\n args: string[]\n cwd?: string\n onOutput: (line: string) => void\n}) {\n const result = await invokeCli({\n command,\n args,\n cwd,\n onReceiveLine: onOutput,\n dontThrowOnNonzeroCode: true,\n })\n\n if (result.code !== 0) {\n logger.critical(undefined, `Compilation exited with status ${result.code}`)\n }\n}\n","import { Constants } from '../constants'\nimport { logger } from '../logger'\nimport { runPuya } from './run-puya'\nimport type { SemVer } from './semver'\n\nexport enum VersionCompareVerdict {\n ExactMatch = 'ExactMatch',\n Inconclusive = 'Inconclusive',\n MajorMismatch = 'MajorMismatch',\n MinorMismatch = 'MinorMismatch',\n OlderRevision = 'OlderRevision',\n NewerRevision = 'NewerRevision',\n}\n\nexport async function comparePuyaVersion(puyaPath: string): Promise<{\n target: string\n found?: string\n verdict: VersionCompareVerdict\n}> {\n const target = Constants.targetedPuyaVersion\n\n const versionParser = new VersionParser()\n await runPuya({\n command: puyaPath,\n args: ['--version'],\n onOutput: (line) => versionParser.receiveLine(line),\n })\n\n if (!versionParser.version) return { target, verdict: VersionCompareVerdict.Inconclusive }\n const ver = versionParser.version\n\n // Compare\n const [major, minor, rev] = target.split('.').map((x) => Number(x))\n if (ver.major !== major) return { verdict: VersionCompareVerdict.MajorMismatch, target, found: ver.formatted }\n if (ver.minor !== minor) return { verdict: VersionCompareVerdict.MinorMismatch, target, found: ver.formatted }\n if (ver.rev < rev) return { verdict: VersionCompareVerdict.OlderRevision, target, found: ver.formatted }\n if (ver.rev > rev) return { verdict: VersionCompareVerdict.NewerRevision, target, found: ver.formatted }\n return { verdict: VersionCompareVerdict.ExactMatch, target, found: ver.formatted }\n}\n\nexport async function checkPuyaVersion(puyaPath: string) {\n const result = await comparePuyaVersion(puyaPath)\n\n switch (result.verdict) {\n case VersionCompareVerdict.Inconclusive:\n logger.warn(undefined, `Unable to verify the version of Puya at ${puyaPath}.`)\n break\n case VersionCompareVerdict.MajorMismatch:\n case VersionCompareVerdict.MinorMismatch:\n logger.warn(\n undefined,\n `Version of Puya at ${puyaPath} (${result.found}) does not match targeted version (${result.target}). There may be compatibility issues.`,\n )\n break\n case VersionCompareVerdict.OlderRevision:\n logger.warn(undefined, `Revision of Puya at ${puyaPath} (${result.found}) is older than the targeted revision (${result.target})`)\n break\n case VersionCompareVerdict.NewerRevision:\n logger.debug(undefined, `Revision of Puya at ${puyaPath} (${result.found}) is newer than the targeted revision (${result.target})`)\n break\n }\n}\n\nclass VersionParser {\n #ver: SemVer | undefined\n\n receiveLine(line: string): void {\n const matched = /^puya ((\\d+)\\.(\\d+)\\.(\\d+)(-.*)?)$/.exec(line)\n if (!matched) {\n logger.debug(undefined, `'puya --version' command returned unexpected output: \"${line}\"`)\n } else {\n this.#ver = {\n formatted: matched[1],\n major: Number(matched[2]),\n minor: Number(matched[3]),\n rev: Number(matched[4]),\n suffix: matched[5] ?? '',\n }\n }\n }\n\n get version(): undefined | SemVer {\n return this.#ver\n }\n}\n","import { randomUUID } from 'crypto'\nimport fs from 'fs'\nimport { globIterateSync } from 'glob'\nimport type { WriteFileOptions } from 'node:fs'\nimport { writeFileSync } from 'node:fs'\nimport { gzipSync } from 'node:zlib'\nimport os from 'os'\nimport pathe from 'pathe'\n\nexport type TempFile = {\n writeFileSync(data: NodeJS.ArrayBufferView, options?: WriteFileOptions): void\n writeFileSync(data: string, options?: WriteFileOptions): void\n readonly filePath: string\n} & Disposable\n\nexport function generateTempFile(options?: { ext?: string }): TempFile {\n const { ext = 'tmp' } = options ?? {}\n const tempDir = generateTempDir()\n const filePath = pathe.join(tempDir.dirPath, `${randomUUID()}.${ext}`)\n\n return {\n get filePath() {\n return filePath\n },\n writeFileSync(data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions) {\n fs.writeFileSync(filePath, data, options)\n },\n [Symbol.dispose]() {\n tempDir[Symbol.dispose]()\n },\n }\n}\nexport type TempDir = {\n readonly dirPath: string\n files(): IterableIterator<string>\n\n makeFile(args: { name: string; ext?: string; compress?: boolean }): {\n readonly filePath: string\n writeFileSync(data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void\n }\n} & Disposable\n\nexport function generateTempDir(): TempDir {\n const dirPath = fs.mkdtempSync(pathe.join(os.tmpdir(), 'puya-ts-'))\n\n return {\n get dirPath() {\n return dirPath\n },\n *files(): IterableIterator<string> {\n for (const p of globIterateSync(pathe.join(dirPath, '**'), {\n nodir: true,\n })) {\n yield p\n }\n },\n makeFile({ name, ext, compress }) {\n const path = pathe.join(this.dirPath, `${name}.${ext ?? 'tmp'}${compress ? '.gz' : ''}`)\n return {\n get filePath() {\n return path\n },\n writeFileSync(data, options) {\n if (compress) {\n data = gzipSync(data)\n }\n writeFileSync(path, data, options)\n },\n }\n },\n [Symbol.dispose]() {\n fs.rmSync(dirPath, { recursive: true, force: true })\n },\n }\n}\n","import * as crypto from 'crypto'\nimport * as fs from 'fs'\nimport { fileURLToPath } from 'node:url'\nimport * as path from 'path'\nimport pathe from 'pathe'\nimport * as tar from 'tar'\nimport { Constants } from '../constants'\nimport { InternalError } from '../errors'\nimport { logger } from '../logger'\nimport { generateTempDir } from '../util/generate-temp-file'\nimport { runPuya } from './run-puya'\nimport type { SemVer } from './semver'\n\n/**\n * Gets the platform-specific binary name\n * @returns The appropriate binary name for the current platform\n */\nfunction getBinaryName(): string {\n return process.platform === 'win32' ? 'puya.exe' : 'puya'\n}\n\nfunction getPuyaTsDir(): string {\n try {\n return pathe.dirname(require.resolve('@algorandfoundation/puya-ts'))\n } catch {\n return pathe.dirname(fileURLToPath(import.meta.url))\n }\n}\n\nexport function getPuyaStorageDir(): string {\n const puyaTsDirName = getPuyaTsDir()\n return path.join(puyaTsDirName, '.puya')\n}\n\nexport function getCachedPuyaBinaryPath(puyaStorageDir: string, version: SemVer): string {\n const binaryFileName = getBinaryName()\n return path.join(puyaStorageDir, version.formatted, binaryFileName)\n}\n\n/**\n * Gets the platform-specific details for downloads\n * @returns Object containing OS and architecture information\n */\nfunction getPlatformDetails(): { os: string; arch: string } {\n const cliMessage = `Please refer to the puya-ts CLI documentation for information on how to install the Puya backend manually.`\n\n // Map Node.js platform to OS name used in filenames\n let os: string\n switch (process.platform) {\n case 'win32':\n os = 'windows'\n break\n case 'darwin':\n os = 'macos'\n break\n case 'linux':\n os = 'linux'\n break\n default:\n throw new InternalError(`Unsupported platform: ${process.platform}. ${cliMessage}`)\n }\n\n // Map Node.js architecture to architecture name used in filenames\n let arch: string\n switch (process.arch) {\n case 'x64':\n arch = 'x64'\n break\n case 'arm64':\n arch = 'arm64'\n break\n default:\n throw new InternalError(`Unsupported architecture: ${process.arch}. ${cliMessage}`)\n }\n\n return { os, arch }\n}\n\n/**\n * Downloads the Puya binary for a specific release version\n * @param puyaStorageDir The directory where puya binaries should be stored once downloaded\n * @param version The release version to download (e.g., \"1.0.0\")\n * @returns Promise that resolves to the path of the extracted binary\n */\nexport async function downloadPuyaBinary(puyaStorageDir: string, version: SemVer): Promise<string> {\n // Get platform-specific details\n const { os, arch } = getPlatformDetails()\n\n // Build platform-specific filenames\n const platformId = `${os}_${arch}`\n const archiveFileName = `puya-${version.formatted}-${platformId}.tar.gz`\n const checksumFileName = `puya-${version.formatted}-${platformId}.sha256.txt`\n const binaryFileName = getBinaryName()\n\n const extractedDir = path.join(puyaStorageDir, version.formatted)\n\n // Ensure our storage directories exist\n if (!fs.existsSync(extractedDir)) {\n fs.mkdirSync(extractedDir, { recursive: true })\n }\n\n using tempDir = generateTempDir()\n\n const archiveFilePath = path.join(tempDir.dirPath, archiveFileName)\n const checksumFilePath = path.join(tempDir.dirPath, checksumFileName)\n const extractedBinaryPath = path.join(extractedDir, binaryFileName)\n\n logger.debug(undefined, `Downloading Puya binary for version ${version.formatted} and platform ${platformId}`)\n const archiveUrl = `https://github.com/${Constants.puyaGithubRepo}/releases/download/v${version.formatted}/${archiveFileName}`\n const checksumUrl = `https://github.com/${Constants.puyaGithubRepo}/releases/download/v${version.formatted}/${checksumFileName}`\n\n await downloadFile(archiveUrl, archiveFilePath)\n await downloadFile(checksumUrl, checksumFilePath)\n\n await verifyChecksum(archiveFilePath, archiveFileName, checksumFilePath)\n\n await tar.extract({\n file: archiveFilePath,\n cwd: extractedDir,\n })\n\n // Check if extraction was successful and binary exists\n if (!fs.existsSync(extractedBinaryPath)) {\n throw new InternalError(`Binary file ${binaryFileName} not found in the extracted archive`)\n }\n\n await smokeTestBinary(extractedBinaryPath)\n\n logger.debug(undefined, `Successfully downloaded and extracted Puya binary to ${extractedBinaryPath}`)\n return extractedBinaryPath\n}\n\nasync function smokeTestBinary(path: string) {\n logger.debug(undefined, `Smoke testing downloaded binary @ ${path}`)\n\n let output = ''\n await runPuya({\n command: path,\n args: ['--version'],\n onOutput: (line) => (output += line),\n })\n if (!/^puya ((\\d+)\\.(\\d+)\\.(\\d+)(.*)?)$/.test(output)) {\n throw new InternalError(`Unexpected output from puya --version : ${output}`)\n }\n}\n\n/**\n * Downloads a file from a URL to a specified path\n * @param url The URL to download from\n * @param destination The local path to save the file to\n * @returns Promise that resolves when the download is complete\n */\nasync function downloadFile(url: string, destination: string): Promise<void> {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(`Failed to download file. Status Code: ${response.status}`)\n }\n const buffer = await response.arrayBuffer()\n return await new Promise<void>((resolve, reject) => {\n const fileStream = fs.createWriteStream(destination)\n const nodeBuffer = Buffer.from(buffer)\n\n fileStream.write(nodeBuffer)\n fileStream.end()\n\n fileStream.on('finish', () => {\n resolve()\n })\n\n fileStream.on('error', (err) => {\n fs.unlinkSync(destination)\n reject(err)\n })\n })\n}\n\n/**\n * Verifies the checksum of a downloaded file\n * @param filePath Path to the file to verify\n * @param checksumFilePath Path to the checksum file\n * @returns Promise that resolves to true if the checksum matches, false otherwise\n */\nasync function verifyChecksum(filePath: string, fileName: string, checksumFilePath: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Read the checksum file\n const expectedChecksum = fs.readFileSync(checksumFilePath, 'utf8').trim().toLowerCase()\n\n // Calculate the SHA256 checksum of the downloaded file\n const hash = crypto.createHash('sha256')\n const stream = fs.createReadStream(filePath)\n\n stream.on('data', (data) => {\n hash.update(data)\n })\n\n stream.on('end', () => {\n const calculatedChecksum = hash.digest('hex').toLowerCase()\n\n if (`${calculatedChecksum} ${fileName}` === expectedChecksum) {\n resolve()\n }\n reject(new InternalError(`Checksum verification failed. Expected checksum: ${expectedChecksum} but got: ${calculatedChecksum}`))\n })\n })\n}\n","import * as fs from 'fs'\nimport { Constants } from '../constants'\nimport { logger } from '../logger'\nimport { createLockFile } from '../util/lock-file'\nimport { checkPuyaVersion } from './check-puya-version'\nimport { downloadPuyaBinary, getCachedPuyaBinaryPath, getPuyaStorageDir } from './puya-binary'\nimport { parseSemVer } from './semver'\n\nexport async function resolvePuyaPath(options: { customPuyaPath?: string; skipVersionCheck?: boolean }): Promise<string> {\n if (options.customPuyaPath) {\n if (!options.skipVersionCheck) {\n await checkPuyaVersion(options.customPuyaPath)\n }\n return options.customPuyaPath\n }\n\n const version = parseSemVer(Constants.targetedPuyaVersion)\n\n const puyaStorageDir = getPuyaStorageDir()\n const cachedBinaryPath = getCachedPuyaBinaryPath(puyaStorageDir, version)\n\n if (isBinaryCached(cachedBinaryPath)) {\n return cachedBinaryPath\n }\n\n await using _ = await createLockFile(`${puyaStorageDir}.lock`, { maxRetries: 30, delayMs: 1000, staleMs: 60 * 1000 })\n\n // Between the first check and acquiring the lock, the binary may have been downloaded by another process.\n // In this case there is no need to download the binary again.\n if (isBinaryCached(cachedBinaryPath)) {\n return cachedBinaryPath\n }\n return await downloadPuyaBinary(puyaStorageDir, version)\n}\n\nfunction isBinaryCached(cachePath: string): boolean {\n if (fs.existsSync(cachePath)) {\n logger.debug(undefined, `Found cached Puya binary at ${cachePath}`)\n return true\n }\n return false\n}\n"],"names":["fs","pathe","os","crypto"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import fs__default from 'fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import pathe__default from 'pathe';
|
|
4
|
+
import { d as Constants, I as InternalError } from './contract-class-model-CLKobHyV.js';
|
|
5
|
+
|
|
6
|
+
function packageVersion() {
|
|
7
|
+
let dirName = pathe__default.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
while (true) {
|
|
9
|
+
const packageJsonPath = pathe__default.join(dirName, 'package.json');
|
|
10
|
+
if (fs__default.existsSync(packageJsonPath)) {
|
|
11
|
+
return JSON.parse(fs__default.readFileSync(packageJsonPath, 'utf8')).version;
|
|
12
|
+
}
|
|
13
|
+
if (dirName === pathe__default.dirname(dirName))
|
|
14
|
+
break;
|
|
15
|
+
dirName = pathe__default.dirname(dirName);
|
|
16
|
+
}
|
|
17
|
+
return 'unknown';
|
|
18
|
+
}
|
|
19
|
+
function appVersion(options) {
|
|
20
|
+
const name = options?.name ?? 'puya-ts';
|
|
21
|
+
const withAVMVersion = options?.withAVMVersion ?? true;
|
|
22
|
+
const version = packageVersion();
|
|
23
|
+
return [`${name} ${version}`]
|
|
24
|
+
.concat(withAVMVersion
|
|
25
|
+
? ['', 'Targets:', `puya ${Constants.targetedPuyaVersion}`, `AVM ${Constants.supportedAvmVersions.join(', ')}`]
|
|
26
|
+
: [`puya ${Constants.targetedPuyaVersion}`])
|
|
27
|
+
.join('\n');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function parseSemVer(version) {
|
|
31
|
+
const matched = /^(\d+)\.(\d+)\.(\d+)(-.*)?$/.exec(version);
|
|
32
|
+
if (!matched) {
|
|
33
|
+
throw new InternalError(`Invalid version string: ${version}`);
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
major: Number(matched[1]),
|
|
37
|
+
minor: Number(matched[2]),
|
|
38
|
+
rev: Number(matched[3]),
|
|
39
|
+
suffix: matched[4] ?? '',
|
|
40
|
+
formatted: version,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { appVersion as a, packageVersion as b, parseSemVer as p };
|
|
45
|
+
//# sourceMappingURL=semver-BPw8lYGI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver-BPw8lYGI.js","sources":["../src/cli/app-version.ts","../src/puya/semver.ts"],"sourcesContent":["import fs from 'fs'\nimport { fileURLToPath } from 'node:url'\nimport pathe from 'pathe'\nimport { Constants } from '../constants'\n\nexport function packageVersion(): string {\n let dirName = pathe.dirname(fileURLToPath(import.meta.url))\n\n while (true) {\n const packageJsonPath = pathe.join(dirName, 'package.json')\n if (fs.existsSync(packageJsonPath)) {\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).version\n }\n if (dirName === pathe.dirname(dirName)) break\n dirName = pathe.dirname(dirName)\n }\n return 'unknown'\n}\n\nexport function appVersion(options?: { name?: string; withAVMVersion?: boolean }): string {\n const name = options?.name ?? 'puya-ts'\n const withAVMVersion = options?.withAVMVersion ?? true\n\n const version = packageVersion()\n return [`${name} ${version}`]\n .concat(\n withAVMVersion\n ? ['', 'Targets:', `puya ${Constants.targetedPuyaVersion}`, `AVM ${Constants.supportedAvmVersions.join(', ')}`]\n : [`puya ${Constants.targetedPuyaVersion}`],\n )\n .join('\\n')\n}\n","import { InternalError } from '../errors'\n\nexport type SemVer = {\n major: number\n minor: number\n rev: number\n suffix: string\n formatted: string\n}\n\nexport function parseSemVer(version: string): SemVer {\n const matched = /^(\\d+)\\.(\\d+)\\.(\\d+)(-.*)?$/.exec(version)\n if (!matched) {\n throw new InternalError(`Invalid version string: ${version}`)\n }\n\n return {\n major: Number(matched[1]),\n minor: Number(matched[2]),\n rev: Number(matched[3]),\n suffix: matched[4] ?? '',\n formatted: version,\n }\n}\n"],"names":["pathe","fs"],"mappings":";;;;;SAKgB,cAAc,GAAA;AAC5B,IAAA,IAAI,OAAO,GAAGA,cAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3D,OAAO,IAAI,EAAE;QACX,MAAM,eAAe,GAAGA,cAAK,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC3D,QAAA,IAAIC,WAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,KAAK,CAACA,WAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO;QACrE;AACA,QAAA,IAAI,OAAO,KAAKD,cAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE;AACxC,QAAA,OAAO,GAAGA,cAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAClC;AACA,IAAA,OAAO,SAAS;AAClB;AAEM,SAAU,UAAU,CAAC,OAAqD,EAAA;AAC9E,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,SAAS;AACvC,IAAA,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI;AAEtD,IAAA,MAAM,OAAO,GAAG,cAAc,EAAE;AAChC,IAAA,OAAO,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;AACzB,SAAA,MAAM,CACL;UACI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAA,KAAA,EAAQ,SAAS,CAAC,mBAAmB,CAAA,CAAE,EAAE,CAAA,IAAA,EAAO,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE;UAC5G,CAAC,CAAA,KAAA,EAAQ,SAAS,CAAC,mBAAmB,CAAA,CAAE,CAAC;SAE9C,IAAI,CAAC,IAAI,CAAC;AACf;;ACrBM,SAAU,WAAW,CAAC,OAAe,EAAA;IACzC,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,aAAa,CAAC,2BAA2B,OAAO,CAAA,CAAE,CAAC;IAC/D;IAEA,OAAO;AACL,QAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;AACxB,QAAA,SAAS,EAAE,OAAO;KACnB;AACH;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Worker } from 'node:worker_threads';
|
|
1
|
+
import type { Transferable, Worker } from 'node:worker_threads';
|
|
2
2
|
import type { MessagePort } from 'worker_threads';
|
|
3
3
|
export type TypedMessagePort<TPost, TReceive> = {
|
|
4
|
-
postMessage(message: TPost): void;
|
|
4
|
+
postMessage(message: TPost, transfer?: Transferable[]): void;
|
|
5
5
|
onMessage(listener: (message: TReceive) => void): Disposable;
|
|
6
6
|
};
|
|
7
7
|
export declare function createTypedMessagePort<TPost = never, TReceive = never>(x: MessagePort | Worker): TypedMessagePort<TPost, TReceive>;
|
package/util-BhM5b2cL.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { ce as isMinLevel, L as LogLevel, a as LoggingContext, cf as enumFromValue } from './contract-class-model-CLKobHyV.js';
|
|
3
|
+
|
|
4
|
+
const levelConfig = {
|
|
5
|
+
/* eslint-disable no-console */
|
|
6
|
+
debug: { colorFn: chalk.green, writeFn: console.debug },
|
|
7
|
+
info: { colorFn: chalk.green, writeFn: console.info },
|
|
8
|
+
warning: { colorFn: chalk.yellow, writeFn: console.warn },
|
|
9
|
+
error: { colorFn: chalk.red, writeFn: console.error },
|
|
10
|
+
critical: { colorFn: chalk.red, writeFn: console.error },
|
|
11
|
+
/* eslint-enable no-console */
|
|
12
|
+
};
|
|
13
|
+
class ConsoleLogSink {
|
|
14
|
+
minLogLevel;
|
|
15
|
+
pathsRelativeTo;
|
|
16
|
+
constructor(minLogLevel, pathsRelativeTo) {
|
|
17
|
+
this.minLogLevel = minLogLevel;
|
|
18
|
+
this.pathsRelativeTo = pathsRelativeTo;
|
|
19
|
+
}
|
|
20
|
+
add(logEvent) {
|
|
21
|
+
const config = levelConfig[logEvent.level];
|
|
22
|
+
let logText = `${config.colorFn(logEvent.level)}: ${logEvent.message}`;
|
|
23
|
+
if (logEvent.sourceLocation) {
|
|
24
|
+
const sourceLocationText = logEvent.sourceLocation.toString({ pathsRelativeTo: this.pathsRelativeTo });
|
|
25
|
+
const indentSize = sourceLocationText.length + logEvent.level.length + 4;
|
|
26
|
+
const sourceSummary = isMinLevel(logEvent.level, LogLevel.Warning) ? this.getSourceSummary(logEvent.sourceLocation, indentSize) : '';
|
|
27
|
+
logText = `${sourceLocationText} ${logText}${sourceSummary}`;
|
|
28
|
+
}
|
|
29
|
+
if (isMinLevel(LogLevel.Debug, this.minLogLevel) && logEvent.stack) {
|
|
30
|
+
logText += `\n ${logEvent.stack}`;
|
|
31
|
+
}
|
|
32
|
+
config.writeFn(logText);
|
|
33
|
+
}
|
|
34
|
+
getSourceSummary(sourceLocation, indent) {
|
|
35
|
+
const sourceFile = sourceLocation.file && LoggingContext.current.sourcesByPath[sourceLocation.file.toString()];
|
|
36
|
+
if (!sourceFile || sourceLocation.scope === 'file')
|
|
37
|
+
return '';
|
|
38
|
+
const line = sourceFile[sourceLocation.line - 1];
|
|
39
|
+
const trimmedLine = line.trimStart();
|
|
40
|
+
const marker = `${''.padStart(sourceLocation.column - (line.length - trimmedLine.length))}^${''.padStart(Math.max(sourceLocation.endColumn - sourceLocation.column - 1, 0), '~')}`;
|
|
41
|
+
const indentChars = ''.padStart(indent, ' ');
|
|
42
|
+
return `\n${indentChars}${trimmedLine}\n${indentChars}${marker}`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function addEnumArg(parser, { name, enumType, default: defaultValue, help }) {
|
|
47
|
+
parser.add_argument(name, {
|
|
48
|
+
type: (v) => enumFromValue(v, enumType),
|
|
49
|
+
choices: Array.from(Object.values(enumType)),
|
|
50
|
+
default: defaultValue,
|
|
51
|
+
help,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function convertInt(val) {
|
|
55
|
+
const res = Number(val);
|
|
56
|
+
if (isNaN(res) || Math.round(res) !== res) {
|
|
57
|
+
throw new Error(`'${val}' could not be converted to a number`);
|
|
58
|
+
}
|
|
59
|
+
return res;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { ConsoleLogSink as C, addEnumArg as a, convertInt as c };
|
|
63
|
+
//# sourceMappingURL=util-BhM5b2cL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util-BhM5b2cL.js","sources":["../src/logger/sinks/console-log-sink.ts","../src/cli/util.ts"],"sourcesContent":["import chalk from 'chalk'\nimport type { SourceLocation } from '../../awst/source-location'\nimport type { LogEvent } from '../index'\nimport { isMinLevel, LoggingContext, LogLevel } from '../index'\nimport type { LogSink } from './index'\nimport type { AbsolutePath } from '../../util/absolute-path'\n\ntype ColorFn = (text: string) => string\nconst levelConfig: Record<LogEvent['level'], { colorFn: ColorFn; writeFn: (...args: unknown[]) => void }> = {\n /* eslint-disable no-console */\n debug: { colorFn: chalk.green, writeFn: console.debug },\n info: { colorFn: chalk.green, writeFn: console.info },\n warning: { colorFn: chalk.yellow, writeFn: console.warn },\n error: { colorFn: chalk.red, writeFn: console.error },\n critical: { colorFn: chalk.red, writeFn: console.error },\n /* eslint-enable no-console */\n}\n\nexport class ConsoleLogSink implements LogSink {\n constructor(\n public readonly minLogLevel: LogLevel,\n private readonly pathsRelativeTo?: AbsolutePath,\n ) {}\n\n add(logEvent: LogEvent): void {\n const config = levelConfig[logEvent.level]\n\n let logText = `${config.colorFn(logEvent.level)}: ${logEvent.message}`\n if (logEvent.sourceLocation) {\n const sourceLocationText = logEvent.sourceLocation.toString({ pathsRelativeTo: this.pathsRelativeTo })\n const indentSize = sourceLocationText.length + logEvent.level.length + 4\n\n const sourceSummary = isMinLevel(logEvent.level, LogLevel.Warning) ? this.getSourceSummary(logEvent.sourceLocation, indentSize) : ''\n logText = `${sourceLocationText} ${logText}${sourceSummary}`\n }\n if (isMinLevel(LogLevel.Debug, this.minLogLevel) && logEvent.stack) {\n logText += `\\n ${logEvent.stack}`\n }\n config.writeFn(logText)\n }\n\n getSourceSummary(sourceLocation: SourceLocation, indent: number): string {\n const sourceFile = sourceLocation.file && LoggingContext.current.sourcesByPath[sourceLocation.file.toString()]\n if (!sourceFile || sourceLocation.scope === 'file') return ''\n\n const line = sourceFile[sourceLocation.line - 1]\n const trimmedLine = line.trimStart()\n const marker = `${''.padStart(sourceLocation.column - (line.length - trimmedLine.length))}^${''.padStart(Math.max(sourceLocation.endColumn - sourceLocation.column - 1, 0), '~')}`\n const indentChars = ''.padStart(indent, ' ')\n return `\\n${indentChars}${trimmedLine}\\n${indentChars}${marker}`\n }\n}\n","import type { ArgumentParser } from 'argparse'\nimport { enumFromValue } from '../util'\n\nexport function addEnumArg<T>(\n parser: ArgumentParser,\n { name, enumType, default: defaultValue, help }: { name: string; enumType: Record<string, string>; default?: T; help: string },\n) {\n parser.add_argument(name, {\n type: (v: string) => enumFromValue(v, enumType),\n choices: Array.from(Object.values(enumType)),\n default: defaultValue,\n help,\n })\n}\n\nexport function convertInt(val: string) {\n const res = Number(val)\n if (isNaN(res) || Math.round(res) !== res) {\n throw new Error(`'${val}' could not be converted to a number`)\n }\n return res\n}\n"],"names":[],"mappings":"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"}
|