@vltpkg/query 0.0.0-3 → 0.0.0-31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -82
- package/dist/esm/attribute.d.ts +1 -1
- package/dist/esm/attribute.d.ts.map +1 -1
- package/dist/esm/attribute.js +8 -13
- package/dist/esm/attribute.js.map +1 -1
- package/dist/esm/combinator.d.ts.map +1 -1
- package/dist/esm/combinator.js +5 -2
- package/dist/esm/combinator.js.map +1 -1
- package/dist/esm/id.d.ts.map +1 -1
- package/dist/esm/id.js +23 -7
- package/dist/esm/id.js.map +1 -1
- package/dist/esm/index.d.ts +40 -7
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +302 -23
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parser.d.ts +15 -0
- package/dist/esm/parser.d.ts.map +1 -0
- package/dist/esm/parser.js +93 -0
- package/dist/esm/parser.js.map +1 -0
- package/dist/esm/pseudo/abandoned.d.ts +7 -0
- package/dist/esm/pseudo/abandoned.d.ts.map +1 -0
- package/dist/esm/pseudo/abandoned.js +6 -0
- package/dist/esm/pseudo/abandoned.js.map +1 -0
- package/dist/esm/pseudo/attr.d.ts +2 -1
- package/dist/esm/pseudo/attr.d.ts.map +1 -1
- package/dist/esm/pseudo/attr.js +10 -2
- package/dist/esm/pseudo/attr.js.map +1 -1
- package/dist/esm/pseudo/built.d.ts +8 -0
- package/dist/esm/pseudo/built.d.ts.map +1 -0
- package/dist/esm/pseudo/built.js +16 -0
- package/dist/esm/pseudo/built.js.map +1 -0
- package/dist/esm/pseudo/confused.d.ts +9 -0
- package/dist/esm/pseudo/confused.d.ts.map +1 -0
- package/dist/esm/pseudo/confused.js +19 -0
- package/dist/esm/pseudo/confused.js.map +1 -0
- package/dist/esm/pseudo/cve.d.ts +13 -0
- package/dist/esm/pseudo/cve.d.ts.map +1 -0
- package/dist/esm/pseudo/cve.js +44 -0
- package/dist/esm/pseudo/cve.js.map +1 -0
- package/dist/esm/pseudo/cwe.d.ts +13 -0
- package/dist/esm/pseudo/cwe.d.ts.map +1 -0
- package/dist/esm/pseudo/cwe.js +43 -0
- package/dist/esm/pseudo/cwe.js.map +1 -0
- package/dist/esm/pseudo/debug.d.ts +7 -0
- package/dist/esm/pseudo/debug.d.ts.map +1 -0
- package/dist/esm/pseudo/debug.js +6 -0
- package/dist/esm/pseudo/debug.js.map +1 -0
- package/dist/esm/pseudo/deprecated.d.ts +7 -0
- package/dist/esm/pseudo/deprecated.d.ts.map +1 -0
- package/dist/esm/pseudo/deprecated.js +6 -0
- package/dist/esm/pseudo/deprecated.js.map +1 -0
- package/dist/esm/pseudo/dev.d.ts +6 -0
- package/dist/esm/pseudo/dev.d.ts.map +1 -0
- package/dist/esm/pseudo/dev.js +15 -0
- package/dist/esm/pseudo/dev.js.map +1 -0
- package/dist/esm/pseudo/dynamic.d.ts +7 -0
- package/dist/esm/pseudo/dynamic.d.ts.map +1 -0
- package/dist/esm/pseudo/dynamic.js +6 -0
- package/dist/esm/pseudo/dynamic.js.map +1 -0
- package/dist/esm/pseudo/empty.d.ts +7 -0
- package/dist/esm/pseudo/empty.d.ts.map +1 -0
- package/dist/esm/pseudo/empty.js +14 -0
- package/dist/esm/pseudo/empty.js.map +1 -0
- package/dist/esm/pseudo/entropic.d.ts +7 -0
- package/dist/esm/pseudo/entropic.d.ts.map +1 -0
- package/dist/esm/pseudo/entropic.js +6 -0
- package/dist/esm/pseudo/entropic.js.map +1 -0
- package/dist/esm/pseudo/env.d.ts +7 -0
- package/dist/esm/pseudo/env.d.ts.map +1 -0
- package/dist/esm/pseudo/env.js +6 -0
- package/dist/esm/pseudo/env.js.map +1 -0
- package/dist/esm/pseudo/eval.d.ts +7 -0
- package/dist/esm/pseudo/eval.d.ts.map +1 -0
- package/dist/esm/pseudo/eval.js +6 -0
- package/dist/esm/pseudo/eval.js.map +1 -0
- package/dist/esm/pseudo/fs.d.ts +7 -0
- package/dist/esm/pseudo/fs.d.ts.map +1 -0
- package/dist/esm/pseudo/fs.js +6 -0
- package/dist/esm/pseudo/fs.js.map +1 -0
- package/dist/esm/pseudo/helpers.d.ts +25 -1
- package/dist/esm/pseudo/helpers.d.ts.map +1 -1
- package/dist/esm/pseudo/helpers.js +53 -0
- package/dist/esm/pseudo/helpers.js.map +1 -1
- package/dist/esm/pseudo/host.d.ts +20 -0
- package/dist/esm/pseudo/host.d.ts.map +1 -0
- package/dist/esm/pseudo/host.js +80 -0
- package/dist/esm/pseudo/host.js.map +1 -0
- package/dist/esm/pseudo/license.d.ts +13 -0
- package/dist/esm/pseudo/license.d.ts.map +1 -0
- package/dist/esm/pseudo/license.js +75 -0
- package/dist/esm/pseudo/license.js.map +1 -0
- package/dist/esm/pseudo/link.d.ts +9 -0
- package/dist/esm/pseudo/link.d.ts.map +1 -0
- package/dist/esm/pseudo/link.js +25 -0
- package/dist/esm/pseudo/link.js.map +1 -0
- package/dist/esm/pseudo/malware.d.ts +24 -0
- package/dist/esm/pseudo/malware.d.ts.map +1 -0
- package/dist/esm/pseudo/malware.js +187 -0
- package/dist/esm/pseudo/malware.js.map +1 -0
- package/dist/esm/pseudo/minified.d.ts +7 -0
- package/dist/esm/pseudo/minified.d.ts.map +1 -0
- package/dist/esm/pseudo/minified.js +6 -0
- package/dist/esm/pseudo/minified.js.map +1 -0
- package/dist/esm/pseudo/missing.d.ts +8 -0
- package/dist/esm/pseudo/missing.d.ts.map +1 -0
- package/dist/esm/pseudo/missing.js +15 -0
- package/dist/esm/pseudo/missing.js.map +1 -0
- package/dist/esm/pseudo/native.d.ts +7 -0
- package/dist/esm/pseudo/native.d.ts.map +1 -0
- package/dist/esm/pseudo/native.js +6 -0
- package/dist/esm/pseudo/native.js.map +1 -0
- package/dist/esm/pseudo/network.d.ts +7 -0
- package/dist/esm/pseudo/network.d.ts.map +1 -0
- package/dist/esm/pseudo/network.js +6 -0
- package/dist/esm/pseudo/network.js.map +1 -0
- package/dist/esm/pseudo/obfuscated.d.ts +7 -0
- package/dist/esm/pseudo/obfuscated.d.ts.map +1 -0
- package/dist/esm/pseudo/obfuscated.js +6 -0
- package/dist/esm/pseudo/obfuscated.js.map +1 -0
- package/dist/esm/pseudo/optional.d.ts +6 -0
- package/dist/esm/pseudo/optional.d.ts.map +1 -0
- package/dist/esm/pseudo/optional.js +15 -0
- package/dist/esm/pseudo/optional.js.map +1 -0
- package/dist/esm/pseudo/outdated.d.ts +4 -4
- package/dist/esm/pseudo/outdated.d.ts.map +1 -1
- package/dist/esm/pseudo/outdated.js +44 -33
- package/dist/esm/pseudo/outdated.js.map +1 -1
- package/dist/esm/pseudo/overridden.d.ts +8 -0
- package/dist/esm/pseudo/overridden.d.ts.map +1 -0
- package/dist/esm/pseudo/overridden.js +17 -0
- package/dist/esm/pseudo/overridden.js.map +1 -0
- package/dist/esm/pseudo/path.d.ts +19 -0
- package/dist/esm/pseudo/path.d.ts.map +1 -0
- package/dist/esm/pseudo/path.js +113 -0
- package/dist/esm/pseudo/path.js.map +1 -0
- package/dist/esm/pseudo/peer.d.ts +6 -0
- package/dist/esm/pseudo/peer.d.ts.map +1 -0
- package/dist/esm/pseudo/peer.js +15 -0
- package/dist/esm/pseudo/peer.js.map +1 -0
- package/dist/esm/pseudo/prerelease.d.ts +18 -0
- package/dist/esm/pseudo/prerelease.d.ts.map +1 -0
- package/dist/esm/pseudo/prerelease.js +41 -0
- package/dist/esm/pseudo/prerelease.js.map +1 -0
- package/dist/esm/pseudo/private.d.ts +7 -0
- package/dist/esm/pseudo/private.d.ts.map +1 -0
- package/dist/esm/pseudo/private.js +16 -0
- package/dist/esm/pseudo/private.js.map +1 -0
- package/dist/esm/pseudo/prod.d.ts +6 -0
- package/dist/esm/pseudo/prod.d.ts.map +1 -0
- package/dist/esm/pseudo/prod.js +15 -0
- package/dist/esm/pseudo/prod.js.map +1 -0
- package/dist/esm/pseudo/published.d.ts +40 -0
- package/dist/esm/pseudo/published.d.ts.map +1 -0
- package/dist/esm/pseudo/published.js +180 -0
- package/dist/esm/pseudo/published.js.map +1 -0
- package/dist/esm/pseudo/root.d.ts +7 -0
- package/dist/esm/pseudo/root.d.ts.map +1 -0
- package/dist/esm/pseudo/root.js +18 -0
- package/dist/esm/pseudo/root.js.map +1 -0
- package/dist/esm/pseudo/scanned.d.ts +9 -0
- package/dist/esm/pseudo/scanned.d.ts.map +1 -0
- package/dist/esm/pseudo/scanned.js +17 -0
- package/dist/esm/pseudo/scanned.js.map +1 -0
- package/dist/esm/pseudo/score.d.ts +16 -0
- package/dist/esm/pseudo/score.d.ts.map +1 -0
- package/dist/esm/pseudo/score.js +133 -0
- package/dist/esm/pseudo/score.js.map +1 -0
- package/dist/esm/pseudo/scripts.d.ts +10 -0
- package/dist/esm/pseudo/scripts.d.ts.map +1 -0
- package/dist/esm/pseudo/scripts.js +44 -0
- package/dist/esm/pseudo/scripts.js.map +1 -0
- package/dist/esm/pseudo/semver.d.ts +2 -1
- package/dist/esm/pseudo/semver.d.ts.map +1 -1
- package/dist/esm/pseudo/semver.js +11 -24
- package/dist/esm/pseudo/semver.js.map +1 -1
- package/dist/esm/pseudo/severity.d.ts +15 -0
- package/dist/esm/pseudo/severity.d.ts.map +1 -0
- package/dist/esm/pseudo/severity.js +160 -0
- package/dist/esm/pseudo/severity.js.map +1 -0
- package/dist/esm/pseudo/shell.d.ts +7 -0
- package/dist/esm/pseudo/shell.d.ts.map +1 -0
- package/dist/esm/pseudo/shell.js +6 -0
- package/dist/esm/pseudo/shell.js.map +1 -0
- package/dist/esm/pseudo/shrinkwrap.d.ts +7 -0
- package/dist/esm/pseudo/shrinkwrap.d.ts.map +1 -0
- package/dist/esm/pseudo/shrinkwrap.js +6 -0
- package/dist/esm/pseudo/shrinkwrap.js.map +1 -0
- package/dist/esm/pseudo/spec.d.ts +17 -0
- package/dist/esm/pseudo/spec.d.ts.map +1 -0
- package/dist/esm/pseudo/spec.js +102 -0
- package/dist/esm/pseudo/spec.js.map +1 -0
- package/dist/esm/pseudo/squat.d.ts +15 -0
- package/dist/esm/pseudo/squat.d.ts.map +1 -0
- package/dist/esm/pseudo/squat.js +172 -0
- package/dist/esm/pseudo/squat.js.map +1 -0
- package/dist/esm/pseudo/suspicious.d.ts +7 -0
- package/dist/esm/pseudo/suspicious.d.ts.map +1 -0
- package/dist/esm/pseudo/suspicious.js +6 -0
- package/dist/esm/pseudo/suspicious.js.map +1 -0
- package/dist/esm/pseudo/tracker.d.ts +7 -0
- package/dist/esm/pseudo/tracker.d.ts.map +1 -0
- package/dist/esm/pseudo/tracker.js +6 -0
- package/dist/esm/pseudo/tracker.js.map +1 -0
- package/dist/esm/pseudo/trivial.d.ts +7 -0
- package/dist/esm/pseudo/trivial.d.ts.map +1 -0
- package/dist/esm/pseudo/trivial.js +6 -0
- package/dist/esm/pseudo/trivial.js.map +1 -0
- package/dist/esm/pseudo/type.d.ts +8 -0
- package/dist/esm/pseudo/type.d.ts.map +1 -0
- package/dist/esm/pseudo/type.js +22 -0
- package/dist/esm/pseudo/type.js.map +1 -0
- package/dist/esm/pseudo/undesirable.d.ts +7 -0
- package/dist/esm/pseudo/undesirable.d.ts.map +1 -0
- package/dist/esm/pseudo/undesirable.js +6 -0
- package/dist/esm/pseudo/undesirable.js.map +1 -0
- package/dist/esm/pseudo/unknown.d.ts +7 -0
- package/dist/esm/pseudo/unknown.d.ts.map +1 -0
- package/dist/esm/pseudo/unknown.js +6 -0
- package/dist/esm/pseudo/unknown.js.map +1 -0
- package/dist/esm/pseudo/unmaintained.d.ts +7 -0
- package/dist/esm/pseudo/unmaintained.d.ts.map +1 -0
- package/dist/esm/pseudo/unmaintained.js +6 -0
- package/dist/esm/pseudo/unmaintained.js.map +1 -0
- package/dist/esm/pseudo/unpopular.d.ts +7 -0
- package/dist/esm/pseudo/unpopular.d.ts.map +1 -0
- package/dist/esm/pseudo/unpopular.js +6 -0
- package/dist/esm/pseudo/unpopular.js.map +1 -0
- package/dist/esm/pseudo/unstable.d.ts +7 -0
- package/dist/esm/pseudo/unstable.d.ts.map +1 -0
- package/dist/esm/pseudo/unstable.js +6 -0
- package/dist/esm/pseudo/unstable.js.map +1 -0
- package/dist/esm/pseudo/workspace.d.ts +6 -0
- package/dist/esm/pseudo/workspace.d.ts.map +1 -0
- package/dist/esm/pseudo/workspace.js +20 -0
- package/dist/esm/pseudo/workspace.js.map +1 -0
- package/dist/esm/pseudo.d.ts.map +1 -1
- package/dist/esm/pseudo.js +153 -108
- package/dist/esm/pseudo.js.map +1 -1
- package/dist/esm/types.d.ts +98 -26
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +1 -106
- package/dist/esm/types.js.map +1 -1
- package/package.json +20 -15
- package/dist/esm/class.d.ts +0 -6
- package/dist/esm/class.d.ts.map +0 -1
- package/dist/esm/class.js +0 -128
- package/dist/esm/class.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParserState } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* :missing Pseudo-Selector, matches only edges that are not linked to any node.
|
|
4
|
+
* It filters out any edges that have a 'to' property, keeping only dangling edges
|
|
5
|
+
* and clears all nodes from the result.
|
|
6
|
+
*/
|
|
7
|
+
export declare const missing: (state: ParserState) => Promise<ParserState>;
|
|
8
|
+
//# sourceMappingURL=missing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"missing.d.ts","sourceRoot":"","sources":["../../../src/pseudo/missing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,OAAO,UAAiB,WAAW,yBAQ/C,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* :missing Pseudo-Selector, matches only edges that are not linked to any node.
|
|
3
|
+
* It filters out any edges that have a 'to' property, keeping only dangling edges
|
|
4
|
+
* and clears all nodes from the result.
|
|
5
|
+
*/
|
|
6
|
+
export const missing = async (state) => {
|
|
7
|
+
for (const edge of state.partial.edges) {
|
|
8
|
+
if (edge.to) {
|
|
9
|
+
state.partial.edges.delete(edge);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
state.partial.nodes.clear();
|
|
13
|
+
return state;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=missing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"missing.js","sourceRoot":"","sources":["../../../src/pseudo/missing.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC3B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { ParserState } from '../types.ts'\n\n/**\n * :missing Pseudo-Selector, matches only edges that are not linked to any node.\n * It filters out any edges that have a 'to' property, keeping only dangling edges\n * and clears all nodes from the result.\n */\nexport const missing = async (state: ParserState) => {\n for (const edge of state.partial.edges) {\n if (edge.to) {\n state.partial.edges.delete(edge)\n }\n }\n state.partial.nodes.clear()\n return state\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filters out any node that does not have a **hasNativeCode** report alert.
|
|
3
|
+
*/
|
|
4
|
+
export declare const nativeParser: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
|
|
5
|
+
securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/pseudo/native.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,YAAY;;EAGxB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSecuritySelectorFilter } from "./helpers.js";
|
|
2
|
+
/**
|
|
3
|
+
* Filters out any node that does not have a **hasNativeCode** report alert.
|
|
4
|
+
*/
|
|
5
|
+
export const nativeParser = createSecuritySelectorFilter('native', 'hasNativeCode');
|
|
6
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../src/pseudo/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CACtD,QAAQ,EACR,eAAe,CAChB,CAAA","sourcesContent":["import { createSecuritySelectorFilter } from './helpers.ts'\n\n/**\n * Filters out any node that does not have a **hasNativeCode** report alert.\n */\nexport const nativeParser = createSecuritySelectorFilter(\n 'native',\n 'hasNativeCode',\n)\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filters out any node that does not have a **networkAccess** report alert.
|
|
3
|
+
*/
|
|
4
|
+
export declare const network: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
|
|
5
|
+
securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../src/pseudo/network.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,OAAO;;EAGnB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSecuritySelectorFilter } from "./helpers.js";
|
|
2
|
+
/**
|
|
3
|
+
* Filters out any node that does not have a **networkAccess** report alert.
|
|
4
|
+
*/
|
|
5
|
+
export const network = createSecuritySelectorFilter('network', 'networkAccess');
|
|
6
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/pseudo/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CACjD,SAAS,EACT,eAAe,CAChB,CAAA","sourcesContent":["import { createSecuritySelectorFilter } from './helpers.ts'\n\n/**\n * Filters out any node that does not have a **networkAccess** report alert.\n */\nexport const network = createSecuritySelectorFilter(\n 'network',\n 'networkAccess',\n)\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filters out any node that does not have an **obfuscatedFile** report alert.
|
|
3
|
+
*/
|
|
4
|
+
export declare const obfuscated: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
|
|
5
|
+
securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=obfuscated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obfuscated.d.ts","sourceRoot":"","sources":["../../../src/pseudo/obfuscated.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,UAAU;;EAGtB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createSecuritySelectorFilter } from "./helpers.js";
|
|
2
|
+
/**
|
|
3
|
+
* Filters out any node that does not have an **obfuscatedFile** report alert.
|
|
4
|
+
*/
|
|
5
|
+
export const obfuscated = createSecuritySelectorFilter('obfuscated', 'obfuscatedFile');
|
|
6
|
+
//# sourceMappingURL=obfuscated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obfuscated.js","sourceRoot":"","sources":["../../../src/pseudo/obfuscated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,4BAA4B,CACpD,YAAY,EACZ,gBAAgB,CACjB,CAAA","sourcesContent":["import { createSecuritySelectorFilter } from './helpers.ts'\n\n/**\n * Filters out any node that does not have an **obfuscatedFile** report alert.\n */\nexport const obfuscated = createSecuritySelectorFilter(\n 'obfuscated',\n 'obfuscatedFile',\n)\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../../src/pseudo/optional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C;;GAEG;AACH,eAAO,MAAM,QAAQ,UAAiB,WAAW,yBAWhD,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { removeEdge, removeUnlinkedNodes } from "./helpers.js";
|
|
2
|
+
/**
|
|
3
|
+
* :optional Pseudo-Selector will only match optional dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export const optional = async (state) => {
|
|
6
|
+
// filter edges that aren't marked as optional
|
|
7
|
+
for (const edge of state.partial.edges) {
|
|
8
|
+
if (!edge.optional) {
|
|
9
|
+
removeEdge(state, edge);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
removeUnlinkedNodes(state);
|
|
13
|
+
return state;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/pseudo/optional.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IACnD,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAE1B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { ParserState } from '../types.ts'\nimport { removeEdge, removeUnlinkedNodes } from './helpers.ts'\n\n/**\n * :optional Pseudo-Selector will only match optional dependencies.\n */\nexport const optional = async (state: ParserState) => {\n // filter edges that aren't marked as optional\n for (const edge of state.partial.edges) {\n if (!edge.optional) {\n removeEdge(state, edge)\n }\n }\n\n removeUnlinkedNodes(state)\n\n return state\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { NodeLike } from '@vltpkg/
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
1
|
+
import type { NodeLike } from '@vltpkg/types';
|
|
2
|
+
import type { ParserState } from '../types.ts';
|
|
3
|
+
import type { PostcssNode } from '@vltpkg/dss-parser';
|
|
4
4
|
/**
|
|
5
5
|
* The possible values accepted by the :outdated() pseudo selector.
|
|
6
6
|
*/
|
|
@@ -26,7 +26,7 @@ export declare const asOutdatedKind: (value: string) => OutdatedKinds;
|
|
|
26
26
|
/**
|
|
27
27
|
* Fetches the available versions of a package from the npm registry.
|
|
28
28
|
*/
|
|
29
|
-
export declare const retrieveRemoteVersions: (node: NodeLike,
|
|
29
|
+
export declare const retrieveRemoteVersions: (node: NodeLike, signal?: AbortSignal) => Promise<string[]>;
|
|
30
30
|
/**
|
|
31
31
|
* Retrieves what kind of check the :outdated selector should perform.
|
|
32
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdated.d.ts","sourceRoot":"","sources":["../../../src/pseudo/outdated.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"outdated.d.ts","sourceRoot":"","sources":["../../../src/pseudo/outdated.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,GACV,cAAc,CAAA;AAElB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,MAAM,KACZ,MAAM,GAAG,SAAS,CAAA;AAWvB;;GAEG;AACH,eAAO,MAAM,cAAc,UAClB,MAAM,KACZ,KAAK,IAAI,aAAkD,CAAA;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,UAAW,MAAM,KAAG,aAQ9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,SAC3B,QAAQ,WACL,WAAW,KACnB,OAAO,CAAC,MAAM,EAAE,CA4BlB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAClB,WAAW,EAAE,KACnB,iBAmBF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,UACb,WAAW,QACZ,QAAQ,QACR,aAAa,KAClB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAqG9B,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,UAAiB,WAAW,yBA4ChD,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import pRetry, { AbortError } from 'p-retry';
|
|
1
2
|
import { hydrate, splitDepID } from '@vltpkg/dep-id/browser';
|
|
2
3
|
import { error } from '@vltpkg/error-cause';
|
|
4
|
+
import { asError } from '@vltpkg/types';
|
|
3
5
|
import { compare, gt, major, minor, patch, satisfies, } from '@vltpkg/semver';
|
|
4
|
-
import { asPostcssNodeWithChildren, asStringNode, asTagNode, isStringNode, isTagNode, } from
|
|
6
|
+
import { asPostcssNodeWithChildren, asStringNode, asTagNode, isStringNode, isTagNode, } from '@vltpkg/dss-parser';
|
|
5
7
|
import { removeNode, removeQuotes } from "./helpers.js";
|
|
6
8
|
const kinds = new Set([
|
|
7
9
|
'any',
|
|
@@ -30,42 +32,32 @@ export const asOutdatedKind = (value) => {
|
|
|
30
32
|
/**
|
|
31
33
|
* Fetches the available versions of a package from the npm registry.
|
|
32
34
|
*/
|
|
33
|
-
export const retrieveRemoteVersions = async (node,
|
|
34
|
-
const spec = hydrate(node.id, String(node.name),
|
|
35
|
+
export const retrieveRemoteVersions = async (node, signal) => {
|
|
36
|
+
const spec = hydrate(node.id, String(node.name), node.options);
|
|
35
37
|
if (!spec.registry || !node.name) {
|
|
36
38
|
return [];
|
|
37
39
|
}
|
|
38
40
|
const url = new URL(spec.registry);
|
|
39
41
|
url.pathname = `/${node.name}`;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
name: String(node.name),
|
|
50
|
-
spec,
|
|
51
|
-
response,
|
|
52
|
-
}));
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
56
|
-
const packument = await response.json();
|
|
57
|
-
return Object.keys(packument.versions).sort(compare);
|
|
42
|
+
const response = await fetch(String(url), {
|
|
43
|
+
headers: {
|
|
44
|
+
Accept: 'application/vnd.npm.install-v1+json',
|
|
45
|
+
},
|
|
46
|
+
signal,
|
|
47
|
+
});
|
|
48
|
+
// on missing valid auth or API, it should abort the retry logic
|
|
49
|
+
if (response.status === 404) {
|
|
50
|
+
throw new AbortError('Missing API');
|
|
58
51
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
console.warn(error('Could not retrieve registry versions', {
|
|
63
|
-
name: String(node.name),
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw error('Failed to fetch packument', {
|
|
54
|
+
name: node.name,
|
|
64
55
|
spec,
|
|
65
|
-
|
|
66
|
-
})
|
|
67
|
-
return [];
|
|
56
|
+
response,
|
|
57
|
+
});
|
|
68
58
|
}
|
|
59
|
+
const packument = (await response.json());
|
|
60
|
+
return Object.keys(packument.versions).sort(compare);
|
|
69
61
|
};
|
|
70
62
|
/**
|
|
71
63
|
* Retrieves what kind of check the :outdated selector should perform.
|
|
@@ -89,7 +81,21 @@ export const queueNode = async (state, node, kind) => {
|
|
|
89
81
|
return node;
|
|
90
82
|
}
|
|
91
83
|
const nodeVersion = node.version;
|
|
92
|
-
|
|
84
|
+
let versions;
|
|
85
|
+
try {
|
|
86
|
+
versions = await pRetry(() => retrieveRemoteVersions(node, state.signal), {
|
|
87
|
+
retries: state.retries,
|
|
88
|
+
signal: state.signal,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.warn(error('Could not retrieve registry versions', {
|
|
94
|
+
name: node.name,
|
|
95
|
+
cause: err,
|
|
96
|
+
}));
|
|
97
|
+
versions = [];
|
|
98
|
+
}
|
|
93
99
|
const greaterVersions = versions.filter((version) => gt(version, nodeVersion));
|
|
94
100
|
// if there are no greater versions, then the node is not outdated
|
|
95
101
|
if (!greaterVersions.length) {
|
|
@@ -171,9 +177,14 @@ export const outdated = async (state) => {
|
|
|
171
177
|
internals = parseInternals(asPostcssNodeWithChildren(state.current).nodes);
|
|
172
178
|
}
|
|
173
179
|
catch (err) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
180
|
+
if (asError(err).message === 'Expected a query node') {
|
|
181
|
+
internals = { kind: 'any' };
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
throw error('Failed to parse :outdated selector', {
|
|
185
|
+
cause: err,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
177
188
|
}
|
|
178
189
|
const { kind } = internals;
|
|
179
190
|
const queue = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdated.js","sourceRoot":"","sources":["../../../src/pseudo/outdated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAG3C,OAAO,EACL,OAAO,EACP,EAAE,EACF,KAAK,EACL,KAAK,EACL,KAAK,EACL,SAAS,GACV,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AA2BvD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAgB;IACnC,KAAK;IACL,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,cAAc;CACf,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAa,EACW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAsB,CAAC,CAAA;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAiB,EAAE;IAC7D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,gCAAgC,EAAE;YAC5C,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SAChC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,IAAc,EACd,WAAwB,EACL,EAAE;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClC,GAAG,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;IAE9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACxC,OAAO,EAAE;gBACP,MAAM,EAAE,qCAAqC;aAC9C;SACF,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,2BAA2B,EAAE;gBACjC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvB,IAAI;gBACJ,QAAQ;aACT,CAAC,CACH,CAAA;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QACD,mEAAmE;QACnE,MAAM,SAAS,GAAc,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClD,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAU,CAAA;QACtB,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,sCAAsC,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI;YACJ,KAAK,EAAE,GAAG;SACX,CAAC,CACH,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAoB,EACD,EAAE;IACrB,IAAI,IAAI,GAAkB,KAAK,CAAA;IAE/B,IAAI,YAAY,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,GAAG,cAAc,CACnB,YAAY,CACV,YAAY,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACvD,KAAK,CACT,CACF,CAAA;IACH,CAAC;SAAM,IACL,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACvD,CAAC;QACD,IAAI,GAAG,cAAc,CACnB,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAC9D,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAA;AACjB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,KAAkB,EAClB,IAAc,EACd,IAAmB,EACY,EAAE;IACjC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,IAAI,EACJ,KAAK,CAAC,WAAW,CAClB,CAAA;IAED,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAe,EAAE,EAAE,CAC1D,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CACzB,CAAA;IAED,kEAAkE;IAClE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAsC;QAC7D,CAAC,OAAO,EAAE,KAAK,CAAC;QAChB,CAAC,OAAO,EAAE,KAAK,CAAC;QAChB,CAAC,OAAO,EAAE,KAAK,CAAC;KACjB,CAAC,CAAA;IAEF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAM;QACR,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,CACH,eAAe,CAAC,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE;gBACvC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;gBACzC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;gBAC7C,6DAA6D;gBAC7D,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAA;gBACtD,OAAO,EAAE,GAAG,EAAE,CAAA;YAChB,CAAC,CAAC,CACH,CAAC,CAAC;gBACD,SAAS;gBACX,CAAC,CAAC,IAAI,CAAA;QACV,CAAC;QACD,mEAAmE;QACnE,gEAAgE;QAChE,mCAAmC;QACnC,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChC,0DAA0D;gBAC1D,oBAAoB;gBACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAE5C,IACE,eAAe,CAAC,IAAI,CAClB,OAAO,CAAC,EAAE,CACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;oBACrB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAC5C,EACD,CAAC;oBACD,OAAM;gBACR,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,oEAAoE;QACpE,wEAAwE;QACxE,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChC,0DAA0D;gBAC1D,oBAAoB;gBACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAE5C,IACE,eAAe,CAAC,IAAI,CAClB,OAAO,CAAC,EAAE,CACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;oBACrB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAC5C,EACD,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;YACD,OAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IACnD,IAAI,SAAS,CAAA;IACb,IAAI,CAAC;QACH,SAAS,GAAG,cAAc,CACxB,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAC/C,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,CAAC,oCAAoC,EAAE;YAChD,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAA;IAC1B,MAAM,KAAK,GAAG,EAAE,CAAA;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,oEAAoE;QACpE,IACE,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,QAAQ,EAAE,OAAO;YACtB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EACrC,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACvB,SAAQ;QACV,CAAC;QAED,qDAAqD;QACrD,+CAA+C;QAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,oDAAoD;IACpD,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAChD,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import { hydrate, splitDepID } from '@vltpkg/dep-id/browser'\nimport { error } from '@vltpkg/error-cause'\nimport type { NodeLike } from '@vltpkg/graph'\nimport type { SpecOptions } from '@vltpkg/spec/browser'\nimport {\n compare,\n gt,\n major,\n minor,\n patch,\n satisfies,\n} from '@vltpkg/semver'\nimport type { Packument } from '@vltpkg/types'\nimport {\n asPostcssNodeWithChildren,\n asStringNode,\n asTagNode,\n isStringNode,\n isTagNode,\n} from '../types.ts'\nimport type { ParserState, PostcssNode } from '../types.ts'\nimport { removeNode, removeQuotes } from './helpers.ts'\n\n/**\n * The possible values accepted by the :outdated() pseudo selector.\n */\nexport type OutdatedKinds =\n | 'any'\n | 'major'\n | 'minor'\n | 'patch'\n | 'in-range'\n | 'out-of-range'\n\n/**\n * Result of the internal parsing of the :outdated() pseudo selector.\n */\nexport type OutdatedInternals = {\n kind: OutdatedKinds\n}\n\n/**\n * Extracts a semver type from a version string.\n */\nexport type SemverTypeExtraction = (\n version: string,\n) => number | undefined\n\nconst kinds = new Set<OutdatedKinds>([\n 'any',\n 'major',\n 'minor',\n 'patch',\n 'in-range',\n 'out-of-range',\n])\n\n/**\n * Checks if a string is a valid {@link OutdatedKinds}.\n */\nexport const isOutdatedKind = (\n value: string,\n): value is OutdatedKinds => kinds.has(value as OutdatedKinds)\n\n/**\n * Asserts that a string is a valid {@link OutdatedKinds}.\n */\nexport const asOutdatedKind = (value: string): OutdatedKinds => {\n if (!isOutdatedKind(value)) {\n throw error('Expected a valid outdated kind', {\n found: value,\n validOptions: Array.from(kinds),\n })\n }\n return value\n}\n\n/**\n * Fetches the available versions of a package from the npm registry.\n */\nexport const retrieveRemoteVersions = async (\n node: NodeLike,\n specOptions: SpecOptions,\n): Promise<string[]> => {\n const spec = hydrate(node.id, String(node.name), specOptions)\n if (!spec.registry || !node.name) {\n return []\n }\n\n const url = new URL(spec.registry)\n url.pathname = `/${node.name}`\n\n try {\n const response = await fetch(String(url), {\n headers: {\n Accept: 'application/vnd.npm.install-v1+json',\n },\n })\n if (!response.ok) {\n // eslint-disable-next-line no-console\n console.warn(\n error('Failed to fetch packument', {\n name: String(node.name),\n spec,\n response,\n }),\n )\n return []\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const packument: Packument = await response.json()\n return Object.keys(packument.versions).sort(compare)\n } catch (e) {\n const err = e as Error\n // eslint-disable-next-line no-console\n console.warn(\n error('Could not retrieve registry versions', {\n name: String(node.name),\n spec,\n cause: err,\n }),\n )\n return []\n }\n}\n\n/**\n * Retrieves what kind of check the :outdated selector should perform.\n */\nexport const parseInternals = (\n nodes: PostcssNode[],\n): OutdatedInternals => {\n let kind: OutdatedKinds = 'any'\n\n if (isStringNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])) {\n kind = asOutdatedKind(\n removeQuotes(\n asStringNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])\n .value,\n ),\n )\n } else if (\n isTagNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])\n ) {\n kind = asOutdatedKind(\n asTagNode(asPostcssNodeWithChildren(nodes[0]).nodes[0]).value,\n )\n }\n\n return { kind }\n}\n\n/**\n * Filter nodes by queueing up for removal those that are not outdated.\n */\nexport const queueNode = async (\n state: ParserState,\n node: NodeLike,\n kind: OutdatedKinds,\n): Promise<NodeLike | undefined> => {\n if (!node.name || !node.version) {\n return node\n }\n\n const nodeVersion: string = node.version\n const versions = await retrieveRemoteVersions(\n node,\n state.specOptions,\n )\n\n const greaterVersions = versions.filter((version: string) =>\n gt(version, nodeVersion),\n )\n\n // if there are no greater versions, then the node is not outdated\n if (!greaterVersions.length) {\n return node\n }\n\n const checkKind = new Map<OutdatedKinds, SemverTypeExtraction>([\n ['major', major],\n ['minor', minor],\n ['patch', patch],\n ])\n\n switch (kind) {\n case 'any':\n return\n case 'major':\n case 'minor':\n case 'patch': {\n return (\n greaterVersions.some((version: string) => {\n const va = checkKind.get(kind)?.(version)\n const vb = checkKind.get(kind)?.(nodeVersion)\n /* c8 ignore next - impossible but typescript doesn't know */\n if (va === undefined || vb === undefined) return false\n return va > vb\n })\n ) ?\n undefined\n : node\n }\n // the node should be part of the result as long as it has at least\n // one parent node that has a spec definition that satisfies one\n // of the available remove versions\n case 'in-range': {\n for (const edge of node.edgesIn) {\n // if the edge is not part of the partial results, skip it\n /* c8 ignore next */\n if (!state.partial.edges.has(edge)) continue\n\n if (\n greaterVersions.some(\n version =>\n edge.spec.final.range &&\n satisfies(version, edge.spec.final.range),\n )\n ) {\n return\n }\n }\n return node\n }\n // the node is part of the result as long as none of its parents has\n // a spec definition that satisfies one of the available remote versions\n case 'out-of-range': {\n for (const edge of node.edgesIn) {\n // if the edge is not part of the partial results, skip it\n /* c8 ignore next */\n if (!state.partial.edges.has(edge)) continue\n\n if (\n greaterVersions.some(\n version =>\n edge.spec.final.range &&\n satisfies(version, edge.spec.final.range),\n )\n ) {\n return node\n }\n }\n return\n }\n }\n}\n\n/**\n * Filters out nodes that are not outdated.\n *\n * The :outdated() pseudo selector supports one `type` argument,\n * possible values are the following:\n *\n * - `any`: Selects all nodes that have a greater version available.\n * - `major`: Selects all nodes that have a greater major version available.\n * - `minor`: Selects all nodes that have a greater minor version available.\n * - `patch`: Selects all nodes that have a greater patch version available.\n * - `in-range`: Selects all nodes that have a parent node with a spec definition\n * that satisfies one of the available remote versions.\n * - `out-of-range`: Selects all nodes that have a parent node with a spec definition\n * that does not satisfy any of the available remote versions.\n */\nexport const outdated = async (state: ParserState) => {\n let internals\n try {\n internals = parseInternals(\n asPostcssNodeWithChildren(state.current).nodes,\n )\n } catch (err) {\n throw error('Failed to parse :outdated selector', {\n cause: err,\n })\n }\n\n const { kind } = internals\n const queue = []\n\n for (const node of state.partial.nodes) {\n // filter out nodes that are always ignored by the outdated selector\n if (\n node.mainImporter ||\n node.manifest?.private ||\n splitDepID(node.id)[0] !== 'registry'\n ) {\n removeNode(state, node)\n continue\n }\n\n // fetchs outdated info and performs checks to define\n // whether or not a node should be filtered out\n queue.push(queueNode(state, node, kind))\n }\n\n // nodes queued for removal are then finally removed\n const removeNodeQueue = await Promise.all(queue)\n for (const node of removeNodeQueue) {\n if (node) {\n removeNode(state, node)\n }\n }\n\n return state\n}\n"]}
|
|
1
|
+
{"version":3,"file":"outdated.js","sourceRoot":"","sources":["../../../src/pseudo/outdated.ts"],"names":[],"mappings":"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","sourcesContent":["import pRetry, { AbortError } from 'p-retry'\nimport { hydrate, splitDepID } from '@vltpkg/dep-id/browser'\nimport { error } from '@vltpkg/error-cause'\nimport { asError } from '@vltpkg/types'\nimport {\n compare,\n gt,\n major,\n minor,\n patch,\n satisfies,\n} from '@vltpkg/semver'\nimport {\n asPostcssNodeWithChildren,\n asStringNode,\n asTagNode,\n isStringNode,\n isTagNode,\n} from '@vltpkg/dss-parser'\nimport { removeNode, removeQuotes } from './helpers.ts'\nimport type { NodeLike, Packument } from '@vltpkg/types'\nimport type { ParserState } from '../types.ts'\nimport type { PostcssNode } from '@vltpkg/dss-parser'\n\n/**\n * The possible values accepted by the :outdated() pseudo selector.\n */\nexport type OutdatedKinds =\n | 'any'\n | 'major'\n | 'minor'\n | 'patch'\n | 'in-range'\n | 'out-of-range'\n\n/**\n * Result of the internal parsing of the :outdated() pseudo selector.\n */\nexport type OutdatedInternals = {\n kind: OutdatedKinds\n}\n\n/**\n * Extracts a semver type from a version string.\n */\nexport type SemverTypeExtraction = (\n version: string,\n) => number | undefined\n\nconst kinds = new Set<OutdatedKinds>([\n 'any',\n 'major',\n 'minor',\n 'patch',\n 'in-range',\n 'out-of-range',\n])\n\n/**\n * Checks if a string is a valid {@link OutdatedKinds}.\n */\nexport const isOutdatedKind = (\n value: string,\n): value is OutdatedKinds => kinds.has(value as OutdatedKinds)\n\n/**\n * Asserts that a string is a valid {@link OutdatedKinds}.\n */\nexport const asOutdatedKind = (value: string): OutdatedKinds => {\n if (!isOutdatedKind(value)) {\n throw error('Expected a valid outdated kind', {\n found: value,\n validOptions: Array.from(kinds),\n })\n }\n return value\n}\n\n/**\n * Fetches the available versions of a package from the npm registry.\n */\nexport const retrieveRemoteVersions = async (\n node: NodeLike,\n signal?: AbortSignal,\n): Promise<string[]> => {\n const spec = hydrate(node.id, String(node.name), node.options)\n if (!spec.registry || !node.name) {\n return []\n }\n\n const url = new URL(spec.registry)\n url.pathname = `/${node.name}`\n\n const response = await fetch(String(url), {\n headers: {\n Accept: 'application/vnd.npm.install-v1+json',\n },\n signal,\n })\n // on missing valid auth or API, it should abort the retry logic\n if (response.status === 404) {\n throw new AbortError('Missing API')\n }\n if (!response.ok) {\n throw error('Failed to fetch packument', {\n name: node.name,\n spec,\n response,\n })\n }\n const packument = (await response.json()) as Packument\n return Object.keys(packument.versions).sort(compare)\n}\n\n/**\n * Retrieves what kind of check the :outdated selector should perform.\n */\nexport const parseInternals = (\n nodes: PostcssNode[],\n): OutdatedInternals => {\n let kind: OutdatedKinds = 'any'\n\n if (isStringNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])) {\n kind = asOutdatedKind(\n removeQuotes(\n asStringNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])\n .value,\n ),\n )\n } else if (\n isTagNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])\n ) {\n kind = asOutdatedKind(\n asTagNode(asPostcssNodeWithChildren(nodes[0]).nodes[0]).value,\n )\n }\n\n return { kind }\n}\n\n/**\n * Filter nodes by queueing up for removal those that are not outdated.\n */\nexport const queueNode = async (\n state: ParserState,\n node: NodeLike,\n kind: OutdatedKinds,\n): Promise<NodeLike | undefined> => {\n if (!node.name || !node.version) {\n return node\n }\n\n const nodeVersion: string = node.version\n let versions: string[]\n try {\n versions = await pRetry(\n () => retrieveRemoteVersions(node, state.signal),\n {\n retries: state.retries,\n signal: state.signal,\n },\n )\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n error('Could not retrieve registry versions', {\n name: node.name,\n cause: err,\n }),\n )\n versions = []\n }\n\n const greaterVersions = versions.filter((version: string) =>\n gt(version, nodeVersion),\n )\n\n // if there are no greater versions, then the node is not outdated\n if (!greaterVersions.length) {\n return node\n }\n\n const checkKind = new Map<OutdatedKinds, SemverTypeExtraction>([\n ['major', major],\n ['minor', minor],\n ['patch', patch],\n ])\n\n switch (kind) {\n case 'any':\n return\n case 'major':\n case 'minor':\n case 'patch': {\n return (\n greaterVersions.some((version: string) => {\n const va = checkKind.get(kind)?.(version)\n const vb = checkKind.get(kind)?.(nodeVersion)\n /* c8 ignore next - impossible but typescript doesn't know */\n if (va === undefined || vb === undefined) return false\n return va > vb\n })\n ) ?\n undefined\n : node\n }\n // the node should be part of the result as long as it has at least\n // one parent node that has a spec definition that satisfies one\n // of the available remove versions\n case 'in-range': {\n for (const edge of node.edgesIn) {\n // if the edge is not part of the partial results, skip it\n /* c8 ignore next */\n if (!state.partial.edges.has(edge)) continue\n\n if (\n greaterVersions.some(\n version =>\n edge.spec.final.range &&\n satisfies(version, edge.spec.final.range),\n )\n ) {\n return\n }\n }\n return node\n }\n // the node is part of the result as long as none of its parents has\n // a spec definition that satisfies one of the available remote versions\n case 'out-of-range': {\n for (const edge of node.edgesIn) {\n // if the edge is not part of the partial results, skip it\n /* c8 ignore next */\n if (!state.partial.edges.has(edge)) continue\n\n if (\n greaterVersions.some(\n version =>\n edge.spec.final.range &&\n satisfies(version, edge.spec.final.range),\n )\n ) {\n return node\n }\n }\n return\n }\n }\n}\n\n/**\n * Filters out nodes that are not outdated.\n *\n * The :outdated() pseudo selector supports one `type` argument,\n * possible values are the following:\n *\n * - `any`: Selects all nodes that have a greater version available.\n * - `major`: Selects all nodes that have a greater major version available.\n * - `minor`: Selects all nodes that have a greater minor version available.\n * - `patch`: Selects all nodes that have a greater patch version available.\n * - `in-range`: Selects all nodes that have a parent node with a spec definition\n * that satisfies one of the available remote versions.\n * - `out-of-range`: Selects all nodes that have a parent node with a spec definition\n * that does not satisfy any of the available remote versions.\n */\nexport const outdated = async (state: ParserState) => {\n let internals\n try {\n internals = parseInternals(\n asPostcssNodeWithChildren(state.current).nodes,\n )\n } catch (err) {\n if (asError(err).message === 'Expected a query node') {\n internals = { kind: 'any' } satisfies OutdatedInternals\n } else {\n throw error('Failed to parse :outdated selector', {\n cause: err,\n })\n }\n }\n\n const { kind } = internals\n const queue = []\n\n for (const node of state.partial.nodes) {\n // filter out nodes that are always ignored by the outdated selector\n if (\n node.mainImporter ||\n node.manifest?.private ||\n splitDepID(node.id)[0] !== 'registry'\n ) {\n removeNode(state, node)\n continue\n }\n\n // fetchs outdated info and performs checks to define\n // whether or not a node should be filtered out\n queue.push(queueNode(state, node, kind))\n }\n\n // nodes queued for removal are then finally removed\n const removeNodeQueue = await Promise.all(queue)\n for (const node of removeNodeQueue) {\n if (node) {\n removeNode(state, node)\n }\n }\n\n return state\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParserState } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* :overridden Pseudo-Selector, matches only edges that have a truthy overridden property in their spec.
|
|
4
|
+
* It filters out any edges that don't have edge.spec.overridden set to a truthy value
|
|
5
|
+
* and removes any unlinked nodes from the result.
|
|
6
|
+
*/
|
|
7
|
+
export declare const overridden: (state: ParserState) => Promise<ParserState>;
|
|
8
|
+
//# sourceMappingURL=overridden.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overridden.d.ts","sourceRoot":"","sources":["../../../src/pseudo/overridden.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C;;;;GAIG;AACH,eAAO,MAAM,UAAU,UAAiB,WAAW,yBAWlD,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { removeEdge, removeUnlinkedNodes } from "./helpers.js";
|
|
2
|
+
/**
|
|
3
|
+
* :overridden Pseudo-Selector, matches only edges that have a truthy overridden property in their spec.
|
|
4
|
+
* It filters out any edges that don't have edge.spec.overridden set to a truthy value
|
|
5
|
+
* and removes any unlinked nodes from the result.
|
|
6
|
+
*/
|
|
7
|
+
export const overridden = async (state) => {
|
|
8
|
+
// filter edges that don't have a truthy overridden property
|
|
9
|
+
for (const edge of state.partial.edges) {
|
|
10
|
+
if (!edge.spec.overridden) {
|
|
11
|
+
removeEdge(state, edge);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
removeUnlinkedNodes(state);
|
|
15
|
+
return state;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=overridden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overridden.js","sourceRoot":"","sources":["../../../src/pseudo/overridden.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IACrD,4DAA4D;IAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1B,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAE1B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { ParserState } from '../types.ts'\nimport { removeEdge, removeUnlinkedNodes } from './helpers.ts'\n\n/**\n * :overridden Pseudo-Selector, matches only edges that have a truthy overridden property in their spec.\n * It filters out any edges that don't have edge.spec.overridden set to a truthy value\n * and removes any unlinked nodes from the result.\n */\nexport const overridden = async (state: ParserState) => {\n // filter edges that don't have a truthy overridden property\n for (const edge of state.partial.edges) {\n if (!edge.spec.overridden) {\n removeEdge(state, edge)\n }\n }\n\n removeUnlinkedNodes(state)\n\n return state\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ParserState } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Normalizes a path by trimming whitespace and removing leading './' or '.' prefix.
|
|
4
|
+
* This ensures consistent path comparison regardless of how paths are specified.
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizePath(path: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a path matcher function that tests if
|
|
9
|
+
* a given path matches a glob pattern.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createPathMatcher(pattern: string, loose?: boolean): (path: string) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* :path("glob") Pseudo-Selector will match only workspace & file
|
|
14
|
+
* nodes whose file path matches the provided glob pattern relative
|
|
15
|
+
* to the project root. Path patterns must be quoted strings to avoid
|
|
16
|
+
* parser conflicts with special characters.
|
|
17
|
+
*/
|
|
18
|
+
export declare const path: (state: ParserState) => Promise<ParserState>;
|
|
19
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/pseudo/path.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAclD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,UAIhD,MAAM,aAwBrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,UAAiB,WAAW,yBAsE5C,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { minimatch } from 'minimatch';
|
|
2
|
+
import { error } from '@vltpkg/error-cause';
|
|
3
|
+
import { splitDepID } from '@vltpkg/dep-id/browser';
|
|
4
|
+
import { asError } from '@vltpkg/types';
|
|
5
|
+
import { asPostcssNodeWithChildren, asStringNode, isStringNode, } from '@vltpkg/dss-parser';
|
|
6
|
+
import { removeNode, removeDanglingEdges, removeQuotes, clear, } from "./helpers.js";
|
|
7
|
+
/**
|
|
8
|
+
* Normalizes a path by trimming whitespace and removing leading './' or '.' prefix.
|
|
9
|
+
* This ensures consistent path comparison regardless of how paths are specified.
|
|
10
|
+
*/
|
|
11
|
+
export function normalizePath(path) {
|
|
12
|
+
const trimmed = path.trim();
|
|
13
|
+
// Handle root path case - normalize '.' to empty string for consistency
|
|
14
|
+
if (trimmed === '.') {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
// Remove leading './' prefix
|
|
18
|
+
if (trimmed.startsWith('./')) {
|
|
19
|
+
return trimmed.slice(2);
|
|
20
|
+
}
|
|
21
|
+
return trimmed;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates a path matcher function that tests if
|
|
25
|
+
* a given path matches a glob pattern.
|
|
26
|
+
*/
|
|
27
|
+
export function createPathMatcher(pattern, loose = false) {
|
|
28
|
+
const normalizedPattern = normalizePath(pattern);
|
|
29
|
+
const isRoot = normalizedPattern === '' || pattern.trim() === '.';
|
|
30
|
+
return (path) => {
|
|
31
|
+
const normalizedPath = normalizePath(path);
|
|
32
|
+
if (isRoot) {
|
|
33
|
+
return normalizedPath === '' || normalizedPath === '.';
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
return minimatch(normalizedPath, normalizedPattern, {
|
|
37
|
+
dot: true,
|
|
38
|
+
nocase: false,
|
|
39
|
+
matchBase: normalizedPattern === '*',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
// In loose mode, return false for invalid patterns
|
|
44
|
+
if (loose) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
// In strict mode, throw an error
|
|
48
|
+
throw error('Invalid glob pattern in :path selector', asError(err));
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* :path("glob") Pseudo-Selector will match only workspace & file
|
|
54
|
+
* nodes whose file path matches the provided glob pattern relative
|
|
55
|
+
* to the project root. Path patterns must be quoted strings to avoid
|
|
56
|
+
* parser conflicts with special characters.
|
|
57
|
+
*/
|
|
58
|
+
export const path = async (state) => {
|
|
59
|
+
// Extract path container and handle empty parameters
|
|
60
|
+
const pathContainer = asPostcssNodeWithChildren(state.current);
|
|
61
|
+
if (!pathContainer.nodes[0]) {
|
|
62
|
+
return clear(state);
|
|
63
|
+
}
|
|
64
|
+
// Extract the selector node and handle empty selectors
|
|
65
|
+
const selector = asPostcssNodeWithChildren(pathContainer.nodes[0]);
|
|
66
|
+
if (!selector.nodes[0]) {
|
|
67
|
+
return clear(state);
|
|
68
|
+
}
|
|
69
|
+
// Extract and validate the path pattern
|
|
70
|
+
let pathPattern = '';
|
|
71
|
+
if (isStringNode(selector.nodes[0])) {
|
|
72
|
+
pathPattern = removeQuotes(asStringNode(selector.nodes[0]).value);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (state.loose) {
|
|
76
|
+
return clear(state);
|
|
77
|
+
}
|
|
78
|
+
throw error('Failed to parse path pattern in :path selector', new Error('Path pattern must be a quoted string'));
|
|
79
|
+
}
|
|
80
|
+
// If no pattern provided, match nothing
|
|
81
|
+
if (!pathPattern) {
|
|
82
|
+
return clear(state);
|
|
83
|
+
}
|
|
84
|
+
// Check for unmatched brackets
|
|
85
|
+
if (pathPattern === '[' ||
|
|
86
|
+
(pathPattern.includes('[') && !pathPattern.includes(']'))) {
|
|
87
|
+
if (state.loose) {
|
|
88
|
+
return clear(state);
|
|
89
|
+
}
|
|
90
|
+
throw error('Invalid glob pattern in :path selector', new Error(`Unmatched bracket in pattern: ${pathPattern}`));
|
|
91
|
+
}
|
|
92
|
+
// Create path matcher function
|
|
93
|
+
const matchPath = createPathMatcher(pathPattern, state.loose);
|
|
94
|
+
// Filter nodes by path
|
|
95
|
+
for (const node of state.partial.nodes) {
|
|
96
|
+
/* c8 ignore next */
|
|
97
|
+
const nodePath = node.location || '';
|
|
98
|
+
const [type] = splitDepID(node.id);
|
|
99
|
+
// Special case for main importer with root path pattern
|
|
100
|
+
if (pathPattern === '.' && node.mainImporter) {
|
|
101
|
+
continue; // Keep main importer node for root path pattern
|
|
102
|
+
}
|
|
103
|
+
// Only match workspace or file nodes with matching paths
|
|
104
|
+
const pathBased = type === 'workspace' || type === 'file';
|
|
105
|
+
if (!pathBased || !matchPath(nodePath)) {
|
|
106
|
+
removeNode(state, node);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Clean up any dangling edges
|
|
110
|
+
removeDanglingEdges(state);
|
|
111
|
+
return state;
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/pseudo/path.ts"],"names":[],"mappings":"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","sourcesContent":["import { minimatch } from 'minimatch'\nimport { error } from '@vltpkg/error-cause'\nimport { splitDepID } from '@vltpkg/dep-id/browser'\nimport { asError } from '@vltpkg/types'\nimport {\n asPostcssNodeWithChildren,\n asStringNode,\n isStringNode,\n} from '@vltpkg/dss-parser'\nimport {\n removeNode,\n removeDanglingEdges,\n removeQuotes,\n clear,\n} from './helpers.ts'\nimport type { ParserState } from '../types.ts'\n\n/**\n * Normalizes a path by trimming whitespace and removing leading './' or '.' prefix.\n * This ensures consistent path comparison regardless of how paths are specified.\n */\nexport function normalizePath(path: string): string {\n const trimmed = path.trim()\n\n // Handle root path case - normalize '.' to empty string for consistency\n if (trimmed === '.') {\n return ''\n }\n\n // Remove leading './' prefix\n if (trimmed.startsWith('./')) {\n return trimmed.slice(2)\n }\n\n return trimmed\n}\n\n/**\n * Creates a path matcher function that tests if\n * a given path matches a glob pattern.\n */\nexport function createPathMatcher(pattern: string, loose = false) {\n const normalizedPattern = normalizePath(pattern)\n const isRoot = normalizedPattern === '' || pattern.trim() === '.'\n\n return (path: string) => {\n const normalizedPath = normalizePath(path)\n\n if (isRoot) {\n return normalizedPath === '' || normalizedPath === '.'\n }\n try {\n return minimatch(normalizedPath, normalizedPattern, {\n dot: true,\n nocase: false,\n matchBase: normalizedPattern === '*',\n })\n } catch (err) {\n // In loose mode, return false for invalid patterns\n if (loose) {\n return false\n }\n // In strict mode, throw an error\n throw error(\n 'Invalid glob pattern in :path selector',\n asError(err),\n )\n }\n }\n}\n\n/**\n * :path(\"glob\") Pseudo-Selector will match only workspace & file\n * nodes whose file path matches the provided glob pattern relative\n * to the project root. Path patterns must be quoted strings to avoid\n * parser conflicts with special characters.\n */\nexport const path = async (state: ParserState) => {\n // Extract path container and handle empty parameters\n const pathContainer = asPostcssNodeWithChildren(state.current)\n if (!pathContainer.nodes[0]) {\n return clear(state)\n }\n\n // Extract the selector node and handle empty selectors\n const selector = asPostcssNodeWithChildren(pathContainer.nodes[0])\n if (!selector.nodes[0]) {\n return clear(state)\n }\n\n // Extract and validate the path pattern\n let pathPattern = ''\n if (isStringNode(selector.nodes[0])) {\n pathPattern = removeQuotes(asStringNode(selector.nodes[0]).value)\n } else {\n if (state.loose) {\n return clear(state)\n }\n throw error(\n 'Failed to parse path pattern in :path selector',\n new Error('Path pattern must be a quoted string'),\n )\n }\n\n // If no pattern provided, match nothing\n if (!pathPattern) {\n return clear(state)\n }\n\n // Check for unmatched brackets\n if (\n pathPattern === '[' ||\n (pathPattern.includes('[') && !pathPattern.includes(']'))\n ) {\n if (state.loose) {\n return clear(state)\n }\n throw error(\n 'Invalid glob pattern in :path selector',\n new Error(`Unmatched bracket in pattern: ${pathPattern}`),\n )\n }\n\n // Create path matcher function\n const matchPath = createPathMatcher(pathPattern, state.loose)\n\n // Filter nodes by path\n for (const node of state.partial.nodes) {\n /* c8 ignore next */\n const nodePath = node.location || ''\n const [type] = splitDepID(node.id)\n\n // Special case for main importer with root path pattern\n if (pathPattern === '.' && node.mainImporter) {\n continue // Keep main importer node for root path pattern\n }\n\n // Only match workspace or file nodes with matching paths\n const pathBased = type === 'workspace' || type === 'file'\n if (!pathBased || !matchPath(nodePath)) {\n removeNode(state, node)\n }\n }\n\n // Clean up any dangling edges\n removeDanglingEdges(state)\n return state\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../../src/pseudo/peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C;;GAEG;AACH,eAAO,MAAM,IAAI,UAAiB,WAAW,yBAW5C,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { removeEdge, removeUnlinkedNodes } from "./helpers.js";
|
|
2
|
+
/**
|
|
3
|
+
* :peer Pseudo-Selector will only match peer dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export const peer = async (state) => {
|
|
6
|
+
// filter edges that aren't marked as peer
|
|
7
|
+
for (const edge of state.partial.edges) {
|
|
8
|
+
if (!edge.peer) {
|
|
9
|
+
removeEdge(state, edge);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
removeUnlinkedNodes(state);
|
|
13
|
+
return state;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=peer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../../../src/pseudo/peer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IAC/C,0CAA0C;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAE1B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { ParserState } from '../types.ts'\nimport { removeEdge, removeUnlinkedNodes } from './helpers.ts'\n\n/**\n * :peer Pseudo-Selector will only match peer dependencies.\n */\nexport const peer = async (state: ParserState) => {\n // filter edges that aren't marked as peer\n for (const edge of state.partial.edges) {\n if (!edge.peer) {\n removeEdge(state, edge)\n }\n }\n\n removeUnlinkedNodes(state)\n\n return state\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParserState } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* :prerelease Pseudo-selector, matches only nodes that have prerelease
|
|
4
|
+
* elements in their parsed semver value.
|
|
5
|
+
*
|
|
6
|
+
* Examples of versions that should match:
|
|
7
|
+
* - 19.2.0-canary-fa3feba6-20250623
|
|
8
|
+
* - 1.0.0-beta.0
|
|
9
|
+
* - 0.0.0-16
|
|
10
|
+
* - 1.2.3-rc.1+rev.2
|
|
11
|
+
*
|
|
12
|
+
* Examples of versions that should NOT match:
|
|
13
|
+
* - 1.0.0
|
|
14
|
+
* - 99.9.9
|
|
15
|
+
* - 0.0.1
|
|
16
|
+
*/
|
|
17
|
+
export declare const prerelease: (state: ParserState) => Promise<ParserState>;
|
|
18
|
+
//# sourceMappingURL=prerelease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerelease.d.ts","sourceRoot":"","sources":["../../../src/pseudo/prerelease.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,UAAiB,WAAW,yBA2BlD,CAAA"}
|