Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@rock-js/tools

Package Overview
Dependencies
Maintainers
3
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rock-js/tools - npm Package Compare versions

Comparing version
0.12.10
to
0.12.11
+11
dist/src/lib/edit-template.d.ts
/**
* Rename common files that cannot be put into template literaly, e.g. .gitignore.
*/
export declare function renameCommonFiles(projectPath: string): void;
/**
* Replace placeholder with project nae in whole template:
* - Rename paths containing placeholder
* - Replace placeholder in text files
*/
export declare function replacePlaceholder(projectPath: string, normalizedName: string): void;
//# sourceMappingURL=edit-template.d.ts.map
{"version":3,"file":"edit-template.d.ts","sourceRoot":"","sources":["../../../src/lib/edit-template.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,QAcpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,QA4BvB"}
import * as fs from 'node:fs';
import * as path from 'node:path';
import { renameFile, walkDirectory } from './fs.js';
/**
* Placeholder name used in template, that should be replaced with normalized project name.
*/
const PLACEHOLDER_NAME = 'HelloWorld';
/**
* Rename common files that cannot be put into template literaly, e.g. .gitignore.
*/
export function renameCommonFiles(projectPath) {
const sourceGitIgnorePath = path.join(projectPath, 'gitignore');
if (fs.existsSync(sourceGitIgnorePath)) {
fs.renameSync(sourceGitIgnorePath, path.join(projectPath, '.gitignore'));
}
// Harmony platform has a separate gitignore file.
const harmonyGitIgnorePath = path.join(projectPath, 'harmony', 'gitignore');
if (fs.existsSync(harmonyGitIgnorePath)) {
fs.renameSync(harmonyGitIgnorePath, path.join(projectPath, 'harmony', '.gitignore'));
}
}
/**
* Replace placeholder with project nae in whole template:
* - Rename paths containing placeholder
* - Replace placeholder in text files
*/
export function replacePlaceholder(projectPath, normalizedName) {
if (normalizedName === PLACEHOLDER_NAME) {
return;
}
for (const filePath of walkDirectory(projectPath).reverse()) {
// Skip anything inside node_modules
if (filePath.split(path.sep).includes('node_modules')) {
continue;
}
if (!fs.statSync(filePath).isDirectory()) {
replacePlaceholderInTextFile(filePath, normalizedName);
}
if (path.basename(filePath).includes(PLACEHOLDER_NAME)) {
renameFile(filePath, PLACEHOLDER_NAME, normalizedName);
}
else if (path.basename(filePath).includes(PLACEHOLDER_NAME.toLowerCase())) {
renameFile(filePath, PLACEHOLDER_NAME.toLowerCase(), normalizedName.toLowerCase());
}
}
}
function replacePlaceholderInTextFile(filePath, normalizedName) {
const fileContent = fs.readFileSync(filePath, 'utf8');
const replacedFileContent = fileContent
.replaceAll(PLACEHOLDER_NAME, normalizedName)
.replaceAll(PLACEHOLDER_NAME.toLowerCase(), normalizedName.toLowerCase());
if (fileContent !== replacedFileContent) {
fs.writeFileSync(filePath, replacedFileContent, 'utf8');
}
}
//# sourceMappingURL=edit-template.js.map
{"version":3,"file":"edit-template.js","sourceRoot":"","sources":["../../../src/lib/edit-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAChE,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACvC,EAAE,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,kDAAkD;IAClD,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5E,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACxC,EAAE,CAAC,UAAU,CACX,oBAAoB,EACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,cAAsB;IAEtB,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,oCAAoC;QACpC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,4BAA4B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvD,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;aAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAChE,CAAC;YACD,UAAU,CACR,QAAQ,EACR,gBAAgB,CAAC,WAAW,EAAE,EAC9B,cAAc,CAAC,WAAW,EAAE,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,QAAgB,EAChB,cAAsB;IAEtB,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,mBAAmB,GAAG,WAAW;SACpC,UAAU,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAC5C,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5E,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;QACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
export declare function isEmptyDirSync(path: string): boolean;
type CopyDirOptions = {
skipFiles?: string[];
};
export declare function copyDirSync(from: string, to: string, { skipFiles }?: CopyDirOptions): void;
export declare function removeDirSync(path: string): void;
export declare function removeDirs(paths: string[]): Promise<void[]>;
export declare function walkDirectory(currentPath: string): string[];
export declare function renameFile(filePath: string, oldName: string, newName: string): void;
export declare function getNameWithoutExtension(filePath: string): string;
export {};
//# sourceMappingURL=fs.d.ts.map
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/lib/fs.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,WAG1C;AAED,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,SAAc,EAAE,GAAE,cAAmB,QAmBxC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,QAIzC;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,mBAM/C;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAS3D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAO5E;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,UAEvD"}
import fs from 'node:fs';
import fsPromises from 'node:fs/promises';
import path from 'node:path';
import nodePath from 'node:path';
import { mergePackageJsons } from './package-json.js';
export function isEmptyDirSync(path) {
const files = fs.readdirSync(path);
return files.length === 0 || (files.length === 1 && files[0] === '.git');
}
export function copyDirSync(from, to, { skipFiles = [] } = {}) {
fs.mkdirSync(to, { recursive: true });
for (const file of fs.readdirSync(from)) {
const srcFile = nodePath.resolve(from, file);
const stat = fs.statSync(srcFile);
const distFile = nodePath.resolve(to, file);
if (stat.isDirectory()) {
copyDirSync(srcFile, distFile, { skipFiles });
}
else {
if (nodePath.basename(srcFile) === 'package.json') {
mergePackageJsons(srcFile, distFile);
}
else if (!skipFiles?.includes(nodePath.basename(srcFile))) {
fs.copyFileSync(srcFile, distFile);
}
}
}
}
export function removeDirSync(path) {
if (fs.existsSync(path)) {
fs.rmSync(path, { recursive: true });
}
}
export async function removeDirs(paths) {
return await Promise.all(paths.map((dirPath) => fsPromises.rm(dirPath, { recursive: true, force: true })));
}
export function walkDirectory(currentPath) {
if (!fs.lstatSync(currentPath).isDirectory()) {
return [currentPath];
}
const childPaths = fs
.readdirSync(currentPath)
.flatMap((childName) => walkDirectory(path.join(currentPath, childName)));
return [currentPath, ...childPaths];
}
export function renameFile(filePath, oldName, newName) {
const newFileName = nodePath.join(nodePath.dirname(filePath), nodePath.basename(filePath).replaceAll(oldName, newName));
fs.renameSync(filePath, newFileName);
}
export function getNameWithoutExtension(filePath) {
return path.basename(filePath, path.extname(filePath));
}
//# sourceMappingURL=fs.js.map
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/lib/fs.ts"],"names":[],"mappings":"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"}
export declare function gitInitStep(path: string, version: string | null): Promise<void>;
export declare function hasGitClient(): Promise<boolean>;
export declare function isGitRepo(path: string): Promise<boolean>;
export declare function isGitDirty(dir: string): Promise<boolean>;
//# sourceMappingURL=git.d.ts.map
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/git.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,iBAoBrE;AAeD,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAOrD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU9D;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,oBAM3C"}
import logger from './logger.js';
import { spinner } from './prompts.js';
import { spawn } from './spawn.js';
export async function gitInitStep(path, version) {
if (!(await hasGitClient())) {
logger.info('Git client not found, skipping git initialization');
return;
}
if (await isGitRepo(path)) {
logger.debug('Git repo already initialized, skipping git initialization');
return;
}
const loader = spinner();
loader.start('Initializing git repo');
const message = `Initial commit\n\nGenerated by rock${version ? `@${version}` : ''}.`;
await initGitRepo(path, message);
loader.stop('Git repo initialized.');
}
async function initGitRepo(path, message) {
try {
await spawn('git', ['init'], { cwd: path });
await spawn('git', ['branch', '-M', 'main'], { cwd: path });
await spawn('git', ['add', '.'], { cwd: path });
await spawn('git', ['commit', '-m', message], {
cwd: path,
});
}
catch (error) {
logger.warn('Failed to initialize git repository', error);
}
}
export async function hasGitClient() {
try {
await spawn('git', ['--version'], { stdio: 'ignore' });
return true;
}
catch {
return false;
}
}
export async function isGitRepo(path) {
try {
await spawn('git', ['rev-parse', '--is-inside-work-tree'], {
stdio: 'ignore',
cwd: path,
});
return true;
}
catch {
return false;
}
}
export async function isGitDirty(dir) {
const { output } = await spawn('git', ['status', '--porcelain'], {
cwd: dir,
});
return output.trim() !== '';
}
//# sourceMappingURL=git.js.map
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAsB;IACpE,IAAI,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,sCACd,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAC5B,GAAG,CAAC;IACJ,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YAC5C,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;YACzD,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE;QAC/D,GAAG,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC"}
export declare function mergePackageJsons(from: string, to: string): void;
export declare function rewritePackageJson(projectPath: string, packageName: string): void;
//# sourceMappingURL=package-json.d.ts.map
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/lib/package-json.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAczD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAoC1E"}
import * as fs from 'node:fs';
import * as path from 'node:path';
export function mergePackageJsons(from, to) {
const src = JSON.parse(fs.readFileSync(from, 'utf-8'));
if (!fs.existsSync(to)) {
fs.copyFileSync(from, to);
}
const dist = JSON.parse(fs.readFileSync(to, 'utf-8'));
// @todo consider adding a warning when src keys are different from dist keys
dist.scripts = { ...dist.scripts, ...src.scripts };
dist.dependencies = { ...dist.dependencies, ...src.dependencies };
dist.devDependencies = { ...dist.devDependencies, ...src.devDependencies };
dist.peerDependencies = { ...dist.peerDependencies, ...src.peerDependencies };
fs.writeFileSync(to, JSON.stringify(dist, null, 2));
}
export function rewritePackageJson(projectPath, packageName) {
const packageJsonPath = path.join(projectPath, 'package.json');
if (!fs.existsSync(packageJsonPath)) {
return;
}
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
// Override fields from template
packageJson.name = packageName;
packageJson.version = '1.0.0';
packageJson.private = true;
delete packageJson.publishConfig;
if (packageJson.dependencies) {
packageJson.dependencies = Object.fromEntries(Object.entries(packageJson.dependencies).sort());
}
if (packageJson.devDependencies) {
packageJson.devDependencies = Object.fromEntries(Object.entries(packageJson.devDependencies).sort());
}
if (packageJson.peerDependencies) {
packageJson.peerDependencies = Object.fromEntries(Object.entries(packageJson.peerDependencies).sort());
}
fs.writeFileSync(packageJsonPath, JSON.stringify(sortPackageJson(packageJson), null, 2));
}
/**
* Sort fields in package.json to make it cleaner.
* @param packageJson
* @returns
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function sortPackageJson(packageJson) {
const { name, version, private: privateValue, scripts, dependencies, devDependencies, peerDependencies, ...rest } = packageJson;
const result = {};
setField(result, 'name', name);
setField(result, 'version', version);
setField(result, 'private', privateValue);
setField(result, 'scripts', scripts);
setField(result, 'dependencies', dependencies);
setField(result, 'devDependencies', devDependencies);
setField(result, 'peerDependencies', peerDependencies);
for (const key in rest) {
result[key] = rest[key];
}
return result;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function setField(packageJson, key, value) {
if (value !== undefined) {
packageJson[key] = value;
}
}
//# sourceMappingURL=package-json.js.map
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/lib/package-json.ts"],"names":[],"mappings":"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"}
export declare function validateProjectName(name: string): string | undefined;
/**
* Transform project name to PascalCase. The input name can be in either kebab-case or PascalCase.
*
* @param name - Project name
* @returns PascalCase project name
*/
export declare function normalizeProjectName(name: string): string;
//# sourceMappingURL=project-name.d.ts.map
{"version":3,"file":"project-name.d.ts","sourceRoot":"","sources":["../../../src/lib/project-name.ts"],"names":[],"mappings":"AA8DA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,sBAe/C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAQhD"}
/**
* Allow for alphanumeric, hyphen (kebab-case), and underscore (_).
* Has to start with a letter.
*/
const NAME_REGEX = /^[A-Z][0-9A-Z_-]*$/i;
// ref: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
const javaKeywords = [
'abstract',
'continue',
'for',
'new',
'switch',
'assert',
'default',
'goto',
'package',
'synchronized',
'boolean',
'do',
'if',
'private',
'this',
'break',
'double',
'implements',
'protected',
'throw',
'byte',
'else',
'import',
'public',
'throws',
'case',
'enum',
'instanceof',
'return',
'transient',
'catch',
'extends',
'int',
'short',
'try',
'char',
'final',
'interface',
'static',
'void',
'class',
'finally',
'long',
'strictfp',
'volatile',
'const',
'float',
'native',
'super',
'while',
];
const reservedNames = ['react', 'react-native', ...javaKeywords];
export function validateProjectName(name) {
if (name.length === 0) {
return 'Project name cannot be empty.';
}
if (!name.match(NAME_REGEX)) {
return `Invalid project name: "${name}". Please use a valid identifier name (alphanumeric, hyphen, underscore).`;
}
const lowerCaseName = name.toLowerCase();
if (reservedNames.includes(lowerCaseName)) {
return `Invalid project name: "${name}". Can't use reserved name. Please use another name.`;
}
return undefined;
}
/**
* Transform project name to PascalCase. The input name can be in either kebab-case or PascalCase.
*
* @param name - Project name
* @returns PascalCase project name
*/
export function normalizeProjectName(name) {
if (!name)
return '';
return name
.split('-')
.filter(Boolean)
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
.join('');
}
//# sourceMappingURL=project-name.js.map
{"version":3,"file":"project-name.js","sourceRoot":"","sources":["../../../src/lib/project-name.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,gFAAgF;AAChF,MAAM,YAAY,GAAG;IACnB,UAAU;IACV,UAAU;IACV,KAAK;IACL,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;IACT,cAAc;IACd,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,WAAW;IACX,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,WAAW;IACX,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,UAAU;IACV,UAAU;IACV,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;CACR,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,CAAC;AAEjE,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,0BAA0B,IAAI,2EAA2E,CAAC;IACnH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,OAAO,0BAA0B,IAAI,sDAAsD,CAAC;IAC9F,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
+5
-0

@@ -13,2 +13,7 @@ export * from './lib/prompts.js';

export * from './lib/build-cache/localBuildCache.js';
export * from './lib/fs.js';
export * from './lib/package-json.js';
export * from './lib/project-name.js';
export * from './lib/edit-template.js';
export * from './lib/git.js';
export { getBinaryPath } from './lib/build-cache/getBinaryPath.js';

@@ -15,0 +20,0 @@ export { findDevServerPort } from './lib/dev-server/findDevServerPort.js';

@@ -13,2 +13,7 @@ export * from './lib/prompts.js';

export * from './lib/build-cache/localBuildCache.js';
export * from './lib/fs.js';
export * from './lib/package-json.js';
export * from './lib/project-name.js';
export * from './lib/edit-template.js';
export * from './lib/git.js';
export { getBinaryPath } from './lib/build-cache/getBinaryPath.js';

@@ -15,0 +20,0 @@ export { findDevServerPort } from './lib/dev-server/findDevServerPort.js';

+2
-2
{
"name": "@rock-js/tools",
"version": "0.12.10",
"version": "0.12.11",
"description": "Internal core utilities for Rock",

@@ -33,3 +33,3 @@ "type": "module",

"devDependencies": {
"@rock-js/test-helpers": "^0.12.10",
"@rock-js/test-helpers": "^0.12.11",
"@types/adm-zip": "^0.5.7"

@@ -36,0 +36,0 @@ },

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet