@patterkit/cli 0.4.0 → 0.5.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.
Files changed (3) hide show
  1. package/README.md +11 -0
  2. package/dist/cli.js +243 -175
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -157,6 +157,17 @@ patter stats --xlsx report.xlsx
157
157
  patter report --json | jq '.totals'
158
158
  ```
159
159
 
160
+ ### `patter share-scopes [path] [--at <dir>]`
161
+
162
+ Share the project's scopes with the game's other editing tools, as Patterpad's **File > Share Scopes
163
+ with Other Tools** does: makes the game's `game-scopes/` folder (in `--at`, else at the
164
+ version-control root above the project, else beside it) with `patter.scopes.json` and a
165
+ `game.scopes.json` holding the project's own game scopes (its World properties), which the project
166
+ keeps as its synced copy. A folder another tool already made is joined, not replaced: its
167
+ `game.scopes.json` keeps every scope it holds and gains only the ones it lacks. When looking up from
168
+ the project wouldn't find the folder, the project names it in `gameScopes`. A project that already
169
+ shares its scopes is refused.
170
+
160
171
  ### `patter pack [path] -o <file.patterpack>`
161
172
 
162
173
  Pack a project (the `.patter` folder) into a single portable **`.patterpack`** - a
package/dist/cli.js CHANGED
@@ -3609,7 +3609,7 @@ var require_worksheet = __commonJS({
3609
3609
  // =========================================================================
3610
3610
  // Worksheet Protection
3611
3611
  protect(password, options) {
3612
- return new Promise((resolve8) => {
3612
+ return new Promise((resolve9) => {
3613
3613
  this.sheetProtection = {
3614
3614
  sheet: true
3615
3615
  };
@@ -3633,7 +3633,7 @@ var require_worksheet = __commonJS({
3633
3633
  delete this.sheetProtection.spinCount;
3634
3634
  }
3635
3635
  }
3636
- resolve8();
3636
+ resolve9();
3637
3637
  });
3638
3638
  }
3639
3639
  unprotect() {
@@ -4353,7 +4353,7 @@ var require_BufferList = __commonJS({
4353
4353
  this.head = this.tail = null;
4354
4354
  this.length = 0;
4355
4355
  };
4356
- BufferList.prototype.join = function join10(s) {
4356
+ BufferList.prototype.join = function join11(s) {
4357
4357
  if (this.length === 0) return "";
4358
4358
  var p = this.head;
4359
4359
  var ret2 = "" + p.data;
@@ -6330,8 +6330,8 @@ var require_lib2 = __commonJS({
6330
6330
  return this;
6331
6331
  }
6332
6332
  var p = this.constructor;
6333
- return this.then(resolve9, reject3);
6334
- function resolve9(value) {
6333
+ return this.then(resolve10, reject3);
6334
+ function resolve10(value) {
6335
6335
  function yes() {
6336
6336
  return value;
6337
6337
  }
@@ -6484,8 +6484,8 @@ var require_lib2 = __commonJS({
6484
6484
  }
6485
6485
  return out;
6486
6486
  }
6487
- Promise2.resolve = resolve8;
6488
- function resolve8(value) {
6487
+ Promise2.resolve = resolve9;
6488
+ function resolve9(value) {
6489
6489
  if (value instanceof this) {
6490
6490
  return value;
6491
6491
  }
@@ -7017,10 +7017,10 @@ var require_utils = __commonJS({
7017
7017
  var promise = external.Promise.resolve(inputData).then(function(data) {
7018
7018
  var isBlob = support.blob && (data instanceof Blob || ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(data)) !== -1);
7019
7019
  if (isBlob && typeof FileReader !== "undefined") {
7020
- return new external.Promise(function(resolve8, reject2) {
7020
+ return new external.Promise(function(resolve9, reject2) {
7021
7021
  var reader = new FileReader();
7022
7022
  reader.onload = function(e) {
7023
- resolve8(e.target.result);
7023
+ resolve9(e.target.result);
7024
7024
  };
7025
7025
  reader.onerror = function(e) {
7026
7026
  reject2(e.target.error);
@@ -7575,7 +7575,7 @@ var require_StreamHelper = __commonJS({
7575
7575
  }
7576
7576
  }
7577
7577
  function accumulate(helper, updateCallback) {
7578
- return new external.Promise(function(resolve8, reject2) {
7578
+ return new external.Promise(function(resolve9, reject2) {
7579
7579
  var dataArray = [];
7580
7580
  var chunkType = helper._internalType, resultType = helper._outputType, mimeType = helper._mimeType;
7581
7581
  helper.on("data", function(data, meta) {
@@ -7589,7 +7589,7 @@ var require_StreamHelper = __commonJS({
7589
7589
  }).on("end", function() {
7590
7590
  try {
7591
7591
  var result = transformZipOutput(resultType, concat2(chunkType, dataArray), mimeType);
7592
- resolve8(result);
7592
+ resolve9(result);
7593
7593
  } catch (e) {
7594
7594
  reject2(e);
7595
7595
  }
@@ -13702,7 +13702,7 @@ var require_load = __commonJS({
13702
13702
  var Crc32Probe = require_Crc32Probe();
13703
13703
  var nodejsUtils = require_nodejsUtils();
13704
13704
  function checkEntryCRC32(zipEntry) {
13705
- return new external.Promise(function(resolve8, reject2) {
13705
+ return new external.Promise(function(resolve9, reject2) {
13706
13706
  var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());
13707
13707
  worker.on("error", function(e) {
13708
13708
  reject2(e);
@@ -13710,7 +13710,7 @@ var require_load = __commonJS({
13710
13710
  if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {
13711
13711
  reject2(new Error("Corrupted zip : CRC32 mismatch"));
13712
13712
  } else {
13713
- resolve8();
13713
+ resolve9();
13714
13714
  }
13715
13715
  }).resume();
13716
13716
  });
@@ -13939,7 +13939,7 @@ var require_buffer_list = __commonJS({
13939
13939
  }
13940
13940
  }, {
13941
13941
  key: "join",
13942
- value: function join10(s) {
13942
+ value: function join11(s) {
13943
13943
  if (this.length === 0) return "";
13944
13944
  var p = this.head;
13945
13945
  var ret2 = "" + p.data;
@@ -14967,14 +14967,14 @@ var require_async_iterator = __commonJS({
14967
14967
  };
14968
14968
  }
14969
14969
  function readAndResolve(iter) {
14970
- var resolve8 = iter[kLastResolve];
14971
- if (resolve8 !== null) {
14970
+ var resolve9 = iter[kLastResolve];
14971
+ if (resolve9 !== null) {
14972
14972
  var data = iter[kStream].read();
14973
14973
  if (data !== null) {
14974
14974
  iter[kLastPromise] = null;
14975
14975
  iter[kLastResolve] = null;
14976
14976
  iter[kLastReject] = null;
14977
- resolve8(createIterResult(data, false));
14977
+ resolve9(createIterResult(data, false));
14978
14978
  }
14979
14979
  }
14980
14980
  }
@@ -14982,13 +14982,13 @@ var require_async_iterator = __commonJS({
14982
14982
  process.nextTick(readAndResolve, iter);
14983
14983
  }
14984
14984
  function wrapForNext(lastPromise, iter) {
14985
- return function(resolve8, reject2) {
14985
+ return function(resolve9, reject2) {
14986
14986
  lastPromise.then(function() {
14987
14987
  if (iter[kEnded]) {
14988
- resolve8(createIterResult(void 0, true));
14988
+ resolve9(createIterResult(void 0, true));
14989
14989
  return;
14990
14990
  }
14991
- iter[kHandlePromise](resolve8, reject2);
14991
+ iter[kHandlePromise](resolve9, reject2);
14992
14992
  }, reject2);
14993
14993
  };
14994
14994
  }
@@ -15008,12 +15008,12 @@ var require_async_iterator = __commonJS({
15008
15008
  return Promise.resolve(createIterResult(void 0, true));
15009
15009
  }
15010
15010
  if (this[kStream].destroyed) {
15011
- return new Promise(function(resolve8, reject2) {
15011
+ return new Promise(function(resolve9, reject2) {
15012
15012
  process.nextTick(function() {
15013
15013
  if (_this[kError]) {
15014
15014
  reject2(_this[kError]);
15015
15015
  } else {
15016
- resolve8(createIterResult(void 0, true));
15016
+ resolve9(createIterResult(void 0, true));
15017
15017
  }
15018
15018
  });
15019
15019
  });
@@ -15036,13 +15036,13 @@ var require_async_iterator = __commonJS({
15036
15036
  return this;
15037
15037
  }), _defineProperty2(_Object$setPrototypeO, "return", function _return() {
15038
15038
  var _this2 = this;
15039
- return new Promise(function(resolve8, reject2) {
15039
+ return new Promise(function(resolve9, reject2) {
15040
15040
  _this2[kStream].destroy(null, function(err) {
15041
15041
  if (err) {
15042
15042
  reject2(err);
15043
15043
  return;
15044
15044
  }
15045
- resolve8(createIterResult(void 0, true));
15045
+ resolve9(createIterResult(void 0, true));
15046
15046
  });
15047
15047
  });
15048
15048
  }), _Object$setPrototypeO), AsyncIteratorPrototype);
@@ -15064,15 +15064,15 @@ var require_async_iterator = __commonJS({
15064
15064
  value: stream2._readableState.endEmitted,
15065
15065
  writable: true
15066
15066
  }), _defineProperty2(_Object$create, kHandlePromise, {
15067
- value: function value(resolve8, reject2) {
15067
+ value: function value(resolve9, reject2) {
15068
15068
  var data = iterator[kStream].read();
15069
15069
  if (data) {
15070
15070
  iterator[kLastPromise] = null;
15071
15071
  iterator[kLastResolve] = null;
15072
15072
  iterator[kLastReject] = null;
15073
- resolve8(createIterResult(data, false));
15073
+ resolve9(createIterResult(data, false));
15074
15074
  } else {
15075
- iterator[kLastResolve] = resolve8;
15075
+ iterator[kLastResolve] = resolve9;
15076
15076
  iterator[kLastReject] = reject2;
15077
15077
  }
15078
15078
  },
@@ -15091,12 +15091,12 @@ var require_async_iterator = __commonJS({
15091
15091
  iterator[kError] = err;
15092
15092
  return;
15093
15093
  }
15094
- var resolve8 = iterator[kLastResolve];
15095
- if (resolve8 !== null) {
15094
+ var resolve9 = iterator[kLastResolve];
15095
+ if (resolve9 !== null) {
15096
15096
  iterator[kLastPromise] = null;
15097
15097
  iterator[kLastResolve] = null;
15098
15098
  iterator[kLastReject] = null;
15099
- resolve8(createIterResult(void 0, true));
15099
+ resolve9(createIterResult(void 0, true));
15100
15100
  }
15101
15101
  iterator[kEnded] = true;
15102
15102
  });
@@ -15111,7 +15111,7 @@ var require_async_iterator = __commonJS({
15111
15111
  var require_from = __commonJS({
15112
15112
  "../../node_modules/readable-stream/lib/internal/streams/from.js"(exports2, module2) {
15113
15113
  "use strict";
15114
- function asyncGeneratorStep2(gen, resolve8, reject2, _next, _throw, key2, arg) {
15114
+ function asyncGeneratorStep2(gen, resolve9, reject2, _next, _throw, key2, arg) {
15115
15115
  try {
15116
15116
  var info = gen[key2](arg);
15117
15117
  var value = info.value;
@@ -15120,7 +15120,7 @@ var require_from = __commonJS({
15120
15120
  return;
15121
15121
  }
15122
15122
  if (info.done) {
15123
- resolve8(value);
15123
+ resolve9(value);
15124
15124
  } else {
15125
15125
  Promise.resolve(value).then(_next, _throw);
15126
15126
  }
@@ -15128,13 +15128,13 @@ var require_from = __commonJS({
15128
15128
  function _asyncToGenerator2(fn) {
15129
15129
  return function() {
15130
15130
  var self2 = this, args = arguments;
15131
- return new Promise(function(resolve8, reject2) {
15131
+ return new Promise(function(resolve9, reject2) {
15132
15132
  var gen = fn.apply(self2, args);
15133
15133
  function _next(value) {
15134
- asyncGeneratorStep2(gen, resolve8, reject2, _next, _throw, "next", value);
15134
+ asyncGeneratorStep2(gen, resolve9, reject2, _next, _throw, "next", value);
15135
15135
  }
15136
15136
  function _throw(err) {
15137
- asyncGeneratorStep2(gen, resolve8, reject2, _next, _throw, "throw", err);
15137
+ asyncGeneratorStep2(gen, resolve9, reject2, _next, _throw, "throw", err);
15138
15138
  }
15139
15139
  _next(void 0);
15140
15140
  });
@@ -16223,14 +16223,14 @@ var require_utils2 = __commonJS({
16223
16223
  nop() {
16224
16224
  },
16225
16225
  promiseImmediate(value) {
16226
- return new Promise((resolve8) => {
16226
+ return new Promise((resolve9) => {
16227
16227
  if (global.setImmediate) {
16228
16228
  setImmediate(() => {
16229
- resolve8(value);
16229
+ resolve9(value);
16230
16230
  });
16231
16231
  } else {
16232
16232
  setTimeout(() => {
16233
- resolve8(value);
16233
+ resolve9(value);
16234
16234
  }, 1);
16235
16235
  }
16236
16236
  });
@@ -16330,9 +16330,9 @@ var require_utils2 = __commonJS({
16330
16330
  },
16331
16331
  fs: {
16332
16332
  exists(path) {
16333
- return new Promise((resolve8) => {
16333
+ return new Promise((resolve9) => {
16334
16334
  fs4.access(path, fs4.constants.F_OK, (err) => {
16335
- resolve8(!err);
16335
+ resolve9(!err);
16336
16336
  });
16337
16337
  });
16338
16338
  }
@@ -16557,9 +16557,9 @@ var require_stream_buf = __commonJS({
16557
16557
  },
16558
16558
  async _pipe(chunk) {
16559
16559
  const write2 = function(pipe) {
16560
- return new Promise((resolve8) => {
16560
+ return new Promise((resolve9) => {
16561
16561
  pipe.write(chunk.toBuffer(), () => {
16562
- resolve8();
16562
+ resolve9();
16563
16563
  });
16564
16564
  });
16565
16565
  };
@@ -28569,12 +28569,12 @@ var require_xlsx = __commonJS({
28569
28569
  var VmlNotesXform = require_vml_notes_xform();
28570
28570
  var theme1Xml = require_theme1();
28571
28571
  function fsReadFileAsync(filename, options) {
28572
- return new Promise((resolve8, reject2) => {
28572
+ return new Promise((resolve9, reject2) => {
28573
28573
  fs4.readFile(filename, options, (error, data) => {
28574
28574
  if (error) {
28575
28575
  reject2(error);
28576
28576
  } else {
28577
- resolve8(data);
28577
+ resolve9(data);
28578
28578
  }
28579
28579
  });
28580
28580
  });
@@ -28701,7 +28701,7 @@ var require_xlsx = __commonJS({
28701
28701
  if (lastDot >= 1) {
28702
28702
  const extension = filename.substr(lastDot + 1);
28703
28703
  const name = filename.substr(0, lastDot);
28704
- await new Promise((resolve8, reject2) => {
28704
+ await new Promise((resolve9, reject2) => {
28705
28705
  const streamBuf = new StreamBuf();
28706
28706
  streamBuf.on("finish", () => {
28707
28707
  model.mediaIndex[filename] = model.media.length;
@@ -28713,7 +28713,7 @@ var require_xlsx = __commonJS({
28713
28713
  buffer: streamBuf.toBuffer()
28714
28714
  };
28715
28715
  model.media.push(medium);
28716
- resolve8();
28716
+ resolve9();
28717
28717
  });
28718
28718
  entry.on("error", (error) => {
28719
28719
  reject2(error);
@@ -28738,13 +28738,13 @@ var require_xlsx = __commonJS({
28738
28738
  model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;
28739
28739
  }
28740
28740
  async _processThemeEntry(entry, model, name) {
28741
- await new Promise((resolve8, reject2) => {
28741
+ await new Promise((resolve9, reject2) => {
28742
28742
  const stream2 = new StreamBuf();
28743
28743
  entry.on("error", reject2);
28744
28744
  stream2.on("error", reject2);
28745
28745
  stream2.on("finish", () => {
28746
28746
  model.themes[name] = stream2.read().toString();
28747
- resolve8();
28747
+ resolve9();
28748
28748
  });
28749
28749
  entry.pipe(stream2);
28750
28750
  });
@@ -29052,9 +29052,9 @@ var require_xlsx = __commonJS({
29052
29052
  });
29053
29053
  }
29054
29054
  _finalize(zip) {
29055
- return new Promise((resolve8, reject2) => {
29055
+ return new Promise((resolve9, reject2) => {
29056
29056
  zip.on("finish", () => {
29057
- resolve8(this);
29057
+ resolve9(this);
29058
29058
  });
29059
29059
  zip.on("error", reject2);
29060
29060
  zip.finalize();
@@ -29114,9 +29114,9 @@ var require_xlsx = __commonJS({
29114
29114
  }
29115
29115
  writeFile(filename, options) {
29116
29116
  const stream2 = fs4.createWriteStream(filename);
29117
- return new Promise((resolve8, reject2) => {
29117
+ return new Promise((resolve9, reject2) => {
29118
29118
  stream2.on("finish", () => {
29119
- resolve8();
29119
+ resolve9();
29120
29120
  });
29121
29121
  stream2.on("error", (error) => {
29122
29122
  reject2(error);
@@ -33253,7 +33253,7 @@ var require_csv = __commonJS({
33253
33253
  }
33254
33254
  read(stream2, options) {
33255
33255
  options = options || {};
33256
- return new Promise((resolve8, reject2) => {
33256
+ return new Promise((resolve9, reject2) => {
33257
33257
  const worksheet = this.workbook.addWorksheet(options.sheetName);
33258
33258
  const dateFormats = options.dateFormats || [
33259
33259
  "YYYY-MM-DD[T]HH:mm:ssZ",
@@ -33293,7 +33293,7 @@ var require_csv = __commonJS({
33293
33293
  }).on("end", () => {
33294
33294
  csvStream.emit("worksheet", worksheet);
33295
33295
  });
33296
- csvStream.on("worksheet", resolve8).on("error", reject2);
33296
+ csvStream.on("worksheet", resolve9).on("error", reject2);
33297
33297
  stream2.pipe(csvStream);
33298
33298
  });
33299
33299
  }
@@ -33306,12 +33306,12 @@ var require_csv = __commonJS({
33306
33306
  );
33307
33307
  }
33308
33308
  write(stream2, options) {
33309
- return new Promise((resolve8, reject2) => {
33309
+ return new Promise((resolve9, reject2) => {
33310
33310
  options = options || {};
33311
33311
  const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);
33312
33312
  const csvStream = fastCsv.format(options.formatterOptions);
33313
33313
  stream2.on("finish", () => {
33314
- resolve8();
33314
+ resolve9();
33315
33315
  });
33316
33316
  csvStream.on("error", reject2);
33317
33317
  csvStream.pipe(stream2);
@@ -34534,9 +34534,9 @@ var require_readdir_glob = __commonJS({
34534
34534
  var fs4 = __require("fs");
34535
34535
  var { EventEmitter } = __require("events");
34536
34536
  var { Minimatch } = require_minimatch();
34537
- var { resolve: resolve8 } = __require("path");
34537
+ var { resolve: resolve9 } = __require("path");
34538
34538
  function readdir(dir2, strict) {
34539
- return new Promise((resolve9, reject2) => {
34539
+ return new Promise((resolve10, reject2) => {
34540
34540
  fs4.readdir(dir2, { withFileTypes: true }, (err, files) => {
34541
34541
  if (err) {
34542
34542
  switch (err.code) {
@@ -34544,7 +34544,7 @@ var require_readdir_glob = __commonJS({
34544
34544
  if (strict) {
34545
34545
  reject2(err);
34546
34546
  } else {
34547
- resolve9([]);
34547
+ resolve10([]);
34548
34548
  }
34549
34549
  break;
34550
34550
  case "ENOTSUP":
@@ -34554,7 +34554,7 @@ var require_readdir_glob = __commonJS({
34554
34554
  case "ENAMETOOLONG":
34555
34555
  // Filename too long
34556
34556
  case "UNKNOWN":
34557
- resolve9([]);
34557
+ resolve10([]);
34558
34558
  break;
34559
34559
  case "ELOOP":
34560
34560
  // Too many levels of symbolic links
@@ -34563,30 +34563,30 @@ var require_readdir_glob = __commonJS({
34563
34563
  break;
34564
34564
  }
34565
34565
  } else {
34566
- resolve9(files);
34566
+ resolve10(files);
34567
34567
  }
34568
34568
  });
34569
34569
  });
34570
34570
  }
34571
34571
  function stat(file, followSymlinks) {
34572
- return new Promise((resolve9, reject2) => {
34572
+ return new Promise((resolve10, reject2) => {
34573
34573
  const statFunc = followSymlinks ? fs4.stat : fs4.lstat;
34574
34574
  statFunc(file, (err, stats) => {
34575
34575
  if (err) {
34576
34576
  switch (err.code) {
34577
34577
  case "ENOENT":
34578
34578
  if (followSymlinks) {
34579
- resolve9(stat(file, false));
34579
+ resolve10(stat(file, false));
34580
34580
  } else {
34581
- resolve9(null);
34581
+ resolve10(null);
34582
34582
  }
34583
34583
  break;
34584
34584
  default:
34585
- resolve9(null);
34585
+ resolve10(null);
34586
34586
  break;
34587
34587
  }
34588
34588
  } else {
34589
- resolve9(stats);
34589
+ resolve10(stats);
34590
34590
  }
34591
34591
  });
34592
34592
  });
@@ -34676,7 +34676,7 @@ var require_readdir_glob = __commonJS({
34676
34676
  (skip) => new Minimatch(skip, { dot: true })
34677
34677
  );
34678
34678
  }
34679
- this.iterator = explore(resolve8(cwd || "."), this.options.follow, this.options.stat, this._shouldSkipDirectory.bind(this));
34679
+ this.iterator = explore(resolve9(cwd || "."), this.options.follow, this.options.stat, this._shouldSkipDirectory.bind(this));
34680
34680
  this.paused = false;
34681
34681
  this.inactive = false;
34682
34682
  this.aborted = false;
@@ -34930,10 +34930,10 @@ function awaitify(asyncFn, arity) {
34930
34930
  if (typeof args[arity - 1] === "function") {
34931
34931
  return asyncFn.apply(this, args);
34932
34932
  }
34933
- return new Promise((resolve8, reject2) => {
34933
+ return new Promise((resolve9, reject2) => {
34934
34934
  args[arity - 1] = (err, ...cbArgs) => {
34935
34935
  if (err) return reject2(err);
34936
- resolve8(cbArgs.length > 1 ? cbArgs : cbArgs[0]);
34936
+ resolve9(cbArgs.length > 1 ? cbArgs : cbArgs[0]);
34937
34937
  };
34938
34938
  asyncFn.apply(this, args);
34939
34939
  });
@@ -35115,13 +35115,13 @@ function mapSeries(coll, iteratee, callback) {
35115
35115
  return _asyncMap(eachOfSeries$1, coll, iteratee, callback);
35116
35116
  }
35117
35117
  function promiseCallback() {
35118
- let resolve8, reject2;
35118
+ let resolve9, reject2;
35119
35119
  function callback(err, ...args) {
35120
35120
  if (err) return reject2(err);
35121
- resolve8(args.length > 1 ? args : args[0]);
35121
+ resolve9(args.length > 1 ? args : args[0]);
35122
35122
  }
35123
35123
  callback[PROMISE_SYMBOL] = new Promise((res, rej) => {
35124
- resolve8 = res, reject2 = rej;
35124
+ resolve9 = res, reject2 = rej;
35125
35125
  });
35126
35126
  return callback;
35127
35127
  }
@@ -35394,8 +35394,8 @@ function queue$1(worker, concurrency, payload) {
35394
35394
  });
35395
35395
  }
35396
35396
  if (rejectOnError || !callback) {
35397
- return new Promise((resolve8, reject2) => {
35398
- res = resolve8;
35397
+ return new Promise((resolve9, reject2) => {
35398
+ res = resolve9;
35399
35399
  rej = reject2;
35400
35400
  });
35401
35401
  }
@@ -35434,10 +35434,10 @@ function queue$1(worker, concurrency, payload) {
35434
35434
  }
35435
35435
  const eventMethod = (name) => (handler) => {
35436
35436
  if (!handler) {
35437
- return new Promise((resolve8, reject2) => {
35437
+ return new Promise((resolve9, reject2) => {
35438
35438
  once2(name, (err, data) => {
35439
35439
  if (err) return reject2(err);
35440
- resolve8(data);
35440
+ resolve9(data);
35441
35441
  });
35442
35442
  });
35443
35443
  }
@@ -37440,7 +37440,7 @@ var require_BufferList2 = __commonJS({
37440
37440
  this.head = this.tail = null;
37441
37441
  this.length = 0;
37442
37442
  };
37443
- BufferList.prototype.join = function join10(s) {
37443
+ BufferList.prototype.join = function join11(s) {
37444
37444
  if (this.length === 0) return "";
37445
37445
  var p = this.head;
37446
37446
  var ret2 = "" + p.data;
@@ -39205,7 +39205,7 @@ var require_BufferList3 = __commonJS({
39205
39205
  this.head = this.tail = null;
39206
39206
  this.length = 0;
39207
39207
  };
39208
- BufferList.prototype.join = function join10(s) {
39208
+ BufferList.prototype.join = function join11(s) {
39209
39209
  if (this.length === 0) return "";
39210
39210
  var p = this.head;
39211
39211
  var ret2 = "" + p.data;
@@ -44793,11 +44793,11 @@ var require_core = __commonJS({
44793
44793
  this._finalize();
44794
44794
  }
44795
44795
  var self2 = this;
44796
- return new Promise(function(resolve8, reject2) {
44796
+ return new Promise(function(resolve9, reject2) {
44797
44797
  var errored;
44798
44798
  self2._module.on("end", function() {
44799
44799
  if (!errored) {
44800
- resolve8();
44800
+ resolve9();
44801
44801
  }
44802
44802
  });
44803
44803
  self2._module.on("error", function(err) {
@@ -48568,7 +48568,7 @@ var require_worksheet_writer = __commonJS({
48568
48568
  // =========================================================================
48569
48569
  // Worksheet Protection
48570
48570
  protect(password, options) {
48571
- return new Promise((resolve8) => {
48571
+ return new Promise((resolve9) => {
48572
48572
  this.sheetProtection = {
48573
48573
  sheet: true
48574
48574
  };
@@ -48592,7 +48592,7 @@ var require_worksheet_writer = __commonJS({
48592
48592
  delete this.sheetProtection.spinCount;
48593
48593
  }
48594
48594
  }
48595
- resolve8();
48595
+ resolve9();
48596
48596
  });
48597
48597
  }
48598
48598
  unprotect() {
@@ -48811,9 +48811,9 @@ var require_workbook_writer = __commonJS({
48811
48811
  _commitWorksheets() {
48812
48812
  const commitWorksheet = function(worksheet) {
48813
48813
  if (!worksheet.committed) {
48814
- return new Promise((resolve8) => {
48814
+ return new Promise((resolve9) => {
48815
48815
  worksheet.stream.on("zipped", () => {
48816
- resolve8();
48816
+ resolve9();
48817
48817
  });
48818
48818
  worksheet.commit();
48819
48819
  });
@@ -48901,19 +48901,19 @@ var require_workbook_writer = __commonJS({
48901
48901
  return void 0;
48902
48902
  }
48903
48903
  addStyles() {
48904
- return new Promise((resolve8) => {
48904
+ return new Promise((resolve9) => {
48905
48905
  this.zip.append(this.styles.xml, { name: "xl/styles.xml" });
48906
- resolve8();
48906
+ resolve9();
48907
48907
  });
48908
48908
  }
48909
48909
  addThemes() {
48910
- return new Promise((resolve8) => {
48910
+ return new Promise((resolve9) => {
48911
48911
  this.zip.append(theme1Xml, { name: "xl/theme/theme1.xml" });
48912
- resolve8();
48912
+ resolve9();
48913
48913
  });
48914
48914
  }
48915
48915
  addOfficeRels() {
48916
- return new Promise((resolve8) => {
48916
+ return new Promise((resolve9) => {
48917
48917
  const xform = new RelationshipsXform();
48918
48918
  const xml = xform.toXml([
48919
48919
  { Id: "rId1", Type: RelType.OfficeDocument, Target: "xl/workbook.xml" },
@@ -48921,11 +48921,11 @@ var require_workbook_writer = __commonJS({
48921
48921
  { Id: "rId3", Type: RelType.ExtenderProperties, Target: "docProps/app.xml" }
48922
48922
  ]);
48923
48923
  this.zip.append(xml, { name: "/_rels/.rels" });
48924
- resolve8();
48924
+ resolve9();
48925
48925
  });
48926
48926
  }
48927
48927
  addContentTypes() {
48928
- return new Promise((resolve8) => {
48928
+ return new Promise((resolve9) => {
48929
48929
  const model = {
48930
48930
  worksheets: this._worksheets.filter(Boolean),
48931
48931
  sharedStrings: this.sharedStrings,
@@ -48935,7 +48935,7 @@ var require_workbook_writer = __commonJS({
48935
48935
  const xform = new ContentTypesXform();
48936
48936
  const xml = xform.toXml(model);
48937
48937
  this.zip.append(xml, { name: "[Content_Types].xml" });
48938
- resolve8();
48938
+ resolve9();
48939
48939
  });
48940
48940
  }
48941
48941
  addMedia() {
@@ -48960,31 +48960,31 @@ var require_workbook_writer = __commonJS({
48960
48960
  );
48961
48961
  }
48962
48962
  addApp() {
48963
- return new Promise((resolve8) => {
48963
+ return new Promise((resolve9) => {
48964
48964
  const model = {
48965
48965
  worksheets: this._worksheets.filter(Boolean)
48966
48966
  };
48967
48967
  const xform = new AppXform();
48968
48968
  const xml = xform.toXml(model);
48969
48969
  this.zip.append(xml, { name: "docProps/app.xml" });
48970
- resolve8();
48970
+ resolve9();
48971
48971
  });
48972
48972
  }
48973
48973
  addCore() {
48974
- return new Promise((resolve8) => {
48974
+ return new Promise((resolve9) => {
48975
48975
  const coreXform = new CoreXform();
48976
48976
  const xml = coreXform.toXml(this);
48977
48977
  this.zip.append(xml, { name: "docProps/core.xml" });
48978
- resolve8();
48978
+ resolve9();
48979
48979
  });
48980
48980
  }
48981
48981
  addSharedStrings() {
48982
48982
  if (this.sharedStrings.count) {
48983
- return new Promise((resolve8) => {
48983
+ return new Promise((resolve9) => {
48984
48984
  const sharedStringsXform = new SharedStringsXform();
48985
48985
  const xml = sharedStringsXform.toXml(this.sharedStrings);
48986
48986
  this.zip.append(xml, { name: "/xl/sharedStrings.xml" });
48987
- resolve8();
48987
+ resolve9();
48988
48988
  });
48989
48989
  }
48990
48990
  return Promise.resolve();
@@ -49012,11 +49012,11 @@ var require_workbook_writer = __commonJS({
49012
49012
  });
49013
49013
  }
49014
49014
  });
49015
- return new Promise((resolve8) => {
49015
+ return new Promise((resolve9) => {
49016
49016
  const xform = new RelationshipsXform();
49017
49017
  const xml = xform.toXml(relationships);
49018
49018
  this.zip.append(xml, { name: "/xl/_rels/workbook.xml.rels" });
49019
- resolve8();
49019
+ resolve9();
49020
49020
  });
49021
49021
  }
49022
49022
  addWorkbook() {
@@ -49028,18 +49028,18 @@ var require_workbook_writer = __commonJS({
49028
49028
  properties: {},
49029
49029
  calcProperties: {}
49030
49030
  };
49031
- return new Promise((resolve8) => {
49031
+ return new Promise((resolve9) => {
49032
49032
  const xform = new WorkbookXform();
49033
49033
  xform.prepare(model);
49034
49034
  zip.append(xform.toXml(model), { name: "/xl/workbook.xml" });
49035
- resolve8();
49035
+ resolve9();
49036
49036
  });
49037
49037
  }
49038
49038
  _finalize() {
49039
- return new Promise((resolve8, reject2) => {
49039
+ return new Promise((resolve9, reject2) => {
49040
49040
  this.stream.on("error", reject2);
49041
49041
  this.stream.on("finish", () => {
49042
- resolve8(this);
49042
+ resolve9(this);
49043
49043
  });
49044
49044
  this.zip.on("error", reject2);
49045
49045
  this.zip.finalize();
@@ -50973,13 +50973,13 @@ var require_thenables = __commonJS({
50973
50973
  promise._captureStackTrace();
50974
50974
  if (context) context._popContext();
50975
50975
  var synchronous = true;
50976
- var result = util2.tryCatch(then).call(x, resolve8, reject2);
50976
+ var result = util2.tryCatch(then).call(x, resolve9, reject2);
50977
50977
  synchronous = false;
50978
50978
  if (promise && result === errorObj2) {
50979
50979
  promise._rejectCallback(result.e, true, true);
50980
50980
  promise = null;
50981
50981
  }
50982
- function resolve8(value) {
50982
+ function resolve9(value) {
50983
50983
  if (!promise) return;
50984
50984
  promise._resolveCallback(value);
50985
50985
  promise = null;
@@ -51514,9 +51514,9 @@ var require_debuggability = __commonJS({
51514
51514
  return false;
51515
51515
  }
51516
51516
  Promise2.prototype._fireEvent = defaultFireEvent;
51517
- Promise2.prototype._execute = function(executor, resolve8, reject2) {
51517
+ Promise2.prototype._execute = function(executor, resolve9, reject2) {
51518
51518
  try {
51519
- executor(resolve8, reject2);
51519
+ executor(resolve9, reject2);
51520
51520
  } catch (e) {
51521
51521
  return e;
51522
51522
  }
@@ -51539,10 +51539,10 @@ var require_debuggability = __commonJS({
51539
51539
  ;
51540
51540
  ;
51541
51541
  };
51542
- function cancellationExecute(executor, resolve8, reject2) {
51542
+ function cancellationExecute(executor, resolve9, reject2) {
51543
51543
  var promise = this;
51544
51544
  try {
51545
- executor(resolve8, reject2, function(onCancel) {
51545
+ executor(resolve9, reject2, function(onCancel) {
51546
51546
  if (typeof onCancel !== "function") {
51547
51547
  throw new TypeError("onCancel must be a function, got: " + util2.toString(onCancel));
51548
51548
  }
@@ -55249,7 +55249,7 @@ var require_BufferList5 = __commonJS({
55249
55249
  this.head = this.tail = null;
55250
55250
  this.length = 0;
55251
55251
  };
55252
- BufferList.prototype.join = function join10(s) {
55252
+ BufferList.prototype.join = function join11(s) {
55253
55253
  if (this.length === 0) return "";
55254
55254
  var p = this.head;
55255
55255
  var ret2 = "" + p.data;
@@ -56796,7 +56796,7 @@ var require_PullStream = __commonJS({
56796
56796
  };
56797
56797
  var rejectHandler;
56798
56798
  var pullStreamRejectHandler;
56799
- return new Promise2(function(resolve8, reject2) {
56799
+ return new Promise2(function(resolve9, reject2) {
56800
56800
  rejectHandler = reject2;
56801
56801
  pullStreamRejectHandler = function(e) {
56802
56802
  self2.__emittedError = e;
@@ -56806,7 +56806,7 @@ var require_PullStream = __commonJS({
56806
56806
  return reject2(new Error("FILE_ENDED"));
56807
56807
  self2.once("error", pullStreamRejectHandler);
56808
56808
  self2.stream(eof, includeEof).on("error", reject2).pipe(concatStream).on("finish", function() {
56809
- resolve8(buffer2);
56809
+ resolve9(buffer2);
56810
56810
  }).on("error", reject2);
56811
56811
  }).finally(function() {
56812
56812
  self2.removeListener("error", rejectHandler);
@@ -56851,10 +56851,10 @@ var require_BufferStream = __commonJS({
56851
56851
  if (!Stream.Writable || !Stream.Writable.prototype.destroy)
56852
56852
  Stream = require_readable5();
56853
56853
  module2.exports = function(entry) {
56854
- return new Promise2(function(resolve8, reject2) {
56854
+ return new Promise2(function(resolve9, reject2) {
56855
56855
  var chunks = [];
56856
56856
  var bufferStream = Stream.Transform().on("finish", function() {
56857
- resolve8(Buffer2.concat(chunks));
56857
+ resolve9(Buffer2.concat(chunks));
56858
56858
  }).on("error", reject2);
56859
56859
  bufferStream._transform = function(d, e, cb) {
56860
56860
  chunks.push(d);
@@ -56996,8 +56996,8 @@ var require_parse = __commonJS({
56996
56996
  __autodraining = true;
56997
56997
  var draining2 = entry.pipe(NoopStream());
56998
56998
  draining2.promise = function() {
56999
- return new Promise2(function(resolve8, reject2) {
57000
- draining2.on("finish", resolve8);
56999
+ return new Promise2(function(resolve9, reject2) {
57000
+ draining2.on("finish", resolve9);
57001
57001
  draining2.on("error", reject2);
57002
57002
  });
57003
57003
  };
@@ -57052,11 +57052,11 @@ var require_parse = __commonJS({
57052
57052
  eof = Buffer2.alloc(4);
57053
57053
  eof.writeUInt32LE(134695760, 0);
57054
57054
  }
57055
- return new Promise2(function(resolve8, reject2) {
57055
+ return new Promise2(function(resolve9, reject2) {
57056
57056
  self2.stream(eof).pipe(inflater).on("error", function(err) {
57057
57057
  self2.emit("error", err);
57058
57058
  }).pipe(entry).on("finish", function() {
57059
- return fileSizeKnown ? self2._readRecord().then(resolve8).catch(reject2) : self2._processDataDescriptor(entry).then(resolve8).catch(reject2);
57059
+ return fileSizeKnown ? self2._readRecord().then(resolve9).catch(reject2) : self2._processDataDescriptor(entry).then(resolve9).catch(reject2);
57060
57060
  });
57061
57061
  });
57062
57062
  });
@@ -57098,8 +57098,8 @@ var require_parse = __commonJS({
57098
57098
  };
57099
57099
  Parse.prototype.promise = function() {
57100
57100
  var self2 = this;
57101
- return new Promise2(function(resolve8, reject2) {
57102
- self2.on("finish", resolve8);
57101
+ return new Promise2(function(resolve9, reject2) {
57102
+ self2.on("finish", resolve9);
57103
57103
  self2.on("error", reject2);
57104
57104
  });
57105
57105
  };
@@ -57161,7 +57161,7 @@ var require_BufferList6 = __commonJS({
57161
57161
  this.head = this.tail = null;
57162
57162
  this.length = 0;
57163
57163
  };
57164
- BufferList.prototype.join = function join10(s) {
57164
+ BufferList.prototype.join = function join11(s) {
57165
57165
  if (this.length === 0) return "";
57166
57166
  var p = this.head;
57167
57167
  var ret2 = "" + p.data;
@@ -60610,8 +60610,8 @@ var require_extract2 = __commonJS({
60610
60610
  extract.emit("close");
60611
60611
  });
60612
60612
  extract.promise = function() {
60613
- return new Promise2(function(resolve8, reject2) {
60614
- extract.on("close", resolve8);
60613
+ return new Promise2(function(resolve9, reject2) {
60614
+ extract.on("close", resolve9);
60615
60615
  extract.on("error", reject2);
60616
60616
  });
60617
60617
  };
@@ -62122,8 +62122,8 @@ var require_directory = __commonJS({
62122
62122
  return;
62123
62123
  }
62124
62124
  var writer = opts.getWriter ? opts.getWriter({ path: extractPath }) : Writer({ path: extractPath });
62125
- return new Promise2(function(resolve8, reject2) {
62126
- entry.stream(opts.password).on("error", reject2).pipe(writer).on("close", resolve8).on("error", reject2);
62125
+ return new Promise2(function(resolve9, reject2) {
62126
+ entry.stream(opts.password).on("error", reject2).pipe(writer).on("close", resolve9).on("error", reject2);
62127
62127
  });
62128
62128
  }, { concurrency: opts.concurrency > 1 ? opts.concurrency : 1 });
62129
62129
  });
@@ -62190,12 +62190,12 @@ var require_Open = __commonJS({
62190
62190
  return fs4.createReadStream(filename, { start: offset, end: length && offset + length });
62191
62191
  },
62192
62192
  size: function() {
62193
- return new Promise2(function(resolve8, reject2) {
62193
+ return new Promise2(function(resolve9, reject2) {
62194
62194
  fs4.stat(filename, function(err, d) {
62195
62195
  if (err)
62196
62196
  reject2(err);
62197
62197
  else
62198
- resolve8(d.size);
62198
+ resolve9(d.size);
62199
62199
  });
62200
62200
  });
62201
62201
  }
@@ -62216,14 +62216,14 @@ var require_Open = __commonJS({
62216
62216
  return request(options2);
62217
62217
  },
62218
62218
  size: function() {
62219
- return new Promise2(function(resolve8, reject2) {
62219
+ return new Promise2(function(resolve9, reject2) {
62220
62220
  var req = request(params);
62221
62221
  req.on("response", function(d) {
62222
62222
  req.abort();
62223
62223
  if (!d.headers["content-length"])
62224
62224
  reject2(new Error("Missing content length header"));
62225
62225
  else
62226
- resolve8(d.headers["content-length"]);
62226
+ resolve9(d.headers["content-length"]);
62227
62227
  }).on("error", reject2);
62228
62228
  });
62229
62229
  }
@@ -62233,12 +62233,12 @@ var require_Open = __commonJS({
62233
62233
  s3: function(client, params, options) {
62234
62234
  var source2 = {
62235
62235
  size: function() {
62236
- return new Promise2(function(resolve8, reject2) {
62236
+ return new Promise2(function(resolve9, reject2) {
62237
62237
  client.headObject(params, function(err, d) {
62238
62238
  if (err)
62239
62239
  reject2(err);
62240
62240
  else
62241
- resolve8(d.ContentLength);
62241
+ resolve9(d.ContentLength);
62242
62242
  });
62243
62243
  });
62244
62244
  },
@@ -62656,7 +62656,7 @@ var require_iterate_stream = __commonJS({
62656
62656
  const contents = [];
62657
62657
  stream2.on("data", (data) => contents.push(data));
62658
62658
  let resolveStreamEndedPromise;
62659
- const streamEndedPromise = new Promise((resolve8) => resolveStreamEndedPromise = resolve8);
62659
+ const streamEndedPromise = new Promise((resolve9) => resolveStreamEndedPromise = resolve9);
62660
62660
  let ended = false;
62661
62661
  stream2.on("end", () => {
62662
62662
  ended = true;
@@ -62681,13 +62681,13 @@ var require_iterate_stream = __commonJS({
62681
62681
  resolveStreamEndedPromise();
62682
62682
  };
62683
62683
  function once2(eventEmitter, type) {
62684
- return new Promise((resolve8) => {
62684
+ return new Promise((resolve9) => {
62685
62685
  let fired = false;
62686
62686
  const handler = () => {
62687
62687
  if (!fired) {
62688
62688
  fired = true;
62689
62689
  eventEmitter.removeListener(type, handler);
62690
- resolve8();
62690
+ resolve9();
62691
62691
  }
62692
62692
  };
62693
62693
  eventEmitter.addListener(type, handler);
@@ -63214,7 +63214,7 @@ var require_workbook_reader = __commonJS({
63214
63214
  if (this.sharedStrings && this.workbookRels) {
63215
63215
  yield* this._parseWorksheet(iterateStream(entry), sheetNo);
63216
63216
  } else {
63217
- await new Promise((resolve8, reject2) => {
63217
+ await new Promise((resolve9, reject2) => {
63218
63218
  tmp.file((err, path, fd, tempFileCleanupCallback) => {
63219
63219
  if (err) {
63220
63220
  return reject2(err);
@@ -63224,7 +63224,7 @@ var require_workbook_reader = __commonJS({
63224
63224
  tempStream.on("error", reject2);
63225
63225
  entry.pipe(tempStream);
63226
63226
  return tempStream.on("finish", () => {
63227
- return resolve8();
63227
+ return resolve9();
63228
63228
  });
63229
63229
  });
63230
63230
  });
@@ -64603,9 +64603,9 @@ var require_clone2 = __commonJS({
64603
64603
  } else if (_instanceof(parent3, nativeSet)) {
64604
64604
  child = new nativeSet();
64605
64605
  } else if (_instanceof(parent3, nativePromise)) {
64606
- child = new nativePromise(function(resolve8, reject2) {
64606
+ child = new nativePromise(function(resolve9, reject2) {
64607
64607
  parent3.then(function(value) {
64608
- resolve8(_clone(value, depth2 - 1));
64608
+ resolve9(_clone(value, depth2 - 1));
64609
64609
  }, function(err) {
64610
64610
  reject2(_clone(err, depth2 - 1));
64611
64611
  });
@@ -190983,6 +190983,7 @@ var init_script_fonts = __esm({
190983
190983
  // src/main.ts
190984
190984
  import { readFileSync as readFileSync8, existsSync as existsSync6 } from "fs";
190985
190985
  import { spawnSync as spawnSync2 } from "child_process";
190986
+ import { join as join10, resolve as resolve8 } from "path";
190986
190987
 
190987
190988
  // ../../node_modules/json5/dist/index.mjs
190988
190989
  var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/;
@@ -194503,7 +194504,7 @@ function stripCaptions(text, open, close) {
194503
194504
  }
194504
194505
  return removed ? collapseCaptionWs(out) : text;
194505
194506
  }
194506
- function interpolate(text, resolve8) {
194507
+ function interpolate(text, resolve9) {
194507
194508
  if (text.indexOf("{") < 0) return text;
194508
194509
  let out = "";
194509
194510
  for (const tok of tokenise2(text)) {
@@ -194515,7 +194516,7 @@ function interpolate(text, resolve8) {
194515
194516
  out += tok.raw;
194516
194517
  continue;
194517
194518
  }
194518
- const v = resolve8(tok.ref);
194519
+ const v = resolve9(tok.ref);
194519
194520
  out += v === void 0 ? "" : renderSlotValue(v);
194520
194521
  }
194521
194522
  return out;
@@ -195147,6 +195148,49 @@ function planReturnedWorld(ours, base, theirs, merged, gameScopes) {
195147
195148
  const plan = planWorldSave(shown2, gameScopes, next);
195148
195149
  return { ...plan.write ? { write: plan.write } : {}, ...plan.error ? { error: plan.error } : {} };
195149
195150
  }
195151
+ function defaultGameScopesDir(root2) {
195152
+ for (let dir2 = resolve(root2); ; ) {
195153
+ if (existsSync(join(dir2, ".git"))) return join(dir2, GAME_SCOPES_DIR);
195154
+ const up = dirname(dir2);
195155
+ if (up === dir2) break;
195156
+ dir2 = up;
195157
+ }
195158
+ return join(dirname(resolve(root2)), GAME_SCOPES_DIR);
195159
+ }
195160
+ function planShareScopes(root2, project, dir2) {
195161
+ const target = resolve(dir2);
195162
+ const gamePath = join(target, GAME_SCOPES_FILE);
195163
+ let existing = { version: 1, owner: GAME_SCOPES_OWNER, scopes: [] };
195164
+ if (existsSync(gamePath)) {
195165
+ const parsed = parseScopesFile(readFileSync(gamePath, "utf8"), GAME_SCOPES_FILE);
195166
+ if (!parsed.file) return { error: `${GAME_SCOPES_FILE} in ${target} won't parse, so it was left alone: ${parsed.issues.map((i) => i.message).join("; ")}` };
195167
+ existing = parsed.file;
195168
+ }
195169
+ const held = new Set(existing.scopes.map((s) => s.token));
195170
+ const added = (project.scopeRegistry?.scopes ?? []).filter((h) => isGameToken(h.token, void 0) && !held.has(h.token)).map((h) => ({
195171
+ token: h.token,
195172
+ ...h.writable !== void 0 ? { writable: h.writable } : {},
195173
+ ...h.declarations ? { declarations: h.declarations.map((d) => ({ ...d })) } : {}
195174
+ }));
195175
+ const game = { ...existing, scopes: [...existing.scopes, ...added] };
195176
+ const writes = [
195177
+ { path: join(target, PATTER_SCOPES_FILE), content: serialiseScopesFile(patterScopesFile(project)) },
195178
+ { path: gamePath, content: serialiseScopesFile(game) }
195179
+ ];
195180
+ let found = false;
195181
+ for (let at = resolve(root2); ; ) {
195182
+ if (join(at, GAME_SCOPES_DIR) === target) {
195183
+ found = true;
195184
+ break;
195185
+ }
195186
+ const up = dirname(at);
195187
+ if (existsSync(join(at, ".git")) || up === at) break;
195188
+ at = up;
195189
+ }
195190
+ const { gameScopes: _drop, ...rest } = project;
195191
+ const next = found ? rest : { ...rest, gameScopes: relative(resolve(root2), target) || "." };
195192
+ return { writes, project: next };
195193
+ }
195150
195194
 
