@katnip-org/compiler 0.1.2 → 0.1.4
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/build/cli.js +9 -3
- package/build/cli.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +2 -2
- package/build/index.js.map +1 -1
- package/build/semantic/StdlibLoader.d.ts +2 -2
- package/build/semantic/StdlibLoader.js +9 -15
- package/build/semantic/StdlibLoader.js.map +1 -1
- package/build/stdlib.generated.d.ts +4 -0
- package/build/stdlib.generated.js +52 -0
- package/build/stdlib.generated.js.map +1 -0
- package/build/utils/ErrorReporter.js +4 -2
- package/build/utils/ErrorReporter.js.map +1 -1
- package/build/utils/Logger.d.ts +1 -3
- package/build/utils/Logger.js +2 -11
- package/build/utils/Logger.js.map +1 -1
- package/build/utils/colors.js +2 -1
- package/build/utils/colors.js.map +1 -1
- package/package.json +2 -1
package/build/cli.js
CHANGED
|
@@ -8,6 +8,12 @@ import { ErrorReporter } from "./utils/ErrorReporter.js";
|
|
|
8
8
|
import { Logger } from "./utils/Logger.js";
|
|
9
9
|
import yargs from 'yargs';
|
|
10
10
|
import { hideBin } from 'yargs/helpers';
|
|
11
|
+
import { appendFileSync } from "node:fs";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
class FileLogger extends Logger {
|
|
14
|
+
logFilePath = path.resolve(process.cwd(), "examples", "log.txt");
|
|
15
|
+
write(msg) { appendFileSync(this.logFilePath, `${msg}\n`, { encoding: "utf8" }); }
|
|
16
|
+
}
|
|
11
17
|
const cli = yargs(hideBin(process.argv));
|
|
12
18
|
cli
|
|
13
19
|
.scriptName('katnip')
|
|
@@ -30,7 +36,7 @@ cli
|
|
|
30
36
|
.then((fileContent) => {
|
|
31
37
|
// Create an error reporter instance
|
|
32
38
|
const reporter = new ErrorReporter(fileContent, true);
|
|
33
|
-
const logger = new
|
|
39
|
+
const logger = new FileLogger();
|
|
34
40
|
if (argv.logger === true)
|
|
35
41
|
logger.enable();
|
|
36
42
|
else
|
|
@@ -62,7 +68,7 @@ cli
|
|
|
62
68
|
fs.readFile(argv.source, { encoding: 'utf-8' })
|
|
63
69
|
.then((fileContent) => {
|
|
64
70
|
const reporter = new ErrorReporter(fileContent, true);
|
|
65
|
-
const logger = new
|
|
71
|
+
const logger = new FileLogger();
|
|
66
72
|
if (argv.logger === true)
|
|
67
73
|
logger.enable();
|
|
68
74
|
else
|
|
@@ -99,7 +105,7 @@ cli
|
|
|
99
105
|
fs.readFile(argv.source, { encoding: 'utf-8' })
|
|
100
106
|
.then(async (fileContent) => {
|
|
101
107
|
const reporter = new ErrorReporter(fileContent, true);
|
|
102
|
-
const logger = new
|
|
108
|
+
const logger = new FileLogger();
|
|
103
109
|
if (argv.logger === true)
|
|
104
110
|
logger.enable();
|
|
105
111
|
else
|
package/build/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type KatnipError } from "./utils/ErrorReporter.js";
|
|
2
2
|
export type { KatnipError } from "./utils/ErrorReporter.js";
|
|
3
|
-
export declare function checkSource(source: string):
|
|
3
|
+
export declare function checkSource(source: string): readonly KatnipError[];
|
package/build/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { loadStdlibModules } from "./semantic/StdlibLoader.js";
|
|
|
5
5
|
import { ErrorReporter } from "./utils/ErrorReporter.js";
|
|
6
6
|
import { Logger } from "./utils/Logger.js";
|
|
7
7
|
let stdlibCache = null;
|
|
8
|
-
export
|
|
8
|
+
export function checkSource(source) {
|
|
9
9
|
const reporter = new ErrorReporter(source);
|
|
10
10
|
const logger = new Logger(); // disabled by default
|
|
11
11
|
const tokens = new Lexer(reporter, logger).tokenize(source);
|
|
@@ -14,7 +14,7 @@ export async function checkSource(source) {
|
|
|
14
14
|
return reporter.getErrors();
|
|
15
15
|
const analyzer = new SemanticAnalyzer(reporter, logger);
|
|
16
16
|
try {
|
|
17
|
-
stdlibCache ??=
|
|
17
|
+
stdlibCache ??= loadStdlibModules(logger);
|
|
18
18
|
analyzer.loadStdlib(stdlibCache);
|
|
19
19
|
}
|
|
20
20
|
catch {
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAqB,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAoB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,IAAI,WAAW,GAA0B,IAAI,CAAC;AAE9C,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAqB,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAoB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,IAAI,WAAW,GAA0B,IAAI,CAAC;AAE9C,MAAM,UAAU,WAAW,CAAC,MAAc;IACtC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC,sBAAsB;IAEnD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC;QACD,WAAW,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IACD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -12,7 +12,7 @@ export interface StdlibModule {
|
|
|
12
12
|
sourcePath: string;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* Lexes and parses every stdlib file. Errors here are compiler bugs, not user errors: they are printed with a banner and the load aborts.
|
|
15
|
+
* Lexes and parses every stdlib file (embedded at build time). Errors here are compiler bugs, not user errors: they are printed with a banner and the load aborts.
|
|
16
16
|
* @throws when any stdlib file fails to lex or parse.
|
|
17
17
|
*/
|
|
18
|
-
export declare function loadStdlibModules(logger?: Logger):
|
|
18
|
+
export declare function loadStdlibModules(logger?: Logger): StdlibModule[];
|
|
@@ -2,39 +2,33 @@
|
|
|
2
2
|
* @fileoverview Loads the stdlib .knip files shipped with the compiler.
|
|
3
3
|
* Each file defines one namespace (motion.knip -> motion.*); prelude.knip is special-cased by the analyzer and becomes bare globals (typeof, Num, ...).
|
|
4
4
|
*/
|
|
5
|
-
import * as fs from "fs/promises";
|
|
6
|
-
import * as path from "path";
|
|
7
|
-
import { fileURLToPath } from "url";
|
|
8
5
|
import { Lexer } from "../lexer/Lexer.js";
|
|
9
6
|
import { Parser } from "../parser/Parser.js";
|
|
10
7
|
import { ErrorReporter } from "../utils/ErrorReporter.js";
|
|
11
8
|
import { Logger } from "../utils/Logger.js";
|
|
12
|
-
|
|
9
|
+
import { stdlibSources } from "../stdlib.generated.js";
|
|
13
10
|
/**
|
|
14
|
-
* Lexes and parses every stdlib file. Errors here are compiler bugs, not user errors: they are printed with a banner and the load aborts.
|
|
11
|
+
* Lexes and parses every stdlib file (embedded at build time). Errors here are compiler bugs, not user errors: they are printed with a banner and the load aborts.
|
|
15
12
|
* @throws when any stdlib file fails to lex or parse.
|
|
16
13
|
*/
|
|
17
|
-
export
|
|
18
|
-
const entries = (await fs.readdir(STDLIB_DIR)).filter((f) => f.endsWith(".knip"));
|
|
14
|
+
export function loadStdlibModules(logger = new Logger()) {
|
|
19
15
|
// The prelude declares bare globals; load first
|
|
20
|
-
entries.sort((a, b) => a === "prelude.knip" ? -1 : b === "prelude.knip" ? 1 : a.localeCompare(b));
|
|
16
|
+
const entries = [...stdlibSources].sort((a, b) => a.name === "prelude.knip" ? -1 : b.name === "prelude.knip" ? 1 : a.name.localeCompare(b.name));
|
|
21
17
|
const modules = [];
|
|
22
|
-
for (const
|
|
23
|
-
const sourcePath = path.join(STDLIB_DIR, entry);
|
|
24
|
-
const content = await fs.readFile(sourcePath, { encoding: "utf-8" });
|
|
18
|
+
for (const { name, content } of entries) {
|
|
25
19
|
const reporter = new ErrorReporter(content, true);
|
|
26
20
|
const tokens = new Lexer(reporter, logger).tokenize(content);
|
|
27
21
|
const ast = reporter.hasErrors() ? null : new Parser(reporter, logger).parse(tokens);
|
|
28
22
|
if (reporter.hasErrors() || !ast) {
|
|
29
|
-
console.error(`Internal compiler error in stdlib file '${
|
|
23
|
+
console.error(`Internal compiler error in stdlib file '${name}' (this is a Katnip bug):`);
|
|
30
24
|
reporter.print();
|
|
31
|
-
throw new Error(`stdlib file '${
|
|
25
|
+
throw new Error(`stdlib file '${name}' failed to load`);
|
|
32
26
|
}
|
|
33
27
|
modules.push({
|
|
34
|
-
namespace:
|
|
28
|
+
namespace: name.replace(/\.knip$/, ""),
|
|
35
29
|
ast,
|
|
36
30
|
reporter,
|
|
37
|
-
sourcePath,
|
|
31
|
+
sourcePath: name,
|
|
38
32
|
});
|
|
39
33
|
}
|
|
40
34
|
return modules;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StdlibLoader.js","sourceRoot":"","sources":["../../src/semantic/StdlibLoader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"StdlibLoader.js","sourceRoot":"","sources":["../../src/semantic/StdlibLoader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,IAAI,MAAM,EAAE;IAC3D,gDAAgD;IAChD,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAChG,CAAC;IAEF,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErF,IAAI,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CACT,2CAA2C,IAAI,2BAA2B,CAC7E,CAAC;YACF,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACT,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YACtC,GAAG;YACH,QAAQ;YACR,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// AUTO-GEN'D by scripts/gen-stdlib.mjs; do not edit.
|
|
2
|
+
export const stdlibSources = [
|
|
3
|
+
{
|
|
4
|
+
"name": "clone.knip",
|
|
5
|
+
"content": "#> clone.knip ~ clone lifecycle blocks. <#\n\nproc onStart(@opcode = \"control_start_as_clone\", @hat) -> void {}\nproc create(@opcode = \"control_create_clone_of\", target: str) -> void {}\nproc delete(@opcode = \"control_delete_this_clone\") -> void {}\n"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"name": "console.knip",
|
|
9
|
+
"content": "#> console.knip ~ debug/interaction helpers. <#\n\nproc log(@opcode = \"katnip_console_log\", msg: str) -> void {}\nproc input(@opcode = \"sensing_askandwait\", prompt: str) -> str {}\nproc warn(@opcode = \"katnip_console_warn\", msg: str) -> void {}\nproc error(@opcode = \"katnip_console_error\", msg: str) -> void {}"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "control.knip",
|
|
13
|
+
"content": "#> control.knip ~ control-flow hat blocks. <#\n\nproc onclone(@opcode = \"control_start_as_clone\", @hat) -> void {}\n"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "dict.knip",
|
|
17
|
+
"content": "#> dict.knip ~ methods on dict values (first param `self` marks a method). <#\n\nproc contains(@opcode = \"katnip_dict_contains\", self: dict<K, V>, key: K) -> bool {}\nproc length(@opcode = \"katnip_dict_length\", self: dict<K, V>) -> num {}\nproc keys(@opcode = \"katnip_dict_keys\", self: dict<K, V>) -> list<K> {}\nproc values(@opcode = \"katnip_dict_values\", self: dict<K, V>) -> list<V> {}\nproc merge(@opcode = \"katnip_dict_merg\", self: dict<K, V>, addition: dict<K, V>) -> void {}\n"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "events.knip",
|
|
21
|
+
"content": "#> events.knip ~ event hat blocks. <#\n\nproc onflag(@opcode = \"event_whenflagclicked\", @hat) -> void {}\n"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "list.knip",
|
|
25
|
+
"content": "#> list.knip ~ methods on list values (first param `self` marks a method). <#\n\nproc add(@opcode = \"data_addtolist\", self: list<T>, item: T) -> void {}\nproc contains(@opcode = \"data_listcontainsitem\", self: list<T>, item: T) -> bool {}\nproc length(@opcode = \"data_lengthoflist\", self: list<T>) -> num {}\nproc remove(@opcode = \"data_deleteoflist\", self: list<T>, idx: num) -> T {}\nproc clear(@opcode = \"data_deletealloflist\", self: list<T>) -> void {}\nproc indexOf(@opcode = \"data_itemnumoflist\", self: list<T>, item: T) -> num {}\n\nproc merge(@opcode = \"katnip_list_merge\", self: list<T>, addition: list<T>) -> void {}"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "looks.knip",
|
|
29
|
+
"content": "#> looks.knip ~ sprite appearance blocks. <#\n\nproc say(@opcode = \"looks_say\", msg: str) -> void {}\nproc say(@opcode = \"looks_sayforsecs\", msg: str, seconds: num) -> void {}\n"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "math.knip",
|
|
33
|
+
"content": "#> math.knip ~ math operations + math constants. <#\n\nproc pow(@opcode = \"operator_mathop\", base: num, exponent: num) -> num {}\n\npublic pi: num = 3.141592653589793;\npublic e: num = 2.718281828459045;\npublic tau: num = 6.283185307179586;"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "motion.knip",
|
|
37
|
+
"content": "#> motion.knip ~ sprite motion blocks. <#\n\npublic enum Target { RANDOM, MOUSE }\npublic enum RotationStyle { LEFT, RIGHT }\n\nproc move(@opcode = \"motion_movesteps\", steps: num) -> void {}\nproc turn(@opcode = \"motion_turnright\", degrees: num) -> void {}\n\nproc goTo(@opcode = \"motion_goto\", position: Target | str) -> void {}\nproc goTo(@opcode = \"motion_gotoxy\", x: num, y: num) -> void {}\nproc glideTo(@opcode = \"motion_glideto\", time: num, position: Target | str) -> void {}\nproc glideTo(@opcode = \"motion_glidetoxy\", time: num, x: num, y: num) -> void {}\n\nproc point(@opcode = \"motion_pointindirection\", degrees: num) -> void {}\nproc point(@opcode = \"motion_pointtowards\", target: Target) -> void {}\n\nproc changeX(@opcode = \"motion_changexby\", dX: num) -> void {}\nproc setX(@opcode = \"motion_setx\", x: num) -> void {}\nproc changeY(@opcode = \"motion_changeyby\", dY: num) -> void {}\nproc setY(@opcode = \"motion_sety\", y: num) -> void {}\n\nproc ifOnEdgeBounce(@opcode = \"motion_ifonedgebounce\") -> void {}\nproc setRotationStyle(@opcode = \"motion_setrotationstyle\", style: RotationStyle) -> void {}\n\nproc getPosition(@opcode = \"katnip_motion_position\") -> (num, num) {}\n"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "pen.knip",
|
|
41
|
+
"content": "#> pen.knip ~ pen extension blocks. <#\n\npublic enum ColorParam { COLOR, SATURATION, BRIGHTNESS, TRANSPARENCY }\n\nproc down(@opcode = \"pen_penDown\") -> void {}\nproc up(@opcode = \"pen_penUp\") -> void {}\nproc clear(@opcode = \"pen_clear\") -> void {}\nproc setHex(@opcode = \"pen_setPenColorToColor\", hex: str) -> void {}\n\nproc setAttr(@opcode = \"pen_setPenColorParamTo\", attr: ColorParam, value: num) -> void {}\nproc changeAttr(@opcode = \"pen_changePenColorParamBy\", attr: ColorParam, dA: num) -> void {}\n\nproc setSize(@opcode = \"pen_setPenSizeTo\", size: num) -> void {}\nproc changeSize(@opcode = \"pen_changePenSizeBy\", dS: num) -> void {}"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "prelude.knip",
|
|
45
|
+
"content": "#> prelude.knip ~ bare global builtins, available without a namespace. <#\n\nproc typeof(@opcode = \"katnip_typeof\", value: any) -> str {} # TODO: use the katnip one\n\n# casts\nproc Num(@opcode = \"katnip_cast_num\", value: any) -> num {}\nproc Str(@opcode = \"katnip_cast_str\", value: any) -> str {}\nproc Bool(@opcode = \"katnip_cast_bool\", value: any) -> bool {}\nproc List(@opcode = \"katnip_cast_list\", value: any) -> list<str> {}\n\nproc wait(@opcode = \"control_wait\", seconds: num) -> void {}\n\n# iter helpers\nproc range(@opcode = \"katnip_range\", stop: num) -> list<num> {}\nproc range(@opcode = \"katnip_range\", start: num, stop: num, step: num = 1) -> list<num> {}\n\nproc zip(@opcode = \"katnip_zip\", l1: list<T>, l2: list<U>) -> (list<T>, list<U>) {}\nproc enumerate(@opcode = \"katnip_enumerate\", items: list<T>) -> (list<num>, list<T>) {}\n\n# constants\npublic true: bool = \"true\" == \"true\";\npublic false: bool = \"false\" == \"\";\n\n# misc\nproc len(@opcode = \"operator_length\", input: str) -> num {}"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "str.knip",
|
|
49
|
+
"content": "#> str.knip ~ methods on string values (first param `self` marks a method). <#\n\nproc contains(@opcode = \"operator_contains\", self: str, substring: str) -> bool {}"
|
|
50
|
+
}
|
|
51
|
+
];
|
|
52
|
+
//# sourceMappingURL=stdlib.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdlib.generated.js","sourceRoot":"","sources":["../src/stdlib.generated.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAC1B;IACI;QACI,MAAM,EAAE,YAAY;QACpB,SAAS,EAAE,kQAAkQ;KAChR;IACD;QACI,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,iUAAiU;KAC/U;IACD;QACI,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,wHAAwH;KACtI;IACD;QACI,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,+eAA+e;KAC7f;IACD;QACI,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,8GAA8G;KAC5H;IACD;QACI,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,ioBAAioB;KAC/oB;IACD;QACI,MAAM,EAAE,YAAY;QACpB,SAAS,EAAE,uLAAuL;KACrM;IACD;QACI,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,qPAAqP;KACnQ;IACD;QACI,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,qsCAAqsC;KACntC;IACD;QACI,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,upBAAupB;KACrqB;IACD;QACI,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,+gCAA+gC;KAC7hC;IACD;QACI,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,wKAAwK;KACtL;CACJ,CAAC"}
|
|
@@ -10,9 +10,11 @@ export class KatnipError {
|
|
|
10
10
|
this.source = source;
|
|
11
11
|
this.message = message;
|
|
12
12
|
this.location = location;
|
|
13
|
-
|
|
13
|
+
// captureStackTrace is V8-only (Node/Chromium); cast avoids erors in other runtimes
|
|
14
|
+
const captureStackTrace = Error.captureStackTrace;
|
|
15
|
+
if (captureStack && captureStackTrace) {
|
|
14
16
|
const err = {};
|
|
15
|
-
|
|
17
|
+
captureStackTrace(err, KatnipError);
|
|
16
18
|
this.stackTrace = err.stack;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorReporter.js","sourceRoot":"","sources":["../../src/utils/ErrorReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,MAAM,OAAO,WAAW;IAIT;IACA;IACA;IALJ,UAAU,CAAU;IAE3B,YACW,MAAc,EAAO,yBAAyB;IAC9C,OAAe,EAAM,gBAAgB;IACrC,QAAyB,EAChC,eAAwB,IAAI;QAHrB,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAiB;QAGhC,IAAI,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ErrorReporter.js","sourceRoot":"","sources":["../../src/utils/ErrorReporter.ts"],"names":[],"mappings":"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"}
|
package/build/utils/Logger.d.ts
CHANGED
|
@@ -18,14 +18,12 @@ export declare class KatnipLog {
|
|
|
18
18
|
} | undefined, timestamp?: Date);
|
|
19
19
|
}
|
|
20
20
|
export declare class Logger {
|
|
21
|
-
private writeToFile;
|
|
22
21
|
enabled: boolean;
|
|
23
22
|
logs: KatnipLog[];
|
|
24
|
-
private logFilePath;
|
|
25
23
|
private formatters;
|
|
26
|
-
constructor(writeToFile?: boolean);
|
|
27
24
|
private sanitizeForLog;
|
|
28
25
|
print(log: KatnipLog): void;
|
|
26
|
+
protected write(_msg: string): void;
|
|
29
27
|
log(log: KatnipLog): void;
|
|
30
28
|
enable(): void;
|
|
31
29
|
disable(): void;
|
package/build/utils/Logger.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
1
|
import { pc } from "./colors.js";
|
|
4
2
|
export var KatnipLogType;
|
|
5
3
|
(function (KatnipLogType) {
|
|
@@ -21,20 +19,14 @@ export class KatnipLog {
|
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
21
|
export class Logger {
|
|
24
|
-
writeToFile;
|
|
25
22
|
enabled = false;
|
|
26
23
|
logs = [];
|
|
27
|
-
logFilePath;
|
|
28
24
|
formatters = {
|
|
29
25
|
[KatnipLogType.Info]: (msg) => pc.cyan(msg),
|
|
30
26
|
[KatnipLogType.Warn]: (msg) => pc.yellow(msg),
|
|
31
27
|
[KatnipLogType.Error]: (msg) => pc.red(msg),
|
|
32
28
|
[KatnipLogType.Debug]: (msg) => pc.gray(msg)
|
|
33
29
|
};
|
|
34
|
-
constructor(writeToFile = false) {
|
|
35
|
-
this.writeToFile = writeToFile;
|
|
36
|
-
this.logFilePath = path.resolve(process.cwd(), "examples", "log.txt");
|
|
37
|
-
}
|
|
38
30
|
sanitizeForLog(value) {
|
|
39
31
|
if (typeof value === "string") {
|
|
40
32
|
return JSON.stringify(value); // \n and \r etc are escaped
|
|
@@ -46,11 +38,10 @@ export class Logger {
|
|
|
46
38
|
const baseMessage = `${log.timestamp} - [${log.type}] ${this.sanitizeForLog(log.message)}` +
|
|
47
39
|
(log.location ? ` at line ${log.location.line}, column ${log.location.column}` : "");
|
|
48
40
|
console.log(this.formatters[log.type](baseMessage));
|
|
49
|
-
|
|
50
|
-
fs.appendFileSync(this.logFilePath, `${baseMessage}\n`, { encoding: "utf8" });
|
|
51
|
-
}
|
|
41
|
+
this.write(baseMessage);
|
|
52
42
|
}
|
|
53
43
|
}
|
|
44
|
+
write(_msg) { }
|
|
54
45
|
log(log) {
|
|
55
46
|
this.logs.push(log);
|
|
56
47
|
this.print(log);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACrB,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,gCAAe,CAAA;IACf,gCAAe,CAAA;AACnB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED,MAAM,OAAO,SAAS;IAEP;IACA;IACA;IACA;IAJX,YACW,IAAmB,EACnB,OAAe,EACf,QAA2C,EAC3C,YAAkB,IAAI,IAAI,EAAE;QAH5B,SAAI,GAAJ,IAAI,CAAe;QACnB,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAmC;QAC3C,cAAS,GAAT,SAAS,CAAmB;IACpC,CAAC;CACP;AAED,MAAM,OAAO,MAAM;IACf,OAAO,GAAY,KAAK,CAAC;IACzB,IAAI,GAAgB,EAAE,CAAC;IAEf,UAAU,GAAmD;QACjE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QAC3C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;KAC/C,CAAC;IAEM,cAAc,CAAC,KAAU;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,4BAA4B;QAC9D,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAc;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,WAAW,GACb,GAAG,GAAG,CAAC,SAAS,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACtE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAES,KAAK,CAAC,IAAY,IAAS,CAAC;IAEtC,GAAG,CAAC,GAAc;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;CACtC"}
|
package/build/utils/colors.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Minimal ANSI colorizer, drop in for picocolors.
|
|
3
3
|
*/
|
|
4
|
-
const
|
|
4
|
+
const proc = globalThis.process;
|
|
5
|
+
const useColor = proc?.env?.NO_COLOR == null && proc?.stdout?.isTTY === true;
|
|
5
6
|
const wrap = (open, close) => (s) => useColor ? `\x1b[${open}m${s}\x1b[${close}m` : s;
|
|
6
7
|
export const pc = {
|
|
7
8
|
red: wrap(31, 39),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,IAAI,GAAI,UAAuG,CAAC,OAAO,CAAC;AAC9H,MAAM,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;AAE7E,MAAM,IAAI,GACN,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE,CAChC,CAAC,CAAS,EAAU,EAAE,CAClB,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,EAAE,GAAG;IACd,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IAClB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;CACpB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@katnip-org/compiler",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Compiler and type-checker for the Katnip language (.knip), targeting Scratch SB3.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Benjamin Clark",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"typescript": "^5.8.3"
|
|
53
53
|
},
|
|
54
54
|
"scripts": {
|
|
55
|
+
"prebuild": "node scripts/gen-stdlib.mjs",
|
|
55
56
|
"build": "tsc",
|
|
56
57
|
"prepublishOnly": "npm run build"
|
|
57
58
|
}
|