@component-compass/ast-utils 0.1.7 → 0.1.10

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/index.d.ts CHANGED
@@ -1,8 +1,6 @@
1
- export { isElement, hasChildren } from "./parse5-guards.js";
1
+ export { isElement, hasChildren, childNodesOf } from "./parse5-guards.js";
2
2
  export { posixPath } from "./posix.js";
3
3
  export { errorMessage, errorStack } from "./errors.js";
4
- export { classifyImportOrigin } from "./classify-import.js";
5
- export type { ImportOrigin, ClassifyOptions } from "./classify-import.js";
6
4
  export { findEnclosingComponentBinding } from "./find-owner.js";
7
5
  export type { EnclosingComponentBinding } from "./find-owner.js";
8
6
  export { positionAt, getJSXName, isJSXElement, isJSXFragment, isJSXAttribute, isJSXSpreadAttribute, isCallExpression, isImportDeclaration, } from "./oxc-helpers.js";
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
- export { isElement, hasChildren } from "./parse5-guards.js";
1
+ export { isElement, hasChildren, childNodesOf } from "./parse5-guards.js";
2
2
  export { posixPath } from "./posix.js";
3
3
  export { errorMessage, errorStack } from "./errors.js";
4
- export { classifyImportOrigin } from "./classify-import.js";
5
4
  export { findEnclosingComponentBinding } from "./find-owner.js";
6
5
  export { positionAt, getJSXName, isJSXElement, isJSXFragment, isJSXAttribute, isJSXSpreadAttribute, isCallExpression, isImportDeclaration, } from "./oxc-helpers.js";
7
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
@@ -7,4 +7,9 @@ export declare function isElement(n: Node): n is Element;
7
7
  export declare function hasChildren(n: Node): n is Node & {
8
8
  childNodes: Node[];
9
9
  };
10
+ /** parse5 template elements keep their children in `content` (an inert
11
+ * DocumentFragment per the HTML spec), not `childNodes`; every other node uses
12
+ * `childNodes`. Nodes with neither yield []. Single home for "where does a
13
+ * parse5 node keep its children" — call it, don't re-derive it. */
14
+ export declare function childNodesOf(n: Node): Node[];
10
15
  export {};
@@ -8,4 +8,16 @@ export function hasChildren(n) {
8
8
  return false;
9
9
  return Array.isArray(n.childNodes);
10
10
  }
11
+ /** parse5 template elements keep their children in `content` (an inert
12
+ * DocumentFragment per the HTML spec), not `childNodes`; every other node uses
13
+ * `childNodes`. Nodes with neither yield []. Single home for "where does a
14
+ * parse5 node keep its children" — call it, don't re-derive it. */
15
+ export function childNodesOf(n) {
16
+ if (isElement(n) && n.tagName === "template" && "content" in n) {
17
+ return n.content.childNodes;
18
+ }
19
+ if (hasChildren(n))
20
+ return n.childNodes;
21
+ return [];
22
+ }
11
23
  //# sourceMappingURL=parse5-guards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse5-guards.js","sourceRoot":"","sources":["../src/parse5-guards.ts"],"names":[],"mappings":"AAQA,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,CAAO;IAC/B,OAAO,SAAS,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,CAAO;IACjC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,KAAK,CAAC,OAAO,CAAE,CAA6B,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"parse5-guards.js","sourceRoot":"","sources":["../src/parse5-guards.ts"],"names":[],"mappings":"AAQA,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,CAAO;IAC/B,OAAO,SAAS,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,CAAO;IACjC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,KAAK,CAAC,OAAO,CAAE,CAA6B,CAAC,UAAU,CAAC,CAAC;AAClE,CAAC;AAKD;;;oEAGoE;AACpE,MAAM,UAAU,YAAY,CAAC,CAAO;IAClC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAQ,CAAqB,CAAC,OAAO,CAAC,UAAU,CAAC;IACnD,CAAC;IACD,IAAI,WAAW,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,UAAU,CAAC;IACxC,OAAO,EAAE,CAAC;AACZ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@component-compass/ast-utils",
3
- "version": "0.1.7",
3
+ "version": "0.1.10",
4
4
  "description": "Shared AST utilities for component-compass parsers and manifest plugins. Internal infrastructure.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -20,11 +20,11 @@
20
20
  "build": "tsc -p tsconfig.json",
21
21
  "test": "vitest run --passWithNoTests",
22
22
  "typecheck": "tsc --noEmit",
23
- "lint": "biome lint src",
23
+ "lint": "biome lint src tests",
24
24
  "clean": "rm -rf dist .turbo"
25
25
  },
