@pagepocket/shared 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/base64.d.ts +4 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +41 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/dates.d.ts +2 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +5 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/mime.d.ts +4 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +35 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/url.d.ts +8 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +64 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/utf8.d.ts +4 -0
- package/dist/utils/utf8.d.ts.map +1 -0
- package/dist/utils/utf8.js +20 -0
- package/dist/utils/utf8.js.map +1 -0
- package/package.json +35 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MAgBjD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,UAa9C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAO3C,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const getGlobalBuffer = () => {
|
|
2
|
+
return globalThis.Buffer;
|
|
3
|
+
};
|
|
4
|
+
export const bytesToBase64 = (bytes) => {
|
|
5
|
+
const BufferCtor = getGlobalBuffer();
|
|
6
|
+
if (BufferCtor) {
|
|
7
|
+
return BufferCtor.from(bytes).toString("base64");
|
|
8
|
+
}
|
|
9
|
+
const chunkSize = 0x8000;
|
|
10
|
+
let binary = "";
|
|
11
|
+
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
12
|
+
const chunk = bytes.subarray(i, i + chunkSize);
|
|
13
|
+
for (const code of chunk) {
|
|
14
|
+
binary += String.fromCharCode(code);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return btoa(binary);
|
|
18
|
+
};
|
|
19
|
+
export const base64ToBytes = (base64) => {
|
|
20
|
+
const BufferCtor = getGlobalBuffer();
|
|
21
|
+
if (BufferCtor) {
|
|
22
|
+
const buf = BufferCtor.from(base64 || "", "base64");
|
|
23
|
+
return new Uint8Array(buf);
|
|
24
|
+
}
|
|
25
|
+
const binary = atob(base64 || "");
|
|
26
|
+
const bytes = new Uint8Array(binary.length);
|
|
27
|
+
for (let i = 0; i < binary.length; i += 1) {
|
|
28
|
+
bytes[i] = binary.charCodeAt(i);
|
|
29
|
+
}
|
|
30
|
+
return bytes;
|
|
31
|
+
};
|
|
32
|
+
export const textToBase64 = (text) => {
|
|
33
|
+
try {
|
|
34
|
+
const bytes = new TextEncoder().encode(text || "");
|
|
35
|
+
return bytesToBase64(bytes);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return bytesToBase64(new TextEncoder().encode(text || ""));
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":"AASA,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,OAAQ,UAA+B,CAAC,MAAM,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAU,EAAE;IACzD,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;IACrC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAc,EAAE;IAC1D,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;IACrC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,IAAI,UAAU,CAAC,GAA4B,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/utils/dates.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,GAAI,GAAG,IAAI,KAAG,MAE/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/utils/dates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAO,EAAU,EAAE;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const lookupMimeTypeFromPath: (path: string) => string;
|
|
2
|
+
export declare const normalizeContentType: (input?: string | null) => string | null;
|
|
3
|
+
export declare const extensionFromContentType: (contentType?: string | null) => string;
|
|
4
|
+
//# sourceMappingURL=mime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/utils/mime.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,MAOrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IAarE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,cAAc,MAAM,GAAG,IAAI,KAAG,MAYtE,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { parse as parseContentType } from "content-type";
|
|
2
|
+
import { extension as extensionFromMime, lookup as lookupMime } from "mime-types";
|
|
3
|
+
export const lookupMimeTypeFromPath = (path) => {
|
|
4
|
+
const found = lookupMime(String(path || ""));
|
|
5
|
+
if (!found) {
|
|
6
|
+
return "application/octet-stream";
|
|
7
|
+
}
|
|
8
|
+
return String(found);
|
|
9
|
+
};
|
|
10
|
+
export const normalizeContentType = (input) => {
|
|
11
|
+
if (!input) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
// parse() throws on invalid content-type values.
|
|
16
|
+
const parsed = parseContentType(input);
|
|
17
|
+
return parsed.type;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Fallback: strip parameters conservatively.
|
|
21
|
+
return String(input).split(";")[0]?.trim() || null;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const extensionFromContentType = (contentType) => {
|
|
25
|
+
const normalized = normalizeContentType(contentType);
|
|
26
|
+
if (!normalized) {
|
|
27
|
+
return "";
|
|
28
|
+
}
|
|
29
|
+
const ext = extensionFromMime(normalized);
|
|
30
|
+
if (!ext) {
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
return `.${ext}`;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=mime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../src/utils/mime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC7D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAqB,EAAiB,EAAE;IAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;QAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAA2B,EAAU,EAAE;IAC9E,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,GAAG,EAAE,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const stripHash: (value: string) => string;
|
|
2
|
+
export declare const stripTrailingSlash: (value: string) => string;
|
|
3
|
+
export declare const safeUrl: (input: string, baseUrl?: string) => URL | null;
|
|
4
|
+
export declare const normalizeUrl: (input: string, baseUrl: string) => string;
|
|
5
|
+
export declare const toPathSearch: (input: string, baseUrl: string) => string;
|
|
6
|
+
export declare const toPathname: (input: string, baseUrl: string) => string;
|
|
7
|
+
export declare const buildUrlVariants: (input: string, baseUrl: string) => string[];
|
|
8
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAGzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MAMlD,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,GAAG,GAAG,IAM/D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,MAM7D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,MAO7D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,MAG3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,MAAM,EA+BvE,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export const stripHash = (value) => {
|
|
2
|
+
const index = value.indexOf("#");
|
|
3
|
+
return index === -1 ? value : value.slice(0, index);
|
|
4
|
+
};
|
|
5
|
+
export const stripTrailingSlash = (value) => {
|
|
6
|
+
if (!value || value === "/") {
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
return value.endsWith("/") ? value.slice(0, -1) : value;
|
|
10
|
+
};
|
|
11
|
+
export const safeUrl = (input, baseUrl) => {
|
|
12
|
+
try {
|
|
13
|
+
return baseUrl ? new URL(input, baseUrl) : new URL(input);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const normalizeUrl = (input, baseUrl) => {
|
|
20
|
+
try {
|
|
21
|
+
return new URL(input, baseUrl).toString();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return input;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
export const toPathSearch = (input, baseUrl) => {
|
|
28
|
+
const parsed = safeUrl(input, baseUrl);
|
|
29
|
+
if (!parsed) {
|
|
30
|
+
return input;
|
|
31
|
+
}
|
|
32
|
+
return parsed.pathname + parsed.search;
|
|
33
|
+
};
|
|
34
|
+
export const toPathname = (input, baseUrl) => {
|
|
35
|
+
const parsed = safeUrl(input, baseUrl);
|
|
36
|
+
return parsed ? parsed.pathname : input;
|
|
37
|
+
};
|
|
38
|
+
export const buildUrlVariants = (input, baseUrl) => {
|
|
39
|
+
const variants = new Set();
|
|
40
|
+
const push = (value) => {
|
|
41
|
+
if (!value) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
variants.add(value);
|
|
45
|
+
};
|
|
46
|
+
const raw = String(input ?? "");
|
|
47
|
+
push(raw);
|
|
48
|
+
push(stripHash(raw));
|
|
49
|
+
push(stripTrailingSlash(raw));
|
|
50
|
+
push(stripTrailingSlash(stripHash(raw)));
|
|
51
|
+
const absolute = normalizeUrl(raw, baseUrl);
|
|
52
|
+
push(absolute);
|
|
53
|
+
const absoluteNoHash = stripHash(absolute);
|
|
54
|
+
push(absoluteNoHash);
|
|
55
|
+
push(stripTrailingSlash(absoluteNoHash));
|
|
56
|
+
const pathSearch = toPathSearch(raw, baseUrl);
|
|
57
|
+
push(pathSearch);
|
|
58
|
+
push(stripTrailingSlash(pathSearch));
|
|
59
|
+
const pathname = toPathname(raw, baseUrl);
|
|
60
|
+
push(pathname);
|
|
61
|
+
push(stripTrailingSlash(pathname));
|
|
62
|
+
return Array.from(variants);
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utf8.d.ts","sourceRoot":"","sources":["../../src/utils/utf8.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,KAAG,MAAM,GAAG,IAM7D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAAU,KAAG,MAMrD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,UAEzC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const decodeUtf8Strict = (bytes) => {
|
|
2
|
+
try {
|
|
3
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
4
|
+
}
|
|
5
|
+
catch {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
export const decodeUtf8Lenient = (bytes) => {
|
|
10
|
+
try {
|
|
11
|
+
return new TextDecoder("utf-8", { fatal: false }).decode(bytes);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return "";
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const encodeUtf8 = (text) => {
|
|
18
|
+
return new TextEncoder().encode(text);
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=utf8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utf8.js","sourceRoot":"","sources":["../../src/utils/utf8.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAiB,EAAE;IACnE,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAiB,EAAU,EAAE;IAC7D,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAc,EAAE;IACrD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pagepocket/shared",
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "Shared cross-package utilities for PagePocket.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"content-type": "^1.0.5",
|
|
19
|
+
"dayjs": "^1.11.13",
|
|
20
|
+
"mime-types": "^2.1.35"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/content-type": "^1.1.9",
|
|
24
|
+
"@types/mime-types": "^2.1.4",
|
|
25
|
+
"@types/node": "^20.17.12",
|
|
26
|
+
"typescript": "^5.7.2"
|
|
27
|
+
},
|
|
28
|
+
"license": "ISC",
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && pnpm run build:types && pnpm run build:esm",
|
|
31
|
+
"build:types": "tsc -p tsconfig.types.json",
|
|
32
|
+
"build:esm": "tsc -p tsconfig.esm.json",
|
|
33
|
+
"test": "node -e \"process.exit(0)\""
|
|
34
|
+
}
|
|
35
|
+
}
|