Skip to content

Commit c7549e3

Browse files
committed
feat: Updated requiredParameters to identifyingParameters
1 parent c933cd1 commit c7549e3

File tree

8 files changed

+71
-14
lines changed

8 files changed

+71
-14
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codify-plugin-lib",
3-
"version": "1.0.138",
3+
"version": "1.0.141",
44
"description": "Library plugin library",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",
@@ -16,7 +16,7 @@
1616
"dependencies": {
1717
"ajv": "^8.12.0",
1818
"ajv-formats": "^2.1.1",
19-
"codify-schemas": "1.0.64",
19+
"codify-schemas": "1.0.70",
2020
"@npmcli/promise-spawn": "^7.0.1",
2121
"@homebridge/node-pty-prebuilt-multiarch": "^0.12.0-beta.5",
2222
"uuid": "^10.0.0",

src/plan/plan.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ describe('Plan entity tests', () => {
241241
propB: { type: 'string', canModify: true },
242242
},
243243
allowMultiple: {
244-
requiredParameters: ['propA']
244+
identifyingParameters: ['propA']
245245
}
246246
}
247247
}

src/plan/plan.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ export class Plan<T extends StringIndexedObject> {
263263
const matcher = typeof settings.allowMultiple === 'boolean' || !settings.allowMultiple.matcher
264264
? ((desired: Partial<T>, currentArr: Array<Partial<T>>) => {
265265
const requiredParameters = typeof settings.allowMultiple === 'object'
266-
? settings.allowMultiple?.requiredParameters ?? (settings.schema?.required as string[]) ?? []
266+
? settings.allowMultiple?.identifyingParameters ?? (settings.schema?.required as string[]) ?? []
267267
: (settings.schema?.required as string[]) ?? []
268268

269269
const matched = currentArr.filter((c) => requiredParameters.every((key) => {

src/plugin/plugin.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,4 +324,46 @@ describe('Plugin tests', () => {
324324

325325
console.log(result);
326326
})
327+
328+
it('Returns allowMultiple for getResourceInfo', async () => {
329+
const resource = spy(new class extends TestResource {
330+
getSettings(): ResourceSettings<TestConfig> {
331+
return {
332+
...super.getSettings(),
333+
allowMultiple: {
334+
identifyingParameters: ['path', 'paths']
335+
}
336+
}
337+
}
338+
})
339+
340+
const testPlugin = Plugin.create('testPlugin', [resource as any]);
341+
342+
const resourceInfo = await testPlugin.getResourceInfo({
343+
type: 'testResource',
344+
})
345+
346+
expect(resourceInfo.allowMultiple?.requiredParameters).toMatchObject([
347+
'path', 'paths'
348+
])
349+
})
350+
351+
it('Returns an empty array by default for allowMultiple for getResourceInfo', async () => {
352+
const resource = spy(new class extends TestResource {
353+
getSettings(): ResourceSettings<TestConfig> {
354+
return {
355+
...super.getSettings(),
356+
allowMultiple: true
357+
}
358+
}
359+
})
360+
361+
const testPlugin = Plugin.create('testPlugin', [resource as any]);
362+
363+
const resourceInfo = await testPlugin.getResourceInfo({
364+
type: 'testResource',
365+
})
366+
367+
expect(resourceInfo.allowMultiple?.requiredParameters).toMatchObject([])
368+
})
327369
});

src/plugin/plugin.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ export class Plugin {
7474

7575
const allowMultiple = resource.settings.allowMultiple !== undefined
7676
? (typeof resource.settings.allowMultiple === 'boolean'
77-
? { requiredParameters: schema?.required ?? [] }
78-
: { requiredParameters: resource.settings.allowMultiple.requiredParameters ?? schema?.required ?? [] }
77+
? { identifyingParameters: schema?.required ?? [] }
78+
: { identifyingParameters: resource.settings.allowMultiple.identifyingParameters ?? schema?.required ?? [] }
7979
) : undefined
8080

8181
return {
@@ -84,6 +84,10 @@ export class Plugin {
8484
dependencies: resource.dependencies,
8585
schema: schema as Record<string, unknown> | undefined,
8686
importAndDestroy: {
87+
preventImport: resource.settings.importAndDestroy?.preventImport,
88+
requiredParameters: requiredPropertyNames,
89+
},
90+
import: {
8791
requiredParameters: requiredPropertyNames,
8892
},
8993
allowMultiple

src/resource/resource-controller.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ export class ResourceController<T extends StringIndexedObject> {
214214
core: ResourceConfig,
215215
parameters: Partial<T>
216216
): Promise<Array<ResourceJson> | null> {
217+
if (this.settings.importAndDestroy?.preventImport) {
218+
throw new Error(`Type: ${this.typeId} cannot be imported`);
219+
}
220+
217221
this.addDefaultValues(parameters);
218222
await this.applyTransformParameters(parameters);
219223

src/resource/resource-settings.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export interface ResourceSettings<T extends StringIndexedObject> {
4242
* If paramA is required, then if resource1.paramA === resource2.paramA then are the same resource.
4343
* If resource1.paramA !== resource1.paramA, then they are different.
4444
*/
45-
requiredParameters?: string[]
45+
identifyingParameters?: string[]
4646

4747
/**
4848
* If multiple copies are allowed then a matcher must be defined to match the desired
@@ -103,6 +103,13 @@ export interface ResourceSettings<T extends StringIndexedObject> {
103103
* ```
104104
*/
105105
importAndDestroy?: {
106+
/**
107+
* Can this resources be imported? If set to false then the codifyCLI will skip over/not consider this
108+
* resource valid for imports. Defaults to true.
109+
*
110+
* Resources that can't be imported in the core library for example are: action resources
111+
*/
112+
preventImport?: boolean;
106113

107114
/**
108115
* Customize the required parameters needed to import this resource. By default, the `requiredParameters` are taken
@@ -133,7 +140,7 @@ export interface ResourceSettings<T extends StringIndexedObject> {
133140
*
134141
* See {@link importAndDestroy} for more information on how importing works.
135142
*/
136-
defaultRefreshValues?: Partial<T>
143+
defaultRefreshValues?: Partial<T>;
137144
}
138145
}
139146

0 commit comments

Comments
 (0)