From 67e13effa1e2507e1f8eb12679b8a9721c83594b Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 3 Mar 2021 16:48:07 +0100 Subject: [PATCH 1/3] catalog-model: add stringifyEntityRef and deprecate serializeEntityRef MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ben Lambert Co-authored-by: Patrik Oldsberg Co-authored-by: Fredrik Adelöw Signed-off-by: Johan Haals --- packages/catalog-model/src/entity/index.ts | 1 + packages/catalog-model/src/entity/ref.ts | 28 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/catalog-model/src/entity/index.ts b/packages/catalog-model/src/entity/index.ts index e267c607e1..572df63557 100644 --- a/packages/catalog-model/src/entity/index.ts +++ b/packages/catalog-model/src/entity/index.ts @@ -34,6 +34,7 @@ export { parseEntityName, parseEntityRef, serializeEntityRef, + stringifyEntityRef, } from './ref'; export { entityHasChanges, diff --git a/packages/catalog-model/src/entity/ref.ts b/packages/catalog-model/src/entity/ref.ts index bf34962d01..7db9f2781c 100644 --- a/packages/catalog-model/src/entity/ref.ts +++ b/packages/catalog-model/src/entity/ref.ts @@ -172,6 +172,7 @@ export function parseEntityRef( * special/reserved characters, it outputs the string form, otherwise it * outputs the compound form. * + * @deprecated Use `stringifyEntityRef` instead * @param ref The reference to serialize * @returns The same reference on either string or compound form */ @@ -212,6 +213,33 @@ export function serializeEntityRef( return `${kind ? `${kind}:` : ''}${namespace ? `${namespace}/` : ''}${name}`; } +/** + * Takes an entity or entity name/reference, and returns the string form of an + * entity ref. + * + * @param ref The reference to serialize + * @returns The same reference on either string or compound form + */ +export function stringifyEntityRef( + ref: Entity | { kind?: string; namespace?: string; name: string }, +): string { + let kind; + let namespace; + let name; + + if ('metadata' in ref) { + kind = ref.kind; + namespace = ref.metadata.namespace; + name = ref.metadata.name; + } else { + kind = ref.kind; + namespace = ref.namespace; + name = ref.name; + } + + return `${kind ? `${kind}:` : ''}${namespace ? `${namespace}/` : ''}${name}`; +} + /** * Compares an entity to either a string reference or a compound reference. * From 97b60de9880a7bd870acf0d32bf20b00941bde52 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 31 Mar 2021 11:43:45 +0200 Subject: [PATCH 2/3] added changeset for addition of stringifyEntityRef Signed-off-by: Patrik Oldsberg --- .changeset/little-starfishes-whisper.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/little-starfishes-whisper.md diff --git a/.changeset/little-starfishes-whisper.md b/.changeset/little-starfishes-whisper.md new file mode 100644 index 0000000000..60a4b39c73 --- /dev/null +++ b/.changeset/little-starfishes-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': minor +--- + +Added `stringifyEntityRef`, which always creates a string representation of an entity reference. Also deprecated `serializeEntityRef`, as `stringifyEntityRef` should be used instead. From 25a62e0a9d46da82a36cae4b25e9dd43f193563d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 31 Mar 2021 14:49:36 +0200 Subject: [PATCH 3/3] catalog-model: ensure canonical representation from stringifyEntityRef Signed-off-by: Patrik Oldsberg --- packages/catalog-model/src/entity/ref.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/catalog-model/src/entity/ref.ts b/packages/catalog-model/src/entity/ref.ts index 7db9f2781c..09660811f0 100644 --- a/packages/catalog-model/src/entity/ref.ts +++ b/packages/catalog-model/src/entity/ref.ts @@ -217,11 +217,15 @@ export function serializeEntityRef( * Takes an entity or entity name/reference, and returns the string form of an * entity ref. * + * This function creates a canonical and unique reference to the entity, converting + * all parts of the name to lowercase and inserts the default namespace if needed. + * It is typically not the best way to represent the entity reference to the user. + * * @param ref The reference to serialize * @returns The same reference on either string or compound form */ export function stringifyEntityRef( - ref: Entity | { kind?: string; namespace?: string; name: string }, + ref: Entity | { kind: string; namespace?: string; name: string }, ): string { let kind; let namespace; @@ -229,15 +233,15 @@ export function stringifyEntityRef( if ('metadata' in ref) { kind = ref.kind; - namespace = ref.metadata.namespace; + namespace = ref.metadata.namespace ?? ENTITY_DEFAULT_NAMESPACE; name = ref.metadata.name; } else { kind = ref.kind; - namespace = ref.namespace; + namespace = ref.namespace ?? ENTITY_DEFAULT_NAMESPACE; name = ref.name; } - return `${kind ? `${kind}:` : ''}${namespace ? `${namespace}/` : ''}${name}`; + return `${kind.toLowerCase()}:${namespace.toLowerCase()}/${name.toLowerCase()}`; } /**