diff --git a/.env b/.env deleted file mode 100644 index 7e84b2d..0000000 --- a/.env +++ /dev/null @@ -1,13 +0,0 @@ -VITE_TITLE="Arknights: It Does Wash the Strings / Ling - 明日方舟:濯缨 · 令" -VITE_FILENAME=dyn_illust_char_2023_ling_nian%239 -VITE_LOGO_FILENAME=logo_sui -VITE_FALLBACK_FILENAME=char_2023_ling_nian%239 -VITE_VIEWPORT_LEFT=0 -VITE_VIEWPORT_RIGHT=0 -VITE_VIEWPORT_TOP=0 -VITE_VIEWPORT_BOTTOM=0 -VITE_INVERT_FILTER=true -VITE_IMAGE_WIDTH=2048 -VITE_IMAGE_HEIGHT=2048 -VITE_BACKGROUND_FILES=["operator_bg.png","bg_anniversary_1.png","bg_iberia_1.png","bg_kazimierz_1.png","bg_main_victoria_1.png","bg_rhodes_day.png","bg_rhodes_night.png","bg_rogue_1.png","bg_siesta_1.png","bg_ursus_1.png","bg_yan_1.png"] -VITE_BACKGROUND_FOLDER=background \ No newline at end of file diff --git a/libs/append.js b/libs/append.js index 6903fcf..972e389 100644 --- a/libs/append.js +++ b/libs/append.js @@ -1,18 +1,18 @@ import path from 'path' import { appendSync, readSync } from './file.js' -export function appendReadme(config, operatorName, rootDir) { - const operatorConfig = config.operators[operatorName] - const projectJson = JSON.parse(readSync(path.join(rootDir, config.folder.operator, operatorName, 'project.json'))) +export function appendReadme() { + const operatorConfig = __config.operators[__operator_name] + const projectJson = JSON.parse(readSync(path.join(__dirname, __config.folder.operator, __operator_name, 'project.json'))) appendSync( `\n| ${operatorConfig.title.split(' - ')[0].split('Arknights: ')[1]} | [Link](https://arknights.halyul.dev/${operatorConfig.link}/) | [Link](https://steamcommunity.com/sharedfiles/filedetails/?id=${projectJson.workshopid}) |`, - path.join(rootDir, 'README.md') + path.join(__dirname, 'README.md') ) } -export function appendMainConfig(operatorName, rootDir) { +export function appendMainConfig() { appendSync( - `\n ${operatorName}: !include config/${operatorName}.yaml`, - path.join(rootDir, 'config.yaml') + `\n ${__operator_name}: !include config/${__operator_name}.yaml`, + path.join(__dirname, 'config.yaml') ) } \ No newline at end of file diff --git a/libs/assets_processor.js b/libs/assets_processor.js index e87a6b3..474d096 100644 --- a/libs/assets_processor.js +++ b/libs/assets_processor.js @@ -3,25 +3,21 @@ import { copy, read, write } from './file.js' import AlphaComposite from './alpha_composite.js' export default class AssetsProcessor { - #config - #operatorName #operatorSourceFolder #alphaCompositer - constructor(config, operatorName, rootDir) { - this.#config = config - this.#operatorName = operatorName - this.#operatorSourceFolder = path.join(rootDir, this.#config.folder.operator) - this.#alphaCompositer = new AlphaComposite(config, operatorName, rootDir) + constructor() { + this.#operatorSourceFolder = path.join(__dirname, __config.folder.operator) + this.#alphaCompositer = new AlphaComposite() } - async process(publicAssetsDir, extractedDir) { + async process(extractedDir) { const BASE64_BINARY_PREFIX = 'data:application/octet-stream;base64,' const BASE64_PNG_PREFIX = 'data:image/png;base64,' const assetsJson = {} - const skelFilename = `${this.#config.operators[this.#operatorName].filename}.skel` + const skelFilename = `${__config.operators[__operator_name].filename}.skel` const skel = await read(path.join(extractedDir, skelFilename), null) - const atlasFilename = `${this.#config.operators[this.#operatorName].filename}.atlas` + const atlasFilename = `${__config.operators[__operator_name].filename}.atlas` const atlas = await read(path.join(extractedDir, atlasFilename)) const dimensions = atlas.match(new RegExp(/^size:(.*),(.*)/gm))[0].replace('size: ', '').split(',') const matches = atlas.match(new RegExp(/(.*).png/g)) @@ -32,9 +28,9 @@ export default class AssetsProcessor { assetsJson[`./assets/${skelFilename.replace('#', '%23')}`] = BASE64_BINARY_PREFIX + skel.toString('base64') assetsJson[`./assets/${atlasFilename.replace('#', '%23')}`] = BASE64_BINARY_PREFIX + Buffer.from(atlas).toString('base64') - const fallbackFilename = `${this.#config.operators[this.#operatorName].fallback_name}.png` + const fallbackFilename = `${__config.operators[__operator_name].fallback_name}.png` const fallbackBuffer = await this.#alphaCompositer.process(fallbackFilename, extractedDir) - await write(fallbackBuffer, path.join(this.#operatorSourceFolder, this.#operatorName, fallbackFilename)) + await write(fallbackBuffer, path.join(this.#operatorSourceFolder, __operator_name, fallbackFilename)) return { dimensions, assetsJson diff --git a/libs/background.js b/libs/background.js index 799913c..7e5c40a 100644 --- a/libs/background.js +++ b/libs/background.js @@ -3,16 +3,12 @@ import fs from 'fs'; import sharp from "sharp"; export default class Background { - #config - #rootDir #backgroundFolder #extractFolder #files - constructor(config, rootDir) { - this.#config = config; - this.#rootDir = rootDir; - this.#backgroundFolder = path.join(rootDir, config.folder.operator, '_share', config.folder.background); + constructor() { + this.#backgroundFolder = path.join(__dirname, __config.folder.operator, '_share', __config.folder.background); this.#extractFolder = path.join(this.#backgroundFolder, 'extracted'); } @@ -60,7 +56,7 @@ export default class Background { return { filename: f.replace('_left', ''), source: path.join(this.#backgroundFolder), - target: path.join(publicAssetsDir, this.#config.folder.background) + target: path.join(publicAssetsDir, __config.folder.background) }; }) } diff --git a/libs/config.js b/libs/config.js index 9932f75..0a87a75 100644 --- a/libs/config.js +++ b/libs/config.js @@ -1,9 +1,9 @@ import path from 'path' import { read } from './yaml.js' -export default function (dirname) { +export default function () { return { - basedir: dirname, - ...read(path.join(dirname, 'config.yaml')) + basedir: __dirname, + ...read(path.join(__dirname, 'config.yaml')) } } \ No newline at end of file diff --git a/libs/directory.js b/libs/directory.js index e326410..5f77511 100644 --- a/libs/directory.js +++ b/libs/directory.js @@ -1,19 +1,19 @@ import path from 'path' import { writeSync, copy, rmdir } from './file.js' -export default function (config, rootDir) { - const targetFolder = path.join(rootDir, config.folder.release, config.folder.directory); - const sourceFolder = path.join(rootDir, config.folder.operator); +export default function () { + const targetFolder = path.join(__dirname, __config.folder.release, __config.folder.directory); + const sourceFolder = path.join(__dirname, __config.folder.operator); rmdir(targetFolder); const filesToCopy = []; const directoryJson = [] - for (const [key, value] of Object.entries(config.operators)) { + for (const [key, value] of Object.entries(__config.operators)) { filesToCopy.push(key); directoryJson.push(value); } writeSync(JSON.stringify(directoryJson, null), path.join(targetFolder, "directory.json")) filesToCopy.forEach((key) => { - const filename = `${config.operators[key].filename}.json`; + const filename = `${__config.operators[key].filename}.json`; copy(path.join(sourceFolder, key, filename), path.join(targetFolder, filename)) }) } diff --git a/libs/env_generator.js b/libs/env_generator.js index 9851a5d..e25220e 100644 --- a/libs/env_generator.js +++ b/libs/env_generator.js @@ -1,11 +1,9 @@ export default class EnvGenerator { - #config #assets #operatorConfig - constructor(config, operatorName, assets) { - this.#config = config - this.#operatorConfig = config.operators[operatorName] + constructor(assets) { + this.#operatorConfig = __config.operators[__operator_name] this.#assets = assets } @@ -23,7 +21,7 @@ export default class EnvGenerator { `VITE_IMAGE_WIDTH=2048`, `VITE_IMAGE_HEIGHT=2048`, `VITE_BACKGROUND_FILES=${JSON.stringify(this.#assets.backgrounds)}`, - `VITE_BACKGROUND_FOLDER=${this.#config.folder.background}`, + `VITE_BACKGROUND_FOLDER=${__config.folder.background}`, ].join('\n') } diff --git a/libs/initializer.js b/libs/initializer.js index 84d498d..472d2fc 100644 --- a/libs/initializer.js +++ b/libs/initializer.js @@ -2,8 +2,8 @@ import path from 'path' import { mkdir, copy } from './file.js' import { appendMainConfig } from './append.js' -export default function init(operatorName, __dirname, extractedDir) { +export default function init(extractedDir) { mkdir(extractedDir) - copy(path.join(__dirname, 'config', '_template.yaml'), path.join(__dirname, 'config', `${operatorName}.yaml`)) - appendMainConfig(operatorName, __dirname) + copy(path.join(__dirname, 'config', '_template.yaml'), path.join(__dirname, 'config', `${__operator_name}.yaml`)) + appendMainConfig(__operator_name, __dirname) } \ No newline at end of file diff --git a/libs/project_json.js b/libs/project_json.js index 00ccb8a..d01a4ff 100644 --- a/libs/project_json.js +++ b/libs/project_json.js @@ -13,14 +13,11 @@ export default class ProjectJson { #rootDir #template - constructor(config, operatorName, __dirname, operatorShareFolder, assets) { - this.#config = config - this.#operatorName = operatorName - this.#operatorSourceFolder = path.join(__dirname, this.#config.folder.operator) + constructor(operatorShareFolder, assets) { + this.#operatorSourceFolder = path.join(__dirname, __config.folder.operator) this.#operatorShareFolder = operatorShareFolder this.#assets = assets - this.#rootDir = __dirname - this.#template = this.#processYAML(readYAML(path.join(this.#rootDir, 'config', '_project_json.yaml'))) + this.#template = this.#processYAML(readYAML(path.join(__dirname, 'config', '_project_json.yaml'))) } async load() { @@ -32,7 +29,7 @@ export default class ProjectJson { #getPath() { // if exists, do not use the template - const defaultPath = path.join(this.#operatorSourceFolder, this.#operatorName, 'project.json') + const defaultPath = path.join(this.#operatorSourceFolder, __operator_name, 'project.json') if (exists(defaultPath)) { return defaultPath } else { @@ -44,7 +41,7 @@ export default class ProjectJson { this.#json = { ...this.#json, description: this.#template.description, - title: this.#config.operators[this.#operatorName].title, + title: __config.operators[__operator_name].title, general: { ...this.#json.general, localization: this.#template.localization, @@ -57,7 +54,7 @@ export default class ProjectJson { } #processYAML(template) { - const matcher = new Matcher(template.description, '${', '}', this.#config.operators[this.#operatorName]) + const matcher = new Matcher(template.description, '${', '}', __config.operators[__operator_name]) if (matcher.match() !== null) { template.description = matcher.process() } @@ -77,25 +74,25 @@ export default class ProjectJson { { key: "paddingleft", value: { - value: this.#config.operators[this.#operatorName].viewport_left + value: __config.operators[__operator_name].viewport_left }, }, { key: "paddingright", value: { - value: this.#config.operators[this.#operatorName].viewport_right + value: __config.operators[__operator_name].viewport_right }, }, { key: "paddingtop", value: { - value: this.#config.operators[this.#operatorName].viewport_top + value: __config.operators[__operator_name].viewport_top }, }, { key: "paddingbottom", value: { - value: this.#config.operators[this.#operatorName].viewport_bottom + value: __config.operators[__operator_name].viewport_bottom }, }, ] diff --git a/libs/vite.js b/libs/vite.js index f660d75..7dbf3f3 100644 --- a/libs/vite.js +++ b/libs/vite.js @@ -2,15 +2,6 @@ import path from 'path' import { createServer, build } from 'vite' export default class Vite { - #config - #rootDir - #operatorName - - constructor(config, operatorName, rootDir) { - this.#config = config - this.#operatorName = operatorName - this.#rootDir = rootDir - } dev() { ; (async () => { @@ -28,17 +19,17 @@ export default class Vite { get #viteConfig() { return { base: "", - publicDir: path.resolve(this.#rootDir, this.#config.folder.release, this.#operatorName), - root: path.resolve(this.#rootDir), + publicDir: path.resolve(__dirname, __config.folder.release, __operator_name), + root: path.resolve(__dirname), resolve: { alias: { - '@': path.resolve(this.#rootDir, './src'), - '!': path.resolve(this.#rootDir, this.#config.folder.operator, this.#operatorName), - '#': path.resolve(this.#config.basedir, this.#config.folder.operator, this.#operatorName, `${this.#config.operators[this.#operatorName].filename}.json`), + '@': path.resolve(__dirname, './src'), + '!': path.resolve(__dirname, __config.folder.operator, __operator_name), + '#': path.resolve(__config.basedir, __config.folder.operator, __operator_name, `${__config.operators[__operator_name].filename}.json`), }, }, build: { - outDir: path.resolve(this.#rootDir, this.#config.folder.release, this.#operatorName), + outDir: path.resolve(__dirname, __config.folder.release, __operator_name), emptyOutDir: false, chunkSizeWarningLimit: 10000, }, diff --git a/runner.js b/runner.js index b4252fd..28be689 100644 --- a/runner.js +++ b/runner.js @@ -13,17 +13,17 @@ import { appendReadme } from './libs/append.js' import Background from './libs/background.js' async function main() { - const __dirname = path.dirname(fileURLToPath(import.meta.url)) - const config = getConfig(__dirname) + global.__dirname = path.dirname(fileURLToPath(import.meta.url)) + global.__config = getConfig() const op = process.argv[2] let OPERATOR_NAMES = process.argv.slice(3); - const background = new Background(config, __dirname) + const background = new Background() await background.process() const backgrounds = ['operator_bg.png', ...background.files] - directory(config, __dirname) + directory() /** * Skip all, no need for OPERATOR_NAME @@ -34,7 +34,7 @@ async function main() { case 'directory': process.exit(0) case 'build-all': - for (const [key, _] of Object.entries(config.operators)) { + for (const [key, _] of Object.entries(__config.operators)) { OPERATOR_NAMES.push(key) } default: @@ -44,8 +44,9 @@ async function main() { assert(OPERATOR_NAMES.length !== 0, 'Please set the operator name.') for (const OPERATOR_NAME of OPERATOR_NAMES) { - const OPERATOR_SOURCE_FOLDER = path.join(__dirname, config.folder.operator) - const OPERATOR_RELEASE_FOLDER = path.join(__dirname, config.folder.release, OPERATOR_NAME) + global.__operator_name = OPERATOR_NAME + const OPERATOR_SOURCE_FOLDER = path.join(__dirname, __config.folder.operator) + const OPERATOR_RELEASE_FOLDER = path.join(__dirname, __config.folder.release, OPERATOR_NAME) const SHOWCASE_PUBLIC_ASSSETS_FOLDER = path.join(OPERATOR_RELEASE_FOLDER, "assets") const EXTRACTED_FOLDER = path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, 'extracted') const OPERATOR_SHARE_FOLDER = path.join(OPERATOR_SOURCE_FOLDER, '_share') @@ -57,10 +58,10 @@ async function main() { */ switch (op) { case 'init': - init(OPERATOR_NAME, __dirname, EXTRACTED_FOLDER) + init(EXTRACTED_FOLDER) process.exit(0) case 'readme': - appendReadme(config, OPERATOR_NAME, __dirname) + appendReadme() process.exit(0) default: break @@ -68,16 +69,16 @@ async function main() { rmdir(OPERATOR_RELEASE_FOLDER) - const projectJson = new ProjectJson(config, OPERATOR_NAME, __dirname, OPERATOR_SHARE_FOLDER, { + const projectJson = new ProjectJson(OPERATOR_SHARE_FOLDER, { backgrounds }) projectJson.load().then((content) => { write(JSON.stringify(content, null, 2), path.join(OPERATOR_RELEASE_FOLDER, 'project.json')) }) - const assetsProcessor = new AssetsProcessor(config, OPERATOR_NAME, __dirname) - assetsProcessor.process(SHOWCASE_PUBLIC_ASSSETS_FOLDER, EXTRACTED_FOLDER).then((content) => { - write(JSON.stringify(content.assetsJson, null), path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, `${config.operators[OPERATOR_NAME].filename}.json`)) + const assetsProcessor = new AssetsProcessor() + assetsProcessor.process(EXTRACTED_FOLDER).then((content) => { + write(JSON.stringify(content.assetsJson, null), path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, `${__config.operators[OPERATOR_NAME].filename}.json`)) }) const filesToCopy = [ @@ -89,16 +90,16 @@ async function main() { }, { filename: 'operator_bg.png', - source: path.join(OPERATOR_SHARE_FOLDER, config.folder.background), - target: path.join(SHOWCASE_PUBLIC_ASSSETS_FOLDER, config.folder.background) + source: path.join(OPERATOR_SHARE_FOLDER, __config.folder.background), + target: path.join(SHOWCASE_PUBLIC_ASSSETS_FOLDER, __config.folder.background) }, { - filename: `${config.operators[OPERATOR_NAME].logo}.png`, + filename: `${__config.operators[OPERATOR_NAME].logo}.png`, source: path.join(OPERATOR_SHARE_FOLDER, 'logo'), target: path.join(SHOWCASE_PUBLIC_ASSSETS_FOLDER) }, { - filename: `${config.operators[OPERATOR_NAME].fallback_name}.png`, + filename: `${__config.operators[OPERATOR_NAME].fallback_name}.png`, source: path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME), target: path.join(SHOWCASE_PUBLIC_ASSSETS_FOLDER) }, @@ -108,14 +109,14 @@ async function main() { }) const envPath = path.join(__dirname, '.env') - writeSync((new EnvGenerator(config, OPERATOR_NAME, { + writeSync((new EnvGenerator({ backgrounds })).generate(), envPath) /** * dev: run dev server * build: build assets */ - const vite = new Vite(config, OPERATOR_NAME, __dirname) + const vite = new Vite(__config, OPERATOR_NAME, __dirname) switch (op) { case 'dev': vite.dev()