npm package diff

Package: @forge/util

Versions: 1.4.10-next.0 - 1.4.10-next.0-experimental-effab31

File: package/packages/ari/jira-align/index.js

Index: package/packages/ari/jira-align/index.js
===================================================================
--- package/packages/ari/jira-align/index.js
+++ package/packages/ari/jira-align/index.js
@@ -17,18 +17,20 @@
 // src/jira-align/index.ts
 var jira_align_exports = {};
 __export(jira_align_exports, {
   JiraAlignEpicAri: () => JiraAlignEpicAri,
-  JiraAlignInstanceAri: () => JiraAlignInstanceAri
+  JiraAlignInstanceAri: () => JiraAlignInstanceAri,
+  JiraAlignProjectAri: () => JiraAlignProjectAri,
+  JiraAlignWorkspaceAri: () => JiraAlignWorkspaceAri
 });
 module.exports = __toCommonJS(jira_align_exports);
 
 // src/errors.ts
 var ValidationError = class extends Error {
 };
 
 // src/core/rules/cloud-id.ts
-function validateCloudId(cloudId, format = new RegExp("^[a-zA-Z0-9\\-]*$")) {
+function validateCloudId(cloudId, format = new RegExp("^[a-zA-Z0-9_\\-.]{0,255}$")) {
   if (!cloudId.match(format))
     throw new ValidationError(`Invalid cloud ID, expected ID of format ${format}.`);
 }
 
@@ -48,9 +50,9 @@
     throw new ValidationError(`ARI must have a qualifier of 'ari'. Received: ${qualifier}`);
 }
 
 // src/core/rules/resource-id.ts