195151
195195
  // ../ops/src/load.ts
195152
195196
  function withGameScopes(root2, project) {
@@ -195342,7 +195386,7 @@ function merge3(base, ours, theirs, id, path, conflicts) {
195342
195386
  conflicts.push({ id, path, base, ours, theirs, kind: deletedKind(base, ours, theirs) });
195343
195387
  return ours;
195344
195388
  }
195345
- function mergeMap(base, ours, theirs, prefix, conflicts, resolve8) {
195389
+ function mergeMap(base, ours, theirs, prefix, conflicts, resolve9) {
195346
195390
  const out = {};
195347
195391
  for (const k of /* @__PURE__ */ new Set([...Object.keys(base), ...Object.keys(ours), ...Object.keys(theirs)])) {
195348
195392
  const b = base[k], o = ours[k], t = theirs[k];
@@ -195351,7 +195395,7 @@ function mergeMap(base, ours, theirs, prefix, conflicts, resolve8) {
195351
195395
  else if (eq(b, o)) v = t;
195352
195396
  else if (eq(b, t)) v = o;
195353
195397
  else {
195354
- const r = resolve8?.(k, b, o, t);
195398
+ const r = resolve9?.(k, b, o, t);
195355
195399
  if (r && r.resolved) v = r.value;
195356
195400
  else {
195357
195401
  conflicts.push({ id: k, path: `${prefix}.${k}`, base: b, ours: o, theirs: t, kind: r ? r.kind : deletedKind(b, o, t) });
@@ -199977,14 +200021,14 @@ var require_events = /* @__PURE__ */ __commonJSMin(((exports2, module2) => {
199977
200021
  return ret2;
199978
200022
  }
199979
200023
  function once2(emitter, name) {
199980
- return new Promise(function(resolve8, reject2) {
200024
+ return new Promise(function(resolve9, reject2) {
199981
200025
  function errorListener(err) {
199982
200026
  emitter.removeListener(name, resolver);
199983
200027
  reject2(err);
199984
200028
  }
199985
200029
  function resolver() {
199986
200030
  if (typeof emitter.removeListener === "function") emitter.removeListener("error", errorListener);
199987
- resolve8([].slice.call(arguments));
200031
+ resolve9([].slice.call(arguments));
199988
200032
  }
199989
200033
  eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
199990
200034
  if (name !== "error") addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
@@ -202886,8 +202930,8 @@ var require_util5 = /* @__PURE__ */ __commonJSMin(((exports2) => {
202886
202930
  }
202887
202931
  function fn() {
202888
202932
  var promiseResolve, promiseReject;
202889
- var promise = new Promise(function(resolve8, reject2) {
202890
- promiseResolve = resolve8;
202933
+ var promise = new Promise(function(resolve9, reject2) {
202934
+ promiseResolve = resolve9;
202891
202935
  promiseReject = reject2;
202892
202936
  });
202893
202937
  var args = [];
@@ -203068,7 +203112,7 @@ var require_buffer_list2 = /* @__PURE__ */ __commonJSMin(((exports2, module2) =>
203068
203112
  },
203069
203113
  {
203070
203114
  key: "join",
203071
- value: function join10(s) {
203115
+ value: function join11(s) {
203072
203116
  if (this.length === 0) return "";
203073
203117
  var p = this.head;
203074
203118
  var ret2 = "" + p.data;
@@ -204253,14 +204297,14 @@ var require_async_iterator2 = /* @__PURE__ */ __commonJSMin(((exports2, module2)
204253
204297
  };
204254
204298
  }
204255
204299
  function readAndResolve(iter) {
204256
- var resolve8 = iter[kLastResolve];
204257
- if (resolve8 !== null) {
204300
+ var resolve9 = iter[kLastResolve];
204301
+ if (resolve9 !== null) {
204258
204302
  var data = iter[kStream].read();
204259
204303
  if (data !== null) {
204260
204304
  iter[kLastPromise] = null;
204261
204305
  iter[kLastResolve] = null;
204262
204306
  iter[kLastReject] = null;
204263
- resolve8(createIterResult(data, false));
204307
+ resolve9(createIterResult(data, false));
204264
204308
  }
204265
204309
  }
204266
204310
  }
@@ -204268,13 +204312,13 @@ var require_async_iterator2 = /* @__PURE__ */ __commonJSMin(((exports2, module2)
204268
204312
  process$1.nextTick(readAndResolve, iter);
204269
204313
  }
204270
204314
  function wrapForNext(lastPromise, iter) {
204271
- return function(resolve8, reject2) {
204315
+ return function(resolve9, reject2) {
204272
204316
  lastPromise.then(function() {
204273
204317
  if (iter[kEnded]) {
204274
- resolve8(createIterResult(void 0, true));
204318
+ resolve9(createIterResult(void 0, true));
204275
204319
  return;
204276
204320
  }
204277
- iter[kHandlePromise](resolve8, reject2);
204321
+ iter[kHandlePromise](resolve9, reject2);
204278
204322
  }, reject2);
204279
204323
  };
204280
204324
  }
@@ -204289,10 +204333,10 @@ var require_async_iterator2 = /* @__PURE__ */ __commonJSMin(((exports2, module2)
204289
204333
  var error = this[kError];
204290
204334
  if (error !== null) return Promise.reject(error);
204291
204335
  if (this[kEnded]) return Promise.resolve(createIterResult(void 0, true));
204292
- if (this[kStream].destroyed) return new Promise(function(resolve8, reject2) {
204336
+ if (this[kStream].destroyed) return new Promise(function(resolve9, reject2) {
204293
204337
  process$1.nextTick(function() {
204294
204338
  if (_this[kError]) reject2(_this[kError]);
204295
- else resolve8(createIterResult(void 0, true));
204339
+ else resolve9(createIterResult(void 0, true));
204296
204340
  });
204297
204341
  });
204298
204342
  var lastPromise = this[kLastPromise];
@@ -204310,13 +204354,13 @@ var require_async_iterator2 = /* @__PURE__ */ __commonJSMin(((exports2, module2)
204310
204354
  return this;
204311
204355
  }), _defineProperty2(_Object$setPrototypeO, "return", function _return() {
204312
204356
  var _this2 = this;
204313
- return new Promise(function(resolve8, reject2) {
204357
+ return new Promise(function(resolve9, reject2) {
204314
204358
  _this2[kStream].destroy(null, function(err) {
204315
204359
  if (err) {
204316
204360
  reject2(err);
204317
204361
  return;
204318
204362
  }
204319
- resolve8(createIterResult(void 0, true));
204363
+ resolve9(createIterResult(void 0, true));
204320
204364
  });
204321
204365
  });
204322
204366
  }), _Object$setPrototypeO), AsyncIteratorPrototype);
@@ -204338,15 +204382,15 @@ var require_async_iterator2 = /* @__PURE__ */ __commonJSMin(((exports2, module2)
204338
204382
  value: stream2._readableState.endEmitted,
204339
204383
  writable: true
204340
204384
  }), _defineProperty2(_Object$create, kHandlePromise, {
204341
- value: function value(resolve8, reject2) {
204385
+ value: function value(resolve9, reject2) {
204342
204386
  var data = iterator[kStream].read();
204343
204387
  if (data) {
204344
204388
  iterator[kLastPromise] = null;
204345
204389
  iterator[kLastResolve] = null;
204346
204390
  iterator[kLastReject] = null;
204347
- resolve8(createIterResult(data, false));
204391
+ resolve9(createIterResult(data, false));
204348
204392
  } else {
204349
- iterator[kLastResolve] = resolve8;
204393
+ iterator[kLastResolve] = resolve9;
204350
204394
  iterator[kLastReject] = reject2;
204351
204395
  }
204352
204396
  },
@@ -204365,12 +204409,12 @@ var require_async_iterator2 = /* @__PURE__ */ __commonJSMin(((exports2, module2)
204365
204409
  iterator[kError] = err;
204366
204410
  return;
204367
204411
  }
204368
- var resolve8 = iterator[kLastResolve];
204369
- if (resolve8 !== null) {
204412
+ var resolve9 = iterator[kLastResolve];
204413
+ if (resolve9 !== null) {
204370
204414
  iterator[kLastPromise] = null;
204371
204415
  iterator[kLastResolve] = null;
204372
204416
  iterator[kLastReject] = null;
204373
- resolve8(createIterResult(void 0, true));
204417
+ resolve9(createIterResult(void 0, true));
204374
204418
  }
204375
204419
  iterator[kEnded] = true;
204376
204420
  });
@@ -215736,7 +215780,7 @@ var require_xml = /* @__PURE__ */ __commonJSMin(((exports2, module2) => {
215736
215780
  }
215737
215781
  }
215738
215782
  function add(value, last2) {
215739
- format(append, resolve8(value, indent, indent ? 1 : 0), last2);
215783
+ format(append, resolve9(value, indent, indent ? 1 : 0), last2);
215740
215784
  }
215741
215785
  function end() {
215742
215786
  if (stream2) {
@@ -215775,12 +215819,12 @@ var require_xml = /* @__PURE__ */ __commonJSMin(((exports2, module2) => {
215775
215819
  return output;
215776
215820
  }
215777
215821
  function element() {
215778
- var self2 = { _elem: resolve8(Array.prototype.slice.call(arguments)) };
215822
+ var self2 = { _elem: resolve9(Array.prototype.slice.call(arguments)) };
215779
215823
  self2.push = function(input) {
215780
215824
  if (!this.append) throw new Error("not assigned to a parent!");
215781
215825
  var that = this;
215782
215826
  var indent = this._elem.indent;
215783
- format(this.append, resolve8(input, indent, this._elem.icount + (indent ? 1 : 0)), function() {
215827
+ format(this.append, resolve9(input, indent, this._elem.icount + (indent ? 1 : 0)), function() {
215784
215828
  that.append(true);
215785
215829
  });
215786
215830
  };
@@ -215793,7 +215837,7 @@ var require_xml = /* @__PURE__ */ __commonJSMin(((exports2, module2) => {
215793
215837
  function create_indent(character, count) {
215794
215838
  return new Array(count || 0).join(character || "");
215795
215839
  }
215796
- function resolve8(data, indent, indent_count) {
215840
+ function resolve9(data, indent, indent_count) {
215797
215841
  indent_count = indent_count || 0;
215798
215842
  var indent_spaces = create_indent(indent, indent_count);
215799
215843
  var name;
@@ -215828,7 +215872,7 @@ var require_xml = /* @__PURE__ */ __commonJSMin(((exports2, module2) => {
215828
215872
  content.push("");
215829
215873
  values.forEach(function(value) {
215830
215874
  if (typeof value == "object") if (Object.keys(value)[0] == "_attr") get_attributes(value._attr);
215831
- else content.push(resolve8(value, indent, indent_count + 1));
215875
+ else content.push(resolve9(value, indent, indent_count + 1));
215832
215876
  else {
215833
215877
  content.pop();
215834
215878
  isStringContent = true;
@@ -239118,7 +239162,7 @@ var SERIF2 = (bold, italic) => bold && italic ? "Serif-BoldItalic" : bold ? "Ser
239118
239162
  var isEmoji = (cp) => cp >= 126976 || cp >= 9728 && cp <= 10175;
239119
239163
  async function scriptToPdf(doc) {
239120
239164
  const { scriptFont: scriptFont2 } = await Promise.resolve().then(() => (init_script_fonts(), script_fonts_exports));
239121
- return new Promise((resolve8, reject2) => {
239165
+ return new Promise((resolve9, reject2) => {
239122
239166
  const pdf = new PDFDocument({ size: "A4", margins: { top: MARGIN, bottom: MARGIN, left: MARGIN, right: MARGIN }, info: { Title: doc.project, Author: "Patter" }, font: null });
239123
239167
  pdf.registerFont("Serif", scriptFont2("serif"));
239124
239168
  pdf.registerFont("Serif-Bold", scriptFont2("serifBold"));
@@ -239159,7 +239203,7 @@ async function scriptToPdf(doc) {
239159
239203
  const bodyPieces = (runs, color, base = {}) => runs.flatMap((r) => r.code ? split(r.text, "Mono", ACCENT) : split(r.text, SERIF2(base.bold || r.bold, base.italic || r.italic), color));
239160
239204
  const chunks = [];
239161
239205
  pdf.on("data", (c2) => chunks.push(c2));
239162
- pdf.on("end", () => resolve8(Buffer.concat(chunks)));
239206
+ pdf.on("end", () => resolve9(Buffer.concat(chunks)));
239163
239207
  pdf.on("error", reject2);
239164
239208
  const pageRight = pdf.page.width - MARGIN;
239165
239209
  const pageBottom = pdf.page.height - MARGIN;
@@ -239917,7 +239961,7 @@ async function runCommandAsync(command, args, options = {}) {
239917
239961
  const overridden = await _overrideRunner(command, args, options);
239918
239962
  return { timedOut: false, ...overridden };
239919
239963
  }
239920
- return new Promise((resolve8) => {
239964
+ return new Promise((resolve9) => {
239921
239965
  const child = spawn(command, args, { cwd: options.cwd, windowsHide: true });
239922
239966
  let stdout = "";
239923
239967
  let stderr = "";
@@ -239939,7 +239983,7 @@ async function runCommandAsync(command, args, options = {}) {
239939
239983
  if (settled) return;
239940
239984
  settled = true;
239941
239985
  clearTimeout(timer);
239942
- resolve8(result);
239986
+ resolve9(result);
239943
239987
  };
239944
239988
  child.on("error", (err) => {
239945
239989
  finish({ exitCode: -1, output: "", error: stderr.trim() || err.message, timedOut });
@@ -241740,7 +241784,7 @@ function writeTextFiles(files, encoding = "utf8") {
241740
241784
  // package.json
241741
241785
  var package_default = {
241742
241786
  name: "@patterkit/cli",
241743
- version: "0.4.0",
241787
+ version: "0.5.0",
241744
241788
  description: "The `patter` CLI: validate, format, export, and play a Patter project.",
241745
241789
  type: "module",
241746
241790
  license: "MIT",
@@ -241770,7 +241814,7 @@ var package_default = {
241770
241814
  },
241771
241815
  dependencies: {
241772
241816
  "@patterkit/core": "0.2.6",
241773
- "@patterkit/ops": "0.8.0",
241817
+ "@patterkit/ops": "0.9.0",
241774
241818
  "@wildwinter/simple-vc-lib": "^0.4.1"
241775
241819
  }
241776
241820
  };
@@ -241826,6 +241870,10 @@ Usage:
241826
241870
  dist/<name>.pdf. PDF uses built-in fonts (Latin); use .docx for full Unicode.
241827
241871
  patter voice-export [path] -o file.xlsx Voice (VO) recording script (spec \xA716)
241828
241872
  [--all] Include every voiced line (else only "ready to record")
241873
+ patter share-scopes [path] Share the project's scopes with the game's other tools: make the game's
241874
+ [--at dir] game-scopes/ folder (in --at, else the version-control root above the
241875
+ project) with patter.scopes.json and game.scopes.json; joins a folder
241876
+ that already exists, adding only the scopes it doesn't hold
241829
241877
  patter pack [path] -o file Pack a project (the .patter folder) into a portable .patterpack
241830
241878
  patter unpack <file> -o dir Explode a .patterpack into source shards under dir
241831
241879
  [--merge --base sent.patterpack] Merge a returned .patterpack into the project
@@ -241849,6 +241897,7 @@ var FLAGS = {
241849
241897
  "loc-import": { boolean: [], valued: ["locale"] },
241850
241898
  "voice-export": { boolean: ["all"], valued: ["o"] },
241851
241899
  "export-script": { boolean: [], valued: ["o"] },
241900
+ "share-scopes": { boolean: [], valued: ["at"] },
241852
241901
  pack: { boolean: [], valued: ["o"] },
241853
241902
  unpack: { boolean: ["merge"], valued: ["o", "base"] },
241854
241903
  merge: { boolean: ["json"], valued: ["o", "type"] },
@@ -242221,6 +242270,25 @@ ${count} issue(s)${advisory}`);
242221
242270
  console.log(`imported ${stats.updated} string(s) for ${locale} across ${stats.files} scene(s)`);
242222
242271
  return 0;
242223
242272
  }
242273
+ case "share-scopes": {
242274
+ const loaded = loadProject(positionals[0] ?? ".");
242275
+ if (loaded.gameScopes) {
242276
+ console.error(`share-scopes: this project already shares its scopes through ${loaded.gameScopes.dir}`);
242277
+ return 1;
242278
+ }
242279
+ const dir2 = typeof flags.at === "string" ? join10(resolve8(flags.at), GAME_SCOPES_DIR) : defaultGameScopesDir(loaded.root);
242280
+ const plan = planShareScopes(loaded.root, loaded.project, dir2);
242281
+ if ("error" in plan) {
242282
+ console.error(`share-scopes: ${plan.error}`);
242283
+ return 1;
242284
+ }
242285
+ const named = plan.project.gameScopes !== loaded.project.gameScopes;
242286
+ const writes = [...plan.writes, ...named ? [{ path: loaded.projectFile, content: canonicalStringify(plan.project) }] : []];
242287
+ if (!commitWrites(writes)) return 1;
242288
+ for (const w of writes) console.log(`wrote ${w.path}`);
242289
+ if (named) console.log(`the project names the folder (gameScopes: ${plan.project.gameScopes}), since looking up from the project wouldn't find it`);
242290
+ return 0;
242291
+ }
242224
242292
  case "pack": {
242225
242293
  if (typeof flags.o !== "string") {
242226
242294
  console.error("pack: -o <file.patter> is required");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patterkit/cli",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "The `patter` CLI: validate, format, export, and play a Patter project.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@patterkit/core": "0.2.6",
33
- "@patterkit/ops": "0.8.0",
33
+ "@patterkit/ops": "0.9.0",
34
34
  "@wildwinter/simple-vc-lib": "^0.4.1"
35
35
  }
36
36
  }