@snowtop/ent 0.2.4 → 0.2.6

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 (98) hide show
  1. package/action/action.js +5 -5
  2. package/action/executor.d.ts +1 -1
  3. package/action/executor.js +4 -4
  4. package/action/experimental_action.d.ts +7 -4
  5. package/action/experimental_action.js +18 -8
  6. package/action/operations.js +17 -7
  7. package/action/orchestrator.d.ts +10 -2
  8. package/action/orchestrator.js +29 -31
  9. package/action/privacy.d.ts +2 -2
  10. package/action/relative_value.js +3 -3
  11. package/auth/auth.d.ts +0 -1
  12. package/auth/auth.js +4 -5
  13. package/core/base.js +5 -5
  14. package/core/clause.js +76 -67
  15. package/core/config.d.ts +1 -1
  16. package/core/config.js +22 -9
  17. package/core/context.d.ts +0 -1
  18. package/core/convert.d.ts +0 -1
  19. package/core/convert.js +16 -17
  20. package/core/date.js +1 -2
  21. package/core/db.js +17 -7
  22. package/core/ent.d.ts +2 -0
  23. package/core/ent.js +127 -92
  24. package/core/global_schema.js +6 -7
  25. package/core/loaders/assoc_count_loader.d.ts +2 -2
  26. package/core/loaders/assoc_count_loader.js +17 -7
  27. package/core/loaders/assoc_edge_loader.d.ts +2 -2
  28. package/core/loaders/assoc_edge_loader.js +44 -20
  29. package/core/loaders/cache_utils.d.ts +1 -0
  30. package/core/loaders/cache_utils.js +28 -0
  31. package/core/loaders/index.d.ts +1 -0
  32. package/core/loaders/index.js +4 -1
  33. package/core/loaders/loader.d.ts +2 -0
  34. package/core/loaders/loader.js +20 -3
  35. package/core/loaders/object_loader.d.ts +6 -4
  36. package/core/loaders/object_loader.js +86 -48
  37. package/core/loaders/query_loader.d.ts +2 -2
  38. package/core/loaders/query_loader.js +25 -9
  39. package/core/loaders/raw_count_loader.d.ts +2 -2
  40. package/core/loaders/raw_count_loader.js +22 -10
  41. package/core/logger.js +6 -7
  42. package/core/privacy.d.ts +2 -2
  43. package/core/privacy.js +4 -5
  44. package/core/query/assoc_query.js +17 -7
  45. package/core/query/query.js +17 -7
  46. package/core/query/shared_assoc_test.js +1 -2
  47. package/core/query_impl.js +4 -5
  48. package/core/viewer.d.ts +2 -2
  49. package/graphql/graphql_field_helpers.js +22 -22
  50. package/graphql/mutations/union.js +1 -2
  51. package/graphql/node_resolver.js +7 -7
  52. package/graphql/query/shared_assoc_test.js +1 -2
  53. package/graphql/scalars/date.js +8 -3
  54. package/graphql/scalars/time.d.ts +1 -1
  55. package/imports/dataz/example1/_auth.js +14 -10
  56. package/imports/index.js +18 -9
  57. package/index.js +17 -7
  58. package/names/names.js +61 -18
  59. package/package.json +14 -17
  60. package/parse_schema/parse.js +2 -3
  61. package/schema/binary_field.js +3 -3
  62. package/schema/field.js +45 -35
  63. package/schema/json_field.js +7 -7
  64. package/schema/schema.js +12 -12
  65. package/schema/struct_field.js +4 -4
  66. package/schema/union_field.js +3 -3
  67. package/scripts/custom_compiler.js +17 -7
  68. package/scripts/custom_graphql.js +17 -7
  69. package/scripts/fix_action_exports.js +17 -7
  70. package/scripts/move_types.js +17 -7
  71. package/scripts/read_schema.js +17 -7
  72. package/testutils/action/complex_schemas.js +28 -18
  73. package/testutils/builder.d.ts +1 -1
  74. package/testutils/builder.js +7 -7
  75. package/testutils/db/fixture.js +1 -2
  76. package/testutils/db/temp_db.js +54 -44
  77. package/testutils/db/value.js +3 -4
  78. package/testutils/db_mock.js +12 -0
  79. package/testutils/ent-graphql-tests/index.d.ts +3 -3
  80. package/testutils/ent-graphql-tests/index.js +27 -18
  81. package/testutils/fake_data/const.js +2 -2
  82. package/testutils/fake_data/fake_contact.js +20 -10
  83. package/testutils/fake_data/fake_event.js +20 -10
  84. package/testutils/fake_data/fake_tag.js +21 -11
  85. package/testutils/fake_data/fake_user.js +21 -11
  86. package/testutils/fake_data/test_helpers.js +17 -17
  87. package/testutils/fake_data/user_query.js +19 -9
  88. package/testutils/parse_sql.js +151 -43
  89. package/testutils/query.js +2 -3
  90. package/testutils/soft_delete.js +17 -7
  91. package/testutils/test_edge_global_schema.js +17 -7
  92. package/testutils/write.js +20 -11
  93. package/tsc/ast.js +27 -18
  94. package/tsc/compilerOptions.js +22 -13
  95. package/tsc/move_generated.js +18 -9
  96. package/tsc/transform.js +18 -9
  97. package/tsc/transform_action.js +17 -7
  98. package/tsc/transform_schema.js +17 -7
package/action/action.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clearEdgeTypeInGroup = exports.setEdgeTypeInGroup = exports.saveBuilderX = exports.saveBuilder = exports.WriteOperation = void 0;
3
+ exports.WriteOperation = void 0;
4
+ exports.saveBuilder = saveBuilder;
5
+ exports.saveBuilderX = saveBuilderX;
6
+ exports.setEdgeTypeInGroup = setEdgeTypeInGroup;
7
+ exports.clearEdgeTypeInGroup = clearEdgeTypeInGroup;
4
8
  const base_1 = require("../core/base");
5
9
  Object.defineProperty(exports, "WriteOperation", { enumerable: true, get: function () { return base_1.WriteOperation; } });
6
10
  const ent_1 = require("../core/ent");
@@ -8,11 +12,9 @@ const logger_1 = require("../core/logger");
8
12
  async function saveBuilder(builder) {
9
13
  await saveBuilderImpl(builder, false);
10
14
  }
11
- exports.saveBuilder = saveBuilder;
12
15
  async function saveBuilderX(builder) {
13
16
  await saveBuilderImpl(builder, true);
14
17
  }
15
- exports.saveBuilderX = saveBuilderX;
16
18
  async function saveBuilderImpl(builder, throwErr) {
17
19
  let changeset;
18
20
  try {
@@ -83,7 +85,6 @@ async function setEdgeTypeInGroup(orchestrator, inputEnumValue, id1, id2, id2Nod
83
85
  }
84
86
  await Promise.all(promises);
85
87
  }
86
- exports.setEdgeTypeInGroup = setEdgeTypeInGroup;
87
88
  async function clearEdgeTypeInGroup(orchestrator, id1, id2, m) {
88
89
  let promises = [];
89
90
  for (const [_, edgeType] of m) {
@@ -102,4 +103,3 @@ async function clearEdgeTypeInGroup(orchestrator, id1, id2, m) {
102
103
  }
103
104
  await Promise.all(promises);
104
105
  }
105
- exports.clearEdgeTypeInGroup = clearEdgeTypeInGroup;
@@ -12,7 +12,7 @@ export declare class ListBasedExecutor<T extends Ent> implements Executor {
12
12
  private complexOptions?;
13
13
  private idx;
14
14
  builder?: Builder<Ent> | undefined;
15
- constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], options?: OrchestratorOptions<T, Data, Viewer<Ent<any> | null, ID | null>, T | null> | undefined, complexOptions?: ComplexExecutorOptions | undefined);
15
+ constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], options?: OrchestratorOptions<T, Data, Viewer> | undefined, complexOptions?: ComplexExecutorOptions | undefined);
16
16
  private lastOp;
17
17
  private createdEnt;
18
18
  private changedOps;
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.executeOperations = exports.ComplexExecutor = exports.ListBasedExecutor = void 0;
6
+ exports.ComplexExecutor = exports.ListBasedExecutor = void 0;
7
+ exports.executeOperations = executeOperations;
7
8
  const graph_data_structure_1 = require("graph-data-structure");
8
9
  const ent_1 = require("../core/ent");
9
10
  const db_1 = __importDefault(require("../core/db"));
@@ -122,7 +123,7 @@ class ComplexExecutor {
122
123
  this.executors = [];
123
124
  this.changedOps = new Map();
124
125
  this.builder = options?.builder;
125
- let graph = (0, graph_data_structure_1.Graph)();
126
+ const graph = new graph_data_structure_1.Graph();
126
127
  const changesetMap = new Map();
127
128
  const impl = (c) => {
128
129
  changesetMap.set(c.placeholderID.toString(), c);
@@ -155,7 +156,7 @@ class ComplexExecutor {
155
156
  // TODO: can this logic be rewritten to not have a set yet avoid duplicates?
156
157
  let nodeOps = new Set();
157
158
  let remainOps = new Set();
158
- let sorted = graph.topologicalSort(graph.nodes());
159
+ const sorted = (0, graph_data_structure_1.topologicalSort)(graph);
159
160
  sorted.forEach((node) => {
160
161
  let c = changesetMap.get(node);
161
162
  if (!c) {
@@ -338,7 +339,6 @@ async function executeOperations(executor, context, trackOps) {
338
339
  }
339
340
  return operations;
340
341
  }
341
- exports.executeOperations = executeOperations;
342
342
  function maybeChangeOp(op, complexOptions) {
343
343
  if (!op ||
344
344
  !complexOptions?.conditionalOverride ||
@@ -1,10 +1,11 @@
1
1
  import { Orchestrator } from "./orchestrator";
2
- import { Viewer, Ent, Data } from "../core/base";
2
+ import { Viewer, Ent, Data, Context } from "../core/base";
3
3
  import { Action, WriteOperation, Builder, Trigger, Observer, Changeset, Validator } from "./action";
4
4
  export interface ActionOptions<TEnt extends Ent<TViewer>, TViewer extends Viewer, TData extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
5
5
  existingEnt: TExistingEnt;
6
6
  input?: TData;
7
7
  operation?: WriteOperation;
8
+ viewerForEntLoad?(data: Data, ctx?: Context<TViewer>): TViewer | Promise<TViewer>;
8
9
  }
9
10
  type MaybeNull<T extends Ent> = T | null;
10
11
  type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
@@ -23,10 +24,12 @@ export declare class BaseAction<TEnt extends Ent<TViewer>, TViewer extends Viewe
23
24
  builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>;
24
25
  builder: EntBuilder<TEnt, TViewer, TInput, TExistingEnt>;
25
26
  private input;
27
+ options: ActionOptions<TEnt, TViewer, TInput, TExistingEnt>;
26
28
  getPrivacyPolicy(): import("../core/base").PrivacyPolicy<Ent<Viewer<Ent<any> | null, import("../core/base").ID | null>>, Viewer<Ent<any> | null, import("../core/base").ID | null>>;
27
29
  getTriggers(): Trigger<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt>[];
28
30
  getObservers(): Observer<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt>[];
29
31
  getValidators(): Validator<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt>[];
32
+ viewerForEntLoad(data: Data, context?: Context<TViewer> | undefined): TViewer | Promise<TViewer>;
30
33
  constructor(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>, options: ActionOptions<TEnt, TViewer, TInput, TExistingEnt>);
31
34
  static createBuilder<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>>(viewer: Viewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>, options: ActionOptions<TEnt, TViewer, TInput, TExistingEnt>): Builder<TEnt>;
32
35
  /**
@@ -44,7 +47,7 @@ export interface BuilderConstructor<TEnt extends Ent<TViewer>, TViewer extends V
44
47
  new (viewer: TViewer, operation: WriteOperation, action: Action<TEnt, any, TViewer, TInput, TExistingEnt>, existingEnt: TExistingEnt): EntBuilder<TEnt, TViewer, TInput, TExistingEnt>;
45
48
  }
46
49
  export declare function updateRawObject<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput): Promise<TEnt>;
47
- export declare function getSimpleEditAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput): BaseAction<TEnt, TViewer, TInput, TEnt>;
48
- export declare function getSimpleDeleteAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput): BaseAction<TEnt, TViewer, TInput, TEnt>;
49
- export declare function getSimpleInsertAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, null>, input: TInput): BaseAction<TEnt, TViewer, TInput, null>;
50
+ export declare function getSimpleEditAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput, opts?: Omit<ActionOptions<TEnt, TViewer, TInput, TEnt>, "operation" | "input" | "existingEnt">): BaseAction<TEnt, TViewer, TInput, TEnt>;
51
+ export declare function getSimpleDeleteAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput, opts?: Omit<ActionOptions<TEnt, TViewer, TInput, null>, "operation" | "input" | "existingEnt">): BaseAction<TEnt, TViewer, TInput, TEnt>;
52
+ export declare function getSimpleInsertAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, null>, input: TInput, opts?: Omit<ActionOptions<TEnt, TViewer, TInput, null>, "operation" | "input" | "existingEnt">): BaseAction<TEnt, TViewer, TInput, null>;
50
53
  export {};
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSimpleInsertAction = exports.getSimpleDeleteAction = exports.getSimpleEditAction = exports.updateRawObject = exports.BaseAction = void 0;
3
+ exports.BaseAction = void 0;
4
+ exports.updateRawObject = updateRawObject;
5
+ exports.getSimpleEditAction = getSimpleEditAction;
6
+ exports.getSimpleDeleteAction = getSimpleDeleteAction;
7
+ exports.getSimpleInsertAction = getSimpleInsertAction;
4
8
  const privacy_1 = require("../core/privacy");
5
9
  const action_1 = require("./action");
6
10
  class BaseAction {
@@ -16,6 +20,12 @@ class BaseAction {
16
20
  getValidators() {
17
21
  return [];
18
22
  }
23
+ viewerForEntLoad(data, context) {
24
+ if (this.options.viewerForEntLoad) {
25
+ return this.options.viewerForEntLoad(data, context);
26
+ }
27
+ return this.viewer;
28
+ }
19
29
  constructor(viewer, builderCtr, options) {
20
30
  this.viewer = viewer;
21
31
  this.builderCtr = builderCtr;
@@ -30,6 +40,7 @@ class BaseAction {
30
40
  }
31
41
  this.input = options?.input || {};
32
42
  this.builder = new builderCtr(viewer, operation, this, options.existingEnt);
43
+ this.options = options;
33
44
  }
34
45
  static createBuilder(viewer, builderCtr, options) {
35
46
  let action = new BaseAction(viewer, builderCtr, options);
@@ -87,33 +98,32 @@ async function updateRawObject(viewer, builderCtr, existingEnt, input) {
87
98
  });
88
99
  return action.saveX();
89
100
  }
90
- exports.updateRawObject = updateRawObject;
91
101
  // TODO need to fix types for all these
92
102
  // creates an action which has no privacy, triggers, observers etc
93
103
  // does do field validation
94
104
  // useful to batch a bunch of writes together with BaseAction.bulkAction
95
105
  // note that only editable fields in the builder can be passed here
96
- function getSimpleEditAction(viewer, builderCtr, existingEnt, input) {
106
+ function getSimpleEditAction(viewer, builderCtr, existingEnt, input, opts) {
97
107
  return new BaseAction(viewer, builderCtr, {
98
108
  existingEnt: existingEnt,
99
109
  operation: action_1.WriteOperation.Edit,
100
110
  input,
111
+ ...opts,
101
112
  });
102
113
  }
103
- exports.getSimpleEditAction = getSimpleEditAction;
104
- function getSimpleDeleteAction(viewer, builderCtr, existingEnt, input) {
114
+ function getSimpleDeleteAction(viewer, builderCtr, existingEnt, input, opts) {
105
115
  return new BaseAction(viewer, builderCtr, {
106
116
  existingEnt: existingEnt,
107
117
  operation: action_1.WriteOperation.Delete,
108
118
  input,
119
+ ...opts,
109
120
  });
110
121
  }
111
- exports.getSimpleDeleteAction = getSimpleDeleteAction;
112
- function getSimpleInsertAction(viewer, builderCtr, input) {
122
+ function getSimpleInsertAction(viewer, builderCtr, input, opts) {
113
123
  return new BaseAction(viewer, builderCtr, {
114
124
  operation: action_1.WriteOperation.Insert,
115
125
  input,
116
126
  existingEnt: null,
127
+ ...opts,
117
128
  });
118
129
  }
119
- exports.getSimpleInsertAction = getSimpleInsertAction;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.ConditionalNodeOperation = exports.ConditionalOperation = exports.EdgeOperation = exports.EditNodeOperation = exports.NoOperation = exports.RawQueryOperation = exports.DeleteNodeOperation = void 0;
27
37
  const action_1 = require("../action");
@@ -73,6 +73,14 @@ export declare class Orchestrator<TEnt extends Ent<TViewer>, TInput extends Data
73
73
  private getSQLStatementOperation;
74
74
  private getWriteOpForSQLStamentOp;
75
75
  getPossibleUnsafeEntForPrivacy(): Promise<TEnt>;
76
+ /**
77
+ * This gets the fields that were explicitly set plus any default or transformed values
78
+ * mainly exists to get default fields e.g. default id to be used in triggers
79
+ * NOTE: this API may change in the future
80
+ * doesn't work to get ids for autoincrement keys
81
+ * PS contrasted with getValidatedFields() which returns the format that would be written to the db
82
+ * i.e. includes lists which have been converted to JSON strings, etc
83
+ */
76
84
  getEditedData(): Promise<Data>;
77
85
  /**
78
86
  * @returns validated and formatted fields that would be written to the db
@@ -114,11 +122,11 @@ export declare class EntChangeset<TEnt extends Ent<TViewer>, TViewer extends Vie
114
122
  readonly placeholderID: ID;
115
123
  private conditionalOverride;
116
124
  operations: DataOperation<any, TViewer>[];
117
- dependencies?: Map<ID, Builder<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>, Ent<Viewer<Ent<any> | null, ID | null>> | null>> | undefined;
125
+ dependencies?: Map<ID, Builder<Ent>> | undefined;
118
126
  changesets?: Changeset[] | undefined;
119
127
  private options?;
120
128
  private _executor;
121
- constructor(viewer: Viewer, builder: Builder<TEnt, TViewer>, placeholderID: ID, conditionalOverride: boolean, operations: DataOperation<any, TViewer>[], dependencies?: Map<ID, Builder<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>, Ent<Viewer<Ent<any> | null, ID | null>> | null>> | undefined, changesets?: Changeset[] | undefined, options?: OrchestratorOptions<TEnt, Data, TViewer, MaybeNull<TEnt>> | undefined);
129
+ constructor(viewer: Viewer, builder: Builder<TEnt, TViewer>, placeholderID: ID, conditionalOverride: boolean, operations: DataOperation<any, TViewer>[], dependencies?: Map<ID, Builder<Ent>> | undefined, changesets?: Changeset[] | undefined, options?: OrchestratorOptions<TEnt, Data, TViewer> | undefined);
122
130
  static changesetFrom<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, ops: DataOperation<any, TViewer>[]): EntChangeset<any, TViewer>;
123
131
  static changesetFromQueries<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, queries: Array<string | parameterizedQueryOptions>): EntChangeset<any, TViewer>;
124
132
  private static changesetFromEdgeOp;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -93,6 +103,7 @@ class Orchestrator {
93
103
  this.edgeSet = new Set();
94
104
  this.edges = new Map();
95
105
  this.conditionalEdges = new Map();
106
+ this.validatedFields = null;
96
107
  this.changesets = [];
97
108
  this.dependencies = new Map();
98
109
  this.fieldsToResolve = [];
@@ -401,10 +412,14 @@ class Orchestrator {
401
412
  const { schemaFields, editedData } = await this.memoizedGetFields();
402
413
  return this.getEntForPrivacyPolicyImpl(schemaFields, editedData, this.options.viewer);
403
414
  }
404
- // this gets the fields that were explicitly set plus any default or transformed values
405
- // mainly exists to get default fields e.g. default id to be used in triggers
406
- // NOTE: this API may change in the future
407
- // doesn't work to get ids for autoincrement keys
415
+ /**
416
+ * This gets the fields that were explicitly set plus any default or transformed values
417
+ * mainly exists to get default fields e.g. default id to be used in triggers
418
+ * NOTE: this API may change in the future
419
+ * doesn't work to get ids for autoincrement keys
420
+ * PS contrasted with getValidatedFields() which returns the format that would be written to the db
421
+ * i.e. includes lists which have been converted to JSON strings, etc
422
+ */
408
423
  async getEditedData() {
409
424
  const { editedData } = await this.memoizedGetFields();
410
425
  return editedData;
@@ -519,7 +534,7 @@ class Orchestrator {
519
534
  return errors;
520
535
  }
521
536
  async triggers(action, builder, triggers) {
522
- let groups = [];
537
+ const groups = [];
523
538
  let lastArray = 0;
524
539
  let prevWasArray = false;
525
540
  for (let i = 0; i < triggers.length; i++) {
@@ -696,29 +711,12 @@ class Orchestrator {
696
711
  data[dbKey] = value;
697
712
  }
698
713
  if (defaultValue !== undefined) {
699
- // Format defaults early so JSON/list defaults are DB-ready in edited data.
700
- let formattedDefaultValue = defaultValue;
701
- if (defaultValue !== null && !this.isBuilder(defaultValue) && field.format) {
702
- let valid = true;
703
- if (field.valid) {
704
- valid = field.valid(defaultValue);
705
- if ((0, types_1.isPromise)(valid)) {
706
- valid = await valid;
707
- }
708
- }
709
- if (valid) {
710
- formattedDefaultValue = field.format(defaultValue);
711
- if ((0, types_1.isPromise)(formattedDefaultValue)) {
712
- formattedDefaultValue = await formattedDefaultValue;
713
- }
714
- }
715
- }
716
714
  updateInput = true;
717
715
  if (updateOnlyIfOther) {
718
- defaultData[dbKey] = formattedDefaultValue;
716
+ defaultData[dbKey] = defaultValue;
719
717
  }
720
718
  else {
721
- data[dbKey] = formattedDefaultValue;
719
+ data[dbKey] = defaultValue;
722
720
  }
723
721
  this.defaultFieldsByFieldName[fieldName] = defaultValue;
724
722
  this.defaultFieldsByTSName[this.getInputKey(fieldName)] = defaultValue;
@@ -2,11 +2,11 @@ import { Builder } from "./action";
2
2
  import { Viewer, ID, Ent, PrivacyResult, PrivacyPolicyRule } from "../core/base";
3
3
  export declare class DenyIfBuilder implements PrivacyPolicyRule {
4
4
  private id?;
5
- constructor(id?: ID | Builder<Ent<Viewer<Ent<any> | null, ID | null>>, any, Ent<Viewer<Ent<any> | null, ID | null>> | null> | undefined);
5
+ constructor(id?: (ID | Builder<Ent, any>) | undefined);
6
6
  apply(_v: Viewer, _ent: Ent): Promise<PrivacyResult>;
7
7
  }
8
8
  export declare class AllowIfBuilder implements PrivacyPolicyRule {
9
9
  private id?;
10
- constructor(id?: ID | Builder<Ent<Viewer<Ent<any> | null, ID | null>>, any, Ent<Viewer<Ent<any> | null, ID | null>> | null> | undefined);
10
+ constructor(id?: (ID | Builder<Ent, any>) | undefined);
11
11
  apply(_v: Viewer, _ent: Ent): Promise<PrivacyResult>;
12
12
  }
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.maybeConvertRelativeInputPlusExpressions = exports.convertRelativeInput = exports.NumberOps = void 0;
3
+ exports.NumberOps = void 0;
4
+ exports.convertRelativeInput = convertRelativeInput;
5
+ exports.maybeConvertRelativeInputPlusExpressions = maybeConvertRelativeInputPlusExpressions;
4
6
  const clause_1 = require("../core/clause");
5
7
  function addNumber(delta) {
6
8
  return {
@@ -101,7 +103,6 @@ function convertRelativeInput(rel, col, existing) {
101
103
  }
102
104
  throw new Error(`error in convertRelativeInput. shouldn't have gotten here`);
103
105
  }
104
- exports.convertRelativeInput = convertRelativeInput;
105
106
  function maybeConvertRelativeInputPlusExpressions(rel, col, existing, expressions) {
106
107
  if (rel === null) {
107
108
  return rel;
@@ -122,4 +123,3 @@ function maybeConvertRelativeInputPlusExpressions(rel, col, existing, expression
122
123
  expressions.set(col, clause);
123
124
  return value;
124
125
  }
125
- exports.maybeConvertRelativeInputPlusExpressions = maybeConvertRelativeInputPlusExpressions;
package/auth/auth.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Viewer } from "../core/base";
3
2
  import { RequestContext } from "../core/context";
4
3
  import { IncomingMessage, ServerResponse } from "http";
package/auth/auth.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildContext = exports.getLoggedInViewer = exports.clearAuthHandlers = exports.registerAuthHandler = void 0;
3
+ exports.registerAuthHandler = registerAuthHandler;
4
+ exports.clearAuthHandlers = clearAuthHandlers;
5
+ exports.getLoggedInViewer = getLoggedInViewer;
6
+ exports.buildContext = buildContext;
4
7
  const viewer_1 = require("../core/viewer");
5
8
  const context_1 = require("../core/context");
6
9
  const logger_1 = require("../core/logger");
@@ -8,11 +11,9 @@ let handlers = new Map();
8
11
  async function registerAuthHandler(name, auth) {
9
12
  handlers.set(name, auth);
10
13
  }
11
- exports.registerAuthHandler = registerAuthHandler;
12
14
  async function clearAuthHandlers() {
13
15
  handlers.clear();
14
16
  }
15
- exports.clearAuthHandlers = clearAuthHandlers;
16
17
  async function getLoggedInViewer(context) {
17
18
  for (const [name, authHandler] of handlers) {
18
19
  let v = await authHandler.authViewer(context);
@@ -24,7 +25,6 @@ async function getLoggedInViewer(context) {
24
25
  (0, logger_1.log)("info", "no auth handler returned viewer. default to logged out viewer");
25
26
  return null;
26
27
  }
27
- exports.getLoggedInViewer = getLoggedInViewer;
28
28
  async function buildContext(request, response) {
29
29
  const ctx = new contextImpl(request, response);
30
30
  let viewer = await getLoggedInViewer(ctx);
@@ -34,7 +34,6 @@ async function buildContext(request, response) {
34
34
  }
35
35
  return ctx;
36
36
  }
37
- exports.buildContext = buildContext;
38
37
  class contextImpl {
39
38
  constructor(request, response) {
40
39
  this.request = request;
package/core/base.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WriteOperation = exports.DenyWithReason = exports.Deny = exports.Skip = exports.Allow = void 0;
3
+ exports.WriteOperation = void 0;
4
+ exports.Allow = Allow;
5
+ exports.Skip = Skip;
6
+ exports.Deny = Deny;
7
+ exports.DenyWithReason = DenyWithReason;
4
8
  // Privacy
5
9
  var privacyResult;
6
10
  (function (privacyResult) {
@@ -15,21 +19,18 @@ const allow = {
15
19
  function Allow() {
16
20
  return allow;
17
21
  }
18
- exports.Allow = Allow;
19
22
  const skip = {
20
23
  result: privacyResult.Skip,
21
24
  };
22
25
  function Skip() {
23
26
  return skip;
24
27
  }
25
- exports.Skip = Skip;
26
28
  const deny = {
27
29
  result: privacyResult.Deny,
28
30
  };
29
31
  function Deny() {
30
32
  return deny;
31
33
  }
32
- exports.Deny = Deny;
33
34
  class DenyWithReasonError extends Error {
34
35
  constructor(privacyPolicy, rule, msg, ent) {
35
36
  super(msg);
@@ -52,7 +53,6 @@ function DenyWithReason(e) {
52
53
  error: e,
53
54
  };
54
55
  }
55
- exports.DenyWithReason = DenyWithReason;
56
56
  var WriteOperation;
57
57
  (function (WriteOperation) {
58
58
  WriteOperation["Insert"] = "insert";