@trishchuk/coolors-mcp 1.0.1 → 1.1.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.
Files changed (105) hide show
  1. package/.github/workflows/ci.yml +23 -20
  2. package/.github/workflows/deploy-docs.yml +6 -3
  3. package/.github/workflows/release.yml +11 -9
  4. package/README.md +123 -14
  5. package/dist/bin/server.js +997 -256
  6. package/dist/bin/server.js.map +1 -1
  7. package/dist/{chunk-P3ARRKLS.js → chunk-HOMDMKUY.js} +3 -1
  8. package/dist/{chunk-P3ARRKLS.js.map → chunk-HOMDMKUY.js.map} +1 -1
  9. package/dist/{chunk-IQ7NN26V.js → chunk-LHW2ZTOU.js} +14 -2
  10. package/dist/chunk-LHW2ZTOU.js.map +1 -0
  11. package/dist/color/index.js +1 -1
  12. package/dist/coolors-mcp.d.ts +4 -4
  13. package/dist/coolors-mcp.js +1 -1
  14. package/eslint.config.ts +13 -0
  15. package/jsr.json +1 -1
  16. package/package.json +16 -12
  17. package/src/bin/server.ts +13 -1
  18. package/src/color/__tests__/extract-colors.test.ts +20 -30
  19. package/src/color/apca.ts +105 -0
  20. package/src/color/color-blindness.ts +109 -0
  21. package/src/coolors-mcp.ts +1 -1
  22. package/src/session.ts +10 -2
  23. package/src/theme/matcher.ts +1 -1
  24. package/src/theme/refactor.ts +1 -1
  25. package/src/theme/types.ts +3 -0
  26. package/src/tools/__tests__/cohesion.test.ts +97 -0
  27. package/src/tools/__tests__/color-blindness.test.ts +45 -0
  28. package/src/tools/__tests__/color-conversion.test.ts +38 -0
  29. package/src/tools/__tests__/contrast-checker.test.ts +56 -0
  30. package/src/tools/__tests__/palette-export.test.ts +54 -0
  31. package/src/tools/adjust-color.tool.ts +80 -0
  32. package/src/tools/cohesion.tools.ts +380 -0
  33. package/src/tools/color-blindness.tool.ts +168 -0
  34. package/src/tools/color-conversion.tool.ts +1 -1
  35. package/src/tools/contrast-checker.tool.ts +53 -14
  36. package/src/tools/dislike-analyzer.tool.ts +41 -54
  37. package/src/tools/image-extraction.tools.ts +62 -115
  38. package/src/tools/index.ts +15 -2
  39. package/src/tools/palette-export.tool.ts +174 -0
  40. package/src/tools/palette-with-locks.tool.ts +8 -6
  41. package/src/types.ts +2 -3
  42. package/tsconfig.json +12 -2
  43. package/vitest.config.js +1 -3
  44. package/.claude/settings.local.json +0 -35
  45. package/.env +0 -2
  46. package/.mcp.json +0 -12
  47. package/CLAUDE.md +0 -201
  48. package/DOCUMENTATION.md +0 -274
  49. package/GEMINI.md +0 -54
  50. package/TOOLS_UK.md +0 -233
  51. package/demo/content_based_color.png +0 -0
  52. package/demo/music-player.html +0 -621
  53. package/demo/podcast-player.html +0 -903
  54. package/dist/chunk-IQ7NN26V.js.map +0 -1
  55. package/docs/.vitepress/cache/deps/@braintree_sanitize-url.js +0 -111
  56. package/docs/.vitepress/cache/deps/@braintree_sanitize-url.js.map +0 -7
  57. package/docs/.vitepress/cache/deps/_metadata.json +0 -127
  58. package/docs/.vitepress/cache/deps/chunk-BUSYA2B4.js +0 -12
  59. package/docs/.vitepress/cache/deps/chunk-BUSYA2B4.js.map +0 -7
  60. package/docs/.vitepress/cache/deps/chunk-JD3CXNQ6.js +0 -13614
  61. package/docs/.vitepress/cache/deps/chunk-JD3CXNQ6.js.map +0 -7
  62. package/docs/.vitepress/cache/deps/chunk-SYPOPCWC.js +0 -10698
  63. package/docs/.vitepress/cache/deps/chunk-SYPOPCWC.js.map +0 -7
  64. package/docs/.vitepress/cache/deps/cytoscape-cose-bilkent.js +0 -5609
  65. package/docs/.vitepress/cache/deps/cytoscape-cose-bilkent.js.map +0 -7
  66. package/docs/.vitepress/cache/deps/cytoscape.js +0 -36234
  67. package/docs/.vitepress/cache/deps/cytoscape.js.map +0 -7
  68. package/docs/.vitepress/cache/deps/dayjs.js +0 -507
  69. package/docs/.vitepress/cache/deps/dayjs.js.map +0 -7
  70. package/docs/.vitepress/cache/deps/debug.js +0 -512
  71. package/docs/.vitepress/cache/deps/debug.js.map +0 -7
  72. package/docs/.vitepress/cache/deps/package.json +0 -3
  73. package/docs/.vitepress/cache/deps/prismjs.js +0 -1638
  74. package/docs/.vitepress/cache/deps/prismjs.js.map +0 -7
  75. package/docs/.vitepress/cache/deps/prismjs_components_prism-bash.js +0 -235
  76. package/docs/.vitepress/cache/deps/prismjs_components_prism-bash.js.map +0 -7
  77. package/docs/.vitepress/cache/deps/prismjs_components_prism-javascript.js +0 -173
  78. package/docs/.vitepress/cache/deps/prismjs_components_prism-javascript.js.map +0 -7
  79. package/docs/.vitepress/cache/deps/prismjs_components_prism-json.js +0 -27
  80. package/docs/.vitepress/cache/deps/prismjs_components_prism-json.js.map +0 -7
  81. package/docs/.vitepress/cache/deps/prismjs_components_prism-python.js +0 -72
  82. package/docs/.vitepress/cache/deps/prismjs_components_prism-python.js.map +0 -7
  83. package/docs/.vitepress/cache/deps/prismjs_components_prism-typescript.js +0 -56
  84. package/docs/.vitepress/cache/deps/prismjs_components_prism-typescript.js.map +0 -7
  85. package/docs/.vitepress/cache/deps/prismjs_components_prism-yaml.js +0 -107
  86. package/docs/.vitepress/cache/deps/prismjs_components_prism-yaml.js.map +0 -7
  87. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -5074
  88. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  89. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -584
  90. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  91. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +0 -1483
  92. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map +0 -7
  93. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +0 -1779
  94. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map +0 -7
  95. package/docs/.vitepress/cache/deps/vitepress___minisearch.js +0 -2023
  96. package/docs/.vitepress/cache/deps/vitepress___minisearch.js.map +0 -7
  97. package/docs/.vitepress/cache/deps/vue.js +0 -344
  98. package/docs/.vitepress/cache/deps/vue.js.map +0 -7
  99. package/examples/theme-matching.md +0 -113
  100. package/mcp-config.json +0 -8
  101. package/note.md +0 -34
  102. package/research_results.md +0 -53
  103. package/src/tools/colors.ts +0 -31
  104. package/src/tools/registry.ts +0 -142
  105. package/src/tools/simple-tools.ts +0 -37
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/coolors-mcp.ts","../src/session.ts"],"sourcesContent":["import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { EventEmitter } from \"events\";\nimport { StrictEventEmitter } from \"strict-event-emitter-types\";\n\nimport { CoolorsMCPSession } from \"./session.js\";\nimport {\n CoolorsMCPEvents,\n CoolorsMCPSessionAuth,\n ServerOptions,\n Tool,\n ToolParameters,\n} from \"./types.js\";\n\nexport class CoolorsMcp extends (EventEmitter as {\n new (): StrictEventEmitter<EventEmitter, CoolorsMCPEvents>;\n}) {\n #sessions: CoolorsMCPSession[] = [];\n #tools: Tool<CoolorsMCPSessionAuth>[] = [];\n\n constructor(public options: ServerOptions<CoolorsMCPSessionAuth>) {\n super();\n }\n\n public addTool<Params extends ToolParameters>(\n tool: Tool<CoolorsMCPSessionAuth, Params>,\n ) {\n this.#tools.push(tool as unknown as Tool<CoolorsMCPSessionAuth>);\n }\n\n public async start() {\n const transport = new StdioServerTransport();\n const session = new CoolorsMCPSession(this.options, this.#tools);\n this.#sessions.push(session);\n await session.connect(transport);\n this.emit(\"connect\", { session });\n }\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport {\n CallToolRequestSchema,\n ErrorCode,\n ListToolsRequestSchema,\n McpError,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { EventEmitter } from \"events\";\nimport { StrictEventEmitter } from \"strict-event-emitter-types\";\nimport { toJsonSchema } from \"xsschema\";\n\nimport {\n CoolorsMCPSessionAuth,\n CoolorsMCPSessionEvents,\n ServerOptions,\n Tool,\n} from \"./types.js\";\n\nexport class CoolorsMCPSession extends (EventEmitter as {\n new (): StrictEventEmitter<EventEmitter, CoolorsMCPSessionEvents>;\n}) {\n #server: Server;\n #tools: Tool<CoolorsMCPSessionAuth>[];\n\n constructor(\n options: ServerOptions<CoolorsMCPSessionAuth>,\n tools: Tool<CoolorsMCPSessionAuth>[],\n ) {\n super();\n this.#server = new Server(\n { name: options.name, version: options.version },\n { capabilities: { tools: {} } },\n );\n this.#tools = tools;\n this.setupToolHandlers();\n }\n\n public async connect(transport: Transport) {\n await this.#server.connect(transport);\n this.emit(\"ready\");\n }\n\n private setupToolHandlers() {\n this.#server.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: await Promise.all(\n this.#tools.map(async (tool) => {\n return {\n annotations: tool.annotations,\n description: tool.description,\n inputSchema: tool.parameters\n ? await toJsonSchema(tool.parameters)\n : {\n additionalProperties: false,\n properties: {},\n type: \"object\",\n },\n name: tool.name,\n };\n }),\n ),\n };\n });\n\n this.#server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const tool = this.#tools.find(\n (tool) => tool.name === request.params.name,\n );\n\n if (!tool) {\n throw new McpError(\n ErrorCode.MethodNotFound,\n `Unknown tool: ${request.params.name}`,\n );\n }\n\n let args: unknown = undefined;\n\n if (tool.parameters) {\n const parsed = await tool.parameters[\"~standard\"].validate(\n request.params.arguments,\n );\n\n if (parsed.issues) {\n const friendlyErrors = parsed.issues\n .map((issue) => {\n const path = issue.path?.join(\".\") || \"root\";\n return `${path}: ${issue.message}`;\n })\n .join(\", \");\n\n throw new McpError(\n ErrorCode.InvalidParams,\n `Tool '${request.params.name}' parameter validation failed: ${friendlyErrors}. Please check the parameter types and values according to the tool's schema.`,\n );\n }\n\n args = parsed.value;\n }\n\n const result = await tool.execute(\n args as Parameters<typeof tool.execute>[0],\n {} as CoolorsMCPSessionAuth,\n );\n\n if (typeof result === \"string\") {\n return {\n content: [{ text: result, type: \"text\" }],\n };\n }\n\n return result;\n });\n }\n}\n"],"mappings":";AAAA,SAAS,4BAA4B;AACrC,SAAS,gBAAAA,qBAAoB;;;ACD7B,SAAS,cAAc;AAEvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAE7B,SAAS,oBAAoB;AAStB,IAAM,oBAAN,cAAiC,aAErC;AAAA,EACD;AAAA,EACA;AAAA,EAEA,YACE,SACA,OACA;AACA,UAAM;AACN,SAAK,UAAU,IAAI;AAAA,MACjB,EAAE,MAAM,QAAQ,MAAM,SAAS,QAAQ,QAAQ;AAAA,MAC/C,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE;AAAA,IAChC;AACA,SAAK,SAAS;AACd,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,MAAa,QAAQ,WAAsB;AACzC,UAAM,KAAK,QAAQ,QAAQ,SAAS;AACpC,SAAK,KAAK,OAAO;AAAA,EACnB;AAAA,EAEQ,oBAAoB;AAC1B,SAAK,QAAQ,kBAAkB,wBAAwB,YAAY;AACjE,aAAO;AAAA,QACL,OAAO,MAAM,QAAQ;AAAA,UACnB,KAAK,OAAO,IAAI,OAAO,SAAS;AAC9B,mBAAO;AAAA,cACL,aAAa,KAAK;AAAA,cAClB,aAAa,KAAK;AAAA,cAClB,aAAa,KAAK,aACd,MAAM,aAAa,KAAK,UAAU,IAClC;AAAA,gBACE,sBAAsB;AAAA,gBACtB,YAAY,CAAC;AAAA,gBACb,MAAM;AAAA,cACR;AAAA,cACJ,MAAM,KAAK;AAAA,YACb;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAED,SAAK,QAAQ,kBAAkB,uBAAuB,OAAO,YAAY;AACvE,YAAM,OAAO,KAAK,OAAO;AAAA,QACvB,CAACC,UAASA,MAAK,SAAS,QAAQ,OAAO;AAAA,MACzC;AAEA,UAAI,CAAC,MAAM;AACT,cAAM,IAAI;AAAA,UACR,UAAU;AAAA,UACV,iBAAiB,QAAQ,OAAO,IAAI;AAAA,QACtC;AAAA,MACF;AAEA,UAAI,OAAgB;AAEpB,UAAI,KAAK,YAAY;AACnB,cAAM,SAAS,MAAM,KAAK,WAAW,WAAW,EAAE;AAAA,UAChD,QAAQ,OAAO;AAAA,QACjB;AAEA,YAAI,OAAO,QAAQ;AACjB,gBAAM,iBAAiB,OAAO,OAC3B,IAAI,CAAC,UAAU;AACd,kBAAM,OAAO,MAAM,MAAM,KAAK,GAAG,KAAK;AACtC,mBAAO,GAAG,IAAI,KAAK,MAAM,OAAO;AAAA,UAClC,CAAC,EACA,KAAK,IAAI;AAEZ,gBAAM,IAAI;AAAA,YACR,UAAU;AAAA,YACV,SAAS,QAAQ,OAAO,IAAI,kCAAkC,cAAc;AAAA,UAC9E;AAAA,QACF;AAEA,eAAO,OAAO;AAAA,MAChB;AAEA,YAAM,SAAS,MAAM,KAAK;AAAA,QACxB;AAAA,QACA,CAAC;AAAA,MACH;AAEA,UAAI,OAAO,WAAW,UAAU;AAC9B,eAAO;AAAA,UACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAA,QAC1C;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;ADtGO,IAAM,aAAN,cAA0BC,cAE9B;AAAA,EAID,YAAmB,SAA+C;AAChE,UAAM;AADW;AAAA,EAEnB;AAAA,EALA,YAAiC,CAAC;AAAA,EAClC,SAAwC,CAAC;AAAA,EAMlC,QACL,MACA;AACA,SAAK,OAAO,KAAK,IAA8C;AAAA,EACjE;AAAA,EAEA,MAAa,QAAQ;AACnB,UAAM,YAAY,IAAI,qBAAqB;AAC3C,UAAM,UAAU,IAAI,kBAAkB,KAAK,SAAS,KAAK,MAAM;AAC/D,SAAK,UAAU,KAAK,OAAO;AAC3B,UAAM,QAAQ,QAAQ,SAAS;AAC/B,SAAK,KAAK,WAAW,EAAE,QAAQ,CAAC;AAAA,EAClC;AACF;","names":["EventEmitter","tool","EventEmitter"]}
@@ -1,111 +0,0 @@
1
- import { __commonJS } from "./chunk-BUSYA2B4.js";
2
-
3
- // node_modules/@braintree/sanitize-url/dist/constants.js
4
- var require_constants = __commonJS({
5
- "node_modules/@braintree/sanitize-url/dist/constants.js"(exports) {
6
- "use strict";
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.BLANK_URL =
9
- exports.relativeFirstCharacters =
10
- exports.whitespaceEscapeCharsRegex =
11
- exports.urlSchemeRegex =
12
- exports.ctrlCharactersRegex =
13
- exports.htmlCtrlEntityRegex =
14
- exports.htmlEntitiesRegex =
15
- exports.invalidProtocolRegex =
16
- void 0;
17
- exports.invalidProtocolRegex = /^([^\w]*)(javascript|data|vbscript)/im;
18
- exports.htmlEntitiesRegex = /&#(\w+)(^\w|;)?/g;
19
- exports.htmlCtrlEntityRegex = /&(newline|tab);/gi;
20
- exports.ctrlCharactersRegex =
21
- /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;
22
- exports.urlSchemeRegex = /^.+(:|&colon;)/gim;
23
- exports.whitespaceEscapeCharsRegex = /(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;
24
- exports.relativeFirstCharacters = [".", "/"];
25
- exports.BLANK_URL = "about:blank";
26
- },
27
- });
28
-
29
- // node_modules/@braintree/sanitize-url/dist/index.js
30
- var require_dist = __commonJS({
31
- "node_modules/@braintree/sanitize-url/dist/index.js"(exports) {
32
- Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.sanitizeUrl = void 0;
34
- var constants_1 = require_constants();
35
- function isRelativeUrlWithoutProtocol(url) {
36
- return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;
37
- }
38
- function decodeHtmlCharacters(str) {
39
- var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, "");
40
- return removedNullByte.replace(
41
- constants_1.htmlEntitiesRegex,
42
- function (match, dec) {
43
- return String.fromCharCode(dec);
44
- },
45
- );
46
- }
47
- function isValidUrl(url) {
48
- return URL.canParse(url);
49
- }
50
- function decodeURI(uri) {
51
- try {
52
- return decodeURIComponent(uri);
53
- } catch (e) {
54
- return uri;
55
- }
56
- }
57
- function sanitizeUrl(url) {
58
- if (!url) {
59
- return constants_1.BLANK_URL;
60
- }
61
- var charsToDecode;
62
- var decodedUrl = decodeURI(url.trim());
63
- do {
64
- decodedUrl = decodeHtmlCharacters(decodedUrl)
65
- .replace(constants_1.htmlCtrlEntityRegex, "")
66
- .replace(constants_1.ctrlCharactersRegex, "")
67
- .replace(constants_1.whitespaceEscapeCharsRegex, "")
68
- .trim();
69
- decodedUrl = decodeURI(decodedUrl);
70
- charsToDecode =
71
- decodedUrl.match(constants_1.ctrlCharactersRegex) ||
72
- decodedUrl.match(constants_1.htmlEntitiesRegex) ||
73
- decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||
74
- decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);
75
- } while (charsToDecode && charsToDecode.length > 0);
76
- var sanitizedUrl = decodedUrl;
77
- if (!sanitizedUrl) {
78
- return constants_1.BLANK_URL;
79
- }
80
- if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {
81
- return sanitizedUrl;
82
- }
83
- var trimmedUrl = sanitizedUrl.trimStart();
84
- var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);
85
- if (!urlSchemeParseResults) {
86
- return sanitizedUrl;
87
- }
88
- var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();
89
- if (constants_1.invalidProtocolRegex.test(urlScheme)) {
90
- return constants_1.BLANK_URL;
91
- }
92
- var backSanitized = trimmedUrl.replace(/\\/g, "/");
93
- if (urlScheme === "mailto:" || urlScheme.includes("://")) {
94
- return backSanitized;
95
- }
96
- if (urlScheme === "http:" || urlScheme === "https:") {
97
- if (!isValidUrl(backSanitized)) {
98
- return constants_1.BLANK_URL;
99
- }
100
- var url_1 = new URL(backSanitized);
101
- url_1.protocol = url_1.protocol.toLowerCase();
102
- url_1.hostname = url_1.hostname.toLowerCase();
103
- return url_1.toString();
104
- }
105
- return backSanitized;
106
- }
107
- exports.sanitizeUrl = sanitizeUrl;
108
- },
109
- });
110
- export default require_dist();
111
- //# sourceMappingURL=@braintree_sanitize-url.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../node_modules/@braintree/sanitize-url/dist/constants.js", "../../../../node_modules/@braintree/sanitize-url/dist/index.js"],
4
- "sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BLANK_URL = exports.relativeFirstCharacters = exports.whitespaceEscapeCharsRegex = exports.urlSchemeRegex = exports.ctrlCharactersRegex = exports.htmlCtrlEntityRegex = exports.htmlEntitiesRegex = exports.invalidProtocolRegex = void 0;\nexports.invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nexports.htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nexports.htmlCtrlEntityRegex = /&(newline|tab);/gi;\nexports.ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nexports.urlSchemeRegex = /^.+(:|&colon;)/gim;\nexports.whitespaceEscapeCharsRegex = /(\\\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;\nexports.relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitizeUrl = void 0;\nvar constants_1 = require(\"./constants\");\nfunction isRelativeUrlWithoutProtocol(url) {\n return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;\n}\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, \"\");\n return removedNullByte.replace(constants_1.htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction isValidUrl(url) {\n return URL.canParse(url);\n}\nfunction decodeURI(uri) {\n try {\n return decodeURIComponent(uri);\n }\n catch (e) {\n // Ignoring error\n // It is possible that the URI contains a `%` not associated\n // with URI/URL-encoding.\n return uri;\n }\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return constants_1.BLANK_URL;\n }\n var charsToDecode;\n var decodedUrl = decodeURI(url.trim());\n do {\n decodedUrl = decodeHtmlCharacters(decodedUrl)\n .replace(constants_1.htmlCtrlEntityRegex, \"\")\n .replace(constants_1.ctrlCharactersRegex, \"\")\n .replace(constants_1.whitespaceEscapeCharsRegex, \"\")\n .trim();\n decodedUrl = decodeURI(decodedUrl);\n charsToDecode =\n decodedUrl.match(constants_1.ctrlCharactersRegex) ||\n decodedUrl.match(constants_1.htmlEntitiesRegex) ||\n decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||\n decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);\n } while (charsToDecode && charsToDecode.length > 0);\n var sanitizedUrl = decodedUrl;\n if (!sanitizedUrl) {\n return constants_1.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n // Remove any leading whitespace before checking the URL scheme\n var trimmedUrl = sanitizedUrl.trimStart();\n var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();\n if (constants_1.invalidProtocolRegex.test(urlScheme)) {\n return constants_1.BLANK_URL;\n }\n var backSanitized = trimmedUrl.replace(/\\\\/g, \"/\");\n // Handle special cases for mailto: and custom deep-link protocols\n if (urlScheme === \"mailto:\" || urlScheme.includes(\"://\")) {\n return backSanitized;\n }\n // For http and https URLs, perform additional validation\n if (urlScheme === \"http:\" || urlScheme === \"https:\") {\n if (!isValidUrl(backSanitized)) {\n return constants_1.BLANK_URL;\n }\n var url_1 = new URL(backSanitized);\n url_1.protocol = url_1.protocol.toLowerCase();\n url_1.hostname = url_1.hostname.toLowerCase();\n return url_1.toString();\n }\n return backSanitized;\n}\nexports.sanitizeUrl = sanitizeUrl;\n"],
5
- "mappings": ";;;;;AAAA;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,YAAY,QAAQ,0BAA0B,QAAQ,6BAA6B,QAAQ,iBAAiB,QAAQ,sBAAsB,QAAQ,sBAAsB,QAAQ,oBAAoB,QAAQ,uBAAuB;AAC3O,YAAQ,uBAAuB;AAC/B,YAAQ,oBAAoB;AAC5B,YAAQ,sBAAsB;AAC9B,YAAQ,sBAAsB;AAC9B,YAAQ,iBAAiB;AACzB,YAAQ,6BAA6B;AACrC,YAAQ,0BAA0B,CAAC,KAAK,GAAG;AAC3C,YAAQ,YAAY;AAAA;AAAA;;;ACVpB;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,YAAQ,cAAc;AACtB,QAAI,cAAc;AAClB,aAAS,6BAA6B,KAAK;AACvC,aAAO,YAAY,wBAAwB,QAAQ,IAAI,CAAC,CAAC,IAAI;AAAA,IACjE;AACA,aAAS,qBAAqB,KAAK;AAC/B,UAAI,kBAAkB,IAAI,QAAQ,YAAY,qBAAqB,EAAE;AACrE,aAAO,gBAAgB,QAAQ,YAAY,mBAAmB,SAAU,OAAO,KAAK;AAChF,eAAO,OAAO,aAAa,GAAG;AAAA,MAClC,CAAC;AAAA,IACL;AACA,aAAS,WAAW,KAAK;AACrB,aAAO,IAAI,SAAS,GAAG;AAAA,IAC3B;AACA,aAAS,UAAU,KAAK;AACpB,UAAI;AACA,eAAO,mBAAmB,GAAG;AAAA,MACjC,SACO,GAAG;AAIN,eAAO;AAAA,MACX;AAAA,IACJ;AACA,aAAS,YAAY,KAAK;AACtB,UAAI,CAAC,KAAK;AACN,eAAO,YAAY;AAAA,MACvB;AACA,UAAI;AACJ,UAAI,aAAa,UAAU,IAAI,KAAK,CAAC;AACrC,SAAG;AACC,qBAAa,qBAAqB,UAAU,EACvC,QAAQ,YAAY,qBAAqB,EAAE,EAC3C,QAAQ,YAAY,qBAAqB,EAAE,EAC3C,QAAQ,YAAY,4BAA4B,EAAE,EAClD,KAAK;AACV,qBAAa,UAAU,UAAU;AACjC,wBACI,WAAW,MAAM,YAAY,mBAAmB,KAC5C,WAAW,MAAM,YAAY,iBAAiB,KAC9C,WAAW,MAAM,YAAY,mBAAmB,KAChD,WAAW,MAAM,YAAY,0BAA0B;AAAA,MACnE,SAAS,iBAAiB,cAAc,SAAS;AACjD,UAAI,eAAe;AACnB,UAAI,CAAC,cAAc;AACf,eAAO,YAAY;AAAA,MACvB;AACA,UAAI,6BAA6B,YAAY,GAAG;AAC5C,eAAO;AAAA,MACX;AAEA,UAAI,aAAa,aAAa,UAAU;AACxC,UAAI,wBAAwB,WAAW,MAAM,YAAY,cAAc;AACvE,UAAI,CAAC,uBAAuB;AACxB,eAAO;AAAA,MACX;AACA,UAAI,YAAY,sBAAsB,CAAC,EAAE,YAAY,EAAE,KAAK;AAC5D,UAAI,YAAY,qBAAqB,KAAK,SAAS,GAAG;AAClD,eAAO,YAAY;AAAA,MACvB;AACA,UAAI,gBAAgB,WAAW,QAAQ,OAAO,GAAG;AAEjD,UAAI,cAAc,aAAa,UAAU,SAAS,KAAK,GAAG;AACtD,eAAO;AAAA,MACX;AAEA,UAAI,cAAc,WAAW,cAAc,UAAU;AACjD,YAAI,CAAC,WAAW,aAAa,GAAG;AAC5B,iBAAO,YAAY;AAAA,QACvB;AACA,YAAI,QAAQ,IAAI,IAAI,aAAa;AACjC,cAAM,WAAW,MAAM,SAAS,YAAY;AAC5C,cAAM,WAAW,MAAM,SAAS,YAAY;AAC5C,eAAO,MAAM,SAAS;AAAA,MAC1B;AACA,aAAO;AAAA,IACX;AACA,YAAQ,cAAc;AAAA;AAAA;",
6
- "names": []
7
- }
@@ -1,127 +0,0 @@
1
- {
2
- "hash": "b238d3de",
3
- "configHash": "5131fe82",
4
- "lockfileHash": "5dcae059",
5
- "browserHash": "e824103e",
6
- "optimized": {
7
- "vue": {
8
- "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
9
- "file": "vue.js",
10
- "fileHash": "928a2568",
11
- "needsInterop": false
12
- },
13
- "vitepress > @vue/devtools-api": {
14
- "src": "../../../../node_modules/@vue/devtools-api/dist/index.js",
15
- "file": "vitepress___@vue_devtools-api.js",
16
- "fileHash": "16df9887",
17
- "needsInterop": false
18
- },
19
- "vitepress > @vueuse/core": {
20
- "src": "../../../../node_modules/@vueuse/core/index.mjs",
21
- "file": "vitepress___@vueuse_core.js",
22
- "fileHash": "ca0be31d",
23
- "needsInterop": false
24
- },
25
- "@braintree/sanitize-url": {
26
- "src": "../../../../node_modules/@braintree/sanitize-url/dist/index.js",
27
- "file": "@braintree_sanitize-url.js",
28
- "fileHash": "7e02544c",
29
- "needsInterop": true
30
- },
31
- "dayjs": {
32
- "src": "../../../../node_modules/dayjs/dayjs.min.js",
33
- "file": "dayjs.js",
34
- "fileHash": "af894476",
35
- "needsInterop": true
36
- },
37
- "debug": {
38
- "src": "../../../../node_modules/debug/src/browser.js",
39
- "file": "debug.js",
40
- "fileHash": "64e8b39d",
41
- "needsInterop": true
42
- },
43
- "cytoscape-cose-bilkent": {
44
- "src": "../../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js",
45
- "file": "cytoscape-cose-bilkent.js",
46
- "fileHash": "f30d644d",
47
- "needsInterop": true
48
- },
49
- "cytoscape": {
50
- "src": "../../../../node_modules/cytoscape/dist/cytoscape.esm.mjs",
51
- "file": "cytoscape.js",
52
- "fileHash": "b22d7f5a",
53
- "needsInterop": false
54
- },
55
- "vitepress > @vueuse/integrations/useFocusTrap": {
56
- "src": "../../../../node_modules/@vueuse/integrations/useFocusTrap.mjs",
57
- "file": "vitepress___@vueuse_integrations_useFocusTrap.js",
58
- "fileHash": "e6e2e240",
59
- "needsInterop": false
60
- },
61
- "vitepress > mark.js/src/vanilla.js": {
62
- "src": "../../../../node_modules/mark.js/src/vanilla.js",
63
- "file": "vitepress___mark__js_src_vanilla__js.js",
64
- "fileHash": "c956e466",
65
- "needsInterop": false
66
- },
67
- "vitepress > minisearch": {
68
- "src": "../../../../node_modules/minisearch/dist/es/index.js",
69
- "file": "vitepress___minisearch.js",
70
- "fileHash": "8beb61c4",
71
- "needsInterop": false
72
- },
73
- "prismjs": {
74
- "src": "../../../../node_modules/prismjs/prism.js",
75
- "file": "prismjs.js",
76
- "fileHash": "f6861f5f",
77
- "needsInterop": true
78
- },
79
- "prismjs/components/prism-bash": {
80
- "src": "../../../../node_modules/prismjs/components/prism-bash.js",
81
- "file": "prismjs_components_prism-bash.js",
82
- "fileHash": "d636ca5c",
83
- "needsInterop": true
84
- },
85
- "prismjs/components/prism-python": {
86
- "src": "../../../../node_modules/prismjs/components/prism-python.js",
87
- "file": "prismjs_components_prism-python.js",
88
- "fileHash": "901b1add",
89
- "needsInterop": true
90
- },
91
- "prismjs/components/prism-typescript": {
92
- "src": "../../../../node_modules/prismjs/components/prism-typescript.js",
93
- "file": "prismjs_components_prism-typescript.js",
94
- "fileHash": "c4bf171e",
95
- "needsInterop": true
96
- },
97
- "prismjs/components/prism-javascript": {
98
- "src": "../../../../node_modules/prismjs/components/prism-javascript.js",
99
- "file": "prismjs_components_prism-javascript.js",
100
- "fileHash": "63110d26",
101
- "needsInterop": true
102
- },
103
- "prismjs/components/prism-json": {
104
- "src": "../../../../node_modules/prismjs/components/prism-json.js",
105
- "file": "prismjs_components_prism-json.js",
106
- "fileHash": "58a15f2e",
107
- "needsInterop": true
108
- },
109
- "prismjs/components/prism-yaml": {
110
- "src": "../../../../node_modules/prismjs/components/prism-yaml.js",
111
- "file": "prismjs_components_prism-yaml.js",
112
- "fileHash": "b01ef0f8",
113
- "needsInterop": true
114
- }
115
- },
116
- "chunks": {
117
- "chunk-SYPOPCWC": {
118
- "file": "chunk-SYPOPCWC.js"
119
- },
120
- "chunk-JD3CXNQ6": {
121
- "file": "chunk-JD3CXNQ6.js"
122
- },
123
- "chunk-BUSYA2B4": {
124
- "file": "chunk-BUSYA2B4.js"
125
- }
126
- }
127
- }
@@ -1,12 +0,0 @@
1
- var __getOwnPropNames = Object.getOwnPropertyNames;
2
- var __commonJS = (cb, mod) =>
3
- function __require() {
4
- return (
5
- mod ||
6
- (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod),
7
- mod.exports
8
- );
9
- };
10
-
11
- export { __commonJS };
12
- //# sourceMappingURL=chunk-BUSYA2B4.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }