Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 29ee77b3d6 | |||
| da0bdc0564 | |||
| add4a52635 | |||
| de3ac113fc | |||
| 2cf760d788 | |||
| b9a23d5497 | |||
| 1c196ea31a | |||
| d1088270bc | |||
| e7a11c2b54 | |||
| 9d8985d67a | |||
| 5afbf16906 | |||
| 1ef7737dc9 | |||
| 4d961003e8 | |||
| 24762468da | |||
| 4c57804da2 | |||
| 847f3a4f1c | |||
| d5d896a91e | |||
| 53b732a3f7 | |||
| f7f75a64db | |||
| 2a0aa6db07 | |||
| 6a4849f87d | |||
| 6ba521c1b9 | |||
| 267dca249f | |||
| 0b8249a21f | |||
| cf4d90ecbd | |||
| 92d9f441d1 | |||
| 44d62df972 | |||
| 289ddfc153 | |||
| a1cef67eee | |||
| 5b75506634 | |||
| 66ed64548a | |||
| 31888a7f07 | |||
| a49f1cd110 | |||
| 9b7f76b22a | |||
| 5f89befa03 | |||
| 84a2f67df9 | |||
| 9022721d51 | |||
| 8e9c6be7e0 | |||
| a1bf280a2f | |||
| 3391e0cea3 |
@@ -13,8 +13,13 @@ stages:
|
|||||||
- metadata
|
- metadata
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- npm install -g @shipzone/npmci
|
- pnpm install -g pnpm
|
||||||
|
- pnpm install -g @shipzone/npmci
|
||||||
|
- npmci npm prepare
|
||||||
|
|
||||||
|
# ====================
|
||||||
|
# security stage
|
||||||
|
# ====================
|
||||||
# ====================
|
# ====================
|
||||||
# security stage
|
# security stage
|
||||||
# ====================
|
# ====================
|
||||||
@@ -22,11 +27,10 @@ auditProductionDependencies:
|
|||||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
stage: security
|
stage: security
|
||||||
script:
|
script:
|
||||||
- npmci npm prepare
|
- npmci command npm config set registry https://registry.npmjs.org
|
||||||
- npmci command npm install --production --ignore-scripts
|
- npmci command pnpm audit --audit-level=high --prod
|
||||||
- npmci command npm config set registry https://registry.npmjs.org
|
|
||||||
- npmci command npm audit --audit-level=high --only=prod --production
|
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
@@ -34,11 +38,10 @@ auditDevDependencies:
|
|||||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
stage: security
|
stage: security
|
||||||
script:
|
script:
|
||||||
- npmci npm prepare
|
|
||||||
- npmci command npm install --ignore-scripts
|
|
||||||
- npmci command npm config set registry https://registry.npmjs.org
|
- npmci command npm config set registry https://registry.npmjs.org
|
||||||
- npmci command npm audit --audit-level=high --only=dev
|
- npmci command pnpm audit --audit-level=high --dev
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
@@ -49,7 +52,6 @@ auditDevDependencies:
|
|||||||
testStable:
|
testStable:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci npm prepare
|
|
||||||
- npmci node install stable
|
- npmci node install stable
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci npm test
|
- npmci npm test
|
||||||
@@ -60,10 +62,9 @@ testStable:
|
|||||||
testBuild:
|
testBuild:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci npm prepare
|
|
||||||
- npmci node install stable
|
- npmci node install stable
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command npm run build
|
- npmci npm build
|
||||||
coverage: /\d+.?\d+?\%\s*coverage/
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
@@ -111,8 +112,7 @@ trigger:
|
|||||||
pages:
|
pages:
|
||||||
stage: metadata
|
stage: metadata
|
||||||
script:
|
script:
|
||||||
- npmci node install stable
|
- npmci node install stable
|
||||||
- npmci npm prepare
|
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command npm run buildDocs
|
- npmci command npm run buildDocs
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
43
changelog.md
Normal file
43
changelog.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-12-26 - 2.1.0 - feat(interfaces)
|
||||||
|
add structured data models and discriminated check configs; migrate tooling and package metadata
|
||||||
|
|
||||||
|
- Introduce TCheckConfig union and typed check config interfaces (IAssumptionCheckConfig, IFunctionCheckConfig, IPwaCheckConfig, IPageRankCheckConfig) and TExecutionTiming for runtimes
|
||||||
|
- Extend ICheckCollection to support a unified checks array while preserving legacy per-type arrays for backward compatibility
|
||||||
|
- Add service and status-page models (IServiceStatus, IOverallStatus, IServiceGroup, IStatusPageConfig) and richer incident types (IIncident, IIncidentUpdate) plus a legacy IIncidentLegacy shim
|
||||||
|
- Export central data index enhancements (re-exports for checks and types) and add new data files (types.ts, checks/index.ts, servicestatus.ts, statuspageconfig.ts)
|
||||||
|
- Migrate plugin and dependency namespaces (@apiglobal/... -> @api.global/..., @gitzone/* -> @git.zone/*) and update dependency versions
|
||||||
|
- Add npmextra release configuration (registries and accessLevel) and adjust tsconfig for NodeNext module resolution and verbatimModuleSyntax
|
||||||
|
|
||||||
|
## 2023-04-19 - 2.0.21 - core
|
||||||
|
Maintenance release with a series of core fixes and minor updates.
|
||||||
|
|
||||||
|
- Aggregated patch-level fixes and stability improvements applied across the 2.0.x line.
|
||||||
|
- Includes maintenance changes introduced in 2.0.4 through 2.0.21 (core updates, bug fixes, small adjustments).
|
||||||
|
- No breaking API changes.
|
||||||
|
|
||||||
|
## 2022-07-19 - 2.0.3 - core
|
||||||
|
Patch releases preparing and stabilizing the 2.0 series.
|
||||||
|
|
||||||
|
- Multiple small core updates and fixes delivered in 2.0.0 through 2.0.3.
|
||||||
|
- General maintenance and reliability improvements; no breaking changes.
|
||||||
|
|
||||||
|
## 2022-07-16 - 1.0.10 - core (BREAKING CHANGE)
|
||||||
|
Switch from CommonJS to ECMAScript Modules (ESM).
|
||||||
|
|
||||||
|
- BREAKING CHANGE: module system changed to ESM.
|
||||||
|
- Consumers must update imports/usage accordingly (CommonJS require() calls will need migration).
|
||||||
|
- Ensure build tools and runtime environments support ESM after this change.
|
||||||
|
|
||||||
|
## 2019-11-30 - 1.0.2 - interfaces
|
||||||
|
Introduce basic interface constructs for page checks.
|
||||||
|
|
||||||
|
- Implemented basic constructs for pagechecks under interfaces.
|
||||||
|
- Foundation for further interface-driven checks and validations.
|
||||||
|
|
||||||
|
## 2019-11-30 → 2021-03-08 - 1.0.3–1.0.9 - maintenance
|
||||||
|
Series of patch releases with minor fixes and updates.
|
||||||
|
|
||||||
|
- Multiple small fixes and maintenance updates across 1.0.3 through 1.0.9.
|
||||||
|
- General stability and housekeeping changes; no notable feature additions or breaking changes.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"gitzone": {
|
"@git.zone/cli": {
|
||||||
"projectType": "npm",
|
"projectType": "npm",
|
||||||
"module": {
|
"module": {
|
||||||
"githost": "gitlab.com",
|
"githost": "gitlab.com",
|
||||||
@@ -9,10 +9,16 @@
|
|||||||
"npmPackagename": "@uptime.link/interfaces",
|
"npmPackagename": "@uptime.link/interfaces",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"projectDomain": "uptime.link"
|
"projectDomain": "uptime.link"
|
||||||
|
},
|
||||||
|
"release": {
|
||||||
|
"registries": [
|
||||||
|
"https://verdaccio.lossless.digital",
|
||||||
|
"https://registry.npmjs.org"
|
||||||
|
],
|
||||||
|
"accessLevel": "public"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"npmci": {
|
"@ship.zone/szci": {
|
||||||
"npmGlobalTools": [],
|
"npmGlobalTools": []
|
||||||
"npmAccessLevel": "public"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
11003
package-lock.json
generated
11003
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@uptime.link/interfaces",
|
"name": "@uptime.link/interfaces",
|
||||||
"version": "2.0.2",
|
"version": "2.1.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "TypeScript interface for the uptime.link API and modules",
|
"description": "TypeScript interface for the uptime.link API and modules",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
@@ -14,14 +14,14 @@
|
|||||||
"buildDocs": "tsdoc"
|
"buildDocs": "tsdoc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.1.63",
|
"@git.zone/tsbuild": "^4.0.2",
|
||||||
"@gitzone/tstest": "^1.0.71",
|
"@git.zone/tsrun": "^2.0.1",
|
||||||
"@pushrocks/tapbundle": "^5.0.3",
|
"@git.zone/tstest": "^3.1.3",
|
||||||
"@types/node": "^18.0.5"
|
"@types/node": "^25.0.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apiglobal/typedrequest-interfaces": "^1.0.15",
|
"@api.global/typedrequest-interfaces": "^3.0.19",
|
||||||
"@tsclass/tsclass": "^4.0.17"
|
"@tsclass/tsclass": "^9.3.0"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"ts/**/*",
|
"ts/**/*",
|
||||||
|
|||||||
8046
pnpm-lock.yaml
generated
Normal file
8046
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -21,7 +21,6 @@ Code Style | [](htt
|
|||||||
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
||||||
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
||||||
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
||||||
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -35,7 +34,6 @@ We are always happy for code contributions. If you are not the code contributing
|
|||||||
|
|
||||||
For further information read the linked docs at the top of this readme.
|
For further information read the linked docs at the top of this readme.
|
||||||
|
|
||||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
## Legal
|
||||||
|
> MIT licensed | **©** [Task Venture Capital GmbH](https://task.vc)
|
||||||
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
||||||
|
|
||||||
[](https://maintainedby.lossless.com)
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { expect, tap } from '@pushrocks/tapbundle';
|
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||||
import * as interfaces from '../ts/index.js';
|
import * as interfaces from '../ts/index.js';
|
||||||
|
|
||||||
tap.test('first test', async () => {
|
tap.test('first test', async () => {
|
||||||
console.log(
|
console.log(
|
||||||
'hi' as interfaces.requests.checkRequests.IRequest_PageCheck_Assumption['request']['domain']
|
'hi' as interfaces.requests.IRequest_CheckExchange['request']['checkCollection']['id']
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* autocreated commitinfo by @pushrocks/commitinfo
|
* autocreated commitinfo by @push.rocks/commitinfo
|
||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@uptime.link/interfaces',
|
name: '@uptime.link/interfaces',
|
||||||
version: '2.0.2',
|
version: '2.1.0',
|
||||||
description: 'TypeScript interface for the uptime.link API and modules'
|
description: 'TypeScript interface for the uptime.link API and modules'
|
||||||
}
|
}
|
||||||
|
|||||||
24
ts/data/checkcollection.ts
Normal file
24
ts/data/checkcollection.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import type * as checks from './checks/index.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of checks to run against a property/service.
|
||||||
|
*
|
||||||
|
* Two storage modes supported:
|
||||||
|
* 1. Legacy: Separate arrays for each check type (assumptionChecks, functionChecks, etc.)
|
||||||
|
* 2. Modern: Single unified array using discriminated union (checks)
|
||||||
|
*/
|
||||||
|
export interface ICheckCollection {
|
||||||
|
id: string;
|
||||||
|
name?: string;
|
||||||
|
description?: string;
|
||||||
|
intervalMs: number;
|
||||||
|
|
||||||
|
// Modern: Single array with discriminated union
|
||||||
|
checks?: checks.TCheckConfig[];
|
||||||
|
|
||||||
|
// Legacy: Separate arrays by type (for backward compatibility)
|
||||||
|
assumptionChecks?: checks.IAssumptionCheck[];
|
||||||
|
functionChecks?: checks.IFunctionCheck[];
|
||||||
|
pwaChecks?: checks.IPwaCheck[];
|
||||||
|
pageRankChecks?: checks.IPageRankCheck[];
|
||||||
|
}
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
import * as plugins from '../ul-interfaces.plugins.js';
|
|
||||||
|
|
||||||
export type TCheckResultStatus = 'ok' | 'not ok' | 'timed out';
|
|
||||||
|
|
||||||
export interface ICheck {
|
|
||||||
type: 'pwa' | 'function' | 'assumption';
|
|
||||||
intervalMs: number;
|
|
||||||
pwaData?: {
|
|
||||||
domain: string;
|
|
||||||
};
|
|
||||||
functionData: {
|
|
||||||
domain: string;
|
|
||||||
functionDef: string;
|
|
||||||
};
|
|
||||||
assumptionData?: {
|
|
||||||
domain: string;
|
|
||||||
title?: string;
|
|
||||||
statusCode?: string;
|
|
||||||
description?: string;
|
|
||||||
dnsRecordMx?: string;
|
|
||||||
dnsRecordTxt?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
checkResults: Array<{
|
|
||||||
pwaResult?: {
|
|
||||||
timeStarted: number;
|
|
||||||
timeEnded: number;
|
|
||||||
duration: number;
|
|
||||||
status: TCheckResultStatus;
|
|
||||||
data: {
|
|
||||||
lhr: any;
|
|
||||||
reports: any[];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
functionResult?: {
|
|
||||||
timeStarted: number;
|
|
||||||
timeEnded: number;
|
|
||||||
duration: number;
|
|
||||||
status: TCheckResultStatus;
|
|
||||||
data: any;
|
|
||||||
|
|
||||||
};
|
|
||||||
assumptionResult: {
|
|
||||||
timeStarted: number;
|
|
||||||
timeEnded: number;
|
|
||||||
duration: number;
|
|
||||||
status: TCheckResultStatus;
|
|
||||||
data: {
|
|
||||||
domain: string;
|
|
||||||
title?: string;
|
|
||||||
statusCode?: string;
|
|
||||||
description?: string;
|
|
||||||
dnsRecordMx?: string;
|
|
||||||
dnsRecordTxt?: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
checkLog: string[];
|
|
||||||
}>;
|
|
||||||
}
|
|
||||||
28
ts/data/checks/assumption.check.ts
Normal file
28
ts/data/checks/assumption.check.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import type * as plugins from '../../ul-interfaces.plugins.js';
|
||||||
|
import type { TCheckResultStatus } from '../types.js';
|
||||||
|
import type { TExecutionTiming } from './index.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assumption check execution data.
|
||||||
|
* Used by check runners to store input and results.
|
||||||
|
*/
|
||||||
|
export interface IAssumptionCheck {
|
||||||
|
inputData: {
|
||||||
|
domain: string;
|
||||||
|
title?: string;
|
||||||
|
statusCode?: string;
|
||||||
|
description?: string;
|
||||||
|
dnsRecords?: plugins.tsclass.network.IDnsRecord;
|
||||||
|
};
|
||||||
|
executionResults: Array<{
|
||||||
|
timing: TExecutionTiming;
|
||||||
|
status: TCheckResultStatus;
|
||||||
|
data: {
|
||||||
|
domain: string;
|
||||||
|
title?: string;
|
||||||
|
statusCode?: string;
|
||||||
|
description?: string;
|
||||||
|
dnsRecords: Array<plugins.tsclass.network.IDnsRecord>;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
}
|
||||||
20
ts/data/checks/function.check.ts
Normal file
20
ts/data/checks/function.check.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import type { TCheckResultStatus } from '../types.js';
|
||||||
|
import type { TExecutionTiming } from './index.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function check execution data.
|
||||||
|
* Used by check runners to store input and results.
|
||||||
|
*/
|
||||||
|
export interface IFunctionCheck {
|
||||||
|
checkId: string;
|
||||||
|
inputData: {
|
||||||
|
domain: string;
|
||||||
|
functionDef: string;
|
||||||
|
};
|
||||||
|
executionResults: Array<{
|
||||||
|
timing: TExecutionTiming;
|
||||||
|
status: TCheckResultStatus;
|
||||||
|
data: any;
|
||||||
|
checkLog: string[];
|
||||||
|
}>;
|
||||||
|
}
|
||||||
117
ts/data/checks/index.ts
Normal file
117
ts/data/checks/index.ts
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
import type { TStatusType, TCheckResultStatus, TCheckLastResult } from '../types.js';
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Execution Timing (used by check runners)
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
export interface TExecutionTiming {
|
||||||
|
plannedTime: number;
|
||||||
|
timeStarted: number;
|
||||||
|
timeEnded: number;
|
||||||
|
duration: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-export for backward compatibility
|
||||||
|
export type { TCheckResultStatus };
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Check Configuration Base Interface
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base interface for all check configurations.
|
||||||
|
* Extended by discriminated variants.
|
||||||
|
*/
|
||||||
|
export interface ICheckBase {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
description?: string;
|
||||||
|
enabled: boolean;
|
||||||
|
intervalMs?: number;
|
||||||
|
lastRun?: number;
|
||||||
|
lastResult?: TCheckLastResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Discriminated Check Variants (Configuration)
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assumption check - assumes a status without active verification
|
||||||
|
*/
|
||||||
|
export interface IAssumptionCheckConfig extends ICheckBase {
|
||||||
|
checkType: 'assumption';
|
||||||
|
assumedStatus: TStatusType;
|
||||||
|
domain?: string;
|
||||||
|
title?: string;
|
||||||
|
statusCode?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function check - calls a URL and validates response
|
||||||
|
*/
|
||||||
|
export interface IFunctionCheckConfig extends ICheckBase {
|
||||||
|
checkType: 'function';
|
||||||
|
functionUrl: string;
|
||||||
|
domain?: string;
|
||||||
|
expectedStatusCode?: number;
|
||||||
|
timeoutMs?: number;
|
||||||
|
headers?: Record<string, string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PWA check - validates Progressive Web App criteria
|
||||||
|
*/
|
||||||
|
export interface IPwaCheckConfig extends ICheckBase {
|
||||||
|
checkType: 'pwa';
|
||||||
|
targetUrl: string;
|
||||||
|
domain?: string;
|
||||||
|
lighthouseThreshold?: number;
|
||||||
|
categories?: ('performance' | 'accessibility' | 'best-practices' | 'seo')[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PageRank check - validates search engine ranking
|
||||||
|
*/
|
||||||
|
export interface IPageRankCheckConfig extends ICheckBase {
|
||||||
|
checkType: 'pagerank';
|
||||||
|
targetUrl: string;
|
||||||
|
domain?: string;
|
||||||
|
searchTerm: string;
|
||||||
|
minimumRank?: number;
|
||||||
|
checkGoogle?: boolean;
|
||||||
|
checkBing?: boolean;
|
||||||
|
googleMinRank?: number;
|
||||||
|
bingMinRank?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Union Type (for UI and generic handling)
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Union of all check configuration types.
|
||||||
|
* Use `checkType` discriminant for type narrowing.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* function handleCheck(check: TCheckConfig) {
|
||||||
|
* if (check.checkType === 'function') {
|
||||||
|
* console.log(check.functionUrl); // TypeScript knows this exists
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export type TCheckConfig =
|
||||||
|
| IAssumptionCheckConfig
|
||||||
|
| IFunctionCheckConfig
|
||||||
|
| IPwaCheckConfig
|
||||||
|
| IPageRankCheckConfig;
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Execution Interfaces (Runtime Data)
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
// Keep existing execution interfaces for backward compatibility
|
||||||
|
export * from './assumption.check.js';
|
||||||
|
export * from './function.check.js';
|
||||||
|
export * from './pagerank.check.js';
|
||||||
|
export * from './pwa.check.js';
|
||||||
24
ts/data/checks/pagerank.check.ts
Normal file
24
ts/data/checks/pagerank.check.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import type * as search from '../search.js';
|
||||||
|
import type { TCheckResultStatus } from '../types.js';
|
||||||
|
import type { TExecutionTiming } from './index.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PageRank check execution data.
|
||||||
|
* Used by check runners to store input and results.
|
||||||
|
*/
|
||||||
|
export interface IPageRankCheck {
|
||||||
|
inputData: {
|
||||||
|
subId: string;
|
||||||
|
domain: string;
|
||||||
|
searchTerm: string;
|
||||||
|
checkBing?: boolean;
|
||||||
|
checkGoogle?: boolean;
|
||||||
|
bingMinRank?: number;
|
||||||
|
googleMinRank?: number;
|
||||||
|
};
|
||||||
|
executionResults: Array<{
|
||||||
|
timing: TExecutionTiming;
|
||||||
|
status: TCheckResultStatus;
|
||||||
|
pageRankResult: search.IPageRankResult;
|
||||||
|
}>;
|
||||||
|
}
|
||||||
22
ts/data/checks/pwa.check.ts
Normal file
22
ts/data/checks/pwa.check.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import type { TCheckResultStatus } from '../types.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PWA check execution data.
|
||||||
|
* Used by check runners to store input and results.
|
||||||
|
*/
|
||||||
|
export interface IPwaCheck {
|
||||||
|
inputData: {
|
||||||
|
domain: string;
|
||||||
|
};
|
||||||
|
executionResults: Array<{
|
||||||
|
subId: string;
|
||||||
|
timeStarted: number;
|
||||||
|
timeEnded: number;
|
||||||
|
duration: number;
|
||||||
|
status: TCheckResultStatus;
|
||||||
|
data: {
|
||||||
|
lhr: any;
|
||||||
|
reports: any[];
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
}
|
||||||
31
ts/data/domainsnapshot.ts
Normal file
31
ts/data/domainsnapshot.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
|
import type { ILinkSnapshot } from './linksnapshot.js';
|
||||||
|
|
||||||
|
export interface IDomainSnapshot {
|
||||||
|
registration: {
|
||||||
|
isRegistered: boolean;
|
||||||
|
updatedDate: number;
|
||||||
|
createdDate: number;
|
||||||
|
expiryDate: number;
|
||||||
|
};
|
||||||
|
delegation: plugins.tsclass.network.IDomainDelegation;
|
||||||
|
phishingFlags: {
|
||||||
|
listName: string;
|
||||||
|
}[];
|
||||||
|
recordScans: {
|
||||||
|
identifier: string;
|
||||||
|
nameservers: string[];
|
||||||
|
aRecords: plugins.tsclass.network.IDnsRecord[];
|
||||||
|
aaaaRecords: plugins.tsclass.network.IDnsRecord[];
|
||||||
|
txtRecords: plugins.tsclass.network.IDnsRecord[];
|
||||||
|
mxRecords: plugins.tsclass.network.IDnsRecord[];
|
||||||
|
specialRecords: {
|
||||||
|
dmarc: plugins.tsclass.network.IDnsRecord[];
|
||||||
|
}
|
||||||
|
}[];
|
||||||
|
linkSnapshots: ILinkSnapshot[];
|
||||||
|
whoisServers: {
|
||||||
|
serverUrl: string;
|
||||||
|
content: string;
|
||||||
|
}[];
|
||||||
|
}
|
||||||
@@ -1,21 +1,80 @@
|
|||||||
import * as plugins from '../ul-interfaces.plugins.js';
|
import type { TIncidentSeverity, TIncidentStatus } from './types.js';
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Incident Update
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A single update within an incident timeline.
|
||||||
|
*/
|
||||||
|
export interface IIncidentUpdate {
|
||||||
|
id: string;
|
||||||
|
incidentId: string;
|
||||||
|
status: TIncidentStatus;
|
||||||
|
message: string;
|
||||||
|
createdAt: number;
|
||||||
|
createdBy?: string;
|
||||||
|
type?: 'comment' | 'status_change' | 'automatic';
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Incident
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an incident affecting one or more services.
|
||||||
|
*/
|
||||||
export interface IIncident {
|
export interface IIncident {
|
||||||
|
id: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
severity: TIncidentSeverity;
|
||||||
|
status: TIncidentStatus;
|
||||||
|
|
||||||
|
// Affected services
|
||||||
|
affectedServiceIds: string[];
|
||||||
|
|
||||||
|
// Timeline
|
||||||
|
createdAt: number;
|
||||||
|
updatedAt: number;
|
||||||
|
resolvedAt?: number;
|
||||||
|
firstResponseAt?: number;
|
||||||
|
|
||||||
|
// Updates history
|
||||||
|
updates: IIncidentUpdate[];
|
||||||
|
|
||||||
|
// Metadata
|
||||||
|
createdBy?: string;
|
||||||
|
assignedUserId?: string;
|
||||||
|
creationMode?: 'monitor' | 'manual';
|
||||||
|
|
||||||
|
// Scheduled maintenance
|
||||||
|
isScheduled?: boolean;
|
||||||
|
scheduledStartTime?: number;
|
||||||
|
scheduledEndTime?: number;
|
||||||
|
|
||||||
|
// Post-incident
|
||||||
|
postMortemLink?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Legacy Interface (for backward compatibility)
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use IIncident instead
|
||||||
|
*/
|
||||||
|
export interface IIncidentLegacy {
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
firstResponseTimestamp?: number;
|
firstResponseTimestamp?: number;
|
||||||
/**
|
|
||||||
* indicates
|
|
||||||
*/
|
|
||||||
status: 'discovered' | 'investigating' | 'fixing' | 'fixImplemented' | 'watching' | 'resolved';
|
status: 'discovered' | 'investigating' | 'fixing' | 'fixImplemented' | 'watching' | 'resolved';
|
||||||
creationMode: 'monitor' | 'manual';
|
creationMode: 'monitor' | 'manual';
|
||||||
assignedUserId?: string;
|
assignedUserId?: string;
|
||||||
postMortemLink?: string;
|
postMortemLink?: string;
|
||||||
|
|
||||||
updates: {
|
updates: {
|
||||||
markdownText: string;
|
markdownText: string;
|
||||||
type: 'comment' | 'manualUpdate' | 'automaticUpdate';
|
type: 'comment' | 'manualUpdate' | 'automaticUpdate';
|
||||||
}[];
|
}[];
|
||||||
|
|
||||||
justForLooks: {
|
justForLooks: {
|
||||||
isoTimestamp: string;
|
isoTimestamp: string;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,32 @@
|
|||||||
export * from './checks.js';
|
// Core types
|
||||||
|
export * from './types.js';
|
||||||
|
|
||||||
|
// Check interfaces (configuration + execution)
|
||||||
|
export * from './checks/index.js';
|
||||||
|
|
||||||
|
// Collections
|
||||||
|
export * from './checkcollection.js';
|
||||||
|
|
||||||
|
// Incidents
|
||||||
export * from './incident.js';
|
export * from './incident.js';
|
||||||
|
|
||||||
|
// Service status
|
||||||
|
export * from './servicestatus.js';
|
||||||
|
|
||||||
|
// Status page configuration
|
||||||
|
export * from './statuspageconfig.js';
|
||||||
|
|
||||||
|
// Domain and link snapshots
|
||||||
|
export * from './domainsnapshot.js';
|
||||||
|
export * from './linksnapshot.js';
|
||||||
|
|
||||||
|
// Property and search
|
||||||
export * from './property.js';
|
export * from './property.js';
|
||||||
|
export * from './search.js';
|
||||||
|
|
||||||
|
// Status (90-day history)
|
||||||
export * from './status.js';
|
export * from './status.js';
|
||||||
|
|
||||||
|
// Re-export checks namespace for convenience
|
||||||
|
import * as checks from './checks/index.js';
|
||||||
|
export { checks };
|
||||||
|
|||||||
29
ts/data/linksnapshot.ts
Normal file
29
ts/data/linksnapshot.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
|
|
||||||
|
export interface ILinkSnapshot {
|
||||||
|
/**
|
||||||
|
* the link base on which the snapshot was taken
|
||||||
|
*/
|
||||||
|
linkBaseUrl: string;
|
||||||
|
httpsSupport: boolean;
|
||||||
|
httpHttpsParity: boolean;
|
||||||
|
httpToHttpsRedirect: boolean;
|
||||||
|
fromWwwRedirect: boolean;
|
||||||
|
toWwwRedirect: boolean;
|
||||||
|
statusCode: number;
|
||||||
|
fullPageLoadSize: number;
|
||||||
|
fullPageLoadTimeMs: number;
|
||||||
|
cookies: any[];
|
||||||
|
httpRequest: {
|
||||||
|
statusCode: number;
|
||||||
|
headers: {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
httpsRequest: {
|
||||||
|
statusCode: number;
|
||||||
|
headers: {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
import * as plugins from '../ul-interfaces.plugins.js';
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
|
|
||||||
export class IProperty {
|
export class IUplinkProperty {
|
||||||
|
wgOrgIdRef: string;
|
||||||
|
wgPropertyIdRef: string;
|
||||||
name: string;
|
name: string;
|
||||||
type: 'website' | 'app' | 'api' | 'other';
|
type: 'website' | 'app' | 'api' | 'other';
|
||||||
access: 'private' | 'public' | 'auth';
|
access: 'private' | 'public' | 'auth';
|
||||||
checkRefs: string[];
|
checkCollectionIdRefs: string[];
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|||||||
21
ts/data/search.ts
Normal file
21
ts/data/search.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
export interface ISearchResult {
|
||||||
|
searchTerm: string;
|
||||||
|
targetUrl: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
rank: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* special data returned by the PageRankCheck check class
|
||||||
|
*/
|
||||||
|
export interface IPageRankResult {
|
||||||
|
googleRank: number;
|
||||||
|
googleBlocked: boolean;
|
||||||
|
bingRank: number;
|
||||||
|
bingBlocked: boolean;
|
||||||
|
searchResults: {
|
||||||
|
google: ISearchResult[];
|
||||||
|
bing: ISearchResult[];
|
||||||
|
};
|
||||||
|
}
|
||||||
64
ts/data/servicestatus.ts
Normal file
64
ts/data/servicestatus.ts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import type { TStatusType, TStatusMode, TCheckType } from './types.js';
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Service Status
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the status of a monitored service.
|
||||||
|
*/
|
||||||
|
export interface IServiceStatus {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
displayName: string;
|
||||||
|
description?: string;
|
||||||
|
|
||||||
|
// Current state
|
||||||
|
currentStatus: TStatusType;
|
||||||
|
lastChecked: number;
|
||||||
|
responseTime: number;
|
||||||
|
|
||||||
|
// Uptime metrics
|
||||||
|
uptime30d: number;
|
||||||
|
uptime90d: number;
|
||||||
|
|
||||||
|
// Organization
|
||||||
|
category?: string;
|
||||||
|
dependencies?: string[];
|
||||||
|
|
||||||
|
// Status management
|
||||||
|
statusMode: TStatusMode;
|
||||||
|
manualStatus?: TStatusType;
|
||||||
|
paused: boolean;
|
||||||
|
|
||||||
|
// Check configuration
|
||||||
|
checkType?: TCheckType;
|
||||||
|
checkCollectionId?: string;
|
||||||
|
intervalMs?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Status History
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A point in the status history timeline.
|
||||||
|
*/
|
||||||
|
export interface IStatusHistoryPoint {
|
||||||
|
timestamp: number;
|
||||||
|
status: TStatusType;
|
||||||
|
responseTime?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Overall Status
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Aggregate status for a group of services or entire status page.
|
||||||
|
*/
|
||||||
|
export interface IOverallStatus {
|
||||||
|
status: TStatusType;
|
||||||
|
message?: string;
|
||||||
|
lastUpdated: number;
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import * as plugins from '../ul-interfaces.plugins.js';
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
|
|
||||||
export interface IStatus {
|
export interface IStatus {
|
||||||
last90days: IDailyStatus[];
|
last90days: IDailyStatus[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDailyStatus {
|
export interface IDailyStatus {
|
||||||
timezone: 'UTC',
|
timezone: 'UTC';
|
||||||
date: plugins.tsclass.general.IDate;
|
date: plugins.tsclass.general.IDate;
|
||||||
overallStatus: 'ok' | 'reduced' | 'outage';
|
overallStatus: 'ok' | 'reduced' | 'outage';
|
||||||
incidentRefs: string[];
|
incidentRefs: string[];
|
||||||
}
|
}
|
||||||
|
|||||||
57
ts/data/statuspageconfig.ts
Normal file
57
ts/data/statuspageconfig.ts
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
import type { IOverallStatus } from './servicestatus.js';
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Service Group
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A group of related services displayed together.
|
||||||
|
*/
|
||||||
|
export interface IServiceGroup {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
description?: string;
|
||||||
|
serviceIds: string[];
|
||||||
|
expanded: boolean;
|
||||||
|
order?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Status Page Configuration
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration for a public status page.
|
||||||
|
*/
|
||||||
|
export interface IStatusPageConfig {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
slug: string;
|
||||||
|
|
||||||
|
// Branding
|
||||||
|
logoUrl?: string;
|
||||||
|
faviconUrl?: string;
|
||||||
|
primaryColor?: string;
|
||||||
|
customCss?: string;
|
||||||
|
|
||||||
|
// Content
|
||||||
|
headerTitle: string;
|
||||||
|
headerDescription?: string;
|
||||||
|
footerText?: string;
|
||||||
|
|
||||||
|
// Features
|
||||||
|
showHistoricalUptime: boolean;
|
||||||
|
showResponseTime: boolean;
|
||||||
|
showSubscribeButton: boolean;
|
||||||
|
showIncidentHistory: boolean;
|
||||||
|
|
||||||
|
// Service grouping
|
||||||
|
serviceGroups: IServiceGroup[];
|
||||||
|
|
||||||
|
// Overall status override
|
||||||
|
overallStatus?: IOverallStatus;
|
||||||
|
|
||||||
|
// Custom domain
|
||||||
|
customDomain?: string;
|
||||||
|
sslEnabled?: boolean;
|
||||||
|
}
|
||||||
63
ts/data/types.ts
Normal file
63
ts/data/types.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/**
|
||||||
|
* Shared type definitions for uptime.link
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Status Types
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status types for monitors/services
|
||||||
|
*/
|
||||||
|
export type TStatusType =
|
||||||
|
| 'operational'
|
||||||
|
| 'degraded'
|
||||||
|
| 'partial_outage'
|
||||||
|
| 'major_outage'
|
||||||
|
| 'maintenance'
|
||||||
|
| 'initializing'
|
||||||
|
| 'error'
|
||||||
|
| 'paused';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check types (discriminant values for TCheck union)
|
||||||
|
*/
|
||||||
|
export type TCheckType = 'assumption' | 'function' | 'pwa' | 'pagerank';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status mode for monitors - auto follows checks, manual is user-set
|
||||||
|
*/
|
||||||
|
export type TStatusMode = 'auto' | 'manual';
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Incident Types
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Incident severity levels
|
||||||
|
*/
|
||||||
|
export type TIncidentSeverity = 'critical' | 'major' | 'minor' | 'maintenance';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Incident status workflow
|
||||||
|
*/
|
||||||
|
export type TIncidentStatus =
|
||||||
|
| 'investigating'
|
||||||
|
| 'identified'
|
||||||
|
| 'monitoring'
|
||||||
|
| 'resolved'
|
||||||
|
| 'postmortem';
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Check Result Types (used by execution)
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Result status for check execution
|
||||||
|
*/
|
||||||
|
export type TCheckResultStatus = 'ok' | 'not ok' | 'timed out';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last result state for a check
|
||||||
|
*/
|
||||||
|
export type TCheckLastResult = 'success' | 'failure' | 'pending';
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
import * as checkRequests from './requests.checks.js';
|
export * from './requests.checks.js';
|
||||||
|
export * from './requests.incidents.js';
|
||||||
export { checkRequests };
|
export * from './requests.snapshot.js';
|
||||||
|
export * from './requests.status.js';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ICheck } from '../data/checks.js';
|
import type { ICheckCollection } from '../data/checkcollection.js';
|
||||||
import * as plugins from '../ul-interfaces.plugins.js';
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
|
|
||||||
export interface IRequest_CheckExchange
|
export interface IRequest_CheckExchange
|
||||||
@@ -8,9 +8,9 @@ export interface IRequest_CheckExchange
|
|||||||
> {
|
> {
|
||||||
method: 'check';
|
method: 'check';
|
||||||
request: {
|
request: {
|
||||||
check: ICheck;
|
checkCollection: ICheckCollection;
|
||||||
};
|
};
|
||||||
response: {
|
response: {
|
||||||
check: ICheck;
|
checkCollection: ICheckCollection;
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
18
ts/requests/requests.snapshot.ts
Normal file
18
ts/requests/requests.snapshot.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import type { IDomainSnapshot } from '../data/domainsnapshot.js';
|
||||||
|
import type { ILinkSnapshot } from '../data/linksnapshot.js';
|
||||||
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
|
|
||||||
|
export interface IReq_PerformDomainSnapshot
|
||||||
|
extends plugins.typedRequestInterfaces.implementsTR<
|
||||||
|
plugins.typedRequestInterfaces.ITypedRequest,
|
||||||
|
IReq_PerformDomainSnapshot
|
||||||
|
> {
|
||||||
|
method: 'performDomainSnapshot';
|
||||||
|
request: {
|
||||||
|
domainName: string;
|
||||||
|
};
|
||||||
|
response: {
|
||||||
|
domainSnapshot: IDomainSnapshot;
|
||||||
|
linkSnapshot: ILinkSnapshot;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as plugins from '../ul-interfaces.plugins.js';
|
import * as plugins from '../ul-interfaces.plugins.js';
|
||||||
import * as data from '../data/index.js';
|
import * as data from '../data/index.js';
|
||||||
import { IStatus } from '../data/status.js';
|
import type { IStatus } from '../data/status.js';
|
||||||
|
|
||||||
export interface IRequest_Status_Get
|
export interface IRequest_Status_Get
|
||||||
extends plugins.typedRequestInterfaces.implementsTR<
|
extends plugins.typedRequestInterfaces.implementsTR<
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import * as typedRequestInterfaces from '@apiglobal/typedrequest-interfaces';
|
import * as typedRequestInterfaces from '@api.global/typedrequest-interfaces';
|
||||||
|
|
||||||
export { typedRequestInterfaces };
|
export { typedRequestInterfaces };
|
||||||
|
|
||||||
// tsclass scope
|
// tsclass scope
|
||||||
import * as tsclass from '@tsclass/tsclass';
|
import * as tsclass from '@tsclass/tsclass';
|
||||||
|
|
||||||
export {
|
export { tsclass };
|
||||||
tsclass
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"experimentalDecorators": true,
|
|
||||||
"useDefineForClassFields": false,
|
|
||||||
"target": "ES2022",
|
"target": "ES2022",
|
||||||
"module": "ES2022",
|
"module": "NodeNext",
|
||||||
"moduleResolution": "nodenext",
|
"moduleResolution": "NodeNext",
|
||||||
"esModuleInterop": true
|
"esModuleInterop": true,
|
||||||
}
|
"verbatimModuleSyntax": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"dist_*/**/*.d.ts"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user