@windrun-huaiin/lib 6.2.1 → 7.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.
@@ -1,65 +1,51 @@
1
+ import { __awaiter } from './node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.2/node_modules/tslib/tslib.es6.mjs';
1
2
  import { remark } from 'remark';
2
3
  import remarkGfm from 'remark-gfm';
3
4
  import remarkMdx from 'remark-mdx';
4
5
  import remarkFrontmatter from 'remark-frontmatter';
5
6
  import { visit } from 'unist-util-visit';
6
7
 
7
- var __async = (__this, __arguments, generator) => {
8
- return new Promise((resolve, reject) => {
9
- var fulfilled = (value) => {
10
- try {
11
- step(generator.next(value));
12
- } catch (e) {
13
- reject(e);
14
- }
15
- };
16
- var rejected = (value) => {
17
- try {
18
- step(generator.throw(value));
19
- } catch (e) {
20
- reject(e);
21
- }
22
- };
23
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
24
- step((generator = generator.apply(__this, __arguments)).next());
25
- });
26
- };
27
8
  function remarkRemoveFrontmatter() {
28
- return (tree) => {
29
- visit(tree, "yaml", (_node, index, parent) => {
30
- if (parent && typeof index === "number") {
31
- parent.children.splice(index, 1);
32
- }
33
- });
34
- };
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ return (tree) => {
11
+ visit(tree, 'yaml', (_node, index, parent) => {
12
+ if (parent && typeof index === 'number') {
13
+ parent.children.splice(index, 1);
14
+ }
15
+ });
16
+ };
35
17
  }
36
- var processor = remark().use(remarkFrontmatter, ["yaml"]).use(remarkRemoveFrontmatter).use(remarkMdx).use(remarkGfm);
18
+ // remark(), parse the MDX file into MDAST
19
+ // remarkPlugins(), parse the MDAST into HAST
20
+ // rehypePlugins(), render the HAST into React components, i.e. HTML code
21
+ const processor = remark()
22
+ // parse the md file header
23
+ .use(remarkFrontmatter, ['yaml'])
24
+ // remove the md file header
25
+ .use(remarkRemoveFrontmatter)
26
+ .use(remarkMdx)
27
+ .use(remarkGfm);
37
28
  function getLLMText(mdxContent, title, description) {
38
- return __async(this, null, function* () {
39
- if (typeof mdxContent !== "string") {
40
- console.error("getLLMText: mdxContent received was not a string. Type:", typeof mdxContent);
41
- return `# Error
42
-
43
- Invalid content received by text processor.`;
44
- }
45
- try {
46
- const processed = yield processor.process(mdxContent);
47
- const contentWithoutFrontmatter = processed.value;
48
- const markdownParts = [
49
- title ? `# ${title}` : null,
50
- description,
51
- contentWithoutFrontmatter.trim()
52
- ];
53
- return markdownParts.filter((part) => part != null).join("\n\n");
54
- } catch (processingError) {
55
- console.error("Error during remark processing in getLLMText:", processingError);
56
- return `# Error
57
-
58
- Error processing MDX content.`;
59
- }
60
- });
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ if (typeof mdxContent !== 'string') {
31
+ console.error('getLLMText: mdxContent received was not a string. Type:', typeof mdxContent);
32
+ return `# Error\n\nInvalid content received by text processor.`;
33
+ }
34
+ try {
35
+ const processed = yield processor.process(mdxContent);
36
+ const contentWithoutFrontmatter = processed.value;
37
+ const markdownParts = [
38
+ title ? `# ${title}` : null,
39
+ description,
40
+ contentWithoutFrontmatter.trim()
41
+ ];
42
+ return markdownParts.filter(part => part != null).join('\n\n');
43
+ }
44
+ catch (processingError) {
45
+ console.error('Error during remark processing in getLLMText:', processingError);
46
+ return `# Error\n\nError processing MDX content.`;
47
+ }
48
+ });
61
49
  }
62
50
 
63
51
  export { getLLMText };
