atcoder-gui 0.1.7 → 1.1.0

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 (105) hide show
  1. package/README.md +7 -0
  2. package/dist/analyzer/analyzer.d.ts +16 -0
  3. package/dist/analyzer/analyzer.d.ts.map +1 -0
  4. package/dist/analyzer/analyzer.js +379 -0
  5. package/dist/analyzer/analyzer.js.map +1 -0
  6. package/dist/analyzer/html-parser.d.ts +24 -0
  7. package/dist/analyzer/html-parser.d.ts.map +1 -0
  8. package/dist/analyzer/html-parser.js +214 -0
  9. package/dist/analyzer/html-parser.js.map +1 -0
  10. package/dist/analyzer/index.d.ts +7 -0
  11. package/dist/analyzer/index.d.ts.map +1 -0
  12. package/dist/analyzer/index.js +7 -0
  13. package/dist/analyzer/index.js.map +1 -0
  14. package/dist/analyzer/lexer.d.ts +14 -0
  15. package/dist/analyzer/lexer.d.ts.map +1 -0
  16. package/dist/analyzer/lexer.js +133 -0
  17. package/dist/analyzer/lexer.js.map +1 -0
  18. package/dist/analyzer/match.d.ts +7 -0
  19. package/dist/analyzer/match.d.ts.map +1 -0
  20. package/dist/analyzer/match.js +133 -0
  21. package/dist/analyzer/match.js.map +1 -0
  22. package/dist/analyzer/parser.d.ts +20 -0
  23. package/dist/analyzer/parser.d.ts.map +1 -0
  24. package/dist/analyzer/parser.js +135 -0
  25. package/dist/analyzer/parser.js.map +1 -0
  26. package/dist/analyzer/types.d.ts +54 -0
  27. package/dist/analyzer/types.d.ts.map +1 -0
  28. package/dist/analyzer/types.js +10 -0
  29. package/dist/analyzer/types.js.map +1 -0
  30. package/dist/analyzer/typing.d.ts +10 -0
  31. package/dist/analyzer/typing.d.ts.map +1 -0
  32. package/dist/analyzer/typing.js +246 -0
  33. package/dist/analyzer/typing.js.map +1 -0
  34. package/dist/browser.d.ts +12 -0
  35. package/dist/browser.d.ts.map +1 -1
  36. package/dist/browser.js +26 -1
  37. package/dist/browser.js.map +1 -1
  38. package/dist/build.d.ts +7 -0
  39. package/dist/build.d.ts.map +1 -0
  40. package/dist/build.js +40 -0
  41. package/dist/build.js.map +1 -0
  42. package/dist/config.d.ts +10 -2
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +31 -18
  45. package/dist/config.js.map +1 -1
  46. package/dist/config.json5 +16 -1
  47. package/dist/gen.d.ts +6 -12
  48. package/dist/gen.d.ts.map +1 -1
  49. package/dist/gen.js +153 -66
  50. package/dist/gen.js.map +1 -1
  51. package/dist/generator/checker.d.ts +2 -0
  52. package/dist/generator/checker.d.ts.map +1 -0
  53. package/dist/generator/checker.js +64 -0
  54. package/dist/generator/checker.js.map +1 -0
  55. package/dist/generator/cplusplus.d.ts +14 -0
  56. package/dist/generator/cplusplus.d.ts.map +1 -0
  57. package/dist/generator/cplusplus.js +43 -0
  58. package/dist/generator/cplusplus.js.map +1 -0
  59. package/dist/generator/fetcher.d.ts +2 -0
  60. package/dist/generator/fetcher.d.ts.map +1 -0
  61. package/dist/generator/fetcher.js +39 -0
  62. package/dist/generator/fetcher.js.map +1 -0
  63. package/dist/generator/pipeline.d.ts +25 -0
  64. package/dist/generator/pipeline.d.ts.map +1 -0
  65. package/dist/generator/pipeline.js +85 -0
  66. package/dist/generator/pipeline.js.map +1 -0
  67. package/dist/generator/python.d.ts +14 -0
  68. package/dist/generator/python.d.ts.map +1 -0
  69. package/dist/generator/python.js +41 -0
  70. package/dist/generator/python.js.map +1 -0
  71. package/dist/generator/types.d.ts +79 -0
  72. package/dist/generator/types.d.ts.map +1 -0
  73. package/dist/generator/types.js +2 -0
  74. package/dist/generator/types.js.map +1 -0
  75. package/dist/generator/universal.d.ts +35 -0
  76. package/dist/generator/universal.d.ts.map +1 -0
  77. package/dist/generator/universal.js +524 -0
  78. package/dist/generator/universal.js.map +1 -0
  79. package/dist/generator/variable-extractor.d.ts +16 -0
  80. package/dist/generator/variable-extractor.d.ts.map +1 -0
  81. package/dist/generator/variable-extractor.js +103 -0
  82. package/dist/generator/variable-extractor.js.map +1 -0
  83. package/dist/main.d.ts +3 -1
  84. package/dist/main.d.ts.map +1 -1
  85. package/dist/main.js +103 -102
  86. package/dist/main.js.map +1 -1
  87. package/dist/submit.d.ts +3 -2
  88. package/dist/submit.d.ts.map +1 -1
  89. package/dist/submit.js +48 -33
  90. package/dist/submit.js.map +1 -1
  91. package/dist/test.d.ts +10 -0
  92. package/dist/test.d.ts.map +1 -0
  93. package/dist/test.js +127 -0
  94. package/dist/test.js.map +1 -0
  95. package/dist/tests/batch_check.d.ts +2 -0
  96. package/dist/tests/batch_check.d.ts.map +1 -0
  97. package/dist/tests/batch_check.js +46 -0
  98. package/dist/tests/batch_check.js.map +1 -0
  99. package/dist/types.d.ts +2 -0
  100. package/dist/types.d.ts.map +1 -1
  101. package/dist/utils.d.ts +12 -0
  102. package/dist/utils.d.ts.map +1 -1
  103. package/dist/utils.js +32 -0
  104. package/dist/utils.js.map +1 -1
  105. package/package.json +21 -4
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Simple parser implementation for the format string.
3
+ * This should transform a stream of tokens into an AST (FormatNode).
4
+ */
5
+ export class Parser {
6
+ tokens;
7
+ pos = 0;
8
+ constructor(tokens) {
9
+ this.tokens = tokens.filter((t) => t.type !== "space");
10
+ }
11
+ parse() {
12
+ const children = [];
13
+ while (this.peek().type !== "eof") {
14
+ const stmt = this.parseStatement();
15
+ if (stmt)
16
+ children.push(stmt);
17
+ }
18
+ return { type: "format", children };
19
+ }
20
+ parseStatement() {
21
+ const token = this.peek();
22
+ if (token.type === "ident") {
23
+ return this.parseItem();
24
+ }
25
+ if (token.type === "newline") {
26
+ this.consume();
27
+ return { type: "break" };
28
+ }
29
+ if (token.type === "dots" || token.type === "vdots") {
30
+ this.consume();
31
+ return { type: "dots" };
32
+ }
33
+ // Skip commas
34
+ if (token.type === "comma") {
35
+ this.consume();
36
+ return null; // Skip
37
+ }
38
+ // Skip unexpected? Or error?
39
+ // For now, consume and ignore to be robust
40
+ this.consume();
41
+ return null;
42
+ }
43
+ parseItem() {
44
+ const token = this.consume(); // ident
45
+ const name = token.value;
46
+ const indices = [];
47
+ // Check for subscripts
48
+ while (this.peek().type === "subscript") {
49
+ this.consume(); // consume '_'
50
+ if (this.peek().type === "lparen") {
51
+ this.consume(); // consume '{' or '('
52
+ // Handle empty braces
53
+ if (this.peek().type === "rparen") {
54
+ this.consume();
55
+ continue;
56
+ }
57
+ // Parse list of expressions separated by commas
58
+ while (true) {
59
+ indices.push(this.parseExpression());
60
+ if (this.peek().type === "comma") {
61
+ this.consume();
62
+ }
63
+ else {
64
+ break;
65
+ }
66
+ }
67
+ if (this.peek().type === "rparen") {
68
+ this.consume();
69
+ }
70
+ }
71
+ else {
72
+ // Single expression index
73
+ indices.push(this.parseExpression());
74
+ }
75
+ }
76
+ return { type: "item", name, indices };
77
+ }
78
+ parseExpression() {
79
+ return this.parseAddSub();
80
+ }
81
+ parseAddSub() {
82
+ let left = this.parseMulDiv();
83
+ while (this.peek().type === "binop" &&
84
+ (this.peek().value === "+" || this.peek().value === "-")) {
85
+ const op = this.consume().value;
86
+ const right = this.parseMulDiv();
87
+ left = { type: "binop", op, left, right };
88
+ }
89
+ return left;
90
+ }
91
+ parseMulDiv() {
92
+ let left = this.parseAtom();
93
+ while (this.peek().type === "binop" &&
94
+ (this.peek().value === "*" || this.peek().value === "/")) {
95
+ const op = this.consume().value;
96
+ const right = this.parseAtom();
97
+ left = { type: "binop", op, left, right };
98
+ }
99
+ return left;
100
+ }
101
+ parseAtom() {
102
+ const token = this.peek();
103
+ if (token.type === "lparen") {
104
+ this.consume();
105
+ const expr = this.parseExpression();
106
+ if (this.peek().type === "rparen") {
107
+ this.consume();
108
+ }
109
+ return expr;
110
+ }
111
+ if (token.type === "ident") {
112
+ // If the identifier is followed by _, it's an ItemNode (variable with index?)
113
+ // But usually inside an index, we just have variables like 'i', 'N'.
114
+ // Does 'N' have indices? N_i? Usually not.
115
+ // But technically 'A_{B_i}' is possible.
116
+ // So recursively call parseItem?
117
+ return this.parseItem();
118
+ }
119
+ if (token.type === "number") {
120
+ this.consume();
121
+ return { type: "number", value: token.value };
122
+ }
123
+ // Error recovery
124
+ this.consume();
125
+ // Use 'item' type as fallback, but ideally should be error
126
+ return { type: "item", name: "ERROR", indices: [] };
127
+ }
128
+ peek() {
129
+ return this.tokens[this.pos];
130
+ }
131
+ consume() {
132
+ return this.tokens[this.pos++];
133
+ }
134
+ }
135
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/analyzer/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export type TokenType = "ident" | "number" | "newline" | "dots" | "vdots" | "subscript" | "binop" | "lparen" | "rparen" | "comma" | "space" | "eof";
2
+ export interface Token {
3
+ type: TokenType;
4
+ value?: string | number;
5
+ line: number;
6
+ column: number;
7
+ }
8
+ export interface ASTNode {
9
+ type: string;
10
+ }
11
+ export interface FormatNode extends ASTNode {
12
+ type: "format";
13
+ children: ASTNode[];
14
+ }
15
+ export declare const VarType: {
16
+ readonly ValueInt: "int";
17
+ readonly IndexInt: "index_int";
18
+ readonly Float: "float";
19
+ readonly String: "string";
20
+ readonly Char: "char";
21
+ readonly Query: "query";
22
+ readonly BinaryString: "binary_string";
23
+ };
24
+ export type VarType = (typeof VarType)[keyof typeof VarType];
25
+ export interface ItemNode extends ASTNode {
26
+ type: "item";
27
+ name: string;
28
+ indices: ASTNode[];
29
+ inferredType?: VarType;
30
+ }
31
+ export interface DotsNode extends ASTNode {
32
+ type: "dots";
33
+ }
34
+ export interface BreakNode extends ASTNode {
35
+ type: "break";
36
+ }
37
+ export interface NumberNode extends ASTNode {
38
+ type: "number";
39
+ value: number;
40
+ }
41
+ export interface BinOpNode extends ASTNode {
42
+ type: "binop";
43
+ op: string;
44
+ left: ASTNode;
45
+ right: ASTNode;
46
+ }
47
+ export interface LoopNode extends ASTNode {
48
+ type: "loop";
49
+ variable: string;
50
+ start: ASTNode;
51
+ end: ASTNode;
52
+ body: ASTNode[];
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzer/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,GACP,WAAW,GACX,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,OAAO,GACP,KAAK,CAAC;AAEV,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,UAAW,SAAQ,OAAO;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,OAAO;;;;;;;;CAQV,CAAC;AAGX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,UAAW,SAAQ,OAAO;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB"}
@@ -0,0 +1,10 @@
1
+ export const VarType = {
2
+ ValueInt: "int",
3
+ IndexInt: "index_int",
4
+ Float: "float",
5
+ String: "string",
6
+ Char: "char",
7
+ Query: "query",
8
+ BinaryString: "binary_string",
9
+ };
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analyzer/types.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;CACrB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { FormatNode, VarType } from "./types.js";
2
+ export declare class TypingError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function inferTypesFromInstances(node: FormatNode, instances: string[]): {
6
+ types: Record<string, VarType>;
7
+ collapsedVars: Set<string>;
8
+ collapsedAst: FormatNode;
9
+ };
10
+ //# sourceMappingURL=typing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing.d.ts","sourceRoot":"","sources":["../../src/analyzer/typing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAA0C,MAAM,YAAY,CAAC;AAGzF,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AA+MD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EAAE,GAClB;IACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,UAAU,CAAC;CAC1B,CAyCA"}
@@ -0,0 +1,246 @@
1
+ import { VarType } from "./types.js";
2
+ import { matchFormat } from "./match.js";
3
+ export class TypingError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "TypingError";
7
+ }
8
+ }
9
+ function getVarType(value) {
10
+ if (typeof value === "number") {
11
+ return Number.isInteger(value) ? VarType.ValueInt : VarType.Float;
12
+ }
13
+ if (typeof value === "string") {
14
+ if (/^-?\d+$/.test(value)) {
15
+ const abs = value.startsWith("-") ? value.slice(1) : value;
16
+ if (abs.length > 1 && abs.startsWith("0"))
17
+ return VarType.String;
18
+ if (abs.length > 1 && /^[01]+$/.test(abs))
19
+ return VarType.BinaryString;
20
+ return VarType.ValueInt;
21
+ }
22
+ if (/^-?\d+(\.\d+)?$/.test(value)) {
23
+ return VarType.Float;
24
+ }
25
+ if (value.length === 1) {
26
+ return VarType.Char;
27
+ }
28
+ return VarType.String;
29
+ }
30
+ throw new TypingError(`Unknown value type: ${value}`);
31
+ }
32
+ function unifyTypes(t1, t2) {
33
+ if (t1 === t2)
34
+ return t1;
35
+ if (t1 === VarType.String || t2 === VarType.String)
36
+ return VarType.String;
37
+ if (t1 === VarType.Char || t2 === VarType.Char)
38
+ return VarType.String;
39
+ const types = new Set([t1, t2]);
40
+ if (types.has(VarType.BinaryString)) {
41
+ if (types.has(VarType.ValueInt) || types.has(VarType.IndexInt))
42
+ return VarType.ValueInt;
43
+ if (types.has(VarType.Float))
44
+ return VarType.Float;
45
+ return VarType.BinaryString;
46
+ }
47
+ if (types.has(VarType.IndexInt) && types.has(VarType.ValueInt))
48
+ return VarType.ValueInt;
49
+ if (types.has(VarType.IndexInt) && types.has(VarType.Float))
50
+ return VarType.Float;
51
+ if (types.has(VarType.ValueInt) && types.has(VarType.Float))
52
+ return VarType.Float;
53
+ return VarType.String;
54
+ }
55
+ function getVarTypesFromMatchResult(values) {
56
+ const types = {};
57
+ for (const name of Object.keys(values)) {
58
+ const val = values[name];
59
+ let candidateTypes = new Set();
60
+ if (typeof val === "object") {
61
+ for (const k of Object.keys(val)) {
62
+ candidateTypes.add(getVarType(val[k]));
63
+ }
64
+ }
65
+ else {
66
+ candidateTypes.add(getVarType(val));
67
+ }
68
+ if (candidateTypes.size === 0) {
69
+ throw new TypingError(`Failed to infer type: ${name} has no values`);
70
+ }
71
+ let currentType = null;
72
+ for (const t of candidateTypes) {
73
+ if (currentType === null) {
74
+ currentType = t;
75
+ }
76
+ else {
77
+ currentType = unifyTypes(currentType, t);
78
+ }
79
+ }
80
+ if (currentType) {
81
+ types[name] = currentType;
82
+ }
83
+ }
84
+ return types;
85
+ }
86
+ function unifyVarTypes(t1, t2) {
87
+ const t3 = {};
88
+ const allKeys = new Set([...Object.keys(t1), ...Object.keys(t2)]);
89
+ for (const name of allKeys) {
90
+ if (t1[name] && t2[name]) {
91
+ t3[name] = unifyTypes(t1[name], t2[name]);
92
+ }
93
+ else if (t1[name]) {
94
+ t3[name] = t1[name];
95
+ }
96
+ else {
97
+ t3[name] = t2[name];
98
+ }
99
+ }
100
+ return t3;
101
+ }
102
+ function collectIndexVariables(node, indices = new Set()) {
103
+ const traverseExpression = (expr) => {
104
+ if (expr.type === "item") {
105
+ indices.add(expr.name);
106
+ expr.indices.forEach(traverseExpression);
107
+ }
108
+ else if (expr.type === "binop") {
109
+ traverseExpression(expr.left);
110
+ traverseExpression(expr.right);
111
+ }
112
+ };
113
+ if (node.type === "format") {
114
+ node.children.forEach((child) => collectIndexVariables(child, indices));
115
+ }
116
+ else if (node.type === "item") {
117
+ node.indices.forEach(traverseExpression);
118
+ }
119
+ else if (node.type === "loop") {
120
+ const loop = node;
121
+ traverseExpression(loop.start);
122
+ traverseExpression(loop.end);
123
+ loop.body.forEach((child) => collectIndexVariables(child, indices));
124
+ }
125
+ return indices;
126
+ }
127
+ function resolveBinaryStrings(types, node) {
128
+ const indexVars = collectIndexVariables(node);
129
+ const resolved = { ...types };
130
+ for (const name of Object.keys(resolved)) {
131
+ if (resolved[name] === VarType.BinaryString) {
132
+ if (indexVars.has(name)) {
133
+ resolved[name] = VarType.ValueInt;
134
+ }
135
+ else {
136
+ resolved[name] = VarType.String;
137
+ }
138
+ }
139
+ }
140
+ return resolved;
141
+ }
142
+ function collapseLoops(node) {
143
+ const collapsedVars = new Set();
144
+ function transform(n) {
145
+ if (n.type === "format") {
146
+ const fmt = n;
147
+ // Ensured FormatNode type assertion here
148
+ return { ...fmt, children: fmt.children.map(transform) };
149
+ }
150
+ if (n.type === "loop") {
151
+ const loop = n;
152
+ // Check if collapsible
153
+ // Condition: body contains exactly one ItemNode, possibly nested in FormatNodes
154
+ let item = null;
155
+ let isSimple = true;
156
+ const checkBody = (nodes) => {
157
+ for (const child of nodes) {
158
+ if (child.type === "format") {
159
+ checkBody(child.children);
160
+ }
161
+ else if (child.type === "item") {
162
+ if (item) {
163
+ isSimple = false; // More than one item
164
+ }
165
+ else {
166
+ item = child;
167
+ }
168
+ }
169
+ else if (child.type === "break" || child.type === "dots") {
170
+ // Ignore break/dots
171
+ }
172
+ else {
173
+ isSimple = false; // Other nodes like nested loops or binops
174
+ }
175
+ }
176
+ };
177
+ checkBody(loop.body);
178
+ if (isSimple && item) {
179
+ const originalItem = item;
180
+ // Find index that uses the loop variable
181
+ const loopVar = loop.variable;
182
+ const indexToRemove = originalItem.indices.findIndex((idx) => idx.type === "item" && idx.name === loopVar);
183
+ if (indexToRemove !== -1) {
184
+ // Collapsible!
185
+ const newIndices = [...originalItem.indices];
186
+ newIndices.splice(indexToRemove, 1);
187
+ collapsedVars.add(originalItem.name);
188
+ // Ensured ItemNode type assertion here
189
+ return { ...originalItem, indices: newIndices };
190
+ }
191
+ }
192
+ // If not collapsible, recurse
193
+ // Ensured LoopNode type assertion here
194
+ return {
195
+ ...loop,
196
+ body: loop.body.map(transform),
197
+ };
198
+ }
199
+ return n;
200
+ }
201
+ const collapsedAst = transform(node);
202
+ return { collapsedAst, collapsedVars };
203
+ }
204
+ export function inferTypesFromInstances(node, instances) {
205
+ if (instances.length === 0)
206
+ return { types: {}, collapsedVars: new Set(), collapsedAst: node };
207
+ let firstError;
208
+ try {
209
+ let finalTypes = null;
210
+ for (const instance of instances) {
211
+ const values = matchFormat(node, instance);
212
+ const types = getVarTypesFromMatchResult(values);
213
+ finalTypes = finalTypes ? unifyVarTypes(finalTypes, types) : types;
214
+ }
215
+ return {
216
+ types: resolveBinaryStrings(finalTypes || {}, node),
217
+ collapsedVars: new Set(),
218
+ collapsedAst: node,
219
+ };
220
+ }
221
+ catch (e) {
222
+ firstError = e;
223
+ }
224
+ const { collapsedAst, collapsedVars } = collapseLoops(node);
225
+ if (collapsedVars.size > 0) {
226
+ try {
227
+ let finalTypes = null;
228
+ for (const instance of instances) {
229
+ const values = matchFormat(collapsedAst, instance);
230
+ const types = getVarTypesFromMatchResult(values);
231
+ finalTypes = finalTypes ? unifyVarTypes(finalTypes, types) : types;
232
+ }
233
+ return {
234
+ types: resolveBinaryStrings(finalTypes || {}, collapsedAst),
235
+ collapsedVars,
236
+ collapsedAst: collapsedAst,
237
+ };
238
+ }
239
+ catch (_) {
240
+ // Both failed. Throw the FIRST error usually.
241
+ throw firstError;
242
+ }
243
+ }
244
+ throw firstError;
245
+ }
246
+ //# sourceMappingURL=typing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing.js","sourceRoot":"","sources":["../../src/analyzer/typing.ts"],"names":[],"mappings":"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"}
package/dist/browser.d.ts CHANGED
@@ -8,6 +8,10 @@ export declare class BrowserManager {
8
8
  private sessionManager;
9
9
  private onPageClose;
10
10
  constructor();
11
+ /**
12
+ * Fetch raw HTML content from a URL within the browser context
13
+ */
14
+ fetchRawHtml(url: string): Promise<string>;
11
15
  /**
12
16
  * Set the callback function to be called when the browser page closes
13
17
  */
@@ -24,6 +28,14 @@ export declare class BrowserManager {
24
28
  * Get the current page instance
25
29
  */
26
30
  getCurrentPage(): Page | null;
31
+ /**
32
+ * Get the current URL
33
+ */
34
+ getCurrentUrl(): string | undefined;
35
+ /**
36
+ * Get the current page content
37
+ */
38
+ getCurrentPageContent(): Promise<string | undefined>;
27
39
  /**
28
40
  * Get the current browser instance
29
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,IAAI,EAAkB,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAA6B;;IAMhD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAYnD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9C;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC;;OAEG;IACH,cAAc,IAAI,IAAI,GAAG,IAAI;IAI7B;;OAEG;IACH,UAAU,IAAI,OAAO,GAAG,IAAI;IAI5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,cAAc,IAAI;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAGpF"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,IAAI,EAAkB,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAA6B;;IAMhD;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAYnD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9C;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC;;OAEG;IACH,cAAc,IAAI,IAAI,GAAG,IAAI;IAI7B;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI1D;;OAEG;IACH,UAAU,IAAI,OAAO,GAAG,IAAI;IAI5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,cAAc,IAAI;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAGpF"}
package/dist/browser.js CHANGED
@@ -9,6 +9,19 @@ export class BrowserManager {
9
9
  constructor() {
10
10
  this.sessionManager = new SessionManager();
11
11
  }
12
+ /**
13
+ * Fetch raw HTML content from a URL within the browser context
14
+ */
15
+ async fetchRawHtml(url) {
16
+ if (!this.page) {
17
+ throw new Error('Browser not launched. Call launch() first.');
18
+ }
19
+ const html = await this.page.evaluate(async (url) => {
20
+ const response = await fetch(url);
21
+ return await response.text();
22
+ }, url);
23
+ return html;
24
+ }
12
25
  /**
13
26
  * Set the callback function to be called when the browser page closes
14
27
  */
@@ -32,7 +45,7 @@ export class BrowserManager {
32
45
  }
33
46
  const windowSizeOption = config.windowSize ? `--window-size=${config.windowSize?.width},${config.windowSize?.height}` : '';
34
47
  this.browser = await chromium.launch({
35
- headless: false, // UI mode
48
+ headless: process.env.CI === 'true' || process.env.HEADLESS === 'true', // UI mode
36
49
  args: [
37
50
  '--disable-blink-features=AutomationControlled',
38
51
  windowSizeOption,
@@ -70,6 +83,18 @@ export class BrowserManager {
70
83
  getCurrentPage() {
71
84
  return this.page;
72
85
  }
86
+ /**
87
+ * Get the current URL
88
+ */
89
+ getCurrentUrl() {
90
+ return this.page?.url();
91
+ }
92
+ /**
93
+ * Get the current page content
94
+ */
95
+ async getCurrentPageContent() {
96
+ return await this.page?.content();
97
+ }
73
98
  /**
74
99
  * Get the current browser instance
75
100
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ConfigManager } from "./config.js";
2
+ export declare class BuildManager {
3
+ private configManager;
4
+ constructor(configManager: ConfigManager);
5
+ run(_args: string[]): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIlC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA+B1C"}
package/dist/build.js ADDED
@@ -0,0 +1,40 @@
1
+ import * as fs from "fs";
2
+ import { execSync } from "child_process";
3
+ export class BuildManager {
4
+ configManager;
5
+ constructor(configManager) {
6
+ this.configManager = configManager;
7
+ }
8
+ async run(_args) {
9
+ if (!fs.existsSync("metadata.json")) {
10
+ console.error("Error: metadata.json not found in the current directory.");
11
+ return;
12
+ }
13
+ try {
14
+ const metadata = JSON.parse(fs.readFileSync("metadata.json", "utf-8"));
15
+ const codeFilename = metadata.code_filename;
16
+ if (!codeFilename) {
17
+ console.error("Error: code_filename not found in metadata.json");
18
+ return;
19
+ }
20
+ if (codeFilename.endsWith(".py")) {
21
+ // needless to build
22
+ }
23
+ else if (codeFilename.endsWith(".cpp")) {
24
+ const buildCommand = this.configManager.getConfig().buildCommand?.cpp || "g++ -O3 -std=c++23 -DNDEBUG main.cpp -o main";
25
+ console.log(`Executing build command: ${buildCommand}`);
26
+ try {
27
+ execSync(buildCommand, { encoding: "utf-8", stdio: "inherit" });
28
+ }
29
+ catch (_) { }
30
+ }
31
+ else {
32
+ console.log(`Build not supported for ${codeFilename}`);
33
+ }
34
+ }
35
+ catch (error) {
36
+ console.error("Error reading or parsing metadata.json:", error);
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,OAAO,YAAY;IACf,aAAa,CAAgB;IAErC,YAAY,aAA4B;QACtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAe;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC;YAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,oBAAoB;YACtB,CAAC;iBAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,GAAG,IAAI,8CAA8C,CAAC;gBACrG,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC;oBACH,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF"}