@wrongstack/techstack 0.295.0 → 0.296.2
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/dotnet.d.ts.map +1 -1
- package/dist/adapters/elixir.d.ts.map +1 -1
- package/dist/adapters/go.d.ts.map +1 -1
- package/dist/adapters/gradle.d.ts.map +1 -1
- package/dist/adapters/maven.d.ts.map +1 -1
- package/dist/adapters/parse-utils.d.ts.map +1 -1
- package/dist/adapters/ruby.d.ts.map +1 -1
- package/dist/adapters/swift.d.ts.map +1 -1
- package/dist/advisory/native-audit.d.ts.map +1 -1
- package/dist/index.js +70 -55
- package/dist/index.js.map +2 -2
- package/dist/registry/client.d.ts.map +1 -1
- package/dist/registry/http-fetch.d.ts +3 -0
- package/dist/registry/http-fetch.d.ts.map +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/adapters/dotnet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/adapters/dotnet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAwExB,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAY;IAErC,SAAS,CACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAwE3C;CACF;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elixir.d.ts","sourceRoot":"","sources":["../../src/adapters/elixir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"elixir.d.ts","sourceRoot":"","sources":["../../src/adapters/elixir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AA0CxB,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAY;IAErC,SAAS,CACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAkE3C;CACF;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/adapters/go.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/adapters/go.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AA6IxB,qBAAa,SAAU,YAAW,gBAAgB;IAChD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAQ;IAEjC,SAAS,CACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAoF3C;CAEF;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gradle.d.ts","sourceRoot":"","sources":["../../src/adapters/gradle.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAIhF,OAAO,KAAK,EAAE,qBAAqB,EAAmB,WAAW,EAAY,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5G,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"gradle.d.ts","sourceRoot":"","sources":["../../src/adapters/gradle.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAIhF,OAAO,KAAK,EAAE,qBAAqB,EAAmB,WAAW,EAAY,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5G,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAsFxB,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAY;IAErC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CA4C1G;CACF;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maven.d.ts","sourceRoot":"","sources":["../../src/adapters/maven.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"maven.d.ts","sourceRoot":"","sources":["../../src/adapters/maven.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AA6ExB,qBAAa,YAAa,YAAW,gBAAgB;IACnD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAW;IAEpC,SAAS,CACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAyC3C;CACF;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-utils.d.ts","sourceRoot":"","sources":["../../src/adapters/parse-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAcrE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAOxE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"parse-utils.d.ts","sourceRoot":"","sources":["../../src/adapters/parse-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAcrE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAOxE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAS9E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../src/adapters/ruby.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../src/adapters/ruby.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAmDxB,qBAAa,WAAY,YAAW,gBAAgB;IAClD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAU;IAEnC,SAAS,CACb,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAkE3C;CACF;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../src/adapters/swift.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAY,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../src/adapters/swift.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAY,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAoDxB,qBAAa,YAAa,YAAW,gBAAgB;IACnD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAW;IAEpC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAwC1G;CACF;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-audit.d.ts","sourceRoot":"","sources":["../../src/advisory/native-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AA6BD;;GAEG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0D3I;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqB3I;AAuCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG7I;AAgDD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2C9I;AAID;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwChJ;AAID;;;GAGG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4D9I;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,KACR,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"native-audit.d.ts","sourceRoot":"","sources":["../../src/advisory/native-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AA6BD;;GAEG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0D3I;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqB3I;AAuCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG7I;AAgDD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2C9I;AAID;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwChJ;AAID;;;GAGG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,GAAE,kBAA8C,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4D9I;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,KACR,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AA0CtD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,kBAA8C,GACrD,OAAO,CAAC,iBAAiB,CAAC,CA0B5B;AAID;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,WAAW,EACtB,MAAM,GAAE,kBAA8C,GACrD,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/E,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,aAAa,GAAE,kBAA8C,GAAG,qBAAqB,CAmBtH"}
|
package/dist/index.js
CHANGED
|
@@ -81,7 +81,7 @@ function parsePurl(purl) {
|
|
|
81
81
|
const slashIdx = main.indexOf("/");
|
|
82
82
|
if (slashIdx < 0) return void 0;
|
|
83
83
|
const type = main.slice(0, slashIdx);
|
|
84
|
-
|
|
84
|
+
const remainder = main.slice(slashIdx + 1);
|
|
85
85
|
let namespace;
|
|
86
86
|
let name;
|
|
87
87
|
const nsSlashIdx = remainder.indexOf("/");
|
|
@@ -591,8 +591,7 @@ function parseTomlKeyValue(line) {
|
|
|
591
591
|
function parseXmlAttributes(source) {
|
|
592
592
|
const attributes = /* @__PURE__ */ new Map();
|
|
593
593
|
const regex = /([A-Za-z_:][\w:.-]*)\s*=\s*(["'])(.*?)\2/g;
|
|
594
|
-
|
|
595
|
-
while ((match = regex.exec(source)) !== null) {
|
|
594
|
+
for (const match of source.matchAll(regex)) {
|
|
596
595
|
const key = match[1];
|
|
597
596
|
const value = match[3];
|
|
598
597
|
if (key !== void 0 && value !== void 0) attributes.set(key, value);
|
|
@@ -789,7 +788,7 @@ var PythonAdapter = class {
|
|
|
789
788
|
const hasRequirements = workspace.manifests.some((m) => m.includes("requirements.txt")) || await fileExistsAsync(join2(root, "requirements.txt"));
|
|
790
789
|
const hasPipfile = workspace.manifests.some((m) => m.includes("Pipfile")) || await fileExistsAsync(join2(root, "Pipfile"));
|
|
791
790
|
const lockfilePath = await this.detectLockfile(root);
|
|
792
|
-
|
|
791
|
+
const allDeps = [];
|
|
793
792
|
let pyprojectEv;
|
|
794
793
|
if (hasPyproject) {
|
|
795
794
|
try {
|
|
@@ -1118,7 +1117,6 @@ function parseGoMod(content) {
|
|
|
1118
1117
|
continue;
|
|
1119
1118
|
}
|
|
1120
1119
|
if (line.startsWith("exclude") || line.startsWith("replace") || line.startsWith("retract")) {
|
|
1121
|
-
continue;
|
|
1122
1120
|
}
|
|
1123
1121
|
}
|
|
1124
1122
|
return deps;
|
|
@@ -1236,8 +1234,7 @@ import { join as join3 } from "node:path";
|
|
|
1236
1234
|
function parseCsproj(content) {
|
|
1237
1235
|
const refs = [];
|
|
1238
1236
|
const regex = /<PackageReference\b([^>]*?)(?:\/>|>([\s\S]*?)<\/PackageReference>)/gi;
|
|
1239
|
-
|
|
1240
|
-
while ((match = regex.exec(content)) !== null) {
|
|
1237
|
+
for (const match of content.matchAll(regex)) {
|
|
1241
1238
|
const attributes = match[1] ?? "";
|
|
1242
1239
|
const body = match[2] ?? "";
|
|
1243
1240
|
const parsedAttributes = parseXmlAttributes(attributes);
|
|
@@ -1569,8 +1566,7 @@ function parsePomDependencies(xml) {
|
|
|
1569
1566
|
const properties = /* @__PURE__ */ new Map();
|
|
1570
1567
|
const propertiesBlock = /<properties>([\s\S]*?)<\/properties>/.exec(xml)?.[1] ?? "";
|
|
1571
1568
|
const propertyRegex = /<([A-Za-z0-9_.-]+)>\s*([^<]+?)\s*<\/\1>/g;
|
|
1572
|
-
|
|
1573
|
-
while ((propertyMatch = propertyRegex.exec(propertiesBlock)) !== null) {
|
|
1569
|
+
for (const propertyMatch of propertiesBlock.matchAll(propertyRegex)) {
|
|
1574
1570
|
const key = propertyMatch[1];
|
|
1575
1571
|
const value = propertyMatch[2];
|
|
1576
1572
|
if (key && value) properties.set(key, value.trim());
|
|
@@ -1591,8 +1587,7 @@ function parsePomDependencies(xml) {
|
|
|
1591
1587
|
const managed = /* @__PURE__ */ new Map();
|
|
1592
1588
|
const managementBlock = /<dependencyManagement>([\s\S]*?)<\/dependencyManagement>/.exec(xml)?.[1] ?? "";
|
|
1593
1589
|
const managementRegex = /<dependency>\s*([\s\S]*?)<\/dependency>/g;
|
|
1594
|
-
|
|
1595
|
-
while ((managementMatch = managementRegex.exec(managementBlock)) !== null) {
|
|
1590
|
+
for (const managementMatch of managementBlock.matchAll(managementRegex)) {
|
|
1596
1591
|
const block = managementMatch[1];
|
|
1597
1592
|
if (!block) continue;
|
|
1598
1593
|
const groupId = xmlTagValue(block, "groupId");
|
|
@@ -1602,8 +1597,7 @@ function parsePomDependencies(xml) {
|
|
|
1602
1597
|
}
|
|
1603
1598
|
const directXml = xml.replace(/<dependencyManagement>[\s\S]*?<\/dependencyManagement>/g, "");
|
|
1604
1599
|
const depRegex = /<dependency>\s*([\s\S]*?)<\/dependency>/g;
|
|
1605
|
-
|
|
1606
|
-
while ((match = depRegex.exec(directXml)) !== null) {
|
|
1600
|
+
for (const match of directXml.matchAll(depRegex)) {
|
|
1607
1601
|
const block = match[1];
|
|
1608
1602
|
const groupId = xmlTagValue(block, "groupId");
|
|
1609
1603
|
const artifactId = xmlTagValue(block, "artifactId");
|
|
@@ -1714,8 +1708,7 @@ function parseVersionCatalog(content) {
|
|
|
1714
1708
|
function parseGradleManifest(content, catalog) {
|
|
1715
1709
|
const deps = [];
|
|
1716
1710
|
const coordinateRegex = /\b(implementation|api|compileOnly|runtimeOnly|testImplementation|testRuntimeOnly|annotationProcessor)\s*(?:\(|\s)\s*["']([^"']+)["']/g;
|
|
1717
|
-
|
|
1718
|
-
while ((match = coordinateRegex.exec(content)) !== null) {
|
|
1711
|
+
for (const match of content.matchAll(coordinateRegex)) {
|
|
1719
1712
|
const configuration = match[1];
|
|
1720
1713
|
const value = match[2];
|
|
1721
1714
|
if (!configuration || !value) continue;
|
|
@@ -1724,7 +1717,7 @@ function parseGradleManifest(content, catalog) {
|
|
|
1724
1717
|
deps.push({ name: `${group}:${artifact}`, requested: version, scope: scopeForConfiguration(configuration) });
|
|
1725
1718
|
}
|
|
1726
1719
|
const aliasRegex = /\b(implementation|api|compileOnly|runtimeOnly|testImplementation|testRuntimeOnly)\s*\(\s*libs\.([\w.]+)\s*\)/g;
|
|
1727
|
-
|
|
1720
|
+
for (const match of content.matchAll(aliasRegex)) {
|
|
1728
1721
|
const configuration = match[1];
|
|
1729
1722
|
const alias = match[2];
|
|
1730
1723
|
if (!configuration || !alias) continue;
|
|
@@ -1796,8 +1789,7 @@ import { readFileSync as readFileSync6 } from "node:fs";
|
|
|
1796
1789
|
function parseGemfile(content) {
|
|
1797
1790
|
const gems = [];
|
|
1798
1791
|
const gemRegex = /gem\s+['"]([^'"]+)['"]([^\n]*)/g;
|
|
1799
|
-
|
|
1800
|
-
while ((match = gemRegex.exec(content)) !== null) {
|
|
1792
|
+
for (const match of content.matchAll(gemRegex)) {
|
|
1801
1793
|
const name = match[1];
|
|
1802
1794
|
if (name === "rails" || name === "ruby") continue;
|
|
1803
1795
|
const tail = match[2] ?? "";
|
|
@@ -1896,8 +1888,7 @@ function identityFromLocation(location) {
|
|
|
1896
1888
|
function parsePackageSwift(content) {
|
|
1897
1889
|
const deps = [];
|
|
1898
1890
|
const packageRegex = /\.package\s*\(\s*(?:name:\s*["'][^"']+["'],\s*)?(url|path):\s*["']([^"']+)["']\s*(?:,\s*(?:from|exact|branch|revision):\s*["']([^"']+)["'])?\s*\)/g;
|
|
1899
|
-
|
|
1900
|
-
while ((match = packageRegex.exec(content)) !== null) {
|
|
1891
|
+
for (const match of content.matchAll(packageRegex)) {
|
|
1901
1892
|
const location = match[2];
|
|
1902
1893
|
if (!location) continue;
|
|
1903
1894
|
deps.push({
|
|
@@ -1969,8 +1960,7 @@ import { readFileSync as readFileSync8 } from "node:fs";
|
|
|
1969
1960
|
function parseMixExsDeps(content) {
|
|
1970
1961
|
const deps = [];
|
|
1971
1962
|
const depRegex = /\{:(\w+),\s*([^}]+)\}/g;
|
|
1972
|
-
|
|
1973
|
-
while ((match = depRegex.exec(content)) !== null) {
|
|
1963
|
+
for (const match of content.matchAll(depRegex)) {
|
|
1974
1964
|
const name = match[1];
|
|
1975
1965
|
const value = match[2];
|
|
1976
1966
|
if (!name || !value) continue;
|
|
@@ -1983,8 +1973,7 @@ function parseMixExsDeps(content) {
|
|
|
1983
1973
|
function parseMixLock(content) {
|
|
1984
1974
|
const versions = /* @__PURE__ */ new Map();
|
|
1985
1975
|
const lockRegex = /["']([\w-]+)["']\s*=>\s*\{:hex,\s*:[\w-]+,\s*["']([^"']+)["']/g;
|
|
1986
|
-
|
|
1987
|
-
while ((match = lockRegex.exec(content)) !== null) {
|
|
1976
|
+
for (const match of content.matchAll(lockRegex)) {
|
|
1988
1977
|
versions.set(match[1], match[2]);
|
|
1989
1978
|
}
|
|
1990
1979
|
return versions;
|
|
@@ -2517,6 +2506,7 @@ async function applyPlan(plan, options = {}) {
|
|
|
2517
2506
|
// src/registry/http-fetch.ts
|
|
2518
2507
|
import { get as httpGet, request as httpRequest } from "node:http";
|
|
2519
2508
|
import { get as httpsGet, request as httpsRequest } from "node:https";
|
|
2509
|
+
var DEFAULT_MAX_BODY_BYTES = 64 * 1024 * 1024;
|
|
2520
2510
|
function retryAfterMs(headers, now = Date.now()) {
|
|
2521
2511
|
const value = Array.isArray(headers["retry-after"]) ? headers["retry-after"][0] : headers["retry-after"];
|
|
2522
2512
|
if (!value) return void 0;
|
|
@@ -2528,11 +2518,15 @@ function retryAfterMs(headers, now = Date.now()) {
|
|
|
2528
2518
|
function delay(ms, signal) {
|
|
2529
2519
|
if (signal?.aborted) return Promise.reject(new DOMException("Request aborted", "AbortError"));
|
|
2530
2520
|
return new Promise((resolve3, reject) => {
|
|
2531
|
-
const
|
|
2532
|
-
signal?.addEventListener("abort", () => {
|
|
2521
|
+
const onAbort = () => {
|
|
2533
2522
|
clearTimeout(timer);
|
|
2534
2523
|
reject(new DOMException("Request aborted", "AbortError"));
|
|
2535
|
-
}
|
|
2524
|
+
};
|
|
2525
|
+
const timer = setTimeout(() => {
|
|
2526
|
+
signal?.removeEventListener("abort", onAbort);
|
|
2527
|
+
resolve3();
|
|
2528
|
+
}, ms);
|
|
2529
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
2536
2530
|
});
|
|
2537
2531
|
}
|
|
2538
2532
|
function requestOnce(options) {
|
|
@@ -2547,11 +2541,20 @@ function requestOnce(options) {
|
|
|
2547
2541
|
timeout: options.timeoutMs ?? 15e3
|
|
2548
2542
|
};
|
|
2549
2543
|
const isHttp = options.hostname === "localhost" || options.hostname === "127.0.0.1";
|
|
2544
|
+
const maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
|
|
2550
2545
|
const callback = (response) => {
|
|
2551
2546
|
let body = "";
|
|
2552
2547
|
response.setEncoding?.("utf8");
|
|
2553
2548
|
response.on("data", (chunk) => {
|
|
2554
2549
|
body += chunk.toString();
|
|
2550
|
+
if (body.length > maxBodyBytes) {
|
|
2551
|
+
response.destroy();
|
|
2552
|
+
reject(
|
|
2553
|
+
new Error(
|
|
2554
|
+
`Response body exceeded ${maxBodyBytes} bytes for ${options.hostname}${options.path}`
|
|
2555
|
+
)
|
|
2556
|
+
);
|
|
2557
|
+
}
|
|
2555
2558
|
});
|
|
2556
2559
|
response.on("end", () => resolve3({
|
|
2557
2560
|
statusCode: response.statusCode ?? 0,
|
|
@@ -2615,12 +2618,26 @@ function getCached(key) {
|
|
|
2615
2618
|
}
|
|
2616
2619
|
return entry.data;
|
|
2617
2620
|
}
|
|
2621
|
+
var MAX_CACHE_ENTRIES = 512;
|
|
2622
|
+
function trimCache(now) {
|
|
2623
|
+
if (registryCache.size <= MAX_CACHE_ENTRIES) return;
|
|
2624
|
+
for (const [key, entry] of registryCache) {
|
|
2625
|
+
if (now > entry.expiresAt) registryCache.delete(key);
|
|
2626
|
+
}
|
|
2627
|
+
while (registryCache.size > MAX_CACHE_ENTRIES) {
|
|
2628
|
+
const oldest = registryCache.keys().next().value;
|
|
2629
|
+
if (oldest === void 0) break;
|
|
2630
|
+
registryCache.delete(oldest);
|
|
2631
|
+
}
|
|
2632
|
+
}
|
|
2618
2633
|
function setCache(key, data, etag, ttlMs = DEFAULT_TTL_MS) {
|
|
2634
|
+
const now = Date.now();
|
|
2619
2635
|
registryCache.set(key, {
|
|
2620
2636
|
data,
|
|
2621
2637
|
etag,
|
|
2622
|
-
expiresAt:
|
|
2638
|
+
expiresAt: now + ttlMs
|
|
2623
2639
|
});
|
|
2640
|
+
trimCache(now);
|
|
2624
2641
|
}
|
|
2625
2642
|
function acquireHostSlot(host) {
|
|
2626
2643
|
let concurrency = hostConcurrency.get(host);
|
|
@@ -3338,7 +3355,15 @@ var defaultAuditCommandRunner = (command, args, cwd) => new Promise((resolve3) =
|
|
|
3338
3355
|
encoding: "utf8",
|
|
3339
3356
|
timeout: 6e4,
|
|
3340
3357
|
maxBuffer: 10 * 1024 * 1024,
|
|
3341
|
-
windowsHide: true
|
|
3358
|
+
windowsHide: true,
|
|
3359
|
+
// On Windows the audit tools are batch shims — `npm`/`composer` resolve
|
|
3360
|
+
// to npm.cmd/composer.cmd, which execFile cannot launch without a shell
|
|
3361
|
+
// (it ignores PATHEXT), so it fails ENOENT and every Windows audit
|
|
3362
|
+
// silently reports "exited with code null" with zero advisories. Route
|
|
3363
|
+
// through the shell there. Safe because every command and argument here
|
|
3364
|
+
// is a static literal (conventional filenames only) — no user input
|
|
3365
|
+
// reaches the command line; the dynamic workspace path is passed as cwd.
|
|
3366
|
+
shell: process.platform === "win32"
|
|
3342
3367
|
},
|
|
3343
3368
|
(error, stdout, stderr) => {
|
|
3344
3369
|
const exitCode = error?.code;
|
|
@@ -4266,7 +4291,11 @@ function createToolSearch(options = {}) {
|
|
|
4266
4291
|
import { createRequire } from "node:module";
|
|
4267
4292
|
import { mkdirSync, existsSync as existsSync2 } from "node:fs";
|
|
4268
4293
|
import { dirname as dirname2, join as join9 } from "node:path";
|
|
4269
|
-
import {
|
|
4294
|
+
import {
|
|
4295
|
+
SageCachePragmas,
|
|
4296
|
+
withSqliteExperimentalWarningSuppressed,
|
|
4297
|
+
wstackGlobalRoot
|
|
4298
|
+
} from "@wrongstack/core/utils";
|
|
4270
4299
|
|
|
4271
4300
|
// src/store/schema.ts
|
|
4272
4301
|
var SCHEMA_VERSION = 1;
|
|
@@ -4337,23 +4366,10 @@ function applySchema(db) {
|
|
|
4337
4366
|
|
|
4338
4367
|
// src/store/sqlite.ts
|
|
4339
4368
|
var DatabaseSyncCtor;
|
|
4340
|
-
var SQLITE_EXPERIMENTAL_WARNING = "SQLite is an experimental feature and might change at any time";
|
|
4341
4369
|
function loadDatabaseSync() {
|
|
4342
4370
|
if (DatabaseSyncCtor) return DatabaseSyncCtor;
|
|
4343
|
-
const originalEmitWarning = process.emitWarning;
|
|
4344
|
-
const forwardWarning = originalEmitWarning.bind(process);
|
|
4345
|
-
process.emitWarning = ((warning, ...rest) => {
|
|
4346
|
-
const message = typeof warning === "string" ? warning : warning instanceof Error ? warning.message : "";
|
|
4347
|
-
const typeOrOptions = rest[0];
|
|
4348
|
-
const warningType = typeof warning === "string" ? typeof typeOrOptions === "string" ? typeOrOptions : typeof typeOrOptions === "object" && typeOrOptions !== null && "type" in typeOrOptions && typeof typeOrOptions.type === "string" ? typeOrOptions.type : "" : warning instanceof Error ? warning.name : "";
|
|
4349
|
-
const warningCode = typeof warning === "string" ? typeof typeOrOptions === "object" && typeOrOptions !== null && "code" in typeOrOptions && typeof typeOrOptions.code === "string" ? typeOrOptions.code : typeof rest[1] === "string" ? rest[1] : "" : warning instanceof Error && "code" in warning && typeof warning.code === "string" ? warning.code : "";
|
|
4350
|
-
if (message === SQLITE_EXPERIMENTAL_WARNING && (warningType === "ExperimentalWarning" || warningCode === "ExperimentalWarning")) {
|
|
4351
|
-
return;
|
|
4352
|
-
}
|
|
4353
|
-
forwardWarning(warning, ...rest);
|
|
4354
|
-
});
|
|
4355
4371
|
try {
|
|
4356
|
-
|
|
4372
|
+
return withSqliteExperimentalWarningSuppressed(() => {
|
|
4357
4373
|
const require2 = createRequire(import.meta.url);
|
|
4358
4374
|
const sqliteModule = require2("node:sqlite");
|
|
4359
4375
|
if (typeof sqliteModule !== "object" || sqliteModule === null || !("DatabaseSync" in sqliteModule) || typeof sqliteModule.DatabaseSync !== "function") {
|
|
@@ -4361,15 +4377,13 @@ function loadDatabaseSync() {
|
|
|
4361
4377
|
}
|
|
4362
4378
|
DatabaseSyncCtor = sqliteModule.DatabaseSync;
|
|
4363
4379
|
return DatabaseSyncCtor;
|
|
4364
|
-
}
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
} finally {
|
|
4372
|
-
process.emitWarning = originalEmitWarning;
|
|
4380
|
+
});
|
|
4381
|
+
} catch (error) {
|
|
4382
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
4383
|
+
throw new Error(
|
|
4384
|
+
`TechStack SQLite store needs Node's built-in SQLite (node:sqlite), available since Node 22.5. This runtime doesn't provide it: ${message}`,
|
|
4385
|
+
{ cause: error }
|
|
4386
|
+
);
|
|
4373
4387
|
}
|
|
4374
4388
|
}
|
|
4375
4389
|
var TechStackStore = class {
|
|
@@ -4389,8 +4403,9 @@ var TechStackStore = class {
|
|
|
4389
4403
|
this.db.exec("PRAGMA synchronous = NORMAL;");
|
|
4390
4404
|
this.db.exec("PRAGMA busy_timeout = 10000;");
|
|
4391
4405
|
this.db.exec("PRAGMA temp_store = MEMORY;");
|
|
4392
|
-
|
|
4393
|
-
this.db.exec(
|
|
4406
|
+
const cache = SageCachePragmas();
|
|
4407
|
+
this.db.exec(`PRAGMA cache_size = -${cache.cacheSizeKiB};`);
|
|
4408
|
+
this.db.exec(`PRAGMA mmap_size = ${cache.mmapBytes};`);
|
|
4394
4409
|
this.db.exec("PRAGMA foreign_keys = ON;");
|
|
4395
4410
|
applySchema(this.db);
|
|
4396
4411
|
}
|