@hookwarden/engine 0.3.1 → 0.4.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.
- package/dist/adapters/index.d.ts +3 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +8 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/symfony.d.ts +4 -0
- package/dist/adapters/symfony.d.ts.map +1 -0
- package/dist/adapters/symfony.js +177 -0
- package/dist/adapters/symfony.js.map +1 -0
- package/dist/adapters/vanilla-php.d.ts +4 -0
- package/dist/adapters/vanilla-php.d.ts.map +1 -0
- package/dist/adapters/vanilla-php.js +160 -0
- package/dist/adapters/vanilla-php.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model/build.js +72 -0
- package/dist/model/build.js.map +1 -1
- package/dist/model/catalog.d.ts.map +1 -1
- package/dist/model/catalog.js +139 -0
- package/dist/model/catalog.js.map +1 -1
- package/dist/model/evidence.d.ts.map +1 -1
- package/dist/model/evidence.js +28 -4
- package/dist/model/evidence.js.map +1 -1
- package/dist/parsers/babel.d.ts.map +1 -1
- package/dist/parsers/babel.js +10 -2
- package/dist/parsers/babel.js.map +1 -1
- package/dist/parsers/index.d.ts +3 -0
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +3 -0
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/php-literals.d.ts +5 -0
- package/dist/parsers/php-literals.d.ts.map +1 -0
- package/dist/parsers/php-literals.js +73 -0
- package/dist/parsers/php-literals.js.map +1 -0
- package/dist/parsers/php-loader.d.ts +10 -0
- package/dist/parsers/php-loader.d.ts.map +1 -0
- package/dist/parsers/php-loader.js +28 -0
- package/dist/parsers/php-loader.js.map +1 -0
- package/dist/parsers/php.d.ts +8 -0
- package/dist/parsers/php.d.ts.map +1 -0
- package/dist/parsers/php.js +117 -0
- package/dist/parsers/php.js.map +1 -0
- package/dist/types/handler.d.ts +1 -1
- package/dist/types/handler.d.ts.map +1 -1
- package/dist/types/project-model.d.ts +2 -2
- package/dist/types/project-model.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// PHP parser adapter (ENGINE-02). web-tree-sitter (WASM) + tree-sitter-php@0.24.2.
|
|
2
|
+
// D-27 all-or-nothing: any ERROR or MISSING node in the parse output triggers a ParseErrorRecord.
|
|
3
|
+
// PITFALLS-equivalent for PHP: tree-sitter-php grammar gaps surface here as parse errors,
|
|
4
|
+
// NOT as silently-skipped files. The all-or-nothing policy is the user-visible signal.
|
|
5
|
+
// D-25 ImportEdge contract: `use Foo\Bar;`, `use Foo\Bar as Baz;`, and `use Foo\{Bar, Baz};`
|
|
6
|
+
// (group) all flow through extractImports below.
|
|
7
|
+
export async function parsePhp(input, runtime) {
|
|
8
|
+
const { file_path, source_text } = input;
|
|
9
|
+
// tree-sitter never throws on parse — it always returns a tree (possibly null on OOM).
|
|
10
|
+
// Errors surface as ERROR / MISSING nodes inside the tree.
|
|
11
|
+
const tree = runtime.parser.parse(source_text);
|
|
12
|
+
let parseError = null;
|
|
13
|
+
if (tree === null) {
|
|
14
|
+
parseError = {
|
|
15
|
+
message: "tree-sitter-php: parser returned null tree",
|
|
16
|
+
location: { line: 1, col: 1 },
|
|
17
|
+
source: "tree-sitter",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
parseError = findFirstError(tree.rootNode);
|
|
22
|
+
}
|
|
23
|
+
const cleanTree = parseError === null ? tree : null;
|
|
24
|
+
const imports = cleanTree === null ? [] : extractImports(cleanTree.rootNode, file_path);
|
|
25
|
+
return {
|
|
26
|
+
file_path,
|
|
27
|
+
language: "php",
|
|
28
|
+
dialect: "tree-sitter-php",
|
|
29
|
+
source_text,
|
|
30
|
+
raw_ast: cleanTree, // D-27: null on error
|
|
31
|
+
imports,
|
|
32
|
+
parse_error: parseError,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function findFirstError(root) {
|
|
36
|
+
// DFS from rootNode; stop at first ERROR or MISSING node. Algorithm is grammar-agnostic.
|
|
37
|
+
const stack = [root];
|
|
38
|
+
while (stack.length > 0) {
|
|
39
|
+
const node = stack.pop();
|
|
40
|
+
if (!node)
|
|
41
|
+
break;
|
|
42
|
+
if (node.type === "ERROR" || node.isMissing) {
|
|
43
|
+
return {
|
|
44
|
+
message: node.isMissing
|
|
45
|
+
? `tree-sitter-php: missing token (${node.type})`
|
|
46
|
+
: `tree-sitter-php: ERROR node at ${node.startPosition.row + 1}:${node.startPosition.column + 1}`,
|
|
47
|
+
location: { line: node.startPosition.row + 1, col: node.startPosition.column + 1 },
|
|
48
|
+
source: "tree-sitter",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (!node.hasError)
|
|
52
|
+
continue; // entire subtree is clean; skip
|
|
53
|
+
for (const child of node.namedChildren) {
|
|
54
|
+
if (child !== null)
|
|
55
|
+
stack.push(child);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
function lastSegment(fqn) {
|
|
61
|
+
const idx = fqn.lastIndexOf("\\");
|
|
62
|
+
return idx === -1 ? fqn : fqn.slice(idx + 1);
|
|
63
|
+
}
|
|
64
|
+
function extractImports(root, fromFile) {
|
|
65
|
+
const out = [];
|
|
66
|
+
// tree-sitter-php@0.24.2 node-types.json:
|
|
67
|
+
// namespace_use_declaration → `use Foo\Bar;`, `use Foo\Bar as Baz;`, `use Foo\{Bar, Baz};`
|
|
68
|
+
// namespace_use_clause → per-name child (FQN + optional alias)
|
|
69
|
+
// namespace_use_group → body of group form (children = clauses)
|
|
70
|
+
// namespace_name → prefix for group form (only direct child of declaration)
|
|
71
|
+
for (const decl of root.descendantsOfType("namespace_use_declaration")) {
|
|
72
|
+
const body = decl.childForFieldName("body"); // null for non-group form
|
|
73
|
+
if (body !== null && body.type === "namespace_use_group") {
|
|
74
|
+
// Group form: `use Foo\{Bar, Baz};` — declaration has a namespace_name (prefix) sibling
|
|
75
|
+
// and a body of type namespace_use_group containing clauses.
|
|
76
|
+
const prefixNode = decl.namedChildren.find((c) => c !== null && c.type === "namespace_name");
|
|
77
|
+
const prefix = prefixNode?.text ?? "";
|
|
78
|
+
for (const clause of body.namedChildren) {
|
|
79
|
+
if (clause === null || clause.type !== "namespace_use_clause")
|
|
80
|
+
continue;
|
|
81
|
+
const suffixNode = clause.namedChildren.find((c) => c !== null && (c.type === "name" || c.type === "qualified_name"));
|
|
82
|
+
const suffix = suffixNode?.text ?? "";
|
|
83
|
+
const aliasNode = clause.childForFieldName("alias");
|
|
84
|
+
const toModule = prefix === "" ? suffix : `${prefix}\\${suffix}`;
|
|
85
|
+
const local = aliasNode?.text ?? lastSegment(suffix);
|
|
86
|
+
out.push({
|
|
87
|
+
from_file: fromFile,
|
|
88
|
+
to_module: toModule,
|
|
89
|
+
imported_names: [{ local, source: "default" }],
|
|
90
|
+
is_default: true,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Non-group form: `use Foo\Bar;` or `use Foo\Bar as Baz;`. Declaration's direct named
|
|
96
|
+
// children are namespace_use_clauses (one per name in a comma-separated list).
|
|
97
|
+
for (const clause of decl.namedChildren) {
|
|
98
|
+
if (clause === null || clause.type !== "namespace_use_clause")
|
|
99
|
+
continue;
|
|
100
|
+
const fqnNode = clause.namedChildren.find((c) => c !== null && (c.type === "name" || c.type === "qualified_name"));
|
|
101
|
+
const fqn = fqnNode?.text ?? "";
|
|
102
|
+
if (fqn === "")
|
|
103
|
+
continue;
|
|
104
|
+
const aliasNode = clause.childForFieldName("alias");
|
|
105
|
+
const local = aliasNode?.text ?? lastSegment(fqn);
|
|
106
|
+
out.push({
|
|
107
|
+
from_file: fromFile,
|
|
108
|
+
to_module: fqn,
|
|
109
|
+
imported_names: [{ local, source: "default" }],
|
|
110
|
+
is_default: true,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=php.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php.js","sourceRoot":"","sources":["../../src/parsers/php.ts"],"names":[],"mappings":"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"}
|
package/dist/types/handler.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FindingId, SourceLocation, Verdict } from "./finding.ts";
|
|
2
|
-
export type Framework = "express" | "hono" | "fastify" | "nextjs" | "flask" | "fastapi" | "django";
|
|
2
|
+
export type Framework = "express" | "hono" | "fastify" | "nextjs" | "flask" | "fastapi" | "django" | "laravel" | "symfony" | "slim" | "vanilla-php";
|
|
3
3
|
export type WebhookEvidenceKind = "path_pattern_match" | "signature_header_read" | "sdk_import" | "sdk_verify_call" | "body_as_bytes_or_buffer" | "secret_env_var_reference" | "secret_literal_match";
|
|
4
4
|
export interface WebhookEvidence {
|
|
5
5
|
readonly kind: WebhookEvidenceKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/types/handler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/types/handler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,MAAM,GACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,aAAa,CAAC;AAGlB,MAAM,MAAM,mBAAmB,GAC3B,oBAAoB,GACpB,uBAAuB,GACvB,YAAY,GACZ,iBAAiB,GACjB,yBAAyB,GACzB,0BAA0B,GAC1B,sBAAsB,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC;AAGD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC7D,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC3D,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { WebhookHandler } from "./handler.ts";
|
|
2
2
|
export interface ParsedFile {
|
|
3
3
|
readonly file_path: string;
|
|
4
|
-
readonly language: "javascript" | "typescript" | "python";
|
|
5
|
-
readonly dialect: "babel" | "tree-sitter-python";
|
|
4
|
+
readonly language: "javascript" | "typescript" | "python" | "php";
|
|
5
|
+
readonly dialect: "babel" | "tree-sitter-python" | "tree-sitter-php";
|
|
6
6
|
readonly source_text: string;
|
|
7
7
|
readonly raw_ast: unknown;
|
|
8
8
|
readonly imports: ReadonlyArray<ImportEdge>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-model.d.ts","sourceRoot":"","sources":["../../src/types/project-model.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"project-model.d.ts","sourceRoot":"","sources":["../../src/types/project-model.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClE,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/C;AAGD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAAC;CAC1C;AAGD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAGD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,wBAAwB,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACzE,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAClD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hookwarden/engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "hookwarden audit engine — browser-safe, pure-functional. Performs zero I/O.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"@babel/types": "^7.29.0",
|
|
38
38
|
"@types/picomatch": "^4.0.3",
|
|
39
39
|
"fast-check": "^3.23.0",
|
|
40
|
+
"tree-sitter-php": "0.24.2",
|
|
40
41
|
"tree-sitter-python": "^0.25.0"
|
|
41
42
|
},
|
|
42
43
|
"scripts": {
|