64
- //# sourceMappingURL=llm-utils.mjs.map
65
- //# sourceMappingURL=llm-utils.mjs.map
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ /******************************************************************************
4
+ Copyright (c) Microsoft Corporation.
5
+
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ PERFORMANCE OF THIS SOFTWARE.
16
+ ***************************************************************************** */
17
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
18
+
19
+
20
+ function __awaiter(thisArg, _arguments, P, generator) {
21
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22
+ return new (P || (P = Promise))(function (resolve, reject) {
23
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
24
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
25
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
27
+ });
28
+ }
29
+
30
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
31
+ var e = new Error(message);
32
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
33
+ };
34
+
35
+ exports.__awaiter = __awaiter;
@@ -0,0 +1,33 @@
1
+ /******************************************************************************
2
+ Copyright (c) Microsoft Corporation.
3
+
4
+ Permission to use, copy, modify, and/or distribute this software for any
5
+ purpose with or without fee is hereby granted.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
14
+ ***************************************************************************** */
15
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
16
+
17
+
18
+ function __awaiter(thisArg, _arguments, P, generator) {
19
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
+ return new (P || (P = Promise))(function (resolve, reject) {
21
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
25
+ });
26
+ }
27
+
28
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
29
+ var e = new Error(message);
30
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
31
+ };
32
+
33
+ export { __awaiter };
package/dist/utils.d.ts CHANGED
@@ -1,8 +1,6 @@
1
- import * as React from 'react';
2
- import { ClassValue } from 'clsx';
3
-
4
- declare function cn(...inputs: ClassValue[]): string;
5
- declare function formatTimestamp(timestamp: string, formatter: string): string;
6
- declare function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>): void;
7
-
8
- export { cn, formatTimestamp, handlePastePlainText };
1
+ import type * as React from "react";
2
+ import { type ClassValue } from "clsx";
3
+ export declare function cn(...inputs: ClassValue[]): string;
4
+ export declare function formatTimestamp(timestamp: string, formatter: string): string;
5
+ export declare function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>): void;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAI5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UA4BnE;AAGD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,QAgBxE"}
package/dist/utils.js CHANGED
@@ -4,47 +4,55 @@ var clsx = require('clsx');
4
4
  var tailwindMerge = require('tailwind-merge');
5
5
  var dateFns = require('date-fns');
6
6
 
7
- // src/utils.ts
8
7
  function cn(...inputs) {
9
- return tailwindMerge.twMerge(clsx.clsx(inputs));
8
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
10
9
  }
11
10
  function formatTimestamp(timestamp, formatter) {
12
- const fail = "";
13
- if (!timestamp) {
14
- return fail;
15
- }
16
- const timestampMs = parseInt(timestamp, 10);
17
- if (isNaN(timestampMs)) {
18
- return fail;
19
- }
20
- const date = new Date(timestampMs);
21
- if (!dateFns.isValid(date)) {
22
- return fail;
23
- }
24
- try {
25
- return dateFns.format(date, formatter);
26
- } catch (error) {
27
- console.error("Error formatting date:", error);
28
- return fail;
29
- }
11
+ const fail = "";
12
+ if (!timestamp) {
13
+ return fail;
14
+ }
15
+ // Assume gitTimestamp is a millisecond timestamp string
16
+ const timestampMs = parseInt(timestamp, 10);
17
+ if (isNaN(timestampMs)) {
18
+ return fail;
19
+ }
20
+ const date = new Date(timestampMs); // or if it is determined to be seconds, use fromUnixTime(timestampSeconds)
21
+ // Check if the date is valid
22
+ if (!dateFns.isValid(date)) {
23
+ return fail;
24
+ }
25
+ // Format the date
26
+ try {
27
+ // 'yyyy-MM-dd HH:mm:ss' is the date-fns formatting pattern
28
+ return dateFns.format(date, formatter);
29
+ }
30
+ catch (error) {
31
+ // format may also throw an error due to an invalid date (although isValid should have already caught it)
32
+ console.error("Error formatting date:", error);
33
+ return fail;
34
+ }
30
35
  }
