Security News
Highlights from the 2024 Rails Community Survey
A record 2,709 developers participated in the 2024 Ruby on Rails Community Survey, revealing key tools, practices, and trends shaping the Rails ecosystem.
@babel/template
Advanced tools
The @babel/template package is a part of the Babel toolchain that allows developers to create AST (Abstract Syntax Tree) nodes with placeholders programmatically. This is useful for code generation, transformation, and manipulation tasks where you want to produce syntactically correct code snippets based on a template with variable parts.
Building AST Nodes
This feature allows you to build AST nodes using template literals with placeholders. The placeholders are then replaced with actual values to create a syntactically correct code snippet.
const template = require('@babel/template').default;
const buildRequire = template(`
const %%importName%% = require(%%source%%);
`);
const ast = buildRequire({
importName: template.identifier('myModule'),
source: template.stringLiteral('my-module')
});
Using Placeholders
This feature demonstrates how to use placeholders for different parts of the code, such as function names, parameters, and bodies. The placeholders are replaced with AST nodes representing identifiers, arrays of identifiers, and block statements, respectively.
const template = require('@babel/template').default;
const buildFunction = template(`
function %%funcName%%(%%params%%) {
return %%body%%;
}
`);
const ast = buildFunction({
funcName: template.identifier('myFunction'),
params: [template.identifier('a'), template.identifier('b')],
body: template.blockStatement([])
});
Customizing Placeholder Patterns
This feature shows how to customize the placeholder pattern used in the template. This is useful when you want to define a specific pattern for your placeholders to avoid conflicts with other parts of the code.
const template = require('@babel/template').default;
const buildAssertion = template(`
assert(%%test%%, '%%errorMessage%%');
`, {
placeholderPattern: /^%%[a-zA-Z0-9_]+%%$/
});
const ast = buildAssertion({
test: template.binaryExpression('===', template.identifier('a'), template.numericLiteral(3)),
errorMessage: template.stringLiteral('a is not 3')
});
Recast is a JavaScript AST manipulation library that allows you to parse, transform, and print code. It provides a different API than @babel/template but serves a similar purpose in terms of manipulating AST nodes. Recast preserves the original formatting of the code, which is a feature that distinguishes it from @babel/template.
Escodegen is a code generator for ECMAScript. It takes an AST and turns it into code. While it doesn't provide templating functionality like @babel/template, it is often used in conjunction with AST manipulation libraries to generate code after transformations have been applied.
Jscodeshift is a toolkit for running codemods over multiple JavaScript or TypeScript files. It uses recast under the hood for parsing and printing, while providing a higher-level API for transforming code. It's more focused on large-scale codebase refactors compared to the more granular transformations that @babel/template is typically used for.
Generate an AST from a string template.
See our website @babel/template for more information or the issues associated with this package.
Using npm:
npm install --save-dev @babel/template
or using yarn:
yarn add @babel/template --dev
v7.25.0 (2024-07-26)
babel-helpers
, babel-plugin-proposal-explicit-resource-management
, babel-runtime-corejs3
babel-plugin-transform-typescript
babel-helper-create-class-features-plugin
, babel-helper-function-name
, babel-helper-plugin-utils
, babel-helper-wrap-function
, babel-plugin-bugfix-safari-class-field-initializer-scope
, babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression
, babel-plugin-transform-classes
, babel-plugin-transform-function-name
, babel-preset-env
, babel-traverse
, babel-types
ensureFunctionName
to NodePath.prototype
(@nicolo-ribaudo)babel-helper-hoist-variables
, babel-helper-plugin-utils
, babel-plugin-proposal-async-do-expressions
, babel-plugin-transform-modules-systemjs
, babel-traverse
hoistVariables
to Scope.prototype
(@nicolo-ribaudo)babel-helper-create-class-features-plugin
, babel-helper-module-transforms
, babel-helper-plugin-utils
, babel-helper-split-export-declaration
, babel-plugin-transform-classes
, babel-traverse
, babel-types
splitExportDeclaration
to NodePath.prototype
(@nicolo-ribaudo)babel-helper-create-class-features-plugin
, babel-helper-environment-visitor
, babel-helper-module-transforms
, babel-helper-plugin-utils
, babel-helper-remap-async-to-generator
, babel-helper-replace-supers
, babel-plugin-bugfix-firefox-class-in-computed-class-key
, babel-plugin-bugfix-v8-static-class-fields-redefine-readonly
, babel-plugin-transform-async-generator-functions
, babel-plugin-transform-classes
, babel-traverse
environment-visitor
helper into @babel/traverse
(@nicolo-ribaudo)babel-core
, babel-parser
.extra.async
(@nicolo-ribaudo)babel-compat-data
, babel-plugin-bugfix-safari-class-field-initializer-scope
, babel-preset-env
bugfix-safari-class-field-initializer-scope
(@davidtaylorhq)babel-plugin-transform-block-scoping
, babel-traverse
, babel-types
babel-helper-import-to-platform-api
, babel-plugin-proposal-json-modules
uncheckedRequire
option for JSON imports to CJS (@nicolo-ribaudo)babel-helper-transform-fixture-test-runner
, babel-node
babel-node --eval
(@slatereax)babel-compat-data
, babel-helper-create-regexp-features-plugin
, babel-plugin-proposal-duplicate-named-capturing-groups-regex
, babel-plugin-transform-duplicate-named-capturing-groups-regex
, babel-preset-env
, babel-standalone
babel-generator
babel-template
, babel-types
babel-generator
(
before ambiguous tokens (@nicolo-ribaudo)babel-helper-function-name
, babel-plugin-transform-arrow-functions
, babel-plugin-transform-function-name
, babel-preset-env
, babel-traverse
helper-function-name
logic (@nicolo-ribaudo)babel-parser
, babel-plugin-proposal-pipeline-operator
babel-plugin-transform-classes
assertThisInitialized
(@liuxingbaoyu)babel-helper-create-class-features-plugin
, babel-helper-replace-supers
, babel-helpers
, babel-plugin-proposal-decorators
, babel-plugin-transform-class-properties
, babel-plugin-transform-classes
, babel-plugin-transform-exponentiation-operator
, babel-plugin-transform-object-super
, babel-plugin-transform-private-methods
, babel-runtime-corejs2
, babel-runtime-corejs3
, babel-runtime
super.x
output (@liuxingbaoyu)babel-plugin-transform-class-properties
, babel-plugin-transform-classes
FAQs
Generate an AST from a string template.
The npm package @babel/template receives a total of 41,599,236 weekly downloads. As such, @babel/template popularity was classified as popular.
We found that @babel/template demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A record 2,709 developers participated in the 2024 Ruby on Rails Community Survey, revealing key tools, practices, and trends shaping the Rails ecosystem.
Security News
In 2023, data breaches surged 78% from zero-day and supply chain attacks, but developers are still buried under alerts that are unable to prevent these threats.
Security News
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.