@strapi/core 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.f2351bcfa3965c60f063a492da51faa2c636eee8
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/dist/core-api/service/collection-type.d.ts +2 -2
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +15 -0
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +15 -0
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +26 -1
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs +4 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/middlewares/query.js.map +1 -1
- package/dist/middlewares/query.mjs.map +1 -1
- package/dist/middlewares/security.d.ts.map +1 -1
- package/dist/middlewares/security.js +1 -1
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs +1 -1
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/registries/policies.d.ts +1 -1
- package/dist/registries/policies.d.ts.map +1 -1
- package/dist/registries/policies.js +1 -1
- package/dist/registries/policies.js.map +1 -1
- package/dist/registries/policies.mjs +1 -1
- package/dist/registries/policies.mjs.map +1 -1
- package/dist/services/content-api/index.d.ts +10 -12
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/permissions/index.d.ts +10 -12
- package/dist/services/content-api/permissions/index.d.ts.map +1 -1
- package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
- package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
- package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
- package/dist/services/cron.d.ts +3 -3
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +31 -0
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +32 -1
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
- package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
- package/dist/services/entity-validator/blocks-validator.js +4 -3
- package/dist/services/entity-validator/blocks-validator.js.map +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs +3 -3
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
- package/dist/services/entity-validator/index.d.ts +2 -1
- package/dist/services/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +10 -15
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +14 -19
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts +32 -23
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js +136 -63
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/entity-validator/validators.mjs +135 -63
- package/dist/services/entity-validator/validators.mjs.map +1 -1
- package/dist/utils/transform-content-types-to-models.d.ts +2 -2
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +2 -1
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.mjs +2 -1
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
- package/package.json +14 -15
@@ -8,40 +8,38 @@ declare const createContentAPI: (strapi: Core.Strapi) => {
|
|
8
8
|
engine: import("@strapi/permissions/dist/engine").Engine;
|
9
9
|
providers: {
|
10
10
|
action: {
|
11
|
-
register(action: string, payload: Record<string, unknown>): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
11
|
+
register(action: string, payload: Record<string, unknown>): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
12
12
|
hooks: import("@strapi/utils/dist/provider-factory").ProviderHooksMap;
|
13
|
-
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
13
|
+
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
14
14
|
get(key: string): {
|
15
15
|
[x: string]: unknown;
|
16
16
|
} | undefined;
|
17
|
-
getWhere(filters?: Record<string, unknown> | undefined): {
|
18
|
-
[x: string]: unknown;
|
19
|
-
}[];
|
20
17
|
values(): {
|
21
18
|
[x: string]: unknown;
|
22
19
|
}[];
|
23
20
|
keys(): string[];
|
24
21
|
has(key: string): boolean;
|
25
22
|
size(): number;
|
26
|
-
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
23
|
+
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider<{
|
24
|
+
[x: string]: unknown;
|
25
|
+
}>>;
|
27
26
|
};
|
28
27
|
condition: {
|
29
|
-
register(condition: import("./permissions/providers/condition").Condition): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
28
|
+
register(condition: import("./permissions/providers/condition").Condition): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
30
29
|
hooks: import("@strapi/utils/dist/provider-factory").ProviderHooksMap;
|
31
|
-
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
30
|
+
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
32
31
|
get(key: string): {
|
33
32
|
[x: string]: unknown;
|
34
33
|
} | undefined;
|
35
|
-
getWhere(filters?: Record<string, unknown> | undefined): {
|
36
|
-
[x: string]: unknown;
|
37
|
-
}[];
|
38
34
|
values(): {
|
39
35
|
[x: string]: unknown;
|
40
36
|
}[];
|
41
37
|
keys(): string[];
|
42
38
|
has(key: string): boolean;
|
43
39
|
size(): number;
|
44
|
-
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
40
|
+
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider<{
|
41
|
+
[x: string]: unknown;
|
42
|
+
}>>;
|
45
43
|
};
|
46
44
|
};
|
47
45
|
registerActions: () => Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
@@ -7,40 +7,38 @@ declare const _default: (strapi: Core.Strapi) => {
|
|
7
7
|
engine: import("@strapi/permissions/dist/engine").Engine;
|
8
8
|
providers: {
|
9
9
|
action: {
|
10
|
-
register(action: string, payload: Record<string, unknown>): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
10
|
+
register(action: string, payload: Record<string, unknown>): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
11
11
|
hooks: import("@strapi/utils/dist/provider-factory").ProviderHooksMap;
|
12
|
-
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
12
|
+
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
13
13
|
get(key: string): {
|
14
14
|
[x: string]: unknown;
|
15
15
|
} | undefined;
|
16
|
-
getWhere(filters?: Record<string, unknown> | undefined): {
|
17
|
-
[x: string]: unknown;
|
18
|
-
}[];
|
19
16
|
values(): {
|
20
17
|
[x: string]: unknown;
|
21
18
|
}[];
|
22
19
|
keys(): string[];
|
23
20
|
has(key: string): boolean;
|
24
21
|
size(): number;
|
25
|
-
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
22
|
+
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider<{
|
23
|
+
[x: string]: unknown;
|
24
|
+
}>>;
|
26
25
|
};
|
27
26
|
condition: {
|
28
|
-
register(condition: import("./providers/condition").Condition): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
27
|
+
register(condition: import("./providers/condition").Condition): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
29
28
|
hooks: import("@strapi/utils/dist/provider-factory").ProviderHooksMap;
|
30
|
-
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
29
|
+
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
31
30
|
get(key: string): {
|
32
31
|
[x: string]: unknown;
|
33
32
|
} | undefined;
|
34
|
-
getWhere(filters?: Record<string, unknown> | undefined): {
|
35
|
-
[x: string]: unknown;
|
36
|
-
}[];
|
37
33
|
values(): {
|
38
34
|
[x: string]: unknown;
|
39
35
|
}[];
|
40
36
|
keys(): string[];
|
41
37
|
has(key: string): boolean;
|
42
38
|
size(): number;
|
43
|
-
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
39
|
+
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider<{
|
40
|
+
[x: string]: unknown;
|
41
|
+
}>>;
|
44
42
|
};
|
45
43
|
};
|
46
44
|
registerActions: () => Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/content-api/permissions/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AA8B1C;;;GAGG;iCACqB,KAAK,MAAM
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/content-api/permissions/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AA8B1C;;;GAGG;iCACqB,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAkBd,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC;;;AAlB7C,wBAmHE"}
|
@@ -1,20 +1,19 @@
|
|
1
1
|
declare const _default: (options?: {}) => {
|
2
|
-
register(action: string, payload: Record<string, unknown>): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
2
|
+
register(action: string, payload: Record<string, unknown>): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
3
3
|
hooks: import("@strapi/utils/dist/provider-factory").ProviderHooksMap;
|
4
|
-
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
4
|
+
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
5
5
|
get(key: string): {
|
6
6
|
[x: string]: unknown;
|
7
7
|
} | undefined;
|
8
|
-
getWhere(filters?: Record<string, unknown> | undefined): {
|
9
|
-
[x: string]: unknown;
|
10
|
-
}[];
|
11
8
|
values(): {
|
12
9
|
[x: string]: unknown;
|
13
10
|
}[];
|
14
11
|
keys(): string[];
|
15
12
|
has(key: string): boolean;
|
16
13
|
size(): number;
|
17
|
-
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
14
|
+
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider<{
|
15
|
+
[x: string]: unknown;
|
16
|
+
}>>;
|
18
17
|
};
|
19
18
|
export default _default;
|
20
19
|
//# sourceMappingURL=action.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/services/content-api/permissions/providers/action.ts"],"names":[],"mappings":";qBAQ2B,MAAM,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/services/content-api/permissions/providers/action.ts"],"names":[],"mappings":";qBAQ2B,MAAM,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;AANnE,wBAcE"}
|
@@ -3,22 +3,21 @@ export interface Condition {
|
|
3
3
|
[key: string]: unknown;
|
4
4
|
}
|
5
5
|
declare const _default: (options?: {}) => {
|
6
|
-
register(condition: Condition): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
6
|
+
register(condition: Condition): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
7
7
|
hooks: import("@strapi/utils/dist/provider-factory").ProviderHooksMap;
|
8
|
-
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
8
|
+
delete(key: string): Promise<import("@strapi/utils/dist/provider-factory").Provider<unknown>>;
|
9
9
|
get(key: string): {
|
10
10
|
[x: string]: unknown;
|
11
11
|
} | undefined;
|
12
|
-
getWhere(filters?: Record<string, unknown> | undefined): {
|
13
|
-
[x: string]: unknown;
|
14
|
-
}[];
|
15
12
|
values(): {
|
16
13
|
[x: string]: unknown;
|
17
14
|
}[];
|
18
15
|
keys(): string[];
|
19
16
|
has(key: string): boolean;
|
20
17
|
size(): number;
|
21
|
-
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider
|
18
|
+
clear(): Promise<import("@strapi/utils/dist/provider-factory").Provider<{
|
19
|
+
[x: string]: unknown;
|
20
|
+
}>>;
|
22
21
|
};
|
23
22
|
export default _default;
|
24
23
|
//# sourceMappingURL=condition.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../../../../src/services/content-api/permissions/providers/condition.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;;wBAQ6B,SAAS
|
1
|
+
{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../../../../src/services/content-api/permissions/providers/condition.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;;wBAQ6B,SAAS;;;;;;;;;;;;;;;;AANvC,wBAcE"}
|
package/dist/services/cron.d.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
import { Job } from 'node-schedule';
|
1
|
+
import { Job, Spec } from 'node-schedule';
|
2
2
|
import type { Core } from '@strapi/types';
|
3
3
|
interface JobSpec {
|
4
4
|
job: Job;
|
5
|
-
options:
|
5
|
+
options: Spec;
|
6
6
|
name: string | null;
|
7
7
|
}
|
8
8
|
type TaskFn = ({ strapi }: {
|
@@ -10,7 +10,7 @@ type TaskFn = ({ strapi }: {
|
|
10
10
|
}, ...args: unknown[]) => Promise<unknown>;
|
11
11
|
type Task = TaskFn | {
|
12
12
|
task: TaskFn;
|
13
|
-
options:
|
13
|
+
options: Spec;
|
14
14
|
};
|
15
15
|
interface Tasks {
|
16
16
|
[key: string]: Task;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE5F,KAAK,IAAI,GACL,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEN,UAAU,KAAK;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,iBAAiB;gBAKR,KAAK;iBAoCH,MAAM;;;;;CAgCtB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options:
|
1
|
+
{"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) {\n throw new Error('You must provide a name to remove a cron job.');\n }\n\n jobsSpecs\n .filter(({ name: jobSpecName }) => jobSpecName === name)\n .forEach(({ job }) => job.cancel());\n\n jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["isFunction","Job"],"mappings":";;;AAuBA,MAAM,oBAAoB,MAAM;AAC9B,MAAI,YAAuB,CAAA;AAC3B,MAAI,UAAU;AAEP,SAAA;AAAA,IACL,IAAI,QAAe,IAAI;AACrB,iBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AACzC,cAAA,YAAY,MAAM,cAAc;AAElC,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAAA,GAAAA,WAAW,SAAS,GAAG;AAEd,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK;AACf,oBAAA;AAAA,QACD,WAAAA,GAAA,WAAW,UAAU,IAAI,GAAG;AAE1B,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK,SAAS;AAClC,oBAAU,UAAU;AAAA,QAAA,OACf;AACL,gBAAM,IAAI;AAAA,YACR,sCAAsC,cAAc;AAAA,UAAA;AAAA,QAExD;AAEM,cAAA,eAAe,IAAI,SAAoB,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAG7D,cAAA,MAAM,IAAIC,iBAAI,YAAY;AAChC,kBAAU,KAAK,EAAE,KAAK,SAAS,MAAM,UAAU;AAE/C,YAAI,SAAS;AACX,cAAI,SAAS,OAAO;AAAA,QACtB;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEA,OAAO,MAAc;AACnB,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,gBACG,OAAO,CAAC,EAAE,MAAM,YAAA,MAAkB,gBAAgB,IAAI,EACtD,QAAQ,CAAC,EAAE,IAAA,MAAU,IAAI,OAAQ,CAAA;AAExB,kBAAA,UAAU,OAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gBAAgB,IAAI;AACrE,aAAA;AAAA,IACT;AAAA,IAEA,QAAQ;AACI,gBAAA,QAAQ,CAAC,EAAE,KAAK,QAAc,MAAA,IAAI,SAAS,OAAO,CAAC;AACnD,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,OAAO;AACL,gBAAU,QAAQ,CAAC,EAAE,IAAU,MAAA,IAAI,QAAQ;AACjC,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,KAAK;AACV,kBAAY,CAAA;AACL,aAAA;AAAA,IACT;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options:
|
1
|
+
{"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) {\n throw new Error('You must provide a name to remove a cron job.');\n }\n\n jobsSpecs\n .filter(({ name: jobSpecName }) => jobSpecName === name)\n .forEach(({ job }) => job.cancel());\n\n jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":[],"mappings":";;AAuBA,MAAM,oBAAoB,MAAM;AAC9B,MAAI,YAAuB,CAAA;AAC3B,MAAI,UAAU;AAEP,SAAA;AAAA,IACL,IAAI,QAAe,IAAI;AACrB,iBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AACzC,cAAA,YAAY,MAAM,cAAc;AAElC,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA,WAAW,SAAS,GAAG;AAEd,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK;AACf,oBAAA;AAAA,QACD,WAAA,WAAW,UAAU,IAAI,GAAG;AAE1B,qBAAA;AACN,eAAA,UAAU,KAAK,KAAK,SAAS;AAClC,oBAAU,UAAU;AAAA,QAAA,OACf;AACL,gBAAM,IAAI;AAAA,YACR,sCAAsC,cAAc;AAAA,UAAA;AAAA,QAExD;AAEM,cAAA,eAAe,IAAI,SAAoB,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAG7D,cAAA,MAAM,IAAI,IAAI,YAAY;AAChC,kBAAU,KAAK,EAAE,KAAK,SAAS,MAAM,UAAU;AAE/C,YAAI,SAAS;AACX,cAAI,SAAS,OAAO;AAAA,QACtB;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEA,OAAO,MAAc;AACnB,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,gBACG,OAAO,CAAC,EAAE,MAAM,YAAA,MAAkB,gBAAgB,IAAI,EACtD,QAAQ,CAAC,EAAE,IAAA,MAAU,IAAI,OAAQ,CAAA;AAExB,kBAAA,UAAU,OAAO,CAAC,EAAE,MAAM,YAAY,MAAM,gBAAgB,IAAI;AACrE,aAAA;AAAA,IACT;AAAA,IAEA,QAAQ;AACI,gBAAA,QAAQ,CAAC,EAAE,KAAK,QAAc,MAAA,IAAI,SAAS,OAAO,CAAC;AACnD,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,OAAO;AACL,gBAAU,QAAQ,CAAC,EAAE,IAAU,MAAA,IAAI,QAAQ;AACjC,gBAAA;AACH,aAAA;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,KAAK;AACV,kBAAY,CAAA;AACL,aAAA;AAAA,IACT;AAAA,IACA,MAAM;AAAA,EAAA;AAEV;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAkB3E,eAAO,MAAM,2BAA2B,EAAE,uBA4WzC,CAAC"}
|
@@ -13,14 +13,34 @@ const populate = require("./utils/populate.js");
|
|
13
13
|
const query = require("./transform/query.js");
|
14
14
|
const idTransform = require("./transform/id-transform.js");
|
15
15
|
const events = require("./events.js");
|
16
|
+
const { validators } = strapiUtils.validate;
|
17
|
+
const getModel = (schema) => strapi.getModel(schema);
|
16
18
|
const createContentTypeRepository = (uid) => {
|
17
19
|
const contentType = strapi.contentType(uid);
|
18
20
|
const hasDraftAndPublish = strapiUtils.contentTypes.hasDraftAndPublish(contentType);
|
21
|
+
const sortValidations = ["nonAttributesOperators", "dynamicZones", "morphRelations"];
|
22
|
+
const fieldValidations = ["scalarAttributes"];
|
23
|
+
const filtersValidations = ["nonAttributesOperators", "dynamicZones", "morphRelations"];
|
24
|
+
const populateValidations = {
|
25
|
+
sort: sortValidations,
|
26
|
+
field: fieldValidations,
|
27
|
+
filters: filtersValidations,
|
28
|
+
populate: ["nonAttributesOperators"]
|
29
|
+
};
|
30
|
+
const validateParams = async (params2) => {
|
31
|
+
const ctx = { schema: contentType, getModel };
|
32
|
+
await validators.validateFilters(ctx, params2.filters, filtersValidations);
|
33
|
+
await validators.validateSort(ctx, params2.sort, sortValidations);
|
34
|
+
await validators.validateFields(ctx, params2.fields, fieldValidations);
|
35
|
+
await validators.validatePopulate(ctx, params2.populate, populateValidations);
|
36
|
+
return params2;
|
37
|
+
};
|
19
38
|
const entries$1 = entries.createEntriesService(uid);
|
20
39
|
const eventManager = events.createEventManager(strapi, uid);
|
21
40
|
const emitEvent = fp.curry(eventManager.emitEvent);
|
22
41
|
async function findMany(params2 = {}) {
|
23
42
|
const query$1 = await strapiUtils.async.pipe(
|
43
|
+
validateParams,
|
24
44
|
draftAndPublish.defaultToDraft,
|
25
45
|
draftAndPublish.statusToLookup(contentType),
|
26
46
|
internationalization.defaultLocale(contentType),
|
@@ -32,6 +52,7 @@ const createContentTypeRepository = (uid) => {
|
|
32
52
|
}
|
33
53
|
async function findFirst(params2 = {}) {
|
34
54
|
const query$1 = await strapiUtils.async.pipe(
|
55
|
+
validateParams,
|
35
56
|
draftAndPublish.defaultToDraft,
|
36
57
|
draftAndPublish.statusToLookup(contentType),
|
37
58
|
internationalization.defaultLocale(contentType),
|
@@ -44,6 +65,7 @@ const createContentTypeRepository = (uid) => {
|
|
44
65
|
async function findOne(opts = {}) {
|
45
66
|
const { documentId, ...params2 } = opts;
|
46
67
|
const query$1 = await strapiUtils.async.pipe(
|
68
|
+
validateParams,
|
47
69
|
draftAndPublish.defaultToDraft,
|
48
70
|
draftAndPublish.statusToLookup(contentType),
|
49
71
|
internationalization.defaultLocale(contentType),
|
@@ -57,6 +79,7 @@ const createContentTypeRepository = (uid) => {
|
|
57
79
|
async function deleteDocument(opts = {}) {
|
58
80
|
const { documentId, ...params2 } = opts;
|
59
81
|
const query$1 = await strapiUtils.async.pipe(
|
82
|
+
validateParams,
|
60
83
|
fp.omit("status"),
|
61
84
|
internationalization.defaultLocale(contentType),
|
62
85
|
internationalization.multiLocaleToLookup(contentType),
|
@@ -77,6 +100,7 @@ const createContentTypeRepository = (uid) => {
|
|
77
100
|
async function create(opts = {}) {
|
78
101
|
const { documentId, ...params2 } = opts;
|
79
102
|
const queryParams = await strapiUtils.async.pipe(
|
103
|
+
validateParams,
|
80
104
|
draftAndPublish.filterDataPublishedAt,
|
81
105
|
draftAndPublish.setStatusToDraft(contentType),
|
82
106
|
draftAndPublish.statusToData(contentType),
|
@@ -96,6 +120,7 @@ const createContentTypeRepository = (uid) => {
|
|
96
120
|
async function clone(opts = {}) {
|
97
121
|
const { documentId, ...params2 } = opts;
|
98
122
|
const queryParams = await strapiUtils.async.pipe(
|
123
|
+
validateParams,
|
99
124
|
draftAndPublish.filterDataPublishedAt,
|
100
125
|
internationalization.defaultLocale(contentType),
|
101
126
|
internationalization.multiLocaleToLookup(contentType)
|
@@ -113,6 +138,7 @@ const createContentTypeRepository = (uid) => {
|
|
113
138
|
const clonedEntries = await strapiUtils.async.map(
|
114
139
|
entriesToClone,
|
115
140
|
strapiUtils.async.pipe(
|
141
|
+
validateParams,
|
116
142
|
fp.omit("id"),
|
117
143
|
// assign new documentId
|
118
144
|
fp.assoc("documentId", transformContentTypesToModels.createDocumentId()),
|
@@ -127,6 +153,7 @@ const createContentTypeRepository = (uid) => {
|
|
127
153
|
async function update(opts = {}) {
|
128
154
|
const { documentId, ...params$1 } = opts;
|
129
155
|
const queryParams = await strapiUtils.async.pipe(
|
156
|
+
validateParams,
|
130
157
|
draftAndPublish.filterDataPublishedAt,
|
131
158
|
draftAndPublish.setStatusToDraft(contentType),
|
132
159
|
draftAndPublish.statusToLookup(contentType),
|
@@ -164,6 +191,7 @@ const createContentTypeRepository = (uid) => {
|
|
164
191
|
}
|
165
192
|
async function count(params2 = {}) {
|
166
193
|
const query$1 = await strapiUtils.async.pipe(
|
194
|
+
validateParams,
|
167
195
|
draftAndPublish.defaultStatus(contentType),
|
168
196
|
draftAndPublish.statusToLookup(contentType),
|
169
197
|
internationalization.defaultLocale(contentType),
|
@@ -175,6 +203,7 @@ const createContentTypeRepository = (uid) => {
|
|
175
203
|
async function publish(opts = {}) {
|
176
204
|
const { documentId, ...params2 } = opts;
|
177
205
|
const queryParams = await strapiUtils.async.pipe(
|
206
|
+
validateParams,
|
178
207
|
internationalization.defaultLocale(contentType),
|
179
208
|
internationalization.multiLocaleToLookup(contentType)
|
180
209
|
)(params2);
|
@@ -209,6 +238,7 @@ const createContentTypeRepository = (uid) => {
|
|
209
238
|
async function unpublish(opts = {}) {
|
210
239
|
const { documentId, ...params2 } = opts;
|
211
240
|
const query$1 = await strapiUtils.async.pipe(
|
241
|
+
validateParams,
|
212
242
|
internationalization.defaultLocale(contentType),
|
213
243
|
internationalization.multiLocaleToLookup(contentType),
|
214
244
|
query.transformParamsToQuery(uid),
|
@@ -222,6 +252,7 @@ const createContentTypeRepository = (uid) => {
|
|
222
252
|
async function discardDraft(opts = {}) {
|
223
253
|
const { documentId, ...params2 } = opts;
|
224
254
|
const queryParams = await strapiUtils.async.pipe(
|
255
|
+
validateParams,
|
225
256
|
internationalization.defaultLocale(contentType),
|
226
257
|
internationalization.multiLocaleToLookup(contentType)
|
227
258
|
)(params2);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (uid) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n const entries = createEntriesService(uid);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n omit('id'),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, publishedToDelete] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id'],\n }),\n ]);\n\n // Delete all published versions\n await async.map(publishedToDelete, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: unknown) =>\n entries.publish(draft, queryParams)\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, versionsToDelete] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id'],\n }),\n ]);\n\n // Delete all drafts\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n updateComponents,\n omitComponentData,\n };\n};\n"],"names":["contentTypesUtils","entries","createEntriesService","createEventManager","curry","params","query","async","DP.defaultToDraft","DP.statusToLookup","i18n.defaultLocale","i18n.multiLocaleToLookup","transformParamsDocumentId","transformParamsToQuery","i18n.localeToLookup","assoc","omit","DP.filterDataPublishedAt","DP.setStatusToDraft","DP.statusToData","i18n.localeToData","doc","getDeepPopulate","createDocumentId","merge","pickSelectionParams","DP.defaultStatus","components.updateComponents","components.omitComponentData","wrapInTransaction"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils, validate } from '@strapi/utils';\n\nimport { UID } from '@strapi/types';\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (uid) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n // Define the validations that should be performed\n const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const fieldValidations = ['scalarAttributes'];\n const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const populateValidations = {\n sort: sortValidations,\n field: fieldValidations,\n filters: filtersValidations,\n populate: ['nonAttributesOperators'],\n };\n\n const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\n\n // TODO: add validate status, locale, pagination\n\n return params;\n };\n\n const entries = createEntriesService(uid);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n validateParams,\n omit('id'),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, publishedToDelete] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id'],\n }),\n ]);\n\n // Delete all published versions\n await async.map(publishedToDelete, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: unknown) =>\n entries.publish(draft, queryParams)\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, versionsToDelete] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id'],\n }),\n ]);\n\n // Delete all drafts\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n updateComponents,\n omitComponentData,\n };\n};\n"],"names":["validate","contentTypesUtils","params","entries","createEntriesService","createEventManager","curry","query","async","DP.defaultToDraft","DP.statusToLookup","i18n.defaultLocale","i18n.multiLocaleToLookup","transformParamsDocumentId","transformParamsToQuery","i18n.localeToLookup","assoc","omit","DP.filterDataPublishedAt","DP.setStatusToDraft","DP.statusToData","i18n.localeToData","doc","getDeepPopulate","createDocumentId","merge","pickSelectionParams","DP.defaultStatus","components.updateComponents","components.omitComponentData","wrapInTransaction"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,EAAE,WAAe,IAAAA;AAGvB,MAAM,WAAY,CAAC,WAAuB,OAAO,SAAS,MAAM;AAEnD,MAAA,8BAAuD,CAAC,QAAQ;AACrE,QAAA,cAAc,OAAO,YAAY,GAAG;AACpC,QAAA,qBAAqBC,YAAAA,aAAkB,mBAAmB,WAAW;AAG3E,QAAM,kBAAkB,CAAC,0BAA0B,gBAAgB,gBAAgB;AAC7E,QAAA,mBAAmB,CAAC,kBAAkB;AAC5C,QAAM,qBAAqB,CAAC,0BAA0B,gBAAgB,gBAAgB;AACtF,QAAM,sBAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU,CAAC,wBAAwB;AAAA,EAAA;AAG/B,QAAA,iBAAiB,OAAOC,YAAgB;AAC5C,UAAM,MAAM,EAAE,QAAQ,aAAa,SAAS;AAC5C,UAAM,WAAW,gBAAgB,KAAKA,QAAO,SAAS,kBAAkB;AACxE,UAAM,WAAW,aAAa,KAAKA,QAAO,MAAM,eAAe;AAC/D,UAAM,WAAW,eAAe,KAAKA,QAAO,QAAQ,gBAAgB;AACpE,UAAM,WAAW,iBAAiB,KAAKA,QAAO,UAAU,mBAAmB;AAIpE,WAAAA;AAAA,EAAA;AAGH,QAAAC,YAAUC,6BAAqB,GAAG;AAElC,QAAA,eAAeC,OAAAA,mBAAmB,QAAQ,GAAG;AAC7C,QAAA,YAAYC,GAAAA,MAAM,aAAa,SAAS;AAE/B,iBAAA,SAASJ,UAAS,IAAW;AACpC,UAAAK,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxB;AAAA,MACAC,gBAAG;AAAA,MACHC,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,oBAAyB,WAAW;AAAA,MACpCC,YAAAA,0BAA0B,GAAG;AAAA,MAC7BC,MAAAA,uBAAuB,GAAG;AAAA,IAAA,EAC1BZ,WAAU,CAAA,CAAE;AAEd,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,SAASK,OAAK;AAAA,EAC5C;AAEe,iBAAA,UAAUL,UAAS,IAAW;AACrC,UAAAK,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxB;AAAA,MACAC,gBAAG;AAAA,MACHC,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BI,qBAAAA,eAAoB,WAAW;AAAA,MAC/BF,YAAAA,0BAA0B,GAAG;AAAA,MAC7BC,MAAAA,uBAAuB,GAAG;AAAA,MAC1BZ,OAAM;AAER,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,QAAQK,OAAK;AAAA,EAC3C;AAGe,iBAAA,QAAQ,OAAO,IAAW;AACvC,UAAM,EAAE,YAAY,GAAGL,QAAA,IAAW;AAE5B,UAAAK,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxB;AAAA,MACAC,gBAAG;AAAA,MACHC,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BI,qBAAAA,eAAoB,WAAW;AAAA,MAC/BF,YAAAA,0BAA0B,GAAG;AAAA,MAC7BC,MAAAA,uBAAuB,GAAG;AAAA,MAC1B,CAACP,WAAUS,GAAA,MAAM,SAAS,EAAE,GAAGT,OAAM,OAAO,WAAW,GAAGA,MAAK;AAAA,MAC/DL,OAAM;AAER,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,QAAQK,OAAK;AAAA,EAC3C;AAEe,iBAAA,eAAe,OAAO,IAAW;AAC9C,UAAM,EAAE,YAAY,GAAGL,QAAA,IAAW;AAE5B,UAAAK,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxB;AAAA,MACAS,GAAAA,KAAK,QAAQ;AAAA,MACbN,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,oBAAyB,WAAW;AAAA,MACpCE,MAAAA,uBAAuB,GAAG;AAAA,MAC1B,CAACP,WAAUS,GAAA,MAAM,SAAS,EAAE,GAAGT,OAAM,OAAO,WAAW,GAAGA,MAAK;AAAA,MAC/DL,OAAM;AAEJ,QAAAA,QAAO,WAAW,SAAS;AACvB,YAAA,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEM,UAAA,kBAAkB,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,SAASK,OAAK;AAG3D,UAAA,iBAAiB,MAAMC,YAAAA,MAAM;AAAA,MAAI;AAAA,MAAiB,CAAC,kBACvDL,UAAQ,OAAO,cAAc,EAAE;AAAA,IAAA;AAGjB,oBAAA,QAAQ,UAAU,cAAc,CAAC;AAE1C,WAAA,EAAE,YAAY,SAAS;EAChC;AAEe,iBAAA,OAAO,OAAO,IAAW;AACtC,UAAM,EAAE,YAAY,GAAGD,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAMM,YAAAA,MAAM;AAAA,MAC9B;AAAA,MACAU,gBAAG;AAAA,MACHC,gBAAAA,iBAAoB,WAAW;AAAA,MAC/BC,gBAAAA,aAAgB,WAAW;AAAA,MAC3BT,qBAAAA,cAAmB,WAAW;AAAA,MAC9BU,qBAAAA,aAAkB,WAAW;AAAA,MAC7BnB,OAAM;AAER,UAAM,MAAM,MAAMC,UAAQ,OAAO,WAAW;AAE5C,cAAU,gBAAgB,GAAG;AAEzB,QAAA,sBAAsBD,QAAO,WAAW,aAAa;AACvD,aAAO,QAAQ;AAAA,QACb,GAAGA;AAAA,QACH,YAAY,IAAI;AAAA,MAAA,CACjB,EAAE,KAAK,CAACoB,SAAQA,KAAI,QAAQ,CAAC,CAAC;AAAA,IACjC;AAEO,WAAA;AAAA,EACT;AAEe,iBAAA,MAAM,OAAO,IAAW;AACrC,UAAM,EAAE,YAAY,GAAGpB,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAMM,YAAAA,MAAM;AAAA,MAC9B;AAAA,MACAU,gBAAG;AAAA,MACHP,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,oBAAyB,WAAW;AAAA,MACpCV,OAAM;AAGR,UAAM,iBAAiB,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,SAAS;AAAA,MACzD,OAAO;AAAA,QACL,GAAG,aAAa;AAAA,QAChB;AAAA;AAAA;AAAA,QAGA,aAAa,EAAE,OAAO,mBAAmB;AAAA,MAC3C;AAAA,MACA,UAAUqB,yBAAgB,KAAK,EAAE,kBAAkB,CAAC,IAAI,GAAG;AAAA,IAAA,CAC5D;AAEK,UAAA,gBAAgB,MAAMf,YAAAA,MAAM;AAAA,MAChC;AAAA,MACAA,YAAAA,MAAM;AAAA,QACJ;AAAA,QACAS,GAAAA,KAAK,IAAI;AAAA;AAAA,QAETD,SAAM,cAAcQ,8BAAAA,kBAAkB;AAAA;AAAA,QAEtC,CAAC,SAASC,GAAM,MAAA,MAAM,YAAY,IAAI;AAAA,QACtC,CAAC,SAAStB,UAAQ,OAAO,EAAE,GAAG,aAAa,MAAM,QAAQ,SAAS;AAAA,MACpE;AAAA,IAAA;AAGY,kBAAA,QAAQ,UAAU,cAAc,CAAC;AAExC,WAAA,EAAE,YAAY,cAAc,GAAG,CAAC,GAAG,YAAY,SAAS;EACjE;AAEe,iBAAA,OAAO,OAAO,IAAW;AACtC,UAAM,EAAE,YAAY,GAAGD,SAAA,IAAW;AAE5B,UAAA,cAAc,MAAMM,YAAAA,MAAM;AAAA,MAC9B;AAAA,MACAU,gBAAG;AAAA,MACHC,gBAAAA,iBAAoB,WAAW;AAAA,MAC/BT,gBAAAA,eAAkB,WAAW;AAAA,MAC7BU,gBAAAA,aAAgB,WAAW;AAAA;AAAA,MAE3BT,qBAAAA,cAAmB,WAAW;AAAA,MAC9BI,qBAAAA,eAAoB,WAAW;AAAA,MAC/BM,qBAAAA,aAAkB,WAAW;AAAA,MAC7BnB,QAAM;AAEF,UAAA,EAAE,MAAM,GAAG,WAAW,IAAI,MAAMW,YAAAA,0BAA0B,KAAK,eAAe,CAAA,CAAE;AACtF,UAAMN,UAAQO,MAAAA,uBAAuB,KAAKY,2BAAoB,cAAc,CAAE,CAAA,CAAQ;AAIhF,UAAA,gBAAgB,MAAM,OAAO,GAChC,MAAM,GAAG,EACT,QAAQ,EAAE,GAAGnB,SAAO,OAAO,EAAE,GAAG,aAAa,QAAQ,GAAGA,SAAO,OAAO,WAAW,EAAA,CAAG;AAEvF,QAAI,eAAe;AACnB,QAAI,eAAe;AACjB,qBAAe,MAAMJ,UAAQ,OAAO,eAAe,WAAW;AAC9D,gBAAU,gBAAgB,YAAY;AAAA,IACxC;AAEA,QAAI,CAAC,cAAc;AACjB,YAAM,iBAAiB,MAAM,OAAO,GACjC,MAAM,YAAY,GAAG,EACrB,QAAQ,EAAE,OAAO,EAAE,WAAA,EAAc,CAAA;AAEpC,UAAI,gBAAgB;AACH,uBAAA,MAAMA,UAAQ,OAAO;AAAA,UAClC,GAAG;AAAA,UACH,MAAM,EAAE,GAAG,YAAY,MAAM,WAAW;AAAA,QAAA,CACzC;AACD,kBAAU,gBAAgB,YAAY;AAAA,MACxC;AAAA,IACF;AAEA,QAAI,sBAAsB,gBAAgBD,SAAO,WAAW,aAAa;AACvE,aAAO,QAAQ;AAAA,QACb,GAAGA;AAAAA,QACH;AAAA,MAAA,CACD,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAAA,IACjC;AAEO,WAAA;AAAA,EACT;AAEe,iBAAA,MAAMA,UAAS,IAAW;AACjC,UAAAK,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxB;AAAA,MACAmB,gBAAAA,cAAiB,WAAW;AAAA,MAC5BjB,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BI,qBAAAA,eAAoB,WAAW;AAAA,MAC/BD,MAAAA,uBAAuB,GAAG;AAAA,MAC1BZ,OAAM;AAER,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,MAAMK,OAAK;AAAA,EACzC;AAEe,iBAAA,QAAQ,OAAO,IAAW;AACvC,UAAM,EAAE,YAAY,GAAGL,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAMM,YAAAA,MAAM;AAAA,MAC9B;AAAA,MACAG,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,oBAAyB,WAAW;AAAA,MACpCV,OAAM;AAER,UAAM,CAAC,iBAAiB,iBAAiB,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC7D,OAAO,GAAG,MAAM,GAAG,EAAE,SAAS;AAAA,QAC5B,OAAO;AAAA,UACL,GAAG,aAAa;AAAA,UAChB;AAAA,UACA,aAAa;AAAA;AAAA,QACf;AAAA;AAAA,QAEA,UAAUqB,yBAAgB,KAAK,EAAE,kBAAkB,CAAC,cAAc,QAAQ,GAAG;AAAA,MAAA,CAC9E;AAAA,MACD,OAAO,GAAG,MAAM,GAAG,EAAE,SAAS;AAAA,QAC5B,OAAO;AAAA,UACL,GAAG,aAAa;AAAA,UAChB;AAAA,UACA,aAAa,EAAE,KAAK,KAAK;AAAA,QAC3B;AAAA,QACA,QAAQ,CAAC,IAAI;AAAA,MAAA,CACd;AAAA,IAAA,CACF;AAGK,UAAAf,YAAA,MAAM,IAAI,mBAAmB,CAAC,UAAeL,UAAQ,OAAO,MAAM,EAAE,CAAC;AAGrE,UAAA,mBAAmB,MAAMK,YAAAA,MAAM;AAAA,MAAI;AAAA,MAAiB,CAAC,UACzDL,UAAQ,QAAQ,OAAO,WAAW;AAAA,IAAA;AAGnB,qBAAA,QAAQ,UAAU,eAAe,CAAC;AAC5C,WAAA,EAAE,YAAY,SAAS;EAChC;AAEe,iBAAA,UAAU,OAAO,IAAW;AACzC,UAAM,EAAE,YAAY,GAAGD,QAAA,IAAW;AAE5B,UAAAK,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxB;AAAA,MACAG,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,oBAAyB,WAAW;AAAA,MACpCE,MAAAA,uBAAuB,GAAG;AAAA,MAC1B,CAACP,WAAUS,GAAM,MAAA,SAAS,EAAE,GAAGT,OAAM,OAAO,YAAY,aAAa,EAAE,KAAK,KAAK,EAAA,GAAKA,MAAK;AAAA,MAC3FL,OAAM;AAGF,UAAA,mBAAmB,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,SAASK,OAAK;AAC5D,UAAAC,YAAA,MAAM,IAAI,kBAAkB,CAAC,UAAeL,UAAQ,OAAO,MAAM,EAAE,CAAC;AAEzD,qBAAA,QAAQ,UAAU,iBAAiB,CAAC;AAC9C,WAAA,EAAE,YAAY,SAAS;EAChC;AAEe,iBAAA,aAAa,OAAO,IAAW;AAC5C,UAAM,EAAE,YAAY,GAAGD,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAMM,YAAAA,MAAM;AAAA,MAC9B;AAAA,MACAG,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,oBAAyB,WAAW;AAAA,MACpCV,OAAM;AAER,UAAM,CAAC,iBAAiB,gBAAgB,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5D,OAAO,GAAG,MAAM,GAAG,EAAE,SAAS;AAAA,QAC5B,OAAO;AAAA,UACL,GAAG,aAAa;AAAA,UAChB;AAAA,UACA,aAAa,EAAE,KAAK,KAAK;AAAA,QAC3B;AAAA;AAAA,QAEA,UAAUqB,yBAAgB,KAAK,EAAE,kBAAkB,CAAC,cAAc,QAAQ,GAAG;AAAA,MAAA,CAC9E;AAAA,MACD,OAAO,GAAG,MAAM,GAAG,EAAE,SAAS;AAAA,QAC5B,OAAO;AAAA,UACL,GAAG,aAAa;AAAA,UAChB;AAAA,UACA,aAAa;AAAA,QACf;AAAA,QACA,QAAQ,CAAC,IAAI;AAAA,MAAA,CACd;AAAA,IAAA,CACF;AAGK,UAAAf,YAAA,MAAM,IAAI,kBAAkB,CAAC,UAAeL,UAAQ,OAAO,MAAM,EAAE,CAAC;AAGpE,UAAA,eAAe,MAAMK,YAAAA,MAAM;AAAA,MAAI;AAAA,MAAiB,CAAC,UACrDL,UAAQ,aAAa,OAAO,WAAW;AAAA,IAAA;AAG5B,iBAAA,QAAQ,UAAU,qBAAqB,CAAC;AAC9C,WAAA,EAAE,YAAY,SAAS;EAChC;AAEe,iBAAA,iBAAiB,OAAY,MAAW;AACrD,WAAOyB,4BAA4B,KAAK,OAAO,IAAI;AAAA,EACrD;AAEA,WAAS,kBAAkB,MAAW;AAC7B,WAAAC,WAA6B,kBAAA,aAAa,IAAI;AAAA,EACvD;AAEO,SAAA;AAAA,IACL,UAAUC,yBAAkB,QAAQ;AAAA,IACpC,WAAWA,yBAAkB,SAAS;AAAA,IACtC,SAASA,yBAAkB,OAAO;AAAA,IAClC,QAAQA,yBAAkB,cAAc;AAAA,IACxC,QAAQA,yBAAkB,MAAM;AAAA,IAChC,OAAOA,yBAAkB,KAAK;AAAA,IAC9B,QAAQA,yBAAkB,MAAM;AAAA,IAChC,OAAOA,yBAAkB,KAAK;AAAA,IAC9B,SAAS,qBAAqBA,OAAAA,kBAAkB,OAAO,IAAK;AAAA,IAC5D,WAAW,qBAAqBA,OAAAA,kBAAkB,SAAS,IAAK;AAAA,IAChE,cAAc,qBAAqBA,OAAAA,kBAAkB,YAAY,IAAK;AAAA,IAEtE;AAAA,IACA;AAAA,EAAA;AAEJ;;"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { curry, assoc, omit, merge } from "lodash/fp";
|
2
|
-
import { contentTypes, async } from "@strapi/utils";
|
2
|
+
import { contentTypes, async, validate } from "@strapi/utils";
|
3
3
|
import { wrapInTransaction } from "./common.mjs";
|
4
4
|
import { defaultToDraft as defaultToDraftCurry, statusToLookup as statusToLookupCurry, filterDataPublishedAt as filterDataPublishedAtCurry, setStatusToDraft as setStatusToDraftCurry, statusToData as statusToDataCurry, defaultStatus as defaultStatusCurry } from "./draft-and-publish.mjs";
|
5
5
|
import { defaultLocale as defaultLocaleCurry, multiLocaleToLookup as multiLocaleToLookupCurry, localeToLookup as localeToLookupCurry, localeToData as localeToDataCurry } from "./internationalization.mjs";
|
@@ -11,14 +11,34 @@ import { getDeepPopulate } from "./utils/populate.mjs";
|
|
11
11
|
import { transformParamsToQuery } from "./transform/query.mjs";
|
12
12
|
import { transformParamsDocumentId as curriedTransformParamsDocumentId } from "./transform/id-transform.mjs";
|
13
13
|
import { createEventManager } from "./events.mjs";
|
14
|
+
const { validators } = validate;
|
15
|
+
const getModel = (schema) => strapi.getModel(schema);
|
14
16
|
const createContentTypeRepository = (uid) => {
|
15
17
|
const contentType = strapi.contentType(uid);
|
16
18
|
const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);
|
19
|
+
const sortValidations = ["nonAttributesOperators", "dynamicZones", "morphRelations"];
|
20
|
+
const fieldValidations = ["scalarAttributes"];
|
21
|
+
const filtersValidations = ["nonAttributesOperators", "dynamicZones", "morphRelations"];
|
22
|
+
const populateValidations = {
|
23
|
+
sort: sortValidations,
|
24
|
+
field: fieldValidations,
|
25
|
+
filters: filtersValidations,
|
26
|
+
populate: ["nonAttributesOperators"]
|
27
|
+
};
|
28
|
+
const validateParams = async (params) => {
|
29
|
+
const ctx = { schema: contentType, getModel };
|
30
|
+
await validators.validateFilters(ctx, params.filters, filtersValidations);
|
31
|
+
await validators.validateSort(ctx, params.sort, sortValidations);
|
32
|
+
await validators.validateFields(ctx, params.fields, fieldValidations);
|
33
|
+
await validators.validatePopulate(ctx, params.populate, populateValidations);
|
34
|
+
return params;
|
35
|
+
};
|
17
36
|
const entries = createEntriesService(uid);
|
18
37
|
const eventManager = createEventManager(strapi, uid);
|
19
38
|
const emitEvent = curry(eventManager.emitEvent);
|
20
39
|
async function findMany(params = {}) {
|
21
40
|
const query = await async.pipe(
|
41
|
+
validateParams,
|
22
42
|
defaultToDraftCurry,
|
23
43
|
statusToLookupCurry(contentType),
|
24
44
|
defaultLocaleCurry(contentType),
|
@@ -30,6 +50,7 @@ const createContentTypeRepository = (uid) => {
|
|
30
50
|
}
|
31
51
|
async function findFirst(params = {}) {
|
32
52
|
const query = await async.pipe(
|
53
|
+
validateParams,
|
33
54
|
defaultToDraftCurry,
|
34
55
|
statusToLookupCurry(contentType),
|
35
56
|
defaultLocaleCurry(contentType),
|
@@ -42,6 +63,7 @@ const createContentTypeRepository = (uid) => {
|
|
42
63
|
async function findOne(opts = {}) {
|
43
64
|
const { documentId, ...params } = opts;
|
44
65
|
const query = await async.pipe(
|
66
|
+
validateParams,
|
45
67
|
defaultToDraftCurry,
|
46
68
|
statusToLookupCurry(contentType),
|
47
69
|
defaultLocaleCurry(contentType),
|
@@ -55,6 +77,7 @@ const createContentTypeRepository = (uid) => {
|
|
55
77
|
async function deleteDocument(opts = {}) {
|
56
78
|
const { documentId, ...params } = opts;
|
57
79
|
const query = await async.pipe(
|
80
|
+
validateParams,
|
58
81
|
omit("status"),
|
59
82
|
defaultLocaleCurry(contentType),
|
60
83
|
multiLocaleToLookupCurry(contentType),
|
@@ -75,6 +98,7 @@ const createContentTypeRepository = (uid) => {
|
|
75
98
|
async function create(opts = {}) {
|
76
99
|
const { documentId, ...params } = opts;
|
77
100
|
const queryParams = await async.pipe(
|
101
|
+
validateParams,
|
78
102
|
filterDataPublishedAtCurry,
|
79
103
|
setStatusToDraftCurry(contentType),
|
80
104
|
statusToDataCurry(contentType),
|
@@ -94,6 +118,7 @@ const createContentTypeRepository = (uid) => {
|
|
94
118
|
async function clone(opts = {}) {
|
95
119
|
const { documentId, ...params } = opts;
|
96
120
|
const queryParams = await async.pipe(
|
121
|
+
validateParams,
|
97
122
|
filterDataPublishedAtCurry,
|
98
123
|
defaultLocaleCurry(contentType),
|
99
124
|
multiLocaleToLookupCurry(contentType)
|
@@ -111,6 +136,7 @@ const createContentTypeRepository = (uid) => {
|
|
111
136
|
const clonedEntries = await async.map(
|
112
137
|
entriesToClone,
|
113
138
|
async.pipe(
|
139
|
+
validateParams,
|
114
140
|
omit("id"),
|
115
141
|
// assign new documentId
|
116
142
|
assoc("documentId", createDocumentId()),
|
@@ -125,6 +151,7 @@ const createContentTypeRepository = (uid) => {
|
|
125
151
|
async function update(opts = {}) {
|
126
152
|
const { documentId, ...params } = opts;
|
127
153
|
const queryParams = await async.pipe(
|
154
|
+
validateParams,
|
128
155
|
filterDataPublishedAtCurry,
|
129
156
|
setStatusToDraftCurry(contentType),
|
130
157
|
statusToLookupCurry(contentType),
|
@@ -162,6 +189,7 @@ const createContentTypeRepository = (uid) => {
|
|
162
189
|
}
|
163
190
|
async function count(params = {}) {
|
164
191
|
const query = await async.pipe(
|
192
|
+
validateParams,
|
165
193
|
defaultStatusCurry(contentType),
|
166
194
|
statusToLookupCurry(contentType),
|
167
195
|
defaultLocaleCurry(contentType),
|
@@ -173,6 +201,7 @@ const createContentTypeRepository = (uid) => {
|
|
173
201
|
async function publish(opts = {}) {
|
174
202
|
const { documentId, ...params } = opts;
|
175
203
|
const queryParams = await async.pipe(
|
204
|
+
validateParams,
|
176
205
|
defaultLocaleCurry(contentType),
|
177
206
|
multiLocaleToLookupCurry(contentType)
|
178
207
|
)(params);
|
@@ -207,6 +236,7 @@ const createContentTypeRepository = (uid) => {
|
|
207
236
|
async function unpublish(opts = {}) {
|
208
237
|
const { documentId, ...params } = opts;
|
209
238
|
const query = await async.pipe(
|
239
|
+
validateParams,
|
210
240
|
defaultLocaleCurry(contentType),
|
211
241
|
multiLocaleToLookupCurry(contentType),
|
212
242
|
transformParamsToQuery(uid),
|
@@ -220,6 +250,7 @@ const createContentTypeRepository = (uid) => {
|
|
220
250
|
async function discardDraft(opts = {}) {
|
221
251
|
const { documentId, ...params } = opts;
|
222
252
|
const queryParams = await async.pipe(
|
253
|
+
validateParams,
|
223
254
|
defaultLocaleCurry(contentType),
|
224
255
|
multiLocaleToLookupCurry(contentType)
|
225
256
|
)(params);
|