36
+ // Only allow pasting plain text, prohibit style content
31
37
  function handlePastePlainText(e) {
32
- e.preventDefault();
33
- const text = e.clipboardData.getData("text/plain");
34
- const selection = window.getSelection();
35
- if (!selection || !selection.rangeCount) return;
36
- selection.deleteFromDocument();
37
- const textNode = document.createTextNode(text);
38
- const range = selection.getRangeAt(0);
39
- range.insertNode(textNode);
40
- range.setStartAfter(textNode);
41
- range.collapse(true);
42
- selection.removeAllRanges();
43
- selection.addRange(range);
38
+ e.preventDefault();
39
+ const text = e.clipboardData.getData('text/plain');
40
+ const selection = window.getSelection();
41
+ if (!selection || !selection.rangeCount)
42
+ return;
43
+ // Delete the current selected content
44
+ selection.deleteFromDocument();
45
+ // Insert plain text
46
+ const textNode = document.createTextNode(text);
47
+ const range = selection.getRangeAt(0);
48
+ range.insertNode(textNode);
49
+ // Move the cursor to the inserted text
50
+ range.setStartAfter(textNode);
51
+ range.collapse(true);
52
+ selection.removeAllRanges();
53
+ selection.addRange(range);
44
54
  }
45
55
 
46
56
  exports.cn = cn;
47
57
  exports.formatTimestamp = formatTimestamp;
48
58
  exports.handlePastePlainText = handlePastePlainText;
49
- //# sourceMappingURL=utils.js.map
50
- //# sourceMappingURL=utils.js.map
package/dist/utils.mjs CHANGED
@@ -2,45 +2,53 @@ import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import { isValid, format } from 'date-fns';
4
4
 
5
- // src/utils.ts
6
5
  function cn(...inputs) {
7
- return twMerge(clsx(inputs));
6
+ return twMerge(clsx(inputs));
8
7
  }
9
8
  function formatTimestamp(timestamp, formatter) {
10
- const fail = "";
11
- if (!timestamp) {
12
- return fail;
13
- }
14
- const timestampMs = parseInt(timestamp, 10);
15
- if (isNaN(timestampMs)) {
16
- return fail;
17
- }
18
- const date = new Date(timestampMs);
19
- if (!isValid(date)) {
20
- return fail;
21
- }
22
- try {
23
- return format(date, formatter);
24
- } catch (error) {
25
- console.error("Error formatting date:", error);
26
- return fail;
27
- }
9
+ const fail = "";
10
+ if (!timestamp) {
11
+ return fail;
12
+ }
13
+ // Assume gitTimestamp is a millisecond timestamp string
14
+ const timestampMs = parseInt(timestamp, 10);
15
+ if (isNaN(timestampMs)) {
16
+ return fail;
17
+ }
18
+ const date = new Date(timestampMs); // or if it is determined to be seconds, use fromUnixTime(timestampSeconds)
19
+ // Check if the date is valid
20
+ if (!isValid(date)) {
21
+ return fail;
22
+ }
23
+ // Format the date
24
+ try {
25
+ // 'yyyy-MM-dd HH:mm:ss' is the date-fns formatting pattern
26
+ return format(date, formatter);
27
+ }
28
+ catch (error) {
29
+ // format may also throw an error due to an invalid date (although isValid should have already caught it)
30
+ console.error("Error formatting date:", error);
31
+ return fail;
32
+ }
28
33
  }
34
+ // Only allow pasting plain text, prohibit style content
29
35
  function handlePastePlainText(e) {
30
- e.preventDefault();
31
- const text = e.clipboardData.getData("text/plain");
32
- const selection = window.getSelection();
33
- if (!selection || !selection.rangeCount) return;
34
- selection.deleteFromDocument();
35
- const textNode = document.createTextNode(text);
36
- const range = selection.getRangeAt(0);
37
- range.insertNode(textNode);
38
- range.setStartAfter(textNode);
39
- range.collapse(true);
40
- selection.removeAllRanges();
41
- selection.addRange(range);
36
+ e.preventDefault();
37
+ const text = e.clipboardData.getData('text/plain');
38
+ const selection = window.getSelection();
39
+ if (!selection || !selection.rangeCount)
40
+ return;
41
+ // Delete the current selected content
42
+ selection.deleteFromDocument();
43
+ // Insert plain text
44
+ const textNode = document.createTextNode(text);
45
+ const range = selection.getRangeAt(0);
46
+ range.insertNode(textNode);
47
+ // Move the cursor to the inserted text
48
+ range.setStartAfter(textNode);
49
+ range.collapse(true);
50
+ selection.removeAllRanges();
51
+ selection.addRange(range);
42
52
  }
43
53
 
44
54
  export { cn, formatTimestamp, handlePastePlainText };
45
- //# sourceMappingURL=utils.mjs.map
46
- //# sourceMappingURL=utils.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/lib",
3
- "version": "6.2.1",
3
+ "version": "7.1.0",
4
4
  "description": "Common utilities and configuration",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -26,7 +26,7 @@
26
26
  "import": "./dist/common-app-config.mjs",
27
27
  "require": "./dist/common-app-config.js"
28
28
  },
29
- "./src/*": "./src/*"
29
+ "./package.json": "./package.json"
30
30
  },
31
31
  "files": [
32
32
  "dist",
@@ -45,7 +45,6 @@
45
45
  },
46
46
  "devDependencies": {
47
47
  "typescript": "^5.8.3",
48
- "tsup": "^8.3.5",
49
48
  "@types/node": "^22.15.18",
50
49
  "@types/react": "19.1.2"
51
50
  },
@@ -68,11 +67,11 @@
68
67
  "access": "public"
69
68
  },
70
69
  "scripts": {
71
- "build": "tsup",
72
- "build:prod": "tsup",
73
- "dev": "tsup --watch",
70
+ "build": "rollup -c rollup.config.mjs",
71
+ "build:prod": "rollup -c rollup.config.mjs",
72
+ "dev": "rollup -c rollup.config.mjs --watch",
74
73
  "clean": "rm -rf dist",
75
- "typecheck": "tsc --noEmit",
74
+ "type-check": "tsc --noEmit",
76
75
  "lint": "eslint src"
77
76
  }
78
77
  }
