From 62e61168a00935801982e80a190352d10caa3a25 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Fri, 15 Aug 2025 12:12:26 +0000 Subject: [PATCH] fix(appdata): Fix iteration over overwriteObject in AppData and update configuration for dependency and path handling --- .gitea/workflows/default_nottags.yaml | 6 +- .gitea/workflows/default_tags.yaml | 12 +- .gitignore | 3 +- .../document_symbols_cache_v23-06-25.pkl | Bin 0 -> 29173 bytes .serena/memories/coding_standards.md | 32 + .serena/memories/project_overview.md | 30 + .serena/memories/suggested_commands.md | 31 + .serena/project.yml | 68 + changelog.md | 19 + npmextra.json | 2 +- package.json | 33 +- pnpm-lock.yaml | 7655 +++++++++++------ pnpm-workspace.yaml | 4 + readme.md | 604 +- test/npmextra.json | 8 +- test/test.appdata.ts | 3 +- test/test.kvstore.ts | 4 +- test/test.ts | 16 +- ts/00_commitinfo_data.ts | 2 +- ts/npmextra.classes.appdata.ts | 45 +- ts/npmextra.classes.keyvaluestore.ts | 39 +- ts/npmextra.classes.npmextra.ts | 13 +- ts/npmextra.paths.ts | 2 +- ts/npmextra.plugins.ts | 16 +- tsconfig.json | 9 +- 25 files changed, 5821 insertions(+), 2835 deletions(-) create mode 100644 .serena/cache/typescript/document_symbols_cache_v23-06-25.pkl create mode 100644 .serena/memories/coding_standards.md create mode 100644 .serena/memories/project_overview.md create mode 100644 .serena/memories/suggested_commands.md create mode 100644 .serena/project.yml create mode 100644 pnpm-workspace.yaml diff --git a/.gitea/workflows/default_nottags.yaml b/.gitea/workflows/default_nottags.yaml index 9f4e743..0bae651 100644 --- a/.gitea/workflows/default_nottags.yaml +++ b/.gitea/workflows/default_nottags.yaml @@ -6,8 +6,8 @@ on: - '**' env: - IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci - NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git + IMAGE: code.foss.global/host.today/ht-docker-node:npmci + NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@/${{gitea.repository}}.git NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}} NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}} NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}} @@ -26,7 +26,7 @@ jobs: - name: Install pnpm and npmci run: | pnpm install -g pnpm - pnpm install -g @shipzone/npmci + pnpm install -g @ship.zone/npmci - name: Run npm prepare run: npmci npm prepare diff --git a/.gitea/workflows/default_tags.yaml b/.gitea/workflows/default_tags.yaml index e27ad69..821d33f 100644 --- a/.gitea/workflows/default_tags.yaml +++ b/.gitea/workflows/default_tags.yaml @@ -6,8 +6,8 @@ on: - '*' env: - IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci - NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git + IMAGE: code.foss.global/host.today/ht-docker-node:npmci + NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@/${{gitea.repository}}.git NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}} NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}} NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}} @@ -26,7 +26,7 @@ jobs: - name: Prepare run: | pnpm install -g pnpm - pnpm install -g @shipzone/npmci + pnpm install -g @ship.zone/npmci npmci npm prepare - name: Audit production dependencies @@ -54,7 +54,7 @@ jobs: - name: Prepare run: | pnpm install -g pnpm - pnpm install -g @shipzone/npmci + pnpm install -g @ship.zone/npmci npmci npm prepare - name: Test stable @@ -82,7 +82,7 @@ jobs: - name: Prepare run: | pnpm install -g pnpm - pnpm install -g @shipzone/npmci + pnpm install -g @ship.zone/npmci npmci npm prepare - name: Release @@ -104,7 +104,7 @@ jobs: - name: Prepare run: | pnpm install -g pnpm - pnpm install -g @shipzone/npmci + pnpm install -g @ship.zone/npmci npmci npm prepare - name: Code quality diff --git a/.gitignore b/.gitignore index ef13c79..0b26089 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ # artifacts coverage/ public/ -pages/ # installs node_modules/ @@ -17,4 +16,4 @@ node_modules/ dist/ dist_*/ -# custom \ No newline at end of file +#------# custom \ No newline at end of file diff --git a/.serena/cache/typescript/document_symbols_cache_v23-06-25.pkl b/.serena/cache/typescript/document_symbols_cache_v23-06-25.pkl new file mode 100644 index 0000000000000000000000000000000000000000..34904b9b3ed1b6ded51bdb5c9a6f2f6d43661114 GIT binary patch literal 29173 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 CVY>AI literal 0 HcmV?d00001 diff --git a/.serena/memories/coding_standards.md b/.serena/memories/coding_standards.md new file mode 100644 index 0000000..76aab15 --- /dev/null +++ b/.serena/memories/coding_standards.md @@ -0,0 +1,32 @@ +# Coding Standards for npmextra + +## Naming Conventions +- **Interfaces**: Prefix with `I` (e.g., `IAppDataOptions`, `ITestOptions`) +- **Types**: Prefix with `T` (e.g., `TKeyValueStore`) +- **Filenames**: Always lowercase (e.g., `npmextra.classes.appdata.ts`) +- **Module structure**: `npmextra...ts` pattern + +## Import/Export Patterns +- Use ES module syntax (`import`/`export`) +- Import all dependencies through `npmextra.plugins.ts` +- Reference with full path: `plugins.moduleName.className()` +- Export all public APIs through `index.ts` + +## TypeScript Patterns +- Use generic types for flexibility (``) +- Leverage TypeScript utility types from `@tsclass/tsclass` +- Use async/await for asynchronous operations +- Use Promises with smartpromise utilities + +## Testing Standards +- Import expect from `@git.zone/tstest/tapbundle` +- Test files end with `export default tap.start()` +- Use descriptive test names with `tap.test()` +- Test file naming: `test.*.ts` pattern + +## Code Quality +- Make focused, goal-oriented changes +- Preserve necessary complexity +- Remove redundancy carefully +- Keep async patterns where they add value +- No comments unless explicitly requested \ No newline at end of file diff --git a/.serena/memories/project_overview.md b/.serena/memories/project_overview.md new file mode 100644 index 0000000..6907d8a --- /dev/null +++ b/.serena/memories/project_overview.md @@ -0,0 +1,30 @@ +# npmextra Project Overview + +## Purpose +npmextra is a utility library that enhances npm with additional configuration and tool management capabilities. It provides a key-value store for project setups and centralized configuration management through npmextra.json files. + +## Tech Stack +- TypeScript (ES modules) +- Node.js +- Dependencies: + - @push.rocks/qenv - Environment variable management + - @push.rocks/smartfile - File system operations + - @push.rocks/smartjson - JSON handling + - @push.rocks/smartlog - Logging + - @push.rocks/smartpath - Path utilities + - @push.rocks/smartpromise - Promise utilities + - @push.rocks/smartrx - Reactive programming + - @push.rocks/taskbuffer - Task management + - @tsclass/tsclass - TypeScript utilities + +## Main Components +1. **Npmextra** - Main class for managing npmextra.json configurations +2. **KeyValueStore** - Persistent key-value storage system +3. **AppData** - Advanced data management with environment variable mapping + +## Project Structure +- `ts/` - TypeScript source files +- `test/` - Test files using @git.zone/tstest +- `dist_ts/` - Compiled JavaScript output +- `npmextra.json` - Project configuration +- `package.json` - Node.js package configuration \ No newline at end of file diff --git a/.serena/memories/suggested_commands.md b/.serena/memories/suggested_commands.md new file mode 100644 index 0000000..cb02828 --- /dev/null +++ b/.serena/memories/suggested_commands.md @@ -0,0 +1,31 @@ +# Suggested Commands for npmextra Development + +## Build Commands +- `pnpm run build` - Build the TypeScript project (uses tsbuild) +- `pnpm test` - Run tests using tstest + +## Development Commands +- `pnpm install` - Install dependencies +- `pnpm install --save-dev ` - Add development dependencies +- `tsx