@voxgig/create-sdkgen 0.30.9 → 0.31.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.
package/README.md CHANGED
@@ -82,11 +82,22 @@ scaffold:
82
82
  create-sdkgen my-api -d ./openapi.yaml -o ./my-api-sdk
83
83
  ```
84
84
 
85
- A re-scaffold rewrites the scaffold's own files and keeps the project's: the
85
+ A re-scaffold refreshes the scaffold's own files and keeps the project's: the
86
86
  guide in `.sdk/model/guide/`, the project overlay `.sdk/model/project.aontu`,
87
87
  the README wording in `.sdk/model/text.aontu`, and the target, feature, and
88
88
  edition indexes with the files they name.
89
89
 
90
+ A scaffold file the project changed, such as `.sdk/src/Root.ts`, keeps the
91
+ change: the newer scaffold is merged into it, against what the last scaffold
92
+ wrote, which `.sdk/log/scaffold.jsonl` records. When both sides changed the
93
+ same lines, the re-scaffold stops and changes nothing, and leaves the
94
+ incoming files in `.sdk/log/scaffold-conflict/`. Fold the change in by hand
95
+ and re-run with `--keep`, or re-run with `--force` to take the incoming
96
+ scaffold. A project regenerated in full from the toolchain sets
97
+ `main: kit: copies: 'overwrite'` in `.sdk/model/project.aontu`, and then a
98
+ re-scaffold overwrites the scaffold files instead. sdkgen's adds follow the
99
+ same setting for the templates and components they copy.
100
+
90
101
  The same command brings a project from before the `.aontu` rename up to date,
91
102
  which it needs, because `aontu` now refuses to include a `.aon` file. The
92
103
  re-scaffold renames each `.aon` file under `.sdk/model/` and `.sdk/test/` to
package/bin/create-sdkgen CHANGED
@@ -97,6 +97,8 @@ async function generate(options) {
97
97
  project: options.project,
98
98
  folder: options.folder,
99
99
  install: options.install,
100
+ force: options.force,
101
+ keep: options.keep,
100
102
  target: options.target,
101
103
  feature: options.feature,
102
104
  }
@@ -145,6 +147,16 @@ function resolveOptions() {
145
147
  default: true,
146
148
  },
147
149
 
150
+ force: {
151
+ type: 'boolean',
152
+ default: false,
153
+ },
154
+
155
+ keep: {
156
+ type: 'boolean',
157
+ default: false,
158
+ },
159
+
148
160
  target: {
149
161
  type: 'string',
150
162
  short: 't',
@@ -208,6 +220,8 @@ function resolveOptions() {
208
220
  folder: args.values.folder,
209
221
  dryrun: !!args.values.dryrun,
210
222
  install: !!args.values.install,
223
+ force: !!args.values.force,
224
+ keep: !!args.values.keep,
211
225
  target: targets,
212
226
  feature: features,
213
227
  debug: args.values.debug,
@@ -233,6 +247,8 @@ function validateOptions(rawOptions) {
233
247
  folder: String,
234
248
  dryrun: Boolean,
235
249
  install: Boolean,
250
+ force: Boolean,
251
+ keep: Boolean,
236
252
  target: [String],
237
253
  feature: [String],
238
254
  debug: String,
@@ -281,8 +297,9 @@ Usage: npm create @voxgig/sdkgen@latest <name> -- <args>
281
297
  create-sdkgen <name> <args>
282
298
 
283
299
  <name> is the name of the SDK project. This is also used to
284
- create a project folder. If run against an existing folder
285
- generated files will be overwritten.
300
+ create a project folder. Run against an existing project, it
301
+ merges the newer scaffold into any scaffold file the project
302
+ changed, unless the project sets main: kit: copies: 'overwrite'.
286
303
 
287
304
  <args> are the command arguments. npm create keeps the options
288
305
  it reads itself (-d, -o, -t, -f, --dryrun, --no-install) unless
@@ -307,6 +324,12 @@ Usage: npm create @voxgig/sdkgen@latest <name> -- <args>
307
324
  --install Run installation scripts. Default: install.
308
325
  --no-install
309
326
 
327
+ --force On an existing project, take the incoming scaffold over
328
+ locally changed files instead of merging.
329
+
330
+ --keep On an existing project, keep each locally changed file
331
+ whose merge stops, recording the incoming file as its base.
332
+
310
333
  --dryrun Perform a dry run, where no files are modified. Default: no-dryrun.
311
334
 
312
335
  --debug Set log level (default: info): trace, error, debug, info, warn, fatal.
@@ -0,0 +1,35 @@
1
+ type CopyMode = 'merge' | 'overwrite';
2
+ declare const MERGE: CopyMode;
3
+ declare const OVERWRITE: CopyMode;
4
+ type GuardSpec = {
5
+ fs: any;
6
+ folder: string;
7
+ log: any;
8
+ mode: CopyMode;
9
+ what: string;
10
+ force?: boolean;
11
+ keep?: boolean;
12
+ dryrun?: boolean;
13
+ manage: (rel: string) => boolean;
14
+ recorded: (rel: string) => string | undefined;
15
+ fingerprint: (content: any) => string;
16
+ basedir: string;
17
+ conflictdir: string;
18
+ versions?: (abs: string) => Iterable<Buffer>;
19
+ error?: (msg: string) => Error;
20
+ };
21
+ type MergeOutcome = {
22
+ merged: string[];
23
+ kept: string[];
24
+ retained: string[];
25
+ spared: string[];
26
+ };
27
+ declare function copyMode(value: any): CopyMode;
28
+ declare function withCopyMerge<T>(spec: GuardSpec, run: (fs: any) => Promise<T>): Promise<T>;
29
+ declare function merge3(incoming: Buffer, base: Buffer, local: Buffer, what: string): {
30
+ conflict: boolean;
31
+ content: Buffer;
32
+ };
33
+ declare function gitVersions(abs: string, limit?: number): Iterable<Buffer>;
34
+ export type { CopyMode, GuardSpec, MergeOutcome, };
35
+ export { MERGE, OVERWRITE, copyMode, withCopyMerge, gitVersions, merge3, };
@@ -0,0 +1,510 @@
1
+ "use strict";
2
+ /* Copyright (c) 2026 Richard Rodger, MIT License */
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.OVERWRITE = exports.MERGE = void 0;
8
+ exports.copyMode = copyMode;
9
+ exports.withCopyMerge = withCopyMerge;
10
+ exports.gitVersions = gitVersions;
11
+ exports.merge3 = merge3;
12
+ // The copy merge @voxgig/sdkgen runs on an add, applied to a re-scaffold.
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ const node_fs_1 = require("node:fs");
15
+ const node_child_process_1 = require("node:child_process");
16
+ const jostraca_1 = require("jostraca");
17
+ const MERGE = 'merge';
18
+ exports.MERGE = MERGE;
19
+ const OVERWRITE = 'overwrite';
20
+ exports.OVERWRITE = OVERWRITE;
21
+ const DELETED = Symbol('deleted');
22
+ function copyMode(value) {
23
+ return OVERWRITE === value ? OVERWRITE : MERGE;
24
+ }
25
+ async function withCopyMerge(spec, run) {
26
+ if (MERGE !== spec.mode || true === spec.force || true === spec.dryrun) {
27
+ return run(spec.fs);
28
+ }
29
+ const guard = new CopyGuard(spec);
30
+ let result;
31
+ try {
32
+ result = await run(guard.fs);
33
+ }
34
+ catch (err) {
35
+ guard.rollback();
36
+ throw err;
37
+ }
38
+ guard.finish();
39
+ return result;
40
+ }
41
+ class CopyGuard {
42
+ constructor(spec) {
43
+ this.orig = new Map();
44
+ this.dirs = [];
45
+ this.edited = new Map();
46
+ this.pending = new Map();
47
+ this.touched = new Set();
48
+ this.spared = [];
49
+ this.spec = spec;
50
+ this.real = spec.fs;
51
+ this.root = node_path_1.default.resolve(spec.folder);
52
+ this.fs = this.wrap();
53
+ }
54
+ wrap() {
55
+ const real = this.real;
56
+ const gfs = {};
57
+ for (const key in real) {
58
+ const val = real[key];
59
+ gfs[key] = 'function' === typeof val ? val.bind(real) : val;
60
+ }
61
+ gfs.writeFileSync = (path, data, opts) => {
62
+ if (this.holds(path, toBuffer(data, opts))) {
63
+ return;
64
+ }
65
+ this.before(path);
66
+ return real.writeFileSync(path, data, opts);
67
+ };
68
+ gfs.appendFileSync = (path, data, opts) => {
69
+ this.before(path);
70
+ return real.appendFileSync(path, data, opts);
71
+ };
72
+ gfs.copyFileSync = (from, to, mode) => {
73
+ if (this.holds(to, Buffer.from(real.readFileSync(from)))) {
74
+ return;
75
+ }
76
+ this.before(to);
77
+ return real.copyFileSync(from, to, mode);
78
+ };
79
+ gfs.renameSync = (from, to) => {
80
+ const data = this.isFile(from) ? this.read(from) : undefined;
81
+ if (null != data && this.holds(to, data)) {
82
+ this.before(from);
83
+ real.unlinkSync(from);
84
+ return;
85
+ }
86
+ this.before(from);
87
+ this.before(to);
88
+ return real.renameSync(from, to);
89
+ };
90
+ gfs.unlinkSync = (path) => {
91
+ if (this.spares(path)) {
92
+ return;
93
+ }
94
+ this.before(path);
95
+ return real.unlinkSync(path);
96
+ };
97
+ gfs.mkdirSync = (path, opts) => {
98
+ const missing = this.missingDirs(path);
99
+ const res = real.mkdirSync(path, opts);
100
+ this.dirs.push(...missing.filter((dir) => real.existsSync(dir)));
101
+ return res;
102
+ };
103
+ gfs.readFileSync = (path, opts) => {
104
+ const held = 'string' === typeof path ?
105
+ this.pending.get(node_path_1.default.resolve(path)) : undefined;
106
+ if (held instanceof Buffer) {
107
+ const encoding = 'string' === typeof opts ? opts : opts?.encoding;
108
+ return null == encoding ? Buffer.from(held) : held.toString(encoding);
109
+ }
110
+ return real.readFileSync(path, opts);
111
+ };
112
+ return gfs;
113
+ }
114
+ rel(path) {
115
+ if ('string' !== typeof path) {
116
+ return undefined;
117
+ }
118
+ const rel = node_path_1.default.relative(this.root, node_path_1.default.resolve(path)).split(node_path_1.default.sep).join('/');
119
+ return ('' === rel || '..' === rel || rel.startsWith('../') || node_path_1.default.isAbsolute(rel)) ?
120
+ undefined : rel;
121
+ }
122
+ managed(rel) {
123
+ return null != rel &&
124
+ !within(rel, this.spec.basedir) && !within(rel, this.spec.conflictdir) &&
125
+ this.spec.manage(rel);
126
+ }
127
+ isFile(path) {
128
+ try {
129
+ return true === this.real.statSync(path)?.isFile();
130
+ }
131
+ catch (err) {
132
+ return false;
133
+ }
134
+ }
135
+ read(path) {
136
+ return Buffer.from(this.real.readFileSync(path));
137
+ }
138
+ createdHere(abs) {
139
+ return this.orig.has(abs) && null === this.orig.get(abs);
140
+ }
141
+ before(path) {
142
+ if ('string' !== typeof path) {
143
+ return;
144
+ }
145
+ const abs = node_path_1.default.resolve(path);
146
+ if (!this.orig.has(abs)) {
147
+ if (this.isFile(abs)) {
148
+ this.orig.set(abs, this.read(abs));
149
+ }
150
+ else if (!this.real.existsSync(abs)) {
151
+ this.orig.set(abs, null);
152
+ }
153
+ }
154
+ const rel = this.rel(abs);
155
+ if (this.managed(rel)) {
156
+ this.touched.add(rel);
157
+ }
158
+ }
159
+ // Was this file changed after the toolchain wrote it? Asked once, before
160
+ // the run writes it; a file the record does not hold counts as changed.
161
+ isEdited(rel, abs) {
162
+ let edited = this.edited.get(rel);
163
+ if (null == edited) {
164
+ const print = this.spec.recorded(rel);
165
+ edited = null == print || print !== this.spec.fingerprint(this.read(abs));
166
+ this.edited.set(rel, edited);
167
+ }
168
+ return edited;
169
+ }
170
+ // Defers a write over a locally changed file, leaving it on disk as it is.
171
+ holds(path, data) {
172
+ if ('string' !== typeof path) {
173
+ return false;
174
+ }
175
+ const abs = node_path_1.default.resolve(path);
176
+ const rel = this.rel(abs);
177
+ if (!this.managed(rel)) {
178
+ return false;
179
+ }
180
+ if (this.pending.has(abs)) {
181
+ this.pending.set(abs, data);
182
+ return true;
183
+ }
184
+ if (this.createdHere(abs) || !this.isFile(abs) || !this.isEdited(rel, abs)) {
185
+ return false;
186
+ }
187
+ if (sameText(this.read(abs), data)) {
188
+ return false;
189
+ }
190
+ this.pending.set(abs, data);
191
+ return true;
192
+ }
193
+ // A delete of a changed file, or of one no add wrote, leaves it in place.
194
+ spares(path) {
195
+ if ('string' !== typeof path) {
196
+ return false;
197
+ }
198
+ const abs = node_path_1.default.resolve(path);
199
+ const rel = this.rel(abs);
200
+ if (!this.managed(rel) || this.createdHere(abs) || !this.isFile(abs)) {
201
+ return false;
202
+ }
203
+ if (null == this.spec.recorded(rel)) {
204
+ this.spared.push(rel);
205
+ return true;
206
+ }
207
+ if (this.pending.has(abs) || this.isEdited(rel, abs)) {
208
+ this.pending.set(abs, DELETED);
209
+ return true;
210
+ }
211
+ return false;
212
+ }
213
+ missingDirs(path) {
214
+ if ('string' !== typeof path) {
215
+ return [];
216
+ }
217
+ const missing = [];
218
+ let dir = node_path_1.default.resolve(path);
219
+ while (!this.real.existsSync(dir) && node_path_1.default.dirname(dir) !== dir) {
220
+ missing.push(dir);
221
+ dir = node_path_1.default.dirname(dir);
222
+ }
223
+ return missing;
224
+ }
225
+ // An incoming copy the record already holds is its own base: the source
226
+ // did not move since the add that wrote it.
227
+ base(rel, incoming) {
228
+ const print = this.spec.recorded(rel);
229
+ if (null == print) {
230
+ return undefined;
231
+ }
232
+ if (print === this.spec.fingerprint(incoming)) {
233
+ return incoming;
234
+ }
235
+ const stored = this.storePath(this.spec.basedir, rel);
236
+ if (this.isFile(stored)) {
237
+ const base = this.read(stored);
238
+ if (print === this.spec.fingerprint(base)) {
239
+ return base;
240
+ }
241
+ }
242
+ for (const version of this.spec.versions?.(node_path_1.default.join(this.root, rel)) ?? []) {
243
+ if (print === this.spec.fingerprint(version)) {
244
+ return version;
245
+ }
246
+ }
247
+ return undefined;
248
+ }
249
+ storePath(dir, rel) {
250
+ return node_path_1.default.join(this.root, ...dir.split('/'), ...rel.split('/'));
251
+ }
252
+ finish() {
253
+ const outcome = { merged: [], kept: [], retained: [], spared: this.spared };
254
+ const conflicts = [];
255
+ const writes = [];
256
+ const bases = new Map();
257
+ for (const [abs, incoming] of this.pending) {
258
+ const rel = this.rel(abs);
259
+ if (DELETED === incoming) {
260
+ outcome.retained.push(rel);
261
+ continue;
262
+ }
263
+ const local = this.read(abs);
264
+ const base = this.base(rel, incoming);
265
+ let conflict;
266
+ let merged;
267
+ if (null == base) {
268
+ conflict = { rel, why: 'nobase', preview: incoming };
269
+ }
270
+ else if (isBinary(incoming) || isBinary(local) || isBinary(base)) {
271
+ conflict = { rel, why: 'binary', preview: incoming };
272
+ }
273
+ else {
274
+ const res = merge3(incoming, base, local, this.spec.what);
275
+ if (res.conflict) {
276
+ conflict = { rel, why: 'conflict', preview: res.content };
277
+ }
278
+ else {
279
+ merged = res.content;
280
+ }
281
+ }
282
+ if (null != conflict && true === this.spec.keep) {
283
+ outcome.kept.push(rel);
284
+ bases.set(rel, incoming);
285
+ }
286
+ else if (null != conflict) {
287
+ conflicts.push(conflict);
288
+ }
289
+ else {
290
+ writes.push([abs, merged]);
291
+ outcome.merged.push(rel);
292
+ bases.set(rel, incoming);
293
+ }
294
+ }
295
+ if (0 < conflicts.length) {
296
+ this.rollback();
297
+ this.previews(conflicts);
298
+ throw this.failure(conflicts);
299
+ }
300
+ for (const [abs, content] of writes) {
301
+ if (!sameText(this.read(abs), content)) {
302
+ this.writeAtomic(abs, content);
303
+ }
304
+ }
305
+ this.keepBases(bases);
306
+ this.clearDir(this.spec.conflictdir);
307
+ this.report(outcome);
308
+ return outcome;
309
+ }
310
+ // The store holds a base only where the file differs from it: elsewhere
311
+ // the file itself, checked against the record, is the base.
312
+ keepBases(bases) {
313
+ for (const rel of new Set([...this.touched, ...bases.keys()])) {
314
+ const at = this.storePath(this.spec.basedir, rel);
315
+ const base = bases.get(rel);
316
+ if (null != base) {
317
+ this.real.mkdirSync(node_path_1.default.dirname(at), { recursive: true });
318
+ this.real.writeFileSync(at, base);
319
+ }
320
+ else if (this.isFile(at)) {
321
+ this.real.unlinkSync(at);
322
+ }
323
+ }
324
+ }
325
+ rollback() {
326
+ for (const [abs, content] of Array.from(this.orig).reverse()) {
327
+ try {
328
+ if (null != content) {
329
+ this.real.writeFileSync(abs, content);
330
+ }
331
+ else if (this.isFile(abs)) {
332
+ this.real.unlinkSync(abs);
333
+ }
334
+ }
335
+ catch (err) {
336
+ this.spec.log.warn({
337
+ point: 'copy-merge-rollback', file: abs, err: err?.message,
338
+ note: 'could not restore ' + abs + ': ' + err?.message,
339
+ });
340
+ }
341
+ }
342
+ for (const dir of [...this.dirs].reverse()) {
343
+ try {
344
+ if (0 === this.real.readdirSync(dir).length) {
345
+ this.real.rmdirSync(dir);
346
+ }
347
+ }
348
+ catch (err) {
349
+ continue;
350
+ }
351
+ }
352
+ }
353
+ previews(conflicts) {
354
+ this.clearDir(this.spec.conflictdir);
355
+ const dir = this.storePath(this.spec.conflictdir, '');
356
+ this.real.mkdirSync(dir, { recursive: true });
357
+ this.real.writeFileSync(node_path_1.default.join(dir, '.gitignore'), '*\n');
358
+ for (const conflict of conflicts) {
359
+ const at = this.storePath(this.spec.conflictdir, conflict.rel);
360
+ this.real.mkdirSync(node_path_1.default.dirname(at), { recursive: true });
361
+ this.real.writeFileSync(at, conflict.preview ?? Buffer.alloc(0));
362
+ }
363
+ }
364
+ clearDir(rel) {
365
+ const dir = this.storePath(rel, '');
366
+ if (this.real.existsSync(dir)) {
367
+ this.real.rmSync(dir, { recursive: true, force: true });
368
+ }
369
+ }
370
+ writeAtomic(abs, content) {
371
+ const tmp = abs + '.copymerge-' + process.pid + '-' + Date.now();
372
+ this.real.writeFileSync(tmp, content);
373
+ this.real.renameSync(tmp, abs);
374
+ }
375
+ failure(conflicts) {
376
+ const why = {
377
+ conflict: 'the incoming copy and the local change touch the same lines',
378
+ nobase: 'no record of what the toolchain wrote here, so nothing to merge ' +
379
+ 'against; a base is found in git once the copies an add writes are committed',
380
+ binary: 'a binary file, which is never merged',
381
+ };
382
+ const shown = this.spec.conflictdir;
383
+ const msg = this.spec.what + ': ' + conflicts.length +
384
+ ' locally changed file(s) cannot take the incoming copy, so nothing was changed:\n ' +
385
+ conflicts.map((c) => c.rel + ' (' + why[c.why] + ')').join('\n ') +
386
+ '\n\n The incoming copies are in ' + shown + '/, with conflict markers where ' +
387
+ 'both sides changed the same lines. Then either:' +
388
+ '\n - fold the incoming change into the local file by hand and re-run with ' +
389
+ '--keep, which keeps the local files and records the incoming copies as ' +
390
+ 'their base;' +
391
+ '\n - or re-run with --force, which takes the incoming copies and discards ' +
392
+ 'the local changes.';
393
+ return null == this.spec.error ? new Error(msg) : this.spec.error(msg);
394
+ }
395
+ report(outcome) {
396
+ const log = this.spec.log;
397
+ if (0 < outcome.merged.length) {
398
+ log.info({
399
+ point: 'copy-merge-merged', files: outcome.merged,
400
+ note: this.spec.what + ': merged the incoming copy into ' +
401
+ outcome.merged.length + ' locally changed file(s): ' + outcome.merged.join(', ')
402
+ });
403
+ }
404
+ if (0 < outcome.kept.length) {
405
+ log.warn({
406
+ point: 'copy-merge-kept', files: outcome.kept,
407
+ note: this.spec.what + ': --keep, kept ' + outcome.kept.length +
408
+ ' local file(s) as they are: ' + outcome.kept.join(', ')
409
+ });
410
+ }
411
+ if (0 < outcome.retained.length) {
412
+ log.warn({
413
+ point: 'copy-merge-retained', files: outcome.retained,
414
+ note: this.spec.what + ': the source no longer provides ' +
415
+ outcome.retained.length + ' locally changed file(s), left in place: ' +
416
+ outcome.retained.join(', ')
417
+ });
418
+ }
419
+ if (0 < outcome.spared.length) {
420
+ log.info({
421
+ point: 'copy-merge-spared', files: outcome.spared,
422
+ note: this.spec.what + ': left ' + outcome.spared.length +
423
+ ' file(s) no add wrote in place: ' + outcome.spared.join(', ')
424
+ });
425
+ }
426
+ }
427
+ }
428
+ function merge3(incoming, base, local, what) {
429
+ const text = (bytes) => bytes.toString('latin1').replace(/\r\n/g, '\n');
430
+ const res = jostraca_1.DiffUtil.merge(text(incoming), text(base), text(local), {
431
+ labels: { generated: 'INCOMING (' + what + ')', existing: 'LOCAL' },
432
+ });
433
+ return {
434
+ conflict: true === res.conflict || 'unresolved' === res.outcome,
435
+ content: Buffer.from(res.content, 'latin1'),
436
+ };
437
+ }
438
+ function within(rel, dir) {
439
+ return rel === dir || rel.startsWith(dir + '/');
440
+ }
441
+ function toBuffer(data, opts) {
442
+ if (Buffer.isBuffer(data)) {
443
+ return data;
444
+ }
445
+ if (ArrayBuffer.isView(data)) {
446
+ return Buffer.from(data.buffer, data.byteOffset, data.byteLength);
447
+ }
448
+ const encoding = ('string' === typeof opts ? opts : opts?.encoding) || 'utf8';
449
+ return Buffer.from(String(data), encoding);
450
+ }
451
+ function sameText(a, b) {
452
+ return a.toString('latin1').replace(/\r\n/g, '\n') ===
453
+ b.toString('latin1').replace(/\r\n/g, '\n');
454
+ }
455
+ function isBinary(bytes) {
456
+ return 0 <= bytes.subarray(0, 8000).indexOf(0);
457
+ }
458
+ // Committed versions of a file, newest first: the index, HEAD, then the
459
+ // commits that touched it. Nothing outside a git checkout.
460
+ function gitVersions(abs, limit = 20) {
461
+ return {
462
+ *[Symbol.iterator]() {
463
+ let top;
464
+ let rel;
465
+ try {
466
+ const dir = node_path_1.default.dirname(abs);
467
+ top = git(dir, ['rev-parse', '--show-toplevel']).toString().trim();
468
+ const real = node_path_1.default.join((0, node_fs_1.realpathSync)(dir), node_path_1.default.basename(abs));
469
+ rel = node_path_1.default.relative(top, real).split(node_path_1.default.sep).join('/');
470
+ }
471
+ catch (err) {
472
+ return;
473
+ }
474
+ const shown = (spec) => {
475
+ try {
476
+ return git(top, ['show', spec]);
477
+ }
478
+ catch (err) {
479
+ return undefined;
480
+ }
481
+ };
482
+ for (const spec of [':' + rel, 'HEAD:' + rel]) {
483
+ const version = shown(spec);
484
+ if (null != version) {
485
+ yield version;
486
+ }
487
+ }
488
+ let shas = [];
489
+ try {
490
+ shas = git(top, ['log', '--format=%H', '-n', String(limit), '--', rel])
491
+ .toString().split('\n').filter(Boolean);
492
+ }
493
+ catch (err) {
494
+ return;
495
+ }
496
+ for (const sha of shas) {
497
+ const version = shown(sha + ':' + rel);
498
+ if (null != version) {
499
+ yield version;
500
+ }
501
+ }
502
+ }
503
+ };
504
+ }
505
+ function git(cwd, args) {
506
+ return (0, node_child_process_1.execFileSync)('git', args, {
507
+ cwd, stdio: ['ignore', 'pipe', 'ignore'], maxBuffer: 256 * 1024 * 1024,
508
+ });
509
+ }
510
+ //# sourceMappingURL=copymerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copymerge.js","sourceRoot":"","sources":["../src/copymerge.ts"],"names":[],"mappings":"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"}