@@ -1,127 +0,0 @@
1
- declare const ALL_LOCALE_LABELS: {
2
- readonly en: "English";
3
- readonly zh: "简体中文";
4
- readonly ja: "日本語";
5
- readonly ko: "한국어";
6
- readonly fr: "Français";
7
- readonly de: "Deutsch";
8
- readonly es: "Español";
9
- readonly it: "Italiano";
10
- readonly pt: "Português";
11
- readonly tr: "Türkçe";
12
- readonly pl: "Polski";
13
- readonly ru: "Русский";
14
- readonly ar: "العربية";
15
- readonly hi: "हिन्दी";
16
- readonly th: "ไทย";
17
- readonly vi: "Tiếng Việt";
18
- };
19
- type SupportedLocale = keyof typeof ALL_LOCALE_LABELS;
20
- declare function createCommonAppConfig(options?: {
21
- locales?: string[];
22
- defaultLocale?: string;
23
- }): {
24
- shortcuts: {
25
- iconColor: string;
26
- watermark: {
27
- enabled: boolean;
28
- text: string;
29
- };
30
- showBanner: boolean;
31
- clerkPageBanner: boolean;
32
- clerkAuthInModal: boolean;
33
- placeHolderImage: string;
34
- clerk: {
35
- signInUrl: string;
36
- fallbackSignInUrl: string;
37
- signUpUrl: string;
38
- fallbackSignUpUrl: string;
39
- waitlistUrl: string;
40
- debug: boolean;
41
- };
42
- };
43
- baseUrl: string;
44
- githubBaseUrl: string;
45
- github: string;
46
- githubInfoToken: string;
47
- i18n: {
48
- locales: readonly string[];
49
- defaultLocale: string;
50
- localeLabels: {
51
- [k: string]: "English" | "简体中文" | "日本語" | "한국어" | "Français" | "Deutsch" | "Español" | "Italiano" | "Português" | "Türkçe" | "Polski" | "Русский" | "العربية" | "हिन्दी" | "ไทย" | "Tiếng Việt";
52
- };
53
- detector: {
54
- storageKey: string;
55
- autoCloseTimeout: number;
56
- expirationDays: number;
57
- storagePrefix: string;
58
- };
59
- messageRoot: string;
60
- };
61
- style: {
62
- icon: {
63
- uniformColor: string;
64
- };
65
- showBanner: boolean;
66
- clerkAuthInModal: boolean;
67
- clerkPageBanner: boolean;
68
- watermark: {
69
- enabled: boolean;
70
- text: string;
71
- };
72
- cdnBaseUrl: string;
73
- cdnProxyUrl: string;
74
- placeHolder: {
75
- image: string;
76
- };
77
- };
78
- clerk: {
79
- signInUrl: string;
80
- fallbackSignInUrl: string;
81
- signUpUrl: string;
82
- fallbackSignUpUrl: string;
83
- waitlistUrl: string;
84
- debug: boolean;
85
- };
86
- mdxSourceDir: {
87
- docs: string;
88
- blog: string;
89
- legal: string;
90
- };
91
- };
92
- declare function createI18nHelpers(i18nConfig: ReturnType<typeof createCommonAppConfig>['i18n']): {
93
- isSupportedLocale: (locale: string) => locale is (typeof i18nConfig.locales)[number];
94
- getValidLocale: (locale: string) => (typeof i18nConfig.locales)[number];
95
- generatedLocales: {
96
- name: "English" | "简体中文" | "日本語" | "한국어" | "Français" | "Deutsch" | "Español" | "Italiano" | "Português" | "Türkçe" | "Polski" | "Русский" | "العربية" | "हिन्दी" | "ไทย" | "Tiếng Việt";
97
- locale: string;
98
- }[];
99
- };
100
- declare const LOCALE_PRESETS: {
101
- EN_ONLY: {
102
- locales: string[];
103
- defaultLocale: string;
104
- };
105
- EN_ZH: {
106
- locales: string[];
107
- defaultLocale: string;
108
- };
109
- ASIA: {
110
- locales: string[];
111
- defaultLocale: string;
112
- };
113
- EUROPE: {
114
- locales: string[];
115
- defaultLocale: string;
116
- };
117
- GLOBAL: {
118
- locales: string[];
119
- defaultLocale: string;
120
- };
121
- NONE: {
122
- locales: string[];
123
- defaultLocale: string;
124
- };
125
- };
126
-
127
- export { LOCALE_PRESETS, type SupportedLocale, createCommonAppConfig, createI18nHelpers };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common-app-config.ts"],"names":[],"mappings":"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","file":"common-app-config.js","sourcesContent":["// Supported languages and their labels\nconst ALL_LOCALE_LABELS = {\n en: \"English\",\n zh: \"简体中文\",\n ja: \"日本語\", \n ko: \"한국어\",\n fr: \"Français\",\n de: \"Deutsch\",\n es: \"Español\",\n it: \"Italiano\",\n pt: \"Português\",\n tr: \"Türkçe\",\n pl: \"Polski\",\n ru: \"Русский\",\n ar: \"العربية\",\n hi: \"हिन्दी\",\n th: \"ไทย\",\n vi: \"Tiếng Việt\",\n} as const;\n\nexport type SupportedLocale = keyof typeof ALL_LOCALE_LABELS;\n\n// Helper function to get language configuration from environment variables\nfunction getLocaleLabels(locales: string[]) {\n return Object.fromEntries(\n locales.map(locale => [\n locale, \n ALL_LOCALE_LABELS[locale as SupportedLocale] || locale\n ])\n );\n}\n\n// Common application configuration creation function\nexport function createCommonAppConfig(options?: {\n // Optional: manually specify supported languages, otherwise read from environment variables\n locales?: string[];\n defaultLocale?: string;\n}) {\n // Priority: manual configuration > environment variables > default values\n const locales = options?.locales ?? \n process.env.NEXT_PUBLIC_I18N_LOCALES?.split(',').map(s => s.trim()) ?? \n ['en', 'zh'];\n \n const defaultLocale = options?.defaultLocale ?? \n process.env.NEXT_PUBLIC_I18N_DEFAULT_LOCALE ?? \n 'en';\n \n const storagePrefix = process.env.NEXT_PUBLIC_I18N_STORAGE_PREFIX || 'WINDRUN-HUAIIN';\n\n const config = {\n // Basic configuration\n baseUrl: process.env.NEXT_PUBLIC_BASE_URL || '',\n githubBaseUrl: process.env.NEXT_PUBLIC_GITHUB_BASE_URL || '',\n github: process.env.NEXT_PUBLIC_GITHUB || '',\n githubInfoToken: process.env.NEXT_PUBLIC_FUMA_GITHUB_TOKEN || '',\n\n // Internationalization configuration\n i18n: {\n locales: locales as readonly string[],\n defaultLocale,\n localeLabels: getLocaleLabels(locales),\n detector: {\n storageKey: process.env.NEXT_PUBLIC_I18N_STORAGE_KEY || 'language-preference-status',\n autoCloseTimeout: parseInt(process.env.NEXT_PUBLIC_I18N_AUTO_CLOSE_TIMEOUT || '10000'),\n expirationDays: parseInt(process.env.NEXT_PUBLIC_I18N_EXPIRATION_DAYS || '30'),\n storagePrefix\n },\n messageRoot: process.env.NEXT_PUBLIC_I18N_MESSAGE_ROOT || 'messages',\n },\n\n // Style configuration\n style: {\n icon: {\n uniformColor: process.env.NEXT_PUBLIC_STYLE_ICON_COLOR || \"text-purple-500\"\n },\n showBanner: process.env.NEXT_PUBLIC_STYLE_SHOW_BANNER === 'true',\n clerkAuthInModal: process.env.NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL === 'true',\n clerkPageBanner: process.env.NEXT_PUBLIC_STYLE_CLERK_PAGE_BANNER === 'true',\n watermark: {\n enabled: process.env.NEXT_PUBLIC_STYLE_WATERMARK_ENABLED === 'true',\n text: process.env.NEXT_PUBLIC_STYLE_WATERMARK_TEXT || \"巽川·怀因\"\n },\n cdnBaseUrl: process.env.NEXT_PUBLIC_STYLE_CDN_BASE_URL || \"https://r2.d8ger.com\",\n cdnProxyUrl: process.env.NEXT_PUBLIC_STYLE_CDN_PROXY_URL || \"https://r2-explorer-template.zcy777et.workers.dev/proxy\",\n placeHolder: {\n image: process.env.NEXT_PUBLIC_STYLE_PLACEHOLDER_IMAGE || \"/default.webp\"\n }\n },\n\n // Clerk configuration\n clerk: {\n signInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || \"/sign-in\",\n fallbackSignInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL || \"/\",\n signUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || \"/sign-up\", \n fallbackSignUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL || \"/\",\n waitlistUrl: process.env.NEXT_PUBLIC_CLERK_WAITLIST_URL || \"/waitlist\",\n debug: process.env.CLERK_DEBUG === 'true',\n },\n\n // MDX source file directory configuration\n mdxSourceDir: {\n docs: process.env.NEXT_PUBLIC_MDX_DOCS_DIR || \"src/mdx/docs\",\n blog: process.env.NEXT_PUBLIC_MDX_BLOG_DIR || \"src/mdx/blog\", \n legal: process.env.NEXT_PUBLIC_MDX_LEGAL_DIR || \"src/mdx/legal\"\n },\n };\n\n // Convenient constants - avoid deep nested access\n const shortcuts = {\n iconColor: config.style.icon.uniformColor,\n watermark: config.style.watermark,\n showBanner: config.style.showBanner,\n clerkPageBanner: config.style.clerkPageBanner,\n clerkAuthInModal: config.style.clerkAuthInModal,\n placeHolderImage: config.style.placeHolder.image,\n clerk: config.clerk,\n };\n\n return {\n ...config,\n shortcuts\n };\n}\n\n// Create internationalization helper functions\nexport function createI18nHelpers(i18nConfig: ReturnType<typeof createCommonAppConfig>['i18n']) {\n function isSupportedLocale(locale: string): locale is typeof i18nConfig.locales[number] {\n return (i18nConfig.locales as readonly string[]).includes(locale);\n }\n\n function getValidLocale(locale: string): typeof i18nConfig.locales[number] {\n return isSupportedLocale(locale) ? locale : i18nConfig.defaultLocale;\n }\n\n const generatedLocales = i18nConfig.locales.map((loc) => ({\n name: i18nConfig.localeLabels[loc as keyof typeof i18nConfig.localeLabels] || loc,\n locale: loc,\n }));\n\n return {\n isSupportedLocale,\n getValidLocale,\n generatedLocales\n };\n}\n\n// Convenient configuration presets\nexport const LOCALE_PRESETS = {\n // Only support English\n EN_ONLY: { locales: ['en'] as string[], defaultLocale: 'en' as string },\n \n // English and Chinese\n EN_ZH: { locales: ['en', 'zh'] as string[], defaultLocale: 'en' as string },\n \n // Main Asian languages\n ASIA: { locales: ['en', 'zh', 'ja', 'ko'] as string[], defaultLocale: 'en' as string },\n \n // Main European languages\n EUROPE: { locales: ['en', 'fr', 'de', 'es', 'it'] as string[], defaultLocale: 'en' as string },\n \n // Globalization\n GLOBAL: { locales: ['en', 'zh', 'ja', 'ko', 'fr', 'de', 'es', 'it', 'pt', 'ru'] as string[], defaultLocale: 'en' as string },\n \n // No internationalization (only default language)\n NONE: { locales: [] as string[], defaultLocale: 'en' as string }\n}; "]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common-app-config.ts"],"names":[],"mappings":"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","file":"common-app-config.mjs","sourcesContent":["// Supported languages and their labels\nconst ALL_LOCALE_LABELS = {\n en: \"English\",\n zh: \"简体中文\",\n ja: \"日本語\", \n ko: \"한국어\",\n fr: \"Français\",\n de: \"Deutsch\",\n es: \"Español\",\n it: \"Italiano\",\n pt: \"Português\",\n tr: \"Türkçe\",\n pl: \"Polski\",\n ru: \"Русский\",\n ar: \"العربية\",\n hi: \"हिन्दी\",\n th: \"ไทย\",\n vi: \"Tiếng Việt\",\n} as const;\n\nexport type SupportedLocale = keyof typeof ALL_LOCALE_LABELS;\n\n// Helper function to get language configuration from environment variables\nfunction getLocaleLabels(locales: string[]) {\n return Object.fromEntries(\n locales.map(locale => [\n locale, \n ALL_LOCALE_LABELS[locale as SupportedLocale] || locale\n ])\n );\n}\n\n// Common application configuration creation function\nexport function createCommonAppConfig(options?: {\n // Optional: manually specify supported languages, otherwise read from environment variables\n locales?: string[];\n defaultLocale?: string;\n}) {\n // Priority: manual configuration > environment variables > default values\n const locales = options?.locales ?? \n process.env.NEXT_PUBLIC_I18N_LOCALES?.split(',').map(s => s.trim()) ?? \n ['en', 'zh'];\n \n const defaultLocale = options?.defaultLocale ?? \n process.env.NEXT_PUBLIC_I18N_DEFAULT_LOCALE ?? \n 'en';\n \n const storagePrefix = process.env.NEXT_PUBLIC_I18N_STORAGE_PREFIX || 'WINDRUN-HUAIIN';\n\n const config = {\n // Basic configuration\n baseUrl: process.env.NEXT_PUBLIC_BASE_URL || '',\n githubBaseUrl: process.env.NEXT_PUBLIC_GITHUB_BASE_URL || '',\n github: process.env.NEXT_PUBLIC_GITHUB || '',\n githubInfoToken: process.env.NEXT_PUBLIC_FUMA_GITHUB_TOKEN || '',\n\n // Internationalization configuration\n i18n: {\n locales: locales as readonly string[],\n defaultLocale,\n localeLabels: getLocaleLabels(locales),\n detector: {\n storageKey: process.env.NEXT_PUBLIC_I18N_STORAGE_KEY || 'language-preference-status',\n autoCloseTimeout: parseInt(process.env.NEXT_PUBLIC_I18N_AUTO_CLOSE_TIMEOUT || '10000'),\n expirationDays: parseInt(process.env.NEXT_PUBLIC_I18N_EXPIRATION_DAYS || '30'),\n storagePrefix\n },\n messageRoot: process.env.NEXT_PUBLIC_I18N_MESSAGE_ROOT || 'messages',\n },\n\n // Style configuration\n style: {\n icon: {\n uniformColor: process.env.NEXT_PUBLIC_STYLE_ICON_COLOR || \"text-purple-500\"\n },\n showBanner: process.env.NEXT_PUBLIC_STYLE_SHOW_BANNER === 'true',\n clerkAuthInModal: process.env.NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL === 'true',\n clerkPageBanner: process.env.NEXT_PUBLIC_STYLE_CLERK_PAGE_BANNER === 'true',\n watermark: {\n enabled: process.env.NEXT_PUBLIC_STYLE_WATERMARK_ENABLED === 'true',\n text: process.env.NEXT_PUBLIC_STYLE_WATERMARK_TEXT || \"巽川·怀因\"\n },\n cdnBaseUrl: process.env.NEXT_PUBLIC_STYLE_CDN_BASE_URL || \"https://r2.d8ger.com\",\n cdnProxyUrl: process.env.NEXT_PUBLIC_STYLE_CDN_PROXY_URL || \"https://r2-explorer-template.zcy777et.workers.dev/proxy\",\n placeHolder: {\n image: process.env.NEXT_PUBLIC_STYLE_PLACEHOLDER_IMAGE || \"/default.webp\"\n }\n },\n\n // Clerk configuration\n clerk: {\n signInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || \"/sign-in\",\n fallbackSignInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL || \"/\",\n signUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || \"/sign-up\", \n fallbackSignUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL || \"/\",\n waitlistUrl: process.env.NEXT_PUBLIC_CLERK_WAITLIST_URL || \"/waitlist\",\n debug: process.env.CLERK_DEBUG === 'true',\n },\n\n // MDX source file directory configuration\n mdxSourceDir: {\n docs: process.env.NEXT_PUBLIC_MDX_DOCS_DIR || \"src/mdx/docs\",\n blog: process.env.NEXT_PUBLIC_MDX_BLOG_DIR || \"src/mdx/blog\", \n legal: process.env.NEXT_PUBLIC_MDX_LEGAL_DIR || \"src/mdx/legal\"\n },\n };\n\n // Convenient constants - avoid deep nested access\n const shortcuts = {\n iconColor: config.style.icon.uniformColor,\n watermark: config.style.watermark,\n showBanner: config.style.showBanner,\n clerkPageBanner: config.style.clerkPageBanner,\n clerkAuthInModal: config.style.clerkAuthInModal,\n placeHolderImage: config.style.placeHolder.image,\n clerk: config.clerk,\n };\n\n return {\n ...config,\n shortcuts\n };\n}\n\n// Create internationalization helper functions\nexport function createI18nHelpers(i18nConfig: ReturnType<typeof createCommonAppConfig>['i18n']) {\n function isSupportedLocale(locale: string): locale is typeof i18nConfig.locales[number] {\n return (i18nConfig.locales as readonly string[]).includes(locale);\n }\n\n function getValidLocale(locale: string): typeof i18nConfig.locales[number] {\n return isSupportedLocale(locale) ? locale : i18nConfig.defaultLocale;\n }\n\n const generatedLocales = i18nConfig.locales.map((loc) => ({\n name: i18nConfig.localeLabels[loc as keyof typeof i18nConfig.localeLabels] || loc,\n locale: loc,\n }));\n\n return {\n isSupportedLocale,\n getValidLocale,\n generatedLocales\n };\n}\n\n// Convenient configuration presets\nexport const LOCALE_PRESETS = {\n // Only support English\n EN_ONLY: { locales: ['en'] as string[], defaultLocale: 'en' as string },\n \n // English and Chinese\n EN_ZH: { locales: ['en', 'zh'] as string[], defaultLocale: 'en' as string },\n \n // Main Asian languages\n ASIA: { locales: ['en', 'zh', 'ja', 'ko'] as string[], defaultLocale: 'en' as string },\n \n // Main European languages\n EUROPE: { locales: ['en', 'fr', 'de', 'es', 'it'] as string[], defaultLocale: 'en' as string },\n \n // Globalization\n GLOBAL: { locales: ['en', 'zh', 'ja', 'ko', 'fr', 'de', 'es', 'it', 'pt', 'ru'] as string[], defaultLocale: 'en' as string },\n \n // No internationalization (only default language)\n NONE: { locales: [] as string[], defaultLocale: 'en' as string }\n}; "]}
package/dist/index.d.mts DELETED
@@ -1,5 +0,0 @@
1
- export { cn, formatTimestamp, handlePastePlainText } from './utils.mjs';
2
- export { getLLMText } from './llm-utils.mjs';
3
- export { LOCALE_PRESETS, SupportedLocale, createCommonAppConfig, createI18nHelpers } from './common-app-config.mjs';
4
- import 'react';
5
- import 'clsx';