prpm 1.0.3 → 1.1.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/dist/index.js CHANGED
@@ -495,6 +495,8 @@ function getDestinationDir2(format, subtype, name) {
495
495
  case "kiro":
496
496
  if (subtype === "hook") return ".kiro/hooks";
497
497
  return ".kiro/steering";
498
+ case "gemini":
499
+ return ".gemini/commands";
498
500
  case "agents.md":
499
501
  return ".";
500
502
  case "generic":
@@ -548,6 +550,7 @@ async function autoDetectFormat() {
548
550
  { format: "windsurf", dir: ".windsurf" },
549
551
  { format: "copilot", dir: ".github/instructions" },
550
552
  { format: "kiro", dir: ".kiro" },
553
+ { format: "gemini", dir: ".gemini" },
551
554
  { format: "agents.md", dir: ".agents" }
552
555
  ];
553
556
  for (const { format, dir } of formatDirs) {
@@ -802,6 +805,8 @@ function normalizeFormat(sourceFormat) {
802
805
  return "kiro";
803
806
  if (normalized.includes("agents.md") || normalized.includes("agentsmd"))
804
807
  return "agents.md";
808
+ if (normalized.includes("gemini"))
809
+ return "gemini";
805
810
  if (normalized.includes("mcp"))
806
811
  return "mcp";
807
812
  return "generic";
@@ -1441,7 +1446,7 @@ function constructYamlInteger(data) {
1441
1446
  }
1442
1447
  return sign * parseInt(value, 10);
1443
1448
  }
1444
- function isInteger(object) {
1449
+ function isInteger2(object) {
1445
1450
  return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 === 0 && !common.isNegativeZero(object));
1446
1451
  }
1447
1452
  function resolveYamlFloat(data) {
@@ -1502,7 +1507,7 @@ function representYamlFloat(object, style) {
1502
1507
  res = object.toString(10);
1503
1508
  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
1504
1509
  }
1505
- function isFloat(object) {
1510
+ function isFloat2(object) {
1506
1511
  return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object));
1507
1512
  }
1508
1513
  function resolveYamlTimestamp(data) {
@@ -2861,14 +2866,14 @@ function isPlainSafe(c, prev, inblock) {
2861
2866
  (inblock ? (
2862
2867
  // c = flow-in
2863
2868
  cIsNsCharOrWhitespace
2864
- ) : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar
2869
+ ) : cIsNsCharOrWhitespace && c !== CHAR_COMMA2 && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON2 && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON2 && cIsNsChar
2865
2870
  );
2866
2871
  }
2867
2872
  function isPlainSafeFirst(c) {
2868
- return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;
2873
+ return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON2 && c !== CHAR_COMMA2 && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS2 && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;
2869
2874
  }
2870
2875
  function isPlainSafeLast(c) {
2871
- return !isWhitespace(c) && c !== CHAR_COLON;
2876
+ return !isWhitespace(c) && c !== CHAR_COLON2;
2872
2877
  }
2873
2878
  function codePointAt(string, pos) {
2874
2879
  var first = string.charCodeAt(pos), second;
@@ -3311,7 +3316,7 @@ function renamed(from, to) {
3311
3316
  throw new Error("Function yaml." + from + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default.");
3312
3317
  };
3313
3318
  }
3314
- var isNothing_1, isObject_1, toArray_1, repeat_1, isNegativeZero_1, extend_1, common, exception, snippet, TYPE_CONSTRUCTOR_OPTIONS, YAML_NODE_KINDS, type, schema, str, seq, map, failsafe, _null, bool, int, YAML_FLOAT_PATTERN, SCIENTIFIC_WITHOUT_DOT, float, json, core, YAML_DATE_REGEXP, YAML_TIMESTAMP_REGEXP, timestamp, merge, BASE64_MAP, binary, _hasOwnProperty$3, _toString$2, omap, _toString$1, pairs, _hasOwnProperty$2, set, _default, _hasOwnProperty$1, CONTEXT_FLOW_IN, CONTEXT_FLOW_OUT, CONTEXT_BLOCK_IN, CONTEXT_BLOCK_OUT, CHOMPING_CLIP, CHOMPING_STRIP, CHOMPING_KEEP, PATTERN_NON_PRINTABLE, PATTERN_NON_ASCII_LINE_BREAKS, PATTERN_FLOW_INDICATORS, PATTERN_TAG_HANDLE, PATTERN_TAG_URI, simpleEscapeCheck, simpleEscapeMap, i, directiveHandlers, loadAll_1, load_1, loader, _toString, _hasOwnProperty, CHAR_BOM, CHAR_TAB, CHAR_LINE_FEED, CHAR_CARRIAGE_RETURN, CHAR_SPACE, CHAR_EXCLAMATION, CHAR_DOUBLE_QUOTE, CHAR_SHARP, CHAR_PERCENT, CHAR_AMPERSAND, CHAR_SINGLE_QUOTE, CHAR_ASTERISK, CHAR_COMMA, CHAR_MINUS, CHAR_COLON, CHAR_EQUALS, CHAR_GREATER_THAN, CHAR_QUESTION, CHAR_COMMERCIAL_AT, CHAR_LEFT_SQUARE_BRACKET, CHAR_RIGHT_SQUARE_BRACKET, CHAR_GRAVE_ACCENT, CHAR_LEFT_CURLY_BRACKET, CHAR_VERTICAL_LINE, CHAR_RIGHT_CURLY_BRACKET, ESCAPE_SEQUENCES, DEPRECATED_BOOLEANS_SYNTAX, DEPRECATED_BASE60_SYNTAX, QUOTING_TYPE_SINGLE, QUOTING_TYPE_DOUBLE, STYLE_PLAIN, STYLE_SINGLE, STYLE_LITERAL, STYLE_FOLDED, STYLE_DOUBLE, dump_1, dumper, Type, Schema, FAILSAFE_SCHEMA, JSON_SCHEMA, CORE_SCHEMA, DEFAULT_SCHEMA, load, loadAll, dump, YAMLException, types, safeLoad, safeLoadAll, safeDump, jsYaml;
3319
+ var isNothing_1, isObject_1, toArray_1, repeat_1, isNegativeZero_1, extend_1, common, exception, snippet, TYPE_CONSTRUCTOR_OPTIONS, YAML_NODE_KINDS, type, schema, str, seq, map, failsafe, _null, bool, int, YAML_FLOAT_PATTERN, SCIENTIFIC_WITHOUT_DOT, float, json, core, YAML_DATE_REGEXP, YAML_TIMESTAMP_REGEXP, timestamp, merge, BASE64_MAP, binary, _hasOwnProperty$3, _toString$2, omap, _toString$1, pairs, _hasOwnProperty$2, set, _default, _hasOwnProperty$1, CONTEXT_FLOW_IN, CONTEXT_FLOW_OUT, CONTEXT_BLOCK_IN, CONTEXT_BLOCK_OUT, CHOMPING_CLIP, CHOMPING_STRIP, CHOMPING_KEEP, PATTERN_NON_PRINTABLE, PATTERN_NON_ASCII_LINE_BREAKS, PATTERN_FLOW_INDICATORS, PATTERN_TAG_HANDLE, PATTERN_TAG_URI, simpleEscapeCheck, simpleEscapeMap, i, directiveHandlers, loadAll_1, load_1, loader, _toString, _hasOwnProperty, CHAR_BOM, CHAR_TAB, CHAR_LINE_FEED, CHAR_CARRIAGE_RETURN, CHAR_SPACE, CHAR_EXCLAMATION, CHAR_DOUBLE_QUOTE, CHAR_SHARP, CHAR_PERCENT, CHAR_AMPERSAND, CHAR_SINGLE_QUOTE, CHAR_ASTERISK, CHAR_COMMA2, CHAR_MINUS, CHAR_COLON2, CHAR_EQUALS2, CHAR_GREATER_THAN, CHAR_QUESTION, CHAR_COMMERCIAL_AT, CHAR_LEFT_SQUARE_BRACKET, CHAR_RIGHT_SQUARE_BRACKET, CHAR_GRAVE_ACCENT, CHAR_LEFT_CURLY_BRACKET, CHAR_VERTICAL_LINE, CHAR_RIGHT_CURLY_BRACKET, ESCAPE_SEQUENCES, DEPRECATED_BOOLEANS_SYNTAX, DEPRECATED_BASE60_SYNTAX, QUOTING_TYPE_SINGLE, QUOTING_TYPE_DOUBLE, STYLE_PLAIN, STYLE_SINGLE, STYLE_LITERAL, STYLE_FOLDED, STYLE_DOUBLE, dump_1, dumper, Type, Schema, FAILSAFE_SCHEMA, JSON_SCHEMA, CORE_SCHEMA, DEFAULT_SCHEMA, load, loadAll, dump, YAMLException, types, safeLoad, safeLoadAll, safeDump, jsYaml;
3315
3320
  var init_js_yaml = __esm({
3316
3321
  "../converters/node_modules/js-yaml/dist/js-yaml.mjs"() {
3317
3322
  "use strict";
@@ -3464,7 +3469,7 @@ var init_js_yaml = __esm({
3464
3469
  kind: "scalar",
3465
3470
  resolve: resolveYamlInteger,
3466
3471
  construct: constructYamlInteger,
3467
- predicate: isInteger,
3472
+ predicate: isInteger2,
3468
3473
  represent: {
3469
3474
  binary: function(obj) {
3470
3475
  return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1);
@@ -3497,7 +3502,7 @@ var init_js_yaml = __esm({
3497
3502
  kind: "scalar",
3498
3503
  resolve: resolveYamlFloat,
3499
3504
  construct: constructYamlFloat,
3500
- predicate: isFloat,
3505
+ predicate: isFloat2,
3501
3506
  represent: representYamlFloat,
3502
3507
  defaultStyle: "lowercase"
3503
3508
  });
@@ -3653,10 +3658,10 @@ var init_js_yaml = __esm({
3653
3658
  CHAR_AMPERSAND = 38;
3654
3659
  CHAR_SINGLE_QUOTE = 39;
3655
3660
  CHAR_ASTERISK = 42;
3656
- CHAR_COMMA = 44;
3661
+ CHAR_COMMA2 = 44;
3657
3662
  CHAR_MINUS = 45;
3658
- CHAR_COLON = 58;
3659
- CHAR_EQUALS = 61;
3663
+ CHAR_COLON2 = 58;
3664
+ CHAR_EQUALS2 = 61;
3660
3665
  CHAR_GREATER_THAN = 62;
3661
3666
  CHAR_QUESTION = 63;
3662
3667
  CHAR_COMMERCIAL_AT = 64;
@@ -4602,6 +4607,2072 @@ var init_from_agents_md = __esm({
4602
4607
  }
4603
4608
  });
4604
4609
 
4610
+ // ../../node_modules/@iarna/toml/lib/parser.js
4611
+ var require_parser = __commonJS({
4612
+ "../../node_modules/@iarna/toml/lib/parser.js"(exports2, module2) {
4613
+ "use strict";
4614
+ init_cjs_shims();
4615
+ var ParserEND = 1114112;
4616
+ var ParserError = class _ParserError extends Error {
4617
+ /* istanbul ignore next */
4618
+ constructor(msg, filename, linenumber) {
4619
+ super("[ParserError] " + msg, filename, linenumber);
4620
+ this.name = "ParserError";
4621
+ this.code = "ParserError";
4622
+ if (Error.captureStackTrace) Error.captureStackTrace(this, _ParserError);
4623
+ }
4624
+ };
4625
+ var State2 = class {
4626
+ constructor(parser) {
4627
+ this.parser = parser;
4628
+ this.buf = "";
4629
+ this.returned = null;
4630
+ this.result = null;
4631
+ this.resultTable = null;
4632
+ this.resultArr = null;
4633
+ }
4634
+ };
4635
+ var Parser = class {
4636
+ constructor() {
4637
+ this.pos = 0;
4638
+ this.col = 0;
4639
+ this.line = 0;
4640
+ this.obj = {};
4641
+ this.ctx = this.obj;
4642
+ this.stack = [];
4643
+ this._buf = "";
4644
+ this.char = null;
4645
+ this.ii = 0;
4646
+ this.state = new State2(this.parseStart);
4647
+ }
4648
+ parse(str2) {
4649
+ if (str2.length === 0 || str2.length == null) return;
4650
+ this._buf = String(str2);
4651
+ this.ii = -1;
4652
+ this.char = -1;
4653
+ let getNext;
4654
+ while (getNext === false || this.nextChar()) {
4655
+ getNext = this.runOne();
4656
+ }
4657
+ this._buf = null;
4658
+ }
4659
+ nextChar() {
4660
+ if (this.char === 10) {
4661
+ ++this.line;
4662
+ this.col = -1;
4663
+ }
4664
+ ++this.ii;
4665
+ this.char = this._buf.codePointAt(this.ii);
4666
+ ++this.pos;
4667
+ ++this.col;
4668
+ return this.haveBuffer();
4669
+ }
4670
+ haveBuffer() {
4671
+ return this.ii < this._buf.length;
4672
+ }
4673
+ runOne() {
4674
+ return this.state.parser.call(this, this.state.returned);
4675
+ }
4676
+ finish() {
4677
+ this.char = ParserEND;
4678
+ let last;
4679
+ do {
4680
+ last = this.state.parser;
4681
+ this.runOne();
4682
+ } while (this.state.parser !== last);
4683
+ this.ctx = null;
4684
+ this.state = null;
4685
+ this._buf = null;
4686
+ return this.obj;
4687
+ }
4688
+ next(fn) {
4689
+ if (typeof fn !== "function") throw new ParserError("Tried to set state to non-existent state: " + JSON.stringify(fn));
4690
+ this.state.parser = fn;
4691
+ }
4692
+ goto(fn) {
4693
+ this.next(fn);
4694
+ return this.runOne();
4695
+ }
4696
+ call(fn, returnWith) {
4697
+ if (returnWith) this.next(returnWith);
4698
+ this.stack.push(this.state);
4699
+ this.state = new State2(fn);
4700
+ }
4701
+ callNow(fn, returnWith) {
4702
+ this.call(fn, returnWith);
4703
+ return this.runOne();
4704
+ }
4705
+ return(value) {
4706
+ if (this.stack.length === 0) throw this.error(new ParserError("Stack underflow"));
4707
+ if (value === void 0) value = this.state.buf;
4708
+ this.state = this.stack.pop();
4709
+ this.state.returned = value;
4710
+ }
4711
+ returnNow(value) {
4712
+ this.return(value);
4713
+ return this.runOne();
4714
+ }
4715
+ consume() {
4716
+ if (this.char === ParserEND) throw this.error(new ParserError("Unexpected end-of-buffer"));
4717
+ this.state.buf += this._buf[this.ii];
4718
+ }
4719
+ error(err) {
4720
+ err.line = this.line;
4721
+ err.col = this.col;
4722
+ err.pos = this.pos;
4723
+ return err;
4724
+ }
4725
+ /* istanbul ignore next */
4726
+ parseStart() {
4727
+ throw new ParserError("Must declare a parseStart method");
4728
+ }
4729
+ };
4730
+ Parser.END = ParserEND;
4731
+ Parser.Error = ParserError;
4732
+ module2.exports = Parser;
4733
+ }
4734
+ });
4735
+
4736
+ // ../../node_modules/@iarna/toml/lib/create-datetime.js
4737
+ var require_create_datetime = __commonJS({
4738
+ "../../node_modules/@iarna/toml/lib/create-datetime.js"(exports2, module2) {
4739
+ "use strict";
4740
+ init_cjs_shims();
4741
+ module2.exports = (value) => {
4742
+ const date = new Date(value);
4743
+ if (isNaN(date)) {
4744
+ throw new TypeError("Invalid Datetime");
4745
+ } else {
4746
+ return date;
4747
+ }
4748
+ };
4749
+ }
4750
+ });
4751
+
4752
+ // ../../node_modules/@iarna/toml/lib/format-num.js
4753
+ var require_format_num = __commonJS({
4754
+ "../../node_modules/@iarna/toml/lib/format-num.js"(exports2, module2) {
4755
+ "use strict";
4756
+ init_cjs_shims();
4757
+ module2.exports = (d, num) => {
4758
+ num = String(num);
4759
+ while (num.length < d) num = "0" + num;
4760
+ return num;
4761
+ };
4762
+ }
4763
+ });
4764
+
4765
+ // ../../node_modules/@iarna/toml/lib/create-datetime-float.js
4766
+ var require_create_datetime_float = __commonJS({
4767
+ "../../node_modules/@iarna/toml/lib/create-datetime-float.js"(exports2, module2) {
4768
+ "use strict";
4769
+ init_cjs_shims();
4770
+ var f = require_format_num();
4771
+ var FloatingDateTime = class extends Date {
4772
+ constructor(value) {
4773
+ super(value + "Z");
4774
+ this.isFloating = true;
4775
+ }
4776
+ toISOString() {
4777
+ const date = `${this.getUTCFullYear()}-${f(2, this.getUTCMonth() + 1)}-${f(2, this.getUTCDate())}`;
4778
+ const time = `${f(2, this.getUTCHours())}:${f(2, this.getUTCMinutes())}:${f(2, this.getUTCSeconds())}.${f(3, this.getUTCMilliseconds())}`;
4779
+ return `${date}T${time}`;
4780
+ }
4781
+ };
4782
+ module2.exports = (value) => {
4783
+ const date = new FloatingDateTime(value);
4784
+ if (isNaN(date)) {
4785
+ throw new TypeError("Invalid Datetime");
4786
+ } else {
4787
+ return date;
4788
+ }
4789
+ };
4790
+ }
4791
+ });
4792
+
4793
+ // ../../node_modules/@iarna/toml/lib/create-date.js
4794
+ var require_create_date = __commonJS({
4795
+ "../../node_modules/@iarna/toml/lib/create-date.js"(exports2, module2) {
4796
+ "use strict";
4797
+ init_cjs_shims();
4798
+ var f = require_format_num();
4799
+ var DateTime = global.Date;
4800
+ var Date2 = class extends DateTime {
4801
+ constructor(value) {
4802
+ super(value);
4803
+ this.isDate = true;
4804
+ }
4805
+ toISOString() {
4806
+ return `${this.getUTCFullYear()}-${f(2, this.getUTCMonth() + 1)}-${f(2, this.getUTCDate())}`;
4807
+ }
4808
+ };
4809
+ module2.exports = (value) => {
4810
+ const date = new Date2(value);
4811
+ if (isNaN(date)) {
4812
+ throw new TypeError("Invalid Datetime");
4813
+ } else {
4814
+ return date;
4815
+ }
4816
+ };
4817
+ }
4818
+ });
4819
+
4820
+ // ../../node_modules/@iarna/toml/lib/create-time.js
4821
+ var require_create_time = __commonJS({
4822
+ "../../node_modules/@iarna/toml/lib/create-time.js"(exports2, module2) {
4823
+ "use strict";
4824
+ init_cjs_shims();
4825
+ var f = require_format_num();
4826
+ var Time = class extends Date {
4827
+ constructor(value) {
4828
+ super(`0000-01-01T${value}Z`);
4829
+ this.isTime = true;
4830
+ }
4831
+ toISOString() {
4832
+ return `${f(2, this.getUTCHours())}:${f(2, this.getUTCMinutes())}:${f(2, this.getUTCSeconds())}.${f(3, this.getUTCMilliseconds())}`;
4833
+ }
4834
+ };
4835
+ module2.exports = (value) => {
4836
+ const date = new Time(value);
4837
+ if (isNaN(date)) {
4838
+ throw new TypeError("Invalid Datetime");
4839
+ } else {
4840
+ return date;
4841
+ }
4842
+ };
4843
+ }
4844
+ });
4845
+
4846
+ // ../../node_modules/@iarna/toml/lib/toml-parser.js
4847
+ var require_toml_parser = __commonJS({
4848
+ "../../node_modules/@iarna/toml/lib/toml-parser.js"(exports, module) {
4849
+ "use strict";
4850
+ init_cjs_shims();
4851
+ module.exports = makeParserClass(require_parser());
4852
+ module.exports.makeParserClass = makeParserClass;
4853
+ var TomlError = class _TomlError extends Error {
4854
+ constructor(msg) {
4855
+ super(msg);
4856
+ this.name = "TomlError";
4857
+ if (Error.captureStackTrace) Error.captureStackTrace(this, _TomlError);
4858
+ this.fromTOML = true;
4859
+ this.wrapped = null;
4860
+ }
4861
+ };
4862
+ TomlError.wrap = (err) => {
4863
+ const terr = new TomlError(err.message);
4864
+ terr.code = err.code;
4865
+ terr.wrapped = err;
4866
+ return terr;
4867
+ };
4868
+ module.exports.TomlError = TomlError;
4869
+ var createDateTime = require_create_datetime();
4870
+ var createDateTimeFloat = require_create_datetime_float();
4871
+ var createDate = require_create_date();
4872
+ var createTime = require_create_time();
4873
+ var CTRL_I = 9;
4874
+ var CTRL_J = 10;
4875
+ var CTRL_M = 13;
4876
+ var CTRL_CHAR_BOUNDARY = 31;
4877
+ var CHAR_SP = 32;
4878
+ var CHAR_QUOT = 34;
4879
+ var CHAR_NUM = 35;
4880
+ var CHAR_APOS = 39;
4881
+ var CHAR_PLUS = 43;
4882
+ var CHAR_COMMA = 44;
4883
+ var CHAR_HYPHEN = 45;
4884
+ var CHAR_PERIOD = 46;
4885
+ var CHAR_0 = 48;
4886
+ var CHAR_1 = 49;
4887
+ var CHAR_7 = 55;
4888
+ var CHAR_9 = 57;
4889
+ var CHAR_COLON = 58;
4890
+ var CHAR_EQUALS = 61;
4891
+ var CHAR_A = 65;
4892
+ var CHAR_E = 69;
4893
+ var CHAR_F = 70;
4894
+ var CHAR_T = 84;
4895
+ var CHAR_U = 85;
4896
+ var CHAR_Z = 90;
4897
+ var CHAR_LOWBAR = 95;
4898
+ var CHAR_a = 97;
4899
+ var CHAR_b = 98;
4900
+ var CHAR_e = 101;
4901
+ var CHAR_f = 102;
4902
+ var CHAR_i = 105;
4903
+ var CHAR_l = 108;
4904
+ var CHAR_n = 110;
4905
+ var CHAR_o = 111;
4906
+ var CHAR_r = 114;
4907
+ var CHAR_s = 115;
4908
+ var CHAR_t = 116;
4909
+ var CHAR_u = 117;
4910
+ var CHAR_x = 120;
4911
+ var CHAR_z = 122;
4912
+ var CHAR_LCUB = 123;
4913
+ var CHAR_RCUB = 125;
4914
+ var CHAR_LSQB = 91;
4915
+ var CHAR_BSOL = 92;
4916
+ var CHAR_RSQB = 93;
4917
+ var CHAR_DEL = 127;
4918
+ var SURROGATE_FIRST = 55296;
4919
+ var SURROGATE_LAST = 57343;
4920
+ var escapes = {
4921
+ [CHAR_b]: "\b",
4922
+ [CHAR_t]: " ",
4923
+ [CHAR_n]: "\n",
4924
+ [CHAR_f]: "\f",
4925
+ [CHAR_r]: "\r",
4926
+ [CHAR_QUOT]: '"',
4927
+ [CHAR_BSOL]: "\\"
4928
+ };
4929
+ function isDigit(cp) {
4930
+ return cp >= CHAR_0 && cp <= CHAR_9;
4931
+ }
4932
+ function isHexit(cp) {
4933
+ return cp >= CHAR_A && cp <= CHAR_F || cp >= CHAR_a && cp <= CHAR_f || cp >= CHAR_0 && cp <= CHAR_9;
4934
+ }
4935
+ function isBit(cp) {
4936
+ return cp === CHAR_1 || cp === CHAR_0;
4937
+ }
4938
+ function isOctit(cp) {
4939
+ return cp >= CHAR_0 && cp <= CHAR_7;
4940
+ }
4941
+ function isAlphaNumQuoteHyphen(cp) {
4942
+ return cp >= CHAR_A && cp <= CHAR_Z || cp >= CHAR_a && cp <= CHAR_z || cp >= CHAR_0 && cp <= CHAR_9 || cp === CHAR_APOS || cp === CHAR_QUOT || cp === CHAR_LOWBAR || cp === CHAR_HYPHEN;
4943
+ }
4944
+ function isAlphaNumHyphen(cp) {
4945
+ return cp >= CHAR_A && cp <= CHAR_Z || cp >= CHAR_a && cp <= CHAR_z || cp >= CHAR_0 && cp <= CHAR_9 || cp === CHAR_LOWBAR || cp === CHAR_HYPHEN;
4946
+ }
4947
+ var _type = Symbol("type");
4948
+ var _declared = Symbol("declared");
4949
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
4950
+ var defineProperty = Object.defineProperty;
4951
+ var descriptor = { configurable: true, enumerable: true, writable: true, value: void 0 };
4952
+ function hasKey(obj, key) {
4953
+ if (hasOwnProperty.call(obj, key)) return true;
4954
+ if (key === "__proto__") defineProperty(obj, "__proto__", descriptor);
4955
+ return false;
4956
+ }
4957
+ var INLINE_TABLE = Symbol("inline-table");
4958
+ function InlineTable() {
4959
+ return Object.defineProperties({}, {
4960
+ [_type]: { value: INLINE_TABLE }
4961
+ });
4962
+ }
4963
+ function isInlineTable(obj) {
4964
+ if (obj === null || typeof obj !== "object") return false;
4965
+ return obj[_type] === INLINE_TABLE;
4966
+ }
4967
+ var TABLE = Symbol("table");
4968
+ function Table() {
4969
+ return Object.defineProperties({}, {
4970
+ [_type]: { value: TABLE },
4971
+ [_declared]: { value: false, writable: true }
4972
+ });
4973
+ }
4974
+ function isTable(obj) {
4975
+ if (obj === null || typeof obj !== "object") return false;
4976
+ return obj[_type] === TABLE;
4977
+ }
4978
+ var _contentType = Symbol("content-type");
4979
+ var INLINE_LIST = Symbol("inline-list");
4980
+ function InlineList(type2) {
4981
+ return Object.defineProperties([], {
4982
+ [_type]: { value: INLINE_LIST },
4983
+ [_contentType]: { value: type2 }
4984
+ });
4985
+ }
4986
+ function isInlineList(obj) {
4987
+ if (obj === null || typeof obj !== "object") return false;
4988
+ return obj[_type] === INLINE_LIST;
4989
+ }
4990
+ var LIST = Symbol("list");
4991
+ function List() {
4992
+ return Object.defineProperties([], {
4993
+ [_type]: { value: LIST }
4994
+ });
4995
+ }
4996
+ function isList(obj) {
4997
+ if (obj === null || typeof obj !== "object") return false;
4998
+ return obj[_type] === LIST;
4999
+ }
5000
+ var _custom;
5001
+ try {
5002
+ const utilInspect = eval("require('util').inspect");
5003
+ _custom = utilInspect.custom;
5004
+ } catch (_) {
5005
+ }
5006
+ var _inspect = _custom || "inspect";
5007
+ var BoxedBigInt = class {
5008
+ constructor(value) {
5009
+ try {
5010
+ this.value = global.BigInt.asIntN(64, value);
5011
+ } catch (_) {
5012
+ this.value = null;
5013
+ }
5014
+ Object.defineProperty(this, _type, { value: INTEGER });
5015
+ }
5016
+ isNaN() {
5017
+ return this.value === null;
5018
+ }
5019
+ /* istanbul ignore next */
5020
+ toString() {
5021
+ return String(this.value);
5022
+ }
5023
+ /* istanbul ignore next */
5024
+ [_inspect]() {
5025
+ return `[BigInt: ${this.toString()}]}`;
5026
+ }
5027
+ valueOf() {
5028
+ return this.value;
5029
+ }
5030
+ };
5031
+ var INTEGER = Symbol("integer");
5032
+ function Integer(value) {
5033
+ let num = Number(value);
5034
+ if (Object.is(num, -0)) num = 0;
5035
+ if (global.BigInt && !Number.isSafeInteger(num)) {
5036
+ return new BoxedBigInt(value);
5037
+ } else {
5038
+ return Object.defineProperties(new Number(num), {
5039
+ isNaN: { value: function() {
5040
+ return isNaN(this);
5041
+ } },
5042
+ [_type]: { value: INTEGER },
5043
+ [_inspect]: { value: () => `[Integer: ${value}]` }
5044
+ });
5045
+ }
5046
+ }
5047
+ function isInteger(obj) {
5048
+ if (obj === null || typeof obj !== "object") return false;
5049
+ return obj[_type] === INTEGER;
5050
+ }
5051
+ var FLOAT = Symbol("float");
5052
+ function Float(value) {
5053
+ return Object.defineProperties(new Number(value), {
5054
+ [_type]: { value: FLOAT },
5055
+ [_inspect]: { value: () => `[Float: ${value}]` }
5056
+ });
5057
+ }
5058
+ function isFloat(obj) {
5059
+ if (obj === null || typeof obj !== "object") return false;
5060
+ return obj[_type] === FLOAT;
5061
+ }
5062
+ function tomlType(value) {
5063
+ const type2 = typeof value;
5064
+ if (type2 === "object") {
5065
+ if (value === null) return "null";
5066
+ if (value instanceof Date) return "datetime";
5067
+ if (_type in value) {
5068
+ switch (value[_type]) {
5069
+ case INLINE_TABLE:
5070
+ return "inline-table";
5071
+ case INLINE_LIST:
5072
+ return "inline-list";
5073
+ /* istanbul ignore next */
5074
+ case TABLE:
5075
+ return "table";
5076
+ /* istanbul ignore next */
5077
+ case LIST:
5078
+ return "list";
5079
+ case FLOAT:
5080
+ return "float";
5081
+ case INTEGER:
5082
+ return "integer";
5083
+ }
5084
+ }
5085
+ }
5086
+ return type2;
5087
+ }
5088
+ function makeParserClass(Parser) {
5089
+ class TOMLParser extends Parser {
5090
+ constructor() {
5091
+ super();
5092
+ this.ctx = this.obj = Table();
5093
+ }
5094
+ /* MATCH HELPER */
5095
+ atEndOfWord() {
5096
+ return this.char === CHAR_NUM || this.char === CTRL_I || this.char === CHAR_SP || this.atEndOfLine();
5097
+ }
5098
+ atEndOfLine() {
5099
+ return this.char === Parser.END || this.char === CTRL_J || this.char === CTRL_M;
5100
+ }
5101
+ parseStart() {
5102
+ if (this.char === Parser.END) {
5103
+ return null;
5104
+ } else if (this.char === CHAR_LSQB) {
5105
+ return this.call(this.parseTableOrList);
5106
+ } else if (this.char === CHAR_NUM) {
5107
+ return this.call(this.parseComment);
5108
+ } else if (this.char === CTRL_J || this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M) {
5109
+ return null;
5110
+ } else if (isAlphaNumQuoteHyphen(this.char)) {
5111
+ return this.callNow(this.parseAssignStatement);
5112
+ } else {
5113
+ throw this.error(new TomlError(`Unknown character "${this.char}"`));
5114
+ }
5115
+ }
5116
+ // HELPER, this strips any whitespace and comments to the end of the line
5117
+ // then RETURNS. Last state in a production.
5118
+ parseWhitespaceToEOL() {
5119
+ if (this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M) {
5120
+ return null;
5121
+ } else if (this.char === CHAR_NUM) {
5122
+ return this.goto(this.parseComment);
5123
+ } else if (this.char === Parser.END || this.char === CTRL_J) {
5124
+ return this.return();
5125
+ } else {
5126
+ throw this.error(new TomlError("Unexpected character, expected only whitespace or comments till end of line"));
5127
+ }
5128
+ }
5129
+ /* ASSIGNMENT: key = value */
5130
+ parseAssignStatement() {
5131
+ return this.callNow(this.parseAssign, this.recordAssignStatement);
5132
+ }
5133
+ recordAssignStatement(kv) {
5134
+ let target = this.ctx;
5135
+ let finalKey = kv.key.pop();
5136
+ for (let kw of kv.key) {
5137
+ if (hasKey(target, kw) && (!isTable(target[kw]) || target[kw][_declared])) {
5138
+ throw this.error(new TomlError("Can't redefine existing key"));
5139
+ }
5140
+ target = target[kw] = target[kw] || Table();
5141
+ }
5142
+ if (hasKey(target, finalKey)) {
5143
+ throw this.error(new TomlError("Can't redefine existing key"));
5144
+ }
5145
+ if (isInteger(kv.value) || isFloat(kv.value)) {
5146
+ target[finalKey] = kv.value.valueOf();
5147
+ } else {
5148
+ target[finalKey] = kv.value;
5149
+ }
5150
+ return this.goto(this.parseWhitespaceToEOL);
5151
+ }
5152
+ /* ASSSIGNMENT expression, key = value possibly inside an inline table */
5153
+ parseAssign() {
5154
+ return this.callNow(this.parseKeyword, this.recordAssignKeyword);
5155
+ }
5156
+ recordAssignKeyword(key) {
5157
+ if (this.state.resultTable) {
5158
+ this.state.resultTable.push(key);
5159
+ } else {
5160
+ this.state.resultTable = [key];
5161
+ }
5162
+ return this.goto(this.parseAssignKeywordPreDot);
5163
+ }
5164
+ parseAssignKeywordPreDot() {
5165
+ if (this.char === CHAR_PERIOD) {
5166
+ return this.next(this.parseAssignKeywordPostDot);
5167
+ } else if (this.char !== CHAR_SP && this.char !== CTRL_I) {
5168
+ return this.goto(this.parseAssignEqual);
5169
+ }
5170
+ }
5171
+ parseAssignKeywordPostDot() {
5172
+ if (this.char !== CHAR_SP && this.char !== CTRL_I) {
5173
+ return this.callNow(this.parseKeyword, this.recordAssignKeyword);
5174
+ }
5175
+ }
5176
+ parseAssignEqual() {
5177
+ if (this.char === CHAR_EQUALS) {
5178
+ return this.next(this.parseAssignPreValue);
5179
+ } else {
5180
+ throw this.error(new TomlError('Invalid character, expected "="'));
5181
+ }
5182
+ }
5183
+ parseAssignPreValue() {
5184
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
5185
+ return null;
5186
+ } else {
5187
+ return this.callNow(this.parseValue, this.recordAssignValue);
5188
+ }
5189
+ }
5190
+ recordAssignValue(value) {
5191
+ return this.returnNow({ key: this.state.resultTable, value });
5192
+ }
5193
+ /* COMMENTS: #...eol */
5194
+ parseComment() {
5195
+ do {
5196
+ if (this.char === Parser.END || this.char === CTRL_J) {
5197
+ return this.return();
5198
+ }
5199
+ } while (this.nextChar());
5200
+ }
5201
+ /* TABLES AND LISTS, [foo] and [[foo]] */
5202
+ parseTableOrList() {
5203
+ if (this.char === CHAR_LSQB) {
5204
+ this.next(this.parseList);
5205
+ } else {
5206
+ return this.goto(this.parseTable);
5207
+ }
5208
+ }
5209
+ /* TABLE [foo.bar.baz] */
5210
+ parseTable() {
5211
+ this.ctx = this.obj;
5212
+ return this.goto(this.parseTableNext);
5213
+ }
5214
+ parseTableNext() {
5215
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
5216
+ return null;
5217
+ } else {
5218
+ return this.callNow(this.parseKeyword, this.parseTableMore);
5219
+ }
5220
+ }
5221
+ parseTableMore(keyword) {
5222
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
5223
+ return null;
5224
+ } else if (this.char === CHAR_RSQB) {
5225
+ if (hasKey(this.ctx, keyword) && (!isTable(this.ctx[keyword]) || this.ctx[keyword][_declared])) {
5226
+ throw this.error(new TomlError("Can't redefine existing key"));
5227
+ } else {
5228
+ this.ctx = this.ctx[keyword] = this.ctx[keyword] || Table();
5229
+ this.ctx[_declared] = true;
5230
+ }
5231
+ return this.next(this.parseWhitespaceToEOL);
5232
+ } else if (this.char === CHAR_PERIOD) {
5233
+ if (!hasKey(this.ctx, keyword)) {
5234
+ this.ctx = this.ctx[keyword] = Table();
5235
+ } else if (isTable(this.ctx[keyword])) {
5236
+ this.ctx = this.ctx[keyword];
5237
+ } else if (isList(this.ctx[keyword])) {
5238
+ this.ctx = this.ctx[keyword][this.ctx[keyword].length - 1];
5239
+ } else {
5240
+ throw this.error(new TomlError("Can't redefine existing key"));
5241
+ }
5242
+ return this.next(this.parseTableNext);
5243
+ } else {
5244
+ throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"));
5245
+ }
5246
+ }
5247
+ /* LIST [[a.b.c]] */
5248
+ parseList() {
5249
+ this.ctx = this.obj;
5250
+ return this.goto(this.parseListNext);
5251
+ }
5252
+ parseListNext() {
5253
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
5254
+ return null;
5255
+ } else {
5256
+ return this.callNow(this.parseKeyword, this.parseListMore);
5257
+ }
5258
+ }
5259
+ parseListMore(keyword) {
5260
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
5261
+ return null;
5262
+ } else if (this.char === CHAR_RSQB) {
5263
+ if (!hasKey(this.ctx, keyword)) {
5264
+ this.ctx[keyword] = List();
5265
+ }
5266
+ if (isInlineList(this.ctx[keyword])) {
5267
+ throw this.error(new TomlError("Can't extend an inline array"));
5268
+ } else if (isList(this.ctx[keyword])) {
5269
+ const next = Table();
5270
+ this.ctx[keyword].push(next);
5271
+ this.ctx = next;
5272
+ } else {
5273
+ throw this.error(new TomlError("Can't redefine an existing key"));
5274
+ }
5275
+ return this.next(this.parseListEnd);
5276
+ } else if (this.char === CHAR_PERIOD) {
5277
+ if (!hasKey(this.ctx, keyword)) {
5278
+ this.ctx = this.ctx[keyword] = Table();
5279
+ } else if (isInlineList(this.ctx[keyword])) {
5280
+ throw this.error(new TomlError("Can't extend an inline array"));
5281
+ } else if (isInlineTable(this.ctx[keyword])) {
5282
+ throw this.error(new TomlError("Can't extend an inline table"));
5283
+ } else if (isList(this.ctx[keyword])) {
5284
+ this.ctx = this.ctx[keyword][this.ctx[keyword].length - 1];
5285
+ } else if (isTable(this.ctx[keyword])) {
5286
+ this.ctx = this.ctx[keyword];
5287
+ } else {
5288
+ throw this.error(new TomlError("Can't redefine an existing key"));
5289
+ }
5290
+ return this.next(this.parseListNext);
5291
+ } else {
5292
+ throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"));
5293
+ }
5294
+ }
5295
+ parseListEnd(keyword) {
5296
+ if (this.char === CHAR_RSQB) {
5297
+ return this.next(this.parseWhitespaceToEOL);
5298
+ } else {
5299
+ throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"));
5300
+ }
5301
+ }
5302
+ /* VALUE string, number, boolean, inline list, inline object */
5303
+ parseValue() {
5304
+ if (this.char === Parser.END) {
5305
+ throw this.error(new TomlError("Key without value"));
5306
+ } else if (this.char === CHAR_QUOT) {
5307
+ return this.next(this.parseDoubleString);
5308
+ }
5309
+ if (this.char === CHAR_APOS) {
5310
+ return this.next(this.parseSingleString);
5311
+ } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {
5312
+ return this.goto(this.parseNumberSign);
5313
+ } else if (this.char === CHAR_i) {
5314
+ return this.next(this.parseInf);
5315
+ } else if (this.char === CHAR_n) {
5316
+ return this.next(this.parseNan);
5317
+ } else if (isDigit(this.char)) {
5318
+ return this.goto(this.parseNumberOrDateTime);
5319
+ } else if (this.char === CHAR_t || this.char === CHAR_f) {
5320
+ return this.goto(this.parseBoolean);
5321
+ } else if (this.char === CHAR_LSQB) {
5322
+ return this.call(this.parseInlineList, this.recordValue);
5323
+ } else if (this.char === CHAR_LCUB) {
5324
+ return this.call(this.parseInlineTable, this.recordValue);
5325
+ } else {
5326
+ throw this.error(new TomlError("Unexpected character, expecting string, number, datetime, boolean, inline array or inline table"));
5327
+ }
5328
+ }
5329
+ recordValue(value) {
5330
+ return this.returnNow(value);
5331
+ }
5332
+ parseInf() {
5333
+ if (this.char === CHAR_n) {
5334
+ return this.next(this.parseInf2);
5335
+ } else {
5336
+ throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'));
5337
+ }
5338
+ }
5339
+ parseInf2() {
5340
+ if (this.char === CHAR_f) {
5341
+ if (this.state.buf === "-") {
5342
+ return this.return(-Infinity);
5343
+ } else {
5344
+ return this.return(Infinity);
5345
+ }
5346
+ } else {
5347
+ throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'));
5348
+ }
5349
+ }
5350
+ parseNan() {
5351
+ if (this.char === CHAR_a) {
5352
+ return this.next(this.parseNan2);
5353
+ } else {
5354
+ throw this.error(new TomlError('Unexpected character, expected "nan"'));
5355
+ }
5356
+ }
5357
+ parseNan2() {
5358
+ if (this.char === CHAR_n) {
5359
+ return this.return(NaN);
5360
+ } else {
5361
+ throw this.error(new TomlError('Unexpected character, expected "nan"'));
5362
+ }
5363
+ }
5364
+ /* KEYS, barewords or basic, literal, or dotted */
5365
+ parseKeyword() {
5366
+ if (this.char === CHAR_QUOT) {
5367
+ return this.next(this.parseBasicString);
5368
+ } else if (this.char === CHAR_APOS) {
5369
+ return this.next(this.parseLiteralString);
5370
+ } else {
5371
+ return this.goto(this.parseBareKey);
5372
+ }
5373
+ }
5374
+ /* KEYS: barewords */
5375
+ parseBareKey() {
5376
+ do {
5377
+ if (this.char === Parser.END) {
5378
+ throw this.error(new TomlError("Key ended without value"));
5379
+ } else if (isAlphaNumHyphen(this.char)) {
5380
+ this.consume();
5381
+ } else if (this.state.buf.length === 0) {
5382
+ throw this.error(new TomlError("Empty bare keys are not allowed"));
5383
+ } else {
5384
+ return this.returnNow();
5385
+ }
5386
+ } while (this.nextChar());
5387
+ }
5388
+ /* STRINGS, single quoted (literal) */
5389
+ parseSingleString() {
5390
+ if (this.char === CHAR_APOS) {
5391
+ return this.next(this.parseLiteralMultiStringMaybe);
5392
+ } else {
5393
+ return this.goto(this.parseLiteralString);
5394
+ }
5395
+ }
5396
+ parseLiteralString() {
5397
+ do {
5398
+ if (this.char === CHAR_APOS) {
5399
+ return this.return();
5400
+ } else if (this.atEndOfLine()) {
5401
+ throw this.error(new TomlError("Unterminated string"));
5402
+ } else if (this.char === CHAR_DEL || this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I) {
5403
+ throw this.errorControlCharInString();
5404
+ } else {
5405
+ this.consume();
5406
+ }
5407
+ } while (this.nextChar());
5408
+ }
5409
+ parseLiteralMultiStringMaybe() {
5410
+ if (this.char === CHAR_APOS) {
5411
+ return this.next(this.parseLiteralMultiString);
5412
+ } else {
5413
+ return this.returnNow();
5414
+ }
5415
+ }
5416
+ parseLiteralMultiString() {
5417
+ if (this.char === CTRL_M) {
5418
+ return null;
5419
+ } else if (this.char === CTRL_J) {
5420
+ return this.next(this.parseLiteralMultiStringContent);
5421
+ } else {
5422
+ return this.goto(this.parseLiteralMultiStringContent);
5423
+ }
5424
+ }
5425
+ parseLiteralMultiStringContent() {
5426
+ do {
5427
+ if (this.char === CHAR_APOS) {
5428
+ return this.next(this.parseLiteralMultiEnd);
5429
+ } else if (this.char === Parser.END) {
5430
+ throw this.error(new TomlError("Unterminated multi-line string"));
5431
+ } else if (this.char === CHAR_DEL || this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I && this.char !== CTRL_J && this.char !== CTRL_M) {
5432
+ throw this.errorControlCharInString();
5433
+ } else {
5434
+ this.consume();
5435
+ }
5436
+ } while (this.nextChar());
5437
+ }
5438
+ parseLiteralMultiEnd() {
5439
+ if (this.char === CHAR_APOS) {
5440
+ return this.next(this.parseLiteralMultiEnd2);
5441
+ } else {
5442
+ this.state.buf += "'";
5443
+ return this.goto(this.parseLiteralMultiStringContent);
5444
+ }
5445
+ }
5446
+ parseLiteralMultiEnd2() {
5447
+ if (this.char === CHAR_APOS) {
5448
+ return this.return();
5449
+ } else {
5450
+ this.state.buf += "''";
5451
+ return this.goto(this.parseLiteralMultiStringContent);
5452
+ }
5453
+ }
5454
+ /* STRINGS double quoted */
5455
+ parseDoubleString() {
5456
+ if (this.char === CHAR_QUOT) {
5457
+ return this.next(this.parseMultiStringMaybe);
5458
+ } else {
5459
+ return this.goto(this.parseBasicString);
5460
+ }
5461
+ }
5462
+ parseBasicString() {
5463
+ do {
5464
+ if (this.char === CHAR_BSOL) {
5465
+ return this.call(this.parseEscape, this.recordEscapeReplacement);
5466
+ } else if (this.char === CHAR_QUOT) {
5467
+ return this.return();
5468
+ } else if (this.atEndOfLine()) {
5469
+ throw this.error(new TomlError("Unterminated string"));
5470
+ } else if (this.char === CHAR_DEL || this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I) {
5471
+ throw this.errorControlCharInString();
5472
+ } else {
5473
+ this.consume();
5474
+ }
5475
+ } while (this.nextChar());
5476
+ }
5477
+ recordEscapeReplacement(replacement) {
5478
+ this.state.buf += replacement;
5479
+ return this.goto(this.parseBasicString);
5480
+ }
5481
+ parseMultiStringMaybe() {
5482
+ if (this.char === CHAR_QUOT) {
5483
+ return this.next(this.parseMultiString);
5484
+ } else {
5485
+ return this.returnNow();
5486
+ }
5487
+ }
5488
+ parseMultiString() {
5489
+ if (this.char === CTRL_M) {
5490
+ return null;
5491
+ } else if (this.char === CTRL_J) {
5492
+ return this.next(this.parseMultiStringContent);
5493
+ } else {
5494
+ return this.goto(this.parseMultiStringContent);
5495
+ }
5496
+ }
5497
+ parseMultiStringContent() {
5498
+ do {
5499
+ if (this.char === CHAR_BSOL) {
5500
+ return this.call(this.parseMultiEscape, this.recordMultiEscapeReplacement);
5501
+ } else if (this.char === CHAR_QUOT) {
5502
+ return this.next(this.parseMultiEnd);
5503
+ } else if (this.char === Parser.END) {
5504
+ throw this.error(new TomlError("Unterminated multi-line string"));
5505
+ } else if (this.char === CHAR_DEL || this.char <= CTRL_CHAR_BOUNDARY && this.char !== CTRL_I && this.char !== CTRL_J && this.char !== CTRL_M) {
5506
+ throw this.errorControlCharInString();
5507
+ } else {
5508
+ this.consume();
5509
+ }
5510
+ } while (this.nextChar());
5511
+ }
5512
+ errorControlCharInString() {
5513
+ let displayCode = "\\u00";
5514
+ if (this.char < 16) {
5515
+ displayCode += "0";
5516
+ }
5517
+ displayCode += this.char.toString(16);
5518
+ return this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in strings, use ${displayCode} instead`));
5519
+ }
5520
+ recordMultiEscapeReplacement(replacement) {
5521
+ this.state.buf += replacement;
5522
+ return this.goto(this.parseMultiStringContent);
5523
+ }
5524
+ parseMultiEnd() {
5525
+ if (this.char === CHAR_QUOT) {
5526
+ return this.next(this.parseMultiEnd2);
5527
+ } else {
5528
+ this.state.buf += '"';
5529
+ return this.goto(this.parseMultiStringContent);
5530
+ }
5531
+ }
5532
+ parseMultiEnd2() {
5533
+ if (this.char === CHAR_QUOT) {
5534
+ return this.return();
5535
+ } else {
5536
+ this.state.buf += '""';
5537
+ return this.goto(this.parseMultiStringContent);
5538
+ }
5539
+ }
5540
+ parseMultiEscape() {
5541
+ if (this.char === CTRL_M || this.char === CTRL_J) {
5542
+ return this.next(this.parseMultiTrim);
5543
+ } else if (this.char === CHAR_SP || this.char === CTRL_I) {
5544
+ return this.next(this.parsePreMultiTrim);
5545
+ } else {
5546
+ return this.goto(this.parseEscape);
5547
+ }
5548
+ }
5549
+ parsePreMultiTrim() {
5550
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
5551
+ return null;
5552
+ } else if (this.char === CTRL_M || this.char === CTRL_J) {
5553
+ return this.next(this.parseMultiTrim);
5554
+ } else {
5555
+ throw this.error(new TomlError("Can't escape whitespace"));
5556
+ }
5557
+ }
5558
+ parseMultiTrim() {
5559
+ if (this.char === CTRL_J || this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M) {
5560
+ return null;
5561
+ } else {
5562
+ return this.returnNow();
5563
+ }
5564
+ }
5565
+ parseEscape() {
5566
+ if (this.char in escapes) {
5567
+ return this.return(escapes[this.char]);
5568
+ } else if (this.char === CHAR_u) {
5569
+ return this.call(this.parseSmallUnicode, this.parseUnicodeReturn);
5570
+ } else if (this.char === CHAR_U) {
5571
+ return this.call(this.parseLargeUnicode, this.parseUnicodeReturn);
5572
+ } else {
5573
+ throw this.error(new TomlError("Unknown escape character: " + this.char));
5574
+ }
5575
+ }
5576
+ parseUnicodeReturn(char) {
5577
+ try {
5578
+ const codePoint = parseInt(char, 16);
5579
+ if (codePoint >= SURROGATE_FIRST && codePoint <= SURROGATE_LAST) {
5580
+ throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));
5581
+ }
5582
+ return this.returnNow(String.fromCodePoint(codePoint));
5583
+ } catch (err) {
5584
+ throw this.error(TomlError.wrap(err));
5585
+ }
5586
+ }
5587
+ parseSmallUnicode() {
5588
+ if (!isHexit(this.char)) {
5589
+ throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"));
5590
+ } else {
5591
+ this.consume();
5592
+ if (this.state.buf.length >= 4) return this.return();
5593
+ }
5594
+ }
5595
+ parseLargeUnicode() {
5596
+ if (!isHexit(this.char)) {
5597
+ throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"));
5598
+ } else {
5599
+ this.consume();
5600
+ if (this.state.buf.length >= 8) return this.return();
5601
+ }
5602
+ }
5603
+ /* NUMBERS */
5604
+ parseNumberSign() {
5605
+ this.consume();
5606
+ return this.next(this.parseMaybeSignedInfOrNan);
5607
+ }
5608
+ parseMaybeSignedInfOrNan() {
5609
+ if (this.char === CHAR_i) {
5610
+ return this.next(this.parseInf);
5611
+ } else if (this.char === CHAR_n) {
5612
+ return this.next(this.parseNan);
5613
+ } else {
5614
+ return this.callNow(this.parseNoUnder, this.parseNumberIntegerStart);
5615
+ }
5616
+ }
5617
+ parseNumberIntegerStart() {
5618
+ if (this.char === CHAR_0) {
5619
+ this.consume();
5620
+ return this.next(this.parseNumberIntegerExponentOrDecimal);
5621
+ } else {
5622
+ return this.goto(this.parseNumberInteger);
5623
+ }
5624
+ }
5625
+ parseNumberIntegerExponentOrDecimal() {
5626
+ if (this.char === CHAR_PERIOD) {
5627
+ this.consume();
5628
+ return this.call(this.parseNoUnder, this.parseNumberFloat);
5629
+ } else if (this.char === CHAR_E || this.char === CHAR_e) {
5630
+ this.consume();
5631
+ return this.next(this.parseNumberExponentSign);
5632
+ } else {
5633
+ return this.returnNow(Integer(this.state.buf));
5634
+ }
5635
+ }
5636
+ parseNumberInteger() {
5637
+ if (isDigit(this.char)) {
5638
+ this.consume();
5639
+ } else if (this.char === CHAR_LOWBAR) {
5640
+ return this.call(this.parseNoUnder);
5641
+ } else if (this.char === CHAR_E || this.char === CHAR_e) {
5642
+ this.consume();
5643
+ return this.next(this.parseNumberExponentSign);
5644
+ } else if (this.char === CHAR_PERIOD) {
5645
+ this.consume();
5646
+ return this.call(this.parseNoUnder, this.parseNumberFloat);
5647
+ } else {
5648
+ const result = Integer(this.state.buf);
5649
+ if (result.isNaN()) {
5650
+ throw this.error(new TomlError("Invalid number"));
5651
+ } else {
5652
+ return this.returnNow(result);
5653
+ }
5654
+ }
5655
+ }
5656
+ parseNoUnder() {
5657
+ if (this.char === CHAR_LOWBAR || this.char === CHAR_PERIOD || this.char === CHAR_E || this.char === CHAR_e) {
5658
+ throw this.error(new TomlError("Unexpected character, expected digit"));
5659
+ } else if (this.atEndOfWord()) {
5660
+ throw this.error(new TomlError("Incomplete number"));
5661
+ }
5662
+ return this.returnNow();
5663
+ }
5664
+ parseNoUnderHexOctBinLiteral() {
5665
+ if (this.char === CHAR_LOWBAR || this.char === CHAR_PERIOD) {
5666
+ throw this.error(new TomlError("Unexpected character, expected digit"));
5667
+ } else if (this.atEndOfWord()) {
5668
+ throw this.error(new TomlError("Incomplete number"));
5669
+ }
5670
+ return this.returnNow();
5671
+ }
5672
+ parseNumberFloat() {
5673
+ if (this.char === CHAR_LOWBAR) {
5674
+ return this.call(this.parseNoUnder, this.parseNumberFloat);
5675
+ } else if (isDigit(this.char)) {
5676
+ this.consume();
5677
+ } else if (this.char === CHAR_E || this.char === CHAR_e) {
5678
+ this.consume();
5679
+ return this.next(this.parseNumberExponentSign);
5680
+ } else {
5681
+ return this.returnNow(Float(this.state.buf));
5682
+ }
5683
+ }
5684
+ parseNumberExponentSign() {
5685
+ if (isDigit(this.char)) {
5686
+ return this.goto(this.parseNumberExponent);
5687
+ } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {
5688
+ this.consume();
5689
+ this.call(this.parseNoUnder, this.parseNumberExponent);
5690
+ } else {
5691
+ throw this.error(new TomlError("Unexpected character, expected -, + or digit"));
5692
+ }
5693
+ }
5694
+ parseNumberExponent() {
5695
+ if (isDigit(this.char)) {
5696
+ this.consume();
5697
+ } else if (this.char === CHAR_LOWBAR) {
5698
+ return this.call(this.parseNoUnder);
5699
+ } else {
5700
+ return this.returnNow(Float(this.state.buf));
5701
+ }
5702
+ }
5703
+ /* NUMBERS or DATETIMES */
5704
+ parseNumberOrDateTime() {
5705
+ if (this.char === CHAR_0) {
5706
+ this.consume();
5707
+ return this.next(this.parseNumberBaseOrDateTime);
5708
+ } else {
5709
+ return this.goto(this.parseNumberOrDateTimeOnly);
5710
+ }
5711
+ }
5712
+ parseNumberOrDateTimeOnly() {
5713
+ if (this.char === CHAR_LOWBAR) {
5714
+ return this.call(this.parseNoUnder, this.parseNumberInteger);
5715
+ } else if (isDigit(this.char)) {
5716
+ this.consume();
5717
+ if (this.state.buf.length > 4) this.next(this.parseNumberInteger);
5718
+ } else if (this.char === CHAR_E || this.char === CHAR_e) {
5719
+ this.consume();
5720
+ return this.next(this.parseNumberExponentSign);
5721
+ } else if (this.char === CHAR_PERIOD) {
5722
+ this.consume();
5723
+ return this.call(this.parseNoUnder, this.parseNumberFloat);
5724
+ } else if (this.char === CHAR_HYPHEN) {
5725
+ return this.goto(this.parseDateTime);
5726
+ } else if (this.char === CHAR_COLON) {
5727
+ return this.goto(this.parseOnlyTimeHour);
5728
+ } else {
5729
+ return this.returnNow(Integer(this.state.buf));
5730
+ }
5731
+ }
5732
+ parseDateTimeOnly() {
5733
+ if (this.state.buf.length < 4) {
5734
+ if (isDigit(this.char)) {
5735
+ return this.consume();
5736
+ } else if (this.char === CHAR_COLON) {
5737
+ return this.goto(this.parseOnlyTimeHour);
5738
+ } else {
5739
+ throw this.error(new TomlError("Expected digit while parsing year part of a date"));
5740
+ }
5741
+ } else {
5742
+ if (this.char === CHAR_HYPHEN) {
5743
+ return this.goto(this.parseDateTime);
5744
+ } else {
5745
+ throw this.error(new TomlError("Expected hyphen (-) while parsing year part of date"));
5746
+ }
5747
+ }
5748
+ }
5749
+ parseNumberBaseOrDateTime() {
5750
+ if (this.char === CHAR_b) {
5751
+ this.consume();
5752
+ return this.call(this.parseNoUnderHexOctBinLiteral, this.parseIntegerBin);
5753
+ } else if (this.char === CHAR_o) {
5754
+ this.consume();
5755
+ return this.call(this.parseNoUnderHexOctBinLiteral, this.parseIntegerOct);
5756
+ } else if (this.char === CHAR_x) {
5757
+ this.consume();
5758
+ return this.call(this.parseNoUnderHexOctBinLiteral, this.parseIntegerHex);
5759
+ } else if (this.char === CHAR_PERIOD) {
5760
+ return this.goto(this.parseNumberInteger);
5761
+ } else if (isDigit(this.char)) {
5762
+ return this.goto(this.parseDateTimeOnly);
5763
+ } else {
5764
+ return this.returnNow(Integer(this.state.buf));
5765
+ }
5766
+ }
5767
+ parseIntegerHex() {
5768
+ if (isHexit(this.char)) {
5769
+ this.consume();
5770
+ } else if (this.char === CHAR_LOWBAR) {
5771
+ return this.call(this.parseNoUnderHexOctBinLiteral);
5772
+ } else {
5773
+ const result = Integer(this.state.buf);
5774
+ if (result.isNaN()) {
5775
+ throw this.error(new TomlError("Invalid number"));
5776
+ } else {
5777
+ return this.returnNow(result);
5778
+ }
5779
+ }
5780
+ }
5781
+ parseIntegerOct() {
5782
+ if (isOctit(this.char)) {
5783
+ this.consume();
5784
+ } else if (this.char === CHAR_LOWBAR) {
5785
+ return this.call(this.parseNoUnderHexOctBinLiteral);
5786
+ } else {
5787
+ const result = Integer(this.state.buf);
5788
+ if (result.isNaN()) {
5789
+ throw this.error(new TomlError("Invalid number"));
5790
+ } else {
5791
+ return this.returnNow(result);
5792
+ }
5793
+ }
5794
+ }
5795
+ parseIntegerBin() {
5796
+ if (isBit(this.char)) {
5797
+ this.consume();
5798
+ } else if (this.char === CHAR_LOWBAR) {
5799
+ return this.call(this.parseNoUnderHexOctBinLiteral);
5800
+ } else {
5801
+ const result = Integer(this.state.buf);
5802
+ if (result.isNaN()) {
5803
+ throw this.error(new TomlError("Invalid number"));
5804
+ } else {
5805
+ return this.returnNow(result);
5806
+ }
5807
+ }
5808
+ }
5809
+ /* DATETIME */
5810
+ parseDateTime() {
5811
+ if (this.state.buf.length < 4) {
5812
+ throw this.error(new TomlError("Years less than 1000 must be zero padded to four characters"));
5813
+ }
5814
+ this.state.result = this.state.buf;
5815
+ this.state.buf = "";
5816
+ return this.next(this.parseDateMonth);
5817
+ }
5818
+ parseDateMonth() {
5819
+ if (this.char === CHAR_HYPHEN) {
5820
+ if (this.state.buf.length < 2) {
5821
+ throw this.error(new TomlError("Months less than 10 must be zero padded to two characters"));
5822
+ }
5823
+ this.state.result += "-" + this.state.buf;
5824
+ this.state.buf = "";
5825
+ return this.next(this.parseDateDay);
5826
+ } else if (isDigit(this.char)) {
5827
+ this.consume();
5828
+ } else {
5829
+ throw this.error(new TomlError("Incomplete datetime"));
5830
+ }
5831
+ }
5832
+ parseDateDay() {
5833
+ if (this.char === CHAR_T || this.char === CHAR_SP) {
5834
+ if (this.state.buf.length < 2) {
5835
+ throw this.error(new TomlError("Days less than 10 must be zero padded to two characters"));
5836
+ }
5837
+ this.state.result += "-" + this.state.buf;
5838
+ this.state.buf = "";
5839
+ return this.next(this.parseStartTimeHour);
5840
+ } else if (this.atEndOfWord()) {
5841
+ return this.returnNow(createDate(this.state.result + "-" + this.state.buf));
5842
+ } else if (isDigit(this.char)) {
5843
+ this.consume();
5844
+ } else {
5845
+ throw this.error(new TomlError("Incomplete datetime"));
5846
+ }
5847
+ }
5848
+ parseStartTimeHour() {
5849
+ if (this.atEndOfWord()) {
5850
+ return this.returnNow(createDate(this.state.result));
5851
+ } else {
5852
+ return this.goto(this.parseTimeHour);
5853
+ }
5854
+ }
5855
+ parseTimeHour() {
5856
+ if (this.char === CHAR_COLON) {
5857
+ if (this.state.buf.length < 2) {
5858
+ throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));
5859
+ }
5860
+ this.state.result += "T" + this.state.buf;
5861
+ this.state.buf = "";
5862
+ return this.next(this.parseTimeMin);
5863
+ } else if (isDigit(this.char)) {
5864
+ this.consume();
5865
+ } else {
5866
+ throw this.error(new TomlError("Incomplete datetime"));
5867
+ }
5868
+ }
5869
+ parseTimeMin() {
5870
+ if (this.state.buf.length < 2 && isDigit(this.char)) {
5871
+ this.consume();
5872
+ } else if (this.state.buf.length === 2 && this.char === CHAR_COLON) {
5873
+ this.state.result += ":" + this.state.buf;
5874
+ this.state.buf = "";
5875
+ return this.next(this.parseTimeSec);
5876
+ } else {
5877
+ throw this.error(new TomlError("Incomplete datetime"));
5878
+ }
5879
+ }
5880
+ parseTimeSec() {
5881
+ if (isDigit(this.char)) {
5882
+ this.consume();
5883
+ if (this.state.buf.length === 2) {
5884
+ this.state.result += ":" + this.state.buf;
5885
+ this.state.buf = "";
5886
+ return this.next(this.parseTimeZoneOrFraction);
5887
+ }
5888
+ } else {
5889
+ throw this.error(new TomlError("Incomplete datetime"));
5890
+ }
5891
+ }
5892
+ parseOnlyTimeHour() {
5893
+ if (this.char === CHAR_COLON) {
5894
+ if (this.state.buf.length < 2) {
5895
+ throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));
5896
+ }
5897
+ this.state.result = this.state.buf;
5898
+ this.state.buf = "";
5899
+ return this.next(this.parseOnlyTimeMin);
5900
+ } else {
5901
+ throw this.error(new TomlError("Incomplete time"));
5902
+ }
5903
+ }
5904
+ parseOnlyTimeMin() {
5905
+ if (this.state.buf.length < 2 && isDigit(this.char)) {
5906
+ this.consume();
5907
+ } else if (this.state.buf.length === 2 && this.char === CHAR_COLON) {
5908
+ this.state.result += ":" + this.state.buf;
5909
+ this.state.buf = "";
5910
+ return this.next(this.parseOnlyTimeSec);
5911
+ } else {
5912
+ throw this.error(new TomlError("Incomplete time"));
5913
+ }
5914
+ }
5915
+ parseOnlyTimeSec() {
5916
+ if (isDigit(this.char)) {
5917
+ this.consume();
5918
+ if (this.state.buf.length === 2) {
5919
+ return this.next(this.parseOnlyTimeFractionMaybe);
5920
+ }
5921
+ } else {
5922
+ throw this.error(new TomlError("Incomplete time"));
5923
+ }
5924
+ }
5925
+ parseOnlyTimeFractionMaybe() {
5926
+ this.state.result += ":" + this.state.buf;
5927
+ if (this.char === CHAR_PERIOD) {
5928
+ this.state.buf = "";
5929
+ this.next(this.parseOnlyTimeFraction);
5930
+ } else {
5931
+ return this.return(createTime(this.state.result));
5932
+ }
5933
+ }
5934
+ parseOnlyTimeFraction() {
5935
+ if (isDigit(this.char)) {
5936
+ this.consume();
5937
+ } else if (this.atEndOfWord()) {
5938
+ if (this.state.buf.length === 0) throw this.error(new TomlError("Expected digit in milliseconds"));
5939
+ return this.returnNow(createTime(this.state.result + "." + this.state.buf));
5940
+ } else {
5941
+ throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"));
5942
+ }
5943
+ }
5944
+ parseTimeZoneOrFraction() {
5945
+ if (this.char === CHAR_PERIOD) {
5946
+ this.consume();
5947
+ this.next(this.parseDateTimeFraction);
5948
+ } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {
5949
+ this.consume();
5950
+ this.next(this.parseTimeZoneHour);
5951
+ } else if (this.char === CHAR_Z) {
5952
+ this.consume();
5953
+ return this.return(createDateTime(this.state.result + this.state.buf));
5954
+ } else if (this.atEndOfWord()) {
5955
+ return this.returnNow(createDateTimeFloat(this.state.result + this.state.buf));
5956
+ } else {
5957
+ throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"));
5958
+ }
5959
+ }
5960
+ parseDateTimeFraction() {
5961
+ if (isDigit(this.char)) {
5962
+ this.consume();
5963
+ } else if (this.state.buf.length === 1) {
5964
+ throw this.error(new TomlError("Expected digit in milliseconds"));
5965
+ } else if (this.char === CHAR_HYPHEN || this.char === CHAR_PLUS) {
5966
+ this.consume();
5967
+ this.next(this.parseTimeZoneHour);
5968
+ } else if (this.char === CHAR_Z) {
5969
+ this.consume();
5970
+ return this.return(createDateTime(this.state.result + this.state.buf));
5971
+ } else if (this.atEndOfWord()) {
5972
+ return this.returnNow(createDateTimeFloat(this.state.result + this.state.buf));
5973
+ } else {
5974
+ throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"));
5975
+ }
5976
+ }
5977
+ parseTimeZoneHour() {
5978
+ if (isDigit(this.char)) {
5979
+ this.consume();
5980
+ if (/\d\d$/.test(this.state.buf)) return this.next(this.parseTimeZoneSep);
5981
+ } else {
5982
+ throw this.error(new TomlError("Unexpected character in datetime, expected digit"));
5983
+ }
5984
+ }
5985
+ parseTimeZoneSep() {
5986
+ if (this.char === CHAR_COLON) {
5987
+ this.consume();
5988
+ this.next(this.parseTimeZoneMin);
5989
+ } else {
5990
+ throw this.error(new TomlError("Unexpected character in datetime, expected colon"));
5991
+ }
5992
+ }
5993
+ parseTimeZoneMin() {
5994
+ if (isDigit(this.char)) {
5995
+ this.consume();
5996
+ if (/\d\d$/.test(this.state.buf)) return this.return(createDateTime(this.state.result + this.state.buf));
5997
+ } else {
5998
+ throw this.error(new TomlError("Unexpected character in datetime, expected digit"));
5999
+ }
6000
+ }
6001
+ /* BOOLEAN */
6002
+ parseBoolean() {
6003
+ if (this.char === CHAR_t) {
6004
+ this.consume();
6005
+ return this.next(this.parseTrue_r);
6006
+ } else if (this.char === CHAR_f) {
6007
+ this.consume();
6008
+ return this.next(this.parseFalse_a);
6009
+ }
6010
+ }
6011
+ parseTrue_r() {
6012
+ if (this.char === CHAR_r) {
6013
+ this.consume();
6014
+ return this.next(this.parseTrue_u);
6015
+ } else {
6016
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6017
+ }
6018
+ }
6019
+ parseTrue_u() {
6020
+ if (this.char === CHAR_u) {
6021
+ this.consume();
6022
+ return this.next(this.parseTrue_e);
6023
+ } else {
6024
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6025
+ }
6026
+ }
6027
+ parseTrue_e() {
6028
+ if (this.char === CHAR_e) {
6029
+ return this.return(true);
6030
+ } else {
6031
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6032
+ }
6033
+ }
6034
+ parseFalse_a() {
6035
+ if (this.char === CHAR_a) {
6036
+ this.consume();
6037
+ return this.next(this.parseFalse_l);
6038
+ } else {
6039
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6040
+ }
6041
+ }
6042
+ parseFalse_l() {
6043
+ if (this.char === CHAR_l) {
6044
+ this.consume();
6045
+ return this.next(this.parseFalse_s);
6046
+ } else {
6047
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6048
+ }
6049
+ }
6050
+ parseFalse_s() {
6051
+ if (this.char === CHAR_s) {
6052
+ this.consume();
6053
+ return this.next(this.parseFalse_e);
6054
+ } else {
6055
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6056
+ }
6057
+ }
6058
+ parseFalse_e() {
6059
+ if (this.char === CHAR_e) {
6060
+ return this.return(false);
6061
+ } else {
6062
+ throw this.error(new TomlError("Invalid boolean, expected true or false"));
6063
+ }
6064
+ }
6065
+ /* INLINE LISTS */
6066
+ parseInlineList() {
6067
+ if (this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M || this.char === CTRL_J) {
6068
+ return null;
6069
+ } else if (this.char === Parser.END) {
6070
+ throw this.error(new TomlError("Unterminated inline array"));
6071
+ } else if (this.char === CHAR_NUM) {
6072
+ return this.call(this.parseComment);
6073
+ } else if (this.char === CHAR_RSQB) {
6074
+ return this.return(this.state.resultArr || InlineList());
6075
+ } else {
6076
+ return this.callNow(this.parseValue, this.recordInlineListValue);
6077
+ }
6078
+ }
6079
+ recordInlineListValue(value) {
6080
+ if (this.state.resultArr) {
6081
+ const listType = this.state.resultArr[_contentType];
6082
+ const valueType = tomlType(value);
6083
+ if (listType !== valueType) {
6084
+ throw this.error(new TomlError(`Inline lists must be a single type, not a mix of ${listType} and ${valueType}`));
6085
+ }
6086
+ } else {
6087
+ this.state.resultArr = InlineList(tomlType(value));
6088
+ }
6089
+ if (isFloat(value) || isInteger(value)) {
6090
+ this.state.resultArr.push(value.valueOf());
6091
+ } else {
6092
+ this.state.resultArr.push(value);
6093
+ }
6094
+ return this.goto(this.parseInlineListNext);
6095
+ }
6096
+ parseInlineListNext() {
6097
+ if (this.char === CHAR_SP || this.char === CTRL_I || this.char === CTRL_M || this.char === CTRL_J) {
6098
+ return null;
6099
+ } else if (this.char === CHAR_NUM) {
6100
+ return this.call(this.parseComment);
6101
+ } else if (this.char === CHAR_COMMA) {
6102
+ return this.next(this.parseInlineList);
6103
+ } else if (this.char === CHAR_RSQB) {
6104
+ return this.goto(this.parseInlineList);
6105
+ } else {
6106
+ throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"));
6107
+ }
6108
+ }
6109
+ /* INLINE TABLE */
6110
+ parseInlineTable() {
6111
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
6112
+ return null;
6113
+ } else if (this.char === Parser.END || this.char === CHAR_NUM || this.char === CTRL_J || this.char === CTRL_M) {
6114
+ throw this.error(new TomlError("Unterminated inline array"));
6115
+ } else if (this.char === CHAR_RCUB) {
6116
+ return this.return(this.state.resultTable || InlineTable());
6117
+ } else {
6118
+ if (!this.state.resultTable) this.state.resultTable = InlineTable();
6119
+ return this.callNow(this.parseAssign, this.recordInlineTableValue);
6120
+ }
6121
+ }
6122
+ recordInlineTableValue(kv) {
6123
+ let target = this.state.resultTable;
6124
+ let finalKey = kv.key.pop();
6125
+ for (let kw of kv.key) {
6126
+ if (hasKey(target, kw) && (!isTable(target[kw]) || target[kw][_declared])) {
6127
+ throw this.error(new TomlError("Can't redefine existing key"));
6128
+ }
6129
+ target = target[kw] = target[kw] || Table();
6130
+ }
6131
+ if (hasKey(target, finalKey)) {
6132
+ throw this.error(new TomlError("Can't redefine existing key"));
6133
+ }
6134
+ if (isInteger(kv.value) || isFloat(kv.value)) {
6135
+ target[finalKey] = kv.value.valueOf();
6136
+ } else {
6137
+ target[finalKey] = kv.value;
6138
+ }
6139
+ return this.goto(this.parseInlineTableNext);
6140
+ }
6141
+ parseInlineTableNext() {
6142
+ if (this.char === CHAR_SP || this.char === CTRL_I) {
6143
+ return null;
6144
+ } else if (this.char === Parser.END || this.char === CHAR_NUM || this.char === CTRL_J || this.char === CTRL_M) {
6145
+ throw this.error(new TomlError("Unterminated inline array"));
6146
+ } else if (this.char === CHAR_COMMA) {
6147
+ return this.next(this.parseInlineTable);
6148
+ } else if (this.char === CHAR_RCUB) {
6149
+ return this.goto(this.parseInlineTable);
6150
+ } else {
6151
+ throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"));
6152
+ }
6153
+ }
6154
+ }
6155
+ return TOMLParser;
6156
+ }
6157
+ }
6158
+ });
6159
+
6160
+ // ../../node_modules/@iarna/toml/parse-pretty-error.js
6161
+ var require_parse_pretty_error = __commonJS({
6162
+ "../../node_modules/@iarna/toml/parse-pretty-error.js"(exports2, module2) {
6163
+ "use strict";
6164
+ init_cjs_shims();
6165
+ module2.exports = prettyError;
6166
+ function prettyError(err, buf) {
6167
+ if (err.pos == null || err.line == null) return err;
6168
+ let msg = err.message;
6169
+ msg += ` at row ${err.line + 1}, col ${err.col + 1}, pos ${err.pos}:
6170
+ `;
6171
+ if (buf && buf.split) {
6172
+ const lines = buf.split(/\n/);
6173
+ const lineNumWidth = String(Math.min(lines.length, err.line + 3)).length;
6174
+ let linePadding = " ";
6175
+ while (linePadding.length < lineNumWidth) linePadding += " ";
6176
+ for (let ii = Math.max(0, err.line - 1); ii < Math.min(lines.length, err.line + 2); ++ii) {
6177
+ let lineNum = String(ii + 1);
6178
+ if (lineNum.length < lineNumWidth) lineNum = " " + lineNum;
6179
+ if (err.line === ii) {
6180
+ msg += lineNum + "> " + lines[ii] + "\n";
6181
+ msg += linePadding + " ";
6182
+ for (let hh = 0; hh < err.col; ++hh) {
6183
+ msg += " ";
6184
+ }
6185
+ msg += "^\n";
6186
+ } else {
6187
+ msg += lineNum + ": " + lines[ii] + "\n";
6188
+ }
6189
+ }
6190
+ }
6191
+ err.message = msg + "\n";
6192
+ return err;
6193
+ }
6194
+ }
6195
+ });
6196
+
6197
+ // ../../node_modules/@iarna/toml/parse-string.js
6198
+ var require_parse_string = __commonJS({
6199
+ "../../node_modules/@iarna/toml/parse-string.js"(exports2, module2) {
6200
+ "use strict";
6201
+ init_cjs_shims();
6202
+ module2.exports = parseString;
6203
+ var TOMLParser = require_toml_parser();
6204
+ var prettyError = require_parse_pretty_error();
6205
+ function parseString(str2) {
6206
+ if (global.Buffer && global.Buffer.isBuffer(str2)) {
6207
+ str2 = str2.toString("utf8");
6208
+ }
6209
+ const parser = new TOMLParser();
6210
+ try {
6211
+ parser.parse(str2);
6212
+ return parser.finish();
6213
+ } catch (err) {
6214
+ throw prettyError(err, str2);
6215
+ }
6216
+ }
6217
+ }
6218
+ });
6219
+
6220
+ // ../../node_modules/@iarna/toml/parse-async.js
6221
+ var require_parse_async = __commonJS({
6222
+ "../../node_modules/@iarna/toml/parse-async.js"(exports2, module2) {
6223
+ "use strict";
6224
+ init_cjs_shims();
6225
+ module2.exports = parseAsync;
6226
+ var TOMLParser = require_toml_parser();
6227
+ var prettyError = require_parse_pretty_error();
6228
+ function parseAsync(str2, opts) {
6229
+ if (!opts) opts = {};
6230
+ const index = 0;
6231
+ const blocksize = opts.blocksize || 40960;
6232
+ const parser = new TOMLParser();
6233
+ return new Promise((resolve2, reject) => {
6234
+ setImmediate(parseAsyncNext, index, blocksize, resolve2, reject);
6235
+ });
6236
+ function parseAsyncNext(index2, blocksize2, resolve2, reject) {
6237
+ if (index2 >= str2.length) {
6238
+ try {
6239
+ return resolve2(parser.finish());
6240
+ } catch (err) {
6241
+ return reject(prettyError(err, str2));
6242
+ }
6243
+ }
6244
+ try {
6245
+ parser.parse(str2.slice(index2, index2 + blocksize2));
6246
+ setImmediate(parseAsyncNext, index2 + blocksize2, blocksize2, resolve2, reject);
6247
+ } catch (err) {
6248
+ reject(prettyError(err, str2));
6249
+ }
6250
+ }
6251
+ }
6252
+ }
6253
+ });
6254
+
6255
+ // ../../node_modules/@iarna/toml/parse-stream.js
6256
+ var require_parse_stream = __commonJS({
6257
+ "../../node_modules/@iarna/toml/parse-stream.js"(exports2, module2) {
6258
+ "use strict";
6259
+ init_cjs_shims();
6260
+ module2.exports = parseStream;
6261
+ var stream = require("stream");
6262
+ var TOMLParser = require_toml_parser();
6263
+ function parseStream(stm) {
6264
+ if (stm) {
6265
+ return parseReadable(stm);
6266
+ } else {
6267
+ return parseTransform(stm);
6268
+ }
6269
+ }
6270
+ function parseReadable(stm) {
6271
+ const parser = new TOMLParser();
6272
+ stm.setEncoding("utf8");
6273
+ return new Promise((resolve2, reject) => {
6274
+ let readable;
6275
+ let ended = false;
6276
+ let errored = false;
6277
+ function finish() {
6278
+ ended = true;
6279
+ if (readable) return;
6280
+ try {
6281
+ resolve2(parser.finish());
6282
+ } catch (err) {
6283
+ reject(err);
6284
+ }
6285
+ }
6286
+ function error(err) {
6287
+ errored = true;
6288
+ reject(err);
6289
+ }
6290
+ stm.once("end", finish);
6291
+ stm.once("error", error);
6292
+ readNext();
6293
+ function readNext() {
6294
+ readable = true;
6295
+ let data;
6296
+ while ((data = stm.read()) !== null) {
6297
+ try {
6298
+ parser.parse(data);
6299
+ } catch (err) {
6300
+ return error(err);
6301
+ }
6302
+ }
6303
+ readable = false;
6304
+ if (ended) return finish();
6305
+ if (errored) return;
6306
+ stm.once("readable", readNext);
6307
+ }
6308
+ });
6309
+ }
6310
+ function parseTransform() {
6311
+ const parser = new TOMLParser();
6312
+ return new stream.Transform({
6313
+ objectMode: true,
6314
+ transform(chunk, encoding, cb) {
6315
+ try {
6316
+ parser.parse(chunk.toString(encoding));
6317
+ } catch (err) {
6318
+ this.emit("error", err);
6319
+ }
6320
+ cb();
6321
+ },
6322
+ flush(cb) {
6323
+ try {
6324
+ this.push(parser.finish());
6325
+ } catch (err) {
6326
+ this.emit("error", err);
6327
+ }
6328
+ cb();
6329
+ }
6330
+ });
6331
+ }
6332
+ }
6333
+ });
6334
+
6335
+ // ../../node_modules/@iarna/toml/parse.js
6336
+ var require_parse = __commonJS({
6337
+ "../../node_modules/@iarna/toml/parse.js"(exports2, module2) {
6338
+ "use strict";
6339
+ init_cjs_shims();
6340
+ module2.exports = require_parse_string();
6341
+ module2.exports.async = require_parse_async();
6342
+ module2.exports.stream = require_parse_stream();
6343
+ module2.exports.prettyError = require_parse_pretty_error();
6344
+ }
6345
+ });
6346
+
6347
+ // ../../node_modules/@iarna/toml/stringify.js
6348
+ var require_stringify = __commonJS({
6349
+ "../../node_modules/@iarna/toml/stringify.js"(exports2, module2) {
6350
+ "use strict";
6351
+ init_cjs_shims();
6352
+ module2.exports = stringify2;
6353
+ module2.exports.value = stringifyInline;
6354
+ function stringify2(obj) {
6355
+ if (obj === null) throw typeError("null");
6356
+ if (obj === void 0) throw typeError("undefined");
6357
+ if (typeof obj !== "object") throw typeError(typeof obj);
6358
+ if (typeof obj.toJSON === "function") obj = obj.toJSON();
6359
+ if (obj == null) return null;
6360
+ const type2 = tomlType2(obj);
6361
+ if (type2 !== "table") throw typeError(type2);
6362
+ return stringifyObject("", "", obj);
6363
+ }
6364
+ function typeError(type2) {
6365
+ return new Error("Can only stringify objects, not " + type2);
6366
+ }
6367
+ function arrayOneTypeError() {
6368
+ return new Error("Array values can't have mixed types");
6369
+ }
6370
+ function getInlineKeys(obj) {
6371
+ return Object.keys(obj).filter((key) => isInline(obj[key]));
6372
+ }
6373
+ function getComplexKeys(obj) {
6374
+ return Object.keys(obj).filter((key) => !isInline(obj[key]));
6375
+ }
6376
+ function toJSON(obj) {
6377
+ let nobj = Array.isArray(obj) ? [] : Object.prototype.hasOwnProperty.call(obj, "__proto__") ? { ["__proto__"]: void 0 } : {};
6378
+ for (let prop of Object.keys(obj)) {
6379
+ if (obj[prop] && typeof obj[prop].toJSON === "function" && !("toISOString" in obj[prop])) {
6380
+ nobj[prop] = obj[prop].toJSON();
6381
+ } else {
6382
+ nobj[prop] = obj[prop];
6383
+ }
6384
+ }
6385
+ return nobj;
6386
+ }
6387
+ function stringifyObject(prefix, indent, obj) {
6388
+ obj = toJSON(obj);
6389
+ var inlineKeys;
6390
+ var complexKeys;
6391
+ inlineKeys = getInlineKeys(obj);
6392
+ complexKeys = getComplexKeys(obj);
6393
+ var result = [];
6394
+ var inlineIndent = indent || "";
6395
+ inlineKeys.forEach((key) => {
6396
+ var type2 = tomlType2(obj[key]);
6397
+ if (type2 !== "undefined" && type2 !== "null") {
6398
+ result.push(inlineIndent + stringifyKey(key) + " = " + stringifyAnyInline(obj[key], true));
6399
+ }
6400
+ });
6401
+ if (result.length > 0) result.push("");
6402
+ var complexIndent = prefix && inlineKeys.length > 0 ? indent + " " : "";
6403
+ complexKeys.forEach((key) => {
6404
+ result.push(stringifyComplex(prefix, complexIndent, key, obj[key]));
6405
+ });
6406
+ return result.join("\n");
6407
+ }
6408
+ function isInline(value) {
6409
+ switch (tomlType2(value)) {
6410
+ case "undefined":
6411
+ case "null":
6412
+ case "integer":
6413
+ case "nan":
6414
+ case "float":
6415
+ case "boolean":
6416
+ case "string":
6417
+ case "datetime":
6418
+ return true;
6419
+ case "array":
6420
+ return value.length === 0 || tomlType2(value[0]) !== "table";
6421
+ case "table":
6422
+ return Object.keys(value).length === 0;
6423
+ /* istanbul ignore next */
6424
+ default:
6425
+ return false;
6426
+ }
6427
+ }
6428
+ function tomlType2(value) {
6429
+ if (value === void 0) {
6430
+ return "undefined";
6431
+ } else if (value === null) {
6432
+ return "null";
6433
+ } else if (typeof value === "bigint" || Number.isInteger(value) && !Object.is(value, -0)) {
6434
+ return "integer";
6435
+ } else if (typeof value === "number") {
6436
+ return "float";
6437
+ } else if (typeof value === "boolean") {
6438
+ return "boolean";
6439
+ } else if (typeof value === "string") {
6440
+ return "string";
6441
+ } else if ("toISOString" in value) {
6442
+ return isNaN(value) ? "undefined" : "datetime";
6443
+ } else if (Array.isArray(value)) {
6444
+ return "array";
6445
+ } else {
6446
+ return "table";
6447
+ }
6448
+ }
6449
+ function stringifyKey(key) {
6450
+ var keyStr = String(key);
6451
+ if (/^[-A-Za-z0-9_]+$/.test(keyStr)) {
6452
+ return keyStr;
6453
+ } else {
6454
+ return stringifyBasicString(keyStr);
6455
+ }
6456
+ }
6457
+ function stringifyBasicString(str2) {
6458
+ return '"' + escapeString2(str2).replace(/"/g, '\\"') + '"';
6459
+ }
6460
+ function stringifyLiteralString(str2) {
6461
+ return "'" + str2 + "'";
6462
+ }
6463
+ function numpad(num, str2) {
6464
+ while (str2.length < num) str2 = "0" + str2;
6465
+ return str2;
6466
+ }
6467
+ function escapeString2(str2) {
6468
+ return str2.replace(/\\/g, "\\\\").replace(/[\b]/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/([\u0000-\u001f\u007f])/, (c) => "\\u" + numpad(4, c.codePointAt(0).toString(16)));
6469
+ }
6470
+ function stringifyMultilineString(str2) {
6471
+ let escaped = str2.split(/\n/).map((str3) => {
6472
+ return escapeString2(str3).replace(/"(?="")/g, '\\"');
6473
+ }).join("\n");
6474
+ if (escaped.slice(-1) === '"') escaped += "\\\n";
6475
+ return '"""\n' + escaped + '"""';
6476
+ }
6477
+ function stringifyAnyInline(value, multilineOk) {
6478
+ let type2 = tomlType2(value);
6479
+ if (type2 === "string") {
6480
+ if (multilineOk && /\n/.test(value)) {
6481
+ type2 = "string-multiline";
6482
+ } else if (!/[\b\t\n\f\r']/.test(value) && /"/.test(value)) {
6483
+ type2 = "string-literal";
6484
+ }
6485
+ }
6486
+ return stringifyInline(value, type2);
6487
+ }
6488
+ function stringifyInline(value, type2) {
6489
+ if (!type2) type2 = tomlType2(value);
6490
+ switch (type2) {
6491
+ case "string-multiline":
6492
+ return stringifyMultilineString(value);
6493
+ case "string":
6494
+ return stringifyBasicString(value);
6495
+ case "string-literal":
6496
+ return stringifyLiteralString(value);
6497
+ case "integer":
6498
+ return stringifyInteger(value);
6499
+ case "float":
6500
+ return stringifyFloat(value);
6501
+ case "boolean":
6502
+ return stringifyBoolean(value);
6503
+ case "datetime":
6504
+ return stringifyDatetime(value);
6505
+ case "array":
6506
+ return stringifyInlineArray(value.filter((_) => tomlType2(_) !== "null" && tomlType2(_) !== "undefined" && tomlType2(_) !== "nan"));
6507
+ case "table":
6508
+ return stringifyInlineTable(value);
6509
+ /* istanbul ignore next */
6510
+ default:
6511
+ throw typeError(type2);
6512
+ }
6513
+ }
6514
+ function stringifyInteger(value) {
6515
+ return String(value).replace(/\B(?=(\d{3})+(?!\d))/g, "_");
6516
+ }
6517
+ function stringifyFloat(value) {
6518
+ if (value === Infinity) {
6519
+ return "inf";
6520
+ } else if (value === -Infinity) {
6521
+ return "-inf";
6522
+ } else if (Object.is(value, NaN)) {
6523
+ return "nan";
6524
+ } else if (Object.is(value, -0)) {
6525
+ return "-0.0";
6526
+ }
6527
+ var chunks = String(value).split(".");
6528
+ var int2 = chunks[0];
6529
+ var dec = chunks[1] || 0;
6530
+ return stringifyInteger(int2) + "." + dec;
6531
+ }
6532
+ function stringifyBoolean(value) {
6533
+ return String(value);
6534
+ }
6535
+ function stringifyDatetime(value) {
6536
+ return value.toISOString();
6537
+ }
6538
+ function isNumber(type2) {
6539
+ return type2 === "float" || type2 === "integer";
6540
+ }
6541
+ function arrayType(values) {
6542
+ var contentType = tomlType2(values[0]);
6543
+ if (values.every((_) => tomlType2(_) === contentType)) return contentType;
6544
+ if (values.every((_) => isNumber(tomlType2(_)))) return "float";
6545
+ return "mixed";
6546
+ }
6547
+ function validateArray(values) {
6548
+ const type2 = arrayType(values);
6549
+ if (type2 === "mixed") {
6550
+ throw arrayOneTypeError();
6551
+ }
6552
+ return type2;
6553
+ }
6554
+ function stringifyInlineArray(values) {
6555
+ values = toJSON(values);
6556
+ const type2 = validateArray(values);
6557
+ var result = "[";
6558
+ var stringified = values.map((_) => stringifyInline(_, type2));
6559
+ if (stringified.join(", ").length > 60 || /\n/.test(stringified)) {
6560
+ result += "\n " + stringified.join(",\n ") + "\n";
6561
+ } else {
6562
+ result += " " + stringified.join(", ") + (stringified.length > 0 ? " " : "");
6563
+ }
6564
+ return result + "]";
6565
+ }
6566
+ function stringifyInlineTable(value) {
6567
+ value = toJSON(value);
6568
+ var result = [];
6569
+ Object.keys(value).forEach((key) => {
6570
+ result.push(stringifyKey(key) + " = " + stringifyAnyInline(value[key], false));
6571
+ });
6572
+ return "{ " + result.join(", ") + (result.length > 0 ? " " : "") + "}";
6573
+ }
6574
+ function stringifyComplex(prefix, indent, key, value) {
6575
+ var valueType = tomlType2(value);
6576
+ if (valueType === "array") {
6577
+ return stringifyArrayOfTables(prefix, indent, key, value);
6578
+ } else if (valueType === "table") {
6579
+ return stringifyComplexTable(prefix, indent, key, value);
6580
+ } else {
6581
+ throw typeError(valueType);
6582
+ }
6583
+ }
6584
+ function stringifyArrayOfTables(prefix, indent, key, values) {
6585
+ values = toJSON(values);
6586
+ validateArray(values);
6587
+ var firstValueType = tomlType2(values[0]);
6588
+ if (firstValueType !== "table") throw typeError(firstValueType);
6589
+ var fullKey = prefix + stringifyKey(key);
6590
+ var result = "";
6591
+ values.forEach((table) => {
6592
+ if (result.length > 0) result += "\n";
6593
+ result += indent + "[[" + fullKey + "]]\n";
6594
+ result += stringifyObject(fullKey + ".", indent, table);
6595
+ });
6596
+ return result;
6597
+ }
6598
+ function stringifyComplexTable(prefix, indent, key, value) {
6599
+ var fullKey = prefix + stringifyKey(key);
6600
+ var result = "";
6601
+ if (getInlineKeys(value).length > 0) {
6602
+ result += indent + "[" + fullKey + "]\n";
6603
+ }
6604
+ return result + stringifyObject(fullKey + ".", indent, value);
6605
+ }
6606
+ }
6607
+ });
6608
+
6609
+ // ../../node_modules/@iarna/toml/toml.js
6610
+ var require_toml = __commonJS({
6611
+ "../../node_modules/@iarna/toml/toml.js"(exports2) {
6612
+ "use strict";
6613
+ init_cjs_shims();
6614
+ exports2.parse = require_parse();
6615
+ exports2.stringify = require_stringify();
6616
+ }
6617
+ });
6618
+
6619
+ // ../converters/dist/from-gemini.js
6620
+ function fromGemini(content, metadata, explicitSubtype) {
6621
+ let parsed;
6622
+ try {
6623
+ const tomlData = TOML.parse(content);
6624
+ parsed = tomlData;
6625
+ } catch (error) {
6626
+ throw new Error(`Failed to parse Gemini TOML: ${error instanceof Error ? error.message : String(error)}`);
6627
+ }
6628
+ if (!parsed.prompt) {
6629
+ throw new Error('Gemini command must have a "prompt" field');
6630
+ }
6631
+ const sections = [];
6632
+ sections.push({
6633
+ type: "metadata",
6634
+ data: {
6635
+ title: metadata.name || metadata.id,
6636
+ description: parsed.description || "Gemini custom command"
6637
+ }
6638
+ });
6639
+ sections.push({
6640
+ type: "instructions",
6641
+ title: "Prompt",
6642
+ content: parsed.prompt,
6643
+ priority: "high"
6644
+ });
6645
+ const canonicalContent = {
6646
+ format: "canonical",
6647
+ version: "1.0",
6648
+ sections
6649
+ };
6650
+ const pkg = {
6651
+ id: metadata.id,
6652
+ version: metadata.version || "1.0.0",
6653
+ name: metadata.name || metadata.id,
6654
+ description: parsed.description || "Gemini custom command",
6655
+ author: metadata.author || "unknown",
6656
+ tags: metadata.tags || ["gemini", "command"],
6657
+ format: "gemini",
6658
+ subtype: explicitSubtype || "slash-command",
6659
+ content: canonicalContent,
6660
+ sourceFormat: "gemini",
6661
+ metadata: {
6662
+ description: parsed.description
6663
+ }
6664
+ };
6665
+ return pkg;
6666
+ }
6667
+ var TOML;
6668
+ var init_from_gemini = __esm({
6669
+ "../converters/dist/from-gemini.js"() {
6670
+ "use strict";
6671
+ init_cjs_shims();
6672
+ TOML = __toESM(require_toml(), 1);
6673
+ }
6674
+ });
6675
+
4605
6676
  // ../converters/dist/validation.js
4606
6677
  function loadSchema(format, subtype) {
4607
6678
  const cacheKey = subtype ? `${format}:${subtype}` : format;
@@ -4629,12 +6700,33 @@ function loadSchema(format, subtype) {
4629
6700
  "copilot": "copilot.schema.json",
4630
6701
  "kiro": "kiro-steering.schema.json",
4631
6702
  "agents-md": "agents-md.schema.json",
6703
+ "gemini": "gemini.schema.json",
4632
6704
  "canonical": "canonical.schema.json"
4633
6705
  };
4634
6706
  schemaFilename = schemaMap[format] || `${format}.schema.json`;
4635
6707
  }
4636
- const schemaPath = (0, import_path7.join)(currentDirname, "..", "schemas", schemaFilename);
4637
- const schemaContent = (0, import_fs8.readFileSync)(schemaPath, "utf-8");
6708
+ const schemaDirectories = [
6709
+ (0, import_path7.join)(currentDirname, "..", "schemas"),
6710
+ (0, import_path7.join)(currentDirname, "schemas")
6711
+ ];
6712
+ let schemaContent = null;
6713
+ let schemaPath = null;
6714
+ for (const dir of schemaDirectories) {
6715
+ const candidate = (0, import_path7.join)(dir, schemaFilename);
6716
+ try {
6717
+ schemaContent = (0, import_fs8.readFileSync)(candidate, "utf-8");
6718
+ schemaPath = candidate;
6719
+ break;
6720
+ } catch (error) {
6721
+ if ((error == null ? void 0 : error.code) !== "ENOENT") {
6722
+ throw error;
6723
+ }
6724
+ continue;
6725
+ }
6726
+ }
6727
+ if (!schemaContent || !schemaPath) {
6728
+ throw new Error(`Schema file "${schemaFilename}" not found. Looked in: ${schemaDirectories.join(", ")}`);
6729
+ }
4638
6730
  const schema3 = JSON.parse(schemaContent);
4639
6731
  const compiled = ajv.compile(schema3);
4640
6732
  schemaCache.set(cacheKey, compiled);
@@ -6027,6 +8119,181 @@ var init_to_agents_md = __esm({
6027
8119
  }
6028
8120
  });
6029
8121
 
8122
+ // ../converters/dist/to-gemini.js
8123
+ function toGemini(pkg, options = {}) {
8124
+ var _a;
8125
+ const warnings = [];
8126
+ let qualityScore = 100;
8127
+ try {
8128
+ const prompt3 = buildPrompt(pkg.content, warnings);
8129
+ const geminiCommand = {
8130
+ prompt: prompt3
8131
+ };
8132
+ if (pkg.description) {
8133
+ geminiCommand.description = pkg.description;
8134
+ } else if ((_a = pkg.metadata) == null ? void 0 : _a.description) {
8135
+ geminiCommand.description = pkg.metadata.description;
8136
+ }
8137
+ const tomlContent = TOML2.stringify(geminiCommand);
8138
+ const validation = validateFormat("gemini", geminiCommand);
8139
+ const validationErrors = validation.errors.map((e) => e.message);
8140
+ const validationWarnings = validation.warnings.map((w) => w.message);
8141
+ if (validationWarnings.length > 0) {
8142
+ warnings.push(...validationWarnings);
8143
+ }
8144
+ const lossyConversion = warnings.some((w) => w.includes("not supported") || w.includes("skipped"));
8145
+ if (lossyConversion) {
8146
+ qualityScore -= 10;
8147
+ }
8148
+ if (validationErrors.length > 0) {
8149
+ qualityScore -= validationErrors.length * 5;
8150
+ }
8151
+ return {
8152
+ content: tomlContent,
8153
+ format: "gemini",
8154
+ warnings: warnings.length > 0 ? warnings : void 0,
8155
+ validationErrors: validationErrors.length > 0 ? validationErrors : void 0,
8156
+ lossyConversion,
8157
+ qualityScore: Math.max(0, qualityScore)
8158
+ };
8159
+ } catch (error) {
8160
+ warnings.push(`Conversion error: ${error instanceof Error ? error.message : String(error)}`);
8161
+ return {
8162
+ content: "",
8163
+ format: "gemini",
8164
+ warnings,
8165
+ lossyConversion: true,
8166
+ qualityScore: 0
8167
+ };
8168
+ }
8169
+ }
8170
+ function buildPrompt(content, warnings) {
8171
+ const lines = [];
8172
+ for (const section of content.sections) {
8173
+ const sectionContent = convertSection7(section, warnings);
8174
+ if (sectionContent) {
8175
+ lines.push(sectionContent);
8176
+ lines.push("");
8177
+ }
8178
+ }
8179
+ return lines.join("\n").trim();
8180
+ }
8181
+ function convertSection7(section, warnings) {
8182
+ switch (section.type) {
8183
+ case "metadata":
8184
+ return "";
8185
+ case "instructions":
8186
+ return convertInstructions7(section);
8187
+ case "rules":
8188
+ return convertRules7(section);
8189
+ case "examples":
8190
+ return convertExamples7(section);
8191
+ case "persona":
8192
+ return convertPersona3(section);
8193
+ case "context":
8194
+ return convertContext7(section);
8195
+ case "tools":
8196
+ warnings.push("Tools section skipped (not supported by Gemini)");
8197
+ return "";
8198
+ case "hook":
8199
+ warnings.push("Hook section skipped (not supported by Gemini)");
8200
+ return "";
8201
+ case "custom":
8202
+ if (!section.editorType || section.editorType === "gemini") {
8203
+ return section.content;
8204
+ }
8205
+ warnings.push(`Custom ${section.editorType} section skipped`);
8206
+ return "";
8207
+ default:
8208
+ warnings.push(`Unknown section type: ${section.type}`);
8209
+ return "";
8210
+ }
8211
+ }
8212
+ function convertInstructions7(section) {
8213
+ const lines = [];
8214
+ if (section.priority === "high") {
8215
+ lines.push("**Important:**");
8216
+ lines.push("");
8217
+ }
8218
+ lines.push(section.content);
8219
+ return lines.join("\n");
8220
+ }
8221
+ function convertRules7(section) {
8222
+ const lines = [];
8223
+ lines.push(`# ${section.title}`);
8224
+ lines.push("");
8225
+ section.items.forEach((rule, index) => {
8226
+ const prefix = section.ordered ? `${index + 1}.` : "-";
8227
+ lines.push(`${prefix} ${rule.content}`);
8228
+ if (rule.rationale) {
8229
+ lines.push(` - *Rationale: ${rule.rationale}*`);
8230
+ }
8231
+ if (rule.examples) {
8232
+ rule.examples.forEach((example) => {
8233
+ lines.push(` - Example: \`${example}\``);
8234
+ });
8235
+ }
8236
+ });
8237
+ return lines.join("\n");
8238
+ }
8239
+ function convertExamples7(section) {
8240
+ const lines = [];
8241
+ lines.push(`# ${section.title}`);
8242
+ lines.push("");
8243
+ section.examples.forEach((example) => {
8244
+ const prefix = example.good === false ? "\u274C Bad" : "\u2705 Good";
8245
+ lines.push(`## ${prefix}: ${example.description}`);
8246
+ lines.push("");
8247
+ const lang = example.language || "";
8248
+ lines.push("```" + lang);
8249
+ lines.push(example.code);
8250
+ lines.push("```");
8251
+ lines.push("");
8252
+ });
8253
+ return lines.join("\n");
8254
+ }
8255
+ function convertPersona3(section) {
8256
+ const { name, role, icon, style, expertise } = section.data;
8257
+ const lines = [];
8258
+ lines.push("# Role");
8259
+ lines.push("");
8260
+ if (icon && typeof icon === "string" && name && typeof name === "string" && typeof role === "string") {
8261
+ lines.push(`${icon} **${name}** - ${role}`);
8262
+ } else if (name && typeof name === "string" && typeof role === "string") {
8263
+ lines.push(`**${name}** - ${role}`);
8264
+ } else if (typeof role === "string") {
8265
+ lines.push(role);
8266
+ }
8267
+ if (style && Array.isArray(style) && style.length > 0) {
8268
+ lines.push("");
8269
+ lines.push(`**Style:** ${style.join(", ")}`);
8270
+ }
8271
+ if (expertise && Array.isArray(expertise) && expertise.length > 0) {
8272
+ lines.push("");
8273
+ lines.push("**Expertise:**");
8274
+ expertise.forEach((area) => {
8275
+ lines.push(`- ${area}`);
8276
+ });
8277
+ }
8278
+ return lines.join("\n");
8279
+ }
8280
+ function convertContext7(section) {
8281
+ const lines = [];
8282
+ lines.push(`# ${section.title}`);
8283
+ lines.push("");
8284
+ lines.push(section.content);
8285
+ return lines.join("\n");
8286
+ }
8287
+ var TOML2;
8288
+ var init_to_gemini = __esm({
8289
+ "../converters/dist/to-gemini.js"() {
8290
+ "use strict";
8291
+ init_cjs_shims();
8292
+ TOML2 = __toESM(require_toml(), 1);
8293
+ init_validation();
8294
+ }
8295
+ });
8296
+
6030
8297
  // ../converters/dist/index.js
6031
8298
  var dist_exports = {};
6032
8299
  __export(dist_exports, {
@@ -6037,6 +8304,7 @@ __export(dist_exports, {
6037
8304
  fromContinue: () => fromContinue,
6038
8305
  fromCopilot: () => fromCopilot,
6039
8306
  fromCursor: () => fromCursor,
8307
+ fromGemini: () => fromGemini,
6040
8308
  fromKiro: () => fromKiro,
6041
8309
  fromWindsurf: () => fromWindsurf,
6042
8310
  normalizeFormat: () => normalizeFormat,
@@ -6047,6 +8315,7 @@ __export(dist_exports, {
6047
8315
  toContinue: () => toContinue,
6048
8316
  toCopilot: () => toCopilot,
6049
8317
  toCursor: () => toCursor,
8318
+ toGemini: () => toGemini,
6050
8319
  toKiro: () => toKiro,
6051
8320
  toWindsurf: () => toWindsurf,
6052
8321
  validateConversion: () => validateConversion,
@@ -6065,6 +8334,7 @@ var init_dist = __esm({
6065
8334
  init_from_kiro();
6066
8335
  init_from_windsurf();
6067
8336
  init_from_agents_md();
8337
+ init_from_gemini();
6068
8338
  init_to_cursor();
6069
8339
  init_to_claude();
6070
8340
  init_to_continue();
@@ -6072,6 +8342,7 @@ var init_dist = __esm({
6072
8342
  init_to_kiro();
6073
8343
  init_to_windsurf();
6074
8344
  init_to_agents_md();
8345
+ init_to_gemini();
6075
8346
  init_taxonomy_utils();
6076
8347
  init_validation();
6077
8348
  }
@@ -6610,7 +8881,7 @@ async function handleCollectionInstall(collectionSpec, options) {
6610
8881
  }
6611
8882
  }
6612
8883
  function createCollectionsCommand() {
6613
- const command = new import_commander9.Command("collections");
8884
+ const command = new import_commander10.Command("collections");
6614
8885
  command.description("Manage package collections").alias("collection").action(async (options) => {
6615
8886
  await handleCollectionsList(options);
6616
8887
  });
@@ -6629,12 +8900,12 @@ function createCollectionsCommand() {
6629
8900
  });
6630
8901
  return command;
6631
8902
  }
6632
- var import_commander9, import_registry_client4;
8903
+ var import_commander10, import_registry_client4;
6633
8904
  var init_collections = __esm({
6634
8905
  "src/commands/collections.ts"() {
6635
8906
  "use strict";
6636
8907
  init_cjs_shims();
6637
- import_commander9 = require("commander");
8908
+ import_commander10 = require("commander");
6638
8909
  import_registry_client4 = require("@pr-pm/registry-client");
6639
8910
  init_user_config();
6640
8911
  init_install();
@@ -6655,7 +8926,9 @@ function getPackageIcon2(format, subtype) {
6655
8926
  "collection": "\u{1F4E6}",
6656
8927
  "chatmode": "\u{1F4AC}",
6657
8928
  "tool": "\u{1F527}",
6658
- "hook": "\u{1FA9D}"
8929
+ "hook": "\u{1FA9D}",
8930
+ "workflow": "\u{1F504}",
8931
+ "template": "\u{1F4C4}"
6659
8932
  };
6660
8933
  const formatIcons = {
6661
8934
  "claude": "\u{1F916}",
@@ -6664,6 +8937,7 @@ function getPackageIcon2(format, subtype) {
6664
8937
  "continue": "\u27A1\uFE0F",
6665
8938
  "copilot": "\u2708\uFE0F",
6666
8939
  "kiro": "\u{1F3AF}",
8940
+ "gemini": "\u2728",
6667
8941
  "mcp": "\u{1F517}",
6668
8942
  "agents.md": "\u{1F4DD}",
6669
8943
  "generic": "\u{1F4E6}"
@@ -6678,6 +8952,7 @@ function getPackageLabel2(format, subtype) {
6678
8952
  "continue": "Continue",
6679
8953
  "copilot": "GitHub Copilot",
6680
8954
  "kiro": "Kiro",
8955
+ "gemini": "Gemini",
6681
8956
  "mcp": "MCP",
6682
8957
  "agents.md": "Agents.md",
6683
8958
  "generic": ""
@@ -6691,7 +8966,9 @@ function getPackageLabel2(format, subtype) {
6691
8966
  "collection": "Collection",
6692
8967
  "chatmode": "Chat Mode",
6693
8968
  "tool": "Tool",
6694
- "hook": "Hook"
8969
+ "hook": "Hook",
8970
+ "workflow": "Workflow",
8971
+ "template": "Template"
6695
8972
  };
6696
8973
  const formatLabel = formatLabels[format];
6697
8974
  const subtypeLabel = subtypeLabels[subtype];
@@ -7370,7 +9647,7 @@ async function installFromLockfile(options) {
7370
9647
  }
7371
9648
  }
7372
9649
  function createInstallCommand() {
7373
- const command = new import_commander10.Command("install");
9650
+ const command = new import_commander11.Command("install");
7374
9651
  command.description("Install a package from the registry, or install all packages from prpm.lock if no package specified").argument("[package]", "Package to install (e.g., react-rules or react-rules@1.2.0). If omitted, installs all packages from prpm.lock").option("--version <version>", "Specific version to install").option("--as <format>", "Convert and install in specific format (cursor, claude, continue, windsurf, copilot, kiro, agents.md, canonical)").option("--format <format>", "Alias for --as").option("--location <path>", "Custom location for installed files (Agents.md or nested Cursor rules)").option("--subtype <subtype>", "Specify subtype when converting (skill, agent, rule, etc.)").option("--frozen-lockfile", "Fail if lock file needs to be updated (for CI)").action(async (packageSpec, options) => {
7375
9652
  const convertTo = options.format || options.as;
7376
9653
  if (convertTo && !["cursor", "claude", "continue", "windsurf", "copilot", "kiro", "agents.md", "canonical"].includes(convertTo)) {
@@ -7395,12 +9672,12 @@ function createInstallCommand() {
7395
9672
  });
7396
9673
  return command;
7397
9674
  }
7398
- var import_commander10, import_registry_client5, import_stream, import_promises, tar, import_path8;
9675
+ var import_commander11, import_registry_client5, import_stream, import_promises, tar, import_path8;
7399
9676
  var init_install = __esm({
7400
9677
  "src/commands/install.ts"() {
7401
9678
  "use strict";
7402
9679
  init_cjs_shims();
7403
- import_commander10 = require("commander");
9680
+ import_commander11 = require("commander");
7404
9681
  import_registry_client5 = require("@pr-pm/registry-client");
7405
9682
  init_user_config();
7406
9683
  init_filesystem();
@@ -8980,7 +11257,7 @@ var require_source = __commonJS({
8980
11257
 
8981
11258
  // src/index.ts
8982
11259
  init_cjs_shims();
8983
- var import_commander27 = require("commander");
11260
+ var import_commander28 = require("commander");
8984
11261
  var import_fs13 = require("fs");
8985
11262
  var import_path16 = require("path");
8986
11263
 
@@ -9571,7 +11848,9 @@ function getPackageIcon(format, subtype) {
9571
11848
  "collection": "\u{1F4E6}",
9572
11849
  "chatmode": "\u{1F4AC}",
9573
11850
  "tool": "\u{1F527}",
9574
- "hook": "\u{1FA9D}"
11851
+ "hook": "\u{1FA9D}",
11852
+ "workflow": "\u{1F504}",
11853
+ "template": "\u{1F4C4}"
9575
11854
  };
9576
11855
  const formatIcons = {
9577
11856
  "claude": "\u{1F916}",
@@ -9580,6 +11859,7 @@ function getPackageIcon(format, subtype) {
9580
11859
  "continue": "\u27A1\uFE0F",
9581
11860
  "copilot": "\u2708\uFE0F",
9582
11861
  "kiro": "\u{1F3AF}",
11862
+ "gemini": "\u2728",
9583
11863
  "mcp": "\u{1F517}",
9584
11864
  "agents.md": "\u{1F4DD}",
9585
11865
  "generic": "\u{1F4E6}"
@@ -9594,6 +11874,7 @@ function getPackageLabel(format, subtype) {
9594
11874
  "continue": "Continue",
9595
11875
  "copilot": "GitHub Copilot",
9596
11876
  "kiro": "Kiro",
11877
+ "gemini": "Gemini",
9597
11878
  "mcp": "MCP",
9598
11879
  "agents.md": "Agents.md",
9599
11880
  "generic": ""
@@ -9607,7 +11888,9 @@ function getPackageLabel(format, subtype) {
9607
11888
  "collection": "Collection",
9608
11889
  "chatmode": "Chat Mode",
9609
11890
  "tool": "Tool",
9610
- "hook": "Hook"
11891
+ "hook": "Hook",
11892
+ "workflow": "Workflow",
11893
+ "template": "Template"
9611
11894
  };
9612
11895
  const formatLabel = formatLabels[format];
9613
11896
  const subtypeLabel = subtypeLabels[subtype];
@@ -9895,9 +12178,135 @@ function createSearchCommand() {
9895
12178
  return command;
9896
12179
  }
9897
12180
 
9898
- // src/commands/info.ts
12181
+ // src/commands/ai-search.ts
9899
12182
  init_cjs_shims();
9900
12183
  var import_commander8 = require("commander");
12184
+ init_user_config();
12185
+ init_telemetry();
12186
+ init_errors();
12187
+ function displayAIResults(response) {
12188
+ const { results, total_matches, execution_time_ms, query } = response;
12189
+ console.log("\n" + "\u2550".repeat(80));
12190
+ console.log(`\u2728 AI Search Results for "${query}"`);
12191
+ console.log(` ${total_matches} matches found in ${execution_time_ms}ms`);
12192
+ console.log("\u2550".repeat(80) + "\n");
12193
+ results.forEach((result, idx) => {
12194
+ const matchPercent = Math.round(result.similarity_score * 100);
12195
+ const matchColor = matchPercent >= 80 ? "\x1B[32m" : matchPercent >= 60 ? "\x1B[33m" : "\x1B[36m";
12196
+ const downloads = result.total_downloads >= 1e3 ? `${(result.total_downloads / 1e3).toFixed(1)}k` : result.total_downloads;
12197
+ console.log(`\x1B[1m${idx + 1}. ${result.name}\x1B[0m ${matchColor}${matchPercent}% match\x1B[0m`);
12198
+ if (result.ai_use_case_description) {
12199
+ console.log(` \u{1F4A1} ${result.ai_use_case_description}`);
12200
+ } else if (result.description) {
12201
+ console.log(` ${result.description}`);
12202
+ }
12203
+ if (result.ai_best_for) {
12204
+ console.log(` \u2728 Best for: ${result.ai_best_for}`);
12205
+ }
12206
+ console.log(` \u{1F4E6} ${result.format} ${result.subtype} | \u{1F4E5} ${downloads} downloads`);
12207
+ if (result.ai_similar_to && result.ai_similar_to.length > 0) {
12208
+ console.log(` \u{1F517} Similar to: ${result.ai_similar_to.slice(0, 3).join(", ")}`);
12209
+ }
12210
+ console.log();
12211
+ });
12212
+ console.log("\u2550".repeat(80));
12213
+ }
12214
+ async function handleAISearch(query, options) {
12215
+ const startTime = Date.now();
12216
+ let success = false;
12217
+ let error;
12218
+ let response = null;
12219
+ try {
12220
+ if (!query || query.trim().length === 0) {
12221
+ console.log("\u274C Please provide a search query");
12222
+ console.log("\n\u{1F4A1} Examples:");
12223
+ console.log(' prpm ai-search "build a REST API with authentication"');
12224
+ console.log(' prpm ai-search "Python testing best practices"');
12225
+ console.log(' prpm ai-search "React component architecture patterns"');
12226
+ console.log(' prpm ai-search "setting up CI/CD pipeline"');
12227
+ return;
12228
+ }
12229
+ console.log(`\u2728 AI searching for "${query}"...`);
12230
+ const config = await getConfig();
12231
+ const searchRequest = {
12232
+ query,
12233
+ limit: options.limit || 10
12234
+ };
12235
+ if (options.format || options.subtype) {
12236
+ searchRequest.filters = {};
12237
+ if (options.format) searchRequest.filters.format = options.format;
12238
+ if (options.subtype) searchRequest.filters.subtype = options.subtype;
12239
+ }
12240
+ const registryUrl = config.registryUrl || "https://registry.prpm.dev";
12241
+ const headers = {
12242
+ "Content-Type": "application/json"
12243
+ };
12244
+ if (config.token) {
12245
+ headers["Authorization"] = `Bearer ${config.token}`;
12246
+ }
12247
+ const res = await fetch(`${registryUrl}/api/v1/ai-search`, {
12248
+ method: "POST",
12249
+ headers,
12250
+ body: JSON.stringify(searchRequest)
12251
+ });
12252
+ if (!res.ok) {
12253
+ const errorText = await res.text().catch(() => "Unknown error");
12254
+ throw new Error(`API error ${res.status}: ${errorText}`);
12255
+ }
12256
+ response = await res.json();
12257
+ if (!response || response.results.length === 0) {
12258
+ console.log("\n\u274C No packages found for your query");
12259
+ console.log("\nTry:");
12260
+ console.log(" - Rephrasing your query");
12261
+ console.log(" - Being more specific about your use case");
12262
+ console.log(" - Using traditional search: \x1B[36mprpm search <query>\x1B[0m");
12263
+ return;
12264
+ }
12265
+ displayAIResults(response);
12266
+ console.log("\n\u{1F4A1} \x1B[1mQuick Actions:\x1B[0m");
12267
+ console.log(" Install: \x1B[36mprpm install <package-name>\x1B[0m");
12268
+ console.log(" More info: \x1B[36mprpm info <package-name>\x1B[0m");
12269
+ console.log(" View in browser: \x1B[36mhttps://prpm.dev/search\x1B[0m\n");
12270
+ success = true;
12271
+ } catch (err) {
12272
+ error = err instanceof Error ? err.message : String(err);
12273
+ if (!error.includes("Authentication") && !error.includes("subscription")) {
12274
+ console.error(`
12275
+ \u274C AI search failed: ${error}`);
12276
+ console.log("\n\u{1F4A1} Tip: Try traditional search instead:");
12277
+ console.log(` \x1B[36mprpm search ${query}\x1B[0m
12278
+ `);
12279
+ }
12280
+ throw new CLIError(error, 1);
12281
+ } finally {
12282
+ await telemetry.track({
12283
+ command: "ai-search",
12284
+ success,
12285
+ error,
12286
+ duration: Date.now() - startTime,
12287
+ data: {
12288
+ query: query.substring(0, 100),
12289
+ format: options.format,
12290
+ subtype: options.subtype,
12291
+ resultCount: success && response ? response.results.length : 0,
12292
+ executionTime: response == null ? void 0 : response.execution_time_ms
12293
+ }
12294
+ });
12295
+ await telemetry.shutdown();
12296
+ }
12297
+ }
12298
+ function createAISearchCommand() {
12299
+ const command = new import_commander8.Command("ai-search");
12300
+ command.description("AI-powered semantic search (100% Free, no login required)").argument("<query>", "Natural language search query").option("--limit <number>", "Number of results to return (default: 10)", "10").option("--format <format>", "Filter by package format (cursor, claude, continue, etc.)").option("--subtype <subtype>", "Filter by package subtype (rule, agent, skill, etc.)").action(async (query, options) => {
12301
+ const limit = options.limit ? parseInt(options.limit, 10) : 10;
12302
+ await handleAISearch(query, { limit, format: options.format, subtype: options.subtype });
12303
+ });
12304
+ return command;
12305
+ }
12306
+
12307
+ // src/commands/info.ts
12308
+ init_cjs_shims();
12309
+ var import_commander9 = require("commander");
9901
12310
  var import_registry_client3 = require("@pr-pm/registry-client");
9902
12311
  init_user_config();
9903
12312
  init_telemetry();
@@ -9962,7 +12371,7 @@ async function handleInfo(packageName) {
9962
12371
  }
9963
12372
  }
9964
12373
  function createInfoCommand() {
9965
- const command = new import_commander8.Command("info");
12374
+ const command = new import_commander9.Command("info");
9966
12375
  command.description("Display detailed package information").argument("<package>", "Package ID to get information about").action(async (packageId) => {
9967
12376
  await handleInfo(packageId);
9968
12377
  });
@@ -9974,7 +12383,7 @@ init_install();
9974
12383
 
9975
12384
  // src/commands/publish.ts
9976
12385
  init_cjs_shims();
9977
- var import_commander11 = require("commander");
12386
+ var import_commander12 = require("commander");
9978
12387
  var import_promises5 = require("fs/promises");
9979
12388
  var import_path12 = require("path");
9980
12389
  var tar2 = __toESM(require("tar"));
@@ -10520,12 +12929,6 @@ async function validatePackageFiles(manifest) {
10520
12929
  errors.push("Claude skills must contain a SKILL.md file");
10521
12930
  }
10522
12931
  }
10523
- if (manifest.format === "cursor") {
10524
- const hasCursorRules = filePaths.some((path7) => path7.includes(".cursorrules"));
10525
- if (!hasCursorRules) {
10526
- warnings.push("Cursor packages typically use .cursorrules filename");
10527
- }
10528
- }
10529
12932
  if (manifest.format === "windsurf") {
10530
12933
  const hasWindsurfRules = filePaths.some((path7) => path7.includes(".windsurf/rules"));
10531
12934
  if (!hasWindsurfRules) {
@@ -11001,7 +13404,9 @@ ${"=".repeat(60)}`);
11001
13404
  } else {
11002
13405
  webappUrl = registryUrl;
11003
13406
  }
11004
- const packageUrl = `${webappUrl}/packages/${encodeURIComponent(result.name)}`;
13407
+ const packageSlug = result.name.startsWith("@") ? result.name.slice(1) : result.name;
13408
+ const packagePath = packageSlug.split("/").map((segment) => encodeURIComponent(segment)).join("/");
13409
+ const packageUrl = `${webappUrl}/packages/${packagePath}`;
11005
13410
  console.log("");
11006
13411
  console.log("\u2705 Package published successfully!");
11007
13412
  console.log("");
@@ -11198,14 +13603,14 @@ ${"=".repeat(60)}`);
11198
13603
  }
11199
13604
  }
11200
13605
  function createPublishCommand() {
11201
- return new import_commander11.Command("publish").description("Publish packages and collections to the registry").option("--access <type>", "Package access (public or private) - overrides manifest setting").option("--tag <tag>", "NPM-style tag (e.g., latest, beta)", "latest").option("--dry-run", "Validate package without publishing").option("--package <name>", "Publish only a specific package from multi-package manifest").option("--collection <id>", "Publish only a specific collection from manifest").action(async (options) => {
13606
+ return new import_commander12.Command("publish").description("Publish packages and collections to the registry").option("--access <type>", "Package access (public or private) - overrides manifest setting").option("--tag <tag>", "NPM-style tag (e.g., latest, beta)", "latest").option("--dry-run", "Validate package without publishing").option("--package <name>", "Publish only a specific package from multi-package manifest").option("--collection <id>", "Publish only a specific collection from manifest").action(async (options) => {
11202
13607
  await handlePublish(options);
11203
13608
  });
11204
13609
  }
11205
13610
 
11206
13611
  // src/commands/login.ts
11207
13612
  init_cjs_shims();
11208
- var import_commander12 = require("commander");
13613
+ var import_commander13 = require("commander");
11209
13614
  var jwt = __toESM(require("jsonwebtoken"));
11210
13615
  init_telemetry();
11211
13616
  init_user_config();
@@ -11372,14 +13777,14 @@ async function handleLogin(options) {
11372
13777
  }
11373
13778
  }
11374
13779
  function createLoginCommand() {
11375
- return new import_commander12.Command("login").description("Login to the PRMP registry").option("--token <token>", "Login with a personal access token").action(async (options) => {
13780
+ return new import_commander13.Command("login").description("Login to the PRMP registry").option("--token <token>", "Login with a personal access token").action(async (options) => {
11376
13781
  await handleLogin(options);
11377
13782
  });
11378
13783
  }
11379
13784
 
11380
13785
  // src/commands/whoami.ts
11381
13786
  init_cjs_shims();
11382
- var import_commander13 = require("commander");
13787
+ var import_commander14 = require("commander");
11383
13788
  init_user_config();
11384
13789
  var import_registry_client7 = require("@pr-pm/registry-client");
11385
13790
  init_telemetry();
@@ -11437,7 +13842,7 @@ async function handleWhoami() {
11437
13842
  }
11438
13843
  }
11439
13844
  function createWhoamiCommand() {
11440
- return new import_commander13.Command("whoami").description("Show current logged-in user").action(async () => {
13845
+ return new import_commander14.Command("whoami").description("Show current logged-in user").action(async () => {
11441
13846
  await handleWhoami();
11442
13847
  });
11443
13848
  }
@@ -11447,7 +13852,7 @@ init_collections();
11447
13852
 
11448
13853
  // src/commands/outdated.ts
11449
13854
  init_cjs_shims();
11450
- var import_commander14 = require("commander");
13855
+ var import_commander15 = require("commander");
11451
13856
  var import_registry_client8 = require("@pr-pm/registry-client");
11452
13857
  init_user_config();
11453
13858
  init_lockfile();
@@ -11547,14 +13952,14 @@ function getUpdateType(current, latest) {
11547
13952
  return "patch";
11548
13953
  }
11549
13954
  function createOutdatedCommand() {
11550
- return new import_commander14.Command("outdated").description("Check for package updates").action(async () => {
13955
+ return new import_commander15.Command("outdated").description("Check for package updates").action(async () => {
11551
13956
  await handleOutdated();
11552
13957
  });
11553
13958
  }
11554
13959
 
11555
13960
  // src/commands/update.ts
11556
13961
  init_cjs_shims();
11557
- var import_commander15 = require("commander");
13962
+ var import_commander16 = require("commander");
11558
13963
  var import_registry_client9 = require("@pr-pm/registry-client");
11559
13964
  init_user_config();
11560
13965
  init_lockfile();
@@ -11644,14 +14049,14 @@ function getUpdateType2(current, latest) {
11644
14049
  return "patch";
11645
14050
  }
11646
14051
  function createUpdateCommand() {
11647
- return new import_commander15.Command("update").description("Update packages to latest compatible versions (minor/patch only)").argument("[package]", "Specific package to update (optional)").option("--all", "Update all packages").action(async (packageName, options) => {
14052
+ return new import_commander16.Command("update").description("Update packages to latest compatible versions (minor/patch only)").argument("[package]", "Specific package to update (optional)").option("--all", "Update all packages").action(async (packageName, options) => {
11648
14053
  await handleUpdate(packageName, options);
11649
14054
  });
11650
14055
  }
11651
14056
 
11652
14057
  // src/commands/upgrade.ts
11653
14058
  init_cjs_shims();
11654
- var import_commander16 = require("commander");
14059
+ var import_commander17 = require("commander");
11655
14060
  var import_registry_client10 = require("@pr-pm/registry-client");
11656
14061
  init_user_config();
11657
14062
  init_lockfile();
@@ -11741,14 +14146,14 @@ function getUpdateType3(current, latest) {
11741
14146
  return "patch";
11742
14147
  }
11743
14148
  function createUpgradeCommand() {
11744
- return new import_commander16.Command("upgrade").description("Upgrade packages to latest versions (including major updates)").argument("[package]", "Specific package to upgrade (optional)").option("--all", "Upgrade all packages").option("--force", "Skip warning for major version upgrades").action(async (packageName, options) => {
14149
+ return new import_commander17.Command("upgrade").description("Upgrade packages to latest versions (including major updates)").argument("[package]", "Specific package to upgrade (optional)").option("--all", "Upgrade all packages").option("--force", "Skip warning for major version upgrades").action(async (packageName, options) => {
11745
14150
  await handleUpgrade(packageName, options);
11746
14151
  });
11747
14152
  }
11748
14153
 
11749
14154
  // src/commands/schema.ts
11750
14155
  init_cjs_shims();
11751
- var import_commander17 = require("commander");
14156
+ var import_commander18 = require("commander");
11752
14157
  init_errors();
11753
14158
  async function handleSchema() {
11754
14159
  try {
@@ -11765,7 +14170,7 @@ async function handleSchema() {
11765
14170
  }
11766
14171
  }
11767
14172
  function createSchemaCommand() {
11768
- const command = new import_commander17.Command("schema");
14173
+ const command = new import_commander18.Command("schema");
11769
14174
  command.description("Display the PRPM manifest JSON schema").action(async () => {
11770
14175
  await handleSchema();
11771
14176
  });
@@ -11774,7 +14179,7 @@ function createSchemaCommand() {
11774
14179
 
11775
14180
  // src/commands/init.ts
11776
14181
  init_cjs_shims();
11777
- var import_commander18 = require("commander");
14182
+ var import_commander19 = require("commander");
11778
14183
  var import_promises6 = require("fs/promises");
11779
14184
  var import_path13 = require("path");
11780
14185
  var import_fs11 = require("fs");
@@ -12370,7 +14775,7 @@ Current files (${config.files.length}):`);
12370
14775
  console.log(" 3. Run `prpm publish` to publish your package\n");
12371
14776
  }
12372
14777
  function createInitCommand() {
12373
- const command = new import_commander18.Command("init");
14778
+ const command = new import_commander19.Command("init");
12374
14779
  command.description("Initialize a new PRPM package with interactive prompts").option("-y, --yes", "Skip prompts and use defaults").option("--private", "Create a private package").option("-f, --force", "Overwrite existing prpm.json").action(async (options) => {
12375
14780
  try {
12376
14781
  await initPackage(options);
@@ -12384,7 +14789,7 @@ function createInitCommand() {
12384
14789
 
12385
14790
  // src/commands/config.ts
12386
14791
  init_cjs_shims();
12387
- var import_commander19 = require("commander");
14792
+ var import_commander20 = require("commander");
12388
14793
  init_user_config();
12389
14794
  init_errors();
12390
14795
  async function handleConfigGet(key) {
@@ -12475,7 +14880,7 @@ async function handleConfigDelete(key) {
12475
14880
  }
12476
14881
  }
12477
14882
  function createConfigCommand() {
12478
- const command = new import_commander19.Command("config").description("Manage CLI configuration");
14883
+ const command = new import_commander20.Command("config").description("Manage CLI configuration");
12479
14884
  command.command("list").alias("ls").description("List all configuration values").action(async () => {
12480
14885
  await handleConfigList();
12481
14886
  });
@@ -12496,7 +14901,7 @@ function createConfigCommand() {
12496
14901
 
12497
14902
  // src/commands/catalog.ts
12498
14903
  init_cjs_shims();
12499
- var import_commander20 = require("commander");
14904
+ var import_commander21 = require("commander");
12500
14905
  var import_promises7 = require("fs/promises");
12501
14906
  var import_path14 = require("path");
12502
14907
  init_telemetry();
@@ -12788,14 +15193,14 @@ async function handleCatalog(directories, options) {
12788
15193
  }
12789
15194
  }
12790
15195
  function createCatalogCommand() {
12791
- return new import_commander20.Command("catalog").description("Discover and catalog existing packages from directories").argument("[directories...]", "Directories to scan for packages (defaults to current directory)", ["."]).option("-o, --output <path>", "Output path for prpm.json (default: ./prpm.json)").option("-a, --append", "Append to existing prpm.json instead of overwriting").option("--dry-run", "Show what would be cataloged without making changes").action(async (directories, options) => {
15196
+ return new import_commander21.Command("catalog").description("Discover and catalog existing packages from directories").argument("[directories...]", "Directories to scan for packages (defaults to current directory)", ["."]).option("-o, --output <path>", "Output path for prpm.json (default: ./prpm.json)").option("-a, --append", "Append to existing prpm.json instead of overwriting").option("--dry-run", "Show what would be cataloged without making changes").action(async (directories, options) => {
12792
15197
  await handleCatalog(directories, options);
12793
15198
  });
12794
15199
  }
12795
15200
 
12796
15201
  // src/commands/playground.ts
12797
15202
  init_cjs_shims();
12798
- var import_commander21 = require("commander");
15203
+ var import_commander22 = require("commander");
12799
15204
  init_user_config();
12800
15205
  init_telemetry();
12801
15206
  var readline4 = __toESM(require("readline"));
@@ -13235,7 +15640,7 @@ async function handlePlayground(options) {
13235
15640
  }
13236
15641
  }
13237
15642
  function createPlaygroundCommand() {
13238
- const command = new import_commander21.Command("playground");
15643
+ const command = new import_commander22.Command("playground");
13239
15644
  command.description("Test a package or custom prompt with AI models in the playground").option("-p, --package <name>", "Package name to test").option("--input <text>", "Input text to send to the model (omit for interactive mode)").option(
13240
15645
  "-m, --model <model>",
13241
15646
  "AI model to use (sonnet, opus, gpt-4o, gpt-4o-mini, gpt-4-turbo)",
@@ -13304,7 +15709,7 @@ Note: Playground usage requires credits. Run 'prpm credits' to check balance.
13304
15709
 
13305
15710
  // src/commands/credits.ts
13306
15711
  init_cjs_shims();
13307
- var import_commander22 = require("commander");
15712
+ var import_commander23 = require("commander");
13308
15713
  init_user_config();
13309
15714
  init_telemetry();
13310
15715
  init_errors();
@@ -13431,7 +15836,7 @@ async function handleCredits(options) {
13431
15836
  }
13432
15837
  }
13433
15838
  function createCreditsCommand() {
13434
- const command = new import_commander22.Command("credits");
15839
+ const command = new import_commander23.Command("credits");
13435
15840
  command.description("Check playground credits balance and transaction history").option("-h, --history", "Show transaction history instead of balance", false).option("-l, --limit <number>", "Number of transactions to show in history", "10").addHelpText(
13436
15841
  "after",
13437
15842
  `
@@ -13466,7 +15871,7 @@ Get more credits:
13466
15871
 
13467
15872
  // src/commands/subscribe.ts
13468
15873
  init_cjs_shims();
13469
- var import_commander23 = require("commander");
15874
+ var import_commander24 = require("commander");
13470
15875
  init_user_config();
13471
15876
  init_telemetry();
13472
15877
  var import_child_process2 = require("child_process");
@@ -13625,7 +16030,7 @@ async function handleSubscribe() {
13625
16030
  }
13626
16031
  }
13627
16032
  function createSubscribeCommand() {
13628
- const command = new import_commander23.Command("subscribe");
16033
+ const command = new import_commander24.Command("subscribe");
13629
16034
  command.description("Subscribe to PRPM+ for monthly playground credits and benefits").addHelpText(
13630
16035
  "after",
13631
16036
  `
@@ -13666,7 +16071,7 @@ Note: You can cancel anytime from https://prpm.dev/settings/billing
13666
16071
 
13667
16072
  // src/commands/buy-credits.ts
13668
16073
  init_cjs_shims();
13669
- var import_commander24 = require("commander");
16074
+ var import_commander25 = require("commander");
13670
16075
  init_user_config();
13671
16076
  init_telemetry();
13672
16077
  var import_child_process3 = require("child_process");
@@ -13807,7 +16212,7 @@ async function handleBuyCredits(options) {
13807
16212
  }
13808
16213
  }
13809
16214
  function createBuyCreditsCommand() {
13810
- const command = new import_commander24.Command("buy-credits");
16215
+ const command = new import_commander25.Command("buy-credits");
13811
16216
  command.description("Purchase one-time playground credits (never expire)").option(
13812
16217
  "-p, --package <package>",
13813
16218
  "Credit package to purchase (small, medium, large)"
@@ -13860,7 +16265,7 @@ Note: Purchased credits are one-time and never expire, unlike monthly credits.
13860
16265
 
13861
16266
  // src/commands/starred.ts
13862
16267
  init_cjs_shims();
13863
- var import_commander25 = require("commander");
16268
+ var import_commander26 = require("commander");
13864
16269
  var import_registry_client11 = require("@pr-pm/registry-client");
13865
16270
  init_user_config();
13866
16271
  init_telemetry();
@@ -13976,14 +16381,14 @@ Total: ${packages.length + collections.length} starred items`);
13976
16381
  }
13977
16382
  }
13978
16383
  function createStarredCommand() {
13979
- const command = new import_commander25.Command("starred");
16384
+ const command = new import_commander26.Command("starred");
13980
16385
  command.description("List your starred packages and collections").option("--packages", "Show only starred packages").option("--collections", "Show only starred collections").option("--format <format>", "Filter packages by format (cursor, claude, continue, windsurf, etc.)").option("--limit <number>", "Maximum number of items to fetch (default: 100)", (val) => parseInt(val, 10)).action(handleStarred);
13981
16386
  return command;
13982
16387
  }
13983
16388
 
13984
16389
  // src/commands/convert.ts
13985
16390
  init_cjs_shims();
13986
- var import_commander26 = require("commander");
16391
+ var import_commander27 = require("commander");
13987
16392
  var import_promises8 = require("fs/promises");
13988
16393
  var import_path15 = require("path");
13989
16394
  var import_fs12 = require("fs");
@@ -14210,7 +16615,7 @@ async function handleConvert(sourcePath, options) {
14210
16615
  }
14211
16616
  }
14212
16617
  function createConvertCommand() {
14213
- const command = new import_commander26.Command("convert").description("Convert AI prompt files between formats").argument("<source>", "Source file path to convert").option("-t, --to <format>", "Target format (cursor, claude, windsurf, kiro, copilot, continue, agents.md)").option("-s, --subtype <subtype>", "Target subtype (agent, skill, slash-command, rule, prompt, etc.)").option("-o, --output <path>", "Output path (defaults to format-specific location)").option("-y, --yes", "Skip confirmation prompts").action(async (source, options) => {
16618
+ const command = new import_commander27.Command("convert").description("Convert AI prompt files between formats").argument("<source>", "Source file path to convert").option("-t, --to <format>", "Target format (cursor, claude, windsurf, kiro, copilot, continue, agents.md)").option("-s, --subtype <subtype>", "Target subtype (agent, skill, slash-command, rule, prompt, etc.)").option("-o, --output <path>", "Output path (defaults to format-specific location)").option("-y, --yes", "Skip confirmation prompts").action(async (source, options) => {
14214
16619
  try {
14215
16620
  if (!options.to) {
14216
16621
  throw new CLIError("Target format is required. Use --to <format>");
@@ -14259,11 +16664,12 @@ function getVersion() {
14259
16664
  return "0.0.0";
14260
16665
  }
14261
16666
  }
14262
- var program = new import_commander27.Command();
16667
+ var program = new import_commander28.Command();
14263
16668
  program.name("prpm").description("Prompt Package Manager - Install and manage prompt-based files").version(getVersion());
14264
16669
  program.addCommand(createInitCommand());
14265
16670
  program.addCommand(createCatalogCommand());
14266
16671
  program.addCommand(createSearchCommand());
16672
+ program.addCommand(createAISearchCommand());
14267
16673
  program.addCommand(createInstallCommand());
14268
16674
  program.addCommand(createInfoCommand());
14269
16675
  program.addCommand(createTrendingCommand());