create-nextly-app 0.0.2-alpha.60 → 0.0.2-alpha.64
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/{chunk-SEU6FVET.mjs → chunk-I2U7KBH6.mjs} +456 -141
- package/dist/chunk-I2U7KBH6.mjs.map +1 -0
- package/dist/cli.cjs +457 -140
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +4 -2
- package/dist/cli.mjs.map +1 -1
- package/dist/index.cjs +454 -139
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +6 -4
- package/templates/base/.env.example +7 -1
- package/templates/base/src/app/layout.tsx +2 -3
- package/templates/base/src/lib/site-url.ts +55 -0
- package/templates/blank/src/app/(frontend)/page.tsx +2 -2
- package/templates/blank/src/app/layout.tsx +2 -3
- package/templates/plugin/eslint.config.mjs +12 -1
- package/dist/chunk-SEU6FVET.mjs.map +0 -1
package/dist/cli.cjs
CHANGED
|
@@ -6259,7 +6259,7 @@ var require_package = __commonJS({
|
|
|
6259
6259
|
"package.json"(exports$1, module) {
|
|
6260
6260
|
module.exports = {
|
|
6261
6261
|
name: "create-nextly-app",
|
|
6262
|
-
version: "0.0.2-alpha.
|
|
6262
|
+
version: "0.0.2-alpha.64",
|
|
6263
6263
|
description: "CLI to scaffold Nextly in your Next.js project",
|
|
6264
6264
|
license: "MIT",
|
|
6265
6265
|
type: "module",
|
|
@@ -6301,11 +6301,13 @@ var require_package = __commonJS({
|
|
|
6301
6301
|
},
|
|
6302
6302
|
devDependencies: {
|
|
6303
6303
|
"@nextlyhq/eslint-config": "workspace:*",
|
|
6304
|
+
"@nextlyhq/eslint-plugin": "workspace:*",
|
|
6304
6305
|
"@nextlyhq/telemetry": "workspace:*",
|
|
6305
6306
|
"@nextlyhq/tsconfig": "workspace:*",
|
|
6306
6307
|
"@types/fs-extra": "^11.0.4",
|
|
6307
6308
|
"@types/node": "^20.19.17",
|
|
6308
6309
|
"@types/tar": "^6.1.13",
|
|
6310
|
+
"@typescript-eslint/parser": "^8.59.0",
|
|
6309
6311
|
"@vitest/coverage-v8": "^4.1.0",
|
|
6310
6312
|
"@vitest/ui": "^4.1.0",
|
|
6311
6313
|
eslint: "^9.39.1",
|
|
@@ -9448,12 +9450,31 @@ var require_data = __commonJS2({
|
|
|
9448
9450
|
}
|
|
9449
9451
|
});
|
|
9450
9452
|
var require_utils = __commonJS2({
|
|
9451
|
-
"../../node_modules/.pnpm/fast-uri@3.1.
|
|
9453
|
+
"../../node_modules/.pnpm/fast-uri@3.1.7/node_modules/fast-uri/lib/utils.js"(exports$1, module) {
|
|
9452
9454
|
var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
|
|
9453
9455
|
var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
|
|
9456
|
+
var isPort = RegExp.prototype.test.bind(/^\d*$/u);
|
|
9454
9457
|
var isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
|
|
9455
9458
|
var isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
|
|
9456
|
-
var isPathCharacter = RegExp.prototype.test.bind(/^[
|
|
9459
|
+
var isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u);
|
|
9460
|
+
var isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u);
|
|
9461
|
+
var isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u);
|
|
9462
|
+
var BYTE_HEX = new Array(256);
|
|
9463
|
+
{
|
|
9464
|
+
const HEX_DIGITS = "0123456789ABCDEF";
|
|
9465
|
+
for (let i2 = 0; i2 < 256; i2++) {
|
|
9466
|
+
BYTE_HEX[i2] = "%" + HEX_DIGITS[i2 >> 4] + HEX_DIGITS[i2 & 15];
|
|
9467
|
+
}
|
|
9468
|
+
}
|
|
9469
|
+
function percentEncodeNonAscii(cp) {
|
|
9470
|
+
if (cp < 2048) {
|
|
9471
|
+
return BYTE_HEX[192 | cp >> 6] + BYTE_HEX[128 | cp & 63];
|
|
9472
|
+
}
|
|
9473
|
+
if (cp < 65536) {
|
|
9474
|
+
return BYTE_HEX[224 | cp >> 12] + BYTE_HEX[128 | cp >> 6 & 63] + BYTE_HEX[128 | cp & 63];
|
|
9475
|
+
}
|
|
9476
|
+
return BYTE_HEX[240 | cp >> 18] + BYTE_HEX[128 | cp >> 12 & 63] + BYTE_HEX[128 | cp >> 6 & 63] + BYTE_HEX[128 | cp & 63];
|
|
9477
|
+
}
|
|
9457
9478
|
function stringArrayToHexStripped(input) {
|
|
9458
9479
|
let acc = "";
|
|
9459
9480
|
let code = 0;
|
|
@@ -9478,91 +9499,105 @@ var require_utils = __commonJS2({
|
|
|
9478
9499
|
}
|
|
9479
9500
|
return acc;
|
|
9480
9501
|
}
|
|
9502
|
+
var isHextet = RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/);
|
|
9503
|
+
var isIPvFuture = RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/);
|
|
9504
|
+
var isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/);
|
|
9481
9505
|
var nonSimpleDomain = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);
|
|
9482
|
-
function
|
|
9483
|
-
|
|
9484
|
-
|
|
9485
|
-
|
|
9486
|
-
|
|
9487
|
-
|
|
9488
|
-
|
|
9489
|
-
if (hex !== "") {
|
|
9490
|
-
address.push(hex);
|
|
9491
|
-
} else {
|
|
9492
|
-
output.error = true;
|
|
9493
|
-
return false;
|
|
9506
|
+
function isZoneIdentifier(zone) {
|
|
9507
|
+
if (zone.length === 0) return false;
|
|
9508
|
+
for (let i2 = 0; i2 < zone.length; i2++) {
|
|
9509
|
+
if (isZoneCharacter(zone[i2])) continue;
|
|
9510
|
+
if (zone[i2] === "%" && i2 + 2 < zone.length && isHexPair(zone.slice(i2 + 1, i2 + 3))) {
|
|
9511
|
+
i2 += 2;
|
|
9512
|
+
continue;
|
|
9494
9513
|
}
|
|
9495
|
-
|
|
9514
|
+
return false;
|
|
9496
9515
|
}
|
|
9497
9516
|
return true;
|
|
9498
9517
|
}
|
|
9499
|
-
function
|
|
9500
|
-
let
|
|
9501
|
-
|
|
9502
|
-
|
|
9503
|
-
|
|
9504
|
-
let
|
|
9505
|
-
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
}
|
|
9512
|
-
if (cursor === ":") {
|
|
9513
|
-
if (endipv6Encountered === true) {
|
|
9514
|
-
endIpv6 = true;
|
|
9515
|
-
}
|
|
9516
|
-
if (!consume(buffer, address, output)) {
|
|
9517
|
-
break;
|
|
9518
|
-
}
|
|
9519
|
-
if (++tokenCount > 7) {
|
|
9520
|
-
output.error = true;
|
|
9521
|
-
break;
|
|
9518
|
+
function compressIPv6ZeroRun(hextets) {
|
|
9519
|
+
let bestStart = -1;
|
|
9520
|
+
let bestLength = 0;
|
|
9521
|
+
let runStart = -1;
|
|
9522
|
+
let runLength = 0;
|
|
9523
|
+
for (let i2 = 0; i2 < hextets.length; i2++) {
|
|
9524
|
+
if (hextets[i2] === "0") {
|
|
9525
|
+
if (runStart === -1) runStart = i2;
|
|
9526
|
+
runLength++;
|
|
9527
|
+
if (runLength > bestLength) {
|
|
9528
|
+
bestLength = runLength;
|
|
9529
|
+
bestStart = runStart;
|
|
9522
9530
|
}
|
|
9523
|
-
if (i2 > 0 && input[i2 - 1] === ":") {
|
|
9524
|
-
endipv6Encountered = true;
|
|
9525
|
-
}
|
|
9526
|
-
address.push(":");
|
|
9527
|
-
continue;
|
|
9528
|
-
} else if (cursor === "%") {
|
|
9529
|
-
if (!consume(buffer, address, output)) {
|
|
9530
|
-
break;
|
|
9531
|
-
}
|
|
9532
|
-
consume = consumeIsZone;
|
|
9533
9531
|
} else {
|
|
9534
|
-
|
|
9532
|
+
runStart = -1;
|
|
9533
|
+
runLength = 0;
|
|
9534
|
+
}
|
|
9535
|
+
}
|
|
9536
|
+
if (bestLength < 2) return hextets.join(":");
|
|
9537
|
+
const head = hextets.slice(0, bestStart).join(":");
|
|
9538
|
+
const tail = hextets.slice(bestStart + bestLength).join(":");
|
|
9539
|
+
return head + "::" + tail;
|
|
9540
|
+
}
|
|
9541
|
+
function normalizeIPv6Address(input) {
|
|
9542
|
+
const compression = input.indexOf("::");
|
|
9543
|
+
if (compression !== -1 && input.indexOf("::", compression + 1) !== -1) return void 0;
|
|
9544
|
+
const left = compression === -1 ? input.split(":") : input.slice(0, compression).split(":");
|
|
9545
|
+
const right = compression === -1 ? [] : input.slice(compression + 2).split(":");
|
|
9546
|
+
if (compression !== -1) {
|
|
9547
|
+
if (left.length === 1 && left[0] === "") left.length = 0;
|
|
9548
|
+
if (right.length === 1 && right[0] === "") right.length = 0;
|
|
9549
|
+
}
|
|
9550
|
+
const parts = left.concat(right);
|
|
9551
|
+
let hextetCount = 0;
|
|
9552
|
+
for (let i2 = 0; i2 < parts.length; i2++) {
|
|
9553
|
+
const part = parts[i2];
|
|
9554
|
+
if (part === "") return void 0;
|
|
9555
|
+
if (part.indexOf(".") !== -1) {
|
|
9556
|
+
if (i2 !== parts.length - 1 || compression !== -1 && right.length === 0 || !isIPv4(part)) return void 0;
|
|
9557
|
+
hextetCount += 2;
|
|
9535
9558
|
continue;
|
|
9536
9559
|
}
|
|
9560
|
+
if (!isHextet(part)) return void 0;
|
|
9561
|
+
parts[i2] = parseInt(part, 16).toString(16);
|
|
9562
|
+
hextetCount++;
|
|
9537
9563
|
}
|
|
9538
|
-
if (
|
|
9539
|
-
if (
|
|
9540
|
-
|
|
9541
|
-
} else if (endIpv6) {
|
|
9542
|
-
address.push(buffer.join(""));
|
|
9543
|
-
} else {
|
|
9544
|
-
address.push(stringArrayToHexStripped(buffer));
|
|
9545
|
-
}
|
|
9564
|
+
if (compression === -1) {
|
|
9565
|
+
if (hextetCount !== 8) return void 0;
|
|
9566
|
+
return compressIPv6ZeroRun(parts);
|
|
9546
9567
|
}
|
|
9547
|
-
|
|
9548
|
-
|
|
9568
|
+
if (hextetCount >= 8) return void 0;
|
|
9569
|
+
const expanded = parts.slice(0, left.length);
|
|
9570
|
+
for (let i2 = hextetCount; i2 < 8; i2++) expanded.push("0");
|
|
9571
|
+
for (let i2 = left.length; i2 < parts.length; i2++) expanded.push(parts[i2]);
|
|
9572
|
+
return compressIPv6ZeroRun(expanded);
|
|
9549
9573
|
}
|
|
9550
9574
|
function normalizeIPv6(host) {
|
|
9551
|
-
|
|
9552
|
-
|
|
9553
|
-
}
|
|
9554
|
-
|
|
9555
|
-
if (
|
|
9556
|
-
|
|
9557
|
-
|
|
9558
|
-
|
|
9559
|
-
|
|
9560
|
-
|
|
9561
|
-
|
|
9562
|
-
|
|
9563
|
-
|
|
9564
|
-
|
|
9565
|
-
|
|
9575
|
+
const bracketed = host[0] === "[" && host[host.length - 1] === "]";
|
|
9576
|
+
const hasBracket = host[0] === "[" || host[host.length - 1] === "]";
|
|
9577
|
+
if (hasBracket && !bracketed) return { host, isIPV6: false, error: true };
|
|
9578
|
+
let input = bracketed ? host.slice(1, -1) : host;
|
|
9579
|
+
if (bracketed && isIPvFuture(input)) {
|
|
9580
|
+
input = input.toLowerCase();
|
|
9581
|
+
return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true };
|
|
9582
|
+
}
|
|
9583
|
+
if (findToken(input, ":") < 2) {
|
|
9584
|
+
return { host, isIPV6: false, error: bracketed };
|
|
9585
|
+
}
|
|
9586
|
+
let zoneIdentifier = "";
|
|
9587
|
+
const zoneSeparator = input.indexOf("%");
|
|
9588
|
+
if (zoneSeparator !== -1) {
|
|
9589
|
+
const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === "%25" ? 3 : 1;
|
|
9590
|
+
zoneIdentifier = input.slice(zoneSeparator + separatorLength);
|
|
9591
|
+
if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true };
|
|
9592
|
+
input = input.slice(0, zoneSeparator);
|
|
9593
|
+
}
|
|
9594
|
+
const address = normalizeIPv6Address(input);
|
|
9595
|
+
if (address === void 0) return { host, isIPV6: false, error: true };
|
|
9596
|
+
return {
|
|
9597
|
+
host: address + (zoneIdentifier ? "%" + zoneIdentifier : ""),
|
|
9598
|
+
escapedHost: address + (zoneIdentifier ? "%25" + zoneIdentifier : ""),
|
|
9599
|
+
isIPV6: true
|
|
9600
|
+
};
|
|
9566
9601
|
}
|
|
9567
9602
|
function findToken(str, token) {
|
|
9568
9603
|
let ind = 0;
|
|
@@ -9681,7 +9716,8 @@ var require_utils = __commonJS2({
|
|
|
9681
9716
|
function normalizePathEncoding(input) {
|
|
9682
9717
|
let output = "";
|
|
9683
9718
|
for (let i2 = 0; i2 < input.length; i2++) {
|
|
9684
|
-
|
|
9719
|
+
const ch = input[i2];
|
|
9720
|
+
if (ch === "%" && i2 + 2 < input.length) {
|
|
9685
9721
|
const hex = input.slice(i2 + 1, i2 + 3);
|
|
9686
9722
|
if (isHexPair(hex)) {
|
|
9687
9723
|
const normalizedHex = hex.toUpperCase();
|
|
@@ -9695,10 +9731,152 @@ var require_utils = __commonJS2({
|
|
|
9695
9731
|
continue;
|
|
9696
9732
|
}
|
|
9697
9733
|
}
|
|
9698
|
-
if (isPathCharacter(
|
|
9699
|
-
output +=
|
|
9734
|
+
if (isPathCharacter(ch)) {
|
|
9735
|
+
output += ch;
|
|
9736
|
+
} else {
|
|
9737
|
+
const code = input.charCodeAt(i2);
|
|
9738
|
+
if (code < 128) {
|
|
9739
|
+
output += isEscapeSafe(code) ? ch : BYTE_HEX[code];
|
|
9740
|
+
} else if (code < 55296 || code > 57343) {
|
|
9741
|
+
output += percentEncodeNonAscii(code);
|
|
9742
|
+
} else if (code <= 56319 && i2 + 1 < input.length) {
|
|
9743
|
+
const low = input.charCodeAt(i2 + 1);
|
|
9744
|
+
if (low >= 56320 && low <= 57343) {
|
|
9745
|
+
output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
|
|
9746
|
+
i2++;
|
|
9747
|
+
} else {
|
|
9748
|
+
output += percentEncodeNonAscii(65533);
|
|
9749
|
+
}
|
|
9750
|
+
} else {
|
|
9751
|
+
output += percentEncodeNonAscii(65533);
|
|
9752
|
+
}
|
|
9753
|
+
}
|
|
9754
|
+
}
|
|
9755
|
+
return output;
|
|
9756
|
+
}
|
|
9757
|
+
function serializePathEncoding(input, pathNoScheme = false) {
|
|
9758
|
+
let output = "";
|
|
9759
|
+
let firstSegment = pathNoScheme && input[0] !== "/";
|
|
9760
|
+
for (let i2 = 0; i2 < input.length; i2++) {
|
|
9761
|
+
const ch = input[i2];
|
|
9762
|
+
if (ch === "%" && i2 + 2 < input.length) {
|
|
9763
|
+
const hex = input.slice(i2 + 1, i2 + 3);
|
|
9764
|
+
if (isHexPair(hex)) {
|
|
9765
|
+
output += "%" + hex.toUpperCase();
|
|
9766
|
+
i2 += 2;
|
|
9767
|
+
continue;
|
|
9768
|
+
}
|
|
9769
|
+
}
|
|
9770
|
+
if (ch === "/") {
|
|
9771
|
+
firstSegment = false;
|
|
9772
|
+
}
|
|
9773
|
+
if (isPathCharacter(ch) && (ch !== ":" || !firstSegment)) {
|
|
9774
|
+
output += ch;
|
|
9700
9775
|
} else {
|
|
9701
|
-
|
|
9776
|
+
const code = input.charCodeAt(i2);
|
|
9777
|
+
if (code < 128) {
|
|
9778
|
+
output += BYTE_HEX[code];
|
|
9779
|
+
} else if (code < 55296 || code > 57343) {
|
|
9780
|
+
output += percentEncodeNonAscii(code);
|
|
9781
|
+
} else if (code <= 56319 && i2 + 1 < input.length) {
|
|
9782
|
+
const low = input.charCodeAt(i2 + 1);
|
|
9783
|
+
if (low >= 56320 && low <= 57343) {
|
|
9784
|
+
output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
|
|
9785
|
+
i2++;
|
|
9786
|
+
} else {
|
|
9787
|
+
output += percentEncodeNonAscii(65533);
|
|
9788
|
+
}
|
|
9789
|
+
} else {
|
|
9790
|
+
output += percentEncodeNonAscii(65533);
|
|
9791
|
+
}
|
|
9792
|
+
}
|
|
9793
|
+
}
|
|
9794
|
+
return output;
|
|
9795
|
+
}
|
|
9796
|
+
function encodeComponent(input, isAllowed) {
|
|
9797
|
+
let output = "";
|
|
9798
|
+
for (let i2 = 0; i2 < input.length; i2++) {
|
|
9799
|
+
const ch = input[i2];
|
|
9800
|
+
if (ch === "%" && i2 + 2 < input.length) {
|
|
9801
|
+
const hex = input.slice(i2 + 1, i2 + 3);
|
|
9802
|
+
if (isHexPair(hex)) {
|
|
9803
|
+
output += "%" + hex.toUpperCase();
|
|
9804
|
+
i2 += 2;
|
|
9805
|
+
continue;
|
|
9806
|
+
}
|
|
9807
|
+
}
|
|
9808
|
+
if (isAllowed(ch)) {
|
|
9809
|
+
output += ch;
|
|
9810
|
+
} else {
|
|
9811
|
+
const code = input.charCodeAt(i2);
|
|
9812
|
+
if (code < 128) {
|
|
9813
|
+
output += BYTE_HEX[code];
|
|
9814
|
+
} else if (code < 55296 || code > 57343) {
|
|
9815
|
+
output += percentEncodeNonAscii(code);
|
|
9816
|
+
} else if (code <= 56319 && i2 + 1 < input.length) {
|
|
9817
|
+
const low = input.charCodeAt(i2 + 1);
|
|
9818
|
+
if (low >= 56320 && low <= 57343) {
|
|
9819
|
+
output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
|
|
9820
|
+
i2++;
|
|
9821
|
+
} else {
|
|
9822
|
+
output += percentEncodeNonAscii(65533);
|
|
9823
|
+
}
|
|
9824
|
+
} else {
|
|
9825
|
+
output += percentEncodeNonAscii(65533);
|
|
9826
|
+
}
|
|
9827
|
+
}
|
|
9828
|
+
}
|
|
9829
|
+
return output;
|
|
9830
|
+
}
|
|
9831
|
+
function encodeUserinfo(input) {
|
|
9832
|
+
return encodeComponent(input, isUserinfoCharacter);
|
|
9833
|
+
}
|
|
9834
|
+
function encodeQuery(input) {
|
|
9835
|
+
return encodeComponent(input, isQueryFragmentCharacter);
|
|
9836
|
+
}
|
|
9837
|
+
function encodeFragment(input) {
|
|
9838
|
+
return encodeComponent(input, isQueryFragmentCharacter);
|
|
9839
|
+
}
|
|
9840
|
+
function isEscapeSafe(cp) {
|
|
9841
|
+
return cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 42 || cp === 43 || cp === 45 || cp === 46 || cp === 47 || cp === 64 || cp === 95;
|
|
9842
|
+
}
|
|
9843
|
+
function normalizeQueryFragmentEncoding(input) {
|
|
9844
|
+
let output = "";
|
|
9845
|
+
for (let i2 = 0; i2 < input.length; i2++) {
|
|
9846
|
+
const ch = input[i2];
|
|
9847
|
+
if (ch === "%" && i2 + 2 < input.length) {
|
|
9848
|
+
const hex = input.slice(i2 + 1, i2 + 3);
|
|
9849
|
+
if (isHexPair(hex)) {
|
|
9850
|
+
const normalizedHex = hex.toUpperCase();
|
|
9851
|
+
const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
|
|
9852
|
+
if (isUnreserved(decoded)) {
|
|
9853
|
+
output += decoded;
|
|
9854
|
+
} else {
|
|
9855
|
+
output += "%" + normalizedHex;
|
|
9856
|
+
}
|
|
9857
|
+
i2 += 2;
|
|
9858
|
+
continue;
|
|
9859
|
+
}
|
|
9860
|
+
}
|
|
9861
|
+
if (isQueryFragmentCharacter(ch)) {
|
|
9862
|
+
output += ch;
|
|
9863
|
+
} else {
|
|
9864
|
+
const code = input.charCodeAt(i2);
|
|
9865
|
+
if (code < 128) {
|
|
9866
|
+
output += isEscapeSafe(code) ? ch : BYTE_HEX[code];
|
|
9867
|
+
} else if (code < 55296 || code > 57343) {
|
|
9868
|
+
output += percentEncodeNonAscii(code);
|
|
9869
|
+
} else if (code <= 56319 && i2 + 1 < input.length) {
|
|
9870
|
+
const low = input.charCodeAt(i2 + 1);
|
|
9871
|
+
if (low >= 56320 && low <= 57343) {
|
|
9872
|
+
output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
|
|
9873
|
+
i2++;
|
|
9874
|
+
} else {
|
|
9875
|
+
output += percentEncodeNonAscii(65533);
|
|
9876
|
+
}
|
|
9877
|
+
} else {
|
|
9878
|
+
output += percentEncodeNonAscii(65533);
|
|
9879
|
+
}
|
|
9702
9880
|
}
|
|
9703
9881
|
}
|
|
9704
9882
|
return output;
|
|
@@ -9721,14 +9899,18 @@ var require_utils = __commonJS2({
|
|
|
9721
9899
|
function recomposeAuthority(component) {
|
|
9722
9900
|
const uriTokens = [];
|
|
9723
9901
|
if (component.userinfo !== void 0) {
|
|
9724
|
-
uriTokens.push(component.userinfo);
|
|
9902
|
+
uriTokens.push(encodeUserinfo(component.userinfo));
|
|
9725
9903
|
uriTokens.push("@");
|
|
9726
9904
|
}
|
|
9727
9905
|
if (component.host !== void 0) {
|
|
9728
|
-
let host =
|
|
9906
|
+
let host = component.host;
|
|
9729
9907
|
if (!isIPv4(host)) {
|
|
9730
|
-
|
|
9731
|
-
if (ipV6res.isIPV6
|
|
9908
|
+
let ipV6res = normalizeIPv6(host);
|
|
9909
|
+
if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {
|
|
9910
|
+
host = normalizePercentEncoding(host, true);
|
|
9911
|
+
ipV6res = normalizeIPv6(host);
|
|
9912
|
+
}
|
|
9913
|
+
if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {
|
|
9732
9914
|
host = `[${ipV6res.escapedHost}]`;
|
|
9733
9915
|
} else {
|
|
9734
9916
|
host = reescapeHostDelimiters(host, false);
|
|
@@ -9737,8 +9919,12 @@ var require_utils = __commonJS2({
|
|
|
9737
9919
|
uriTokens.push(host);
|
|
9738
9920
|
}
|
|
9739
9921
|
if (typeof component.port === "number" || typeof component.port === "string") {
|
|
9922
|
+
const port = String(component.port);
|
|
9923
|
+
if (!isPort(port)) {
|
|
9924
|
+
throw new TypeError("URI port is malformed.");
|
|
9925
|
+
}
|
|
9740
9926
|
uriTokens.push(":");
|
|
9741
|
-
uriTokens.push(
|
|
9927
|
+
uriTokens.push(port);
|
|
9742
9928
|
}
|
|
9743
9929
|
return uriTokens.length ? uriTokens.join("") : void 0;
|
|
9744
9930
|
}
|
|
@@ -9748,6 +9934,11 @@ var require_utils = __commonJS2({
|
|
|
9748
9934
|
reescapeHostDelimiters,
|
|
9749
9935
|
normalizePercentEncoding,
|
|
9750
9936
|
normalizePathEncoding,
|
|
9937
|
+
serializePathEncoding,
|
|
9938
|
+
normalizeQueryFragmentEncoding,
|
|
9939
|
+
encodeUserinfo,
|
|
9940
|
+
encodeQuery,
|
|
9941
|
+
encodeFragment,
|
|
9751
9942
|
escapePreservingEscapes,
|
|
9752
9943
|
removeDotSegments,
|
|
9753
9944
|
isIPv4,
|
|
@@ -9758,9 +9949,9 @@ var require_utils = __commonJS2({
|
|
|
9758
9949
|
}
|
|
9759
9950
|
});
|
|
9760
9951
|
var require_schemes = __commonJS2({
|
|
9761
|
-
"../../node_modules/.pnpm/fast-uri@3.1.
|
|
9952
|
+
"../../node_modules/.pnpm/fast-uri@3.1.7/node_modules/fast-uri/lib/schemes.js"(exports$1, module) {
|
|
9762
9953
|
var { isUUID } = require_utils();
|
|
9763
|
-
var URN_REG =
|
|
9954
|
+
var URN_REG = /^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu;
|
|
9764
9955
|
var supportedSchemeNames = (
|
|
9765
9956
|
/** @type {const} */
|
|
9766
9957
|
[
|
|
@@ -9821,9 +10012,10 @@ var require_schemes = __commonJS2({
|
|
|
9821
10012
|
wsComponent.secure = void 0;
|
|
9822
10013
|
}
|
|
9823
10014
|
if (wsComponent.resourceName) {
|
|
9824
|
-
const
|
|
10015
|
+
const queryIndex = wsComponent.resourceName.indexOf("?");
|
|
10016
|
+
const path52 = queryIndex === -1 ? wsComponent.resourceName : wsComponent.resourceName.slice(0, queryIndex);
|
|
9825
10017
|
wsComponent.path = path52 && path52 !== "/" ? path52 : void 0;
|
|
9826
|
-
wsComponent.query =
|
|
10018
|
+
wsComponent.query = queryIndex === -1 ? void 0 : wsComponent.resourceName.slice(queryIndex + 1);
|
|
9827
10019
|
wsComponent.resourceName = void 0;
|
|
9828
10020
|
}
|
|
9829
10021
|
wsComponent.fragment = void 0;
|
|
@@ -9835,7 +10027,7 @@ var require_schemes = __commonJS2({
|
|
|
9835
10027
|
return urnComponent;
|
|
9836
10028
|
}
|
|
9837
10029
|
const matches = urnComponent.path.match(URN_REG);
|
|
9838
|
-
if (matches) {
|
|
10030
|
+
if (matches && matches[0] === urnComponent.path) {
|
|
9839
10031
|
const scheme = options.scheme || urnComponent.scheme || "urn";
|
|
9840
10032
|
urnComponent.nid = matches[1].toLowerCase();
|
|
9841
10033
|
urnComponent.nss = matches[2];
|
|
@@ -9965,9 +10157,18 @@ var require_schemes = __commonJS2({
|
|
|
9965
10157
|
}
|
|
9966
10158
|
});
|
|
9967
10159
|
var require_fast_uri = __commonJS2({
|
|
9968
|
-
"../../node_modules/.pnpm/fast-uri@3.1.
|
|
9969
|
-
var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding,
|
|
10160
|
+
"../../node_modules/.pnpm/fast-uri@3.1.7/node_modules/fast-uri/index.js"(exports$1, module) {
|
|
10161
|
+
var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils();
|
|
9970
10162
|
var { SCHEMES, getSchemeHandler } = require_schemes();
|
|
10163
|
+
var VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u;
|
|
10164
|
+
var MALFORMED_SCHEME_ERROR = "URI scheme is malformed.";
|
|
10165
|
+
function decodeValidScheme(scheme) {
|
|
10166
|
+
const decodedScheme = unescape(String(scheme));
|
|
10167
|
+
if (!VALID_SCHEME.test(decodedScheme)) {
|
|
10168
|
+
throw new TypeError(MALFORMED_SCHEME_ERROR);
|
|
10169
|
+
}
|
|
10170
|
+
return decodedScheme;
|
|
10171
|
+
}
|
|
9971
10172
|
function normalize(uri, options) {
|
|
9972
10173
|
if (typeof uri === "string") {
|
|
9973
10174
|
uri = /** @type {T} */
|
|
@@ -9980,12 +10181,34 @@ var require_fast_uri = __commonJS2({
|
|
|
9980
10181
|
}
|
|
9981
10182
|
function resolve(baseURI, relativeURI, options) {
|
|
9982
10183
|
const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
|
|
9983
|
-
const {
|
|
9984
|
-
|
|
9985
|
-
|
|
10184
|
+
const {
|
|
10185
|
+
parsed: baseParsed,
|
|
10186
|
+
malformedAuthorityOrPort: baseMalformed,
|
|
10187
|
+
malformedPercentEncoding: baseMalformedPercentEncoding,
|
|
10188
|
+
malformedSchemeSpecific: baseMalformedSchemeSpecific,
|
|
10189
|
+
malformedHost: baseMalformedHost,
|
|
10190
|
+
malformedScheme: baseMalformedScheme
|
|
10191
|
+
} = parseWithStatus(baseURI, schemelessOptions);
|
|
10192
|
+
const {
|
|
10193
|
+
parsed: relativeParsed,
|
|
10194
|
+
malformedAuthorityOrPort: relativeMalformed,
|
|
10195
|
+
malformedPercentEncoding: relativeMalformedPercentEncoding,
|
|
10196
|
+
malformedSchemeSpecific: relativeMalformedSchemeSpecific,
|
|
10197
|
+
malformedHost: relativeMalformedHost,
|
|
10198
|
+
malformedScheme: relativeMalformedScheme
|
|
10199
|
+
} = parseWithStatus(relativeURI, schemelessOptions);
|
|
10200
|
+
if (baseMalformed || relativeMalformed || baseMalformedPercentEncoding || relativeMalformedPercentEncoding || baseMalformedSchemeSpecific || relativeMalformedSchemeSpecific || baseMalformedHost || relativeMalformedHost || baseMalformedScheme || relativeMalformedScheme) {
|
|
9986
10201
|
throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
|
|
9987
10202
|
}
|
|
9988
10203
|
const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
|
|
10204
|
+
const resolvedSchemeHandler = getSchemeHandler(options && options.scheme || resolved.scheme);
|
|
10205
|
+
const resolvedHost = resolved.host;
|
|
10206
|
+
const resolvedHostIsIP = resolvedHost !== void 0 && resolvedHost !== "" && (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6);
|
|
10207
|
+
canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP);
|
|
10208
|
+
const encodedASCIIHost = resolvedHost && resolvedHost.indexOf("%") !== -1 && !new RegExp("\\P{ASCII}", "u").test(resolvedHost);
|
|
10209
|
+
if (resolved.error && !encodedASCIIHost) {
|
|
10210
|
+
throw new Error(resolved.error);
|
|
10211
|
+
}
|
|
9989
10212
|
schemelessOptions.skipEscape = true;
|
|
9990
10213
|
return serialize2(resolved, schemelessOptions);
|
|
9991
10214
|
}
|
|
@@ -10045,7 +10268,7 @@ var require_fast_uri = __commonJS2({
|
|
|
10045
10268
|
function equal(uriA, uriB, options) {
|
|
10046
10269
|
const normalizedA = normalizeComparableURI(uriA, options);
|
|
10047
10270
|
const normalizedB = normalizeComparableURI(uriB, options);
|
|
10048
|
-
return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA
|
|
10271
|
+
return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA === normalizedB;
|
|
10049
10272
|
}
|
|
10050
10273
|
function serialize2(cmpts, opts) {
|
|
10051
10274
|
const component = {
|
|
@@ -10066,19 +10289,22 @@ var require_fast_uri = __commonJS2({
|
|
|
10066
10289
|
};
|
|
10067
10290
|
const options = Object.assign({}, opts);
|
|
10068
10291
|
const uriTokens = [];
|
|
10292
|
+
if (component.scheme) {
|
|
10293
|
+
component.scheme = decodeValidScheme(component.scheme);
|
|
10294
|
+
}
|
|
10069
10295
|
const schemeHandler = getSchemeHandler(options.scheme || component.scheme);
|
|
10070
10296
|
if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options);
|
|
10297
|
+
const hasAuthority = component.userinfo !== void 0 || component.host !== void 0 || component.port !== void 0;
|
|
10298
|
+
const pathNoScheme = !options.skipEscape && component.scheme === void 0 && !hasAuthority;
|
|
10071
10299
|
if (component.path !== void 0) {
|
|
10072
10300
|
if (!options.skipEscape) {
|
|
10073
|
-
component.path =
|
|
10074
|
-
if (component.scheme !== void 0) {
|
|
10075
|
-
component.path = component.path.split("%3A").join(":");
|
|
10076
|
-
}
|
|
10301
|
+
component.path = serializePathEncoding(component.path, pathNoScheme);
|
|
10077
10302
|
} else {
|
|
10078
10303
|
component.path = normalizePercentEncoding(component.path);
|
|
10079
10304
|
}
|
|
10080
10305
|
}
|
|
10081
10306
|
if (options.reference !== "suffix" && component.scheme) {
|
|
10307
|
+
component.scheme = decodeValidScheme(component.scheme);
|
|
10082
10308
|
uriTokens.push(component.scheme, ":");
|
|
10083
10309
|
}
|
|
10084
10310
|
const authority = recomposeAuthority(component);
|
|
@@ -10096,16 +10322,19 @@ var require_fast_uri = __commonJS2({
|
|
|
10096
10322
|
if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
|
|
10097
10323
|
s3 = removeDotSegments(s3);
|
|
10098
10324
|
}
|
|
10325
|
+
if (pathNoScheme) {
|
|
10326
|
+
s3 = serializePathEncoding(s3, true);
|
|
10327
|
+
}
|
|
10099
10328
|
if (authority === void 0 && s3[0] === "/" && s3[1] === "/") {
|
|
10100
10329
|
s3 = "/%2F" + s3.slice(2);
|
|
10101
10330
|
}
|
|
10102
10331
|
uriTokens.push(s3);
|
|
10103
10332
|
}
|
|
10104
10333
|
if (component.query !== void 0) {
|
|
10105
|
-
uriTokens.push("?", component.query);
|
|
10334
|
+
uriTokens.push("?", encodeQuery(component.query));
|
|
10106
10335
|
}
|
|
10107
10336
|
if (component.fragment !== void 0) {
|
|
10108
|
-
uriTokens.push("#", component.fragment);
|
|
10337
|
+
uriTokens.push("#", encodeFragment(component.fragment));
|
|
10109
10338
|
}
|
|
10110
10339
|
return uriTokens.join("");
|
|
10111
10340
|
}
|
|
@@ -10121,6 +10350,35 @@ var require_fast_uri = __commonJS2({
|
|
|
10121
10350
|
}
|
|
10122
10351
|
return void 0;
|
|
10123
10352
|
}
|
|
10353
|
+
function hasMalformedPercentEncoding(component) {
|
|
10354
|
+
if (component === void 0) return false;
|
|
10355
|
+
let percent = component.indexOf("%");
|
|
10356
|
+
while (percent !== -1) {
|
|
10357
|
+
if (percent + 2 >= component.length || !/^[\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {
|
|
10358
|
+
return true;
|
|
10359
|
+
}
|
|
10360
|
+
percent = component.indexOf("%", percent + 3);
|
|
10361
|
+
}
|
|
10362
|
+
return false;
|
|
10363
|
+
}
|
|
10364
|
+
function isIPLiteral(host) {
|
|
10365
|
+
return host[0] === "[" && host[host.length - 1] === "]";
|
|
10366
|
+
}
|
|
10367
|
+
function hasMalformedComponentPercentEncoding(matches) {
|
|
10368
|
+
const host = matches[4];
|
|
10369
|
+
return hasMalformedPercentEncoding(matches[3]) || host !== void 0 && !isIPLiteral(host) && hasMalformedPercentEncoding(host) || hasMalformedPercentEncoding(matches[6]) || hasMalformedPercentEncoding(matches[7]) || hasMalformedPercentEncoding(matches[8]);
|
|
10370
|
+
}
|
|
10371
|
+
function canonicalizeHost(parsed, options, schemeHandler, isIP) {
|
|
10372
|
+
if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport) && parsed.host && !isIPLiteral(parsed.host) && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
|
|
10373
|
+
try {
|
|
10374
|
+
parsed.host = new URL("http://" + parsed.host).hostname;
|
|
10375
|
+
} catch (e) {
|
|
10376
|
+
parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
|
|
10377
|
+
return true;
|
|
10378
|
+
}
|
|
10379
|
+
}
|
|
10380
|
+
return false;
|
|
10381
|
+
}
|
|
10124
10382
|
function parseWithStatus(uri, opts) {
|
|
10125
10383
|
const options = Object.assign({}, opts);
|
|
10126
10384
|
const parsed = {
|
|
@@ -10133,6 +10391,11 @@ var require_fast_uri = __commonJS2({
|
|
|
10133
10391
|
fragment: void 0
|
|
10134
10392
|
};
|
|
10135
10393
|
let malformedAuthorityOrPort = false;
|
|
10394
|
+
let malformedPercentEncoding = false;
|
|
10395
|
+
let malformedSchemeSpecific = false;
|
|
10396
|
+
let malformedHost = false;
|
|
10397
|
+
let malformedIPLiteral = false;
|
|
10398
|
+
let malformedScheme = false;
|
|
10136
10399
|
let isIP = false;
|
|
10137
10400
|
if (options.reference === "suffix") {
|
|
10138
10401
|
if (options.scheme) {
|
|
@@ -10169,6 +10432,19 @@ var require_fast_uri = __commonJS2({
|
|
|
10169
10432
|
parsed.path = matches[6] || "";
|
|
10170
10433
|
parsed.query = matches[7];
|
|
10171
10434
|
parsed.fragment = matches[8];
|
|
10435
|
+
if (parsed.scheme !== void 0) {
|
|
10436
|
+
const decodedScheme = unescape(parsed.scheme);
|
|
10437
|
+
if (VALID_SCHEME.test(decodedScheme)) {
|
|
10438
|
+
parsed.scheme = decodedScheme.toLowerCase();
|
|
10439
|
+
} else {
|
|
10440
|
+
parsed.error = parsed.error || MALFORMED_SCHEME_ERROR;
|
|
10441
|
+
malformedScheme = true;
|
|
10442
|
+
}
|
|
10443
|
+
}
|
|
10444
|
+
malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches);
|
|
10445
|
+
if (malformedPercentEncoding) {
|
|
10446
|
+
parsed.error = parsed.error || "URI contains malformed percent-encoding.";
|
|
10447
|
+
}
|
|
10172
10448
|
if (isNaN(parsed.port)) {
|
|
10173
10449
|
parsed.port = matches[5];
|
|
10174
10450
|
}
|
|
@@ -10180,9 +10456,16 @@ var require_fast_uri = __commonJS2({
|
|
|
10180
10456
|
if (parsed.host) {
|
|
10181
10457
|
const ipv4result = isIPv4(parsed.host);
|
|
10182
10458
|
if (ipv4result === false) {
|
|
10459
|
+
const bracketedIPLiteral = isIPLiteral(parsed.host);
|
|
10460
|
+
const hasIPLiteralBracket = parsed.host.indexOf("[") !== -1 || parsed.host.indexOf("]") !== -1;
|
|
10183
10461
|
const ipv6result = normalizeIPv6(parsed.host);
|
|
10184
|
-
|
|
10185
|
-
|
|
10462
|
+
isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true;
|
|
10463
|
+
malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true);
|
|
10464
|
+
parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase();
|
|
10465
|
+
if (malformedIPLiteral) {
|
|
10466
|
+
parsed.error = parsed.error || "URI host is malformed.";
|
|
10467
|
+
malformedAuthorityOrPort = true;
|
|
10468
|
+
}
|
|
10186
10469
|
} else {
|
|
10187
10470
|
isIP = true;
|
|
10188
10471
|
}
|
|
@@ -10200,42 +10483,36 @@ var require_fast_uri = __commonJS2({
|
|
|
10200
10483
|
parsed.error = parsed.error || "URI is not a " + options.reference + " reference.";
|
|
10201
10484
|
}
|
|
10202
10485
|
const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
|
|
10203
|
-
if (!
|
|
10204
|
-
|
|
10205
|
-
try {
|
|
10206
|
-
parsed.host = new URL("http://" + parsed.host).hostname;
|
|
10207
|
-
} catch (e) {
|
|
10208
|
-
parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
|
|
10209
|
-
}
|
|
10210
|
-
}
|
|
10486
|
+
if (!malformedIPLiteral) {
|
|
10487
|
+
malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
|
|
10211
10488
|
}
|
|
10212
10489
|
if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
|
|
10213
10490
|
if (uri.indexOf("%") !== -1) {
|
|
10214
|
-
if (parsed.
|
|
10215
|
-
parsed.
|
|
10216
|
-
|
|
10217
|
-
if (parsed.host !== void 0) {
|
|
10218
|
-
parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP);
|
|
10491
|
+
if (parsed.host !== void 0 && !malformedIPLiteral) {
|
|
10492
|
+
const host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true);
|
|
10493
|
+
parsed.host = reescapeHostDelimiters(host, isIP);
|
|
10219
10494
|
}
|
|
10220
10495
|
}
|
|
10221
10496
|
if (parsed.path) {
|
|
10222
10497
|
parsed.path = normalizePathEncoding(parsed.path);
|
|
10223
10498
|
}
|
|
10499
|
+
if (parsed.query) {
|
|
10500
|
+
parsed.query = normalizeQueryFragmentEncoding(parsed.query);
|
|
10501
|
+
}
|
|
10224
10502
|
if (parsed.fragment) {
|
|
10225
|
-
|
|
10226
|
-
parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
|
|
10227
|
-
} catch {
|
|
10228
|
-
parsed.error = parsed.error || "URI malformed";
|
|
10229
|
-
}
|
|
10503
|
+
parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment);
|
|
10230
10504
|
}
|
|
10231
10505
|
}
|
|
10232
10506
|
if (schemeHandler && schemeHandler.parse) {
|
|
10233
10507
|
schemeHandler.parse(parsed, options);
|
|
10508
|
+
if (schemeHandler === SCHEMES.urn && parsed.nid === void 0) {
|
|
10509
|
+
malformedSchemeSpecific = true;
|
|
10510
|
+
}
|
|
10234
10511
|
}
|
|
10235
10512
|
} else {
|
|
10236
10513
|
parsed.error = parsed.error || "URI can not be parsed.";
|
|
10237
10514
|
}
|
|
10238
|
-
return { parsed, malformedAuthorityOrPort };
|
|
10515
|
+
return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme };
|
|
10239
10516
|
}
|
|
10240
10517
|
function parse(uri, opts) {
|
|
10241
10518
|
return parseWithStatus(uri, opts).parsed;
|
|
@@ -10244,20 +10521,28 @@ var require_fast_uri = __commonJS2({
|
|
|
10244
10521
|
return normalizeStringWithStatus(uri, opts).normalized;
|
|
10245
10522
|
}
|
|
10246
10523
|
function normalizeStringWithStatus(uri, opts) {
|
|
10247
|
-
const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts);
|
|
10524
|
+
const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts);
|
|
10248
10525
|
return {
|
|
10249
|
-
normalized: malformedAuthorityOrPort ? uri : serialize2(parsed, opts),
|
|
10250
|
-
malformedAuthorityOrPort
|
|
10526
|
+
normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize2(parsed, opts),
|
|
10527
|
+
malformedAuthorityOrPort,
|
|
10528
|
+
malformedPercentEncoding,
|
|
10529
|
+
malformedSchemeSpecific,
|
|
10530
|
+
malformedHost,
|
|
10531
|
+
malformedScheme
|
|
10251
10532
|
};
|
|
10252
10533
|
}
|
|
10253
10534
|
function normalizeComparableURI(uri, opts) {
|
|
10254
|
-
if (typeof uri
|
|
10255
|
-
|
|
10256
|
-
return malformedAuthorityOrPort ? void 0 : normalized;
|
|
10535
|
+
if (typeof uri !== "string" && typeof uri !== "object") {
|
|
10536
|
+
return void 0;
|
|
10257
10537
|
}
|
|
10258
|
-
|
|
10259
|
-
|
|
10538
|
+
let value;
|
|
10539
|
+
try {
|
|
10540
|
+
value = typeof uri === "string" ? uri : serialize2(uri, opts);
|
|
10541
|
+
} catch {
|
|
10542
|
+
return void 0;
|
|
10260
10543
|
}
|
|
10544
|
+
const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts);
|
|
10545
|
+
return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? void 0 : normalized;
|
|
10261
10546
|
}
|
|
10262
10547
|
var fastUri = {
|
|
10263
10548
|
SCHEMES,
|
|
@@ -21928,9 +22213,15 @@ DATABASE_URL=${database.envExample}
|
|
|
21928
22213
|
# Authentication (auto-generated, change if needed)
|
|
21929
22214
|
NEXTLY_SECRET=${generateNextlySecret()}
|
|
21930
22215
|
|
|
21931
|
-
#
|
|
22216
|
+
# Where the Nextly app itself lives: the admin, the API, and the origin its
|
|
22217
|
+
# emails and preview links point at.
|
|
21932
22218
|
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
|
21933
22219
|
|
|
22220
|
+
# Where READERS find the public site. Used for canonical links, Open Graph
|
|
22221
|
+
# tags, the sitemap and RSS. Set it when the public site is served from a
|
|
22222
|
+
# different origin than the app above; otherwise the app's origin is used.
|
|
22223
|
+
# NEXT_PUBLIC_SITE_URL=https://example.com
|
|
22224
|
+
|
|
21934
22225
|
${DIAGNOSTICS_BLOCK}`;
|
|
21935
22226
|
}
|
|
21936
22227
|
async function generateEnv(cwd, database) {
|
|
@@ -28760,7 +29051,15 @@ async function walkSourceFiles(root) {
|
|
|
28760
29051
|
function projectUsesFormBuilder(projectType) {
|
|
28761
29052
|
return PROJECT_TYPES_WITH_FORM_BUILDER.has(projectType);
|
|
28762
29053
|
}
|
|
28763
|
-
var CONTENT_TEMPLATE_TYPES = /* @__PURE__ */ new Set([
|
|
29054
|
+
var CONTENT_TEMPLATE_TYPES = /* @__PURE__ */ new Set([
|
|
29055
|
+
"blog",
|
|
29056
|
+
// The plugin template installs `@nextlyhq/eslint-plugin` for the design-token
|
|
29057
|
+
// rules, and that package exists on `alpha` only — `latest` is the conservative
|
|
29058
|
+
// tag and lags the active release line. Pinned to `latest` a plugin scaffold
|
|
29059
|
+
// would resolve a version of it that predates the rules, exactly as a content
|
|
29060
|
+
// scaffold would resolve a `nextly` missing the helpers its pages import.
|
|
29061
|
+
"plugin"
|
|
29062
|
+
]);
|
|
28764
29063
|
function templateNextlyChannel(projectType) {
|
|
28765
29064
|
return CONTENT_TEMPLATE_TYPES.has(projectType) ? "alpha" : "latest";
|
|
28766
29065
|
}
|
|
@@ -29048,7 +29347,12 @@ var PINNED_VERSIONS = {
|
|
|
29048
29347
|
"@types/react-dom": "^19",
|
|
29049
29348
|
"@tailwindcss/postcss": "^4",
|
|
29050
29349
|
tailwindcss: "^4",
|
|
29051
|
-
eslint: "^9"
|
|
29350
|
+
eslint: "^9",
|
|
29351
|
+
// Compiles `nextly.config.ts` so the dev server and the CLI can read it.
|
|
29352
|
+
// An optional peer of `nextly` rather than a dependency, because nothing
|
|
29353
|
+
// that serves a request needs it: a production install omitting dev
|
|
29354
|
+
// dependencies never downloads it.
|
|
29355
|
+
esbuild: "^0.28.1"
|
|
29052
29356
|
};
|
|
29053
29357
|
var RUNTIME_RESOLVED_PACKAGES = ["next", "eslint-config-next"];
|
|
29054
29358
|
var NEXTLY_PACKAGES = [
|
|
@@ -29060,7 +29364,8 @@ var NEXTLY_PACKAGES = [
|
|
|
29060
29364
|
"@nextlyhq/adapter-mysql",
|
|
29061
29365
|
"@nextlyhq/adapter-sqlite",
|
|
29062
29366
|
"@nextlyhq/plugin-form-builder",
|
|
29063
|
-
"@nextlyhq/plugin-sdk"
|
|
29367
|
+
"@nextlyhq/plugin-sdk",
|
|
29368
|
+
"@nextlyhq/eslint-plugin"
|
|
29064
29369
|
];
|
|
29065
29370
|
var resolvedNextlyVersions = /* @__PURE__ */ new Map();
|
|
29066
29371
|
async function fetchLatestVersion(pkg2, channel = "latest") {
|
|
@@ -29107,7 +29412,11 @@ async function resolveRuntimeVersions() {
|
|
|
29107
29412
|
}
|
|
29108
29413
|
async function generatePackageJson(projectName, database, useYalc = false, projectType = "blank", templateDirs = [], targetDir) {
|
|
29109
29414
|
if (projectType === "plugin") {
|
|
29110
|
-
return generatePluginPackageJson(
|
|
29415
|
+
return generatePluginPackageJson(
|
|
29416
|
+
projectName,
|
|
29417
|
+
useYalc,
|
|
29418
|
+
templateNextlyChannel(projectType)
|
|
29419
|
+
);
|
|
29111
29420
|
}
|
|
29112
29421
|
const runtimeVersions = await resolveRuntimeVersions();
|
|
29113
29422
|
const dependencies = {
|
|
@@ -29142,7 +29451,11 @@ async function generatePackageJson(projectName, database, useYalc = false, proje
|
|
|
29142
29451
|
"@tailwindcss/postcss": PINNED_VERSIONS["@tailwindcss/postcss"],
|
|
29143
29452
|
tailwindcss: PINNED_VERSIONS.tailwindcss,
|
|
29144
29453
|
eslint: PINNED_VERSIONS.eslint,
|
|
29145
|
-
"eslint-config-next": runtimeVersions["eslint-config-next"]
|
|
29454
|
+
"eslint-config-next": runtimeVersions["eslint-config-next"],
|
|
29455
|
+
// Declared HERE rather than inherited: `nextly` takes esbuild as an
|
|
29456
|
+
// optional peer, so nothing installs it on a project's behalf. Without it
|
|
29457
|
+
// the dev server cannot read `nextly.config.ts`.
|
|
29458
|
+
esbuild: PINNED_VERSIONS.esbuild
|
|
29146
29459
|
};
|
|
29147
29460
|
const shipsSearchIndex = targetDir ? await projectHasSearchIndexScript(targetDir) : false;
|
|
29148
29461
|
if (shipsSearchIndex) devDependencies.pagefind = "^1.1.0";
|
|
@@ -29203,10 +29516,10 @@ async function resolvePluginNextlyRange(useYalc) {
|
|
|
29203
29516
|
const v2 = versions["nextly"];
|
|
29204
29517
|
return v2 && v2 !== "latest" ? v2 : ">=0.0.0";
|
|
29205
29518
|
}
|
|
29206
|
-
async function generatePluginPackageJson(projectName, useYalc) {
|
|
29207
|
-
const versions = useYalc ? {} : await resolveNextlyVersions();
|
|
29519
|
+
async function generatePluginPackageJson(projectName, useYalc, channel) {
|
|
29520
|
+
const versions = useYalc ? {} : await resolveNextlyVersions(channel);
|
|
29208
29521
|
const runtimeVersions = await resolveRuntimeVersions();
|
|
29209
|
-
const range = (pkg3) => versions[pkg3] ??
|
|
29522
|
+
const range = (pkg3) => versions[pkg3] ?? channel;
|
|
29210
29523
|
const peerDependencies = {
|
|
29211
29524
|
nextly: range("nextly"),
|
|
29212
29525
|
"@nextlyhq/admin": range("@nextlyhq/admin"),
|
|
@@ -29238,7 +29551,11 @@ async function generatePluginPackageJson(projectName, useYalc) {
|
|
|
29238
29551
|
vitest: "^4.1.0",
|
|
29239
29552
|
eslint: PINNED_VERSIONS.eslint,
|
|
29240
29553
|
"@eslint/js": PINNED_VERSIONS.eslint,
|
|
29241
|
-
"typescript-eslint": "^8.0.0"
|
|
29554
|
+
"typescript-eslint": "^8.0.0",
|
|
29555
|
+
// The design-token rules the admin holds itself to. Shipped to the author
|
|
29556
|
+
// rather than documented at them: a rule that runs only in Nextly's own
|
|
29557
|
+
// repository governs the first-party plugins and nothing anyone else builds.
|
|
29558
|
+
"@nextlyhq/eslint-plugin": range("@nextlyhq/eslint-plugin")
|
|
29242
29559
|
};
|
|
29243
29560
|
const pkg2 = {
|
|
29244
29561
|
name: projectName,
|