Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
b6c13cc44d | |||
8a6058c421 |
BIN
.serena/cache/typescript/document_symbols_cache_v23-06-25.pkl
vendored
Normal file
BIN
.serena/cache/typescript/document_symbols_cache_v23-06-25.pkl
vendored
Normal file
Binary file not shown.
31
.serena/memories/code_style_conventions.md
Normal file
31
.serena/memories/code_style_conventions.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Code Style and Conventions
|
||||
|
||||
## Naming Conventions
|
||||
- Interfaces prefixed with `I` (e.g., `ITsPublishJson`)
|
||||
- Types prefixed with `T` (when applicable)
|
||||
- All filenames in lowercase
|
||||
- Class files named as `classes.<classname>.ts`
|
||||
- Test files named as `test.<name>.ts` or `*.both.ts`, `*.node.ts`, `*.browser.ts`
|
||||
|
||||
## Import Style
|
||||
- Module dependencies imported via `ts/plugins.ts`
|
||||
- Use full path references: `plugins.myModule.myClass()`
|
||||
- Import TypeScript files directly in tests, never compiled JavaScript
|
||||
|
||||
## Code Patterns
|
||||
- Async/await preferred over callbacks
|
||||
- Classes for main logic (TsPublish, PublishModule)
|
||||
- Centralized logging via `logging.ts`
|
||||
- Plugins pattern for external dependencies
|
||||
|
||||
## TypeScript Conventions
|
||||
- Use type annotations
|
||||
- Export classes and functions explicitly
|
||||
- Module exports through index.ts
|
||||
- Interfaces in separate interfaces/ directory
|
||||
|
||||
## File Organization
|
||||
- Source code in `ts/` directory
|
||||
- Tests in `test/` directory
|
||||
- Compiled output in `dist_ts/`
|
||||
- No uppercase in filenames
|
49
.serena/memories/logging_improvements_2025.md
Normal file
49
.serena/memories/logging_improvements_2025.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Logging Improvements - January 2025
|
||||
|
||||
## Overview
|
||||
Enhanced TSPublish logging system with @push.rocks/smartlog and @push.rocks/consolecolor for better visual feedback and user experience.
|
||||
|
||||
## Changes Made
|
||||
|
||||
### 1. Dependencies
|
||||
- Added @push.rocks/consolecolor (v2.0.3) for colored console output
|
||||
|
||||
### 2. Enhanced logging.ts
|
||||
- Created color-coded log level indicators with emojis
|
||||
- Added specialized logging functions:
|
||||
- `logInfo()` - Cyan info messages
|
||||
- `logSuccess()` - Green success messages
|
||||
- `logWarn()` - Orange warning messages
|
||||
- `logError()` - Red error messages
|
||||
- `logStart()` - Blue start indicators
|
||||
- `logDone()` - Green completion indicators
|
||||
- `logPackage()` - Package-specific messages with icons
|
||||
- `logBuild()` - Build messages with hammer icon
|
||||
- `logPublish()` - Publish messages with rocket icon
|
||||
- `logOngoing()` - Ongoing operations with spinner icon
|
||||
- Added visual helpers:
|
||||
- `logSeparator()` - Cyan line separator
|
||||
- `logHeader()` - Colored section headers
|
||||
- `logProgress()` - Progress bar with percentage
|
||||
|
||||
### 3. Updated classes.tspublish.ts
|
||||
- Added colored header at startup
|
||||
- Module discovery uses colored bullets
|
||||
- Progress tracking for module processing
|
||||
- Better visual separation between phases
|
||||
|
||||
### 4. Updated classes.publishmodule.ts
|
||||
- Added visual indicators for each operation phase
|
||||
- Build process shows building status and completion
|
||||
- Publishing shows rocket icon and success message
|
||||
- NPM registry checks have clearer warnings
|
||||
|
||||
### 5. Updated index.ts
|
||||
- Replaced console.log with logStart()
|
||||
|
||||
## Benefits
|
||||
- Clearer visual hierarchy of information
|
||||
- Easier to track progress through long operations
|
||||
- Better distinction between info, warnings, and errors
|
||||
- More professional and polished CLI output
|
||||
- Semantic icons make status immediately recognizable
|
45
.serena/memories/project_overview.md
Normal file
45
.serena/memories/project_overview.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# TSPublish Project Overview
|
||||
|
||||
## Purpose
|
||||
TSPublish is a tool designed to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment. It helps manage and automate the publishing of individual packages from a monorepo structure.
|
||||
|
||||
## Tech Stack
|
||||
- **Language**: TypeScript
|
||||
- **Runtime**: Node.js
|
||||
- **Package Manager**: pnpm (v10.11.0)
|
||||
- **Build Tool**: @git.zone/tsbuild
|
||||
- **Testing**: @git.zone/tstest with @push.rocks/tapbundle
|
||||
- **CLI Framework**: @push.rocks/smartcli
|
||||
- **Logging**: @push.rocks/smartlog (currently basic usage)
|
||||
|
||||
## Main Dependencies
|
||||
- @push.rocks/smartcli - CLI interface
|
||||
- @push.rocks/smartdelay - Delay utilities
|
||||
- @push.rocks/smartfile - File operations
|
||||
- @push.rocks/smartlog - Logging
|
||||
- @push.rocks/smartnpm - NPM registry interactions
|
||||
- @push.rocks/smartpath - Path utilities
|
||||
- @push.rocks/smartrequest - HTTP requests
|
||||
- @push.rocks/smartshell - Shell command execution
|
||||
|
||||
## Project Structure
|
||||
- `ts/` - TypeScript source files
|
||||
- `index.ts` - Main entry point
|
||||
- `classes.tspublish.ts` - Main TsPublish class
|
||||
- `classes.publishmodule.ts` - PublishModule class for individual packages
|
||||
- `classes.giteaassets.ts` - Gitea assets management
|
||||
- `logging.ts` - Logger configuration
|
||||
- `plugins.ts` - External dependencies
|
||||
- `paths.ts` - Path constants
|
||||
- `interfaces/` - TypeScript interfaces
|
||||
- `test/` - Test files
|
||||
- `dist_ts/` - Compiled JavaScript output
|
||||
- `cli.js` - CLI entry point (bin script)
|
||||
|
||||
## Key Features
|
||||
1. Scans monorepo for directories starting with "ts"
|
||||
2. Validates packages via tspublish.json files
|
||||
3. Creates package.json dynamically for each module
|
||||
4. Builds TypeScript code before publishing
|
||||
5. Checks npm registry for version conflicts
|
||||
6. Publishes packages to npm registry
|
34
.serena/memories/suggested_commands.md
Normal file
34
.serena/memories/suggested_commands.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Suggested Commands for TSPublish Development
|
||||
|
||||
## Build & Test Commands
|
||||
- `pnpm build` - Build the TypeScript project (runs tsbuild --web --allowimplicitany)
|
||||
- `pnpm test` - Run the test suite (runs tstest test/ --web)
|
||||
- `pnpm buildDocs` - Generate documentation (runs tsdoc)
|
||||
|
||||
## Development Commands
|
||||
- `tsx ts/index.ts` - Run the main entry point directly
|
||||
- `tsx test/test.ts` - Run specific test file
|
||||
- `tstest test/test.some.ts --verbose` - Run specific test with verbose output
|
||||
- `tsbuild check test/**/* --skiplibcheck` - Type check test files
|
||||
|
||||
## Package Management
|
||||
- `pnpm install` - Install dependencies
|
||||
- `pnpm install --save-dev <package>` - Install dev dependency
|
||||
- `pnpm add <package>` - Add production dependency
|
||||
|
||||
## Git Commands (Linux)
|
||||
- `git status` - Check repository status
|
||||
- `git diff` - View changes
|
||||
- `git log` - View commit history
|
||||
- `git mv <old> <new>` - Move/rename files preserving history
|
||||
|
||||
## File System Commands (Linux)
|
||||
- `ls` - List directory contents
|
||||
- `cd` - Change directory
|
||||
- `find` - Find files
|
||||
- `grep` - Search file contents
|
||||
- `cat` - Display file contents
|
||||
|
||||
## CLI Usage
|
||||
- `./cli.js` - Run the tspublish CLI
|
||||
- `node cli.js` - Alternative way to run CLI
|
29
.serena/memories/task_completion_checklist.md
Normal file
29
.serena/memories/task_completion_checklist.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Task Completion Checklist
|
||||
|
||||
When completing any development task on TSPublish:
|
||||
|
||||
## 1. Build Verification
|
||||
- Run `pnpm build` to ensure TypeScript compiles without errors
|
||||
- No use of --skiplibcheck flag
|
||||
|
||||
## 2. Test Execution
|
||||
- Run `pnpm test` to verify all tests pass
|
||||
- For specific test files: `tsx test/test.specific.ts`
|
||||
|
||||
## 3. Type Checking
|
||||
- Type check test files: `tsbuild check test/**/* --skiplibcheck`
|
||||
- Type check source files: `pnpm build`
|
||||
|
||||
## 4. Code Quality
|
||||
- Ensure changes are focused and goal-oriented
|
||||
- Verify no unnecessary modifications were made
|
||||
- Check that code follows existing patterns and conventions
|
||||
|
||||
## 5. Documentation
|
||||
- Update readme.hints.md if new insights discovered
|
||||
- Update readme.plan.md if working from a plan
|
||||
|
||||
## 6. Version Control
|
||||
- Use `git mv` for file renames to preserve history
|
||||
- Make small, focused commits
|
||||
- Never commit without explicit user request
|
68
.serena/project.yml
Normal file
68
.serena/project.yml
Normal file
@@ -0,0 +1,68 @@
|
||||
# language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby)
|
||||
# * For C, use cpp
|
||||
# * For JavaScript, use typescript
|
||||
# Special requirements:
|
||||
# * csharp: Requires the presence of a .sln file in the project folder.
|
||||
language: typescript
|
||||
|
||||
# whether to use the project's gitignore file to ignore files
|
||||
# Added on 2025-04-07
|
||||
ignore_all_files_in_gitignore: true
|
||||
# list of additional paths to ignore
|
||||
# same syntax as gitignore, so you can use * and **
|
||||
# Was previously called `ignored_dirs`, please update your config if you are using that.
|
||||
# Added (renamed)on 2025-04-07
|
||||
ignored_paths: []
|
||||
|
||||
# whether the project is in read-only mode
|
||||
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
|
||||
# Added on 2025-04-18
|
||||
read_only: false
|
||||
|
||||
|
||||
# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
|
||||
# Below is the complete list of tools for convenience.
|
||||
# To make sure you have the latest list of tools, and to view their descriptions,
|
||||
# execute `uv run scripts/print_tool_overview.py`.
|
||||
#
|
||||
# * `activate_project`: Activates a project by name.
|
||||
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
|
||||
# * `create_text_file`: Creates/overwrites a file in the project directory.
|
||||
# * `delete_lines`: Deletes a range of lines within a file.
|
||||
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
|
||||
# * `execute_shell_command`: Executes a shell command.
|
||||
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
|
||||
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
|
||||
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
|
||||
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
|
||||
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file or directory.
|
||||
# * `initial_instructions`: Gets the initial instructions for the current project.
|
||||
# Should only be used in settings where the system prompt cannot be set,
|
||||
# e.g. in clients you have no control over, like Claude Desktop.
|
||||
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
|
||||
# * `insert_at_line`: Inserts content at a given line in a file.
|
||||
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
|
||||
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
|
||||
# * `list_memories`: Lists memories in Serena's project-specific memory store.
|
||||
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
|
||||
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
|
||||
# * `read_file`: Reads a file within the project directory.
|
||||
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
|
||||
# * `remove_project`: Removes a project from the Serena configuration.
|
||||
# * `replace_lines`: Replaces a range of lines within a file with new content.
|
||||
# * `replace_symbol_body`: Replaces the full definition of a symbol.
|
||||
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
|
||||
# * `search_for_pattern`: Performs a search for a pattern in the project.
|
||||
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
|
||||
# * `switch_modes`: Activates modes by providing a list of their names
|
||||
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
|
||||
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
|
||||
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
|
||||
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
|
||||
excluded_tools: []
|
||||
|
||||
# initial prompt for the project. It will always be given to the LLM upon activating the project
|
||||
# (contrary to the memories, which are loaded on demand).
|
||||
initial_prompt: ""
|
||||
|
||||
project_name: "tspublish"
|
@@ -1,5 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## 2025-08-08 - 1.10.0 - feat(logging)
|
||||
Enhance logging and module publishing with color-coded output, progress tracking, and improved CLI startup
|
||||
|
||||
- Refactored logging to introduce color-coded symbols and helper functions (logInfo, logWarn, logSuccess, logBuild, logPublish, etc.)
|
||||
- Added visual components such as headers, separators, and progress indicators for better operational visibility
|
||||
- Integrated enhanced logging into module publishing and CLI startup, replacing generic console logs
|
||||
- Updated various configuration and documentation files to reflect new code style conventions and dependency updates
|
||||
|
||||
## 2025-01-02 - 1.9.1 - fix(publishmodule)
|
||||
Fix incorrect CLI script path during publish module creation
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@git.zone/tspublish",
|
||||
"version": "1.9.1",
|
||||
"version": "1.10.0",
|
||||
"private": false,
|
||||
"description": "A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.",
|
||||
"main": "dist_ts/index.js",
|
||||
@@ -48,6 +48,7 @@
|
||||
"readme.md"
|
||||
],
|
||||
"dependencies": {
|
||||
"@push.rocks/consolecolor": "^2.0.3",
|
||||
"@push.rocks/smartcli": "^4.0.11",
|
||||
"@push.rocks/smartdelay": "^3.0.5",
|
||||
"@push.rocks/smartfile": "^11.0.21",
|
||||
@@ -68,5 +69,6 @@
|
||||
"modularity",
|
||||
"module-management",
|
||||
"developer-tools"
|
||||
]
|
||||
],
|
||||
"packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977"
|
||||
}
|
||||
|
19
pnpm-lock.yaml
generated
19
pnpm-lock.yaml
generated
@@ -8,6 +8,9 @@ importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
'@push.rocks/consolecolor':
|
||||
specifier: ^2.0.3
|
||||
version: 2.0.3
|
||||
'@push.rocks/smartcli':
|
||||
specifier: ^4.0.11
|
||||
version: 4.0.11
|
||||
@@ -479,8 +482,8 @@ packages:
|
||||
resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@push.rocks/consolecolor@2.0.2':
|
||||
resolution: {integrity: sha512-IBwxCLX+YF3f5wB2N4LfuvFqm9WPlBMiEeSAfjN8YQCyYec6u1hlrR3EIj8vT300pppjeGrybJHK+GyjdGXZJw==}
|
||||
'@push.rocks/consolecolor@2.0.3':
|
||||
resolution: {integrity: sha512-hA+m0BMqEwZNSAS7c2aQFfoPkpX/dNdsHzkdLdeERUOy7BLacb9ItTUofGtjtginP0yDj4NSpqSjNYyX3Y8Y/w==}
|
||||
|
||||
'@push.rocks/early@4.0.4':
|
||||
resolution: {integrity: sha512-ak6/vqZ1PlFV08fSFQ6UwiBrr+K6IsfieZWWzT7eex1Ls6GvWEi8wZ3REFDPJq/qckNLWSgEy0EsqzRtltkaCA==}
|
||||
@@ -3653,7 +3656,7 @@ snapshots:
|
||||
'@api.global/typedserver': 3.0.51
|
||||
'@git.zone/tsbundle': 2.1.0
|
||||
'@git.zone/tsrun': 1.3.3
|
||||
'@push.rocks/consolecolor': 2.0.2
|
||||
'@push.rocks/consolecolor': 2.0.3
|
||||
'@push.rocks/smartbrowser': 2.0.6
|
||||
'@push.rocks/smartdelay': 3.0.5
|
||||
'@push.rocks/smartfile': 11.0.21
|
||||
@@ -3765,13 +3768,13 @@ snapshots:
|
||||
'@pnpm/network.ca-file': 1.0.2
|
||||
config-chain: 1.1.13
|
||||
|
||||
'@push.rocks/consolecolor@2.0.2':
|
||||
'@push.rocks/consolecolor@2.0.3':
|
||||
dependencies:
|
||||
ansi-256-colors: 1.1.0
|
||||
|
||||
'@push.rocks/early@4.0.4':
|
||||
dependencies:
|
||||
'@push.rocks/consolecolor': 2.0.2
|
||||
'@push.rocks/consolecolor': 2.0.3
|
||||
'@push.rocks/smartpromise': 4.0.4
|
||||
|
||||
'@push.rocks/isohash@2.0.1':
|
||||
@@ -3979,7 +3982,7 @@ snapshots:
|
||||
|
||||
'@push.rocks/smartlog-destination-local@9.0.2':
|
||||
dependencies:
|
||||
'@push.rocks/consolecolor': 2.0.2
|
||||
'@push.rocks/consolecolor': 2.0.3
|
||||
'@push.rocks/smartlog-interfaces': 3.0.2
|
||||
'@push.rocks/smartpromise': 4.0.4
|
||||
|
||||
@@ -4037,7 +4040,7 @@ snapshots:
|
||||
|
||||
'@push.rocks/smartnpm@2.0.4':
|
||||
dependencies:
|
||||
'@push.rocks/consolecolor': 2.0.2
|
||||
'@push.rocks/consolecolor': 2.0.3
|
||||
'@push.rocks/levelcache': 3.0.8
|
||||
'@push.rocks/smartarchive': 3.0.8
|
||||
'@push.rocks/smartfile': 10.0.41
|
||||
@@ -4242,7 +4245,7 @@ snapshots:
|
||||
'@push.rocks/tapbundle@5.3.0':
|
||||
dependencies:
|
||||
'@open-wc/testing': 4.0.0
|
||||
'@push.rocks/consolecolor': 2.0.2
|
||||
'@push.rocks/consolecolor': 2.0.3
|
||||
'@push.rocks/qenv': 6.0.5
|
||||
'@push.rocks/smartcrypto': 2.0.4
|
||||
'@push.rocks/smartdelay': 3.0.5
|
||||
|
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@git.zone/tspublish',
|
||||
version: '1.9.1',
|
||||
version: '1.10.0',
|
||||
description: 'A tool to publish multiple, concise, and small packages from monorepos, specifically for TypeScript projects within a git environment.'
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import * as plugins from './plugins.js';
|
||||
import * as paths from './paths.js';
|
||||
import { logger } from './logging.js';
|
||||
import { logger, logInfo, logSuccess, logWarn, logError, logBuild, logPublish, logOngoing, logStart, logDone } from './logging.js';
|
||||
|
||||
import { type ITsPublishJson } from './interfaces/index.js';
|
||||
import type { TsPublish } from './classes.tspublish.js';
|
||||
@@ -66,16 +66,15 @@ export class PublishModule {
|
||||
try {
|
||||
packageInfo = await smartnpmInstance.getPackageInfo(this.options.name);
|
||||
} catch (error) {
|
||||
logger.log('warn', `package does not yet seem to exist. Proceeding in 10 seconds...`);
|
||||
logWarn(`Package ${this.options.name} does not yet seem to exist. Proceeding in 10 seconds...`);
|
||||
await plugins.smartdelay.delayFor(10000);
|
||||
}
|
||||
if (packageInfo) {
|
||||
const availableVersions = packageInfo.allVersions.map((versionArg) => versionArg.version);
|
||||
logger.log('info', `available versions are: ${availableVersions.toString()}`);
|
||||
logInfo(`Available versions for ${this.options.name}: ${availableVersions.join(', ')}`);
|
||||
if (availableVersions.includes(this.options.version)) {
|
||||
logger.log(
|
||||
'error',
|
||||
`package ${this.options.name} already exists with version ${this.options.version}`
|
||||
logError(
|
||||
`Package ${this.options.name} already exists with version ${this.options.version}`
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
@@ -162,6 +161,7 @@ export class PublishModule {
|
||||
}
|
||||
|
||||
public async createPublishModuleDir() {
|
||||
logOngoing(`Creating publish directory for ${this.options.name}`);
|
||||
this.options.publishModDirFullPath = plugins.path.join(
|
||||
this.options.monoRepoDir,
|
||||
`dist_publish_${this.options.packageSubFolder}`
|
||||
@@ -207,10 +207,12 @@ export class PublishModule {
|
||||
}
|
||||
|
||||
public async build() {
|
||||
logBuild(`Building ${this.options.name}...`);
|
||||
const smartshellInstance = new plugins.smartshell.Smartshell({
|
||||
executor: 'bash',
|
||||
});
|
||||
await smartshellInstance.exec(`cd ${this.options.publishModDirFullPath} && pnpm run build`);
|
||||
logSuccess(`Build completed for ${this.options.name}`);
|
||||
}
|
||||
|
||||
public async createBinCliSetup() {
|
||||
@@ -229,6 +231,7 @@ export class PublishModule {
|
||||
}
|
||||
|
||||
public async publish() {
|
||||
logPublish(`Publishing ${this.options.name} v${this.options.version}...`);
|
||||
const smartshellInstance = new plugins.smartshell.Smartshell({
|
||||
executor: 'bash',
|
||||
});
|
||||
@@ -242,5 +245,6 @@ export class PublishModule {
|
||||
} --no-git-checks --registry https://${registryUrl}`
|
||||
);
|
||||
}
|
||||
logSuccess(`Successfully published ${this.options.name} v${this.options.version}!`);
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { logger } from './logging.js';
|
||||
import { logger, logInfo, logSuccess, logWarn, logError, logHeader, logPackage, logProgress, logSeparator, logStart, logDone } from './logging.js';
|
||||
import * as plugins from './plugins.js';
|
||||
import * as interfaces from './interfaces/index.js';
|
||||
|
||||
@@ -15,24 +15,26 @@ export class TsPublish {
|
||||
}
|
||||
|
||||
public async publish(monorepoDirArg: string) {
|
||||
logHeader('TSPublish - Module Publisher');
|
||||
const publishModules = await this.getModuleSubDirs(monorepoDirArg);
|
||||
logger.log('info', `Found ${Object.keys(publishModules).length} publish modules:`);
|
||||
logInfo(`Found ${Object.keys(publishModules).length} publish modules`);
|
||||
logSeparator();
|
||||
for (const publishModule of Object.keys(publishModules)) {
|
||||
logger.log(
|
||||
'info',
|
||||
`Publishing module: ${publishModule} -> ${publishModules[publishModule].name}`
|
||||
);
|
||||
logPackage('Module found', `${publishModule} → ${publishModules[publishModule].name}`);
|
||||
}
|
||||
for (const publishModule of Object.keys(publishModules)) {
|
||||
// lets check wether there is a name
|
||||
if (!publishModules[publishModule].name) {
|
||||
logger.log('warn', `no name found in tspublish.json for ${publishModule}. Skipping...`);
|
||||
logWarn(`No name found in tspublish.json for ${publishModule}. Skipping...`);
|
||||
continue;
|
||||
}
|
||||
const publishModuleInstance = new PublishModule(this, {
|
||||
monoRepoDir: monorepoDirArg,
|
||||
packageSubFolder: publishModule,
|
||||
});
|
||||
const moduleCount = Object.keys(publishModules).indexOf(publishModule) + 1;
|
||||
const totalCount = Object.keys(publishModules).length;
|
||||
logProgress(moduleCount, totalCount, publishModules[publishModule].name || publishModule);
|
||||
await publishModuleInstance.init();
|
||||
await publishModuleInstance.createPublishModuleDir();
|
||||
await publishModuleInstance.build();
|
||||
@@ -53,13 +55,13 @@ export class TsPublish {
|
||||
continue;
|
||||
}
|
||||
|
||||
logger.log('info', `found publish module: ${subDir}`);
|
||||
logPackage('Found module', subDir);
|
||||
publishModules[subDir] = JSON.parse(
|
||||
plugins.smartfile.fs.toStringSync(plugins.path.join(subDir, 'tspublish.json'))
|
||||
);
|
||||
}
|
||||
logger.log('ok', `found ${Object.keys(publishModules).length} publish modules`);
|
||||
logger.log('info', `Ordering publish modules...`);
|
||||
logSuccess(`Found ${Object.keys(publishModules).length} publish modules`);
|
||||
logInfo('Ordering publish modules...');
|
||||
|
||||
return publishModules;
|
||||
}
|
||||
|
@@ -1,10 +1,11 @@
|
||||
import * as paths from './paths.js';
|
||||
import { TsPublish } from './classes.tspublish.js';
|
||||
import { logStart } from './logging.js';
|
||||
|
||||
export * from './classes.tspublish.js';
|
||||
|
||||
export const runCli = async () => {
|
||||
console.log('Starting tspublish...');
|
||||
logStart('tspublish');
|
||||
const tspublish = new TsPublish();
|
||||
await tspublish.publish(paths.cwd);
|
||||
};
|
||||
|
@@ -3,3 +3,102 @@ import * as commitinfo from './00_commitinfo_data.js';
|
||||
|
||||
export const logger = plugins.smartlog.Smartlog.createForCommitinfo(commitinfo.commitinfo);
|
||||
logger.enableConsole();
|
||||
|
||||
// Color-coded log level indicators
|
||||
const logIcons = {
|
||||
info: plugins.consolecolor.coloredString('ℹ', 'cyan'),
|
||||
success: plugins.consolecolor.coloredString('✓', 'green'),
|
||||
warn: plugins.consolecolor.coloredString('⚠', 'orange'),
|
||||
error: plugins.consolecolor.coloredString('✖', 'red'),
|
||||
start: plugins.consolecolor.coloredString('▶', 'blue'),
|
||||
done: plugins.consolecolor.coloredString('✔', 'green'),
|
||||
package: plugins.consolecolor.coloredString('📦', 'blue'),
|
||||
build: plugins.consolecolor.coloredString('🔨', 'cyan'),
|
||||
publish: plugins.consolecolor.coloredString('🚀', 'green'),
|
||||
};
|
||||
|
||||
// Helper function for info messages with color
|
||||
export const logInfo = (message: string, data?: any) => {
|
||||
const coloredMessage = `${logIcons.info} ${plugins.consolecolor.coloredString(message, 'cyan')}`;
|
||||
logger.log('info', coloredMessage, data);
|
||||
};
|
||||
|
||||
// Helper function for success messages
|
||||
export const logSuccess = (message: string, data?: any) => {
|
||||
const coloredMessage = `${logIcons.success} ${plugins.consolecolor.coloredString(message, 'green')}`;
|
||||
logger.log('ok', coloredMessage, data);
|
||||
};
|
||||
|
||||
// Helper function for warning messages
|
||||
export const logWarn = (message: string, data?: any) => {
|
||||
const coloredMessage = `${logIcons.warn} ${plugins.consolecolor.coloredString(message, 'orange')}`;
|
||||
logger.log('warn', coloredMessage, data);
|
||||
};
|
||||
|
||||
// Helper function for error messages
|
||||
export const logError = (message: string, data?: any) => {
|
||||
const coloredMessage = `${logIcons.error} ${plugins.consolecolor.coloredString(message, 'red')}`;
|
||||
logger.log('error', coloredMessage, data);
|
||||
};
|
||||
|
||||
// Helper function for start of operations
|
||||
export const logStart = (operation: string) => {
|
||||
const coloredMessage = `${logIcons.start} ${plugins.consolecolor.coloredString(`Starting ${operation}...`, 'blue')}`;
|
||||
logger.log('info', coloredMessage);
|
||||
};
|
||||
|
||||
// Helper function for completion of operations
|
||||
export const logDone = (operation: string) => {
|
||||
const coloredMessage = `${logIcons.done} ${plugins.consolecolor.coloredString(`Completed ${operation}`, 'green')}`;
|
||||
logger.log('ok', coloredMessage);
|
||||
};
|
||||
|
||||
// Helper function for package-related messages
|
||||
export const logPackage = (message: string, packageName: string) => {
|
||||
const coloredMessage = `${logIcons.package} ${message}: ${plugins.consolecolor.coloredString(packageName, 'blue', 'white')}`;
|
||||
logger.log('info', coloredMessage);
|
||||
};
|
||||
|
||||
// Helper function for build-related messages
|
||||
export const logBuild = (message: string) => {
|
||||
const coloredMessage = `${logIcons.build} ${plugins.consolecolor.coloredString(message, 'cyan')}`;
|
||||
logger.log('info', coloredMessage);
|
||||
};
|
||||
|
||||
// Helper function for publish-related messages
|
||||
export const logPublish = (message: string) => {
|
||||
const coloredMessage = `${logIcons.publish} ${plugins.consolecolor.coloredString(message, 'green')}`;
|
||||
logger.log('info', coloredMessage);
|
||||
};
|
||||
|
||||
// Create a visual separator for different phases
|
||||
export const logSeparator = () => {
|
||||
const separator = plugins.consolecolor.coloredString('━'.repeat(60), 'cyan');
|
||||
console.log(separator);
|
||||
};
|
||||
|
||||
// Create a header for major sections
|
||||
export const logHeader = (title: string) => {
|
||||
logSeparator();
|
||||
const header = plugins.consolecolor.coloredString(` ${title.toUpperCase()} `, 'white', 'blue');
|
||||
console.log(header);
|
||||
logSeparator();
|
||||
};
|
||||
|
||||
// Helper for indicating ongoing operations
|
||||
export const logOngoing = (text: string) => {
|
||||
const spinnerIcon = plugins.consolecolor.coloredString('⟳', 'cyan');
|
||||
const coloredMessage = `${spinnerIcon} ${plugins.consolecolor.coloredString(text, 'cyan')}`;
|
||||
logger.log('info', coloredMessage);
|
||||
};
|
||||
|
||||
// Progress indicator helper
|
||||
export const logProgress = (current: number, total: number, item: string) => {
|
||||
const percentage = Math.round((current / total) * 100);
|
||||
const progressBar = '█'.repeat(Math.floor(percentage / 5)) + '░'.repeat(20 - Math.floor(percentage / 5));
|
||||
const coloredProgress = plugins.consolecolor.coloredString(
|
||||
`[${progressBar}] ${percentage}% - ${item}`,
|
||||
percentage === 100 ? 'green' : 'blue'
|
||||
);
|
||||
logger.log('info', coloredProgress);
|
||||
};
|
||||
|
@@ -3,6 +3,7 @@ import * as path from 'path';
|
||||
export { path };
|
||||
|
||||
// @push.rocks scope
|
||||
import * as consolecolor from '@push.rocks/consolecolor';
|
||||
import * as smartfile from '@push.rocks/smartfile';
|
||||
import * as smartcli from '@push.rocks/smartcli';
|
||||
import * as smartdelay from '@push.rocks/smartdelay';
|
||||
@@ -12,4 +13,4 @@ import * as smartpath from '@push.rocks/smartpath';
|
||||
import * as smartrequest from '@push.rocks/smartrequest';
|
||||
import * as smartshell from '@push.rocks/smartshell';
|
||||
|
||||
export { smartfile, smartcli, smartdelay, smartlog, smartnpm, smartpath, smartrequest, smartshell };
|
||||
export { consolecolor, smartfile, smartcli, smartdelay, smartlog, smartnpm, smartpath, smartrequest, smartshell };
|
||||
|
Reference in New Issue
Block a user