@strapi/content-releases 5.50.2 → 5.51.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.
@@ -8,6 +8,7 @@ const createSchedulingService = ({ strapi })=>{
8
8
  const scheduledJobs = new Map();
9
9
  return {
10
10
  async set (releaseId, scheduleDate) {
11
+ const id = String(releaseId); // callers pass both numeric (db row) and string (ctx.params) ids
11
12
  const release = await strapi.db.query(constants.RELEASE_MODEL_UID).findOne({
12
13
  where: {
13
14
  id: releaseId,
@@ -17,7 +18,7 @@ const createSchedulingService = ({ strapi })=>{
17
18
  if (!release) {
18
19
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
19
20
  }
20
- const taskName = `publishRelease_${releaseId}`;
21
+ const taskName = `publishRelease_${id}`;
21
22
  strapi.cron.add({
22
23
  [taskName]: {
23
24
  async task () {
@@ -28,16 +29,17 @@ const createSchedulingService = ({ strapi })=>{
28
29
  options: scheduleDate
29
30
  }
30
31
  });
31
- if (scheduledJobs.has(releaseId)) {
32
- this.cancel(releaseId);
32
+ if (scheduledJobs.has(id)) {
33
+ this.cancel(id);
33
34
  }
34
- scheduledJobs.set(releaseId, taskName);
35
+ scheduledJobs.set(id, taskName);
35
36
  return scheduledJobs;
36
37
  },
37
38
  cancel (releaseId) {
38
- if (scheduledJobs.has(releaseId)) {
39
- strapi.cron.remove(scheduledJobs.get(releaseId));
40
- scheduledJobs.delete(releaseId);
39
+ const id = String(releaseId); // normalise to match key from set()
40
+ if (scheduledJobs.has(id)) {
41
+ strapi.cron.remove(scheduledJobs.get(id));
42
+ scheduledJobs.delete(id);
41
43
  }
42
44
  return scheduledJobs;
43
45
  },
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n await getService('release', { strapi }).publish(releaseId);\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;;AAOA,MAAMA,uBAAAA,GAA0B,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAAA,CAAOO,EAAE,CAC5BC,KAAK,CAACC,2BAAAA,CAAAA,CACNC,OAAO,CAAC;gBAAEC,KAAAA,EAAO;oBAAEC,EAAAA,EAAIR,SAAAA;oBAAWS,UAAAA,EAAY;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAAA,EAAS;AACZ,gBAAA,MAAM,IAAIQ,YAAAA,CAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,SAAAA,CAAAA,CAAW,CAAA;AACvE,YAAA;AAEA,YAAA,MAAMY,QAAAA,GAAW,CAAC,eAAe,EAAEZ,SAAAA,CAAAA,CAAW;YAE9CJ,MAAAA,CAAOiB,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;AACJ,wBAAA,MAAMC,iBAAW,SAAA,EAAW;AAAEpB,4BAAAA;AAAO,yBAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;AAClD,oBAAA,CAAA;oBACAkB,OAAAA,EAASjB;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcsB,GAAG,CAACnB,SAAAA,CAAAA,EAAY;gBAChC,IAAI,CAACoB,MAAM,CAACpB,SAAAA,CAAAA;AACd,YAAA;YAEAH,aAAAA,CAAcE,GAAG,CAACC,SAAAA,EAAWY,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,QAAA,CAAA;AAEAuB,QAAAA,MAAAA,CAAAA,CAAOpB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcsB,GAAG,CAACnB,SAAAA,CAAAA,EAAY;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACQ,MAAM,CAACxB,aAAAA,CAAcyB,GAAG,CAACtB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc0B,MAAM,CAACvB,SAAAA,CAAAA;AACvB,YAAA;YAEA,OAAOH,aAAAA;AACT,QAAA,CAAA;AAEA2B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO3B,aAAAA;AACT,QAAA,CAAA;AAEA;;;;AAIC,QACD,MAAM4B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM9B,MAAAA,CAAOO,EAAE,CAACC,KAAK,CAACC,2BAAAA,CAAAA,CAAmBsB,QAAQ,CAAC;gBACjEpB,KAAAA,EAAO;oBACLqB,WAAAA,EAAa;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACArB,UAAAA,EAAY;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWwB,QAAAA,CAAU;AAC9B,gBAAA,IAAI,CAAC3B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ0B,WAAW,CAAA;AAC1C,YAAA;YAEA,OAAO/B,aAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const id = String(releaseId); // callers pass both numeric (db row) and string (ctx.params) ids\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${id}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n await getService('release', { strapi }).publish(releaseId);\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(id)) {\n this.cancel(id);\n }\n\n scheduledJobs.set(id, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n const id = String(releaseId); // normalise to match key from set()\n\n if (scheduledJobs.has(id)) {\n strapi.cron.remove(scheduledJobs.get(id)!);\n scheduledJobs.delete(id);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","id","String","release","db","query","RELEASE_MODEL_UID","findOne","where","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;;AAOA,MAAMA,uBAAAA,GAA0B,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,EAAAA,GAAKC,MAAAA,CAAOH,SAAAA,CAAAA,CAAAA;YAElB,MAAMI,OAAAA,GAAU,MAAMR,MAAAA,CAAOS,EAAE,CAC5BC,KAAK,CAACC,2BAAAA,CAAAA,CACNC,OAAO,CAAC;gBAAEC,KAAAA,EAAO;oBAAEP,EAAAA,EAAIF,SAAAA;oBAAWU,UAAAA,EAAY;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACN,OAAAA,EAAS;AACZ,gBAAA,MAAM,IAAIO,YAAAA,CAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEZ,SAAAA,CAAAA,CAAW,CAAA;AACvE,YAAA;AAEA,YAAA,MAAMa,QAAAA,GAAW,CAAC,eAAe,EAAEX,EAAAA,CAAAA,CAAI;YAEvCN,MAAAA,CAAOkB,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;AACJ,wBAAA,MAAMC,iBAAW,SAAA,EAAW;AAAErB,4BAAAA;AAAO,yBAAA,CAAA,CAAGsB,OAAO,CAAClB,SAAAA,CAAAA;AAClD,oBAAA,CAAA;oBACAmB,OAAAA,EAASlB;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAAClB,EAAAA,CAAAA,EAAK;gBACzB,IAAI,CAACmB,MAAM,CAACnB,EAAAA,CAAAA;AACd,YAAA;YAEAL,aAAAA,CAAcE,GAAG,CAACG,EAAAA,EAAIW,QAAAA,CAAAA;YAEtB,OAAOhB,aAAAA;AACT,QAAA,CAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,MAAME,EAAAA,GAAKC,MAAAA,CAAOH,SAAAA,CAAAA,CAAAA;YAElB,IAAIH,aAAAA,CAAcuB,GAAG,CAAClB,EAAAA,CAAAA,EAAK;AACzBN,gBAAAA,MAAAA,CAAOkB,IAAI,CAACQ,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACrB,EAAAA,CAAAA,CAAAA;AACrCL,gBAAAA,aAAAA,CAAc2B,MAAM,CAACtB,EAAAA,CAAAA;AACvB,YAAA;YAEA,OAAOL,aAAAA;AACT,QAAA,CAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,QAAA,CAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAAA,CAAOS,EAAE,CAACC,KAAK,CAACC,2BAAAA,CAAAA,CAAmBqB,QAAQ,CAAC;gBACjEnB,KAAAA,EAAO;oBACLoB,WAAAA,EAAa;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACArB,UAAAA,EAAY;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMN,WAAWuB,QAAAA,CAAU;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACK,QAAQF,EAAE,EAAEE,QAAQyB,WAAW,CAAA;AAC1C,YAAA;YAEA,OAAOhC,aAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
@@ -6,6 +6,7 @@ const createSchedulingService = ({ strapi })=>{
6
6
  const scheduledJobs = new Map();
7
7
  return {
8
8
  async set (releaseId, scheduleDate) {
9
+ const id = String(releaseId); // callers pass both numeric (db row) and string (ctx.params) ids
9
10
  const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({
10
11
  where: {
11
12
  id: releaseId,
@@ -15,7 +16,7 @@ const createSchedulingService = ({ strapi })=>{
15
16
  if (!release) {
16
17
  throw new errors.NotFoundError(`No release found for id ${releaseId}`);
17
18
  }
18
- const taskName = `publishRelease_${releaseId}`;
19
+ const taskName = `publishRelease_${id}`;
19
20
  strapi.cron.add({
20
21
  [taskName]: {
21
22
  async task () {
@@ -26,16 +27,17 @@ const createSchedulingService = ({ strapi })=>{
26
27
  options: scheduleDate
27
28
  }
28
29
  });
29
- if (scheduledJobs.has(releaseId)) {
30
- this.cancel(releaseId);
30
+ if (scheduledJobs.has(id)) {
31
+ this.cancel(id);
31
32
  }
32
- scheduledJobs.set(releaseId, taskName);
33
+ scheduledJobs.set(id, taskName);
33
34
  return scheduledJobs;
34
35
  },
35
36
  cancel (releaseId) {
36
- if (scheduledJobs.has(releaseId)) {
37
- strapi.cron.remove(scheduledJobs.get(releaseId));
38
- scheduledJobs.delete(releaseId);
37
+ const id = String(releaseId); // normalise to match key from set()
38
+ if (scheduledJobs.has(id)) {
39
+ strapi.cron.remove(scheduledJobs.get(id));
40
+ scheduledJobs.delete(id);
39
41
  }
40
42
  return scheduledJobs;
41
43
  },
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.mjs","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n await getService('release', { strapi }).publish(releaseId);\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;AAOA,MAAMA,uBAAAA,GAA0B,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAAA,CAAOO,EAAE,CAC5BC,KAAK,CAACC,iBAAAA,CAAAA,CACNC,OAAO,CAAC;gBAAEC,KAAAA,EAAO;oBAAEC,EAAAA,EAAIR,SAAAA;oBAAWS,UAAAA,EAAY;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAAA,EAAS;AACZ,gBAAA,MAAM,IAAIQ,MAAAA,CAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,SAAAA,CAAAA,CAAW,CAAA;AACvE,YAAA;AAEA,YAAA,MAAMY,QAAAA,GAAW,CAAC,eAAe,EAAEZ,SAAAA,CAAAA,CAAW;YAE9CJ,MAAAA,CAAOiB,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;AACJ,wBAAA,MAAMC,WAAW,SAAA,EAAW;AAAEpB,4BAAAA;AAAO,yBAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;AAClD,oBAAA,CAAA;oBACAkB,OAAAA,EAASjB;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcsB,GAAG,CAACnB,SAAAA,CAAAA,EAAY;gBAChC,IAAI,CAACoB,MAAM,CAACpB,SAAAA,CAAAA;AACd,YAAA;YAEAH,aAAAA,CAAcE,GAAG,CAACC,SAAAA,EAAWY,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,QAAA,CAAA;AAEAuB,QAAAA,MAAAA,CAAAA,CAAOpB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcsB,GAAG,CAACnB,SAAAA,CAAAA,EAAY;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACQ,MAAM,CAACxB,aAAAA,CAAcyB,GAAG,CAACtB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc0B,MAAM,CAACvB,SAAAA,CAAAA;AACvB,YAAA;YAEA,OAAOH,aAAAA;AACT,QAAA,CAAA;AAEA2B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO3B,aAAAA;AACT,QAAA,CAAA;AAEA;;;;AAIC,QACD,MAAM4B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM9B,MAAAA,CAAOO,EAAE,CAACC,KAAK,CAACC,iBAAAA,CAAAA,CAAmBsB,QAAQ,CAAC;gBACjEpB,KAAAA,EAAO;oBACLqB,WAAAA,EAAa;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACArB,UAAAA,EAAY;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWwB,QAAAA,CAAU;AAC9B,gBAAA,IAAI,CAAC3B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ0B,WAAW,CAAA;AAC1C,YAAA;YAEA,OAAO/B,aAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"scheduling.mjs","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const id = String(releaseId); // callers pass both numeric (db row) and string (ctx.params) ids\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${id}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n await getService('release', { strapi }).publish(releaseId);\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(id)) {\n this.cancel(id);\n }\n\n scheduledJobs.set(id, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n const id = String(releaseId); // normalise to match key from set()\n\n if (scheduledJobs.has(id)) {\n strapi.cron.remove(scheduledJobs.get(id)!);\n scheduledJobs.delete(id);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","id","String","release","db","query","RELEASE_MODEL_UID","findOne","where","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;AAOA,MAAMA,uBAAAA,GAA0B,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,EAAAA,GAAKC,MAAAA,CAAOH,SAAAA,CAAAA,CAAAA;YAElB,MAAMI,OAAAA,GAAU,MAAMR,MAAAA,CAAOS,EAAE,CAC5BC,KAAK,CAACC,iBAAAA,CAAAA,CACNC,OAAO,CAAC;gBAAEC,KAAAA,EAAO;oBAAEP,EAAAA,EAAIF,SAAAA;oBAAWU,UAAAA,EAAY;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACN,OAAAA,EAAS;AACZ,gBAAA,MAAM,IAAIO,MAAAA,CAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEZ,SAAAA,CAAAA,CAAW,CAAA;AACvE,YAAA;AAEA,YAAA,MAAMa,QAAAA,GAAW,CAAC,eAAe,EAAEX,EAAAA,CAAAA,CAAI;YAEvCN,MAAAA,CAAOkB,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;AACJ,wBAAA,MAAMC,WAAW,SAAA,EAAW;AAAErB,4BAAAA;AAAO,yBAAA,CAAA,CAAGsB,OAAO,CAAClB,SAAAA,CAAAA;AAClD,oBAAA,CAAA;oBACAmB,OAAAA,EAASlB;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAAClB,EAAAA,CAAAA,EAAK;gBACzB,IAAI,CAACmB,MAAM,CAACnB,EAAAA,CAAAA;AACd,YAAA;YAEAL,aAAAA,CAAcE,GAAG,CAACG,EAAAA,EAAIW,QAAAA,CAAAA;YAEtB,OAAOhB,aAAAA;AACT,QAAA,CAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,MAAME,EAAAA,GAAKC,MAAAA,CAAOH,SAAAA,CAAAA,CAAAA;YAElB,IAAIH,aAAAA,CAAcuB,GAAG,CAAClB,EAAAA,CAAAA,EAAK;AACzBN,gBAAAA,MAAAA,CAAOkB,IAAI,CAACQ,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACrB,EAAAA,CAAAA,CAAAA;AACrCL,gBAAAA,aAAAA,CAAc2B,MAAM,CAACtB,EAAAA,CAAAA;AACvB,YAAA;YAEA,OAAOL,aAAAA;AACT,QAAA,CAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,QAAA,CAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAAA,CAAOS,EAAE,CAACC,KAAK,CAACC,iBAAAA,CAAAA,CAAmBqB,QAAQ,CAAC;gBACjEnB,KAAAA,EAAO;oBACLoB,WAAAA,EAAa;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACArB,UAAAA,EAAY;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMN,WAAWuB,QAAAA,CAAU;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACK,QAAQF,EAAE,EAAEE,QAAQyB,WAAW,CAAA;AAC1C,YAAA;YAEA,OAAOhC,aAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
@@ -210,7 +210,9 @@ declare const _default: {
210
210
  };
211
211
  };
212
212
  routes: {
213
- homepage: import("@strapi/types/dist/core/router.js").Router;
213
+ homepage: import("@strapi/types/dist/core/router.js").Router | ((params: {
214
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
215
+ }) => import("@strapi/types/dist/core/router.js").Router);
214
216
  settings: {
215
217
  type: string;
216
218
  routes: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA+BylF,sEAA6B;;;;;;;;;;;;;;;8BAA2gG,yEAAgC;+BAAuxC,0EAAiC;;;;;;8BAAlgL,sFAAsC;0CAA4I,CAAC;;gCAAmiE,oFAAoC;;;;;;;;;;;;6BAAkvI,sFAAsC,yBAA8B,sFAAsC;6BAA63C,sFAAsC,yBAA8B,sFAAsC;;;;;;2CAPzgT,sFACwB;8CAMysC,oFAAoC,kCAAqC,oFAAoC;;sDAAi2C,uEAA8B,eAAkB,yEAAgC;2DAAse,uEAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAD9wG,wBAA2B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA+BylF,sEAA6B;;;;;;;;;;;;;;;8BAA2gG,yEAAgC;+BAAuxC,0EAAiC;;;;;;8BAAlgL,sFAAsC;0CAA4I,CAAC;;gCAAmiE,oFAAoC;;;;;;;;;;;;6BAAkvI,sFAAsC,yBAA8B,sFAAsC;6BAA63C,sFAAsC,yBAA8B,sFAAsC;;;;;;2CAPzgT,sFACwB;8CAMysC,oFAAoC,kCAAqC,oFAAoC;;sDAAi2C,uEAA8B,eAAkB,yEAAgC;2DAAse,uEAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAD9wG,wBAA2B"}
@@ -1,5 +1,7 @@
1
1
  export declare const routes: {
2
- homepage: import("@strapi/types/dist/core/router.js").Router;
2
+ homepage: import("@strapi/types/dist/core/router.js").Router | ((params: {
3
+ strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
4
+ }) => import("@strapi/types/dist/core/router.js").Router);
3
5
  settings: {
4
6
  type: string;
5
7
  routes: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../server/src/services/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAI7D,QAAA,MAAM,uBAAuB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;mBAI3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI;sBA6BpC,OAAO,CAAC,IAAI,CAAC;;IAa/B;;;;OAIG;;CAkBN,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../server/src/services/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAI7D,QAAA,MAAM,uBAAuB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;mBAI3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI;sBA+BpC,OAAO,CAAC,IAAI,CAAC;;IAe/B;;;;OAIG;;CAkBN,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/content-releases",
3
- "version": "5.50.2",
3
+ "version": "5.51.0",
4
4
  "description": "Strapi plugin for organizing and releasing content",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -64,11 +64,11 @@
64
64
  },
65
65
  "dependencies": {
66
66
  "@reduxjs/toolkit": "1.9.7",
67
- "@strapi/database": "5.50.2",
67
+ "@strapi/database": "5.51.0",
68
68
  "@strapi/design-system": "2.2.3",
69
69
  "@strapi/icons": "2.2.3",
70
- "@strapi/types": "5.50.2",
71
- "@strapi/utils": "5.50.2",
70
+ "@strapi/types": "5.51.0",
71
+ "@strapi/utils": "5.51.0",
72
72
  "date-fns": "2.30.0",
73
73
  "date-fns-tz": "2.0.1",
74
74
  "formik": "2.4.9",
@@ -79,9 +79,9 @@
79
79
  "yup": "0.32.9"
80
80
  },
81
81
  "devDependencies": {
82
- "@strapi/admin": "5.50.2",
83
- "@strapi/admin-test-utils": "5.50.2",
84
- "@strapi/content-manager": "5.50.2",
82
+ "@strapi/admin": "5.51.0",
83
+ "@strapi/admin-test-utils": "5.51.0",
84
+ "@strapi/content-manager": "5.51.0",
85
85
  "@testing-library/dom": "10.4.1",
86
86
  "@testing-library/jest-dom": "6.9.1",
87
87
  "@testing-library/react": "16.3.2",