preamble
Version:
Automated License & Metadata applicators for Codebases.
148 lines (105 loc) • 4.51 kB
Markdown
# preamble
**Automated License & Metadata Generator for Codebases**
Preamble automatically **inserts and updates** license headers, metadata, and file tracking information across your codebase. It ensures every file has a **consistent preamble block**, tracking file versions, sizes, and cryptographic hashes—helping maintain organization and integrity in large projects.
## Features
- **Auto-Inject Metadata** – Adds **license headers, UUIDs, file size, hash tracking**, and versioning.
- **You Design It** – Write your preamble how you like, by drawing from lots of options like UUIDs, file size, hash tracking\*\*, and versioning.
- **One-Command Processing** – Run on **entire repositories** with a single command.
## Installation
Install **Preamble** globally or as a dev dependency:
```js
npm install -D preamble
```
Run the CLI help command:
```
npx preamble --help
```
## Usage
Preamble scans your **codebase**, identifies files, and injects metadata **automatically**.
### Create a .preamble
Customize your metadata template. You can use any of the options shown here or just add your own variables unique per file. They self heal each time you update.
---
- {{GEN_PACKAGE_NAME}}
-
- @license
-
- Apache-2.0
-
- Copyright 2024 Alex Stevovich
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- @meta
-
- package_name: {{GEN_PACKAGE_NAME}}
- file_name: {{GEN_FILE_NAME}}
- purpose: {{PURPOSE}}
-
- @system
-
- generated_on: {{GEN_GENERATED_ON}}
- certified_version: {{GEN_CERTIFIED_VERSION}}
- file_uuid: {{GEN_FILE_UUID}}
- file_size: {{GEN_FILE_SIZE}}
- file_hash: {{GEN_FILE_HASH}}
- mast_hash: {{GEN_MAST_HASH}}
- generated_by: {{GEN_GENERATED_BY}}
-
- {{PREAMBLE_MARKER}}
---
**Note** The special marker `{{PREAMBLE_MARKER}}` is **required** to identify and update the correct block.
### Apply Preamble to Your Codebase
Run the following command to inject metadata into your source files:
```
npx preamble --apply --dir ./src/
```
- **apply** → Enables preamble injection.
- **dir** → Defines the directory to scan (required).
- **template** → (Optional) Specify a custom template (`defaults to ./.preamble`).
**Example:**
This will **automatically insert/update preambles** in all `.js, .ts, .mjs` files inside `./src/`.
## Template System
Preamble supports **self-healing keys** and **auto-generated values**.
### Self-Healing Keys
- Any key written as `key: {{KEY_NAME}}` will **persist** across updates.
Example
```txt
purpose: {{PURPOSE}}
```
### Generated Values
The template is offered many generated keys you can insert however you want
| Key | Description |
| --------------------------- | ------------------------- |
| `{{GEN_FILE_NAME}}` | Filename |
| `{{GEN_FILE_SIZE}}` | File Size (Bytes) |
| `{{GEN_FILE_HASH}}` | SHA-256 File Hash |
| `{{GEN_PACKAGE_NAME}}` | Package Name |
| `{{GEN_FULL_YEAR}}` | Current Year |
| `{{GEN_MAST_HASH}}` | Metadata Hash |
| `{{GEN_CERTIFIED_VERSION}}` | Package Version |
| `{{GEN_GENERATED_ON}}` | Timestamp of Update |
| `{{GEN_GENERATED_BY}` | outputs: preamble on npm! |
## File Hashing & Version Tracking
Explain how if you use hash values file_hash mast_hash then the document will only update when either are changed.
### Why Use Hashes?
Preamble can store a checksum hash of the current file version:
- `file_hash` → Hash of the **entire file**
- `mast_hash` → Hash of the **metadata block**
#### Update Behavior
✅ **Files only update if the content or metadata changes**.
✅ If the content is **unchanged**, Preamble **skips updating** (preventing unnecessary modifications).
## License
Licensed under the Apache License 2.0.
## **Links**
- **GitHub**: [alexstevovich/preamble](https://github.com/alexstevovich/preamble)
- **NPM Package**: [preamble](https://www.npmjs.com/package/preamble)