| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.indexOf = indexOf;
- exports.lastIndexOf = lastIndexOf;
- exports.includes = includes;
- exports.startsWith = startsWith;
- exports.endsWith = endsWith;
- exports.slice = slice;
- exports.tail = tail;
- exports.copy = copy;
- exports.compare = compare;
- const buffer_source_js_1 = require("./buffer-source.js");
- function clampIndex(value, fallback, length) {
- const normalized = Number.isFinite(value) ? Math.trunc(value) : fallback;
- if (normalized <= 0) {
- return 0;
- }
- if (normalized >= length) {
- return length;
- }
- return normalized;
- }
- function normalizeForwardRange(length, options) {
- const start = clampIndex(options?.start, 0, length);
- const end = clampIndex(options?.end, length, length);
- return end >= start ? [start, end] : [start, start];
- }
- function normalizeReverseRange(length, options) {
- const start = clampIndex(options?.start, length, length);
- const end = clampIndex(options?.end, 0, length);
- return start >= end ? [end, start] : [start, start];
- }
- function normalizeSliceIndex(value, fallback, length) {
- const normalized = Number.isFinite(value) ? Math.trunc(value) : fallback;
- if (normalized < 0) {
- return Math.max(length + normalized, 0);
- }
- if (normalized > length) {
- return length;
- }
- return normalized;
- }
- function encodeAscii(text) {
- const bytes = new Uint8Array(text.length);
- for (let i = 0; i < text.length; i++) {
- bytes[i] = text.charCodeAt(i) & 0xff;
- }
- return bytes;
- }
- function encodeUtf8(text) {
- return new TextEncoder().encode(text);
- }
- function toPatternBytes(pattern, options) {
- if (typeof pattern === "string") {
- return options?.encoding === "utf8" ? encodeUtf8(pattern) : encodeAscii(pattern);
- }
- return (0, buffer_source_js_1.toUint8Array)(pattern);
- }
- function bytesEqualAt(data, pattern, offset) {
- for (let index = 0; index < pattern.byteLength; index++) {
- if (data[offset + index] !== pattern[index]) {
- return false;
- }
- }
- return true;
- }
- function indexOf(data, pattern, options) {
- const bytes = (0, buffer_source_js_1.toUint8Array)(data);
- const needle = toPatternBytes(pattern, options);
- const [start, end] = normalizeForwardRange(bytes.byteLength, options);
- if (needle.byteLength === 0) {
- return start;
- }
- const lastOffset = end - needle.byteLength;
- if (lastOffset < start) {
- return -1;
- }
- for (let offset = start; offset <= lastOffset; offset++) {
- if (bytesEqualAt(bytes, needle, offset)) {
- return offset;
- }
- }
- return -1;
- }
- function lastIndexOf(data, pattern, options) {
- const bytes = (0, buffer_source_js_1.toUint8Array)(data);
- const needle = toPatternBytes(pattern, options);
- const [end, start] = normalizeReverseRange(bytes.byteLength, options);
- if (needle.byteLength === 0) {
- return start;
- }
- const firstOffset = start - needle.byteLength;
- if (firstOffset < end) {
- return -1;
- }
- for (let offset = firstOffset; offset >= end; offset--) {
- if (bytesEqualAt(bytes, needle, offset)) {
- return offset;
- }
- }
- return -1;
- }
- function includes(data, pattern, options) {
- return indexOf(data, pattern, options) !== -1;
- }
- function startsWith(data, pattern, options) {
- const bytes = (0, buffer_source_js_1.toUint8Array)(data);
- const needle = toPatternBytes(pattern, options);
- if (needle.byteLength > bytes.byteLength) {
- return false;
- }
- return bytesEqualAt(bytes, needle, 0);
- }
- function endsWith(data, pattern, options) {
- const bytes = (0, buffer_source_js_1.toUint8Array)(data);
- const needle = toPatternBytes(pattern, options);
- if (needle.byteLength > bytes.byteLength) {
- return false;
- }
- return bytesEqualAt(bytes, needle, bytes.byteLength - needle.byteLength);
- }
- function slice(data, start, end) {
- const bytes = (0, buffer_source_js_1.toUint8Array)(data);
- const normalizedStart = normalizeSliceIndex(start, 0, bytes.byteLength);
- const normalizedEnd = normalizeSliceIndex(end, bytes.byteLength, bytes.byteLength);
- if (normalizedEnd <= normalizedStart) {
- return bytes.subarray(normalizedStart, normalizedStart);
- }
- return bytes.subarray(normalizedStart, normalizedEnd);
- }
- function tail(data, length) {
- const bytes = (0, buffer_source_js_1.toUint8Array)(data);
- const normalizedLength = Number.isFinite(length) ? Math.max(0, Math.trunc(length)) : 0;
- if (normalizedLength >= bytes.byteLength) {
- return bytes;
- }
- return bytes.subarray(bytes.byteLength - normalizedLength);
- }
- function copy(data) {
- return (0, buffer_source_js_1.toUint8ArrayCopy)(data);
- }
- function compare(a, b) {
- const left = (0, buffer_source_js_1.toUint8Array)(a);
- const right = (0, buffer_source_js_1.toUint8Array)(b);
- const limit = Math.min(left.byteLength, right.byteLength);
- for (let index = 0; index < limit; index++) {
- if (left[index] < right[index]) {
- return -1;
- }
- if (left[index] > right[index]) {
- return 1;
- }
- }
- if (left.byteLength < right.byteLength) {
- return -1;
- }
- if (left.byteLength > right.byteLength) {
- return 1;
- }
- return 0;
- }
|