This project provides a TypeScript Node.js CommonJS/ES6 module
with the code used to perform the Liquid substitutions when parsing
the xpm package.json file.
Note: Compatibility with legacy CommonJS is required until VS Code extensions will be updated to import ES6 modules.
The project is open-source and hosted on GitHub as xpack/xpm-liquid-ts.
This page documents how to use this module in an user application. For maintainer information, see the separate README-MAINTAINER page.
A recent Node.js (>=16.0.0), since the TypeScript code is compiled into ECMAScript 2020 code, and the tests use ES6 modules.
The module is available as
@xpack/xpm-liquid-ts
from the public npmjs repository;
it can be added as a dependency to any TypeScript or JavaScript
project with npm install:
npm install --save @xpack/xpm-liquid-ts@latest
The module does not provide any executables, and generally there are no reasons to install it globally.
This section is intended for those who want to use this module in their own projects.
The @xpack/xpm-liquid module can be imported into both TypeScript
and JavaScript Node.js code.
In TypeScript and ECMAScript modules, use import:
import { XpmLiquid } from '@xpack/xpm-liquid'
In JavaScript with CommonJS, use require():
const { XpmLiquid } = require('@xpack/xpm-liquid')
To use the XpmLiquid class, create an instance of the engine, provide the
package.json object, possibly the name of the configuration, and
call performSubstitutions():
const xpmLiquid = new XpmLiquid(log)
const xpmLiquidMap = xpmLiquid.prepareMap(packageJson, 'Debug')
const str = await xpmLiquid.performSubstitutions(
'{{ "build" | path_join: configuration.name | to_filename }}',
xpmLiquidMap)
The entire project package.json is available as the package variable:
packageAll user defined properties (project and configuration) are grouped
below the properties variable:
propertiesIf the substitution refers to a certain build configuration, the configuration
name and the entire configuration content are available separately below
the configuration variable. Configuration properties are added to the
properties variables, possibly overriding project properties.
configuration.nameconfiguration.*Variables based on the Node.js process environment:
envVariables based on the Node.js os definitions:
os.EOLos.arch (like 'arm', 'arm64', 'ia32', 'x64')os.constantsos.cpusos.endiannessos.homediros.hostnameos.platform (like 'darwin', 'linux', 'win32')os.releaseos.tmpdiros.typeos.version (available since Node 12)Variables based on the Node.js path definitions:
path.delimiter (; for Windows, : for POSIX)path.sep (\ on Windows, / on POSIX)path.win32.delimiter (;)path.win32.sep (``)path.posix.delimiter (:)path.posix.sep (/)Examples:
"buildFolderRelativePath": "build{{ path.sep }}{{ configuration.name | to_filename }}"Filters based on Node.js path functions:
path_basenamepath_dirnamepath_normalizepath_joinpath_relativepath_posix_basenamepath_posix_dirnamepath_posix_normalizepath_posix_joinpath_posix_relativepath_win32_basenamepath_win32_dirnamepath_win32_normalizepath_win32_joinpath_win32_relativeFilters based on Node.js utils functions:
util_formatCustom filter to convert generic names to names accepted as file names (letters, digits, dash):
to_filenameto_posix_filenameto_win32_filenameExamples:
"buildFolderRelativePath": "{{ "build" | path_join: configuration.name | to_filename | downcase }"The undefined variables in tests do not trigger undefined variable messages
and allow to use defaults, like:
{{ env.OPTIMIZATION | default: '-O2' }}
For more details on the available class definitions, including all methods, accessors, properties, etc, please see the TypeDoc reference pages.
The @xpack/xpm-liquid-ts module is fully functional and stable.
The main clients for this module is the xpm CLI application and the
VS Code xPack C/C++ Managed Build
extension.
The module is tested with 100% coverage and CI tested on every push via GitHub Actions.
According to semver rules:
Major version X (X.y.z | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the public API.
The project was updated to dual ESM & CJS.
The original content is released under the MIT License, with all rights reserved to Liviu Ionescu.
Generated using TypeDoc