Sukka Surge Ruleset Server
-Made by Sukka | Source @ GitHub | Licensed under AGPL-3.0
-Last Build: ${new Date().toISOString()}
--
-
-
- ${urlList.sort().map(url => `
- ${url} `).join('')} -
diff --git a/Build/build-public.ts b/Build/build-public.ts index ee890237..0e0c57fe 100644 --- a/Build/build-public.ts +++ b/Build/build-public.ts @@ -1,7 +1,8 @@ -import listDir from '@sukka/listdir'; import path from 'path'; import fsp from 'fs/promises'; import { task } from './lib/trace-runner'; +import { listDir } from './lib/list-dir'; +import type { TreeType, TreeTypeArray } from './lib/list-dir'; const rootPath = path.resolve(import.meta.dir, '../'); const publicPath = path.resolve(import.meta.dir, '../public'); @@ -15,7 +16,7 @@ const folderAndFilesToBeDeployed = [ 'LICENSE' ]; -export const buildPublicHtml = task(import.meta.path, async () => { +export const buildPublic = task(import.meta.path, async () => { await fsp.mkdir(publicPath, { recursive: true }); await Promise.all(folderAndFilesToBeDeployed.map(dir => fsp.cp( path.resolve(rootPath, dir), @@ -23,24 +24,37 @@ export const buildPublicHtml = task(import.meta.path, async () => { { force: true, recursive: true } ))); - const list = await listDir(publicPath, { - ignoreHidden: true, - ignorePattern: /node_modules|Build|.DS_Store|\.(json|html|md|js)|LICENSE/ - }); + const tree = await listDir(publicPath); - const html = template(list); + const html = generateHtml(tree); return Bun.write(path.join(publicPath, 'index.html'), html); }); if (import.meta.main) { - buildPublicHtml(); + buildPublic(); } -function template(urlList: string[]) { - return ` - +const priorityOrder: Record<'default' | string & {}, number> = { + domainset: 1, + non_ip: 2, + ip: 3, + List: 10, + Surge: 11, + Clash: 12, + Modules: 13, + Script: 14, + Mock: 15, + Assets: 16, + LICENSE: 20, + default: Number.MAX_VALUE +}; +const prioritySorter = (a: TreeType, b: TreeType) => (priorityOrder[a.name] || priorityOrder.default) - (priorityOrder[b.name] || priorityOrder.default) || +(a.name > b.name) || -(a.name < b.name); + +function generateHtml(tree: TreeTypeArray) { + let html = ` +
Made by Sukka | Source @ GitHub | Licensed under AGPL-3.0
-Last Build: ${new Date().toISOString()}
-+ Made by Sukka | Source @ GitHub | Licensed under AGPL-3.0 +
+Last Build: 2023-12-03T16:54:15.820Z
+