create-cloudflare 0.0.0-cc9ced83 → 0.0.0-d017e9f2

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/cli.js CHANGED
@@ -4189,6 +4189,1333 @@ var require_which_pm_runs = __commonJS({
4189
4189
  }
4190
4190
  });
4191
4191
 
4192
+ // ../../node_modules/dns2/lib/reader.js
4193
+ var require_reader = __commonJS({
4194
+ "../../node_modules/dns2/lib/reader.js"(exports, module2) {
4195
+ function BufferReader(buffer, offset) {
4196
+ this.buffer = buffer;
4197
+ this.offset = offset || 0;
4198
+ return this;
4199
+ }
4200
+ BufferReader.read = function(buffer, offset, length) {
4201
+ let a2 = [];
4202
+ let c2 = Math.ceil(length / 8);
4203
+ let l2 = Math.floor(offset / 8);
4204
+ const m2 = offset % 8;
4205
+ function t(n) {
4206
+ const r2 = [0, 0, 0, 0, 0, 0, 0, 0];
4207
+ for (let i = 7; i >= 0; i--) {
4208
+ r2[7 - i] = n & Math.pow(2, i) ? 1 : 0;
4209
+ }
4210
+ a2 = a2.concat(r2);
4211
+ }
4212
+ function p3(a3) {
4213
+ let n = 0;
4214
+ const f2 = a3.length - 1;
4215
+ for (let i = f2; i >= 0; i--) {
4216
+ if (a3[f2 - i])
4217
+ n += Math.pow(2, i);
4218
+ }
4219
+ return n;
4220
+ }
4221
+ while (c2--)
4222
+ t(buffer.readUInt8(l2++));
4223
+ return p3(a2.slice(m2, m2 + length));
4224
+ };
4225
+ BufferReader.prototype.read = function(size) {
4226
+ const val = BufferReader.read(this.buffer, this.offset, size);
4227
+ this.offset += size;
4228
+ return val;
4229
+ };
4230
+ module2.exports = BufferReader;
4231
+ }
4232
+ });
4233
+
4234
+ // ../../node_modules/dns2/lib/writer.js
4235
+ var require_writer = __commonJS({
4236
+ "../../node_modules/dns2/lib/writer.js"(exports, module2) {
4237
+ function BufferWriter() {
4238
+ this.buffer = [];
4239
+ }
4240
+ BufferWriter.prototype.write = function(d3, size) {
4241
+ for (let i = 0; i < size; i++) {
4242
+ this.buffer.push(d3 & Math.pow(2, size - i - 1) ? 1 : 0);
4243
+ }
4244
+ };
4245
+ BufferWriter.prototype.writeBuffer = function(b2) {
4246
+ this.buffer = this.buffer.concat(b2.buffer);
4247
+ };
4248
+ BufferWriter.prototype.toBuffer = function() {
4249
+ const arr = [];
4250
+ for (let i = 0; i < this.buffer.length; i += 8) {
4251
+ const chunk = this.buffer.slice(i, i + 8);
4252
+ arr.push(parseInt(chunk.join(""), 2));
4253
+ }
4254
+ return Buffer.from(arr);
4255
+ };
4256
+ module2.exports = BufferWriter;
4257
+ }
4258
+ });
4259
+
4260
+ // ../../node_modules/dns2/packet.js
4261
+ var require_packet = __commonJS({
4262
+ "../../node_modules/dns2/packet.js"(exports, module2) {
4263
+ var { debuglog } = require("util");
4264
+ var BufferReader = require_reader();
4265
+ var BufferWriter = require_writer();
4266
+ var debug = debuglog("dns2");
4267
+ var toIPv6 = (buffer) => buffer.map((part) => part > 0 ? part.toString(16) : "0").join(":").replace(/\b(?:0+:){1,}/, ":");
4268
+ var fromIPv6 = (address) => {
4269
+ const digits = address.split(":");
4270
+ if (digits[0] === "") {
4271
+ digits.shift();
4272
+ }
4273
+ if (digits[digits.length - 1] === "") {
4274
+ digits.pop();
4275
+ }
4276
+ const missingFields = 8 - digits.length + 1;
4277
+ return digits.flatMap((digit) => {
4278
+ if (digit === "") {
4279
+ return Array(missingFields).fill("0");
4280
+ }
4281
+ return digit.padStart(4, "0");
4282
+ });
4283
+ };
4284
+ function Packet(data) {
4285
+ this.header = {};
4286
+ this.questions = [];
4287
+ this.answers = [];
4288
+ this.authorities = [];
4289
+ this.additionals = [];
4290
+ if (data instanceof Packet) {
4291
+ return data;
4292
+ } else if (data instanceof Packet.Header) {
4293
+ this.header = data;
4294
+ } else if (data instanceof Packet.Question) {
4295
+ this.questions.push(data);
4296
+ } else if (data instanceof Packet.Resource) {
4297
+ this.answers.push(data);
4298
+ } else if (typeof data === "string") {
4299
+ this.questions.push(data);
4300
+ } else if (typeof data === "object") {
4301
+ const type = {}.toString.call(data).match(/\[object (\w+)\]/)[1];
4302
+ if (type === "Array") {
4303
+ this.questions = data;
4304
+ }
4305
+ if (type === "Object") {
4306
+ this.header = data;
4307
+ }
4308
+ }
4309
+ return this;
4310
+ }
4311
+ Packet.TYPE = {
4312
+ A: 1,
4313
+ NS: 2,
4314
+ MD: 3,
4315
+ MF: 4,
4316
+ CNAME: 5,
4317
+ SOA: 6,
4318
+ MB: 7,
4319
+ MG: 8,
4320
+ MR: 9,
4321
+ NULL: 10,
4322
+ WKS: 11,
4323
+ PTR: 12,
4324
+ HINFO: 13,
4325
+ MINFO: 14,
4326
+ MX: 15,
4327
+ TXT: 16,
4328
+ AAAA: 28,
4329
+ SRV: 33,
4330
+ EDNS: 41,
4331
+ SPF: 99,
4332
+ AXFR: 252,
4333
+ MAILB: 253,
4334
+ MAILA: 254,
4335
+ ANY: 255,
4336
+ CAA: 257
4337
+ };
4338
+ Packet.CLASS = {
4339
+ IN: 1,
4340
+ CS: 2,
4341
+ CH: 3,
4342
+ HS: 4,
4343
+ ANY: 255
4344
+ };
4345
+ Packet.EDNS_OPTION_CODE = {
4346
+ ECS: 8
4347
+ };
4348
+ Packet.uuid = function() {
4349
+ return Math.floor(Math.random() * 1e5);
4350
+ };
4351
+ Packet.parse = function(buffer) {
4352
+ const packet = new Packet();
4353
+ const reader = new Packet.Reader(buffer);
4354
+ packet.header = Packet.Header.parse(reader);
4355
+ [
4356
+ // props parser count
4357
+ ["questions", Packet.Question, packet.header.qdcount],
4358
+ ["answers", Packet.Resource, packet.header.ancount],
4359
+ ["authorities", Packet.Resource, packet.header.nscount],
4360
+ ["additionals", Packet.Resource, packet.header.arcount]
4361
+ ].forEach(function(def) {
4362
+ const section = def[0];
4363
+ const decoder = def[1];
4364
+ let count = def[2];
4365
+ while (count--) {
4366
+ try {
4367
+ packet[section] = packet[section] || [];
4368
+ packet[section].push(decoder.parse(reader));
4369
+ } catch (e) {
4370
+ debug("node-dns > parse %s error:", section, e.message);
4371
+ }
4372
+ }
4373
+ });
4374
+ return packet;
4375
+ };
4376
+ Object.defineProperty(Packet.prototype, "recursive", {
4377
+ enumerable: true,
4378
+ configurable: true,
4379
+ get() {
4380
+ return !!this.header.rd;
4381
+ },
4382
+ set(yn) {
4383
+ this.header.rd = +yn;
4384
+ return this.header.rd;
4385
+ }
4386
+ });
4387
+ Packet.prototype.toBuffer = function(writer) {
4388
+ writer = writer || new Packet.Writer();
4389
+ this.header.qdcount = this.questions.length;
4390
+ this.header.ancount = this.answers.length;
4391
+ this.header.nscount = this.authorities.length;
4392
+ this.header.arcount = this.additionals.length;
4393
+ if (!(this instanceof Packet.Header)) {
4394
+ this.header = new Packet.Header(this.header);
4395
+ }
4396
+ this.header.toBuffer(writer);
4397
+ [
4398
+ // section encoder
4399
+ ["questions", Packet.Question],
4400
+ ["answers", Packet.Resource],
4401
+ ["authorities", Packet.Resource],
4402
+ ["additionals", Packet.Resource]
4403
+ ].forEach(function(def) {
4404
+ const section = def[0];
4405
+ const Encoder = def[1];
4406
+ (this[section] || []).map(function(resource) {
4407
+ return Encoder.encode(resource, writer);
4408
+ });
4409
+ }.bind(this));
4410
+ return writer.toBuffer();
4411
+ };
4412
+ Packet.Header = function(header) {
4413
+ this.id = 0;
4414
+ this.qr = 0;
4415
+ this.opcode = 0;
4416
+ this.aa = 0;
4417
+ this.tc = 0;
4418
+ this.rd = 0;
4419
+ this.ra = 0;
4420
+ this.z = 0;
4421
+ this.rcode = 0;
4422
+ this.qdcount = 0;
4423
+ this.nscount = 0;
4424
+ this.arcount = 0;
4425
+ for (const k3 in header) {
4426
+ this[k3] = header[k3];
4427
+ }
4428
+ return this;
4429
+ };
4430
+ Packet.Header.parse = function(reader) {
4431
+ const header = new Packet.Header();
4432
+ if (reader instanceof Buffer) {
4433
+ reader = new Packet.Reader(reader);
4434
+ }
4435
+ header.id = reader.read(16);
4436
+ header.qr = reader.read(1);
4437
+ header.opcode = reader.read(4);
4438
+ header.aa = reader.read(1);
4439
+ header.tc = reader.read(1);
4440
+ header.rd = reader.read(1);
4441
+ header.ra = reader.read(1);
4442
+ header.z = reader.read(3);
4443
+ header.rcode = reader.read(4);
4444
+ header.qdcount = reader.read(16);
4445
+ header.ancount = reader.read(16);
4446
+ header.nscount = reader.read(16);
4447
+ header.arcount = reader.read(16);
4448
+ return header;
4449
+ };
4450
+ Packet.Header.prototype.toBuffer = function(writer) {
4451
+ writer = writer || new Packet.Writer();
4452
+ writer.write(this.id, 16);
4453
+ writer.write(this.qr, 1);
4454
+ writer.write(this.opcode, 4);
4455
+ writer.write(this.aa, 1);
4456
+ writer.write(this.tc, 1);
4457
+ writer.write(this.rd, 1);
4458
+ writer.write(this.ra, 1);
4459
+ writer.write(this.z, 3);
4460
+ writer.write(this.rcode, 4);
4461
+ writer.write(this.qdcount, 16);
4462
+ writer.write(this.ancount, 16);
4463
+ writer.write(this.nscount, 16);
4464
+ writer.write(this.arcount, 16);
4465
+ return writer.toBuffer();
4466
+ };
4467
+ Packet.Question = function(name, type, cls) {
4468
+ const defaults = {
4469
+ type: Packet.TYPE.ANY,
4470
+ class: Packet.CLASS.ANY
4471
+ };
4472
+ if (typeof name === "object") {
4473
+ for (const k3 in name) {
4474
+ this[k3] = name[k3] || defaults[k3];
4475
+ }
4476
+ } else {
4477
+ this.name = name;
4478
+ this.type = type || defaults.type;
4479
+ this.class = cls || defaults.class;
4480
+ }
4481
+ return this;
4482
+ };
4483
+ Packet.Question.prototype.toBuffer = function(writer) {
4484
+ return Packet.Question.encode(this, writer);
4485
+ };
4486
+ Packet.Question.parse = Packet.Question.decode = function(reader) {
4487
+ const question = new Packet.Question();
4488
+ if (reader instanceof Buffer) {
4489
+ reader = new Packet.Reader(reader);
4490
+ }
4491
+ question.name = Packet.Name.decode(reader);
4492
+ question.type = reader.read(16);
4493
+ question.class = reader.read(16);
4494
+ return question;
4495
+ };
4496
+ Packet.Question.encode = function(question, writer) {
4497
+ writer = writer || new Packet.Writer();
4498
+ Packet.Name.encode(question.name, writer);
4499
+ writer.write(question.type, 16);
4500
+ writer.write(question.class, 16);
4501
+ return writer.toBuffer();
4502
+ };
4503
+ Packet.Resource = function(name, type, cls, ttl) {
4504
+ const defaults = {
4505
+ name: "",
4506
+ ttl: 300,
4507
+ type: Packet.TYPE.ANY,
4508
+ class: Packet.CLASS.ANY
4509
+ };
4510
+ let input;
4511
+ if (typeof name === "object") {
4512
+ input = name;
4513
+ } else {
4514
+ input = {
4515
+ name,
4516
+ type,
4517
+ class: cls,
4518
+ ttl
4519
+ };
4520
+ }
4521
+ Object.assign(this, defaults, input);
4522
+ return this;
4523
+ };
4524
+ Packet.Resource.prototype.toBuffer = function(writer) {
4525
+ return Packet.Resource.encode(this, writer);
4526
+ };
4527
+ Packet.Resource.encode = function(resource, writer) {
4528
+ writer = writer || new Packet.Writer();
4529
+ Packet.Name.encode(resource.name, writer);
4530
+ writer.write(resource.type, 16);
4531
+ writer.write(resource.class, 16);
4532
+ writer.write(resource.ttl, 32);
4533
+ const encoder = Object.keys(Packet.TYPE).filter(function(type) {
4534
+ return resource.type === Packet.TYPE[type];
4535
+ })[0];
4536
+ if (encoder in Packet.Resource && Packet.Resource[encoder].encode) {
4537
+ return Packet.Resource[encoder].encode(resource, writer);
4538
+ } else {
4539
+ debug("node-dns > unknown encoder %s(%j)", encoder, resource.type);
4540
+ }
4541
+ };
4542
+ Packet.Resource.parse = Packet.Resource.decode = function(reader) {
4543
+ if (reader instanceof Buffer) {
4544
+ reader = new Packet.Reader(reader);
4545
+ }
4546
+ let resource = new Packet.Resource();
4547
+ resource.name = Packet.Name.decode(reader);
4548
+ resource.type = reader.read(16);
4549
+ resource.class = reader.read(16);
4550
+ resource.ttl = reader.read(32);
4551
+ let length = reader.read(16);
4552
+ const parser2 = Object.keys(Packet.TYPE).filter(function(type) {
4553
+ return resource.type === Packet.TYPE[type];
4554
+ })[0];
4555
+ if (parser2 in Packet.Resource) {
4556
+ resource = Packet.Resource[parser2].decode.call(resource, reader, length);
4557
+ } else {
4558
+ debug("node-dns > unknown parser type: %s(%j)", parser2, resource.type);
4559
+ const arr = [];
4560
+ while (length--)
4561
+ arr.push(reader.read(8));
4562
+ resource.data = Buffer.from(arr);
4563
+ }
4564
+ return resource;
4565
+ };
4566
+ Packet.Name = {
4567
+ COPY: 192,
4568
+ decode: function(reader) {
4569
+ if (reader instanceof Buffer) {
4570
+ reader = new Packet.Reader(reader);
4571
+ }
4572
+ const name = [];
4573
+ let o2;
4574
+ let len = reader.read(8);
4575
+ while (len) {
4576
+ if ((len & Packet.Name.COPY) === Packet.Name.COPY) {
4577
+ len -= Packet.Name.COPY;
4578
+ len = len << 8;
4579
+ const pos = len + reader.read(8);
4580
+ if (!o2)
4581
+ o2 = reader.offset;
4582
+ reader.offset = pos * 8;
4583
+ len = reader.read(8);
4584
+ continue;
4585
+ } else {
4586
+ let part = "";
4587
+ while (len--)
4588
+ part += String.fromCharCode(reader.read(8));
4589
+ name.push(part);
4590
+ len = reader.read(8);
4591
+ }
4592
+ }
4593
+ if (o2)
4594
+ reader.offset = o2;
4595
+ return name.join(".");
4596
+ },
4597
+ encode: function(domain, writer) {
4598
+ writer = writer || new Packet.Writer();
4599
+ (domain || "").split(".").filter(function(part) {
4600
+ return !!part;
4601
+ }).forEach(function(part) {
4602
+ writer.write(part.length, 8);
4603
+ part.split("").map(function(c2) {
4604
+ writer.write(c2.charCodeAt(0), 8);
4605
+ return c2.charCodeAt(0);
4606
+ });
4607
+ });
4608
+ writer.write(0, 8);
4609
+ return writer.toBuffer();
4610
+ }
4611
+ };
4612
+ Packet.Resource.A = function(address) {
4613
+ this.type = Packet.TYPE.A;
4614
+ this.class = Packet.CLASS.IN;
4615
+ this.address = address;
4616
+ return this;
4617
+ };
4618
+ Packet.Resource.A.encode = function(record, writer) {
4619
+ writer = writer || new Packet.Writer();
4620
+ const parts = record.address.split(".");
4621
+ writer.write(parts.length, 16);
4622
+ parts.forEach(function(part) {
4623
+ writer.write(parseInt(part, 10), 8);
4624
+ });
4625
+ return writer.toBuffer();
4626
+ };
4627
+ Packet.Resource.A.decode = function(reader, length) {
4628
+ const parts = [];
4629
+ while (length--)
4630
+ parts.push(reader.read(8));
4631
+ this.address = parts.join(".");
4632
+ return this;
4633
+ };
4634
+ Packet.Resource.MX = function(exchange, priority) {
4635
+ this.type = Packet.TYPE.MX;
4636
+ this.class = Packet.CLASS.IN;
4637
+ this.exchange = exchange;
4638
+ this.priority = priority;
4639
+ return this;
4640
+ };
4641
+ Packet.Resource.MX.encode = function(record, writer) {
4642
+ writer = writer || new Packet.Writer();
4643
+ const len = Packet.Name.encode(record.exchange).length;
4644
+ writer.write(len + 2, 16);
4645
+ writer.write(record.priority, 16);
4646
+ Packet.Name.encode(record.exchange, writer);
4647
+ return writer.toBuffer();
4648
+ };
4649
+ Packet.Resource.MX.decode = function(reader, length) {
4650
+ this.priority = reader.read(16);
4651
+ this.exchange = Packet.Name.decode(reader);
4652
+ return this;
4653
+ };
4654
+ Packet.Resource.AAAA = {
4655
+ decode: function(reader, length) {
4656
+ const parts = [];
4657
+ while (length) {
4658
+ length -= 2;
4659
+ parts.push(reader.read(16));
4660
+ }
4661
+ this.address = toIPv6(parts);
4662
+ return this;
4663
+ },
4664
+ encode: function(record, writer) {
4665
+ writer = writer || new Packet.Writer();
4666
+ const parts = fromIPv6(record.address);
4667
+ writer.write(parts.length * 2, 16);
4668
+ parts.forEach(function(part) {
4669
+ writer.write(parseInt(part, 16), 16);
4670
+ });
4671
+ return writer.toBuffer();
4672
+ }
4673
+ };
4674
+ Packet.Resource.NS = {
4675
+ decode: function(reader, length) {
4676
+ this.ns = Packet.Name.decode(reader);
4677
+ return this;
4678
+ },
4679
+ encode: function(record, writer) {
4680
+ writer = writer || new Packet.Writer();
4681
+ writer.write(Packet.Name.encode(record.ns).length, 16);
4682
+ Packet.Name.encode(record.ns, writer);
4683
+ return writer.toBuffer();
4684
+ }
4685
+ };
4686
+ Packet.Resource.PTR = Packet.Resource.CNAME = {
4687
+ decode: function(reader, length) {
4688
+ this.domain = Packet.Name.decode(reader);
4689
+ return this;
4690
+ },
4691
+ encode: function(record, writer) {
4692
+ writer = writer || new Packet.Writer();
4693
+ writer.write(Packet.Name.encode(record.domain).length, 16);
4694
+ Packet.Name.encode(record.domain, writer);
4695
+ return writer.toBuffer();
4696
+ }
4697
+ };
4698
+ Packet.Resource.SPF = Packet.Resource.TXT = {
4699
+ decode: function(reader, length) {
4700
+ const parts = [];
4701
+ let bytesRead = 0;
4702
+ let chunkLength = 0;
4703
+ while (bytesRead < length) {
4704
+ chunkLength = reader.read(8);
4705
+ bytesRead++;
4706
+ while (chunkLength--) {
4707
+ parts.push(reader.read(8));
4708
+ bytesRead++;
4709
+ }
4710
+ }
4711
+ this.data = Buffer.from(parts).toString("utf8");
4712
+ return this;
4713
+ },
4714
+ encode: function(record, writer) {
4715
+ writer = writer || new Packet.Writer();
4716
+ const characterStrings = Array.isArray(record.data) ? record.data : [record.data];
4717
+ const characterStringBuffers = characterStrings.map(function(characterString) {
4718
+ if (Buffer.isBuffer(characterString)) {
4719
+ return characterString;
4720
+ }
4721
+ if (typeof characterString === "string") {
4722
+ return Buffer.from(characterString, "utf8");
4723
+ }
4724
+ return false;
4725
+ }).filter(function(characterString) {
4726
+ return characterString;
4727
+ });
4728
+ const bufferLength = characterStringBuffers.reduce(function(sum, characterStringBuffer) {
4729
+ return sum + characterStringBuffer.length;
4730
+ }, 0);
4731
+ writer.write(bufferLength + characterStringBuffers.length, 16);
4732
+ characterStringBuffers.forEach(function(buffer) {
4733
+ writer.write(buffer.length, 8);
4734
+ buffer.forEach(function(c2) {
4735
+ writer.write(c2, 8);
4736
+ });
4737
+ });
4738
+ return writer.toBuffer();
4739
+ }
4740
+ };
4741
+ Packet.Resource.SOA = {
4742
+ decode: function(reader, length) {
4743
+ this.primary = Packet.Name.decode(reader);
4744
+ this.admin = Packet.Name.decode(reader);
4745
+ this.serial = reader.read(32);
4746
+ this.refresh = reader.read(32);
4747
+ this.retry = reader.read(32);
4748
+ this.expiration = reader.read(32);
4749
+ this.minimum = reader.read(32);
4750
+ return this;
4751
+ },
4752
+ encode: function(record, writer) {
4753
+ writer = writer || new Packet.Writer();
4754
+ let len = 0;
4755
+ len += Packet.Name.encode(record.primary).length;
4756
+ len += Packet.Name.encode(record.admin).length;
4757
+ len += 32 * 5 / 8;
4758
+ writer.write(len, 16);
4759
+ Packet.Name.encode(record.primary, writer);
4760
+ Packet.Name.encode(record.admin, writer);
4761
+ writer.write(record.serial, 32);
4762
+ writer.write(record.refresh, 32);
4763
+ writer.write(record.retry, 32);
4764
+ writer.write(record.expiration, 32);
4765
+ writer.write(record.minimum, 32);
4766
+ return writer.toBuffer();
4767
+ }
4768
+ };
4769
+ Packet.Resource.SRV = {
4770
+ decode: function(reader, length) {
4771
+ this.priority = reader.read(16);
4772
+ this.weight = reader.read(16);
4773
+ this.port = reader.read(16);
4774
+ this.target = Packet.Name.decode(reader);
4775
+ return this;
4776
+ },
4777
+ encode: function(record, writer) {
4778
+ writer = writer || new Packet.Writer();
4779
+ const { length } = Packet.Name.encode(record.target);
4780
+ writer.write(length + 6, 16);
4781
+ writer.write(record.priority, 16);
4782
+ writer.write(record.weight, 16);
4783
+ writer.write(record.port, 16);
4784
+ Packet.Name.encode(record.target, writer);
4785
+ return writer.toBuffer();
4786
+ }
4787
+ };
4788
+ Packet.Resource.EDNS = function(rdata) {
4789
+ return {
4790
+ type: Packet.TYPE.EDNS,
4791
+ class: 512,
4792
+ // Supported UDP Payload size
4793
+ ttl: 0,
4794
+ // Extended RCODE and flags
4795
+ rdata
4796
+ // Objects of type Packet.Resource.EDNS.*
4797
+ };
4798
+ };
4799
+ Packet.Resource.EDNS.decode = function(reader, length) {
4800
+ this.type = Packet.TYPE.EDNS;
4801
+ this.class = 512;
4802
+ this.ttl = 0;
4803
+ this.rdata = [];
4804
+ while (length) {
4805
+ const optionCode = reader.read(16);
4806
+ const optionLength = reader.read(16);
4807
+ const decoder = Object.keys(Packet.EDNS_OPTION_CODE).filter(function(type) {
4808
+ return optionCode === Packet.EDNS_OPTION_CODE[type];
4809
+ })[0];
4810
+ if (decoder in Packet.Resource.EDNS && Packet.Resource.EDNS[decoder].decode) {
4811
+ const rdata = Packet.Resource.EDNS[decoder].decode(reader, optionLength);
4812
+ this.rdata.push(rdata);
4813
+ } else {
4814
+ reader.read(optionLength);
4815
+ debug("node-dns > unknown EDNS rdata decoder %s(%j)", decoder, optionCode);
4816
+ }
4817
+ length = length - 4 - optionLength;
4818
+ }
4819
+ return this;
4820
+ };
4821
+ Packet.Resource.EDNS.encode = function(record, writer) {
4822
+ const rdataWriter = new Packet.Writer();
4823
+ for (const rdata of record.rdata) {
4824
+ const encoder = Object.keys(Packet.EDNS_OPTION_CODE).filter(function(type) {
4825
+ return rdata.ednsCode === Packet.EDNS_OPTION_CODE[type];
4826
+ })[0];
4827
+ if (encoder in Packet.Resource.EDNS && Packet.Resource.EDNS[encoder].encode) {
4828
+ const w3 = new Packet.Writer();
4829
+ Packet.Resource.EDNS[encoder].encode(rdata, w3);
4830
+ rdataWriter.write(rdata.ednsCode, 16);
4831
+ rdataWriter.write(w3.buffer.length / 8, 16);
4832
+ rdataWriter.writeBuffer(w3);
4833
+ } else {
4834
+ debug("node-dns > unknown EDNS rdata encoder %s(%j)", encoder, rdata.ednsCode);
4835
+ }
4836
+ }
4837
+ writer = writer || new Packet.Writer();
4838
+ writer.write(rdataWriter.buffer.length / 8, 16);
4839
+ writer.writeBuffer(rdataWriter);
4840
+ return writer.toBuffer();
4841
+ };
4842
+ Packet.Resource.EDNS.ECS = function(clientIp) {
4843
+ const [ip, prefixLength] = clientIp.split("/");
4844
+ const numPrefixLength = parseInt(prefixLength) || 32;
4845
+ return {
4846
+ ednsCode: Packet.EDNS_OPTION_CODE.ECS,
4847
+ family: 1,
4848
+ sourcePrefixLength: numPrefixLength,
4849
+ scopePrefixLength: 0,
4850
+ ip
4851
+ };
4852
+ };
4853
+ Packet.Resource.EDNS.ECS.decode = function(reader, length) {
4854
+ const rdata = {};
4855
+ rdata.ednsCode = Packet.EDNS_OPTION_CODE.ECS;
4856
+ rdata.family = reader.read(16);
4857
+ rdata.sourcePrefixLength = reader.read(8);
4858
+ rdata.scopePrefixLength = reader.read(8);
4859
+ length -= 4;
4860
+ if (rdata.family !== 1) {
4861
+ debug("node-dns > unimplemented address family");
4862
+ reader.read(length * 8);
4863
+ return rdata;
4864
+ }
4865
+ const ipv4Octets = [];
4866
+ while (length--) {
4867
+ const octet = reader.read(8);
4868
+ ipv4Octets.push(octet);
4869
+ }
4870
+ while (ipv4Octets.length < 4) {
4871
+ ipv4Octets.push(0);
4872
+ }
4873
+ rdata.ip = ipv4Octets.join(".");
4874
+ return rdata;
4875
+ };
4876
+ Packet.Resource.EDNS.ECS.encode = function(record, writer) {
4877
+ const ip = record.ip.split(".").map((s) => parseInt(s));
4878
+ writer.write(record.family, 16);
4879
+ writer.write(record.sourcePrefixLength, 8);
4880
+ writer.write(record.scopePrefixLength, 8);
4881
+ writer.write(ip[0], 8);
4882
+ writer.write(ip[1], 8);
4883
+ writer.write(ip[2], 8);
4884
+ writer.write(ip[3], 8);
4885
+ };
4886
+ Packet.Resource.CAA = {
4887
+ encode: function(record, writer) {
4888
+ writer = writer || new Packet.Writer();
4889
+ const buffer = Buffer.from(record.tag + record.value, "utf8");
4890
+ writer.write(2 + buffer.length, 16);
4891
+ writer.write(record.flags, 8);
4892
+ writer.write(record.tag.length, 8);
4893
+ buffer.forEach(function(c2) {
4894
+ writer.write(c2, 8);
4895
+ });
4896
+ return writer.toBuffer();
4897
+ }
4898
+ };
4899
+ Packet.Reader = BufferReader;
4900
+ Packet.Writer = BufferWriter;
4901
+ Packet.createResponseFromRequest = function(request2) {
4902
+ const response = new Packet(request2);
4903
+ response.header.qr = 1;
4904
+ response.additionals = [];
4905
+ return response;
4906
+ };
4907
+ Packet.createResourceFromQuestion = function(base, record) {
4908
+ const resource = new Packet.Resource(base);
4909
+ Object.assign(resource, record);
4910
+ return resource;
4911
+ };
4912
+ Packet.readStream = (socket) => {
4913
+ let chunks = [];
4914
+ let chunklen = 0;
4915
+ let received = false;
4916
+ let expected = false;
4917
+ return new Promise((resolve9, reject) => {
4918
+ const processMessage = () => {
4919
+ if (received)
4920
+ return;
4921
+ received = true;
4922
+ const buffer = Buffer.concat(chunks, chunklen);
4923
+ resolve9(buffer.slice(2));
4924
+ };
4925
+ socket.on("end", processMessage);
4926
+ socket.on("error", reject);
4927
+ socket.on("readable", () => {
4928
+ let chunk;
4929
+ while ((chunk = socket.read()) !== null) {
4930
+ chunks.push(chunk);
4931
+ chunklen += chunk.length;
4932
+ }
4933
+ if (!expected && chunklen >= 2) {
4934
+ if (chunks.length > 1) {
4935
+ chunks = [Buffer.concat(chunks, chunklen)];
4936
+ }
4937
+ expected = chunks[0].readUInt16BE(0);
4938
+ }
4939
+ if (chunklen >= 2 + expected) {
4940
+ processMessage();
4941
+ }
4942
+ });
4943
+ });
4944
+ };
4945
+ Packet.prototype.toBase64URL = function() {
4946
+ const buffer = this.toBuffer();
4947
+ const base64 = buffer.toString("base64");
4948
+ return base64.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_");
4949
+ };
4950
+ module2.exports = Packet;
4951
+ module2.exports.toIPv6 = toIPv6;
4952
+ module2.exports.fromIPv6 = fromIPv6;
4953
+ }
4954
+ });
4955
+
4956
+ // ../../node_modules/dns2/server/udp.js
4957
+ var require_udp = __commonJS({
4958
+ "../../node_modules/dns2/server/udp.js"(exports, module2) {
4959
+ var udp = require("dgram");
4960
+ var Packet = require_packet();
4961
+ var Server = class extends udp.Socket {
4962
+ constructor(options) {
4963
+ let type = "udp4";
4964
+ if (typeof options === "object") {
4965
+ type = options.type;
4966
+ }
4967
+ super(type);
4968
+ if (typeof options === "function") {
4969
+ this.on("request", options);
4970
+ }
4971
+ this.on("message", this.handle.bind(this));
4972
+ }
4973
+ handle(data, rinfo) {
4974
+ try {
4975
+ const message = Packet.parse(data);
4976
+ this.emit("request", message, this.response.bind(this, rinfo), rinfo);
4977
+ } catch (e) {
4978
+ this.emit("requestError", e);
4979
+ }
4980
+ }
4981
+ response(rinfo, message) {
4982
+ if (message instanceof Packet) {
4983
+ message = message.toBuffer();
4984
+ }
4985
+ return new Promise((resolve9, reject) => {
4986
+ this.send(message, rinfo.port, rinfo.address, (err) => {
4987
+ if (err)
4988
+ return reject(err);
4989
+ resolve9(message);
4990
+ });
4991
+ });
4992
+ }
4993
+ listen(port, address) {
4994
+ return new Promise((resolve9) => this.bind(port, address, resolve9));
4995
+ }
4996
+ };
4997
+ module2.exports = Server;
4998
+ }
4999
+ });
5000
+
5001
+ // ../../node_modules/dns2/server/tcp.js
5002
+ var require_tcp = __commonJS({
5003
+ "../../node_modules/dns2/server/tcp.js"(exports, module2) {
5004
+ var tcp = require("net");
5005
+ var Packet = require_packet();
5006
+ var Server = class extends tcp.Server {
5007
+ constructor(options) {
5008
+ super();
5009
+ if (typeof options === "function") {
5010
+ this.on("request", options);
5011
+ }
5012
+ this.on("connection", this.handle.bind(this));
5013
+ }
5014
+ async handle(client) {
5015
+ try {
5016
+ const data = await Packet.readStream(client);
5017
+ const message = Packet.parse(data);
5018
+ this.emit("request", message, this.response.bind(this, client), client);
5019
+ } catch (e) {
5020
+ this.emit("requestError", e);
5021
+ client.destroy();
5022
+ }
5023
+ }
5024
+ response(client, message) {
5025
+ if (message instanceof Packet) {
5026
+ message = message.toBuffer();
5027
+ }
5028
+ const len = Buffer.alloc(2);
5029
+ len.writeUInt16BE(message.length);
5030
+ client.end(Buffer.concat([len, message]));
5031
+ }
5032
+ };
5033
+ module2.exports = Server;
5034
+ }
5035
+ });
5036
+
5037
+ // ../../node_modules/dns2/server/doh.js
5038
+ var require_doh = __commonJS({
5039
+ "../../node_modules/dns2/server/doh.js"(exports, module2) {
5040
+ var http = require("http");
5041
+ var https = require("https");
5042
+ var { URL: URL2 } = require("url");
5043
+ var Packet = require_packet();
5044
+ var EventEmitter = require("events");
5045
+ var { debuglog } = require("util");
5046
+ var debug = debuglog("dns2-server");
5047
+ var decodeBase64URL = (str) => {
5048
+ let queryData = str.replace(/-/g, "+").replace(/_/g, "/");
5049
+ const pad = queryData.length % 4;
5050
+ if (pad === 1)
5051
+ return;
5052
+ if (pad) {
5053
+ queryData += new Array(5 - pad).join("=");
5054
+ }
5055
+ return queryData;
5056
+ };
5057
+ var readStream = (stream) => new Promise((resolve9, reject) => {
5058
+ let buffer = "";
5059
+ stream.on("error", reject).on("data", (chunk) => {
5060
+ buffer += chunk;
5061
+ }).on("end", () => resolve9(buffer));
5062
+ });
5063
+ var Server = class extends EventEmitter {
5064
+ constructor(options) {
5065
+ super();
5066
+ const { ssl } = Object.assign(this, { cors: true }, options);
5067
+ this.server = (ssl ? https.createServer(options) : http.createServer()).on("request", this.handleRequest.bind(this)).on("listening", () => this.emit("listening", this.address())).on("error", (error) => this.emit("error", error)).on("close", () => {
5068
+ this.server.removeAllListeners();
5069
+ this.emit("close");
5070
+ });
5071
+ return this;
5072
+ }
5073
+ async handleRequest(client, res) {
5074
+ try {
5075
+ const { method, url, headers } = client;
5076
+ const { pathname, searchParams: query } = new URL2(url, "http://unused/");
5077
+ const { cors } = this;
5078
+ if (cors === true) {
5079
+ res.setHeader("Access-Control-Allow-Origin", "*");
5080
+ } else if (typeof cors === "string") {
5081
+ res.setHeader("Access-Control-Allow-Origin", cors);
5082
+ res.setHeader("Vary", "Origin");
5083
+ } else if (typeof cors === "function") {
5084
+ const isAllowed = cors(headers.origin);
5085
+ res.setHeader("Access-Control-Allow-Origin", isAllowed ? headers.origin : "false");
5086
+ res.setHeader("Vary", "Origin");
5087
+ }
5088
+ debug("request", method, url);
5089
+ if (method !== "GET" && method !== "POST") {
5090
+ res.writeHead(405, { "Content-Type": "text/plain" });
5091
+ res.write("405 Method not allowed\n");
5092
+ res.end();
5093
+ return;
5094
+ }
5095
+ if (pathname !== "/dns-query") {
5096
+ res.writeHead(404, { "Content-Type": "text/plain" });
5097
+ res.write("404 Not Found\n");
5098
+ res.end();
5099
+ return;
5100
+ }
5101
+ const contentType = headers.accept;
5102
+ if (contentType !== "application/dns-message") {
5103
+ res.writeHead(400, { "Content-Type": "text/plain" });
5104
+ res.write("400 Bad Request: Illegal content type\n");
5105
+ res.end();
5106
+ return;
5107
+ }
5108
+ let queryData;
5109
+ if (method === "GET") {
5110
+ const dns = query.get("dns");
5111
+ if (!dns) {
5112
+ res.writeHead(400, { "Content-Type": "text/plain" });
5113
+ res.write("400 Bad Request: No query defined\n");
5114
+ res.end();
5115
+ return;
5116
+ }
5117
+ const base64 = decodeBase64URL(dns);
5118
+ if (!base64) {
5119
+ res.writeHead(400, { "Content-Type": "text/plain" });
5120
+ res.write("400 Bad Request: Invalid query data\n");
5121
+ res.end();
5122
+ return;
5123
+ }
5124
+ queryData = Buffer.from(base64, "base64");
5125
+ } else if (method === "POST") {
5126
+ queryData = await readStream(client);
5127
+ }
5128
+ const message = Packet.parse(queryData);
5129
+ this.emit("request", message, this.response.bind(this, res), client);
5130
+ } catch (e) {
5131
+ this.emit("requestError", e);
5132
+ res.destroy();
5133
+ }
5134
+ }
5135
+ /**
5136
+ * Send of the response to the client
5137
+ * @param {*} res
5138
+ * @param {*} message
5139
+ */
5140
+ response(res, message) {
5141
+ debug("response");
5142
+ res.setHeader("Content-Type", "application/dns-message");
5143
+ res.writeHead(200);
5144
+ res.end(message.toBuffer());
5145
+ }
5146
+ /**
5147
+ * listen
5148
+ * @param {*} port
5149
+ * @returns
5150
+ */
5151
+ listen(port, address) {
5152
+ return this.server.listen(port || this.port, address);
5153
+ }
5154
+ address() {
5155
+ return this.server.address();
5156
+ }
5157
+ close() {
5158
+ return this.server.close();
5159
+ }
5160
+ };
5161
+ module2.exports = Server;
5162
+ }
5163
+ });
5164
+
5165
+ // ../../node_modules/dns2/server/dns.js
5166
+ var require_dns = __commonJS({
5167
+ "../../node_modules/dns2/server/dns.js"(exports, module2) {
5168
+ var EventEmitter = require("events");
5169
+ var DOHServer = require_doh();
5170
+ var TCPServer = require_tcp();
5171
+ var UDPServer = require_udp();
5172
+ var DNSServer = class extends EventEmitter {
5173
+ constructor(options = {}) {
5174
+ super();
5175
+ this.servers = {};
5176
+ if (options.doh) {
5177
+ this.servers.doh = new DOHServer(options.doh).on("error", (error) => this.emit("error", error, "doh"));
5178
+ }
5179
+ if (options.tcp) {
5180
+ this.servers.tcp = new TCPServer().on("error", (error) => this.emit("error", error, "tcp"));
5181
+ }
5182
+ if (options.udp) {
5183
+ this.servers.udp = new UDPServer(typeof options.udp === "object" ? options.udp : void 0).on("error", (error) => this.emit("error", error, "udp"));
5184
+ }
5185
+ const servers = Object.values(this.servers);
5186
+ this.closed = Promise.all(
5187
+ servers.map((server) => new Promise((resolve9) => server.once("close", resolve9)))
5188
+ ).then(() => {
5189
+ this.emit("close");
5190
+ });
5191
+ this.listening = Promise.all(
5192
+ servers.map((server) => new Promise((resolve9) => server.once("listening", resolve9)))
5193
+ ).then(() => {
5194
+ const addresses = this.addresses();
5195
+ this.emit("listening", addresses);
5196
+ return addresses;
5197
+ });
5198
+ const emitRequest = (request2, send, client) => this.emit("request", request2, send, client);
5199
+ const emitRequestError = (error) => this.emit("requestError", error);
5200
+ for (const server of servers) {
5201
+ server.on("request", emitRequest);
5202
+ server.on("requestError", emitRequestError);
5203
+ }
5204
+ if (options.handle) {
5205
+ this.on("request", options.handle.bind(options));
5206
+ }
5207
+ }
5208
+ addresses() {
5209
+ const addresses = {};
5210
+ const { udp, tcp, doh } = this.servers;
5211
+ if (udp) {
5212
+ addresses.udp = udp.address();
5213
+ }
5214
+ if (tcp) {
5215
+ addresses.tcp = tcp.address();
5216
+ }
5217
+ if (doh) {
5218
+ addresses.doh = doh.address();
5219
+ }
5220
+ return addresses;
5221
+ }
5222
+ listen(options = {}) {
5223
+ for (const serverType of Object.keys(this.servers)) {
5224
+ const server = this.servers[serverType];
5225
+ const serverOptions = options[serverType];
5226
+ if (serverOptions && serverOptions.port) {
5227
+ server.listen(serverOptions.port, serverOptions.address);
5228
+ } else {
5229
+ server.listen(serverOptions);
5230
+ }
5231
+ }
5232
+ return this.listening;
5233
+ }
5234
+ close() {
5235
+ const { doh, udp, tcp } = this.servers;
5236
+ if (udp) {
5237
+ udp.close();
5238
+ }
5239
+ if (tcp) {
5240
+ tcp.close();
5241
+ }
5242
+ if (doh) {
5243
+ doh.close();
5244
+ }
5245
+ return this.closed;
5246
+ }
5247
+ };
5248
+ module2.exports = DNSServer;
5249
+ }
5250
+ });
5251
+
5252
+ // ../../node_modules/dns2/server/index.js
5253
+ var require_server = __commonJS({
5254
+ "../../node_modules/dns2/server/index.js"(exports, module2) {
5255
+ var UDPServer = require_udp();
5256
+ var TCPServer = require_tcp();
5257
+ var DOHServer = require_doh();
5258
+ var DNSServer = require_dns();
5259
+ var createUDPServer = (options) => {
5260
+ return new UDPServer(options);
5261
+ };
5262
+ var createTCPServer = (options) => {
5263
+ return new TCPServer(options);
5264
+ };
5265
+ var createDOHServer = (options) => {
5266
+ return new DOHServer(options);
5267
+ };
5268
+ var createServer = (options) => {
5269
+ return new DNSServer(options);
5270
+ };
5271
+ module2.exports = {
5272
+ UDPServer,
5273
+ TCPServer,
5274
+ DOHServer,
5275
+ DNSServer,
5276
+ createTCPServer,
5277
+ createUDPServer,
5278
+ createDOHServer,
5279
+ createServer
5280
+ };
5281
+ }
5282
+ });
5283
+
5284
+ // ../../node_modules/dns2/client/tcp.js
5285
+ var require_tcp2 = __commonJS({
5286
+ "../../node_modules/dns2/client/tcp.js"(exports, module2) {
5287
+ var tcp = require("net");
5288
+ var Packet = require_packet();
5289
+ module2.exports = ({ dns = "1.1.1.1", port = 53 } = {}) => {
5290
+ return async (name, type = "A", cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
5291
+ const packet = new Packet();
5292
+ if (recursive) {
5293
+ packet.header.rd = 1;
5294
+ }
5295
+ if (clientIp) {
5296
+ packet.additionals.push(Packet.Resource.EDNS([
5297
+ Packet.Resource.EDNS.ECS(clientIp)
5298
+ ]));
5299
+ }
5300
+ packet.questions.push({
5301
+ name,
5302
+ class: cls,
5303
+ type: Packet.TYPE[type]
5304
+ });
5305
+ const message = packet.toBuffer();
5306
+ const len = Buffer.alloc(2);
5307
+ len.writeUInt16BE(message.length);
5308
+ const client = tcp.connect({ host: dns, port });
5309
+ client.end(Buffer.concat([len, message]));
5310
+ const data = await Packet.readStream(client);
5311
+ if (!data.length) {
5312
+ throw new Error("Empty TCP response");
5313
+ }
5314
+ return Packet.parse(data);
5315
+ };
5316
+ };
5317
+ }
5318
+ });
5319
+
5320
+ // ../../node_modules/dns2/client/doh.js
5321
+ var require_doh2 = __commonJS({
5322
+ "../../node_modules/dns2/client/doh.js"(exports, module2) {
5323
+ var Packet = require_packet();
5324
+ var defaultGet = (url) => new Promise((resolve9, reject) => {
5325
+ const headers = {
5326
+ accept: "application/dns-message"
5327
+ };
5328
+ const base = url.startsWith("https") ? require("https") : require("http");
5329
+ const req = base.get(url, { headers }, resolve9);
5330
+ req.on("error", reject);
5331
+ });
5332
+ var readStream = (stream) => {
5333
+ const buffer = [];
5334
+ return new Promise((resolve9, reject) => {
5335
+ stream.on("error", reject).on("data", (chunk) => buffer.push(chunk)).on("end", () => resolve9(Buffer.concat(buffer)));
5336
+ });
5337
+ };
5338
+ var DOHClient = ({ dns, http, get = defaultGet } = {}) => {
5339
+ return (name, type = "A", cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
5340
+ const packet = new Packet();
5341
+ if (recursive) {
5342
+ packet.header.rd = 1;
5343
+ }
5344
+ if (clientIp) {
5345
+ packet.additionals.push(Packet.Resource.EDNS([
5346
+ Packet.Resource.EDNS.ECS(clientIp)
5347
+ ]));
5348
+ }
5349
+ packet.questions.push({
5350
+ name,
5351
+ class: cls,
5352
+ type: Packet.TYPE[type]
5353
+ });
5354
+ const query = packet.toBase64URL();
5355
+ return Promise.resolve(get(`http${http ? "" : "s"}://${dns}/dns-query?dns=${query}`)).then(readStream).then(Packet.parse);
5356
+ };
5357
+ };
5358
+ module2.exports = DOHClient;
5359
+ }
5360
+ });
5361
+
5362
+ // ../../node_modules/dns2/client/udp.js
5363
+ var require_udp2 = __commonJS({
5364
+ "../../node_modules/dns2/client/udp.js"(exports, module2) {
5365
+ var udp = require("dgram");
5366
+ var Packet = require_packet();
5367
+ var { equal } = require("assert");
5368
+ var { debuglog } = require("util");
5369
+ var debug = debuglog("dns2");
5370
+ module2.exports = ({ dns = "8.8.8.8", port = 53, socketType = "udp4" } = {}) => {
5371
+ return (name, type = "A", cls = Packet.CLASS.IN, { clientIp, recursive = true } = {}) => {
5372
+ const query = new Packet();
5373
+ query.header.id = Math.random() * 1e4 | 0;
5374
+ if (recursive) {
5375
+ query.header.rd = 1;
5376
+ }
5377
+ if (clientIp) {
5378
+ query.additionals.push(Packet.Resource.EDNS([
5379
+ Packet.Resource.EDNS.ECS(clientIp)
5380
+ ]));
5381
+ }
5382
+ query.questions.push({
5383
+ name,
5384
+ class: cls,
5385
+ type: Packet.TYPE[type]
5386
+ });
5387
+ const client = new udp.Socket(socketType);
5388
+ return new Promise((resolve9, reject) => {
5389
+ client.once("message", function onMessage(message) {
5390
+ client.close();
5391
+ const response = Packet.parse(message);
5392
+ equal(response.header.id, query.header.id);
5393
+ resolve9(response);
5394
+ });
5395
+ debug("send", dns, query.toBuffer());
5396
+ client.send(query.toBuffer(), port, dns, (err) => err && reject(err));
5397
+ });
5398
+ };
5399
+ };
5400
+ }
5401
+ });
5402
+
5403
+ // ../../node_modules/dns2/client/google.js
5404
+ var require_google = __commonJS({
5405
+ "../../node_modules/dns2/client/google.js"(exports, module2) {
5406
+ var https = require("https");
5407
+ var get = (url) => new Promise((resolve9) => https.get(url, resolve9));
5408
+ var readStream = (stream) => {
5409
+ const buffer = [];
5410
+ return new Promise((resolve9, reject) => {
5411
+ stream.on("error", reject).on("data", (chunk) => {
5412
+ buffer.push(chunk);
5413
+ }).on("end", () => resolve9(Buffer.concat(buffer)));
5414
+ });
5415
+ };
5416
+ var GoogleClient = () => (name, type = "ANY") => {
5417
+ return Promise.resolve().then(() => get(`https://dns.google.com/resolve?name=${name}&type=${type}`)).then(readStream).then(JSON.parse);
5418
+ };
5419
+ module2.exports = GoogleClient;
5420
+ }
5421
+ });
5422
+
5423
+ // ../../node_modules/dns2/index.js
5424
+ var require_dns2 = __commonJS({
5425
+ "../../node_modules/dns2/index.js"(exports, module2) {
5426
+ var {
5427
+ TCPServer,
5428
+ UDPServer,
5429
+ DOHServer,
5430
+ createTCPServer,
5431
+ createUDPServer,
5432
+ createDOHServer,
5433
+ createServer
5434
+ } = require_server();
5435
+ var EventEmitter = require("events");
5436
+ var DNS = class extends EventEmitter {
5437
+ constructor(options) {
5438
+ super();
5439
+ Object.assign(this, {
5440
+ port: 53,
5441
+ retries: 3,
5442
+ timeout: 3,
5443
+ recursive: true,
5444
+ resolverProtocol: "UDP",
5445
+ nameServers: [
5446
+ "8.8.8.8",
5447
+ "114.114.114.114"
5448
+ ],
5449
+ rootServers: [
5450
+ "a",
5451
+ "b",
5452
+ "c",
5453
+ "d",
5454
+ "e",
5455
+ "f",
5456
+ "g",
5457
+ "h",
5458
+ "i",
5459
+ "j",
5460
+ "k",
5461
+ "l",
5462
+ "m"
5463
+ ].map((x2) => `${x2}.root-servers.net`)
5464
+ }, options);
5465
+ }
5466
+ /**
5467
+ * query
5468
+ * @param {*} questions
5469
+ */
5470
+ query(name, type, cls, clientIp) {
5471
+ const { port, nameServers, recursive, resolverProtocol = "UDP" } = this;
5472
+ const createResolver = DNS[resolverProtocol + "Client"];
5473
+ return Promise.race(nameServers.map((address) => {
5474
+ const resolve9 = createResolver({ dns: address, port, recursive });
5475
+ return resolve9(name, type, cls, clientIp);
5476
+ }));
5477
+ }
5478
+ /**
5479
+ * resolve
5480
+ * @param {*} domain
5481
+ * @param {*} type
5482
+ * @param {*} cls
5483
+ */
5484
+ resolve(domain, type = "ANY", cls = DNS.Packet.CLASS.IN, clientIp = void 0) {
5485
+ return this.query(domain, type, cls, clientIp);
5486
+ }
5487
+ resolveA(domain, clientIp) {
5488
+ return this.resolve(domain, "A", void 0, clientIp);
5489
+ }
5490
+ resolveAAAA(domain) {
5491
+ return this.resolve(domain, "AAAA");
5492
+ }
5493
+ resolveMX(domain) {
5494
+ return this.resolve(domain, "MX");
5495
+ }
5496
+ resolveCNAME(domain) {
5497
+ return this.resolve(domain, "CNAME");
5498
+ }
5499
+ resolvePTR(domain) {
5500
+ return this.resolve(domain, "PTR");
5501
+ }
5502
+ };
5503
+ DNS.TCPServer = TCPServer;
5504
+ DNS.UDPServer = UDPServer;
5505
+ DNS.DOHServer = DOHServer;
5506
+ DNS.createUDPServer = createUDPServer;
5507
+ DNS.createTCPServer = createTCPServer;
5508
+ DNS.createDOHServer = createDOHServer;
5509
+ DNS.createServer = createServer;
5510
+ DNS.TCPClient = require_tcp2();
5511
+ DNS.DOHClient = require_doh2();
5512
+ DNS.UDPClient = require_udp2();
5513
+ DNS.GoogleClient = require_google();
5514
+ DNS.Packet = require_packet();
5515
+ module2.exports = DNS;
5516
+ }
5517
+ });
5518
+
4192
5519
  // node_modules/undici/lib/core/symbols.js
