@tanstack/intent 0.0.21 → 0.0.27
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/cli.d.mts +1 -2
- package/dist/cli.mjs +271 -300
- package/dist/display-DdmZXLZm.mjs +3 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +6 -4
- package/dist/{install-prompt-C0M-U3WZ.mjs → install-BzDmD5yI.mjs} +12 -2
- package/dist/intent-library.mjs +7 -7
- package/dist/{library-scanner-CU3ZHPYU.mjs → library-scanner-B51qV5aX.mjs} +7 -5
- package/dist/library-scanner.d.mts +2 -2
- package/dist/library-scanner.mjs +2 -2
- package/dist/project-context-B7UXTA9F.mjs +53 -0
- package/dist/{scanner-SHzOJKcz.mjs → scanner-1ZGYK3Qm.mjs} +11 -5
- package/dist/scanner-CERQgrRN.mjs +5 -0
- package/dist/{setup-BNBVotfR.d.mts → setup-BA9RkENh.d.mts} +7 -13
- package/dist/{setup-J7F7DIP2.mjs → setup-BzhEoOBi.mjs} +34 -113
- package/dist/setup.d.mts +1 -1
- package/dist/setup.mjs +4 -2
- package/dist/{staleness-DZKvsLVq.mjs → staleness-BtmJtMpz.mjs} +1 -1
- package/dist/staleness-SRims-ZP.mjs +4 -0
- package/dist/{utils-BfjM1mQe.mjs → utils-COlDcU72.mjs} +8 -2
- package/dist/utils-dkVvY7D7.mjs +3 -0
- package/dist/workspace-patterns-Boa5mAbf.mjs +4 -0
- package/dist/workspace-patterns-BuJMfudb.mjs +98 -0
- package/package.json +3 -1
- package/dist/display-CuCDLPP_.mjs +0 -3
- package/dist/scanner-RWHFrJ_C.mjs +0 -5
- package/dist/staleness-Dr5-5wj5.mjs +0 -4
- package/dist/utils-D7OKi0Rn.mjs +0 -3
- /package/dist/{display-DhsUxNJW.mjs → display-hdsqb4w-.mjs} +0 -0
- /package/dist/{types-ddLtccfV.d.mts → types-BTQ9efv-.d.mts} +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { n as findSkillFiles } from "./utils-COlDcU72.mjs";
|
|
2
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { parse } from "yaml";
|
|
5
|
+
|
|
6
|
+
//#region src/workspace-patterns.ts
|
|
7
|
+
function normalizeWorkspacePattern(pattern) {
|
|
8
|
+
return pattern.replace(/\\/g, "/").replace(/^\.\//, "").replace(/\/+$/, "");
|
|
9
|
+
}
|
|
10
|
+
function normalizeWorkspacePatterns(patterns) {
|
|
11
|
+
return [...new Set(patterns.map(normalizeWorkspacePattern).filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
12
|
+
}
|
|
13
|
+
function parseWorkspacePatterns(value) {
|
|
14
|
+
if (!Array.isArray(value)) return null;
|
|
15
|
+
return normalizeWorkspacePatterns(value.filter((pattern) => typeof pattern === "string"));
|
|
16
|
+
}
|
|
17
|
+
function hasPackageJson(dir) {
|
|
18
|
+
return existsSync(join(dir, "package.json"));
|
|
19
|
+
}
|
|
20
|
+
function readWorkspacePatterns(root) {
|
|
21
|
+
const pnpmWs = join(root, "pnpm-workspace.yaml");
|
|
22
|
+
if (existsSync(pnpmWs)) try {
|
|
23
|
+
const patterns = parseWorkspacePatterns(parse(readFileSync(pnpmWs, "utf8")).packages);
|
|
24
|
+
if (patterns) return patterns;
|
|
25
|
+
} catch (err) {
|
|
26
|
+
console.error(`Warning: failed to parse ${pnpmWs}: ${err instanceof Error ? err.message : err}`);
|
|
27
|
+
}
|
|
28
|
+
const pkgPath = join(root, "package.json");
|
|
29
|
+
if (existsSync(pkgPath)) try {
|
|
30
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
31
|
+
const patterns = parseWorkspacePatterns(pkg.workspaces) ?? parseWorkspacePatterns(pkg.workspaces?.packages);
|
|
32
|
+
if (patterns) return patterns;
|
|
33
|
+
} catch (err) {
|
|
34
|
+
console.error(`Warning: failed to parse ${pkgPath}: ${err instanceof Error ? err.message : err}`);
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function resolveWorkspacePackages(root, patterns) {
|
|
39
|
+
const includedDirs = /* @__PURE__ */ new Set();
|
|
40
|
+
const excludedDirs = /* @__PURE__ */ new Set();
|
|
41
|
+
for (const pattern of normalizeWorkspacePatterns(patterns)) {
|
|
42
|
+
if (pattern.startsWith("!")) {
|
|
43
|
+
resolveWorkspacePatternSegments(root, pattern.slice(1).split("/"), excludedDirs);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
resolveWorkspacePatternSegments(root, pattern.split("/"), includedDirs);
|
|
47
|
+
}
|
|
48
|
+
return [...includedDirs].filter((dir) => !excludedDirs.has(dir)).sort((a, b) => a.localeCompare(b));
|
|
49
|
+
}
|
|
50
|
+
/** Recursively matches path segments: `*` matches one level, `**` matches zero or more levels. */
|
|
51
|
+
function resolveWorkspacePatternSegments(dir, segments, result) {
|
|
52
|
+
if (segments.length === 0) {
|
|
53
|
+
if (hasPackageJson(dir)) result.add(dir);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const segment = segments[0];
|
|
57
|
+
const remainingSegments = segments.slice(1);
|
|
58
|
+
if (segment === "**") {
|
|
59
|
+
resolveWorkspacePatternSegments(dir, remainingSegments, result);
|
|
60
|
+
for (const childDir of readChildDirectories(dir)) resolveWorkspacePatternSegments(childDir, segments, result);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (segment === "*") {
|
|
64
|
+
for (const childDir of readChildDirectories(dir)) resolveWorkspacePatternSegments(childDir, remainingSegments, result);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const nextDir = join(dir, segment);
|
|
68
|
+
if (!existsSync(nextDir)) return;
|
|
69
|
+
resolveWorkspacePatternSegments(nextDir, remainingSegments, result);
|
|
70
|
+
}
|
|
71
|
+
function readChildDirectories(dir) {
|
|
72
|
+
try {
|
|
73
|
+
return readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name !== "node_modules" && !entry.name.startsWith(".")).map((entry) => join(dir, entry.name));
|
|
74
|
+
} catch (err) {
|
|
75
|
+
console.error(`Warning: could not read directory ${dir}: ${err instanceof Error ? err.message : err}`);
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function findWorkspaceRoot(start) {
|
|
80
|
+
let dir = start;
|
|
81
|
+
while (true) {
|
|
82
|
+
if (readWorkspacePatterns(dir)) return dir;
|
|
83
|
+
const next = dirname(dir);
|
|
84
|
+
if (next === dir) return null;
|
|
85
|
+
dir = next;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function findPackagesWithSkills(root) {
|
|
89
|
+
const patterns = readWorkspacePatterns(root);
|
|
90
|
+
if (!patterns) return [];
|
|
91
|
+
return resolveWorkspacePackages(root, patterns).filter((dir) => {
|
|
92
|
+
const skillsDir = join(dir, "skills");
|
|
93
|
+
return existsSync(skillsDir) && findSkillFiles(skillsDir).length > 0;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//#endregion
|
|
98
|
+
export { resolveWorkspacePackages as i, findWorkspaceRoot as n, readWorkspacePatterns as r, findPackagesWithSkills as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/intent",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.27",
|
|
4
4
|
"description": "Ship compositional knowledge for AI coding agents alongside your npm packages",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"meta"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
+
"cac": "^6.7.14",
|
|
30
31
|
"yaml": "^2.7.0"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
"scripts": {
|
|
38
39
|
"prepack": "npm run build",
|
|
39
40
|
"build": "tsdown src/index.ts src/cli.ts src/setup.ts src/intent-library.ts src/library-scanner.ts --format esm --dts",
|
|
41
|
+
"test:smoke": "pnpm run build && node dist/cli.mjs --help > /dev/null",
|
|
40
42
|
"test:lib": "vitest run --exclude 'tests/integration/**'",
|
|
41
43
|
"test:integration": "vitest run tests/integration/",
|
|
42
44
|
"test:types": "tsc --noEmit"
|
package/dist/utils-D7OKi0Rn.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { a as parseFrontmatter, i as listNodeModulesPackageDirs, n as findSkillFiles, o as resolveDepDir, r as getDeps, t as detectGlobalNodeModules } from "./utils-BfjM1mQe.mjs";
|
|
2
|
-
|
|
3
|
-
export { detectGlobalNodeModules, findSkillFiles, getDeps, listNodeModulesPackageDirs, parseFrontmatter, resolveDepDir };
|
|
File without changes
|
|
File without changes
|