26
26
  "dependencies": {
27
- "@component-compass/plugin-core": "0.1.7",
27
+ "@component-compass/plugin-core": "0.1.10",
28
28
  "@oxc-project/types": "0.130.0",
29
29
  "oxc-walker": "1.0.0",
30
30
  "parse5": "8.0.1"
@@ -1,33 +0,0 @@
1
- import type { ResolveImport } from "@component-compass/plugin-core";
2
- export type ImportOrigin = {
3
- type: "external";
4
- package: string;
5
- } | {
6
- type: "local";
7
- filePath: string;
8
- } | {
9
- type: "unresolved";
10
- };
11
- export type ClassifyOptions = {
12
- repoRoot: string;
13
- fromFile: string;
14
- /**
15
- * The shared `ResolveImport` from `cli/walker/resolve-import.ts`. Handles
16
- * config aliases, tsconfig `paths`, and Node resolution in one layered
17
- * pass. Required — there is no internal fallback.
18
- */
19
- resolveImport: ResolveImport;
20
- /**
21
- * Names of packages known to belong to the scan's repo — workspace
22
- * siblings (`workspaceGraph.packages[*].name`) plus declared deps from the
23
- * root and workspace `package.json` files. When the resolver returns null,
24
- * the specifier's package portion is matched against this set; a hit
25
- * recovers external-package identity instead of marking the import
26
- * unresolved. Necessary for yarn/pnpm workspaces where siblings live under
27
- * `packages/*` but aren't symlinked into the root `node_modules`. Specs
28
- * that don't parse to a known package name (e.g. `~/foo`, `@/x`) stay
29
- * unresolved.
30
- */
31
- knownPackageNames?: ReadonlySet<string>;
32
- };
33
- export declare function classifyImportOrigin(specifier: string, opts: ClassifyOptions): ImportOrigin;
@@ -1,84 +0,0 @@
1
- import { isAbsolute, relative, sep, dirname } from "node:path";
2
- import { readFileSync, existsSync, realpathSync } from "node:fs";
3
- import { posixPath } from "./posix.js";
4
- export function classifyImportOrigin(specifier, opts) {
5
- const resolved = opts.resolveImport(opts.fromFile, specifier);
6
- if (!resolved) {
7
- const pkg = packageNameFromSpecifier(specifier);
8
- if (pkg && opts.knownPackageNames?.has(pkg)) {
9
- return { type: "external", package: pkg };
10
- }
11
- return { type: "unresolved" };
12
- }
13
- const nodeModulesIdx = resolved.lastIndexOf(`${sep}node_modules${sep}`);
14
- if (nodeModulesIdx >= 0) {
15
- const pkg = packageOf(resolved);
16
- if (!pkg)
17
- return { type: "unresolved" };
18
- return { type: "external", package: pkg };
19
- }
20
- if (!isAbsolute(resolved))
21
- return { type: "unresolved" };
22
- let repoRoot;
23
- try {
24
- repoRoot = realpathSync(opts.repoRoot);
25
- }
26
- catch {
27
- repoRoot = opts.repoRoot;
28
- }
29
- let realResolved;
30
- try {
31
- realResolved = realpathSync(resolved);
32
- }
33
- catch {
34
- realResolved = resolved;
35
- }
36
- const rel = relative(repoRoot, realResolved);
37
- if (rel.startsWith("..") || isAbsolute(rel)) {
38
- return { type: "unresolved" };
39
- }
40
- return { type: "local", filePath: posixPath(rel) };
41
- }
42
- /**
43
- * Parse a module specifier into its package-name portion. Returns null for
44
- * specifiers that aren't shaped like a package import (relative paths,
45
- * tsconfig/alias prefixes like `~/x`, `@/x`, `#x`, absolute paths).
46
- * - `@scope/name` → `@scope/name`
47
- * - `@scope/name/sub/path` → `@scope/name`
48
- * - `lodash` → `lodash`
49
- * - `lodash/fp/flow` → `lodash`
50
- * - `./x`, `../x`, `/x` → null
51
- * - `~/x`, `@/x`, `#alias` → null (scoped form requires `@scope/name`)
52
- */
53
- function packageNameFromSpecifier(specifier) {
54
- if (specifier.startsWith("@")) {
55
- const slash1 = specifier.indexOf("/");
56
- if (slash1 < 0)
57
- return null;
58
- const slash2 = specifier.indexOf("/", slash1 + 1);
59
- return slash2 < 0 ? specifier : specifier.slice(0, slash2);
60
- }
61
- if (!/^[a-zA-Z]/.test(specifier))
62
- return null;
63
- const slash = specifier.indexOf("/");
64
- return slash < 0 ? specifier : specifier.slice(0, slash);
65
- }
66
- function packageOf(absolute) {
67
- let cursor = dirname(absolute);
68
- while (cursor && cursor !== dirname(cursor)) {
69
- const pkgJson = `${cursor}${sep}package.json`;
70
- if (existsSync(pkgJson)) {
71
- try {
72
- const parsed = JSON.parse(readFileSync(pkgJson, "utf8"));
73
- if (typeof parsed.name === "string" && parsed.name.length > 0)
74
- return parsed.name;
75
- }
76
- catch {
77
- return null;
78
- }
79
- }
80
- cursor = dirname(cursor);
81
- }
82
- return null;
83
- }
84
- //# sourceMappingURL=classify-import.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"classify-import.js","sourceRoot":"","sources":["../src/classify-import.ts"],"names":[],"mappings":"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"}