
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@sundogee/codesmith
Advanced tools
Micro-generator framework that makes it easy for an entire team to create files with a level of uniformity
the easy-to-use and developer-friendly Micro-generator framework
codesmith is a "micro-generator framework." inspired by plot and yeamon but for extensibility and community-friendly
$ npm install -g @sundogee/codesmith
codestore or community$ codesmith @codestore/react
Have fun!
Package Config File is a file which determine how the generator run
'use strict';
const path = require('path');
const ts = require('typescript');
const changeCase = require('change-case');
module.exports = function (codesmith) {
// this generator add a new class component
codesmith.setGenerator('class-component-ts', {
description: 'Add a new class component(ts)',
questions: [
{
type: 'directory',
name: 'basePath',
message: 'Where you like to put this component?',
basePath: ".",
},
{
type: 'input',
name: 'name',
message: "What's your component class name?"
},
{
type: 'checkbox',
name: 'decorators',
message: "What decorator do you want?",
choices: [
{name: 'withRouter', value: 'withRouter'},
// {name: 'connect(redux)', value: 'connectRedux'}
]
}
],
actions: [
{
type: 'add',
path: '{{basePath}}/{{dashCase name}}.tsx',
templateFile: 'generators/class-component-ts/templates/component.tsx',
abortOnFail: true
},
{
type: 'ts/ast',
when: (data, config) => {
if(data.decorators.indexOf('withRouter') !== -1) {
return true
}
return false
},
ast: (tsMorch, data) => {
const project = new tsMorch.Project({});
project.addExistingSourceFiles(`${process.cwd()}/${data.basePath}/${changeCase.paramCase(data.name)}.tsx`);
const testFile = project.getSourceFileOrThrow(`${changeCase.paramCase(data.name)}.tsx`)
testFile.transform((traversal) => {
const node = traversal.visitChildren(); // return type is `ts.Node`
if (ts.isExportAssignment(node)) {
const callExpression = ts.createCall(
ts.createIdentifier('withRouter'),
undefined, // type arguments, e.g. Foo<T>()
[
node.expression
]
)
return ts.createExportAssignment(
undefined,
undefined,
false,
callExpression
);
}
return node;
});
testFile.addImportDeclaration({
namedImports: ['withRouter'],
moduleSpecifier: 'react-router'
})
return project.save();
}
}
]
});
codesmith.setGenerator('functional-component-ts', {
description: 'Add a new functional component(ts)',
questions: [
{
type: 'directory',
name: 'basePath',
message: 'Where you like to put this component?',
basePath: ".",
},
{
type: 'input',
name: 'name',
message: "What's your component class name?"
}
],
actions: [
{
type: 'add',
path: '{{basePath}}/{{dashCase name}}.tsx',
templateFile: 'generators/functional-component-ts/templates/component.tsx',
abortOnFail: true
}
]
});
};
react snippet into your projectvue snippet into your projectThanks goes to these wonderful people (emoji key):
lwyj123 💻 🎨 🚇 🤔 👀 |
FAQs
Micro-generator framework that makes it easy for an entire team to create files with a level of uniformity
We found that @sundogee/codesmith demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 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
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.