@einja/dev-cli 0.1.45 → 0.1.48
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/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +50 -11
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/sync.test.js +1 -1
- package/dist/commands/sync.test.js.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +49 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/file-filter.test.js +40 -0
- package/dist/lib/sync/file-filter.test.js.map +1 -1
- package/dist/lib/sync/json-processor.d.ts +49 -27
- package/dist/lib/sync/json-processor.d.ts.map +1 -1
- package/dist/lib/sync/json-processor.js +182 -82
- package/dist/lib/sync/json-processor.js.map +1 -1
- package/dist/lib/sync/json-processor.test.d.ts +2 -0
- package/dist/lib/sync/json-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/json-processor.test.js +334 -0
- package/dist/lib/sync/json-processor.test.js.map +1 -0
- package/dist/lib/sync/metadata-manager.d.ts +6 -1
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
- package/dist/lib/sync/metadata-manager.js +26 -6
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/types/sync.d.ts +2 -0
- package/dist/types/sync.d.ts.map +1 -1
- package/dist/types/sync.js +1 -0
- package/dist/types/sync.js.map +1 -1
- package/package.json +1 -1
- package/presets/default/.claude/commands/einja/einja-sync.md +6 -6
- package/presets/default/docs/einja/instructions/setup-flow.md +40 -0
- package/presets/default/package.json +73 -0
- package/presets/default/preset.yaml +2 -2
- package/presets/default/scripts/ensure-serena.sh +26 -7
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { JsonProcessor } from "./json-processor.js";
|
|
3
|
+
describe("JsonProcessor", () => {
|
|
4
|
+
const processor = new JsonProcessor();
|
|
5
|
+
const emptyPaths = { managed: {}, "project-private": {} };
|
|
6
|
+
describe("mergeJson - 基本動作", () => {
|
|
7
|
+
it("localJson が null の場合、project-private除外済みテンプレートを返す", () => {
|
|
8
|
+
// Given
|
|
9
|
+
const template = { name: "test", scripts: { build: "tsc" } };
|
|
10
|
+
const jsonPaths = {
|
|
11
|
+
managed: {},
|
|
12
|
+
"project-private": { "package.json": ["name"] },
|
|
13
|
+
};
|
|
14
|
+
// When
|
|
15
|
+
const result = processor.mergeJson(template, null, jsonPaths, "package.json");
|
|
16
|
+
// Then: name は project-private 除外、scripts は残る
|
|
17
|
+
expect(result.result).toEqual({ scripts: { build: "tsc" } });
|
|
18
|
+
expect(result.conflicts).toEqual([]);
|
|
19
|
+
});
|
|
20
|
+
it("戻り値が JsonMergeResult 型であること", () => {
|
|
21
|
+
// Given
|
|
22
|
+
const template = { a: 1 };
|
|
23
|
+
const local = { a: 1 };
|
|
24
|
+
// When
|
|
25
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json");
|
|
26
|
+
// Then: result と conflicts プロパティを持つ
|
|
27
|
+
expect(result).toHaveProperty("result");
|
|
28
|
+
expect(result).toHaveProperty("conflicts");
|
|
29
|
+
expect(Array.isArray(result.conflicts)).toBe(true);
|
|
30
|
+
expect(typeof result.result).toBe("object");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("mergeJson - 3方向マージ", () => {
|
|
34
|
+
it("base→template 変更のみ → テンプレート適用", () => {
|
|
35
|
+
// Given: base(2) → template(3) に変更、local は未変更
|
|
36
|
+
const base = { a: 1, b: 2 };
|
|
37
|
+
const local = { a: 1, b: 2 };
|
|
38
|
+
const template = { a: 1, b: 3 };
|
|
39
|
+
// When
|
|
40
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
41
|
+
// Then: b がテンプレート値(3)に更新される
|
|
42
|
+
expect(result.result).toEqual({ a: 1, b: 3 });
|
|
43
|
+
expect(result.conflicts).toEqual([]);
|
|
44
|
+
});
|
|
45
|
+
it("base→local 変更のみ → ローカル保持", () => {
|
|
46
|
+
// Given: base(2) → local(5) に変更、template は未変更
|
|
47
|
+
const base = { a: 1, b: 2 };
|
|
48
|
+
const local = { a: 1, b: 5 };
|
|
49
|
+
const template = { a: 1, b: 2 };
|
|
50
|
+
// When
|
|
51
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
52
|
+
// Then: b はローカル値(5)を保持
|
|
53
|
+
expect(result.result).toEqual({ a: 1, b: 5 });
|
|
54
|
+
expect(result.conflicts).toEqual([]);
|
|
55
|
+
});
|
|
56
|
+
it("両方変更(異なる値)→ コンフリクト検出、ローカル保持", () => {
|
|
57
|
+
// Given: local(5) と template(3) が base(2) から異なる値に変更
|
|
58
|
+
const base = { a: 1, b: 2 };
|
|
59
|
+
const local = { a: 1, b: 5 };
|
|
60
|
+
const template = { a: 1, b: 3 };
|
|
61
|
+
// When
|
|
62
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
63
|
+
// Then: ローカル値(5)を保持 + コンフリクト検出
|
|
64
|
+
expect(result.result).toEqual({ a: 1, b: 5 });
|
|
65
|
+
expect(result.conflicts).toHaveLength(1);
|
|
66
|
+
expect(result.conflicts[0].keyPath).toBe("b");
|
|
67
|
+
expect(result.conflicts[0].baseValue).toBe(2);
|
|
68
|
+
expect(result.conflicts[0].localValue).toBe(5);
|
|
69
|
+
expect(result.conflicts[0].templateValue).toBe(3);
|
|
70
|
+
});
|
|
71
|
+
it("両方変更(同じ値)→ コンフリクトなし", () => {
|
|
72
|
+
// Given: local と template が同じ値(3)に変更
|
|
73
|
+
const base = { a: 1, b: 2 };
|
|
74
|
+
const local = { a: 1, b: 3 };
|
|
75
|
+
const template = { a: 1, b: 3 };
|
|
76
|
+
// When
|
|
77
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
78
|
+
// Then: コンフリクトなし
|
|
79
|
+
expect(result.result).toEqual({ a: 1, b: 3 });
|
|
80
|
+
expect(result.conflicts).toEqual([]);
|
|
81
|
+
});
|
|
82
|
+
it("ローカル削除 + テンプレート未変更 → 削除維持", () => {
|
|
83
|
+
// Given: ローカルで b を削除、テンプレートは未変更
|
|
84
|
+
const base = { a: 1, b: 2 };
|
|
85
|
+
const local = { a: 1 };
|
|
86
|
+
const template = { a: 1, b: 2 };
|
|
87
|
+
// When
|
|
88
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
89
|
+
// Then: b は削除されたまま
|
|
90
|
+
expect(result.result).toEqual({ a: 1 });
|
|
91
|
+
expect(result.conflicts).toEqual([]);
|
|
92
|
+
});
|
|
93
|
+
it("ローカル削除 + テンプレート変更 → コンフリクト(ローカル=削除を保持)", () => {
|
|
94
|
+
// Given: ローカルで b を削除、テンプレートで b を変更
|
|
95
|
+
const base = { a: 1, b: 2 };
|
|
96
|
+
const local = { a: 1 };
|
|
97
|
+
const template = { a: 1, b: 3 };
|
|
98
|
+
// When
|
|
99
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
100
|
+
// Then: コンフリクト検出、b は削除されたまま(ローカルの削除を保持)
|
|
101
|
+
expect(result.result).toEqual({ a: 1 });
|
|
102
|
+
expect(result.conflicts).toHaveLength(1);
|
|
103
|
+
expect(result.conflicts[0].keyPath).toBe("b");
|
|
104
|
+
expect(result.conflicts[0].localValue).toBeUndefined();
|
|
105
|
+
expect(result.conflicts[0].templateValue).toBe(3);
|
|
106
|
+
});
|
|
107
|
+
it("テンプレートで新キー追加 → 追加", () => {
|
|
108
|
+
// Given: template に新キー b を追加
|
|
109
|
+
const base = { a: 1 };
|
|
110
|
+
const local = { a: 1 };
|
|
111
|
+
const template = { a: 1, b: 2 };
|
|
112
|
+
// When
|
|
113
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
114
|
+
// Then: b がローカルに追加される
|
|
115
|
+
expect(result.result).toEqual({ a: 1, b: 2 });
|
|
116
|
+
expect(result.conflicts).toEqual([]);
|
|
117
|
+
});
|
|
118
|
+
it("ローカルで新キー追加 → 保持", () => {
|
|
119
|
+
// Given: local に独自キー c を追加
|
|
120
|
+
const base = { a: 1 };
|
|
121
|
+
const local = { a: 1, c: 3 };
|
|
122
|
+
const template = { a: 1 };
|
|
123
|
+
// When
|
|
124
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
125
|
+
// Then: c はローカルに保持される
|
|
126
|
+
expect(result.result).toEqual({ a: 1, c: 3 });
|
|
127
|
+
expect(result.conflicts).toEqual([]);
|
|
128
|
+
});
|
|
129
|
+
it("テンプレートでキー削除 + ローカル未変更 → 削除", () => {
|
|
130
|
+
// Given: template で b を削除、local は未変更
|
|
131
|
+
const base = { a: 1, b: 2 };
|
|
132
|
+
const local = { a: 1, b: 2 };
|
|
133
|
+
const template = { a: 1 };
|
|
134
|
+
// When
|
|
135
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
136
|
+
// Then: b がローカルから削除される
|
|
137
|
+
expect(result.result).toEqual({ a: 1 });
|
|
138
|
+
expect(result.conflicts).toEqual([]);
|
|
139
|
+
});
|
|
140
|
+
it("テンプレートでキー削除 + ローカル変更あり → コンフリクト", () => {
|
|
141
|
+
// Given: template で b を削除、local で b を変更
|
|
142
|
+
const base = { a: 1, b: 2 };
|
|
143
|
+
const local = { a: 1, b: 5 };
|
|
144
|
+
const template = { a: 1 };
|
|
145
|
+
// When
|
|
146
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
147
|
+
// Then: コンフリクト検出、ローカル値(5)を保持
|
|
148
|
+
expect(result.result).toEqual({ a: 1, b: 5 });
|
|
149
|
+
expect(result.conflicts).toHaveLength(1);
|
|
150
|
+
expect(result.conflicts[0].keyPath).toBe("b");
|
|
151
|
+
expect(result.conflicts[0].localValue).toBe(5);
|
|
152
|
+
expect(result.conflicts[0].templateValue).toBeUndefined();
|
|
153
|
+
});
|
|
154
|
+
it("配列値の両方変更でコンフリクトが検出されること", () => {
|
|
155
|
+
const base = { deps: ["a", "b"] };
|
|
156
|
+
const local = { deps: ["a", "b", "c"] }; // ローカルが変更
|
|
157
|
+
const template = { deps: ["a", "b", "d"] }; // テンプレートも変更
|
|
158
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
159
|
+
// 両方変更で異なる値 → コンフリクト(ローカル保持)
|
|
160
|
+
expect(result.result.deps).toEqual(["a", "b", "c"]);
|
|
161
|
+
expect(result.conflicts.length).toBe(1);
|
|
162
|
+
expect(result.conflicts[0].keyPath).toBe("deps");
|
|
163
|
+
});
|
|
164
|
+
it("base が空オブジェクトの場合、テンプレートとローカルの新キーがすべて保持されること", () => {
|
|
165
|
+
const base = {};
|
|
166
|
+
const local = { localKey: "local" };
|
|
167
|
+
const template = { templateKey: "template" };
|
|
168
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
169
|
+
// ローカルの新キー → 保持
|
|
170
|
+
expect(result.result.localKey).toBe("local");
|
|
171
|
+
// テンプレートの新キー → 追加
|
|
172
|
+
expect(result.result.templateKey).toBe("template");
|
|
173
|
+
expect(result.conflicts).toEqual([]);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
describe("mergeJson - 初回sync(baseなし)", () => {
|
|
177
|
+
it("初回sync + ローカルにユーザー変更あり → ローカル保持", () => {
|
|
178
|
+
// Given: base なし、ローカルに変更あり
|
|
179
|
+
const template = { a: 1, b: 2, c: 3 };
|
|
180
|
+
const local = { a: 10, b: 20 };
|
|
181
|
+
const jsonPaths = { managed: {}, "project-private": {} };
|
|
182
|
+
// When
|
|
183
|
+
const result = processor.mergeJson(template, local, jsonPaths, "test.json");
|
|
184
|
+
// Then: a, b はローカル保持、c はテンプレートから追加
|
|
185
|
+
expect(result.result).toEqual({ a: 10, b: 20, c: 3 });
|
|
186
|
+
expect(result.conflicts).toEqual([]);
|
|
187
|
+
});
|
|
188
|
+
it("初回sync + オブジェクト型の再帰マージ", () => {
|
|
189
|
+
// Given: base なし、ネストされたオブジェクト
|
|
190
|
+
const template = { scripts: { build: "tsc", dev: "next dev" } };
|
|
191
|
+
const local = { scripts: { build: "vite build" } };
|
|
192
|
+
// When
|
|
193
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json");
|
|
194
|
+
// Then: build はローカル保持、dev はテンプレートから追加
|
|
195
|
+
expect(result.result).toEqual({ scripts: { build: "vite build", dev: "next dev" } });
|
|
196
|
+
expect(result.conflicts).toEqual([]);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe("mergeJson - project-private", () => {
|
|
200
|
+
it("project-private: テンプレートにあってもローカルに追加しない(完全除外)", () => {
|
|
201
|
+
// Given: name, version が project-private
|
|
202
|
+
const jsonPaths = {
|
|
203
|
+
managed: {},
|
|
204
|
+
"project-private": { "package.json": ["name", "version"] },
|
|
205
|
+
};
|
|
206
|
+
const template = { name: "template-name", version: "1.0.0", scripts: { build: "tsc" } };
|
|
207
|
+
const local = { scripts: {} };
|
|
208
|
+
// When
|
|
209
|
+
const result = processor.mergeJson(template, local, jsonPaths, "package.json");
|
|
210
|
+
// Then: name, version は追加されない
|
|
211
|
+
expect(result.result).not.toHaveProperty("name");
|
|
212
|
+
expect(result.result).not.toHaveProperty("version");
|
|
213
|
+
expect(result.result).toHaveProperty("scripts");
|
|
214
|
+
});
|
|
215
|
+
it("project-private: 初回syncでも追加しない", () => {
|
|
216
|
+
// Given: base なし、name が project-private
|
|
217
|
+
const jsonPaths = {
|
|
218
|
+
managed: {},
|
|
219
|
+
"project-private": { "package.json": ["name"] },
|
|
220
|
+
};
|
|
221
|
+
const template = { name: "template", scripts: { build: "tsc" } };
|
|
222
|
+
const local = {};
|
|
223
|
+
// When
|
|
224
|
+
const result = processor.mergeJson(template, local, jsonPaths, "package.json");
|
|
225
|
+
// Then: name は追加されない
|
|
226
|
+
expect(result.result).not.toHaveProperty("name");
|
|
227
|
+
expect(result.result).toHaveProperty("scripts");
|
|
228
|
+
});
|
|
229
|
+
it("project-private ネスト指定: devDeps.@types/node が除外される", () => {
|
|
230
|
+
// Given: devDeps.@types/node が project-private
|
|
231
|
+
const jsonPaths = {
|
|
232
|
+
managed: {},
|
|
233
|
+
"project-private": { "test.json": ["devDeps.@types/node"] },
|
|
234
|
+
};
|
|
235
|
+
const template = { devDeps: { "@types/node": "20", typescript: "5" } };
|
|
236
|
+
const local = { devDeps: { typescript: "4" } };
|
|
237
|
+
// When
|
|
238
|
+
const result = processor.mergeJson(template, local, jsonPaths, "test.json");
|
|
239
|
+
// Then: @types/node は除外(追加されない)、typescript はマージ対象
|
|
240
|
+
expect(result.result.devDeps).not.toHaveProperty("@types/node");
|
|
241
|
+
expect(result.result.devDeps.typescript).toBe("4");
|
|
242
|
+
});
|
|
243
|
+
it("project-private キーがローカルにある場合、削除されないこと", () => {
|
|
244
|
+
const jsonPaths = {
|
|
245
|
+
managed: {},
|
|
246
|
+
"project-private": { "package.json": ["name", "version"] },
|
|
247
|
+
};
|
|
248
|
+
const base = { name: "old-name", version: "0.1.0", scripts: { build: "tsc" } };
|
|
249
|
+
const local = { name: "my-project", version: "1.0.0", scripts: { build: "tsc" } };
|
|
250
|
+
const template = { name: "template-name", version: "2.0.0", scripts: { build: "tsc --noEmit" } };
|
|
251
|
+
const result = processor.mergeJson(template, local, jsonPaths, "package.json", base);
|
|
252
|
+
// project-private キーはローカル値がそのまま保持される
|
|
253
|
+
expect(result.result.name).toBe("my-project");
|
|
254
|
+
expect(result.result.version).toBe("1.0.0");
|
|
255
|
+
// scripts.build はテンプレート変更あり → テンプレート適用
|
|
256
|
+
expect(result.result.scripts.build).toBe("tsc --noEmit");
|
|
257
|
+
expect(result.conflicts).toEqual([]);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
describe("mergeJson - managed", () => {
|
|
261
|
+
it("managed: テンプレート値で強制上書き", () => {
|
|
262
|
+
// Given: plansDirectory が managed
|
|
263
|
+
const jsonPaths = {
|
|
264
|
+
managed: { "settings.json": ["plansDirectory"] },
|
|
265
|
+
"project-private": {},
|
|
266
|
+
};
|
|
267
|
+
const template = { plansDirectory: "docs/plans", userSetting: "template" };
|
|
268
|
+
const local = { plansDirectory: "my-plans", userSetting: "local" };
|
|
269
|
+
const base = { plansDirectory: "old-plans", userSetting: "template" };
|
|
270
|
+
// When
|
|
271
|
+
const result = processor.mergeJson(template, local, jsonPaths, "settings.json", base);
|
|
272
|
+
// Then: plansDirectory はテンプレート値(managed)、userSetting はローカル保持
|
|
273
|
+
expect(result.result.plansDirectory).toBe("docs/plans");
|
|
274
|
+
expect(result.result.userSetting).toBe("local");
|
|
275
|
+
});
|
|
276
|
+
it("managed パスが初回sync(baseなし)でも強制上書きされること", () => {
|
|
277
|
+
const jsonPaths = {
|
|
278
|
+
managed: { "settings.json": ["plansDirectory"] },
|
|
279
|
+
"project-private": {},
|
|
280
|
+
};
|
|
281
|
+
const template = { plansDirectory: "docs/plans", userSetting: "template" };
|
|
282
|
+
const local = { plansDirectory: "my-plans", userSetting: "local" };
|
|
283
|
+
// base なし(初回sync)でも managed は強制上書き
|
|
284
|
+
const result = processor.mergeJson(template, local, jsonPaths, "settings.json");
|
|
285
|
+
expect(result.result.plansDirectory).toBe("docs/plans");
|
|
286
|
+
expect(result.result.userSetting).toBe("local"); // managed以外はローカル保持
|
|
287
|
+
expect(result.conflicts).toEqual([]);
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
describe("mergeJson - フルパスルックアップ", () => {
|
|
291
|
+
it(".claude/settings.json がフルパスで正しくマッチ", () => {
|
|
292
|
+
// Given: .claude/settings.json の plansDirectory が managed
|
|
293
|
+
const jsonPaths = {
|
|
294
|
+
managed: { ".claude/settings.json": ["plansDirectory"] },
|
|
295
|
+
"project-private": {},
|
|
296
|
+
};
|
|
297
|
+
const template = { plansDirectory: "docs/plans", hooks: {} };
|
|
298
|
+
const local = { plansDirectory: "my-plans", hooks: { custom: true } };
|
|
299
|
+
// When
|
|
300
|
+
const result = processor.mergeJson(template, local, jsonPaths, ".claude/settings.json");
|
|
301
|
+
// Then: plansDirectory はテンプレート値(managed)
|
|
302
|
+
expect(result.result.plansDirectory).toBe("docs/plans");
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
describe("mergeJson - ネストされたオブジェクト", () => {
|
|
306
|
+
it("3階層以上のネストでも3方向マージが正しく動作すること", () => {
|
|
307
|
+
const base = { a: { b: { c: 1, d: 2 } } };
|
|
308
|
+
const local = { a: { b: { c: 1, d: 5 } } }; // d を変更
|
|
309
|
+
const template = { a: { b: { c: 3, d: 2 } } }; // c を変更
|
|
310
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
311
|
+
// c はテンプレート変更 → テンプレート適用
|
|
312
|
+
// d はローカル変更 → ローカル保持
|
|
313
|
+
const nested = result.result.a;
|
|
314
|
+
const deepNested = nested.b;
|
|
315
|
+
expect(deepNested.c).toBe(3);
|
|
316
|
+
expect(deepNested.d).toBe(5);
|
|
317
|
+
expect(result.conflicts).toEqual([]);
|
|
318
|
+
});
|
|
319
|
+
it("ネストされたオブジェクト内でも3方向マージが動作する", () => {
|
|
320
|
+
// Given: scripts オブジェクト内の各キーを個別に変更
|
|
321
|
+
const base = { scripts: { build: "tsc", dev: "next dev", test: "vitest" } };
|
|
322
|
+
const local = { scripts: { build: "tsc", dev: "next dev --turbo", test: "vitest" } };
|
|
323
|
+
const template = { scripts: { build: "tsc --noEmit", dev: "next dev", test: "vitest" } };
|
|
324
|
+
// When
|
|
325
|
+
const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
|
|
326
|
+
// Then: build → template適用(local未変更)、dev → local保持(template未変更)、test → 変更なし
|
|
327
|
+
expect(result.result.scripts.build).toBe("tsc --noEmit");
|
|
328
|
+
expect(result.result.scripts.dev).toBe("next dev --turbo");
|
|
329
|
+
expect(result.result.scripts.test).toBe("vitest");
|
|
330
|
+
expect(result.conflicts).toEqual([]);
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
//# sourceMappingURL=json-processor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-processor.test.js","sourceRoot":"","sources":["../../../src/lib/sync/json-processor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,8 +27,13 @@ export declare class MetadataManager {
|
|
|
27
27
|
getBaseContent(filePath: string): Promise<BaseContent>;
|
|
28
28
|
/**
|
|
29
29
|
* ファイルハッシュを更新する
|
|
30
|
+
*
|
|
31
|
+
* @param metadata - 現在のメタデータ
|
|
32
|
+
* @param filePath - 対象ファイルパス
|
|
33
|
+
* @param content - ファイルの内容(ハッシュ計算に使用)
|
|
34
|
+
* @param baseContent - 前回sync時のテンプレートコンテンツ(3方向マージ用)
|
|
30
35
|
*/
|
|
31
|
-
updateFileHash(metadata: SyncMetadata, filePath: string, content: string): Promise<SyncMetadata>;
|
|
36
|
+
updateFileHash(metadata: SyncMetadata, filePath: string, content: string, baseContent?: string): Promise<SyncMetadata>;
|
|
32
37
|
/**
|
|
33
38
|
* SHA-256ハッシュを計算する(キャッシュあり)
|
|
34
39
|
* 同一ファイル内容の場合、2回目以降はキャッシュから取得
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAgB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAY;gBAEjB,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS;IAKtD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAwBnC;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY;IAWrC;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5D;;;;;;;OAOG;IACG,cAAc,CAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC;IAiBxB;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM;IAoBrD;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY;IAWtE;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA0B3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import fs from "fs-extra";
|
|
3
2
|
import { SyncMetadataSchema } from "../../types/sync.js";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
4
|
import { HashCache } from "./hash-cache.js";
|
|
5
5
|
/**
|
|
6
6
|
* メタデータ管理クラス
|
|
@@ -83,13 +83,15 @@ export class MetadataManager {
|
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* ファイルハッシュを更新する
|
|
86
|
+
*
|
|
87
|
+
* @param metadata - 現在のメタデータ
|
|
88
|
+
* @param filePath - 対象ファイルパス
|
|
89
|
+
* @param content - ファイルの内容(ハッシュ計算に使用)
|
|
90
|
+
* @param baseContent - 前回sync時のテンプレートコンテンツ(3方向マージ用)
|
|
86
91
|
*/
|
|
87
|
-
async updateFileHash(metadata, filePath, content) {
|
|
92
|
+
async updateFileHash(metadata, filePath, content, baseContent) {
|
|
88
93
|
const hash = this.calculateHash(content, filePath);
|
|
89
|
-
const fileMetadata = {
|
|
90
|
-
hash,
|
|
91
|
-
syncedAt: new Date().toISOString(),
|
|
92
|
-
};
|
|
94
|
+
const fileMetadata = Object.assign({ hash, syncedAt: new Date().toISOString() }, (baseContent !== undefined && { baseContent }));
|
|
93
95
|
return Object.assign(Object.assign({}, metadata), { files: Object.assign(Object.assign({}, metadata.files), { [filePath]: fileMetadata }) });
|
|
94
96
|
}
|
|
95
97
|
/**
|
|
@@ -137,6 +139,24 @@ export class MetadataManager {
|
|
|
137
139
|
lastSync: new Date().toISOString(),
|
|
138
140
|
templateVersion: "0.1.0",
|
|
139
141
|
files: {},
|
|
142
|
+
jsonPaths: {
|
|
143
|
+
managed: {
|
|
144
|
+
".claude/settings.json": ["plansDirectory", "includeCoAuthoredBy"],
|
|
145
|
+
".vscode/settings.json": [
|
|
146
|
+
"editor.codeActionsOnSave",
|
|
147
|
+
"editor.defaultFormatter",
|
|
148
|
+
"editor.formatOnSave",
|
|
149
|
+
"eslint.enable",
|
|
150
|
+
"prettier.enable",
|
|
151
|
+
"prettier.useEditorConfig",
|
|
152
|
+
"[json]",
|
|
153
|
+
"[jsonc]",
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
"project-private": {
|
|
157
|
+
"package.json": ["name", "version", "private", "workspaces", "packageManager", "volta"],
|
|
158
|
+
},
|
|
159
|
+
},
|
|
140
160
|
};
|
|
141
161
|
}
|
|
142
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-manager.js","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata-manager.js","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types/sync.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare const FileMetadataSchema: z.ZodObject<{
|
|
|
6
6
|
hash: z.ZodString;
|
|
7
7
|
syncedAt: z.ZodString;
|
|
8
8
|
conflicts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
+
baseContent: z.ZodOptional<z.ZodString>;
|
|
9
10
|
}, z.core.$strip>;
|
|
10
11
|
/**
|
|
11
12
|
* JSON パス設定の Zod スキーマ
|
|
@@ -27,6 +28,7 @@ export declare const SyncMetadataSchema: z.ZodObject<{
|
|
|
27
28
|
hash: z.ZodString;
|
|
28
29
|
syncedAt: z.ZodString;
|
|
29
30
|
conflicts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
baseContent: z.ZodOptional<z.ZodString>;
|
|
30
32
|
}, z.core.$strip>>;
|
|
31
33
|
jsonPaths: z.ZodOptional<z.ZodObject<{
|
|
32
34
|
managed: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
|
package/dist/types/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/types/sync.js
CHANGED
package/dist/types/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,+BAA+B;CACpE,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC;IAC/C,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -104,10 +104,10 @@ AskUserQuestion:
|
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
# dev-cli の場合
|
|
107
|
-
npx --yes @einja/dev-cli sync --only <categories> --dry-run --yes
|
|
107
|
+
npx --yes @einja/dev-cli@latest sync --only <categories> --dry-run --yes
|
|
108
108
|
|
|
109
109
|
# create-einja-app の場合
|
|
110
|
-
npx --yes create-einja-app sync --categories <categories> --dry-run
|
|
110
|
+
npx --yes create-einja-app@latest sync --categories <categories> --dry-run
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
> **注**: 両CLIでカテゴリ指定のオプション名が異なる(dev-cli: `--only` / create-einja-app: `--categories`)
|
|
@@ -156,13 +156,13 @@ AskUserQuestion:
|
|
|
156
156
|
|
|
157
157
|
```bash
|
|
158
158
|
# dev-cli(孤児削除あり)
|
|
159
|
-
npx --yes @einja/dev-cli sync --only <categories> --yes --json --clean
|
|
159
|
+
npx --yes @einja/dev-cli@latest sync --only <categories> --yes --json --clean
|
|
160
160
|
|
|
161
161
|
# dev-cli(孤児削除なし)
|
|
162
|
-
npx --yes @einja/dev-cli sync --only <categories> --yes --json
|
|
162
|
+
npx --yes @einja/dev-cli@latest sync --only <categories> --yes --json
|
|
163
163
|
|
|
164
164
|
# create-einja-app
|
|
165
|
-
npx --yes create-einja-app sync --categories <categories>
|
|
165
|
+
npx --yes create-einja-app@latest sync --categories <categories>
|
|
166
166
|
```
|
|
167
167
|
|
|
168
168
|
- dev-cli は `--json` オプションで構造化出力を取得しパースする
|
|
@@ -228,7 +228,7 @@ f. 解消結果を `Read` で確認し、ユーザーに表示
|
|
|
228
228
|
|
|
229
229
|
Step 4 で孤児削除を選択した場合、JSON出力の `summary.orphansDeleted` を確認し、削除されたファイル一覧を記録する(Step 9 の詳細表示で使用)。
|
|
230
230
|
|
|
231
|
-
Step 4 で孤児削除をスキップした場合、孤児ファイル一覧を再表示し「後で `npx --yes @einja/dev-cli sync --only <categories> --clean --yes` で削除できます」と案内する。
|
|
231
|
+
Step 4 で孤児削除をスキップした場合、孤児ファイル一覧を再表示し「後で `npx --yes @einja/dev-cli@latest sync --only <categories> --clean --yes` で削除できます」と案内する。
|
|
232
232
|
|
|
233
233
|
### Step 7: direnv allow 実行確認
|
|
234
234
|
|
|
@@ -202,6 +202,8 @@ sequenceDiagram
|
|
|
202
202
|
| `scripts` | `scripts/` | ユーティリティスクリプト(`_` プレフィックスは除外) |
|
|
203
203
|
| `env` | `.envrc` | direnv 設定 |
|
|
204
204
|
| `tools` | `.vscode/settings.json` | VS Code 設定 |
|
|
205
|
+
| `root-config` | `package.json`, `.mcp.json` | ルート設定ファイル |
|
|
206
|
+
| `claude-config` | `.claude/settings.json` | Claude Code設定 |
|
|
205
207
|
|
|
206
208
|
**マージ方式:**
|
|
207
209
|
|
|
@@ -213,6 +215,44 @@ sequenceDiagram
|
|
|
213
215
|
| JSON マージ | `.json` 拡張子のファイル | managed/project-private の JSON パス指定に基づきマージ |
|
|
214
216
|
| 3方向マージ | マーカーなしの通常ファイル | base(前回テンプレート)・local・template の3方向差分で自動マージ。コンフリクト時はマーカー付きで出力 |
|
|
215
217
|
|
|
218
|
+
#### JSON マージモード(3モード構成)
|
|
219
|
+
|
|
220
|
+
| モード | 動作 | 設定方法 |
|
|
221
|
+
|--------|------|---------|
|
|
222
|
+
| `managed` | テンプレート値で強制上書き | jsonPaths.managed にパス指定 |
|
|
223
|
+
| `project-private` | 完全除外(テンプレートから追加しない) | jsonPaths["project-private"] にパス指定 |
|
|
224
|
+
| デフォルト | 3方向マージ(base/local/template比較、コンフリクト検出) | 上記以外の全パス |
|
|
225
|
+
|
|
226
|
+
#### JSON ファイルの同期動作(3方向マージ)
|
|
227
|
+
|
|
228
|
+
| 操作 | 結果 |
|
|
229
|
+
|------|------|
|
|
230
|
+
| テンプレートに新キーが追加された(利用者は未変更) | sync時に利用者のファイルに追加される |
|
|
231
|
+
| 利用者が独自キーを追加した | 保持される |
|
|
232
|
+
| 利用者がテンプレート由来のキーを削除(テンプレート側は未変更) | 削除が維持される |
|
|
233
|
+
| 利用者がテンプレート由来のキーを変更(テンプレート側は未変更) | 利用者の変更が保持される |
|
|
234
|
+
| テンプレートがキーを更新(利用者側は未変更) | テンプレートの更新が自動適用される |
|
|
235
|
+
| 両方が同じキーを異なる値に変更 | コンフリクト警告(利用者の値を保持) |
|
|
236
|
+
| project-private 指定のキー | テンプレートから一切追加・変更されない |
|
|
237
|
+
| managed 指定のキー | テンプレート値で常に上書き |
|
|
238
|
+
|
|
239
|
+
#### ファイル別 jsonPaths 設定
|
|
240
|
+
|
|
241
|
+
| ファイル | managed | project-private | 残り |
|
|
242
|
+
|---------|---------|----------------|------|
|
|
243
|
+
| `package.json` | — | name, version, private, workspaces, packageManager, volta | 3方向マージ |
|
|
244
|
+
| `.claude/settings.json` | plansDirectory, includeCoAuthoredBy | — | 3方向マージ |
|
|
245
|
+
| `.vscode/settings.json` | editor.*, eslint.*, prettier.*, [json], [jsonc] | — | 3方向マージ |
|
|
246
|
+
| `.mcp.json` | — | — | 3方向マージ |
|
|
247
|
+
|
|
248
|
+
#### base スナップショット
|
|
249
|
+
|
|
250
|
+
3方向マージには「前回sync時のテンプレート内容」(base)が必要。
|
|
251
|
+
`.einja-sync.json` の `baseContent` フィールドに保存される。
|
|
252
|
+
|
|
253
|
+
- 初回sync(baseなし): ローカル優先 + テンプレートの新規キーのみ追加
|
|
254
|
+
- 2回目以降: base/local/template の3方向比較でマージ
|
|
255
|
+
|
|
216
256
|
#### create-einja-app sync の同期対象カテゴリ
|
|
217
257
|
|
|
218
258
|
| カテゴリ | 対象パターン | デフォルト選択 |
|