-function validateResourceId(id, format = new RegExp("[!a-zA-Z0-9\\-_.~@:{}=]+(/[!a-zA-Z0-9\\-_.~@:{}=]+)*" /* ANY_RESOURCE_ID */), key = "resourceId") {
+function validateResourceId(id, format = new RegExp("[!a-zA-Z0-9\\-_.~@:;{}=]+(/[!a-zA-Z0-9\\-_.~@:;{}=]+)*" /* ANY_RESOURCE_ID */), key = "resourceId") {
   let formatWithCarets = new RegExp(`^${format.source}$`);
   if (!id.match(formatWithCarets))
     throw new ValidationError(`Invalid ${key} - ${id}, expected ID of format ${formatWithCarets}.`);
 }
@@ -283,8 +285,9 @@
 var jiraAlignEpicAriStaticOpts = {
   qualifier: "ari",
   platformQualifier: "cloud",
   cloudId: new RegExp("^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$"),
+  // eslint-disable-line no-useless-escape
   resourceOwner: JiraAlignEpicAriResourceOwner,
   resourceType: JiraAlignEpicAriResourceType,
   resourceIdSlug: "{epicId}",
   resourceIdSegmentFormats: {
@@ -338,8 +341,9 @@
 var jiraAlignInstanceAriStaticOpts = {
   qualifier: "ari",
   platformQualifier: "cloud",
   cloudId: new RegExp("^$"),
+  // eslint-disable-line no-useless-escape
   resourceOwner: JiraAlignInstanceAriResourceOwner,
   resourceType: JiraAlignInstanceAriResourceType,
   resourceIdSlug: "{instanceId}",
   resourceIdSegmentFormats: {
@@ -380,9 +384,130 @@
       instanceId: this.instanceId
     };
   }
 };
+
+// src/jira-align/project/types.ts
+var JiraAlignProjectAriResourceOwner = "jira-align", JiraAlignProjectAriResourceType = "project";
+
+// src/jira-align/project/manifest.ts
+var jiraAlignProjectAriStaticOpts = {
+  qualifier: "ari",
+  platformQualifier: "cloud",
+  cloudId: new RegExp("^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$"),
+  // eslint-disable-line no-useless-escape
+  resourceOwner: JiraAlignProjectAriResourceOwner,
+  resourceType: JiraAlignProjectAriResourceType,
+  resourceIdSlug: "{projectType}/{projectId}",
+  resourceIdSegmentFormats: {
+    projectType: /(?:capability|epic|theme)/,
+    // eslint-disable-line no-useless-escape
+    projectId: /[0-9]+/
+    // eslint-disable-line no-useless-escape
+  }
+};
+
+// src/jira-align/project/index.ts
+var JiraAlignProjectAri = class _JiraAlignProjectAri extends RegisteredAri {
+  constructor(opts) {
+    super(opts);
+    this._instanceId = opts.cloudId || "", this._projectType = opts.resourceIdSegmentValues.projectType, this._projectId = opts.resourceIdSegmentValues.projectId;
+  }
+  get instanceId() {
+    return this._instanceId;
+  }
+  get projectType() {
+    return this._projectType;
+  }
+  get projectId() {
+    return this._projectId;
+  }
+  static create(opts) {
+    let derivedOpts = {
+      qualifier: jiraAlignProjectAriStaticOpts.qualifier,
+      platformQualifier: jiraAlignProjectAriStaticOpts.platformQualifier,
+      cloudId: opts.instanceId,
+      resourceOwner: jiraAlignProjectAriStaticOpts.resourceOwner,
+      resourceType: jiraAlignProjectAriStaticOpts.resourceType,
+      resourceId: `${opts.projectType}/${opts.projectId}`,
+      resourceIdSegmentValues: {
+        projectType: opts.projectType,
+        projectId: opts.projectId
+      }
+    }, ariOpts = AriParser.fromOpts(derivedOpts, jiraAlignProjectAriStaticOpts);
+    return new _JiraAlignProjectAri(ariOpts);
+  }
+  static parse(maybeAri) {
+    let opts = AriParser.fromString(maybeAri, jiraAlignProjectAriStaticOpts);
+    return new _JiraAlignProjectAri(opts);
+  }
+  getVariables() {
+    return {
+      instanceId: this.instanceId,
+      projectType: this.projectType,
+      projectId: this.projectId
+    };
+  }
+};
+
+// src/jira-align/workspace/types.ts
+var JiraAlignWorkspaceAriResourceOwner = "jira-align", JiraAlignWorkspaceAriResourceType = "workspace";
+
+// src/jira-align/workspace/manifest.ts
+var jiraAlignWorkspaceAriStaticOpts = {
+  qualifier: "ari",
+  platformQualifier: "cloud",
+  cloudId: new RegExp("^[a-zA-Z0-9_\\-.]{1,255}$"),
+  // eslint-disable-line no-useless-escape
+  resourceOwner: JiraAlignWorkspaceAriResourceOwner,
+  resourceType: JiraAlignWorkspaceAriResourceType,
+  resourceIdSlug: "{activationId}",
+  resourceIdSegmentFormats: {
+    activationId: /[a-zA-Z0-9\-]+/
+    // eslint-disable-line no-useless-escape
+  }
+};
+
+// src/jira-align/workspace/index.ts
+var JiraAlignWorkspaceAri = class _JiraAlignWorkspaceAri extends RegisteredAri {
+  constructor(opts) {
+    super(opts);
+    this._siteId = opts.cloudId || "", this._activationId = opts.resourceIdSegmentValues.activationId;
+  }
+  get siteId() {
+    return this._siteId;
+  }
+  get activationId() {
+    return this._activationId;
+  }
+  static create(opts) {
+    let derivedOpts = {
+      qualifier: jiraAlignWorkspaceAriStaticOpts.qualifier,
+      platformQualifier: jiraAlignWorkspaceAriStaticOpts.platformQualifier,
+      cloudId: opts.siteId,
+      resourceOwner: jiraAlignWorkspaceAriStaticOpts.resourceOwner,
+      resourceType: jiraAlignWorkspaceAriStaticOpts.resourceType,
+      resourceId: `${opts.activationId}`,
+      resourceIdSegmentValues: {
+        activationId: opts.activationId
+      }
+    }, ariOpts = AriParser.fromOpts(derivedOpts, jiraAlignWorkspaceAriStaticOpts);
+    return new _JiraAlignWorkspaceAri(ariOpts);
+  }
+  static parse(maybeAri) {
+    let opts = AriParser.fromString(maybeAri, jiraAlignWorkspaceAriStaticOpts);
+    return new _JiraAlignWorkspaceAri(opts);
+  }
+  getVariables() {
+    return {
+      siteId: this.siteId,
+      activationId: this.activationId
+    };
+  }
+};
 // Annotate the CommonJS export names for ESM import in node:
 0 && (module.exports = {
   JiraAlignEpicAri,
-  JiraAlignInstanceAri
+  JiraAlignInstanceAri,
+  JiraAlignProjectAri,
+  JiraAlignWorkspaceAri
 });