pmcf 4.16.13 → 4.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -42,65 +42,69 @@ generates config packages for:
42
42
 
43
43
  * [Base](#base)
44
44
  * [Parameters](#parameters)
45
- * [extendedAttribute](#extendedattribute)
45
+ * [walkDirections](#walkdirections)
46
46
  * [Parameters](#parameters-1)
47
- * [propertyIterator](#propertyiterator)
47
+ * [extendedAttribute](#extendedattribute)
48
48
  * [Parameters](#parameters-2)
49
- * [getProperties](#getproperties)
49
+ * [propertyIterator](#propertyiterator)
50
50
  * [Parameters](#parameters-3)
51
+ * [getProperties](#getproperties)
52
+ * [Parameters](#parameters-4)
51
53
  * [priority](#priority)
52
54
  * [expression](#expression)
53
- * [Parameters](#parameters-4)
54
- * [findService](#findservice)
55
55
  * [Parameters](#parameters-5)
56
- * [property](#property)
56
+ * [findService](#findservice)
57
57
  * [Parameters](#parameters-6)
58
- * [expand](#expand)
58
+ * [templateContent](#templatecontent)
59
59
  * [Parameters](#parameters-7)
60
+ * [property](#property)
61
+ * [Parameters](#parameters-8)
62
+ * [expand](#expand)
63
+ * [Parameters](#parameters-9)
60
64
  * [PortEndpoint](#portendpoint)
61
- * [Parameters](#parameters-8)
65
+ * [Parameters](#parameters-10)
62
66
  * [port](#port)
63
67
  * [socketAddress](#socketaddress)
64
68
  * [HTTPEndpoint](#httpendpoint)
65
- * [Parameters](#parameters-9)
69
+ * [Parameters](#parameters-11)
66
70
  * [port](#port-1)
67
71
  * [SkeletonNetworkInterface](#skeletonnetworkinterface)
68
72
  * [networkAddresses](#networkaddresses)
69
- * [Parameters](#parameters-10)
73
+ * [Parameters](#parameters-12)
70
74
  * [SystemdJournalRemoteService](#systemdjournalremoteservice)
71
75
  * [Properties](#properties)
72
76
  * [systemdConfigs](#systemdconfigs)
73
- * [Parameters](#parameters-11)
77
+ * [Parameters](#parameters-13)
74
78
  * [SystemdJournalUploadService](#systemdjournaluploadservice)
75
79
  * [Properties](#properties-1)
76
80
  * [systemdConfigs](#systemdconfigs-1)
77
- * [Parameters](#parameters-12)
81
+ * [Parameters](#parameters-14)
78
82
  * [NetworkAddress](#networkaddress)
79
- * [Parameters](#parameters-13)
83
+ * [Parameters](#parameters-15)
80
84
  * [subnet](#subnet)
81
85
  * [networkInterface](#networkinterface)
82
86
  * [address](#address)
83
87
  * [addresses](#addresses)
84
- * [Parameters](#parameters-14)
88
+ * [Parameters](#parameters-16)
85
89
  * [cidrAddresses](#cidraddresses)
86
- * [Parameters](#parameters-15)
90
+ * [Parameters](#parameters-17)
87
91
  * [isTemplate](#istemplate)
88
92
  * [services](#services)
89
- * [Parameters](#parameters-16)
93
+ * [Parameters](#parameters-18)
90
94
  * [named](#named)
91
- * [Parameters](#parameters-17)
95
+ * [Parameters](#parameters-19)
92
96
  * [serviceEndpoints](#serviceendpoints)
93
- * [Parameters](#parameters-18)
97
+ * [Parameters](#parameters-20)
94
98
  * [domainName](#domainname)
95
- * [Parameters](#parameters-19)
99
+ * [Parameters](#parameters-21)
96
100
  * [domainFromDominName](#domainfromdominname)
97
- * [Parameters](#parameters-20)
101
+ * [Parameters](#parameters-22)
98
102
  * [sectionLines](#sectionlines)
99
- * [Parameters](#parameters-21)
103
+ * [Parameters](#parameters-23)
100
104
  * [asArray](#asarray)
101
- * [Parameters](#parameters-22)
105
+ * [Parameters](#parameters-24)
102
106
  * [asIterator](#asiterator)
103
- * [Parameters](#parameters-23)
107
+ * [Parameters](#parameters-25)
104
108
 
105
109
  ## Base
106
110
 
@@ -112,6 +116,16 @@ properties: use defined values to support attribute value definitions
112
116
  * `owner` **[Base](#base)** 
113
117
  * `data` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** 
114
118
 
119
+ ### walkDirections
120
+
121
+ Walk the object graph in some directions and deliver seen nodes.
122
+
123
+ #### Parameters
124
+
125
+ * `directions` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** (optional, default `["this","extends","owner"]`)
126
+
127
+ Returns **Iterable<[Base](#base)>**&#x20;
128
+
115
129
  ### extendedAttribute
116
130
 
117
131
  #### Parameters
@@ -161,6 +175,15 @@ Returns **any**&#x20;
161
175
 
162
176
  Returns **any** service with the highest priority
163
177
 
178
+ ### templateContent
179
+
180
+ #### Parameters
181
+
182
+ * `entryProperties` **any**&#x20;
183
+ * `directoryProperties` **any**&#x20;
184
+
185
+ Returns **AsyncIterable\<ContentProvider>**&#x20;
186
+
164
187
  ### property
165
188
 
166
189
  #### Parameters
package/bin/pmcf-package CHANGED
@@ -67,7 +67,7 @@ for (const object of root.find(args)) {
67
67
  const output = new outputFactory(properties);
68
68
 
69
69
  const artifact = await output.create(
70
- sources.map(source => source[Symbol.asyncIterator]()),
70
+ sources.flat().map(source => source[Symbol.asyncIterator]()),
71
71
  [],
72
72
  publishingDetails,
73
73
  options
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmcf",
3
- "version": "4.16.13",
3
+ "version": "4.17.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -55,7 +55,7 @@
55
55
  "dependencies": {
56
56
  "content-entry-transform": "^1.6.4",
57
57
  "ip-utilties": "^3.0.0",
58
- "npm-pkgbuild": "^20.5.1",
58
+ "npm-pkgbuild": "^20.6.1",
59
59
  "pacc": "^8.8.0",
60
60
  "package-directory": "^8.2.0"
61
61
  },
package/src/base.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import { join } from "node:path";
2
+ import { stat } from "node:fs/promises";
2
3
  import { allOutputs } from "npm-pkgbuild";
3
4
  import {
4
5
  createExpressionTransformer,
@@ -318,6 +319,11 @@ export class Base {
318
319
  return this.owner.addObject(object);
319
320
  }
320
321
 
322
+ /**
323
+ * Walk the object graph in some directions and deliver seen nodes.
324
+ * @param {string[]} directions
325
+ * @return {Iterable<Base>}
326
+ */
321
327
  *walkDirections(directions = ["this", "extends", "owner"]) {
322
328
  yield* this._walkDirections(
323
329
  directions,
@@ -567,17 +573,33 @@ export class Base {
567
573
  ];
568
574
  }
569
575
 
570
- templateContent(entryProperties, directoryProperties) {
571
- return [...this.walkDirections(["this", "extends"])].map(e =>
572
- transform(
573
- new FileContentProvider(
574
- { dir: join(e.directory, "content"), pattern: "**/*" },
575
- entryProperties,
576
- directoryProperties
577
- ),
578
- this.templateTransformers
579
- )
580
- );
576
+ /**
577
+ *
578
+ * @param {*} entryProperties
579
+ * @param {*} directoryProperties
580
+ * @returns {AsyncIterable<ContentProvider>}
581
+ */
582
+ async *templateContent(entryProperties, directoryProperties) {
583
+ for (const node of this.walkDirections(["this", "extends"])) {
584
+ const dir = join(node.directory, "content");
585
+
586
+ try {
587
+ if ((await stat(dir)).isDirectory) {
588
+ yield transform(
589
+ new FileContentProvider(
590
+ { dir, pattern: "**/*" },
591
+ entryProperties,
592
+ directoryProperties
593
+ ),
594
+ this.templateTransformers
595
+ );
596
+ }
597
+ } catch (e) {
598
+ if (e.code !== "ENOENT") {
599
+ throw e;
600
+ }
601
+ }
602
+ }
581
603
  }
582
604
 
583
605
  get tags() {
package/src/host.mjs CHANGED
@@ -412,7 +412,7 @@ export class Host extends ServiceOwner {
412
412
  const pkgName = `${this.typeName}-${this.owner.name}-${this.name}`;
413
413
  let packageData = {
414
414
  sources: [
415
- ...this.templateContent(),
415
+ await Array.fromAsync(this.templateContent()),
416
416
  new FileContentProvider(
417
417
  { dir: this.directory, pattern: "*.pub" },
418
418
  { destination: "/etc/ssh/", mode: 0o644 }
@@ -491,4 +491,3 @@ export class Host extends ServiceOwner {
491
491
  }
492
492
  }
493
493
  }
494
-
package/src/module.mjs CHANGED
@@ -28,7 +28,7 @@ export * from "./services/influxdb.mjs";
28
28
  export * from "./services/mosquitto.mjs";
29
29
  export * from "./services/headscale.mjs";
30
30
  export * from "./services/tailscale.mjs";
31
- export * from "./services/alpm-repo.mjs";
31
+ export * from "./services/alpm.mjs";
32
32
  export * from "./services/systemd-journald.mjs";
33
33
  export * from "./services/systemd-journal-remote.mjs";
34
34
  export * from "./services/systemd-journal-upload.mjs";
package/src/service.mjs CHANGED
@@ -272,7 +272,7 @@ export class Service extends Base {
272
272
 
273
273
  async *preparePackages(dir) {
274
274
  const pd = this.packageData;
275
- pd.sources = this.templateContent();
275
+ pd.sources = await Array.fromAsync(this.templateContent());
276
276
  if (pd.sources.length) {
277
277
  yield pd;
278
278
  }
@@ -0,0 +1,64 @@
1
+ import {
2
+ addType,
3
+ default_attribute_writable,
4
+ name_attribute_writable,
5
+ string_attribute_writable,
6
+ string_set_attribute_writable
7
+ } from "pacc";
8
+ import { addServiceType, Base } from "pmcf";
9
+ import { ServiceTypeDefinition, Service } from "../service.mjs";
10
+
11
+ const ALPMRepositoryTypeDefinition = {
12
+ name: "alpm_repository",
13
+ extends: Base.typeDefinition,
14
+ attributes: {
15
+ name: name_attribute_writable,
16
+ base: string_attribute_writable,
17
+ architectures: string_set_attribute_writable
18
+ }
19
+ };
20
+
21
+ class ALPMRepository extends Base {
22
+ static {
23
+ addType(this);
24
+ }
25
+
26
+ static get typeDefinition() {
27
+ return ALPMRepositoryTypeDefinition;
28
+ }
29
+ }
30
+
31
+ const ALPMServiceTypeDefinition = {
32
+ name: "alpm",
33
+ extends: ServiceTypeDefinition,
34
+ specializationOf: ServiceTypeDefinition,
35
+ owners: ServiceTypeDefinition.owners,
36
+ attributes: {
37
+ repositories: {
38
+ ...default_attribute_writable,
39
+ type: "alpm_repository",
40
+ collection: true
41
+ }
42
+ },
43
+
44
+ service: {
45
+ extends: ["https"]
46
+ }
47
+ };
48
+
49
+ export class ALPMService extends Service {
50
+ static {
51
+ addType(this);
52
+ addServiceType(this.typeDefinition.service, this.typeDefinition.name);
53
+ }
54
+
55
+ static get typeDefinition() {
56
+ return ALPMServiceTypeDefinition;
57
+ }
58
+
59
+ _repositories = new Map();
60
+
61
+ set repositories(repository) {
62
+ this._repositories.set(repository.name, repository);
63
+ }
64
+ }
@@ -55,17 +55,19 @@ export class MosquittoService extends Service {
55
55
  const group = "mosquitto";
56
56
 
57
57
  const packageData = this.packageData;
58
- packageData.sources = this.templateContent(
59
- {
60
- mode: 0o644,
61
- owner,
62
- group
63
- },
64
- {
65
- mode: 0o755,
66
- owner,
67
- group
68
- }
58
+ packageData.sources = await Array.fromAsync(
59
+ this.templateContent(
60
+ {
61
+ mode: 0o644,
62
+ owner,
63
+ group
64
+ },
65
+ {
66
+ mode: 0o755,
67
+ owner,
68
+ group
69
+ }
70
+ )
69
71
  );
70
72
 
71
73
  yield packageData;
@@ -63,17 +63,19 @@ export class OpenLDAPService extends Service {
63
63
 
64
64
  const packageData = this.packageData;
65
65
 
66
- packageData.sources = this.templateContent(
67
- {
68
- mode: 0o644,
69
- owner,
70
- group
71
- },
72
- {
73
- mode: 0o755,
74
- owner,
75
- group
76
- }
66
+ packageData.sources = await Array.fromAsync(
67
+ this.templateContent(
68
+ {
69
+ mode: 0o644,
70
+ owner,
71
+ group
72
+ },
73
+ {
74
+ mode: 0o755,
75
+ owner,
76
+ group
77
+ }
78
+ )
77
79
  );
78
80
 
79
81
  yield packageData;
package/types/base.d.mts CHANGED
@@ -63,7 +63,12 @@ export class Base {
63
63
  named(name: any): void;
64
64
  typeNamed(typeName: any, name: any): any;
65
65
  addObject(object: any): any;
66
- walkDirections(directions?: string[]): Generator<any, void, any>;
66
+ /**
67
+ * Walk the object graph in some directions and deliver seen nodes.
68
+ * @param {string[]} directions
69
+ * @return {Iterable<Base>}
70
+ */
71
+ walkDirections(directions?: string[]): Iterable<Base>;
67
72
  _walkDirections(directions: any, withThis: any, seen: any): Generator<any, void, any>;
68
73
  forOwner(owner: any): any;
69
74
  isNamed(name: any): boolean;
@@ -128,7 +133,13 @@ export class Base {
128
133
  get outputs(): Set<typeof import("npm-pkgbuild").DEBIAN | typeof import("npm-pkgbuild").ARCH | typeof import("npm-pkgbuild").OCI | typeof import("npm-pkgbuild").DOCKER>;
129
134
  preparePackages(stagingDir: any): AsyncGenerator<never, void, unknown>;
130
135
  get templateTransformers(): any[];
131
- templateContent(entryProperties: any, directoryProperties: any): any[];
136
+ /**
137
+ *
138
+ * @param {*} entryProperties
139
+ * @param {*} directoryProperties
140
+ * @returns {AsyncIterable<ContentProvider>}
141
+ */
142
+ templateContent(entryProperties: any, directoryProperties: any): AsyncIterable<ContentProvider>;
132
143
  set tags(value: Set<any>);
133
144
  get tags(): Set<any>;
134
145
  get isTemplate(): any;
package/types/host.d.mts CHANGED
@@ -261,7 +261,7 @@ export class Host extends ServiceOwner {
261
261
  get subnets(): Set<any>;
262
262
  publicKey(type?: string): Promise<string>;
263
263
  preparePackages(dir: any): AsyncGenerator<{
264
- sources: any[];
264
+ sources: (FileContentProvider | ContentProvider[])[];
265
265
  outputs: Set<typeof import("npm-pkgbuild").DEBIAN | typeof import("npm-pkgbuild").ARCH | typeof import("npm-pkgbuild").OCI | typeof import("npm-pkgbuild").DOCKER>;
266
266
  properties: {
267
267
  name: string;
@@ -28,7 +28,7 @@ export * from "./services/influxdb.mjs";
28
28
  export * from "./services/mosquitto.mjs";
29
29
  export * from "./services/headscale.mjs";
30
30
  export * from "./services/tailscale.mjs";
31
- export * from "./services/alpm-repo.mjs";
31
+ export * from "./services/alpm.mjs";
32
32
  export * from "./services/systemd-journald.mjs";
33
33
  export * from "./services/systemd-journal-remote.mjs";
34
34
  export * from "./services/systemd-journal-upload.mjs";
@@ -1,4 +1,4 @@
1
- export class ALPMRepositoryService extends Service {
1
+ export class ALPMService extends Service {
2
2
  static get typeDefinition(): {
3
3
  name: string;
4
4
  extends: {
@@ -6,7 +6,7 @@ export class ALPMRepositoryService extends Service {
6
6
  owners: (string | {
7
7
  name: string;
8
8
  owners: string[];
9
- extends: typeof import("pmcf").Base;
9
+ extends: typeof Base;
10
10
  key: string;
11
11
  attributes: {
12
12
  networkInterfaces: {
@@ -203,7 +203,7 @@ export class ALPMRepositoryService extends Service {
203
203
  address: import("pacc").AttributeDefinition;
204
204
  };
205
205
  })[];
206
- extends: typeof import("pmcf").Base;
206
+ extends: typeof Base;
207
207
  specializations: {};
208
208
  factoryFor(owner: any, value: any): any;
209
209
  key: string;
@@ -291,7 +291,7 @@ export class ALPMRepositoryService extends Service {
291
291
  owners: (string | {
292
292
  name: string;
293
293
  owners: string[];
294
- extends: typeof import("pmcf").Base;
294
+ extends: typeof Base;
295
295
  key: string;
296
296
  attributes: {
297
297
  networkInterfaces: {
@@ -488,7 +488,7 @@ export class ALPMRepositoryService extends Service {
488
488
  address: import("pacc").AttributeDefinition;
489
489
  };
490
490
  })[];
491
- extends: typeof import("pmcf").Base;
491
+ extends: typeof Base;
492
492
  specializations: {};
493
493
  factoryFor(owner: any, value: any): any;
494
494
  key: string;
@@ -574,7 +574,7 @@ export class ALPMRepositoryService extends Service {
574
574
  owners: (string | {
575
575
  name: string;
576
576
  owners: string[];
577
- extends: typeof import("pmcf").Base;
577
+ extends: typeof Base;
578
578
  key: string;
579
579
  attributes: {
580
580
  networkInterfaces: {
@@ -773,12 +773,8 @@ export class ALPMRepositoryService extends Service {
773
773
  })[];
774
774
  attributes: {
775
775
  repositories: {
776
+ type: string;
776
777
  collection: boolean;
777
- configurable: boolean;
778
- attributes: {
779
- name: import("pacc").AttributeDefinition;
780
- };
781
- type: object;
782
778
  isKey: boolean;
783
779
  writable: boolean;
784
780
  mandatory: boolean;
@@ -803,6 +799,8 @@ export class ALPMRepositoryService extends Service {
803
799
  extends: string[];
804
800
  };
805
801
  };
806
- repositories: {};
802
+ _repositories: Map<any, any>;
803
+ set repositories(repository: any);
807
804
  }
808
805
  import { Service } from "../service.mjs";
806
+ import { Base } from "pmcf";
@@ -1,38 +0,0 @@
1
- import { addType, object_attribute, string_attribute_writable } from "pacc";
2
- import { addServiceType } from "pmcf";
3
- import { ServiceTypeDefinition, Service } from "../service.mjs";
4
-
5
- const ALPMRepositoryServiceTypeDefinition = {
6
- name: "alpm-repo",
7
- extends: ServiceTypeDefinition,
8
- specializationOf: ServiceTypeDefinition,
9
- owners: ServiceTypeDefinition.owners,
10
- attributes: {
11
- repositories: {
12
- ...object_attribute,
13
- collection: true,
14
- configurable: true,
15
-
16
- attributes: {
17
- name: string_attribute_writable
18
- }
19
- }
20
- },
21
-
22
- service: {
23
- extends: ["https"]
24
- }
25
- };
26
-
27
- export class ALPMRepositoryService extends Service {
28
- static {
29
- addType(this);
30
- addServiceType(this.typeDefinition.service, this.typeDefinition.name);
31
- }
32
-
33
- static get typeDefinition() {
34
- return ALPMRepositoryServiceTypeDefinition;
35
- }
36
-
37
- repositories = {};
38
- }