Skip to content

Commit a01f613

Browse files
committed
feat(Code): Begin work on TypeScript side of loading and dep injection
1 parent 01c8a49 commit a01f613

18 files changed

+245
-112
lines changed

nodemon.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"watch": ["src"],
2+
"watch": ["src", "IPAM.yaml"],
33
"ext": "ts",
44
"ignore": ["src/**/*.test.ts"],
55
"exec": "npm run start:debug"

schemas/IPAM.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"community":{"type":"object","additionalProperties":false,"$id":"#community","description":"Community","properties":{"contact":{"type":"string","description":"Community Contact ID"},"name":{"type":"string","description":"Community Friendly Name"},"id":{"type":"string","description":"Short form community code","examples":["sxl"]},"sites":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Community Site","properties":{"id":{"type":"string","description":"Site short id"},"name":{"type":"string"},"devices":{"type":"array","items":{"$ref":"#/definitions/device"}}},"required":["id","name"]}}},"required":["name","id","sites"]},"contact":{"type":"object","additionalProperties":false,"$id":"#contact","description":"Community Contact","properties":{"id":{"type":"string","description":"Unique contact ID"},"name":{"type":"string","description":"Contact Full Name"}},"required":["id","name"]},"device":{"type":"object","additionalProperties":false,"$id":"#device","description":"Network Device","properties":{"id":{"type":"string","description":"Chained ID"},"name":{"type":"string","description":"Friendly name"},"type":{"$ref":"#/definitions/networkDeviceType"}},"required":["id","name"]},"networkcircuit":{"type":"object","additionalProperties":false,"description":"NetworkCircuit","properties":{"id":{"type":"string","description":"Circuit Id"},"speed":{"type":"string","description":"Circuit Speed"}},"required":["id"]},"networkDeviceLink":{"type":"object","additionalProperties":false,"description":"Link a Network to a device","properties":{"id":{"type":"string","description":"Device id"},"interface":{"type":"string","description":"Device interface"}},"required":["id"]},"circuitLocation":{"type":"object","description":"Traditional external circuits","properties":{"id":{"type":"string","description":"External circuit id"},"provider":{"type":"string","description":"External circuit provider"},"communuity":{"type":"string","description":"Community ID"},"address":{"type":"string","description":"Address provided to external provider"},"demarcSpeed":{"type":"string","enum":["10M","100M","200M","300M","500M","1G","5G","10G"]}}},"circuit":{"type":"object","description":"Community Circuit","properties":{"id":{"type":"string","description":"Circuit ID"},"sideA":{"type":"object","properties":{"id":{"type":"string","description":"Circuit Location Id"}}},"sideZ":{"type":"object","properties":{"id":{"type":"string","description":"Circuit Location Id"}}},"speed":{"type":"string"}},"required":["id"]},"network":{"type":"object","additionalProperties":false,"description":"Network","properties":{"prefix":{"type":"string","description":"Network Prefix"},"description":{"type":"string"},"circuit":{"$ref":"#/definitions/networkcircuit"},"contact":{"type":"string","description":"Contact ID"},"hosts":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Indivual Network host","properties":{"ip":{"type":"string","description":"Host IP Address"},"hostname":{"type":"string","description":"Hostname for reverse DNS creation"},"description":{"type":"string"},"device":{"$ref":"#/definitions/networkDeviceLink"}},"required":["ip"]}},"ranges":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Network Range","properties":{"start":{"type":"string"},"end":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["DHCP","RESERVED","STATIC"]}},"required":["start","end"]}},"networks":{"type":"array","items":{"$ref":"#/definitions/network"},"uniqueItems":true,"description":"Children Networks"}}},"networkDeviceType":{"type":"string","enum":["router","switch","access-point","server","modem","firewall"]},"networkDeviceInterfaceType":{"type":"string","enum":["FastEthernet","GigabitEthernet","TenGigabitEthernet"]}},"type":"object","additionalProperties":false,"description":"IPAM Configuration File","properties":{"communities":{"type":"array","items":{"$ref":"#/definitions/community"}},"circuits":{"type":"array","items":{"$ref":"#/definitions/circuit"},"uniqueItems":true,"description":"Circuits"},"circuitLocations":{"type":"array","items":{"$ref":"#/definitions/circuitLocation"},"uniqueItems":true,"description":"External Circuits"},"contacts":{"type":"array","items":{"$ref":"#/definitions/contact"},"uniqueItems":true,"description":"Contact Information"},"networks":{"type":"array","items":{"$ref":"#/definitions/network"},"uniqueItems":true,"description":"Networks"}},"required":["communities","circuits","circuitLocations","contacts","networks"]}
1+
{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"community":{"type":"object","additionalProperties":false,"$id":"#community","description":"Community","properties":{"contact":{"type":"string","description":"Community Contact ID"},"name":{"type":"string","description":"Community Friendly Name"},"id":{"type":"string","description":"Short form community code","examples":["sxl"]},"sites":{"type":"array","items":{"$ref":"#/definitions/communitySite"}}},"required":["name","id","sites"]},"communitySite":{"type":"object","additionalProperties":false,"description":"Community Site","properties":{"id":{"type":"string","description":"Site short id"},"name":{"type":"string"},"devices":{"type":"array","items":{"$ref":"#/definitions/device"}}},"required":["id","name"]},"contact":{"type":"object","additionalProperties":false,"$id":"#contact","description":"Community Contact","properties":{"id":{"type":"string","description":"Unique contact ID"},"name":{"type":"string","description":"Contact Full Name"}},"required":["id","name"]},"device":{"type":"object","additionalProperties":false,"$id":"#device","description":"Network Device","properties":{"id":{"type":"string","description":"Chained ID"},"name":{"type":"string","description":"Friendly name"},"type":{"$ref":"#/definitions/networkDeviceType"}},"required":["id","name"]},"networkcircuit":{"type":"object","additionalProperties":false,"description":"NetworkCircuit","properties":{"id":{"type":"string","description":"Circuit Id"},"speed":{"type":"string","description":"Circuit Speed"}},"required":["id"]},"networkDeviceLink":{"type":"object","additionalProperties":false,"description":"Link a Network to a device","properties":{"id":{"type":"string","description":"Device id"},"interface":{"type":"string","description":"Device interface"}},"required":["id"]},"circuitLocation":{"type":"object","description":"Traditional external circuits","properties":{"id":{"type":"string","description":"External circuit id"},"provider":{"type":"string","description":"External circuit provider"},"communuity":{"type":"string","description":"Community ID"},"address":{"type":"string","description":"Address provided to external provider"},"demarcSpeed":{"type":"string","enum":["10M","100M","200M","300M","500M","1G","5G","10G"]}}},"circuit":{"type":"object","description":"Community Circuit","properties":{"id":{"type":"string","description":"Circuit ID"},"sideA":{"type":"object","properties":{"id":{"type":"string","description":"Circuit Location Id"}}},"sideZ":{"type":"object","properties":{"id":{"type":"string","description":"Circuit Location Id"}}},"speed":{"type":"string"}},"required":["id"]},"network":{"type":"object","additionalProperties":false,"description":"Network","properties":{"prefix":{"type":"string","description":"Network Prefix"},"description":{"type":"string"},"circuit":{"$ref":"#/definitions/networkcircuit"},"contact":{"type":"string","description":"Contact ID"},"hosts":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Indivual Network host","properties":{"ip":{"type":"string","description":"Host IP Address"},"hostname":{"type":"string","description":"Hostname for reverse DNS creation"},"description":{"type":"string"},"device":{"$ref":"#/definitions/networkDeviceLink"}},"required":["ip"]}},"ranges":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Network Range","properties":{"start":{"type":"string"},"end":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["DHCP","RESERVED","STATIC"]}},"required":["start","end"]}},"networks":{"type":"array","items":{"$ref":"#/definitions/network"},"uniqueItems":true,"description":"Children Networks"}}},"networkDeviceType":{"type":"string","enum":["router","switch","access-point","server","modem","firewall"]},"networkDeviceInterfaceType":{"type":"string","enum":["FastEthernet","GigabitEthernet","TenGigabitEthernet"]}},"type":"object","additionalProperties":false,"description":"IPAM Configuration File","properties":{"communities":{"type":"array","items":{"$ref":"#/definitions/community"}},"circuits":{"type":"array","items":{"$ref":"#/definitions/circuit"},"uniqueItems":true,"description":"Circuits"},"circuitLocations":{"type":"array","items":{"$ref":"#/definitions/circuitLocation"},"uniqueItems":true,"description":"External Circuits"},"contacts":{"type":"array","items":{"$ref":"#/definitions/contact"},"uniqueItems":true,"description":"Contact Information"},"networks":{"type":"array","items":{"$ref":"#/definitions/network"},"uniqueItems":true,"description":"Networks"}},"required":["communities","circuits","circuitLocations","contacts","networks"]}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// src/Modules/Communities/CommunitySchema.ts
2+
import jsonSchema from 'fluent-json-schema';
3+
4+
export const communitySchema = jsonSchema
5+
.object()
6+
.additionalProperties(false)
7+
.id('#community')
8+
.description('Community')
9+
.prop('contact', jsonSchema.string().description('Community Contact ID'))
10+
.prop(
11+
'name',
12+
jsonSchema.string().description('Community Friendly Name').required(),
13+
)
14+
.prop(
15+
'id',
16+
jsonSchema
17+
.string()
18+
.description('Short form community code')
19+
.examples(['sxl'])
20+
.required(),
21+
)
22+
.prop(
23+
'sites',
24+
jsonSchema
25+
.array()
26+
.items(jsonSchema.ref('#/definitions/communitySite'))
27+
.required(),
28+
);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// src/Modules/Communities/CommunitySite.ts
2+
import { Inject, InjectMany, Service } from 'typedi';
3+
import { CommunitySite as IPAMCommunitySite } from '../IPAM/IPAMConfig.gen';
4+
import { NetworkDevice } from '../NetworkDevices/NetworkDevice';
5+
6+
@Service()
7+
export class CommunitySite implements IPAMCommunitySite {
8+
public id: string;
9+
10+
public name: string;
11+
12+
public devices: NetworkDevice[];
13+
14+
public constructor(options: Partial<CommunitySite>) {
15+
Object.assign(this, options);
16+
}
17+
}

src/Modules/CommunitySites/CommunitySiteConfigSchema.ts renamed to src/Modules/Communities/CommunitySiteSchema.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// src/Modules/CommunitySites/CommunitySiteConfigSchema.ts
1+
// src/Modules/Communities/CommunitySiteSchema.ts
22
import jsonSchema from 'fluent-json-schema';
33

4-
export const communitySiteConfigSchema = jsonSchema
4+
export const communitySiteSchema = jsonSchema
55
.object()
66
.additionalProperties(false)
77
.description('Community Site')
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// src/Modules/CommunityContacts/CommunityContact.ts
2+
import { Contact as IPAMContact } from '../IPAM/IPAMConfig.gen';
3+
4+
export class Contact implements IPAMContact {
5+
public id: string;
6+
7+
public name: string;
8+
9+
public constructor(options: Partial<Contact>) {
10+
Object.assign(this, options);
11+
}
12+
}

src/Modules/CommunitySites/CommunitySiteConfig.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/Modules/IPAM/Community.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
// src/Modules/Communities/Community.ts
2-
import { Token } from 'typedi';
2+
import Container, { Service, Token } from 'typedi';
3+
import { CommunitySite } from '../Communities/CommunitySite';
4+
import { Contact } from '../CommunityContacts/CommunityContact';
35

46
export const CommunitiesToken = new Token<string>('communities');
57

8+
@Service()
69
export class Community {
710
public name: string;
811

12+
public contactId: string;
13+
14+
public sites: CommunitySite[];
15+
16+
public get contact(): Contact {
17+
return Container.get(`contact-${this.contactId}`);
18+
}
19+
920
public constructor(options: Partial<Community>) {
1021
Object.assign(this, options);
1122
}

src/Modules/IPAM/CommunityConfig.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)