4193
5520
  var require_symbols = __commonJS({
4194
5521
  "node_modules/undici/lib/core/symbols.js"(exports, module2) {
@@ -52612,7 +53939,9 @@ var require_typescript2 = __commonJS({
52612
53939
  // src/cli.ts
52613
53940
  var cli_exports = {};
52614
53941
  __export(cli_exports, {
52615
- main: () => main
53942
+ C3_DEFAULTS: () => C3_DEFAULTS,
53943
+ main: () => main,
53944
+ parseArgs: () => parseArgs
52616
53945
  });
52617
53946
  module.exports = __toCommonJS(cli_exports);
52618
53947
  var import_haikunator = __toESM(require_dist_node());
@@ -53153,8 +54482,6 @@ var space = (n = 1) => {
53153
54482
  return hidden("\u200A".repeat(n));
53154
54483
  };
53155
54484
  var logRaw = (msg) => {
53156
- if (process.env.VITEST)
53157
- return;
53158
54485
  process.stdout.write(`${msg}
53159
54486
  `);
53160
54487
  };
@@ -54347,178 +55674,169 @@ var logUpdateStderr = createLogUpdate(import_node_process6.default.stderr);
54347
55674
  var grayBar = gray(shapes.bar);
54348
55675
  var blCorner = gray(shapes.corners.bl);
54349
55676
  var leftT = gray(shapes.leftT);
54350
- var textInput = async (opts) => {
54351
- const { renderSubmitted, question, defaultValue, validate, acceptDefault } = opts;
54352
- const helpText = opts.helpText || ``;
54353
- const format3 = opts.format || ((val) => val);
54354
- const prompt = new oD({
54355
- defaultValue,
54356
- validate,
54357
- render() {
54358
- let body = "";
54359
- switch (this.state) {
54360
- case "initial":
54361
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54362
- `;
54363
- body += `${space(2)}${gray(format3(defaultValue))}
54364
- `;
54365
- break;
54366
- case "active":
54367
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54368
- `;
54369
- body += `${space(2)}${format3(this.value || dim(defaultValue))}
54370
- `;
54371
- break;
54372
- case "submit":
54373
- body += `${leftT} ${question}
54374
- `;
54375
- body += `${grayBar} ${renderSubmitted(
54376
- format3(this.value)
54377
- )}
54378
- ${grayBar}`;
54379
- break;
54380
- case "error":
54381
- body += `${leftT} ${status.error} ${dim(this.error)}
54382
- `;
54383
- body += `${grayBar}
54384
- `;
54385
- body += `${blCorner} ${question} ${dim(helpText)}
54386
- `;
54387
- body += `${space(2)}${format3(this.value)}
54388
- `;
54389
- break;
54390
- default:
54391
- break;
54392
- }
54393
- return body;
54394
- }
54395
- });
54396
- let value;
54397
- if (acceptDefault) {
54398
- logRaw(`${leftT} ${question}`);
54399
- logRaw(`${grayBar} ${renderSubmitted(defaultValue)}
54400
- ${grayBar}`);
54401
- value = defaultValue;
54402
- validate?.(value);
54403
- } else {
54404
- value = await prompt.prompt();
54405
- if (eD(value)) {
54406
- cancel("Operation cancelled.");
54407
- process.exit(0);
54408
- }
54409
- }
55677
+ var processArgument = async (args, name, promptConfig) => {
55678
+ let value = args[name];
55679
+ const renderSubmitted = getRenderers(promptConfig).submit;
55680
+ if (value !== void 0) {
55681
+ promptConfig.validate?.(value);
55682
+ const lines = renderSubmitted({ value });
55683
+ logRaw(lines.join("\n"));
55684
+ return value;
55685
+ }
55686
+ value = await inputPrompt(promptConfig);
54410
55687
  return value;
54411
55688
  };
54412
- var selectInput = async (opts) => {
54413
- const { question, options, renderSubmitted, defaultValue, acceptDefault } = opts;
54414
- const helpText = opts.helpText || ``;
54415
- const prompt = new ED({
54416
- options,
54417
- initialValue: defaultValue ?? options[0].value,
54418
- render() {
54419
- const renderOption = (opt, i) => {
54420
- const { label } = opt;
54421
- const active = i === this.cursor;
54422
- const text = active ? blue.underline(label) : dim(label);
54423
- const indicator = active ? blue(shapes.radioActive) : dim(shapes.radioInactive);
54424
- return `${space(2)}${indicator} ${text}`;
54425
- };
54426
- let body = ``;
54427
- switch (this.state) {
54428
- case "submit":
54429
- body += `${leftT} ${question}
54430
- `;
54431
- body += `${grayBar} ${renderSubmitted(options[this.cursor])}`;
54432
- body += `
54433
- ${grayBar}`;
54434
- break;
54435
- default:
54436
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54437
- `;
54438
- body += `${options.map(renderOption).join(`
54439
- `)}
54440
- `;
54441
- break;
55689
+ var inputPrompt = async (promptConfig) => {
55690
+ const renderers = getRenderers(promptConfig);
55691
+ let prompt;
55692
+ const dispatchRender = (props) => {
55693
+ const renderedLines = renderers[props.state](props);
55694
+ return renderedLines.join("\n");
55695
+ };
55696
+ if (promptConfig.type === "select") {
55697
+ prompt = new ED({
55698
+ ...promptConfig,
55699
+ options: promptConfig.options,
55700
+ initialValue: String(promptConfig.defaultValue),
55701
+ render() {
55702
+ return dispatchRender(this);
54442
55703
  }
54443
- return body;
54444
- }
54445
- });
54446
- let value;
54447
- if (acceptDefault) {
54448
- logRaw(`${leftT} ${question}`);
54449
- logRaw(
54450
- `${grayBar} ${renderSubmitted({
54451
- label: defaultValue,
54452
- value: defaultValue
54453
- })}`
54454
- );
54455
- logRaw(`${grayBar}`);
54456
- value = defaultValue;
55704
+ });
55705
+ } else if (promptConfig.type === "confirm") {
55706
+ prompt = new sD({
55707
+ ...promptConfig,
55708
+ initialValue: Boolean(promptConfig.defaultValue),
55709
+ active: promptConfig.activeText || "",
55710
+ inactive: promptConfig.inactiveText || "",
55711
+ render() {
55712
+ return dispatchRender(this);
55713
+ }
55714
+ });
54457
55715
  } else {
54458
- value = await prompt.prompt();
54459
- if (eD(value)) {
54460
- cancel("Operation cancelled.");
54461
- process.exit(0);
54462
- }
55716
+ prompt = new oD({
55717
+ ...promptConfig,
55718
+ defaultValue: String(promptConfig.defaultValue),
55719
+ render() {
55720
+ return dispatchRender(this);
55721
+ }
55722
+ });
54463
55723
  }
54464
- return value;
55724
+ const input = await prompt.prompt();
55725
+ if (eD(input)) {
55726
+ cancel("Operation cancelled.");
55727
+ process.exit(0);
55728
+ }
55729
+ return input;
55730
+ };
55731
+ var renderSubmit = (config14, value) => {
55732
+ const { question, label } = config14;
55733
+ const content = config14.type === "confirm" ? `${grayBar} ${brandColor(value)} ${dim(label)}` : `${grayBar} ${brandColor(label)} ${dim(value)}`;
55734
+ return [`${leftT} ${question}`, content, `${grayBar}`];
55735
+ };
55736
+ var handleCancel = () => {
55737
+ cancel("Operation cancelled.");
55738
+ process.exit(0);
54465
55739
  };
54466
- var confirmInput = async (opts) => {
55740
+ var getRenderers = (config14) => {
55741
+ switch (config14.type) {
55742
+ case "select":
55743
+ return getSelectRenderers(config14);
55744
+ case "confirm":
55745
+ return getConfirmRenderers(config14);
55746
+ case "text":
55747
+ return getTextRenderers(config14);
55748
+ }
55749
+ };
55750
+ var getTextRenderers = (config14) => {
54467
55751
  const {
54468
- activeText,
54469
- inactiveText,
55752
+ defaultValue,
54470
55753
  question,
54471
- renderSubmitted,
54472
- defaultValue = true,
54473
- acceptDefault
54474
- } = opts;
54475
- const helpText = opts.helpText || `(y/n)`;
55754
+ helpText: _helpText,
55755
+ format: _format
55756
+ } = config14;
55757
+ const helpText = _helpText ?? "";
55758
+ const format3 = _format ?? ((val) => String(val));
55759
+ return {
55760
+ initial: () => [
55761
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
55762
+ `${space(2)}${gray(format3(defaultValue))}`,
55763
+ ``
55764
+ // extra line for readability
55765
+ ],
55766
+ active: ({ value }) => [
55767
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
55768
+ `${space(2)}${format3(value || dim(defaultValue))}`,
55769
+ ``
55770
+ // extra line for readability
55771
+ ],
55772
+ error: ({ value, error }) => [
55773
+ `${leftT} ${status.error} ${dim(error)}`,
55774
+ `${grayBar}`,
55775
+ `${blCorner} ${question} ${dim(helpText)}`,
55776
+ `${space(2)}${format3(value)}`,
55777
+ ``
55778
+ // extra line for readability
55779
+ ],
55780
+ submit: ({ value }) => renderSubmit(config14, format3(value)),
55781
+ cancel: handleCancel
55782
+ };
55783
+ };
55784
+ var getSelectRenderers = (config14) => {
55785
+ const { options, question, helpText: _helpText } = config14;
55786
+ const helpText = _helpText ?? "";
55787
+ const defaultRenderer = ({ cursor }) => {
55788
+ const renderOption = (opt, i) => {
55789
+ const { label: optionLabel } = opt;
55790
+ const active = i === cursor;
55791
+ const text = active ? blue.underline(optionLabel) : dim(optionLabel);
55792
+ const indicator = active ? blue(shapes.radioActive) : dim(shapes.radioInactive);
55793
+ return `${space(2)}${indicator} ${text}`;
55794
+ };
55795
+ return [
55796
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
55797
+ `${options.map(renderOption).join(`
55798
+ `)}`,
55799
+ ``
55800
+ // extra line for readability
55801
+ ];
55802
+ };
55803
+ return {
55804
+ initial: defaultRenderer,
55805
+ active: defaultRenderer,
55806
+ confirm: defaultRenderer,
55807
+ error: defaultRenderer,
55808
+ submit: ({ value }) => renderSubmit(
55809
+ config14,
55810
+ options.find((o2) => o2.value === value)?.label
55811
+ ),
55812
+ cancel: handleCancel
55813
+ };
55814
+ };
55815
+ var getConfirmRenderers = (config14) => {
55816
+ const { activeText, inactiveText, question, helpText: _helpText } = config14;
55817
+ const helpText = _helpText ?? "";
54476
55818
  const active = activeText || "Yes";
54477
55819
  const inactive = inactiveText || "No";
54478
- const prompt = new sD({
54479
- active,
54480
- inactive,
54481
- initialValue: defaultValue,
54482
- render() {
54483
- const yesColor = this.value ? blue : dim;
54484
- const noColor = this.value ? dim : blue;
54485
- let body = ``;
54486
- switch (this.state) {
54487
- case "submit":
54488
- body += `${leftT} ${question}
54489
- `;
54490
- body += `${grayBar} ${renderSubmitted(this.value)}`;
54491
- body += `
54492
- ${grayBar}`;
54493
- break;
54494
- default:
54495
- body += `${blCorner} ${bold(question)} ${dim(helpText)}
54496
- `;
54497
- body += `${space(2)}${yesColor(active)} / ${noColor(inactive)}
54498
- `;
54499
- break;
54500
- }
54501
- return body;
54502
- }
54503
- });
54504
- let value;
54505
- if (acceptDefault) {
54506
- logRaw(`${leftT} ${question}`);
54507
- logRaw(`${grayBar} ${renderSubmitted(defaultValue)}`);
54508
- logRaw(`${grayBar}`);
54509
- value = defaultValue;
54510
- } else {
54511
- value = Boolean(await prompt.prompt());
54512
- if (eD(value)) {
54513
- cancel("Operation cancelled.");
54514
- process.exit(0);
54515
- }
54516
- }
54517
- return value;
55820
+ const defaultRenderer = ({ value }) => {
55821
+ const yesColor = value ? blue : dim;
55822
+ const noColor = value ? dim : blue;
55823
+ return [
55824
+ `${blCorner} ${bold(question)} ${dim(helpText)}`,
55825
+ `${space(2)}${yesColor(active)} / ${noColor(inactive)}`
55826
+ ];
55827
+ };
55828
+ return {
55829
+ initial: defaultRenderer,
55830
+ active: defaultRenderer,
55831
+ confirm: defaultRenderer,
55832
+ error: defaultRenderer,
55833
+ submit: ({ value }) => renderSubmit(config14, value ? "yes" : "no"),
55834
+ cancel: handleCancel
55835
+ };
54518
55836
  };
55837
+ var spinnerFrames = ["\u2524", "\u2518", "\u2534", "\u2514", "\u251C", "\u250C", "\u252C", "\u2510"];
55838
+ var ellipsisFrames = ["", ".", "..", "...", " ..", " .", ""];
54519
55839
  var spinner = () => {
54520
- const spinnerFrames = ["\u2524", "\u2518", "\u2534", "\u2514", "\u251C", "\u250C", "\u252C", "\u2510"];
54521
- const ellipsisFrames = ["", ".", "..", "...", " ..", " .", ""];
54522
55840
  const color = brandColor;
54523
55841
  const frameRate = 120;
54524
55842
  let loop = null;
@@ -59419,7 +60737,44 @@ var Yargs = YargsFactory(esm_default);
59419
60737
  var yargs_default = Yargs;
59420
60738
 
59421
60739
  // package.json
59422
- var version = "0.0.0-cc9ced83";
60740
+ var version = "0.0.0-d017e9f2";
60741
+ var devDependencies = {
60742
+ "@babel/parser": "^7.21.3",
60743
+ "@babel/types": "^7.21.4",
60744
+ "@clack/prompts": "^0.6.3",
60745
+ "@cloudflare/eslint-config-worker": "*",
60746
+ "@cloudflare/workers-tsconfig": "*",
60747
+ "@cloudflare/workers-types": "^4.20230419.0",
60748
+ "@types/command-exists": "^1.2.0",
60749
+ "@types/cross-spawn": "^6.0.2",
60750
+ "@types/dns2": "^2.0.3",
60751
+ "@types/esprima": "^4.0.3",
60752
+ "@types/node": "^18.15.3",
60753
+ "@types/which-pm-runs": "^1.0.0",
60754
+ "@types/yargs": "^17.0.22",
60755
+ "@typescript-eslint/eslint-plugin": "^5.55.0",
60756
+ "@typescript-eslint/parser": "^5.55.0",
60757
+ chalk: "^5.2.0",
60758
+ "command-exists": "^1.2.9",
60759
+ "cross-spawn": "^7.0.3",
60760
+ dns2: "^2.1.0",
60761
+ esbuild: "^0.17.12",
60762
+ execa: "^7.1.1",
60763
+ haikunator: "^2.1.2",
60764
+ "log-update": "^5.0.1",
60765
+ open: "^8.4.0",
60766
+ pnpm: "^8.6.11",
60767
+ recast: "^0.22.0",
60768
+ semver: "^7.5.1",
60769
+ typescript: "^5.0.2",
60770
+ undici: "5.20.0",
60771
+ "vite-tsconfig-paths": "^4.0.8",
60772
+ vitest: "^0.30.0",
60773
+ "which-pm-runs": "^1.1.0",
60774
+ wrangler: "*",
60775
+ yargs: "^17.7.1",
60776
+ yarn: "^1.22.19"
60777
+ };
59423
60778
 
59424
60779
  // src/common.ts
59425
60780
  var import_fs6 = require("fs");
@@ -59435,7 +60790,19 @@ var import_cross_spawn = __toESM(require_cross_spawn());
59435
60790
  var import_semver = __toESM(require_semver2());
59436
60791
  var import_which_pm_runs = __toESM(require_which_pm_runs());
59437
60792
  var detectPackageManager = () => {
59438
- const { name, version: version2 } = (0, import_which_pm_runs.default)() ?? { name: "npm", version: "0.0.0" };
60793
+ let { name, version: version2 } = (0, import_which_pm_runs.default)() ?? { name: "npm", version: "0.0.0" };
60794
+ if (process.env.TEST_PM) {
60795
+ switch (process.env.TEST_PM) {
60796
+ case "pnpm":
60797
+ name = "pnpm";
60798
+ version2 = devDependencies["pnpm"].replace("^", "");
60799
+ break;
60800
+ case "yarn":
60801
+ name = "yarn";
60802
+ version2 = devDependencies["yarn"].replace("^", "");
60803
+ break;
60804
+ }
60805
+ }
59439
60806
  switch (name) {
59440
60807
  case "pnpm":
59441
60808
  if (import_semver.default.gt(version2, "6.0.0")) {
@@ -59480,15 +60847,14 @@ var runCommand = async (command2, opts = {}) => {
59480
60847
  }
59481
60848
  return printAsyncStatus({
59482
60849
  useSpinner: opts.useSpinner ?? opts.silent,
59483
- startText: opts.startText || command2.join(" "),
60850
+ startText: opts.startText || command2.join(" ").trim(),
59484
60851
  doneText: opts.doneText,
59485
60852
  promise() {
59486
60853
  const [executable, ...args] = command2;
59487
- const squelch = opts.silent || process.env.VITEST;
59488
60854
  const cmd = (0, import_cross_spawn.spawn)(executable, [...args], {
59489
60855
  // TODO: ideally inherit stderr, but npm install uses this for warnings
59490
60856
  // stdio: [ioMode, ioMode, "inherit"],
59491
- stdio: squelch ? "pipe" : "inherit",
60857
+ stdio: opts.silent ? "pipe" : "inherit",
59492
60858
  env: {
59493
60859
  ...process.env,
59494
60860
  ...opts.env
@@ -59496,7 +60862,7 @@ var runCommand = async (command2, opts = {}) => {
59496
60862
  cwd: opts.cwd
59497
60863
  });
59498
60864
  let output = ``;
59499
- if (opts?.captureOutput ?? squelch) {
60865
+ if (opts.captureOutput ?? opts.silent) {
59500
60866
  cmd.stdout?.on("data", (data) => {
59501
60867
  output += data;
59502
60868
  });
@@ -59521,6 +60887,9 @@ var runCommand = async (command2, opts = {}) => {
59521
60887
  }
59522
60888
  }
59523
60889
  });
60890
+ cmd.on("error", (code) => {
60891
+ reject(code);
60892
+ });
59524
60893
  });
59525
60894
  }
59526
60895
  });
@@ -59614,6 +60983,21 @@ var npmInstall = async () => {
59614
60983
  doneText: `${brandColor("installed")} ${dim(`via \`${npm12} install\``)}`
59615
60984
  });
59616
60985
  };
60986
+ var resetPackageManager = async (ctx) => {
60987
+ const { npm: npm12 } = detectPackageManager();
60988
+ if (npm12 === "npm")
60989
+ return;
60990
+ const nodeModulesPath = import_path5.default.join(ctx.project.path, "node_modules");
60991
+ (0, import_fs5.rmSync)(nodeModulesPath, { recursive: true });
60992
+ const lockfilePath = import_path5.default.join(ctx.project.path, "package-lock.json");
60993
+ (0, import_fs5.rmSync)(lockfilePath);
60994
+ await runCommand(`${npm12} install`, {
60995
+ silent: true,
60996
+ cwd: ctx.project.path,
60997
+ startText: "Installing dependencies",
60998
+ doneText: `${brandColor("installed")} ${dim(`via \`${npm12} install\``)}`
60999
+ });
61000
+ };
59617
61001
  var installWrangler = async () => {
59618
61002
  const { npm: npm12 } = detectPackageManager();
59619
61003
  if ((0, import_fs5.existsSync)(import_path5.default.resolve("node_modules", "wrangler"))) {
@@ -59631,10 +61015,14 @@ var installWrangler = async () => {
59631
61015
  };
59632
61016
  var isLoggedIn = async () => {
59633
61017
  const { npx: npx6 } = detectPackageManager();
59634
- const output = await runCommand(`${npx6} wrangler whoami`, {
59635
- silent: true
59636
- });
59637
- return !/not authenticated/.test(output);
61018
+ try {
61019
+ const output = await runCommand(`${npx6} wrangler whoami`, {
61020
+ silent: true
61021
+ });
61022
+ return /You are logged in/.test(output);
61023
+ } catch (error) {
61024
+ return false;
61025
+ }
59638
61026
  };
59639
61027
  var wranglerLogin = async () => {
59640
61028
  const { npx: npx6 } = detectPackageManager();
@@ -59687,7 +61075,7 @@ async function getWorkerdCompatibilityDate() {
59687
61075
  }
59688
61076
 
59689
61077
  // src/helpers/poll.ts
59690
- var import_promises = require("node:dns/promises");
61078
+ var import_dns2 = __toESM(require_dns2());
59691
61079
  var import_undici = __toESM(require_undici());
59692
61080
  var TIMEOUT = 1e3 * 60 * 5;
59693
61081
  var POLL_INTERVAL = 1e3;
@@ -59696,14 +61084,28 @@ var poll = async (url) => {
59696
61084
  const domain = new URL(url).host;
59697
61085
  const s = spinner();
59698
61086
  s.start("Waiting for DNS to propagate");
61087
+ await sleep(10 * 1e3);
61088
+ await pollDns(domain, start, s);
61089
+ if (await pollHttp(url, start, s))
61090
+ return true;
61091
+ s.stop(
61092
+ `${brandColor(
61093
+ "timed out"
61094
+ )} while waiting for ${url} - try accessing it in a few minutes.`
61095
+ );
61096
+ return false;
61097
+ };
61098
+ var pollDns = async (domain, start, s) => {
59699
61099
  while (Date.now() - start < TIMEOUT) {
59700
61100
  s.update(`Waiting for DNS to propagate (${secondsSince(start)}s)`);
59701
- if (await dnsLookup(domain)) {
61101
+ if (await isDomainResolvable(domain)) {
59702
61102
  s.stop(`${brandColor("DNS propagation")} ${dim("complete")}.`);
59703
- break;
61103
+ return;
59704
61104
  }
59705
61105
  await sleep(POLL_INTERVAL);
59706
61106
  }
61107
+ };
61108
+ var pollHttp = async (url, start, s) => {
59707
61109
  s.start("Waiting for deployment to become available");
59708
61110
  while (Date.now() - start < TIMEOUT) {
59709
61111
  s.update(
@@ -59727,27 +61129,31 @@ var poll = async (url) => {
59727
61129
  }
59728
61130
  await sleep(POLL_INTERVAL);
59729
61131
  }
59730
- s.stop(
59731
- `${brandColor(
59732
- "timed out"
59733
- )} while waiting for ${url} - try accessing it in a few minutes.`
59734
- );
59735
- return false;
59736
61132
  };
59737
- async function dnsLookup(domain) {
61133
+ var isDomainResolvable = async (domain) => {
59738
61134
  try {
59739
- const resolver = new import_promises.Resolver({ timeout: TIMEOUT, tries: 1 });
59740
- resolver.setServers([
59741
- "1.1.1.1",
59742
- "1.0.0.1",
59743
- "2606:4700:4700::1111",
59744
- "2606:4700:4700::1001"
59745
- ]);
59746
- return (await resolver.resolve4(domain)).length > 0;
59747
- } catch (e) {
61135
+ const nameServers = await lookupSubdomainNameservers(domain);
61136
+ if (nameServers.length === 0)
61137
+ return false;
61138
+ const dns = new import_dns2.default({ nameServers });
61139
+ const res = await dns.resolve(domain, "A");
61140
+ return res.answers.length > 0;
61141
+ } catch (error) {
59748
61142
  return false;
59749
61143
  }
59750
- }
61144
+ };
61145
+ var lookupSubdomainNameservers = async (domain) => {
61146
+ const nameServers = await lookupDomainLevelNameservers(domain);
61147
+ const dns = new import_dns2.default({ nameServers });
61148
+ const res = await dns.resolve(domain, "NS");
61149
+ return res.authorities.filter((r2) => Boolean(r2.ns)).map((r2) => r2.ns);
61150
+ };
61151
+ var lookupDomainLevelNameservers = async (domain) => {
61152
+ const baseDomain = domain.split(".").slice(-2).join(".");
61153
+ const dns = new import_dns2.default({});
61154
+ const nameservers = await dns.resolve(baseDomain, "NS");
61155
+ return nameservers.answers.map((n) => n.ns);
61156
+ };
59751
61157
  async function sleep(ms) {
59752
61158
  return new Promise((res) => setTimeout(res, ms));
59753
61159
  }
@@ -59779,14 +61185,12 @@ var setupProjectDirectory = (args) => {
59779
61185
  };
59780
61186
  var offerToDeploy = async (ctx) => {
59781
61187
  startSection(`Deploy with Cloudflare`, `Step 3 of 3`);
59782
- ctx.args.deploy = await confirmInput({
61188
+ const label = `deploy via \`${npm} run ${ctx.framework?.config.deployCommand ?? "deploy"}\``;
61189
+ ctx.args.deploy = await processArgument(ctx.args, "deploy", {
61190
+ type: "confirm",
59783
61191
  question: "Do you want to deploy your application?",
59784
- renderSubmitted: (value) => `${brandColor(value ? `yes` : `no`)} ${dim(
59785
- `deploying via \`${npm} run ${ctx.framework?.config.deployCommand ?? "deploy"}\``
59786
- )}`,
59787
- defaultValue: ctx.args.deploy ?? (ctx.args.wranglerDefaults ? false : true),
59788
- // if --wrangler-defaults, default to false, otherwise default to true
59789
- acceptDefault: ctx.args.wranglerDefaults
61192
+ label,
61193
+ defaultValue: C3_DEFAULTS.deploy
59790
61194
  });
59791
61195
  if (!ctx.args.deploy)
59792
61196
  return;
@@ -59806,7 +61210,7 @@ var runDeploy = async (ctx) => {
59806
61210
  const result = await runCommand(deployCmd, {
59807
61211
  silent: true,
59808
61212
  cwd: ctx.project.path,
59809
- env: { CLOUDFLARE_ACCOUNT_ID: ctx.account.id },
61213
+ env: { CLOUDFLARE_ACCOUNT_ID: ctx.account.id, NODE_ENV: "production" },
59810
61214
  startText: `Deploying your application`,
59811
61215
  doneText: `${brandColor("deployed")} ${dim(`via \`${deployCmd}\``)}`
59812
61216
  });
@@ -59840,14 +61244,12 @@ var chooseAccount = async (ctx) => {
59840
61244
  label: name,
59841
61245
  value: id
59842
61246
  }));
59843
- accountId = await selectInput({
61247
+ accountId = await inputPrompt({
61248
+ type: "select",
59844
61249
  question: "Which account do you want to use?",
59845
61250
  options: accountOptions,
59846
- renderSubmitted: (option) => {
59847
- return `${brandColor("account")} ${dim(option.label)}`;
59848
- },
59849
- defaultValue: accountOptions[0].value,
59850
- acceptDefault: ctx.args.wranglerDefaults
61251
+ label: "account",
61252
+ defaultValue: accountOptions[0].value
59851
61253
  });
59852
61254
  }
59853
61255
  const accountName = Object.keys(accounts).find(
@@ -59857,6 +61259,7 @@ var chooseAccount = async (ctx) => {
59857
61259
  };
59858
61260
  var printSummary = async (ctx) => {
59859
61261
  const nextSteps = [
61262
+ [`Navigate to the new directory`, `cd ${ctx.project.name}`],
59860
61263
  [
59861
61264
  `Run the development server`,
59862
61265
  `${npm} run ${ctx.framework?.config.devCommand ?? "start"}`
@@ -59867,7 +61270,7 @@ var printSummary = async (ctx) => {
59867
61270
  ],
59868
61271
  [
59869
61272
  `Read the documentation`,
59870
- `https://developers.cloudflare.com/${ctx.framework ? "pages" : "workers"}`
61273
+ `https://developers.cloudflare.com/${ctx.framework ? ctx.framework.config.type === "workers" ? "workers" : "pages" : "workers"}`
59871
61274
  ],
59872
61275
  [`Stuck? Join us at`, `https://discord.gg/cloudflaredev`]
59873
61276
  ];
@@ -59904,6 +61307,7 @@ var printSummary = async (ctx) => {
59904
61307
  }
59905
61308
  }
59906
61309
  endSection("See you again soon!");
61310
+ process.exit(0);
59907
61311
  };
59908
61312
  var offerGit = async (ctx) => {
59909
61313
  const gitInstalled = await isGitInstalled();
@@ -59919,11 +61323,11 @@ var offerGit = async (ctx) => {
59919
61323
  const insideGitRepo = await isInsideGitRepo(ctx.project.path);
59920
61324
  if (insideGitRepo)
59921
61325
  return;
59922
- ctx.args.git ??= await confirmInput({
61326
+ ctx.args.git = await processArgument(ctx.args, "git", {
61327
+ type: "confirm",
59923
61328
  question: "Do you want to use git for version control?",
59924
- renderSubmitted: (value) => `${brandColor("git")} ${dim(value ? `yes` : `no`)}`,
59925
- defaultValue: true,
59926
- acceptDefault: ctx.args.wranglerDefaults
61329
+ label: "git",
61330
+ defaultValue: C3_DEFAULTS.git
59927
61331
  });
59928
61332
  if (ctx.args.git) {
59929
61333
  await printAsyncStatus({
@@ -59983,13 +61387,31 @@ async function initializeGit(cwd) {
59983
61387
  await runCommand(`git init`, { useSpinner: false, silent: true, cwd });
59984
61388
  }
59985
61389
  }
61390
+ async function getProductionBranch(cwd) {
61391
+ try {
61392
+ const productionBranch = await runCommand(
61393
+ // "git branch --show-current", // git@^2.22
61394
+ "git rev-parse --abbrev-ref HEAD",
61395
+ // git@^1.6.3
61396
+ {
61397
+ silent: true,
61398
+ cwd,
61399
+ useSpinner: false,
61400
+ captureOutput: true
61401
+ }
61402
+ );
61403
+ return productionBranch.trim();
61404
+ } catch (err) {
61405
+ }
61406
+ return "main";
61407
+ }
59986
61408
 
59987
61409
  // src/pages.ts
59988
61410
  var import_path8 = require("path");
59989
61411
  var import_process3 = require("process");
59990
61412
 
59991
61413
  // src/frameworks/angular/index.ts
59992
- var import_promises2 = require("node:fs/promises");
61414
+ var import_promises = require("node:fs/promises");
59993
61415
  var import_node_path = require("node:path");
59994
61416
 
59995
61417
  // src/helpers/files.ts
@@ -60012,6 +61434,9 @@ var readJSON = (path3) => {
60012
61434
  const contents = readFile(path3);
60013
61435
  return contents ? JSON.parse(contents) : contents;
60014
61436
  };
61437
+ var writeJSON = (path3, object, stringifySpace) => {
61438
+ writeFile2(path3, JSON.stringify(object, null, stringifySpace));
61439
+ };
60015
61440
  var probePaths = (paths, errorMsg = "Failed to find required file.") => {
60016
61441
  for (const path3 of paths) {
60017
61442
  if ((0, import_fs7.existsSync)(path3)) {
@@ -60024,6 +61449,35 @@ var probePaths = (paths, errorMsg = "Failed to find required file.") => {
60024
61449
  var usesTypescript = (projectRoot = ".") => {
60025
61450
  return (0, import_fs7.existsSync)(`${projectRoot}/tsconfig.json`);
60026
61451
  };
61452
+ var eslintRcExts = ["js", "cjs", "yaml", "yml", "json"];
61453
+ var usesEslint = (ctx) => {
61454
+ for (const ext of eslintRcExts) {
61455
+ const eslintRcFilename = `.eslintrc.${ext}`;
61456
+ if ((0, import_fs7.existsSync)(`${ctx.project.path}/${eslintRcFilename}`)) {
61457
+ return {
61458
+ used: true,
61459
+ configType: eslintRcFilename
61460
+ };
61461
+ }
61462
+ }
61463
+ if ((0, import_fs7.existsSync)(`${ctx.project.path}/eslint.config.js`)) {
61464
+ return {
61465
+ used: true,
61466
+ configType: "eslint.config.js"
61467
+ };
61468
+ }
61469
+ try {
61470
+ const pkgJson = readJSON(`${ctx.project.path}/package.json`);
61471
+ if (pkgJson.eslintConfig) {
61472
+ return {
61473
+ used: true,
61474
+ configType: "package.json"
61475
+ };
61476
+ }
61477
+ } catch {
61478
+ }
61479
+ return { used: false };
61480
+ };
60027
61481
  var compatDateFlag = () => {
60028
61482
  const date = /* @__PURE__ */ new Date();
60029
61483
  return `--compatibility-date=${date.toISOString().slice(0, 10)}`;
@@ -60067,7 +61521,7 @@ var angular_default = config;
60067
61521
  async function installCFWorker(ctx) {
60068
61522
  const s = spinner();
60069
61523
  s.start(`Adding Cloudflare Pages adapter code`);
60070
- await (0, import_promises2.cp)(
61524
+ await (0, import_promises.cp)(
60071
61525
  // eslint-disable-next-line no-restricted-globals
60072
61526
  (0, import_node_path.resolve)(__dirname, "./angular/templates"),
60073
61527
  (0, import_node_path.resolve)(ctx.project.path),
@@ -60109,7 +61563,7 @@ async function updateAppCode() {
60109
61563
  "providers: [provideHttpClient(withFetch()), provideClientHydration(), "
60110
61564
  );
60111
61565
  writeFile2((0, import_node_path.resolve)(appConfigPath), newAppConfig);
60112
- await (0, import_promises2.rm)((0, import_node_path.resolve)("server.ts"));
61566
+ await (0, import_promises.rm)((0, import_node_path.resolve)("server.ts"));
60113
61567
  s.stop(`${brandColor(`updated`)} ${dim(appConfigPath)}`);
60114
61568
  }
60115
61569
  function updateAngularJson(ctx) {
@@ -60191,25 +61645,19 @@ var docusaurus_default = config3;
60191
61645
  var { npm: npm4, dlx: dlx4 } = detectPackageManager();
60192
61646
  var generate4 = async (ctx) => {
60193
61647
  const defaultTemplate = "https://github.com/gatsbyjs/gatsby-starter-blog";
60194
- const useTemplate = await confirmInput({
61648
+ const useTemplate = await inputPrompt({
61649
+ type: "confirm",
60195
61650
  question: "Would you like to use a template?",
60196
- renderSubmitted: (value) => {
60197
- const status2 = value ? "yes" : "no";
60198
- return `${brandColor(`template`)} ${status2}`;
60199
- },
60200
- defaultValue: true,
60201
- acceptDefault: false
61651
+ label: "template",
61652
+ defaultValue: true
60202
61653
  });
60203
61654
  let templateUrl = "";
60204
61655
  if (useTemplate) {
60205
- templateUrl = await textInput({
61656
+ templateUrl = await inputPrompt({
61657
+ type: "text",
60206
61658
  question: `Please specify the url of the template you'd like to use`,
60207
- renderSubmitted: (value) => {
60208
- const result = `Using template \`${value}\``;
60209
- return `${brandColor("template")} ${dim(result)}`;
60210
- },
60211
- defaultValue: defaultTemplate,
60212
- acceptDefault: false
61659
+ label: "template",
61660
+ defaultValue: defaultTemplate
60213
61661
  });
60214
61662
  }
60215
61663
  const version2 = getFrameworkVersion(ctx);
@@ -60234,7 +61682,7 @@ var generate5 = async (ctx) => {
60234
61682
  const version2 = getFrameworkVersion(ctx);
60235
61683
  await runFrameworkGenerator(
60236
61684
  ctx,
60237
- `${dlx5} create-hono@${version2} ${ctx.project.name} --template cloudflare-pages`
61685
+ `${dlx5} create-hono@${version2} ${ctx.project.name} --template cloudflare-workers`
60238
61686
  );
60239
61687
  logRaw("");
60240
61688
  };
@@ -60243,7 +61691,8 @@ var config5 = {
60243
61691
  displayName: "Hono",
60244
61692
  packageScripts: {},
60245
61693
  deployCommand: "deploy",
60246
- devCommand: "dev"
61694
+ devCommand: "dev",
61695
+ type: "workers"
60247
61696
  };
60248
61697
  var hono_default = config5;
60249
61698
 
@@ -60335,20 +61784,56 @@ var configure3 = async (ctx) => {
60335
61784
  );
60336
61785
  writeFile2(handlerPath, handlerFile);
60337
61786
  updateStatus("Created an example API route handler");
61787
+ const installEslintPlugin = await shouldInstallNextOnPagesEslintPlugin(ctx);
61788
+ if (installEslintPlugin) {
61789
+ await writeEslintrc(ctx);
61790
+ }
60338
61791
  process.chdir(projectName);
60339
- const packages = ["@cloudflare/next-on-pages@1", "vercel"];
61792
+ const packages = [
61793
+ "@cloudflare/next-on-pages@1",
61794
+ "vercel",
61795
+ ...installEslintPlugin ? ["eslint-plugin-next-on-pages"] : []
61796
+ ];
60340
61797
  await installPackages(packages, {
60341
61798
  dev: true,
60342
61799
  startText: "Adding the Cloudflare Pages adapter",
60343
61800
  doneText: `${brandColor(`installed`)} ${dim(packages.join(", "))}`
60344
61801
  });
60345
61802
  };
61803
+ var shouldInstallNextOnPagesEslintPlugin = async (ctx) => {
61804
+ const eslintUsage = usesEslint(ctx);
61805
+ if (!eslintUsage.used)
61806
+ return false;
61807
+ if (eslintUsage.configType !== ".eslintrc.json") {
61808
+ warn(
61809
+ `Expected .eslintrc.json from Next.js scaffolding but found ${eslintUsage.configType} instead`
61810
+ );
61811
+ return false;
61812
+ }
61813
+ return await processArgument(ctx.args, "eslint-plugin", {
61814
+ type: "confirm",
61815
+ question: "Do you want to use the next-on-pages eslint-plugin?",
61816
+ label: "eslint-plugin",
61817
+ defaultValue: true
61818
+ });
61819
+ };
61820
+ var writeEslintrc = async (ctx) => {
61821
+ const eslintConfig = readJSON(`${ctx.project.name}/.eslintrc.json`);
61822
+ eslintConfig.plugins ??= [];
61823
+ eslintConfig.plugins.push("eslint-plugin-next-on-pages");
61824
+ if (typeof eslintConfig.extends === "string") {
61825
+ eslintConfig.extends = [eslintConfig.extends];
61826
+ }
61827
+ eslintConfig.extends ??= [];
61828
+ eslintConfig.extends.push("plugin:eslint-plugin-next-on-pages/recommended");
61829
+ writeJSON(`${ctx.project.name}/.eslintrc.json`, eslintConfig, 2);
61830
+ };
60346
61831
  var config6 = {
60347
61832
  generate: generate6,
60348
61833
  configure: configure3,
60349
61834
  displayName: "Next",
60350
61835
  packageScripts: {
60351
- "pages:build": `${npx3} @cloudflare/next-on-pages@1`,
61836
+ "pages:build": `${dlx6} @cloudflare/next-on-pages@1`,
60352
61837
  "pages:deploy": `${npm5} run pages:build && wrangler pages deploy .vercel/output/static`,
60353
61838
  "pages:watch": `${npx3} @cloudflare/next-on-pages@1 --watch`,
60354
61839
  "pages:dev": `${npx3} wrangler pages dev .vercel/output/static --compatibility-flag=nodejs_compat`
@@ -60361,7 +61846,7 @@ var config6 = {
60361
61846
  "--src-dir",
60362
61847
  "--app",
60363
61848
  "--import-alias",
60364
- '"@/*"'
61849
+ "@/*"
60365
61850
  ],
60366
61851
  compatibilityFlags: ["nodejs_compat"]
60367
61852
  };
@@ -60379,6 +61864,7 @@ var generate7 = async (ctx) => {
60379
61864
  };
60380
61865
  var configure4 = async (ctx) => {
60381
61866
  process.chdir(ctx.project.path);
61867
+ writeFile2("./.node-version", "17");
60382
61868
  await npmInstall();
60383
61869
  };
60384
61870
  var config7 = {
@@ -60386,8 +61872,9 @@ var config7 = {
60386
61872
  configure: configure4,
60387
61873
  displayName: "Nuxt",
60388
61874
  packageScripts: {
61875
+ build: (cmd) => `NITRO_PRESET=cloudflare-pages ${cmd}`,
60389
61876
  "pages:dev": `wrangler pages dev ${compatDateFlag()} --proxy 3000 -- npm run dev`,
60390
- "pages:deploy": `NODE_VERSION=17 npm run generate && wrangler pages deploy ./dist`
61877
+ "pages:deploy": "npm run build && wrangler pages deploy ./dist"
60391
61878
  }
60392
61879
  };
60393
61880
  var nuxt_default = config7;
@@ -60429,8 +61916,12 @@ var generate9 = async (ctx) => {
60429
61916
  );
60430
61917
  logRaw("");
60431
61918
  };
61919
+ var configure6 = async (ctx) => {
61920
+ await resetPackageManager(ctx);
61921
+ };
60432
61922
  var config9 = {
60433
61923
  generate: generate9,
61924
+ configure: configure6,
60434
61925
  displayName: "React",
60435
61926
  packageScripts: {
60436
61927
  "pages:dev": `wrangler pages dev ${compatDateFlag()} --port 3000 -- ${npm7} start`,
@@ -60483,7 +61974,7 @@ var generate11 = async (ctx) => {
60483
61974
  await runFrameworkGenerator(ctx, `${dlx11} create-solid@${version2}`);
60484
61975
  logRaw("");
60485
61976
  };
60486
- var configure6 = async () => {
61977
+ var configure7 = async () => {
60487
61978
  const pkg = "solid-start-cloudflare-pages";
60488
61979
  await installPackages([pkg], {
60489
61980
  dev: true,
@@ -60498,11 +61989,11 @@ var configure6 = async () => {
60498
61989
  };
60499
61990
  var config11 = {
60500
61991
  generate: generate11,
60501
- configure: configure6,
61992
+ configure: configure7,
60502
61993
  displayName: "Solid",
60503
61994
  packageScripts: {
60504
61995
  "pages:dev": `wrangler pages dev ${compatDateFlag()} --proxy 3000 -- ${npm9} run dev`,
60505
- "pages:deploy": `${npm9} run build build && wrangler pages deploy ./dist/public`
61996
+ "pages:deploy": `${npm9} run build && wrangler pages deploy ./dist/public`
60506
61997
  }
60507
61998
  };
60508
61999
  var solid_default = config11;
@@ -60563,7 +62054,7 @@ var generate12 = async (ctx) => {
60563
62054
  );
60564
62055
  logRaw("");
60565
62056
  };
60566
- var configure7 = async (ctx) => {
62057
+ var configure8 = async (ctx) => {
60567
62058
  process.chdir(ctx.project.path);
60568
62059
  await npmInstall();
60569
62060
  const pkg = `@sveltejs/adapter-cloudflare`;
@@ -60598,7 +62089,7 @@ var configure7 = async (ctx) => {
60598
62089
  };
60599
62090
  var config12 = {
60600
62091
  generate: generate12,
60601
- configure: configure7,
62092
+ configure: configure8,
60602
62093
  displayName: "Svelte",
60603
62094
  packageScripts: {
60604
62095
  "pages:dev": `wrangler pages dev ${compatDateFlag()} --proxy 5173 -- ${npm10} run dev`,
@@ -60613,10 +62104,10 @@ var versionMap_default = {
60613
62104
  astro: "3.1.5",
60614
62105
  docusaurus: "2.4.1",
60615
62106
  gatsby: "5.10.0",
60616
- hono: "0.2.0",
62107
+ hono: "0.2.6",
60617
62108
  next: "13.4.2",
60618
62109
  nuxt: "3.4.2",
60619
- qwik: "1.1.x",
62110
+ qwik: "1.2.7",
60620
62111
  react: "5.0.1",
60621
62112
  remix: "1.16.0",
60622
62113
  solid: "0.2.26",
@@ -60696,11 +62187,11 @@ var runPagesGenerator = async (args) => {
60696
62187
  },
60697
62188
  args
60698
62189
  };
60699
- const { generate: generate14, configure: configure8 } = FrameworkMap[framework];
62190
+ const { generate: generate14, configure: configure9 } = FrameworkMap[framework];
60700
62191
  await generate14({ ...ctx });
60701
62192
  startSection("Configuring your application for Cloudflare", "Step 2 of 3");
60702
- if (configure8) {
60703
- await configure8({ ...ctx });
62193
+ if (configure9) {
62194
+ await configure9({ ...ctx });
60704
62195
  }
60705
62196
  await updatePackageScripts(ctx);
60706
62197
  await offerGit(ctx);
@@ -60718,14 +62209,12 @@ var getFrameworkSelection = async (args) => {
60718
62209
  value: key
60719
62210
  })
60720
62211
  );
60721
- const framework = await selectInput({
62212
+ const framework = await processArgument(args, "framework", {
62213
+ type: "select",
62214
+ label: "framework",
60722
62215
  question: "Which development framework do you want to use?",
60723
62216
  options: frameworkOptions,
60724
- renderSubmitted: (option) => {
60725
- return `${brandColor("framework")} ${dim(option.label)}`;
60726
- },
60727
- defaultValue: args.framework ?? "svelte",
60728
- acceptDefault: Boolean(args.framework)
62217
+ defaultValue: C3_DEFAULTS.framework
60729
62218
  });
60730
62219
  framework || crash("A framework must be selected to continue.");
60731
62220
  if (!supportedFramework(framework)) {
@@ -60739,11 +62228,29 @@ var updatePackageScripts = async (ctx) => {
60739
62228
  const { packageScripts } = ctx.framework?.config ?? {};
60740
62229
  if (packageScripts) {
60741
62230
  const s = spinner();
60742
- s.start(`Adding command scripts`, `for development and deployment`);
62231
+ const updatingScripts = Object.entries(packageScripts).filter(
62232
+ ([_3, cmdOrUpdater]) => typeof cmdOrUpdater === "function"
62233
+ ).length > 0;
62234
+ s.start(
62235
+ `${updatingScripts ? "Updating" : "Adding"} command scripts`,
62236
+ "for development and deployment"
62237
+ );
60743
62238
  const pkgJsonPath = (0, import_path8.resolve)("package.json");
60744
62239
  const pkgConfig = readJSON(pkgJsonPath);
60745
- Object.entries(packageScripts).forEach(([target, command2]) => {
60746
- pkgConfig.scripts[target] = command2;
62240
+ Object.entries(packageScripts).forEach(([target, cmdOrUpdater]) => {
62241
+ if (typeof cmdOrUpdater === "string") {
62242
+ const command2 = cmdOrUpdater;
62243
+ pkgConfig.scripts[target] = command2;
62244
+ } else {
62245
+ const existingCommand = pkgConfig.scripts[target];
62246
+ if (!existingCommand) {
62247
+ throw new Error(
62248
+ `Could not find ${target} script to update during ${ctx.framework} setup`
62249
+ );
62250
+ }
62251
+ const updater = cmdOrUpdater;
62252
+ pkgConfig.scripts[target] = updater(existingCommand);
62253
+ }
60747
62254
  });
60748
62255
  writeFile2(pkgJsonPath, JSON.stringify(pkgConfig, null, 2));
60749
62256
  s.stop(`${brandColor("added")} ${dim("commands to `package.json`")}`);
@@ -60752,6 +62259,8 @@ var updatePackageScripts = async (ctx) => {
60752
62259
  var createProject = async (ctx) => {
60753
62260
  if (ctx.args.deploy === false)
60754
62261
  return;
62262
+ if (ctx.framework?.config.type === "workers")
62263
+ return;
60755
62264
  if (!ctx.account?.id) {
60756
62265
  crash("Failed to read Cloudflare account.");
60757
62266
  return;
@@ -60759,25 +62268,28 @@ var createProject = async (ctx) => {
60759
62268
  const CLOUDFLARE_ACCOUNT_ID = ctx.account.id;
60760
62269
  const compatFlags = ctx.framework?.config.compatibilityFlags?.join(" ");
60761
62270
  const compatFlagsArg = compatFlags ? `--compatibility-flags ${compatFlags}` : "";
60762
- const cmd = `${npx5} wrangler pages project create ${ctx.project.name} --production-branch main ${compatFlagsArg}`;
62271
+ const productionBranch = await getProductionBranch(ctx.project.path);
62272
+ const cmd = `${npx5} wrangler pages project create ${ctx.project.name} --production-branch ${productionBranch} ${compatFlagsArg}`;
60763
62273
  try {
60764
62274
  await retry(
60765
62275
  CREATE_PROJECT_RETRIES,
60766
62276
  async () => runCommand(cmd, {
60767
- silent: true,
62277
+ // Make this command more verbose in test mode to aid
62278
+ // troubleshooting API errors
62279
+ silent: process.env.VITEST == void 0,
60768
62280
  cwd: ctx.project.path,
60769
62281
  env: { CLOUDFLARE_ACCOUNT_ID },
60770
62282
  startText: "Creating Pages project",
60771
- doneText: `${brandColor("created")} ${dim(`via \`${cmd}\``)}`
62283
+ doneText: `${brandColor("created")} ${dim(`via \`${cmd.trim()}\``)}`
60772
62284
  })
60773
62285
  );
60774
62286
  } catch (error) {
60775
- crash("Failed to create pages application. See output above.");
62287
+ crash("Failed to create pages project. See output above.");
60776
62288
  }
60777
62289
  };
60778
62290
 
60779
62291
  // src/workers.ts
60780
- var import_promises3 = require("fs/promises");
62292
+ var import_promises2 = require("fs/promises");
60781
62293
  var import_os = require("os");
60782
62294
  var import_path9 = require("path");
60783
62295
  var import_process4 = require("process");
@@ -60802,14 +62314,12 @@ var runWorkersGenerator = async (args) => {
60802
62314
  await printSummary(ctx);
60803
62315
  };
60804
62316
  async function getTemplate(ctx) {
60805
- if (ctx.args.ts === void 0) {
60806
- ctx.args.ts = await confirmInput({
60807
- question: "Do you want to use TypeScript?",
60808
- renderSubmitted: (value) => `${brandColor("typescript")} ${dim(`${value ? "yes" : "no"}`)}`,
60809
- defaultValue: true,
60810
- acceptDefault: ctx.args.wranglerDefaults
60811
- });
60812
- }
62317
+ ctx.args.ts = await processArgument(ctx.args, "ts", {
62318
+ type: "confirm",
62319
+ question: "Do you want to use TypeScript?",
62320
+ label: "typescript",
62321
+ defaultValue: C3_DEFAULTS.ts
62322
+ });
60813
62323
  const preexisting = ctx.args.type === "pre-existing";
60814
62324
  const template = preexisting ? "hello-world" : ctx.args.type;
60815
62325
  const path3 = (0, import_path9.resolve)(
@@ -60826,21 +62336,25 @@ async function copyFiles(ctx) {
60826
62336
  const { template, path: srcdir } = await getTemplate(ctx);
60827
62337
  const destdir = ctx.project.path;
60828
62338
  updateStatus(`Copying files from "${template}" template`);
60829
- await (0, import_promises3.cp)(srcdir, destdir, { recursive: true });
62339
+ await (0, import_promises2.cp)(srcdir, destdir, { recursive: true });
60830
62340
  }
60831
62341
  async function copyExistingWorkerFiles(ctx) {
60832
62342
  const { preexisting } = await getTemplate(ctx);
60833
62343
  if (preexisting) {
60834
62344
  await chooseAccount(ctx);
60835
62345
  if (ctx.args.existingScript === void 0) {
60836
- ctx.args.existingScript = await textInput({
60837
- question: "Please specify the name of the existing worker in this account?",
60838
- renderSubmitted: (value) => `${brandColor("worker")} ${dim(`"${value}"`)}`,
60839
- defaultValue: ctx.project.name,
60840
- acceptDefault: ctx.args.wranglerDefaults
60841
- });
62346
+ ctx.args.existingScript = await processArgument(
62347
+ ctx.args,
62348
+ "existingScript",
62349
+ {
62350
+ type: "text",
62351
+ question: "Please specify the name of the existing worker in this account?",
62352
+ label: "worker",
62353
+ defaultValue: ctx.project.name
62354
+ }
62355
+ );
60842
62356
  }
60843
- const tempdir = await (0, import_promises3.mkdtemp)(
62357
+ const tempdir = await (0, import_promises2.mkdtemp)(
60844
62358
  (0, import_path9.join)((0, import_os.tmpdir)(), "c3-wrangler-init--from-dash-")
60845
62359
  );
60846
62360
  await runCommand(
@@ -60856,15 +62370,15 @@ async function copyExistingWorkerFiles(ctx) {
60856
62370
  )}`
60857
62371
  }
60858
62372
  );
60859
- for (const filename of await (0, import_promises3.readdir)((0, import_path9.join)(ctx.project.path, "src"))) {
60860
- await (0, import_promises3.rm)((0, import_path9.join)(ctx.project.path, "src", filename));
62373
+ for (const filename of await (0, import_promises2.readdir)((0, import_path9.join)(ctx.project.path, "src"))) {
62374
+ await (0, import_promises2.rm)((0, import_path9.join)(ctx.project.path, "src", filename));
60861
62375
  }
60862
- await (0, import_promises3.cp)(
62376
+ await (0, import_promises2.cp)(
60863
62377
  (0, import_path9.join)(tempdir, ctx.args.existingScript, "src"),
60864
62378
  (0, import_path9.join)(ctx.project.path, "src"),
60865
62379
  { recursive: true }
60866
62380
  );
60867
- await (0, import_promises3.cp)(
62381
+ await (0, import_promises2.cp)(
60868
62382
  (0, import_path9.join)(tempdir, ctx.args.existingScript, "wrangler.toml"),
60869
62383
  (0, import_path9.join)(ctx.project.path, "wrangler.toml")
60870
62384
  );
@@ -60876,8 +62390,8 @@ async function updateFiles(ctx) {
60876
62390
  wranglertoml: (0, import_path9.resolve)(ctx.project.path, "wrangler.toml")
60877
62391
  };
60878
62392
  const contents = {
60879
- packagejson: JSON.parse(await (0, import_promises3.readFile)(paths.packagejson, "utf-8")),
60880
- wranglertoml: await (0, import_promises3.readFile)(paths.wranglertoml, "utf-8")
62393
+ packagejson: JSON.parse(await (0, import_promises2.readFile)(paths.packagejson, "utf-8")),
62394
+ wranglertoml: await (0, import_promises2.readFile)(paths.wranglertoml, "utf-8")
60881
62395
  };
60882
62396
  if (contents.packagejson.name === "<TBD>") {
60883
62397
  contents.packagejson.name = ctx.project.name;
@@ -60886,27 +62400,63 @@ async function updateFiles(ctx) {
60886
62400
  /^compatibility_date\s*=\s*"<TBD>"/m,
60887
62401
  `compatibility_date = "${await getWorkerdCompatibilityDate()}"`
60888
62402
  );
60889
- await (0, import_promises3.writeFile)(
62403
+ await (0, import_promises2.writeFile)(
60890
62404
  paths.packagejson,
60891
62405
  JSON.stringify(contents.packagejson, null, 2)
60892
62406
  );
60893
- await (0, import_promises3.writeFile)(paths.wranglertoml, contents.wranglertoml);
62407
+ await (0, import_promises2.writeFile)(paths.wranglertoml, contents.wranglertoml);
60894
62408
  }
60895
62409
 
60896
62410
  // src/cli.ts
62411
+ var C3_DEFAULTS = {
62412
+ projectName: new import_haikunator.default().haikunate({ tokenHex: true }),
62413
+ type: "hello-world",
62414
+ framework: "angular",
62415
+ deploy: true,
62416
+ git: true,
62417
+ open: true,
62418
+ ts: true
62419
+ };
62420
+ var WRANGLER_DEFAULTS = {
62421
+ ...C3_DEFAULTS,
62422
+ deploy: false
62423
+ };
60897
62424
  var main = async (argv) => {
60898
62425
  const args = await parseArgs(argv);
60899
62426
  printBanner();
62427
+ const projectName = await processArgument(args, "projectName", {
62428
+ type: "text",
62429
+ question: `In which directory do you want to create your application?`,
62430
+ helpText: "also used as application name",
62431
+ defaultValue: C3_DEFAULTS.projectName,
62432
+ label: "dir",
62433
+ validate: (value) => validateProjectDirectory(String(value) || C3_DEFAULTS.projectName),
62434
+ format: (val) => `./${val}`
62435
+ });
62436
+ if (!args.type) {
62437
+ if (args.framework) {
62438
+ args.type = "webFramework";
62439
+ } else if (args.existingScript) {
62440
+ args.type = "pre-existing";
62441
+ }
62442
+ }
62443
+ const templateOptions = Object.entries(templateMap).filter(([_3, { hidden: hidden2 }]) => !hidden2).map(([value, { label }]) => ({ value, label }));
62444
+ const type = await processArgument(args, "type", {
62445
+ type: "select",
62446
+ question: "What type of application do you want to create?",
62447
+ label: "type",
62448
+ options: templateOptions,
62449
+ defaultValue: C3_DEFAULTS.type
62450
+ });
62451
+ if (!type || !Object.keys(templateMap).includes(type)) {
62452
+ return crash("An application type must be specified to continue.");
62453
+ }
60900
62454
  const validatedArgs = {
60901
62455
  ...args,
60902
- projectName: await validateName(args.projectName, {
60903
- acceptDefault: args.wranglerDefaults
60904
- }),
60905
- type: await validateType(args.type, {
60906
- acceptDefault: args.wranglerDefaults
60907
- })
62456
+ type,
62457
+ projectName
60908
62458
  };
60909
- const { handler } = templateMap[validatedArgs.type];
62459
+ const { handler } = templateMap[type];
60910
62460
  await handler(validatedArgs);
60911
62461
  };
60912
62462
  var printBanner = () => {
@@ -60923,42 +62473,17 @@ var parseArgs = async (argv) => {
60923
62473
  }).option("existing-script", {
60924
62474
  type: "string",
60925
62475
  hidden: templateMap["pre-existing"].hidden
62476
+ }).option("accept-defaults", {
62477
+ alias: "y",
62478
+ type: "boolean"
60926
62479
  }).option("wrangler-defaults", { type: "boolean", hidden: true }).version(version).help().argv;
60927
62480
  return {
62481
+ ...args.wranglerDefaults && WRANGLER_DEFAULTS,
62482
+ ...args.acceptDefaults && C3_DEFAULTS,
60928
62483
  projectName: args._[0],
60929
62484
  ...args
60930
62485
  };
60931
62486
  };
60932
- var validateName = async (name, { acceptDefault = false } = {}) => {
60933
- const defaultValue = name ?? new import_haikunator.default().haikunate({ tokenHex: true });
60934
- return textInput({
60935
- question: `In which directory do you want to create your application?`,
60936
- helpText: "also used as application name",
60937
- renderSubmitted: (value) => {
60938
- return `${brandColor("dir")} ${dim(value)}`;
60939
- },
60940
- defaultValue,
60941
- acceptDefault,
60942
- validate: (value) => validateProjectDirectory(value || defaultValue),
60943
- format: (val) => `./${val}`
60944
- });
60945
- };
60946
- var validateType = async (type, { acceptDefault = false } = {}) => {
60947
- const templateOptions = Object.entries(templateMap).filter(([_3, { hidden: hidden2 }]) => !hidden2).map(([value, { label }]) => ({ value, label }));
60948
- type = await selectInput({
60949
- question: "What type of application do you want to create?",
60950
- options: templateOptions,
60951
- renderSubmitted: (option) => {
60952
- return `${brandColor("type")} ${dim(option.label)}`;
60953
- },
60954
- defaultValue: type ?? "hello-world",
60955
- acceptDefault
60956
- });
60957
- if (!type || !Object.keys(templateMap).includes(type)) {
60958
- crash("An application type must be specified to continue.");
60959
- }
60960
- return type;
60961
- };
60962
62487
  var templateMap = {
60963
62488
  webFramework: {
60964
62489
  label: "Website or web app",
@@ -60996,7 +62521,9 @@ var templateMap = {
60996
62521
  main(process.argv).catch((e) => crash(e));
60997
62522
  // Annotate the CommonJS export names for ESM import in node:
60998
62523
  0 && (module.exports = {
60999
- main
62524
+ C3_DEFAULTS,
62525
+ main,
62526
+ parseArgs
61000
62527
  });
61001
62528
  /*! Bundled license information:
61002
62529