@a16njs/engine 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../src/transformation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG1F;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,wBAAwB;IACxB,YAAY,EAAE,UAAU,CAAC;IACzB,wBAAwB;IACxB,YAAY,EAAE,UAAU,CAAC;IACzB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC1E;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,2BAA4B,YAAW,qBAAqB;IACvE,QAAQ,CAAC,EAAE,oBAAoB;IAC/B,QAAQ,CAAC,IAAI,8BAA8B;IAErC,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA0C/E"}
@@ -0,0 +1,56 @@
1
+ import { buildMapping, rewriteContent, detectOrphans } from './path-rewriter.js';
2
+ /**
3
+ * Path rewriting transformation.
4
+ *
5
+ * Rewrites file path references in content during format conversion.
6
+ * Uses a trial emission to discover the source-to-target path mapping,
7
+ * then rewrites all path references in content. Also detects orphan
8
+ * references (paths that weren't converted) using plugin-provided
9
+ * path patterns.
10
+ *
11
+ * This replaces the hardcoded path rewriting logic that was previously
12
+ * embedded in the engine's convert() method, eliminating the need for
13
+ * double emission and removing hardcoded plugin knowledge.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const transform = new PathRewritingTransformation();
18
+ * engine.convert({
19
+ * source: 'cursor',
20
+ * target: 'claude',
21
+ * root: '/project',
22
+ * transformations: [transform],
23
+ * });
24
+ * ```
25
+ */
26
+ export class PathRewritingTransformation {
27
+ id = 'path-rewriting';
28
+ name = 'Path Reference Rewriting';
29
+ async transform(context) {
30
+ const warnings = [];
31
+ // Trial emit to discover the path mapping
32
+ const trialResult = await context.trialEmit(context.items);
33
+ if (trialResult.written.length === 0) {
34
+ // No files would be written → no mapping → return cloned items
35
+ return {
36
+ items: context.items.map((item) => ({ ...item })),
37
+ warnings,
38
+ };
39
+ }
40
+ // Build mapping from source paths to target paths
41
+ const mapping = buildMapping(context.items, trialResult.written, context.sourceRoot, context.targetRoot);
42
+ // Rewrite path references in content
43
+ const rewriteResult = rewriteContent(context.items, mapping);
44
+ // Detect orphan references using plugin-provided path patterns
45
+ const patterns = context.sourcePlugin.pathPatterns;
46
+ if (patterns && patterns.prefixes.length > 0 && patterns.extensions.length > 0) {
47
+ const orphanWarnings = detectOrphans(rewriteResult.items, mapping, patterns.prefixes, patterns.extensions);
48
+ warnings.push(...orphanWarnings);
49
+ }
50
+ return {
51
+ items: rewriteResult.items,
52
+ warnings,
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=transformation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformation.js","sourceRoot":"","sources":["../src/transformation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmEjF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,2BAA2B;IAC7B,EAAE,GAAG,gBAAgB,CAAC;IACtB,IAAI,GAAG,0BAA0B,CAAC;IAE3C,KAAK,CAAC,SAAS,CAAC,OAA8B;QAC5C,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,0CAA0C;QAC1C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3D,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,+DAA+D;YAC/D,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;gBACjD,QAAQ;aACT,CAAC;QACJ,CAAC;QAED,kDAAkD;QAClD,MAAM,OAAO,GAAG,YAAY,CAC1B,OAAO,CAAC,KAAK,EACb,WAAW,CAAC,OAAO,EACnB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,UAAU,CACnB,CAAC;QAEF,qCAAqC;QACrC,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE7D,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;QACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/E,MAAM,cAAc,GAAG,aAAa,CAClC,aAAa,CAAC,KAAK,EACnB,OAAO,EACP,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,UAAU,CACpB,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QACnC,CAAC;QAED,OAAO;YACL,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,QAAQ;SACT,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ import type { Workspace, WorkspaceEntry } from '@a16njs/models';
2
+ export type { Workspace, WorkspaceEntry } from '@a16njs/models';
3
+ export { LocalWorkspace, toWorkspace } from '@a16njs/models';
4
+ /**
5
+ * Read-only wrapper around another workspace.
6
+ * Allows read operations but throws on any write operation.
7
+ * Useful for dry-run scenarios.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const ws = new LocalWorkspace('source', '/project');
12
+ * const readOnly = new ReadOnlyWorkspace(ws);
13
+ * await readOnly.read('file.md'); // works
14
+ * await readOnly.write('file.md', 'content'); // throws!
15
+ * ```
16
+ */
17
+ export declare class ReadOnlyWorkspace implements Workspace {
18
+ private readonly underlying;
19
+ /**
20
+ * Create a new ReadOnlyWorkspace wrapping another workspace.
21
+ * @param underlying - The workspace to wrap
22
+ */
23
+ constructor(underlying: Workspace);
24
+ get id(): string;
25
+ get root(): string;
26
+ resolve(relativePath: string): string;
27
+ exists(relativePath: string): Promise<boolean>;
28
+ read(relativePath: string): Promise<string>;
29
+ write(_relativePath: string, _content: string): Promise<void>;
30
+ readdir(relativePath: string): Promise<WorkspaceEntry[]>;
31
+ mkdir(_relativePath: string): Promise<void>;
32
+ }
33
+ /**
34
+ * In-memory workspace for testing.
35
+ * Stores files in a Map, no filesystem access.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const ws = new MemoryWorkspace('test');
40
+ * await ws.write('rules/my-rule.md', '# Rule');
41
+ * const content = await ws.read('rules/my-rule.md');
42
+ * const entries = await ws.readdir('rules');
43
+ * // entries: [{ name: 'my-rule.md', isFile: true, isDirectory: false }]
44
+ * ```
45
+ */
46
+ export declare class MemoryWorkspace implements Workspace {
47
+ readonly id: string;
48
+ readonly root: string;
49
+ private files;
50
+ private directories;
51
+ /**
52
+ * Create a new MemoryWorkspace.
53
+ * @param id - Unique identifier for this workspace
54
+ * @param initialFiles - Optional map of relative paths to file contents
55
+ */
56
+ constructor(id: string, initialFiles?: Record<string, string>);
57
+ resolve(relativePath: string): string;
58
+ exists(relativePath: string): Promise<boolean>;
59
+ read(relativePath: string): Promise<string>;
60
+ write(relativePath: string, content: string): Promise<void>;
61
+ readdir(relativePath: string): Promise<WorkspaceEntry[]>;
62
+ mkdir(relativePath: string): Promise<void>;
63
+ /**
64
+ * Get all file paths stored in this workspace (for test assertions).
65
+ * @returns Array of normalized file paths
66
+ */
67
+ getAllPaths(): string[];
68
+ /**
69
+ * Normalize a path to use forward slashes and strip leading slash.
70
+ */
71
+ private normalizePath;
72
+ }
73
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IAKrC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJvC;;;OAGG;gBAC0B,UAAU,EAAE,SAAS;IAElD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9C,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrC,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIlD,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,SAAS;aAW7B,EAAE,EAAE,MAAM;IAV5B,SAAgB,IAAI,EAAE,MAAM,CAAa;IACzC,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,WAAW,CAA0B;IAE7C;;;;OAIG;gBAEe,EAAE,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IASvC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAM/B,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe9C,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3C,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4CxD,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,178 @@
1
+ import * as path from 'path';
2
+ export { LocalWorkspace, toWorkspace } from '@a16njs/models';
3
+ /**
4
+ * Read-only wrapper around another workspace.
5
+ * Allows read operations but throws on any write operation.
6
+ * Useful for dry-run scenarios.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const ws = new LocalWorkspace('source', '/project');
11
+ * const readOnly = new ReadOnlyWorkspace(ws);
12
+ * await readOnly.read('file.md'); // works
13
+ * await readOnly.write('file.md', 'content'); // throws!
14
+ * ```
15
+ */
16
+ export class ReadOnlyWorkspace {
17
+ underlying;
18
+ /**
19
+ * Create a new ReadOnlyWorkspace wrapping another workspace.
20
+ * @param underlying - The workspace to wrap
21
+ */
22
+ constructor(underlying) {
23
+ this.underlying = underlying;
24
+ }
25
+ get id() {
26
+ return this.underlying.id;
27
+ }
28
+ get root() {
29
+ return this.underlying.root;
30
+ }
31
+ resolve(relativePath) {
32
+ return this.underlying.resolve(relativePath);
33
+ }
34
+ exists(relativePath) {
35
+ return this.underlying.exists(relativePath);
36
+ }
37
+ read(relativePath) {
38
+ return this.underlying.read(relativePath);
39
+ }
40
+ async write(_relativePath, _content) {
41
+ throw new Error('Cannot write to read-only workspace');
42
+ }
43
+ readdir(relativePath) {
44
+ return this.underlying.readdir(relativePath);
45
+ }
46
+ async mkdir(_relativePath) {
47
+ throw new Error('Cannot mkdir in read-only workspace');
48
+ }
49
+ }
50
+ /**
51
+ * In-memory workspace for testing.
52
+ * Stores files in a Map, no filesystem access.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const ws = new MemoryWorkspace('test');
57
+ * await ws.write('rules/my-rule.md', '# Rule');
58
+ * const content = await ws.read('rules/my-rule.md');
59
+ * const entries = await ws.readdir('rules');
60
+ * // entries: [{ name: 'my-rule.md', isFile: true, isDirectory: false }]
61
+ * ```
62
+ */
63
+ export class MemoryWorkspace {
64
+ id;
65
+ root = '/memory';
66
+ files = new Map();
67
+ directories = new Set();
68
+ /**
69
+ * Create a new MemoryWorkspace.
70
+ * @param id - Unique identifier for this workspace
71
+ * @param initialFiles - Optional map of relative paths to file contents
72
+ */
73
+ constructor(id, initialFiles) {
74
+ this.id = id;
75
+ if (initialFiles) {
76
+ for (const [filePath, content] of Object.entries(initialFiles)) {
77
+ this.files.set(this.normalizePath(filePath), content);
78
+ }
79
+ }
80
+ }
81
+ resolve(relativePath) {
82
+ const normalized = this.normalizePath(relativePath);
83
+ if (normalized === '')
84
+ return this.root;
85
+ return this.root + '/' + normalized;
86
+ }
87
+ async exists(relativePath) {
88
+ const normalized = this.normalizePath(relativePath);
89
+ // Check if it's a file
90
+ if (this.files.has(normalized))
91
+ return true;
92
+ // Check if it's an explicit directory
93
+ if (this.directories.has(normalized))
94
+ return true;
95
+ // Check if it's an implicit directory (some file has this as a prefix)
96
+ if (normalized === '')
97
+ return true;
98
+ const prefix = normalized + '/';
99
+ for (const key of this.files.keys()) {
100
+ if (key.startsWith(prefix))
101
+ return true;
102
+ }
103
+ return false;
104
+ }
105
+ async read(relativePath) {
106
+ const normalized = this.normalizePath(relativePath);
107
+ const content = this.files.get(normalized);
108
+ if (content === undefined) {
109
+ throw new Error(`File not found: ${relativePath} in workspace ${this.id}`);
110
+ }
111
+ return content;
112
+ }
113
+ async write(relativePath, content) {
114
+ const normalized = this.normalizePath(relativePath);
115
+ this.files.set(normalized, content);
116
+ }
117
+ async readdir(relativePath) {
118
+ const normalized = this.normalizePath(relativePath);
119
+ // Check directory exists
120
+ if (!(await this.exists(normalized))) {
121
+ throw new Error(`Directory not found: ${relativePath} in workspace ${this.id}`);
122
+ }
123
+ const prefix = normalized === '' ? '' : normalized + '/';
124
+ const entries = new Map();
125
+ // Scan files for entries under this directory
126
+ for (const key of this.files.keys()) {
127
+ if (!key.startsWith(prefix))
128
+ continue;
129
+ const rest = key.slice(prefix.length);
130
+ const slashIndex = rest.indexOf('/');
131
+ if (slashIndex === -1) {
132
+ // Direct child file
133
+ entries.set(rest, { name: rest, isFile: true, isDirectory: false });
134
+ }
135
+ else {
136
+ // Subdirectory (from file path)
137
+ const dirName = rest.slice(0, slashIndex);
138
+ if (!entries.has(dirName)) {
139
+ entries.set(dirName, { name: dirName, isFile: false, isDirectory: true });
140
+ }
141
+ }
142
+ }
143
+ // Also scan explicit directories
144
+ for (const dir of this.directories) {
145
+ if (!dir.startsWith(prefix))
146
+ continue;
147
+ const rest = dir.slice(prefix.length);
148
+ if (rest === '')
149
+ continue;
150
+ const slashIndex = rest.indexOf('/');
151
+ const dirName = slashIndex === -1 ? rest : rest.slice(0, slashIndex);
152
+ if (!entries.has(dirName)) {
153
+ entries.set(dirName, { name: dirName, isFile: false, isDirectory: true });
154
+ }
155
+ }
156
+ return Array.from(entries.values());
157
+ }
158
+ async mkdir(relativePath) {
159
+ const normalized = this.normalizePath(relativePath);
160
+ if (normalized !== '') {
161
+ this.directories.add(normalized);
162
+ }
163
+ }
164
+ /**
165
+ * Get all file paths stored in this workspace (for test assertions).
166
+ * @returns Array of normalized file paths
167
+ */
168
+ getAllPaths() {
169
+ return Array.from(this.files.keys());
170
+ }
171
+ /**
172
+ * Normalize a path to use forward slashes and strip leading slash.
173
+ */
174
+ normalizePath(p) {
175
+ return p.split(path.sep).join('/').replace(/^\//, '');
176
+ }
177
+ }
178
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a16njs/engine",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Conversion engine for a16n",
5
5
  "license": "AGPL-3.0",
6
6
  "author": "Texarkanine",
@@ -31,14 +31,14 @@
31
31
  "dist"
32
32
  ],
33
33
  "dependencies": {
34
- "@a16njs/models": "0.6.0"
34
+ "@a16njs/models": "0.10.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^20.0.0",
38
38
  "typescript": "^5.4.0",
39
39
  "vitest": "^2.0.0",
40
- "@a16njs/plugin-cursor": "0.7.0",
41
- "@a16njs/plugin-claude": "0.7.0"
40
+ "@a16njs/plugin-cursor": "0.10.0",
41
+ "@a16njs/plugin-claude": "0.10.0"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc",