@roundtreasury/prisma-extension-soft-delete 1.1.0 → 2.0.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.
Files changed (88) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/generated/nested-ops-meta/index.d.ts +13 -0
  3. package/dist/esm/generated/nested-ops-meta/index.js +107 -0
  4. package/dist/esm/generated/prisma/browser.d.ts +24 -0
  5. package/dist/esm/generated/prisma/browser.js +17 -0
  6. package/dist/esm/generated/prisma/client.d.ts +43 -0
  7. package/dist/esm/generated/prisma/client.js +31 -0
  8. package/dist/esm/generated/prisma/commonInputTypes.d.ts +359 -0
  9. package/dist/esm/generated/prisma/commonInputTypes.js +10 -0
  10. package/dist/esm/generated/prisma/enums.js +10 -0
  11. package/dist/esm/generated/prisma/internal/class.d.ts +165 -0
  12. package/dist/esm/generated/prisma/internal/class.js +49 -0
  13. package/dist/esm/generated/prisma/internal/prismaNamespace.d.ts +815 -0
  14. package/dist/esm/generated/prisma/internal/prismaNamespace.js +131 -0
  15. package/dist/esm/generated/prisma/internal/prismaNamespaceBrowser.d.ts +95 -0
  16. package/dist/esm/generated/prisma/internal/prismaNamespaceBrowser.js +102 -0
  17. package/dist/esm/generated/prisma/models/Comment.d.ts +1768 -0
  18. package/dist/esm/generated/prisma/models/Comment.js +1 -0
  19. package/dist/esm/generated/prisma/models/Post.d.ts +1543 -0
  20. package/dist/esm/generated/prisma/models/Post.js +1 -0
  21. package/dist/esm/generated/prisma/models/Profile.d.ts +1130 -0
  22. package/dist/esm/generated/prisma/models/Profile.js +1 -0
  23. package/dist/esm/generated/prisma/models/User.d.ts +1531 -0
  24. package/dist/esm/generated/prisma/models/User.js +1 -0
  25. package/dist/esm/generated/prisma/models.d.ts +5 -0
  26. package/dist/esm/generated/prisma/models.js +1 -0
  27. package/dist/esm/prisma.config.d.ts +3 -0
  28. package/dist/esm/prisma.config.js +11 -0
  29. package/dist/esm/src/lib/createSoftDeleteExtension.d.ts +2 -0
  30. package/dist/esm/{lib → src/lib}/createSoftDeleteExtension.js +11 -17
  31. package/dist/esm/{lib → src/lib}/helpers/createParams.d.ts +4 -4
  32. package/dist/esm/{lib → src/lib}/helpers/createParams.js +4 -16
  33. package/dist/esm/{lib → src/lib}/types.d.ts +14 -4
  34. package/dist/esm/src/lib/types.js +1 -0
  35. package/dist/generated/nested-ops-meta/index.d.ts +13 -0
  36. package/dist/generated/nested-ops-meta/index.js +110 -0
  37. package/dist/generated/prisma/browser.d.ts +24 -0
  38. package/dist/generated/prisma/browser.js +56 -0
  39. package/dist/generated/prisma/client.d.ts +43 -0
  40. package/dist/generated/prisma/client.js +70 -0
  41. package/dist/generated/prisma/commonInputTypes.d.ts +359 -0
  42. package/dist/generated/prisma/commonInputTypes.js +11 -0
  43. package/dist/generated/prisma/enums.d.ts +1 -0
  44. package/dist/generated/prisma/enums.js +11 -0
  45. package/dist/generated/prisma/internal/class.d.ts +165 -0
  46. package/dist/generated/prisma/internal/class.js +85 -0
  47. package/dist/generated/prisma/internal/prismaNamespace.d.ts +815 -0
  48. package/dist/generated/prisma/internal/prismaNamespace.js +167 -0
  49. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +95 -0
  50. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +138 -0
  51. package/dist/generated/prisma/models/Comment.d.ts +1768 -0
  52. package/dist/generated/prisma/models/Comment.js +2 -0
  53. package/dist/generated/prisma/models/Post.d.ts +1543 -0
  54. package/dist/generated/prisma/models/Post.js +2 -0
  55. package/dist/generated/prisma/models/Profile.d.ts +1130 -0
  56. package/dist/generated/prisma/models/Profile.js +2 -0
  57. package/dist/generated/prisma/models/User.d.ts +1531 -0
  58. package/dist/generated/prisma/models/User.js +2 -0
  59. package/dist/generated/prisma/models.d.ts +5 -0
  60. package/dist/prisma.config.d.ts +3 -0
  61. package/dist/prisma.config.js +13 -0
  62. package/dist/src/lib/createSoftDeleteExtension.d.ts +2 -0
  63. package/dist/{lib → src/lib}/createSoftDeleteExtension.js +12 -19
  64. package/dist/{lib → src/lib}/helpers/createParams.d.ts +4 -4
  65. package/dist/{lib → src/lib}/helpers/createParams.js +4 -16
  66. package/dist/{lib → src/lib}/helpers/modifyResult.js +1 -2
  67. package/dist/{lib → src/lib}/types.d.ts +14 -4
  68. package/dist/src/lib/types.js +2 -0
  69. package/dist/{lib → src/lib}/utils/nestedReads.js +2 -3
  70. package/dist/{lib → src/lib}/utils/resultFiltering.js +2 -3
  71. package/package.json +11 -9
  72. package/dist/esm/lib/createSoftDeleteExtension.d.ts +0 -2
  73. package/dist/lib/createSoftDeleteExtension.d.ts +0 -2
  74. /package/dist/esm/{lib/types.js → generated/prisma/enums.d.ts} +0 -0
  75. /package/dist/esm/{index.d.ts → src/index.d.ts} +0 -0
  76. /package/dist/esm/{index.js → src/index.js} +0 -0
  77. /package/dist/esm/{lib → src/lib}/helpers/modifyResult.d.ts +0 -0
  78. /package/dist/esm/{lib → src/lib}/helpers/modifyResult.js +0 -0
  79. /package/dist/esm/{lib → src/lib}/utils/nestedReads.d.ts +0 -0
  80. /package/dist/esm/{lib → src/lib}/utils/nestedReads.js +0 -0
  81. /package/dist/esm/{lib → src/lib}/utils/resultFiltering.d.ts +0 -0
  82. /package/dist/esm/{lib → src/lib}/utils/resultFiltering.js +0 -0
  83. /package/dist/{lib/types.js → generated/prisma/models.js} +0 -0
  84. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  85. /package/dist/{index.js → src/index.js} +0 -0
  86. /package/dist/{lib → src/lib}/helpers/modifyResult.d.ts +0 -0
  87. /package/dist/{lib → src/lib}/utils/nestedReads.d.ts +0 -0
  88. /package/dist/{lib → src/lib}/utils/resultFiltering.d.ts +0 -0
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export type * from './models/User';
2
+ export type * from './models/Post';
3
+ export type * from './models/Comment';
4
+ export type * from './models/Profile';
5
+ export type * from './commonInputTypes';
@@ -0,0 +1,3 @@
1
+ import "dotenv/config";
2
+ declare const _default: import("@prisma/config").PrismaConfigInternal;
3
+ export default _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("dotenv/config");
4
+ const config_1 = require("prisma/config");
5
+ exports.default = (0, config_1.defineConfig)({
6
+ schema: "prisma/schema.prisma",
7
+ migrations: {
8
+ path: "prisma/migrations",
9
+ },
10
+ datasource: {
11
+ url: process.env.DATABASE_URL,
12
+ },
13
+ });
@@ -0,0 +1,2 @@
1
+ import { Config } from "./types";
2
+ export declare function createSoftDeleteExtension({ models, defaultConfig, modelsMeta, }: Config): (client: any) => import("@prisma/client/extension").PrismaClientExtends<import("@prisma/client/runtime/client").InternalArgs<{}, {}, {}, {}> & import("@prisma/client/runtime/client").DefaultArgs>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSoftDeleteExtension = void 0;
3
+ exports.createSoftDeleteExtension = createSoftDeleteExtension;
4
4
  const extension_1 = require("@prisma/client/extension");
5
5
  const prisma_extension_nested_operations_1 = require("@roundtreasury/prisma-extension-nested-operations");
6
6
  const createParams_1 = require("./helpers/createParams");
@@ -10,27 +10,22 @@ function createSoftDeleteExtension({ models, defaultConfig = {
10
10
  createValue: Boolean,
11
11
  allowToOneUpdates: false,
12
12
  allowCompoundUniqueIndexWhere: false,
13
- }, dmmf, }) {
13
+ }, modelsMeta, }) {
14
14
  if (!defaultConfig.field) {
15
15
  throw new Error("prisma-extension-soft-delete: defaultConfig.field is required");
16
16
  }
17
17
  if (!defaultConfig.createValue) {
18
18
  throw new Error("prisma-extension-soft-delete: defaultConfig.createValue is required");
19
19
  }
20
- let dmmfToUse = dmmf;
21
- if (!dmmfToUse) {
22
- throw new Error("prisma-extension-soft-delete: dmmf is required, pass it in manually");
23
- }
24
20
  const modelConfig = {};
25
21
  Object.keys(models).forEach((model) => {
26
- const modelName = model;
27
- const config = models[modelName];
22
+ const config = models[model];
28
23
  if (config) {
29
- modelConfig[modelName] =
24
+ modelConfig[model] =
30
25
  typeof config === "boolean" && config ? defaultConfig : config;
31
26
  }
32
27
  });
33
- const context = (0, createParams_1.createContext)(dmmfToUse);
28
+ const context = (0, createParams_1.createContext)(modelsMeta);
34
29
  const createParamsByModel = Object.keys(modelConfig).reduce((acc, model) => {
35
30
  const config = modelConfig[model];
36
31
  return {
@@ -65,26 +60,24 @@ function createSoftDeleteExtension({ models, defaultConfig = {
65
60
  },
66
61
  };
67
62
  }, {});
68
- // before handling root params generate deleted value so it is consistent
69
- // for the query. Add it to root params and get it from scope?
70
63
  return extension_1.Prisma.defineExtension((client) => {
71
64
  return client.$extends({
72
65
  query: {
73
66
  $allModels: {
74
- // @ts-expect-error - we don't know what the client is
75
67
  $allOperations: (0, prisma_extension_nested_operations_1.withNestedOperations)({
76
- dmmf: dmmfToUse,
68
+ modelsMeta,
77
69
  async $rootOperation(initialParams) {
78
70
  var _a, _b;
79
- const createParams = (_a = createParamsByModel[initialParams.model || ""]) === null || _a === void 0 ? void 0 : _a[initialParams.operation];
71
+ const model = String(initialParams.model || "");
72
+ const createParams = (_a = createParamsByModel[model]) === null || _a === void 0 ? void 0 : _a[initialParams.operation];
80
73
  if (!createParams)
81
74
  return initialParams.query(initialParams.args);
82
75
  const { params, ctx } = createParams(initialParams);
83
- const { model } = params;
76
+ const { model: paramsModel } = params;
84
77
  const operationChanged = params.operation !== initialParams.operation;
85
78
  const result = operationChanged
86
79
  ? // @ts-expect-error - we don't know what the client is
87
- await client[model[0].toLowerCase() + model.slice(1)][params.operation](params.args)
80
+ await client[paramsModel[0].toLowerCase() + paramsModel.slice(1)][params.operation](params.args)
88
81
  : await params.query(params.args);
89
82
  const modifyResult = (_b = modifyResultByModel[params.model || ""]) === null || _b === void 0 ? void 0 : _b[params.operation];
90
83
  if (!modifyResult)
@@ -93,7 +86,8 @@ function createSoftDeleteExtension({ models, defaultConfig = {
93
86
  },
94
87
  async $allNestedOperations(initialParams) {
95
88
  var _a, _b;
96
- const createParams = (_a = createParamsByModel[initialParams.model || ""]) === null || _a === void 0 ? void 0 : _a[initialParams.operation];
89
+ const model = String(initialParams.model || "");
90
+ const createParams = (_a = createParamsByModel[model]) === null || _a === void 0 ? void 0 : _a[initialParams.operation];
97
91
  if (!createParams)
98
92
  return initialParams.query(initialParams.args);
99
93
  const { params, ctx } = createParams(initialParams);
@@ -109,4 +103,3 @@ function createSoftDeleteExtension({ models, defaultConfig = {
109
103
  });
110
104
  });
111
105
  }
112
- exports.createSoftDeleteExtension = createSoftDeleteExtension;
@@ -1,9 +1,9 @@
1
1
  import { NestedParams } from "@roundtreasury/prisma-extension-nested-operations";
2
- import type { BaseDMMF } from "@prisma/client/runtime/library";
3
- import { Context, ModelConfig } from "../types";
4
- export declare const createContext: (dmmf: BaseDMMF) => Context;
5
- export type Params = Omit<NestedParams<any>, "operation"> & {
2
+ import { Context, ModelConfig, ModelsMeta } from "../types";
3
+ export declare const createContext: (modelsMeta: ModelsMeta) => Context;
4
+ export type Params = Omit<NestedParams<any>, "operation" | "model"> & {
6
5
  operation: string;
6
+ model?: string;
7
7
  };
8
8
  export type CreateParamsReturn = {
9
9
  params: Params;
@@ -2,24 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSelectParams = exports.createIncludeParams = exports.createWhereParams = exports.createAggregateParams = exports.createCountParams = exports.createGroupByParams = exports.createFindManyParams = exports.createFindFirstOrThrowParams = exports.createFindFirstParams = exports.createFindUniqueOrThrowParams = exports.createFindUniqueParams = exports.createUpsertParams = exports.createUpdateManyParams = exports.createUpdateParams = exports.createDeleteManyParams = exports.createDeleteParams = exports.createContext = void 0;
4
4
  const nestedReads_1 = require("../utils/nestedReads");
5
- const createContext = (dmmf) => {
5
+ const createContext = (modelsMeta) => {
6
6
  const uniqueFieldsByModel = {};
7
7
  const uniqueIndexFieldsByModel = {};
8
- dmmf.datamodel.models.forEach((model) => {
9
- // add unique fields derived from indexes
10
- const uniqueIndexFields = [];
11
- model.uniqueFields.forEach((field) => {
12
- uniqueIndexFields.push(field.join("_"));
13
- });
14
- uniqueIndexFieldsByModel[model.name] = uniqueIndexFields;
15
- // add id field and unique fields from @unique decorator
16
- const uniqueFields = [];
17
- model.fields.forEach((field) => {
18
- if (field.isId || field.isUnique) {
19
- uniqueFields.push(field.name);
20
- }
21
- });
22
- uniqueFieldsByModel[model.name] = uniqueFields;
8
+ Object.entries(modelsMeta).forEach(([modelName, meta]) => {
9
+ uniqueFieldsByModel[modelName] = meta.uniqueFields;
10
+ uniqueIndexFieldsByModel[modelName] = meta.uniqueIndexFields;
23
11
  });
24
12
  return { uniqueFieldsByModel, uniqueIndexFieldsByModel };
25
13
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.modifyReadResult = void 0;
3
+ exports.modifyReadResult = modifyReadResult;
4
4
  const nestedReads_1 = require("../utils/nestedReads");
5
5
  const resultFiltering_1 = require("../utils/resultFiltering");
6
6
  function modifyReadResult(_, config, result, params, ctx) {
@@ -13,4 +13,3 @@ function modifyReadResult(_, config, result, params, ctx) {
13
13
  }
14
14
  return result;
15
15
  }
16
- exports.modifyReadResult = modifyReadResult;
@@ -1,5 +1,15 @@
1
- import type { Prisma } from "@prisma/client";
2
- import type { BaseDMMF } from "@prisma/client/runtime/library";
1
+ export type RelationField = {
2
+ name: string;
3
+ kind: string;
4
+ isList: boolean;
5
+ type: string;
6
+ relationName: string;
7
+ };
8
+ export type ModelsMeta = Record<string, {
9
+ uniqueFields: string[];
10
+ uniqueIndexFields: string[];
11
+ relations: RelationField[];
12
+ }>;
3
13
  export type Context = {
4
14
  uniqueFieldsByModel: Record<string, string[]>;
5
15
  uniqueIndexFieldsByModel: Record<string, string[]>;
@@ -11,7 +21,7 @@ export type ModelConfig = {
11
21
  allowCompoundUniqueIndexWhere?: boolean;
12
22
  };
13
23
  export type Config = {
14
- models: Partial<Record<Prisma.ModelName, ModelConfig | boolean>>;
24
+ models: Record<string, ModelConfig | boolean>;
15
25
  defaultConfig?: ModelConfig;
16
- dmmf?: BaseDMMF;
26
+ modelsMeta: ModelsMeta;
17
27
  };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stripDeletedFieldFromResults = exports.addDeletedToSelect = void 0;
3
+ exports.addDeletedToSelect = addDeletedToSelect;
4
+ exports.stripDeletedFieldFromResults = stripDeletedFieldFromResults;
4
5
  function addDeletedToSelect(params, config) {
5
6
  if (params.args.select && !params.args.select[config.field]) {
6
7
  return {
@@ -16,7 +17,6 @@ function addDeletedToSelect(params, config) {
16
17
  }
17
18
  return params;
18
19
  }
19
- exports.addDeletedToSelect = addDeletedToSelect;
20
20
  function stripDeletedFieldFromResults(results, config) {
21
21
  if (Array.isArray(results)) {
22
22
  results === null || results === void 0 ? void 0 : results.forEach((item) => {
@@ -28,4 +28,3 @@ function stripDeletedFieldFromResults(results, config) {
28
28
  }
29
29
  return results;
30
30
  }
31
- exports.stripDeletedFieldFromResults = stripDeletedFieldFromResults;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.filterSoftDeletedResults = exports.shouldFilterDeletedFromReadResult = void 0;
3
+ exports.shouldFilterDeletedFromReadResult = shouldFilterDeletedFromReadResult;
4
+ exports.filterSoftDeletedResults = filterSoftDeletedResults;
4
5
  // Maybe this should return true for non-list relations only?
5
6
  function shouldFilterDeletedFromReadResult(params, config) {
6
7
  return (!params.args.where ||
7
8
  typeof params.args.where[config.field] === "undefined" ||
8
9
  !params.args.where[config.field]);
9
10
  }
10
- exports.shouldFilterDeletedFromReadResult = shouldFilterDeletedFromReadResult;
11
11
  function filterSoftDeletedResults(result, config) {
12
12
  // filter out deleted records from array results
13
13
  if (result && Array.isArray(result)) {
@@ -19,4 +19,3 @@ function filterSoftDeletedResults(result, config) {
19
19
  }
20
20
  return result;
21
21
  }
22
- exports.filterSoftDeletedResults = filterSoftDeletedResults;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@roundtreasury/prisma-extension-soft-delete",
3
- "version": "1.1.0",
4
- "description": "Round Treasury Prisma extension for soft deleting records",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "module": "dist/esm/index.js",
3
+ "version": "2.0.0",
4
+ "description": "Prisma extension for soft deleting records",
5
+ "main": "dist/src/index.js",
6
+ "types": "dist/src/index.d.ts",
7
+ "module": "dist/esm/src/index.js",
8
8
  "scripts": {
9
9
  "build": "npm-run-all build:cjs build:esm",
10
10
  "build:cjs": "tsc -p tsconfig.build.json",
@@ -29,15 +29,17 @@
29
29
  "author": "Olivier Wilkinson",
30
30
  "license": "Apache-2.0",
31
31
  "dependencies": {
32
- "@roundtreasury/prisma-extension-nested-operations": "^1.2.0"
32
+ "@roundtreasury/prisma-extension-nested-operations": "3.0.3"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@prisma/client": "*"
36
36
  },
37
37
  "devDependencies": {
38
- "@prisma/client": "^5.4.2",
38
+ "@prisma/adapter-pg": "^7.0.0",
39
+ "@prisma/client": "^7.8.0",
39
40
  "@types/faker": "^5.5.9",
40
41
  "@types/jest": "^29.2.5",
42
+ "@types/node": "^25.9.2",
41
43
  "@typescript-eslint/eslint-plugin": "^4.14.0",
42
44
  "@typescript-eslint/parser": "^4.14.0",
43
45
  "doctoc": "^2.2.0",
@@ -46,11 +48,11 @@
46
48
  "jest": "^29.3.1",
47
49
  "kcd-scripts": "^5.0.0",
48
50
  "npm-run-all": "^4.1.5",
49
- "prisma": "^5.4.2",
51
+ "prisma": "^7.8.0",
50
52
  "semantic-release": "^17.0.2",
51
53
  "ts-jest": "^29.0.3",
52
54
  "ts-node": "^9.1.1",
53
- "typescript": "^4.1.3"
55
+ "typescript": "^5.4.0"
54
56
  },
55
57
  "repository": {
56
58
  "type": "git",
@@ -1,2 +0,0 @@
1
- import { Config } from "./types";
2
- export declare function createSoftDeleteExtension({ models, defaultConfig, dmmf, }: Config): (client: any) => import("@prisma/client/extension").PrismaClientExtends<import("@prisma/client/runtime/library").InternalArgs<{}, {}, {}, {}> & import("@prisma/client/runtime/library").DefaultArgs>;
@@ -1,2 +0,0 @@
1
- import { Config } from "./types";
2
- export declare function createSoftDeleteExtension({ models, defaultConfig, dmmf, }: Config): (client: any) => import("@prisma/client/extension").PrismaClientExtends<import("@prisma/client/runtime/library").InternalArgs<{}, {}, {}, {}> & import("@prisma/client/runtime/library").DefaultArgs>;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes