Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
d87b50fb45 | |||
4f72f484d0 | |||
7931d458c5 | |||
d5b21e6567 | |||
1ccafa8c87 | |||
850d56df8b | |||
dead451ab0 | |||
d7855494a7 | |||
0a12915c7e | |||
9a942cafa5 | |||
0292b4fef4 | |||
2d9d2a5a47 | |||
079e315b23 | |||
caf3e4766f | |||
50b5630aed | |||
a8776be6b8 | |||
4e173d4dd4 | |||
edcbdea31f | |||
6072974bda | |||
8883bf181e | |||
cd09a70232 | |||
e6811c75fc | |||
e0ba9c6cef | |||
90c56c6d4f | |||
91caa9a747 | |||
115250edab | |||
1127b8961f | |||
cc15835c8e | |||
300ac01629 | |||
a9a2f94f7e | |||
5e8473d16b | |||
6366b4f990 | |||
a3e147f946 |
87
changelog.md
87
changelog.md
@ -1,5 +1,92 @@
|
||||
# Changelog
|
||||
|
||||
## 2025-03-20 - 7.1.1 - fix(finance)
|
||||
Add optional date property to the IInvoice interface
|
||||
|
||||
- Introduced an optional 'date' field with explanatory comments to capture the invoice date if not provided from the encompassing letter
|
||||
|
||||
## 2025-03-20 - 7.1.0 - feat(ts/finance/invoice)
|
||||
Add electronicAddress field to IInvoice for circular xinvoice support
|
||||
|
||||
- Introduce optional electronicAddress property with scheme and value
|
||||
- Enhance documentation for buyer reference in invoice interface
|
||||
|
||||
## 2025-03-20 - 7.0.0 - BREAKING CHANGE(business/address)
|
||||
Remove eAddress property from IAddress interface
|
||||
|
||||
- Removed eAddress field that allowed storage of electronic contact means (phone, email, peppolId)
|
||||
|
||||
## 2025-03-20 - 6.1.2 - fix(business/address)
|
||||
Improve documentation comments for address interface properties
|
||||
|
||||
- Added detailed comments for the 'coordinates' property to explain its usage
|
||||
- Added detailed comments for the 'eAddress' property to describe the storage of electronic contact information
|
||||
|
||||
## 2025-03-20 - 6.1.1 - fix(finance)
|
||||
Add clarifying comment for the buyerReference field in the invoice interface
|
||||
|
||||
- Document buyerReference as an optional field to help buyers identify the invoice
|
||||
|
||||
## 2025-03-20 - 6.1.0 - feat(business/address)
|
||||
Add optional countryCode and coordinates properties to IAddress interface
|
||||
|
||||
- Extend address interface with an optional countryCode property
|
||||
- Add optional coordinates object with lat and lng for geographic metadata
|
||||
|
||||
## 2025-03-19 - 6.0.1 - fix(business)
|
||||
Remove exports for 'company' and 'person' modules from the business index
|
||||
|
||||
- Removed export statement for './company.js' in ts/business/index.ts
|
||||
- Removed export statement for './person.js' in ts/business/index.ts
|
||||
|
||||
## 2025-03-19 - 6.0.0 - BREAKING CHANGE(TContact)
|
||||
Reaffirm project metadata and documentation consistency
|
||||
|
||||
- Verified commitinfo data, package.json, and README content for correctness
|
||||
- No functional code changes were introduced
|
||||
|
||||
## 2025-03-11 - 5.0.0 - BREAKING CHANGE(network)
|
||||
Update reverse proxy configuration to support multiple destination IPs and ports
|
||||
|
||||
- Replaced 'destinationIp' and 'destinationPort' with 'destinationIps' (array) and 'destinationPorts' (array) to enable multiple destinations
|
||||
|
||||
## 2025-03-10 - 4.4.4 - fix(business)
|
||||
Fixes typo in ILetter interface
|
||||
|
||||
- Removed unused property 'letterData' from ILetter content structure.
|
||||
|
||||
## 2025-03-07 - 4.4.3 - fix(network)
|
||||
Fix destinationPort type for IReverseProxyConfig
|
||||
|
||||
- Corrected the type of destinationPort in IReverseProxyConfig from 'string' to 'number'.
|
||||
|
||||
## 2025-03-07 - 4.4.2 - fix(dependencies)
|
||||
Updated package dependencies for improved stability and performance.
|
||||
|
||||
- Updated 'type-fest' dependency to version ^4.37.0.
|
||||
- Updated '@git.zone/tsbuild' to version ^2.2.6.
|
||||
- Updated '@git.zone/tstest' to version ^1.0.96.
|
||||
- Updated '@push.rocks/tapbundle' to ^5.5.6.
|
||||
- Updated '@types/node' to ^22.13.9.
|
||||
|
||||
## 2025-03-07 - 4.4.1 - fix(business)
|
||||
Fix missing letterData property in ILetter interface.
|
||||
|
||||
- Added missing letterData property to the content structure of the ILetter interface.
|
||||
- Ensured consistency and completeness of ILetter interface for proper data handling of letter components.
|
||||
|
||||
## 2025-01-11 - 4.4.0 - feat(website)
|
||||
Add ILinkBlock interface for managing groups of links
|
||||
|
||||
- Introduced a new interface ILinkBlock in ts/website/linkblock.ts for managing grouped links.
|
||||
- Exported ILinkBlock from ts/website/index.ts to make it available for external usage.
|
||||
|
||||
## 2025-01-10 - 4.3.0 - feat(website)
|
||||
Added new ILink interface to the website module.
|
||||
|
||||
- Introduced ILink interface with properties like url, text, description, icon, and target.
|
||||
- Updated ts/website/index.ts to export the new link interface.
|
||||
|
||||
## 2024-12-11 - 4.2.0 - feat(dependencies)
|
||||
Update dependencies and enhance code documentation
|
||||
|
||||
|
12
package.json
12
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@tsclass/tsclass",
|
||||
"version": "4.2.0",
|
||||
"version": "7.1.1",
|
||||
"private": false,
|
||||
"description": "Provides TypeScript definitions for various business, financial, networking, content, and other common classes.",
|
||||
"main": "dist_ts/index.js",
|
||||
@ -37,14 +37,14 @@
|
||||
},
|
||||
"homepage": "https://github.com/tsclass/tsclass#readme",
|
||||
"dependencies": {
|
||||
"type-fest": "^4.30.0"
|
||||
"type-fest": "^4.37.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@git.zone/tsbuild": "^2.2.0",
|
||||
"@git.zone/tsbuild": "^2.2.6",
|
||||
"@git.zone/tsrun": "^1.3.3",
|
||||
"@git.zone/tstest": "^1.0.90",
|
||||
"@push.rocks/tapbundle": "^5.5.3",
|
||||
"@types/node": "^22.10.2"
|
||||
"@git.zone/tstest": "^1.0.96",
|
||||
"@push.rocks/tapbundle": "^5.5.6",
|
||||
"@types/node": "^22.13.9"
|
||||
},
|
||||
"files": [
|
||||
"ts/**/*",
|
||||
|
4955
pnpm-lock.yaml
generated
4955
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -34,7 +34,7 @@ The business domain includes classes for managing contacts, companies, and proje
|
||||
```typescript
|
||||
import { business } from '@tsclass/tsclass';
|
||||
|
||||
const companyContact: business.IContact = {
|
||||
const companyContact: business.TContact = {
|
||||
type: 'company',
|
||||
name: 'Example Company',
|
||||
address: {
|
||||
@ -48,7 +48,7 @@ const companyContact: business.IContact = {
|
||||
email: 'contact@example.com'
|
||||
};
|
||||
|
||||
const exampleCompany: business.ICompany = {
|
||||
const exampleCompany: business.TCompany = {
|
||||
name: 'Example Company',
|
||||
foundedDate: {
|
||||
day: 1,
|
||||
|
@ -3,7 +3,7 @@ import { tap, expect } from '@push.rocks/tapbundle';
|
||||
import * as tsclass from '../ts/index.js';
|
||||
|
||||
tap.test('should assign a correct type', async () => {
|
||||
let contact: tsclass.business.IContact;
|
||||
let contact: tsclass.business.TContact;
|
||||
});
|
||||
|
||||
tap.start();
|
||||
|
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@tsclass/tsclass',
|
||||
version: '4.2.0',
|
||||
version: '7.1.1',
|
||||
description: 'Provides TypeScript definitions for various business, financial, networking, content, and other common classes.'
|
||||
}
|
||||
|
@ -5,4 +5,13 @@ export interface IAddress {
|
||||
postalCode: string;
|
||||
city: string;
|
||||
country: string;
|
||||
countryCode?: string;
|
||||
/**
|
||||
* allows storage of coordinates for this address
|
||||
* useful for countries where addresses are not unique
|
||||
*/
|
||||
coordinates?: {
|
||||
lat: number;
|
||||
lng: number;
|
||||
};
|
||||
}
|
||||
|
@ -1,20 +0,0 @@
|
||||
import { business, general } from '../index.js';
|
||||
|
||||
/**
|
||||
* describes a company's lifecycle state
|
||||
*/
|
||||
export type TCompanyStatus = 'planed' | 'founding' | 'active' | 'liquidation' | 'closed';
|
||||
|
||||
/**
|
||||
* describes a company
|
||||
*/
|
||||
export interface ICompany {
|
||||
name: string;
|
||||
slogan?: string;
|
||||
description?: string;
|
||||
logoLink?: string;
|
||||
foundedDate: general.IDate;
|
||||
closedDate: general.IDate;
|
||||
status: business.TCompanyStatus;
|
||||
contact: business.IContact;
|
||||
}
|
@ -1,39 +1,60 @@
|
||||
import { finance } from '../index.js';
|
||||
import { business } from '../index.js';
|
||||
import { finance, general } from "../index.js";
|
||||
import { business } from "../index.js";
|
||||
|
||||
export type TContactSalutation = 'Mr' | 'Ms' | 'Mrs';
|
||||
export type TSocialLinks = {
|
||||
type: "facebook" | "twitter" | "linkedin" | string;
|
||||
url: string;
|
||||
};
|
||||
|
||||
export type TContactType = 'person' | 'company';
|
||||
export type TRegistrationDetails = {
|
||||
vatId: string;
|
||||
registrationId: string;
|
||||
registrationName: string;
|
||||
};
|
||||
|
||||
export type TContactTitle = 'Doctor' | 'Professor';
|
||||
|
||||
export interface IContact {
|
||||
// =======
|
||||
// general
|
||||
// =======
|
||||
salutation?: TContactSalutation;
|
||||
type: TContactType;
|
||||
title?: TContactTitle;
|
||||
relationship?: 'customer' | 'supplier' | 'partner' | 'employee' | 'other';
|
||||
type TContactEnvelope<TYPE extends string, FIELDS> = {
|
||||
type: TYPE;
|
||||
name: string;
|
||||
surname?: string;
|
||||
legalEntity?: string;
|
||||
address: business.IAddress;
|
||||
description: string;
|
||||
legalEntity?: string;
|
||||
customerNumber?: string;
|
||||
relationship?: "customer" | "supplier" | "partner" | "employee" | "other";
|
||||
|
||||
email?: string;
|
||||
|
||||
logoUrl?: string;
|
||||
website?: string;
|
||||
facebookUrl?: string;
|
||||
twitterUrl?: string;
|
||||
|
||||
phone?: string;
|
||||
fax?: string;
|
||||
|
||||
// =========
|
||||
// financial
|
||||
// =========
|
||||
vatId?: string;
|
||||
logoUrl?: string;
|
||||
website?: string;
|
||||
|
||||
socials?: TSocialLinks[];
|
||||
|
||||
sepaConnection?: finance.ISepaConnection;
|
||||
}
|
||||
} & FIELDS;
|
||||
|
||||
export type TPerson = TContactEnvelope<
|
||||
"person",
|
||||
{
|
||||
surname: string;
|
||||
salutation: "Mr" | "Ms" | "Mrs";
|
||||
sex: "male" | "female" | "other";
|
||||
title: "Doctor" | "Professor";
|
||||
registrationDetails?: TRegistrationDetails;
|
||||
legalProxyFor?: {
|
||||
type: "self" | "other";
|
||||
contact?: TContact;
|
||||
};
|
||||
}
|
||||
>;
|
||||
export type TCompany = TContactEnvelope<
|
||||
"company",
|
||||
{
|
||||
registrationDetails: TRegistrationDetails;
|
||||
foundedDate: general.IDate;
|
||||
closedDate: general.IDate;
|
||||
status: "planned" | "founding" | "active" | "liquidation" | "closed";
|
||||
}
|
||||
>;
|
||||
|
||||
export type TContact = TPerson | TCompany;
|
||||
|
@ -1,12 +1,12 @@
|
||||
import * as database from '../database/index.js';
|
||||
import { type IPerson } from './person.js';
|
||||
import * as database from "../database/index.js";
|
||||
import type { TPerson } from "./index.js";
|
||||
|
||||
export interface IContract {
|
||||
parties: {
|
||||
signingOrder: number;
|
||||
referencedAs: string;
|
||||
person: IPerson;
|
||||
role: 'signer' | 'cc';
|
||||
person: TPerson;
|
||||
role: "signer" | "cc";
|
||||
signature: {
|
||||
given: boolean;
|
||||
timestamp?: number;
|
||||
|
@ -1,8 +1,6 @@
|
||||
export * from './address.js';
|
||||
export * from './company.js';
|
||||
export * from './contact.js';
|
||||
export * from './job.js';
|
||||
export * from './letter.js';
|
||||
export * from './pdf.js';
|
||||
export * from './person.js';
|
||||
export * from './project.js';
|
||||
|
@ -1,18 +1,17 @@
|
||||
import * as finance from '../finance/index.js';
|
||||
import { type ICompany } from './company.js';
|
||||
import { type IContact } from './contact.js';
|
||||
import * as finance from "../finance/index.js";
|
||||
import { type TContact } from "./contact.js";
|
||||
export class IJob {
|
||||
type: 'contract' | 'employment';
|
||||
type: "contract" | "employment";
|
||||
techTags?: string[];
|
||||
qualificationTags?: string[];
|
||||
languages?: {
|
||||
name: string;
|
||||
level: 'basic' | 'intermediate' | 'advanced' | 'native';
|
||||
level: "basic" | "intermediate" | "advanced" | "native";
|
||||
}[];
|
||||
name: string;
|
||||
description: string;
|
||||
monthlyTotal: number;
|
||||
currency: finance.TCurrency;
|
||||
from: ICompany;
|
||||
contact: IContact;
|
||||
}
|
||||
from: TContact;
|
||||
contact: TContact;
|
||||
}
|
||||
|
@ -1,20 +1,20 @@
|
||||
import * as business from './index.js';
|
||||
import * as finance from '../finance/index.js';
|
||||
import * as database from '../database/index.js';
|
||||
import * as business from "./index.js";
|
||||
import * as finance from "../finance/index.js";
|
||||
import * as database from "../database/index.js";
|
||||
export interface ILetter {
|
||||
versionInfo: {
|
||||
type: 'draft' | 'final';
|
||||
type: "draft" | "final";
|
||||
/**
|
||||
* should follow semVer
|
||||
*/
|
||||
version: string;
|
||||
};
|
||||
incidenceId: string;
|
||||
type: 'invoice' | 'notice' | 'warning' | 'verification' | 'contract';
|
||||
type: "invoice" | "notice" | "warning" | "verification" | "contract";
|
||||
date: number;
|
||||
from: business.IContact;
|
||||
to: business.IContact;
|
||||
legalContact: business.IContact;
|
||||
from: business.TContact;
|
||||
to: business.TContact;
|
||||
legalContact: business.TContact;
|
||||
logoUrl: string;
|
||||
subject: string;
|
||||
accentColor?: string;
|
||||
@ -27,7 +27,7 @@ export interface ILetter {
|
||||
contractDate: number;
|
||||
};
|
||||
timesheetData: string;
|
||||
}
|
||||
};
|
||||
pdf?: business.IPdf;
|
||||
pdfAttachments: business.IPdf[];
|
||||
language: string;
|
||||
|
@ -1,12 +0,0 @@
|
||||
import { type IContact } from './contact.js';
|
||||
|
||||
export interface IPerson {
|
||||
title: string;
|
||||
name: string;
|
||||
surname: string;
|
||||
sex: 'male' | 'female' | 'queer';
|
||||
legalProxyFor?: {
|
||||
type: 'self' | 'other';
|
||||
contact?: IContact;
|
||||
};
|
||||
}
|
@ -13,5 +13,5 @@ export interface IVoucher {
|
||||
date: Date;
|
||||
description: string;
|
||||
expenseItems: IExpenseItem[];
|
||||
contactRef: business.IContact;
|
||||
contactRef: business.TContact;
|
||||
}
|
||||
|
@ -15,8 +15,24 @@ export interface IInvoiceItem {
|
||||
|
||||
export interface IInvoice {
|
||||
id: string;
|
||||
billedBy: business.IContact;
|
||||
billedTo: business.IContact;
|
||||
/**
|
||||
* am optional date
|
||||
* if not set, the date is likely coming from the encompasing letter
|
||||
*/
|
||||
date?: number;
|
||||
billedBy: business.TContact;
|
||||
billedTo: business.TContact;
|
||||
/**
|
||||
* buyer reference is an optional field, that helps the buyer to identify the invoice
|
||||
*/
|
||||
buyerReference?: string;
|
||||
/**
|
||||
* also a kind of reference, esspecially needed for circular xinvoice support.
|
||||
*/
|
||||
electronicAddress?: {
|
||||
scheme: string;
|
||||
value: string;
|
||||
};
|
||||
type: 'creditnote' | 'debitnote';
|
||||
status: TInvoiceStatus;
|
||||
items: IInvoiceItem[];
|
||||
|
@ -1,6 +1,6 @@
|
||||
export interface IReverseProxyConfig {
|
||||
destinationIp: string;
|
||||
destinationPort: string;
|
||||
destinationIps: string[];
|
||||
destinationPorts: number[];
|
||||
hostName: string;
|
||||
privateKey: string;
|
||||
publicKey: string;
|
||||
|
@ -1,17 +1,17 @@
|
||||
import { type ICompany } from "../business/company.js";
|
||||
import type { TCompany } from "../business/contact.js";
|
||||
|
||||
export interface IProduct {
|
||||
name: string;
|
||||
slogan: string;
|
||||
description: string;
|
||||
os: 'web-based',
|
||||
category: 'Business Application',
|
||||
os: "web-based";
|
||||
category: "Business Application";
|
||||
offers: any[];
|
||||
features: IProductFeature[];
|
||||
landingPage: string;
|
||||
appLink: string;
|
||||
logoLink: string;
|
||||
publisher?: ICompany;
|
||||
publisher?: TCompany;
|
||||
}
|
||||
|
||||
export interface IProductFeature {
|
||||
@ -19,4 +19,4 @@ export interface IProductFeature {
|
||||
description: string;
|
||||
linkText: string;
|
||||
linkUrl: string;
|
||||
}
|
||||
}
|
||||
|
@ -1 +1,3 @@
|
||||
export * from './link.js';
|
||||
export * from './menuitem.js';
|
||||
export * from './linkblock.js';
|
||||
|
7
ts/website/link.ts
Normal file
7
ts/website/link.ts
Normal file
@ -0,0 +1,7 @@
|
||||
export interface ILink {
|
||||
url: string;
|
||||
text?: string;
|
||||
description?: string;
|
||||
icon?: string;
|
||||
target?: '_blank' | '_self' | '_parent' | '_top';
|
||||
}
|
6
ts/website/linkblock.ts
Normal file
6
ts/website/linkblock.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import type { ILink } from './link.js';
|
||||
|
||||
export interface ILinkBlock {
|
||||
title: string;
|
||||
links: ILink[];
|
||||
}
|
Reference in New Issue
Block a user