Skip to content

l0.DependencyControl.PackageRecord

PackageRecord = require "l0.DependencyControl.PackageRecord"
local PackageRecord = require("l0.DependencyControl.PackageRecord")

PackageRecord

DependencyControl record representing one managed or unmanaged script/module.

Constructor

packageRecord = PackageRecord args
local packageRecord = PackageRecord(args)

Creates a DependencyControl record from explicit arguments and/or script globals.

param type description
args PackageRecordArgs

Instance methods

loadConfig

packageRecord\loadConfig importRecord
packageRecord:loadConfig(importRecord)

Loads this record's script/module configuration hive.

param type description
importRecord? boolean Overwrite this record's fields from the stored config (default false).

Returns:

  • shouldWriteConfig boolean

writeConfig

packageRecord\writeConfig!
packageRecord:writeConfig()

Writes this record's persisted fields to the shared config file.

getVersionNumber

Deprecated — Use SemanticVersion.toPacked.

packageRecord\getVersionNumber value
packageRecord:getVersionNumber(value)

Converts a version to its packed-integer form, defaulting to this record's version.

param type description
value? number|string Version to convert (default: this record's version).

Returns:

  • versionNumber number? — nil on an invalid version string.
  • err string?

getVersionString

Deprecated — Use SemanticVersion.toString.

packageRecord\getVersionString version
packageRecord:getVersionString(version)

Converts a version to its string form, defaulting to this record's version.

param type description
version? number|string Version to convert (default: this record's version).

Returns:

  • versionString string? — nil on an invalid version.
  • err string?

getConfigFileName

packageRecord\getConfigFileName!
packageRecord:getConfigFileName()

Resolves this record's external config file path. Config files share one directory so they stay discoverable to other scripts through the DependencyControl config file.

Returns:

  • path string

getConfigHandler

packageRecord\getConfigHandler defaults, section, noLoad
packageRecord:getConfigHandler(defaults, section, noLoad)

Creates a ConfigView for this record's script-specific config file.

param type description
defaults? table Default values for the config.
section? string|string[] Config section path.
noLoad? boolean Skip loading the file immediately.

Returns:

getLogger

packageRecord\getLogger args
packageRecord:getLogger(args)

Creates a logger preconfigured for this record.

param type description
args? table Logger options; missing fields are filled from this record's config.

Returns:

getFileCache

packageRecord\getFileCache name, opts
packageRecord:getFileCache(name, opts)

Returns a shared, persistent on-disk cache for this script, under the user's configured cache location. It lives at <the configured cache dir>/<this script's namespace>/<name>, so each script gets its own namespaced caches and honors the DependencyControl config. Repeated calls for the same name share one instance.

param type description
name string A short name for the cache's purpose (e.g. "thumbnails").
opts? FileCacheOptions Default cache options; applied only when the cache is first created.

Returns:

checkVersion

packageRecord\checkVersion value, precision
packageRecord:checkVersion(value, precision)

Checks whether this record's version satisfies a minimum version.

param type description
value number|string|PackageRecord Version, or record, to compare against.
precision? SemverPrecision Precision to compare at (default "patch").

Returns:

  • satisfied boolean?
  • maskedOrError number|string|nil — Masked comparison value on success, or an error message.

getSubmodules

packageRecord\getSubmodules!
packageRecord:getSubmodules()

Retrieves managed submodules registered under this module namespace.

Returns:

  • submodules string[]? — Submodule namespaces, or nil for non-module records.
  • config ConfigView? — The module config section handler.

requireModules

packageRecord\requireModules modules, addFeeds
packageRecord:requireModules(modules, addFeeds)

Loads or updates required modules and returns their references.

param type description
modules? (string|RequiredModuleSpec)[] Module specs to load (default: this record's requiredModules).
addFeeds? string[] Extra feed URLs to search (default: this record's feed).

Returns:

  • ... any — The loaded module references, in order; an absent optional module comes back as nil.

registerTests

packageRecord\registerTests ...
packageRecord:registerTests(...)

Registers DepUnit tests for this record if test modules are available.

param type description
... any Extra arguments forwarded to the suite's import function (see UnitTestSuite for its full signature).

register

packageRecord\register selfRef, ...
packageRecord:register(selfRef, ...)

Finalizes module registration and swaps dummy module refs for real refs. Call it in place of returning the module. Modules registered this way may depend on each other circularly, provided they don't use each other during construction.

param type description
selfRef table The module's real exported table.
... any Forwarded to registerTests().

Returns:

  • selfRef table

registerMacro

packageRecord\registerMacro name, description, process, validate, isActive, submenu
packageRecord:registerMacro(name, description, process, validate, isActive, submenu)

Registers a single Aegisub macro with DependencyControl update hooks. When the first argument is a function, name and description are taken from the script and the remaining arguments shift left. A customMenu property in the script's config overrides the macro's menu location; it is a user-owned setting, so scripts must not change it without consent.

param type description
name? string|function Macro name, or the process function in the short signature.
description? string|function Macro description, or the validate function in the short signature.
process function Macro processing callback.
validate? function Aegisub validation callback.
isActive? function Aegisub is-active callback.
submenu? string|boolean Submenu name, or true to use the script name.

registerMacros

packageRecord\registerMacros macros, submenuDefault, testExports
packageRecord:registerMacros(macros, submenuDefault, testExports)

Registers multiple macros declared in table form.

param type description
macros? table[] Macro definitions, each an argument list for registerMacro.
submenuDefault? string|boolean Default submenu value applied when a macro omits it (default true).
testExports? table Internals to expose to this record's DepUnit test suite, forwarded to its test import function.

setVersion

packageRecord\setVersion version
packageRecord:setVersion(version)

Parses and sets this record's semantic version without raising on invalid input.

param type description
version number|string

Returns:

  • version number? — The parsed integer version, or nil on error.
  • err string?

validateNamespace

packageRecord\validateNamespace!
packageRecord:validateNamespace()

Validates this record's namespace, always passing for virtual records.

Returns:

  • valid boolean
  • err string?

getPossibleEntryPointPaths

packageRecord\getPossibleEntryPointPaths baseDir
packageRecord:getPossibleEntryPointPaths(baseDir)

Returns all candidate entry point paths for this record under a given base directory, covering .moon and .lua extensions and init.* variants for modules.

param type description
baseDir string Absolute automation base directory.

Returns:

  • paths string[]

getEntryPointPath

packageRecord\getEntryPointPath!
packageRecord:getEntryPointPath()

Finds this record's primary entry point file, checking ?user then ?data automation directories.

Returns:

  • path string?
  • isUserPath boolean? — True when found under ?user, false when found under ?data, nil when not found.

uninstall

packageRecord\uninstall removeConfig
packageRecord:uninstall(removeConfig)

Uninstalls this managed record and removes matching files from automation paths.

param type description
removeConfig? boolean Also delete the record's config (default true).

Returns:

  • success boolean? — nil when the record can't be uninstalled (virtual/unmanaged).
  • result table|string|nil — Per-file removal results, or an error message.

Class methods

getRegisteredRecord

PackageRecord\getRegisteredRecord namespace
PackageRecord:getRegisteredRecord(namespace)

Returns the live, installed record registered for a namespace, or nil if none is registered or the registered one is still a virtual (not-yet-installed) placeholder.

param type description
namespace string

Returns:

getAllRegisteredRecords

PackageRecord\getAllRegisteredRecords!
PackageRecord:getAllRegisteredRecords()

Returns all currently registered live records keyed by namespace. Includes virtual (not-yet-installed) placeholders.

Returns:

  • records table<string, PackageRecord>

checkOptionalModules

PackageRecord.checkOptionalModules modules
PackageRecord.checkOptionalModules(modules)

Validates optional module availability for the requested feature set.

param type description
modules string|string[] Feature name(s) whose optional modules to check.

Returns:

  • available boolean
  • err string? — Error message listing missing modules.

loadGlobalConfig

PackageRecord\loadGlobalConfig!
PackageRecord:loadGlobalConfig()

Loads global DependencyControl configuration.

Returns:

Fields

field type description
semanticVersion SemanticVersion This record's version as a value object (the canonical store).
version integer This record's version as a packed integer; assignable from a string, packed integer, or SemanticVersion.
depConf table

Types

ModuleAlias

A provided-module alias: the require name this module satisfies plus optional metadata. In a provides list a bare string is shorthand for {name = <string>}; records and feeds store the normalized table form. version is the version of the provided module the provider satisfies (reserved — not yet consulted during resolution, which uses the provider's own release version).

RequiredModuleSpec

A required-module dependency. A bare require name is shorthand for a version-agnostic requirement. The table form below adds a version floor and a source to fetch the module from when it is missing.

field type description
[1]? string The module namespace (alternative to moduleName).
moduleName? string The module namespace, as used in require.
version? string|number Minimum version; the module must carry a compatible DependencyControl version record.
url? string Where the module can be downloaded, shown to the user in error messages.
feed? string Update feed used to fetch the module when it is missing.
optional? boolean When true a missing module is not an error, but a module that is found is still version-checked.
name? string Friendly name used in error messages.

PackageRecordArgs

Constructor arguments for a PackageRecord. All fields are optional; unset fields are filled from script_* globals (for automation scripts) or sensible defaults.

field type description
[1]? (string|RequiredModuleSpec)[] Required module specs, passed positionally.
moduleName? string Module namespace; its presence marks this record as a module rather than an automation script.
name? string Display name (defaults to the script/module name).
description? string Description (defaults to script_description).
author? string Author (defaults to script_author).
version? number|string Semantic version (defaults to script_version).
namespace? string Unique namespace (defaults to script_namespace).
url? string Project or homepage URL.
feed? string Update feed URL.
configFile? string Config file name (defaults to ".json").
virtual? boolean Mark as a not-yet-installed placeholder record.
recordType? RecordType A domain.RecordType value (default Managed).
requiredModules? (string|RequiredModuleSpec)[] Required module specs (alternative to the positional list).
provides? (string|ModuleAlias)[] Module aliases this module satisfies for require (bare strings are normalized to ModuleAlias tables).
readGlobalScriptVars? boolean Read script_* globals for unset fields (default true).
saveRecordToConfig? boolean Persist this record to the config file (default true).