diff --git a/examples/samples/utils.js b/examples/samples/utils.js index 61bf07bd..a2d5382e 100644 --- a/examples/samples/utils.js +++ b/examples/samples/utils.js @@ -7,7 +7,6 @@ import { createCamera2D, Plugin, typeidGeneric, - Parser, Query, WindowCommands, Entity, @@ -101,20 +100,6 @@ export function registerAssetOnAssetServer(type) { } } -/** - * @template T - * @param {new (...args:any[])=> T} type - * @param {Parser} parser - * @returns {(world:World)=>void} - */ -export function registerAssetParserOnAssetServer(type, parser) { - return function registerAssetParsedOnAssetServer(world) { - const server = world.getResource(AssetServer) - - server.registerParser(type, parser) - } -} - /** * Convert a pixel-space coordinate (origin top-left) to NDC (-1..1, Y up). * diff --git a/src/asset/core/parser.js b/src/asset/core/importer.js similarity index 81% rename from src/asset/core/parser.js rename to src/asset/core/importer.js index 2dc66392..e7352f2a 100644 --- a/src/asset/core/parser.js +++ b/src/asset/core/importer.js @@ -6,7 +6,7 @@ import { throws } from '../../logger/index.js' * @abstract * @template T */ -export class Parser { +export class Importer { /** * @readonly @@ -26,8 +26,8 @@ export class Parser { * @param {TypeRegistry} _typeRegistry * @returns {Promise} */ - async parse(_response, _typeRegistry) { - throws(`Implement the method \`parse\` on \`${this.constructor.name}\``) + async deserialize(_response, _typeRegistry) { + throws(`Implement the method \`deserialize\` on \`${this.constructor.name}\``) return undefined } diff --git a/src/asset/core/index.js b/src/asset/core/index.js index 6d2ebfac..aee26d52 100644 --- a/src/asset/core/index.js +++ b/src/asset/core/index.js @@ -1,3 +1,3 @@ export * from './asset.js' export * from './exporter.js' -export * from './parser.js' +export * from './importer.js' diff --git a/src/asset/plugins/parser.js b/src/asset/plugins/importer.js similarity index 51% rename from src/asset/plugins/parser.js rename to src/asset/plugins/importer.js index e3ad42af..4a6fd0fd 100644 --- a/src/asset/plugins/parser.js +++ b/src/asset/plugins/importer.js @@ -2,14 +2,14 @@ import { App, Plugin } from '../../app/index.js' import { AppSchedule, CoreSystems } from '../../core/index.js' import { typeid, typeidGeneric } from '../../type/index.js' -import { Parser } from '../core/index.js' -import { registerAssetParserOnAssetServer } from '../systems/index.js' +import { Importer } from '../core/index.js' +import { registerAssetImporterOnAssetServer } from '../systems/index.js' /** * @template T */ -export class AssetParserPlugin extends Plugin { +export class AssetImporterPlugin extends Plugin { /** * @readonly @@ -19,44 +19,44 @@ export class AssetParserPlugin extends Plugin { /** * @readonly - * @type {Parser} + * @type {Importer} */ - parser + importer /** - * @param {AssetParserPluginOptions} options + * @param {AssetImporterPluginOptions} options */ constructor(options) { super() - const { asset, parser } = options + const { asset, importer } = options this.asset = asset - this.parser = parser + this.importer = importer } /** * @param {App} app */ register(app) { - const { asset, parser } = this + const { asset, importer } = this app .registerSystem({ - label: `registerAssetParserOnAssetServer<${typeid(asset)}>`, + label: `registerAssetImporterOnAssetServer<${typeid(asset)}>`, schedule: AppSchedule.Startup, systemGroup: CoreSystems.Start, - system: registerAssetParserOnAssetServer(asset, parser) + system: registerAssetImporterOnAssetServer(asset, importer) }) } name() { - return typeidGeneric(AssetParserPlugin, [this.asset]) + return typeidGeneric(AssetImporterPlugin, [this.asset]) } } /** * @template T - * @typedef AssetParserPluginOptions + * @typedef AssetImporterPluginOptions * @property {Constructor} asset - * @property {Parser} parser + * @property {Importer} importer */ diff --git a/src/asset/plugins/index.js b/src/asset/plugins/index.js index 268a09b6..4ce60821 100644 --- a/src/asset/plugins/index.js +++ b/src/asset/plugins/index.js @@ -1,4 +1,4 @@ export * from './asset.js' export * from './assetServer.js' export * from './exporter.js' -export * from './parser.js' +export * from './importer.js' diff --git a/src/asset/resources/assetserver.js b/src/asset/resources/assetserver.js index d94a440f..8575b69c 100644 --- a/src/asset/resources/assetserver.js +++ b/src/asset/resources/assetserver.js @@ -3,35 +3,35 @@ import { typeid } from '../../type/index.js' import { assert, warn } from '../../logger/index.js' import { getFileExtension, swapRemove } from '../../utils/index.js' -import { Assets, Handle, Parser, Exporter } from '../core/index.js' +import { Assets, Handle, Importer, Exporter } from '../core/index.js' /** - * @typedef {number} ParserId + * @typedef {number} ImporterId */ -export class Parsers { +export class Importers { /** * @private - * @type {Parser[]} + * @type {Importer[]} */ - parsers = [] + importers = [] /** * @private - * @type {Map>} + * @type {Map>} */ extensions = new Map() /** * @template T - * @param {Parser} parser + * @param {Importer} importer */ - add(parser) { - const id = this.parsers.length - const typeId = typeid(parser.asset) - const extensions = parser.getExtensions() + add(importer) { + const id = this.importers.length + const typeId = typeid(importer.asset) + const extensions = importer.getExtensions() - this.parsers.push(parser) + this.importers.push(importer) for (let i = 0; i < extensions.length; i++) { const extension = extensions[i] @@ -39,7 +39,7 @@ export class Parsers { if (extensionMap) { if (extensionMap.has(typeId)) { - warn(`Overriding a parser already present with asset type \`${typeId}\` and with extension "${extension}"".`) + warn(`Overriding an importer already present with asset type \`${typeId}\` and with extension "${extension}"".`) } extensionMap.set(typeId, id) @@ -53,27 +53,27 @@ export class Parsers { * @template T * @param {TypeId} type * @param {string} extension - * @returns {Parser} + * @returns {Importer} * @throws {string} */ get(type, extension) { const extensions = this.extensions.get(extension) if (!extensions) { - throw 'The given extension does not have a parser registered' + throw 'The given extension does not have an importer registered' } - const parserId = extensions.get(type) + const importerId = extensions.get(type) - if (parserId === undefined) { + if (importerId === undefined) { throw 'The given asset type does not support the given extension' } - const parser = this.parsers[parserId] + const importer = this.importers[importerId] - assert(parser, 'Internal error: The givk&en parser index is invalid.') + assert(importer, 'Internal error: The givk&en importer index is invalid.') - return /** @type {Parser} */(parser) + return /** @type {Importer} */(importer) } } @@ -161,9 +161,9 @@ export class AssetServer { /** * @private * @readonly - * @type {Parsers} + * @type {Importers} */ - parsers = new Parsers() + importers = new Importers() /** * @private @@ -211,10 +211,10 @@ export class AssetServer { /** * @template T * @param {Constructor} type - * @param {Parser} parser + * @param {Importer} importer */ - registerParser(type, parser) { - this.parsers.add(parser) + registerImporter(type, importer) { + this.importers.add(importer) } /** @@ -288,12 +288,12 @@ export class AssetServer { * @template T * @param {TypeId} typeId * @param {string} path - * @returns {Parser} + * @returns {Importer} */ - getParser(typeId, path) { + getImporter(typeId, path) { const extension = getFileExtension(path) - return this.parsers.get(typeId, extension) + return this.importers.get(typeId, extension) } /** diff --git a/src/asset/systems/server.js b/src/asset/systems/server.js index 886ef52a..d1d33ab7 100644 --- a/src/asset/systems/server.js +++ b/src/asset/systems/server.js @@ -1,6 +1,6 @@ /** @import { SystemFunc, World } from '../../ecs/index.js' */ /** @import { Constructor } from '../../type/index.js' */ -/** @import { AssetDropped, AssetEvent, Parser, Exporter } from '../index.js' */ +/** @import { AssetDropped, AssetEvent, Importer, Exporter } from '../index.js' */ import { Events } from '../../event/index.js' import { typeidGeneric } from '../../type/index.js' import { TypeRegistry } from '../../reflect/resources/index.js' @@ -26,14 +26,14 @@ export function registerAssetOnAssetServer(type) { /** * @template T * @param {Constructor} type - * @param {Parser} parser + * @param {Importer} importer * @returns {SystemFunc} */ -export function registerAssetParserOnAssetServer(type, parser) { - return function registerAssetParsedOnAssetServer(world) { +export function registerAssetImporterOnAssetServer(type, importer) { + return function registerAssetImporterOnAssetServer(world) { const server = world.getResource(AssetServer) - server.registerParser(type, parser) + server.registerImporter(type, importer) } } @@ -74,17 +74,17 @@ export async function updateAssets(world) { const { assetId, info, path, typeId } = loadRequests[i] try { - const parser = server.getParser(typeId, path) + const importer = server.getImporter(typeId, path) const response = await fetch(path) if (!response.ok) { throw response.statusText } - const asset = await parser.parse(response, typeRegistry) + const asset = await importer.deserialize(response, typeRegistry) if (!asset) { - throw 'Could not parse the asset.' + throw 'Could not deserialize the asset.' } const assets = server.getAssets(typeId) diff --git a/src/asset/tests/assetserver.test.js b/src/asset/tests/assetserver.test.js index 5f6a68ec..cca5dba2 100644 --- a/src/asset/tests/assetserver.test.js +++ b/src/asset/tests/assetserver.test.js @@ -1,6 +1,6 @@ import { deepStrictEqual, notDeepStrictEqual } from "assert"; import test, { describe } from "node:test"; -import { Assets, AssetServer, Exporter, Parser } from "../index.js"; +import { Assets, AssetServer, Exporter, Importer } from "../index.js"; import { typeid, typeidGeneric } from "../../type/index.js"; import { World } from "../../ecs/index.js"; import { updateAssets } from "../systems/index.js"; @@ -19,9 +19,9 @@ class Text { } /** - * @extends {Parser} + * @extends {Importer} */ -class TextParser extends Parser { +class TextImporter extends Importer { constructor(){ super(Text) } @@ -36,7 +36,7 @@ class TextParser extends Parser { * @param {Response} response * @param {import("../../reflect/resources/index.js").TypeRegistry} _typeRegistry */ - async parse(response, _typeRegistry){ + async deserialize(response, _typeRegistry){ const text = await response.text() return new Text(text) } @@ -167,7 +167,7 @@ function createServer() { const server = new AssetServer() server.registerAsset(assets) - server.registerParser(Text,new TextParser()) + server.registerImporter(Text,new TextImporter()) server.registerExporter(Text,new TextExporter()) return server @@ -185,7 +185,7 @@ function createWorld() { world.setResourceByTypeId(typeidGeneric(Events, [AssetSaveSuccess]), new Events()) world.setResourceByTypeId(typeidGeneric(Events, [AssetLoadFail]), new Events()) server.registerAsset(assets) - server.registerParser(Text,new TextParser()) + server.registerImporter(Text,new TextImporter()) server.registerExporter(Text,new TextExporter()) return world diff --git a/src/audio/plugin.js b/src/audio/plugin.js index 222c4cfb..52008505 100644 --- a/src/audio/plugin.js +++ b/src/audio/plugin.js @@ -1,12 +1,12 @@ import { App, Plugin } from '../app/index.js' -import { AssetParserPlugin, AssetPlugin, Assets } from '../asset/index.js' +import { AssetImporterPlugin, AssetPlugin, Assets } from '../asset/index.js' import { AppSchedule } from '../core/index.js' import { ComponentHooks } from '../ecs/index.js' import { typeidGeneric } from '../type/index.js' import { Audio } from './assets/index.js' import { AudioPlayer, AudioOscillator, removeAudioPlayerSink, removeOscillatorSink } from './components/index.js' import { AudioAdded, AudioDropped, AudioModified } from './events/index.js' -import { AudioCommands, AudioParser, AudioAssets, AudioGraph } from './resources/index.js' +import { AudioCommands, AudioImporter, AudioAssets, AudioGraph } from './resources/index.js' import { playAudio, playOscillators, registerAudioTypes } from './systems/index.js' export class AudioPlugin extends Plugin { @@ -40,9 +40,9 @@ export class AudioPlugin extends Plugin { dropped: AudioDropped } })) - .registerPlugin(new AssetParserPlugin({ + .registerPlugin(new AssetImporterPlugin({ asset: Audio, - parser: new AudioParser() + importer: new AudioImporter() })) .registerSystem({ schedule: AppSchedule.Update, system: playAudio }) .registerSystem({ schedule: AppSchedule.Update, system: playOscillators }) diff --git a/src/audio/resources/parser.js b/src/audio/resources/importer.js similarity index 88% rename from src/audio/resources/parser.js rename to src/audio/resources/importer.js index fb343adc..7ccaf16d 100644 --- a/src/audio/resources/parser.js +++ b/src/audio/resources/importer.js @@ -1,11 +1,11 @@ /** @import { TypeRegistry } from '../../reflect/resources/index.js' */ -import { Parser } from '../../asset/index.js' +import { Importer } from '../../asset/index.js' import { Audio } from '../assets/index.js' /** - * @augments {Parser