@readme/data-urls
Advanced tools
+1
-1
@@ -39,3 +39,3 @@ 'use strict'; | ||
| exports.validate = validate; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.cjs.map | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAAA,IAAM,iBACJ;AASF,SAAS,SAAS,KAAa;AAC7B,SAAO,eAAe,MAAM,OAAO,IAAI,KAAK,CAAC;AAC/C;AAiBA,SAAS,MAAM,KAAa;AAC1B,MAAI,CAAC,SAAS,GAAG,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,KAAK,EAAE,MAAM,cAAc;AAC7C,QAAM,SAAS,CAAC;AAEhB,MAAI,MAAM,CAAC,GAAG;AACZ,WAAO,YAAY,MAAM,CAAC,EAAE,YAAY;AAExC,UAAM,iBAAiB,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK;AAGlD,UAAI,EAAE,WAAW,OAAO,GAAG;AACzB,eAAO;AAAA,MACT;AAEA,aAAO,EAAE,YAAY;AAAA,IACvB,CAAC;AAED,WAAO,cAAc,eAAe,CAAC;AAErC,mBAAe,MAAM,CAAC,EAAE,QAAQ,eAAa;AAC3C,YAAM,IAAI,UAAU,MAAM,GAAG;AAC7B,aAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,SAAO,SAAS,CAAC,CAAC,MAAM,MAAM,SAAS,CAAC;AACxC,SAAO,OAAO,MAAM,MAAM,SAAS,CAAC,KAAK;AAEzC,SAAO,WAAW,MAAM;AACtB,UAAM,WAAW,OAAO,SAAS,WAAW;AAE5C,WAAO,OAAO,KAAK,OAAO,MAAM,QAAQ;AAAA,EAC1C;AAEA,SAAO;AACT","sourcesContent":["const DATA_URL_REGEX =\n /^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@/?%\\s<>]*?)$/i;\n\n/**\n * Determine if a given data URL is valid or not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/data_URIs}\n * @see {@link http://tools.ietf.org/html/rfc2397}\n * @see {@link http://tools.ietf.org/html/rfc2396#section2}\n */\nfunction validate(str: string) {\n return DATA_URL_REGEX.test((str || '').trim());\n}\n\nexport interface DataURL {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n base64: boolean;\n contentType?: string;\n data: string;\n mediaType?: string;\n name?: string;\n toBuffer: () => Buffer;\n}\n\n/**\n * Parse a given data URL into its individual parts.\n *\n */\nfunction parse(str: string) {\n if (!validate(str)) {\n return false;\n }\n\n const parts = str.trim().match(DATA_URL_REGEX);\n const parsed = {} as DataURL;\n\n if (parts[1]) {\n parsed.mediaType = parts[1].toLowerCase();\n\n const mediaTypeParts = parts[1].split(';').map(x => {\n // `name` attributes are for filenames so we shouldn't lowercase them as some filesystems are\n // case-sensitive.\n if (x.startsWith('name=')) {\n return x;\n }\n\n return x.toLowerCase();\n });\n\n parsed.contentType = mediaTypeParts[0];\n\n mediaTypeParts.slice(1).forEach(attribute => {\n const p = attribute.split('=');\n parsed[p[0]] = p[1];\n });\n }\n\n parsed.base64 = !!parts[parts.length - 2];\n parsed.data = parts[parts.length - 1] || '';\n\n parsed.toBuffer = () => {\n const encoding = parsed.base64 ? 'base64' : 'utf8';\n\n return Buffer.from(parsed.data, encoding);\n };\n\n return parsed;\n}\n\nexport { parse, validate };\n"]} | ||
| {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,IAAM,cAAA,GACJ,uIAAA;AASF,SAAS,SAAS,GAAA,EAAa;AAC7B,EAAA,OAAO,cAAA,CAAe,IAAA,CAAA,CAAM,GAAA,IAAO,EAAA,EAAI,MAAM,CAAA;AAC/C;AAiBA,SAAS,MAAM,GAAA,EAAa;AAC1B,EAAA,IAAI,CAAC,QAAA,CAAS,GAAG,CAAA,EAAG;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,EAAK,CAAE,MAAM,cAAc,CAAA;AAC7C,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AACZ,IAAA,MAAA,CAAO,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AAExC,IAAA,MAAM,cAAA,GAAiB,MAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK;AAGlD,MAAA,IAAI,CAAA,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG;AACzB,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,OAAO,EAAE,WAAA,EAAY;AAAA,IACvB,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,WAAA,GAAc,eAAe,CAAC,CAAA;AAErC,IAAA,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAA,SAAA,KAAa;AAC3C,MAAA,MAAM,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAC7B,MAAA,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,MAAA,CAAO,SAAS,CAAC,CAAC,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AACxC,EAAA,MAAA,CAAO,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAEzC,EAAA,MAAA,CAAO,WAAW,MAAM;AACtB,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,GAAS,QAAA,GAAW,MAAA;AAE5C,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,OAAO,MAAA;AACT","file":"index.cjs","sourcesContent":["const DATA_URL_REGEX =\n /^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@/?%\\s<>]*?)$/i;\n\n/**\n * Determine if a given data URL is valid or not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/data_URIs}\n * @see {@link http://tools.ietf.org/html/rfc2397}\n * @see {@link http://tools.ietf.org/html/rfc2396#section2}\n */\nfunction validate(str: string) {\n return DATA_URL_REGEX.test((str || '').trim());\n}\n\nexport interface DataURL {\n // biome-ignore lint/suspicious/noExplicitAny: `additionalProperties: true`\n [k: string]: any;\n base64: boolean;\n contentType?: string;\n data: string;\n mediaType?: string;\n name?: string;\n toBuffer: () => Buffer;\n}\n\n/**\n * Parse a given data URL into its individual parts.\n *\n */\nfunction parse(str: string) {\n if (!validate(str)) {\n return false;\n }\n\n const parts = str.trim().match(DATA_URL_REGEX);\n const parsed = {} as DataURL;\n\n if (parts[1]) {\n parsed.mediaType = parts[1].toLowerCase();\n\n const mediaTypeParts = parts[1].split(';').map(x => {\n // `name` attributes are for filenames so we shouldn't lowercase them as some filesystems are\n // case-sensitive.\n if (x.startsWith('name=')) {\n return x;\n }\n\n return x.toLowerCase();\n });\n\n parsed.contentType = mediaTypeParts[0];\n\n mediaTypeParts.slice(1).forEach(attribute => {\n const p = attribute.split('=');\n parsed[p[0]] = p[1];\n });\n }\n\n parsed.base64 = !!parts[parts.length - 2];\n parsed.data = parts[parts.length - 1] || '';\n\n parsed.toBuffer = () => {\n const encoding = parsed.base64 ? 'base64' : 'utf8';\n\n return Buffer.from(parsed.data, encoding);\n };\n\n return parsed;\n}\n\nexport { parse, validate };\n"]} |
+1
-1
@@ -24,2 +24,2 @@ /** | ||
| export { DataURL, parse, validate }; | ||
| export { type DataURL, parse, validate }; |
+1
-1
@@ -24,2 +24,2 @@ /** | ||
| export { DataURL, parse, validate }; | ||
| export { type DataURL, parse, validate }; |
+1
-1
@@ -36,3 +36,3 @@ // src/index.ts | ||
| export { parse, validate }; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.js.map | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAAA,IAAM,iBACJ;AASF,SAAS,SAAS,KAAa;AAC7B,SAAO,eAAe,MAAM,OAAO,IAAI,KAAK,CAAC;AAC/C;AAiBA,SAAS,MAAM,KAAa;AAC1B,MAAI,CAAC,SAAS,GAAG,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,KAAK,EAAE,MAAM,cAAc;AAC7C,QAAM,SAAS,CAAC;AAEhB,MAAI,MAAM,CAAC,GAAG;AACZ,WAAO,YAAY,MAAM,CAAC,EAAE,YAAY;AAExC,UAAM,iBAAiB,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK;AAGlD,UAAI,EAAE,WAAW,OAAO,GAAG;AACzB,eAAO;AAAA,MACT;AAEA,aAAO,EAAE,YAAY;AAAA,IACvB,CAAC;AAED,WAAO,cAAc,eAAe,CAAC;AAErC,mBAAe,MAAM,CAAC,EAAE,QAAQ,eAAa;AAC3C,YAAM,IAAI,UAAU,MAAM,GAAG;AAC7B,aAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,SAAO,SAAS,CAAC,CAAC,MAAM,MAAM,SAAS,CAAC;AACxC,SAAO,OAAO,MAAM,MAAM,SAAS,CAAC,KAAK;AAEzC,SAAO,WAAW,MAAM;AACtB,UAAM,WAAW,OAAO,SAAS,WAAW;AAE5C,WAAO,OAAO,KAAK,OAAO,MAAM,QAAQ;AAAA,EAC1C;AAEA,SAAO;AACT","sourcesContent":["const DATA_URL_REGEX =\n /^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@/?%\\s<>]*?)$/i;\n\n/**\n * Determine if a given data URL is valid or not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/data_URIs}\n * @see {@link http://tools.ietf.org/html/rfc2397}\n * @see {@link http://tools.ietf.org/html/rfc2396#section2}\n */\nfunction validate(str: string) {\n return DATA_URL_REGEX.test((str || '').trim());\n}\n\nexport interface DataURL {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n base64: boolean;\n contentType?: string;\n data: string;\n mediaType?: string;\n name?: string;\n toBuffer: () => Buffer;\n}\n\n/**\n * Parse a given data URL into its individual parts.\n *\n */\nfunction parse(str: string) {\n if (!validate(str)) {\n return false;\n }\n\n const parts = str.trim().match(DATA_URL_REGEX);\n const parsed = {} as DataURL;\n\n if (parts[1]) {\n parsed.mediaType = parts[1].toLowerCase();\n\n const mediaTypeParts = parts[1].split(';').map(x => {\n // `name` attributes are for filenames so we shouldn't lowercase them as some filesystems are\n // case-sensitive.\n if (x.startsWith('name=')) {\n return x;\n }\n\n return x.toLowerCase();\n });\n\n parsed.contentType = mediaTypeParts[0];\n\n mediaTypeParts.slice(1).forEach(attribute => {\n const p = attribute.split('=');\n parsed[p[0]] = p[1];\n });\n }\n\n parsed.base64 = !!parts[parts.length - 2];\n parsed.data = parts[parts.length - 1] || '';\n\n parsed.toBuffer = () => {\n const encoding = parsed.base64 ? 'base64' : 'utf8';\n\n return Buffer.from(parsed.data, encoding);\n };\n\n return parsed;\n}\n\nexport { parse, validate };\n"]} | ||
| {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAAA,IAAM,cAAA,GACJ,uIAAA;AASF,SAAS,SAAS,GAAA,EAAa;AAC7B,EAAA,OAAO,cAAA,CAAe,IAAA,CAAA,CAAM,GAAA,IAAO,EAAA,EAAI,MAAM,CAAA;AAC/C;AAiBA,SAAS,MAAM,GAAA,EAAa;AAC1B,EAAA,IAAI,CAAC,QAAA,CAAS,GAAG,CAAA,EAAG;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,EAAK,CAAE,MAAM,cAAc,CAAA;AAC7C,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AACZ,IAAA,MAAA,CAAO,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AAExC,IAAA,MAAM,cAAA,GAAiB,MAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,KAAK;AAGlD,MAAA,IAAI,CAAA,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG;AACzB,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,OAAO,EAAE,WAAA,EAAY;AAAA,IACvB,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,WAAA,GAAc,eAAe,CAAC,CAAA;AAErC,IAAA,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAA,SAAA,KAAa;AAC3C,MAAA,MAAM,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAC7B,MAAA,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,MAAA,CAAO,SAAS,CAAC,CAAC,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AACxC,EAAA,MAAA,CAAO,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAEzC,EAAA,MAAA,CAAO,WAAW,MAAM;AACtB,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,GAAS,QAAA,GAAW,MAAA;AAE5C,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,OAAO,MAAA;AACT","file":"index.js","sourcesContent":["const DATA_URL_REGEX =\n /^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@/?%\\s<>]*?)$/i;\n\n/**\n * Determine if a given data URL is valid or not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/data_URIs}\n * @see {@link http://tools.ietf.org/html/rfc2397}\n * @see {@link http://tools.ietf.org/html/rfc2396#section2}\n */\nfunction validate(str: string) {\n return DATA_URL_REGEX.test((str || '').trim());\n}\n\nexport interface DataURL {\n // biome-ignore lint/suspicious/noExplicitAny: `additionalProperties: true`\n [k: string]: any;\n base64: boolean;\n contentType?: string;\n data: string;\n mediaType?: string;\n name?: string;\n toBuffer: () => Buffer;\n}\n\n/**\n * Parse a given data URL into its individual parts.\n *\n */\nfunction parse(str: string) {\n if (!validate(str)) {\n return false;\n }\n\n const parts = str.trim().match(DATA_URL_REGEX);\n const parsed = {} as DataURL;\n\n if (parts[1]) {\n parsed.mediaType = parts[1].toLowerCase();\n\n const mediaTypeParts = parts[1].split(';').map(x => {\n // `name` attributes are for filenames so we shouldn't lowercase them as some filesystems are\n // case-sensitive.\n if (x.startsWith('name=')) {\n return x;\n }\n\n return x.toLowerCase();\n });\n\n parsed.contentType = mediaTypeParts[0];\n\n mediaTypeParts.slice(1).forEach(attribute => {\n const p = attribute.split('=');\n parsed[p[0]] = p[1];\n });\n }\n\n parsed.base64 = !!parts[parts.length - 2];\n parsed.data = parts[parts.length - 1] || '';\n\n parsed.toBuffer = () => {\n const encoding = parsed.base64 ? 'base64' : 'utf8';\n\n return Buffer.from(parsed.data, encoding);\n };\n\n return parsed;\n}\n\nexport { parse, validate };\n"]} |
+12
-12
| { | ||
| "name": "@readme/data-urls", | ||
| "version": "3.0.0", | ||
| "version": "3.0.1", | ||
| "description": "A utility for parsing and validating data URLs.", | ||
@@ -34,3 +34,4 @@ "license": "ISC", | ||
| "build": "tsup", | ||
| "lint": "eslint . --ext .js,.ts", | ||
| "format": "npm run prettier && npx biome check --write", | ||
| "lint": "biome check", | ||
| "prebuild": "rm -rf dist/", | ||
@@ -40,14 +41,13 @@ "prepack": "npm run build", | ||
| "prettier": "prettier --list-different --write \"./**/**.{js,ts}\"", | ||
| "test": "vitest --coverage", | ||
| "test:browser": "vitest --browser.name=chrome --browser.headless" | ||
| "test": "vitest --coverage" | ||
| }, | ||
| "devDependencies": { | ||
| "@readme/eslint-config": "^12.2.0", | ||
| "@types/node": "^20.3.3", | ||
| "@vitest/browser": "^0.34.3", | ||
| "@vitest/coverage-v8": "^0.34.3", | ||
| "eslint": "^8.44.0", | ||
| "@biomejs/biome": "^2.1.3", | ||
| "@readme/standards": "^2.1.1", | ||
| "@types/node": "^24.0.8", | ||
| "@vitest/coverage-v8": "^4.0.2", | ||
| "prettier": "^3.0.3", | ||
| "tsup": "^7.2.0", | ||
| "typescript": "^5.1.6" | ||
| "tsup": "^8.0.1", | ||
| "typescript": "^5.1.6", | ||
| "vitest": "^4.0.2" | ||
| }, | ||
@@ -57,3 +57,3 @@ "browserslist": [ | ||
| ], | ||
| "prettier": "@readme/eslint-config/prettier" | ||
| "prettier": "@readme/standards/prettier" | ||
| } |
+1
-1
@@ -8,3 +8,3 @@ # @readme/data-urls | ||
| [](https://readme.io) | ||
| [](https://readme.io) | ||
@@ -11,0 +11,0 @@ This library is a loose fork of [parse-data-url](https://npm.im/parse-data-url) and [valid-data-url](https://npm.im/valid-data-url). |
17179
6.2%