@memberjunction/metadata-sync 6.2.0-edge.4 → 6.2.0-edge.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 (143) hide show
  1. package/README.md +120 -52
  2. package/dist/config.d.ts +18 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +3 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/RecordProcessor.d.ts +98 -0
  10. package/dist/lib/RecordProcessor.d.ts.map +1 -1
  11. package/dist/lib/RecordProcessor.js +424 -22
  12. package/dist/lib/RecordProcessor.js.map +1 -1
  13. package/dist/lib/RelatedEntityHandler.d.ts +4 -1
  14. package/dist/lib/RelatedEntityHandler.d.ts.map +1 -1
  15. package/dist/lib/RelatedEntityHandler.js +49 -11
  16. package/dist/lib/RelatedEntityHandler.js.map +1 -1
  17. package/dist/lib/created-record-key.d.ts +34 -0
  18. package/dist/lib/created-record-key.d.ts.map +1 -0
  19. package/dist/lib/created-record-key.js +46 -0
  20. package/dist/lib/created-record-key.js.map +1 -0
  21. package/dist/lib/deletion-auditor.d.ts.map +1 -1
  22. package/dist/lib/deletion-auditor.js +34 -3
  23. package/dist/lib/deletion-auditor.js.map +1 -1
  24. package/dist/lib/entity-field-names.d.ts +11 -0
  25. package/dist/lib/entity-field-names.d.ts.map +1 -0
  26. package/dist/lib/entity-field-names.js +15 -0
  27. package/dist/lib/entity-field-names.js.map +1 -0
  28. package/dist/lib/env-derived-fields.d.ts +23 -0
  29. package/dist/lib/env-derived-fields.d.ts.map +1 -0
  30. package/dist/lib/env-derived-fields.js +53 -0
  31. package/dist/lib/env-derived-fields.js.map +1 -0
  32. package/dist/lib/env-display.d.ts +54 -0
  33. package/dist/lib/env-display.d.ts.map +1 -0
  34. package/dist/lib/env-display.js +156 -0
  35. package/dist/lib/env-display.js.map +1 -0
  36. package/dist/lib/env-reference.d.ts +104 -0
  37. package/dist/lib/env-reference.d.ts.map +1 -0
  38. package/dist/lib/env-reference.js +241 -0
  39. package/dist/lib/env-reference.js.map +1 -0
  40. package/dist/lib/env-sql-redactor.d.ts +74 -0
  41. package/dist/lib/env-sql-redactor.d.ts.map +1 -0
  42. package/dist/lib/env-sql-redactor.js +232 -0
  43. package/dist/lib/env-sql-redactor.js.map +1 -0
  44. package/dist/lib/existing-record-index.d.ts +70 -0
  45. package/dist/lib/existing-record-index.d.ts.map +1 -0
  46. package/dist/lib/existing-record-index.js +158 -0
  47. package/dist/lib/existing-record-index.js.map +1 -0
  48. package/dist/lib/ignore-directories.d.ts +10 -0
  49. package/dist/lib/ignore-directories.d.ts.map +1 -0
  50. package/dist/lib/ignore-directories.js +12 -0
  51. package/dist/lib/ignore-directories.js.map +1 -0
  52. package/dist/lib/json-record-lines.d.ts +17 -0
  53. package/dist/lib/json-record-lines.d.ts.map +1 -0
  54. package/dist/lib/json-record-lines.js +170 -0
  55. package/dist/lib/json-record-lines.js.map +1 -0
  56. package/dist/lib/json-subproperty-externalization.d.ts.map +1 -1
  57. package/dist/lib/json-subproperty-externalization.js +3 -1
  58. package/dist/lib/json-subproperty-externalization.js.map +1 -1
  59. package/dist/lib/lookup-reference.d.ts +38 -0
  60. package/dist/lib/lookup-reference.d.ts.map +1 -0
  61. package/dist/lib/lookup-reference.js +62 -0
  62. package/dist/lib/lookup-reference.js.map +1 -0
  63. package/dist/lib/lookup-sql.d.ts +108 -0
  64. package/dist/lib/lookup-sql.d.ts.map +1 -0
  65. package/dist/lib/lookup-sql.js +231 -0
  66. package/dist/lib/lookup-sql.js.map +1 -0
  67. package/dist/lib/natural-key-preflight.d.ts +86 -0
  68. package/dist/lib/natural-key-preflight.d.ts.map +1 -0
  69. package/dist/lib/natural-key-preflight.js +173 -0
  70. package/dist/lib/natural-key-preflight.js.map +1 -0
  71. package/dist/lib/provider-utils.d.ts.map +1 -1
  72. package/dist/lib/provider-utils.js +2 -4
  73. package/dist/lib/provider-utils.js.map +1 -1
  74. package/dist/lib/pull-option-overrides.d.ts +24 -0
  75. package/dist/lib/pull-option-overrides.d.ts.map +1 -0
  76. package/dist/lib/pull-option-overrides.js +39 -0
  77. package/dist/lib/pull-option-overrides.js.map +1 -0
  78. package/dist/lib/push-directories.d.ts +42 -0
  79. package/dist/lib/push-directories.d.ts.map +1 -0
  80. package/dist/lib/push-directories.js +71 -0
  81. package/dist/lib/push-directories.js.map +1 -0
  82. package/dist/lib/push-when.d.ts +38 -0
  83. package/dist/lib/push-when.d.ts.map +1 -0
  84. package/dist/lib/push-when.js +84 -0
  85. package/dist/lib/push-when.js.map +1 -0
  86. package/dist/lib/record-dependency-analyzer.d.ts +11 -2
  87. package/dist/lib/record-dependency-analyzer.d.ts.map +1 -1
  88. package/dist/lib/record-dependency-analyzer.js +48 -71
  89. package/dist/lib/record-dependency-analyzer.js.map +1 -1
  90. package/dist/lib/record-file-glob.d.ts +11 -0
  91. package/dist/lib/record-file-glob.d.ts.map +1 -0
  92. package/dist/lib/record-file-glob.js +10 -0
  93. package/dist/lib/record-file-glob.js.map +1 -0
  94. package/dist/lib/reference-parser.d.ts +3 -2
  95. package/dist/lib/reference-parser.d.ts.map +1 -1
  96. package/dist/lib/reference-parser.js +27 -27
  97. package/dist/lib/reference-parser.js.map +1 -1
  98. package/dist/lib/schema-placeholders.d.ts +29 -0
  99. package/dist/lib/schema-placeholders.d.ts.map +1 -0
  100. package/dist/lib/schema-placeholders.js +72 -0
  101. package/dist/lib/schema-placeholders.js.map +1 -0
  102. package/dist/lib/sql-logger.d.ts +9 -1
  103. package/dist/lib/sql-logger.d.ts.map +1 -1
  104. package/dist/lib/sql-logger.js +12 -7
  105. package/dist/lib/sql-logger.js.map +1 -1
  106. package/dist/lib/sql-set-line.d.ts +26 -0
  107. package/dist/lib/sql-set-line.d.ts.map +1 -0
  108. package/dist/lib/sql-set-line.js +84 -0
  109. package/dist/lib/sql-set-line.js.map +1 -0
  110. package/dist/lib/sync-engine.d.ts +58 -4
  111. package/dist/lib/sync-engine.d.ts.map +1 -1
  112. package/dist/lib/sync-engine.js +243 -59
  113. package/dist/lib/sync-engine.js.map +1 -1
  114. package/dist/lib/sync-state-manager.d.ts +7 -3
  115. package/dist/lib/sync-state-manager.d.ts.map +1 -1
  116. package/dist/lib/sync-state-manager.js +19 -4
  117. package/dist/lib/sync-state-manager.js.map +1 -1
  118. package/dist/lib/watch-file-filter.d.ts +31 -0
  119. package/dist/lib/watch-file-filter.d.ts.map +1 -0
  120. package/dist/lib/watch-file-filter.js +64 -0
  121. package/dist/lib/watch-file-filter.js.map +1 -0
  122. package/dist/plugins/index.d.ts.map +1 -1
  123. package/dist/plugins/index.js +44 -14
  124. package/dist/plugins/index.js.map +1 -1
  125. package/dist/services/PullService.d.ts +41 -1
  126. package/dist/services/PullService.d.ts.map +1 -1
  127. package/dist/services/PullService.js +261 -101
  128. package/dist/services/PullService.js.map +1 -1
  129. package/dist/services/PushService.d.ts +80 -0
  130. package/dist/services/PushService.d.ts.map +1 -1
  131. package/dist/services/PushService.js +531 -189
  132. package/dist/services/PushService.js.map +1 -1
  133. package/dist/services/ValidationService.d.ts +43 -8
  134. package/dist/services/ValidationService.d.ts.map +1 -1
  135. package/dist/services/ValidationService.js +338 -127
  136. package/dist/services/ValidationService.js.map +1 -1
  137. package/dist/services/WatchService.d.ts +28 -0
  138. package/dist/services/WatchService.d.ts.map +1 -1
  139. package/dist/services/WatchService.js +226 -74
  140. package/dist/services/WatchService.js.map +1 -1
  141. package/dist/types/validation.d.ts +6 -0
  142. package/dist/types/validation.d.ts.map +1 -1
  143. package/package.json +17 -16
@@ -13,6 +13,7 @@ import * as fs from 'fs';
13
13
  import * as path from 'path';
14
14
  import { ResolveStartupMode, SetProvider, StartupManager } from '@memberjunction/core';
15
15
  import { minimatch } from 'minimatch';
16
+ import { IsIgnoredDirectoryName } from './ignore-directories.js';
16
17
  /** Global mssql ConnectionPool (SQL Server path only) */
17
18
  let globalPool = null;
18
19
  /** Global pg.Pool (PostgreSQL path only) — typed loosely to avoid a hard pg dep at import time */
@@ -323,10 +324,7 @@ export function FindEntityDirectories(dir, specificDir, directoryOrder, ignoreDi
323
324
  for (const entry of entries) {
324
325
  if (entry.isDirectory() && !entry.name.startsWith('.')) {
325
326
  // Check if this directory should be ignored
326
- if (ignoreDirectories && ignoreDirectories.some(pattern => {
327
- // Simple pattern matching: exact name or ends with pattern
328
- return entry.name === pattern || entry.name.endsWith(pattern);
329
- })) {
327
+ if (IsIgnoredDirectoryName(entry.name, ignoreDirectories)) {
330
328
  continue;
331
329
  }
332
330
  const subDir = path.join(dir, entry.name);
@@ -1 +1 @@
1
- {"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../../src/lib/provider-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-utils.js","sourceRoot":"","sources":["../../src/lib/provider-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview Applies one pull run's CLI overrides to an entity folder's config.
3
+ * @module pull-option-overrides
4
+ */
5
+ import type { EntityConfig } from '../config.js';
6
+ /** Pull settings that CLI flags can set for one run. */
7
+ export interface PullFieldOverrides {
8
+ /** Replaces the folder's pull.mergeStrategy. */
9
+ MergeStrategy?: 'overwrite' | 'merge' | 'skip';
10
+ /** Added to the folder's pull.preserveFields. */
11
+ PreserveFields?: string[];
12
+ /** Added to the folder's pull.excludeFields. */
13
+ ExcludeFields?: string[];
14
+ /** Replaces the folder's pull.updateExistingRecords when given. */
15
+ UpdateExistingRecords?: boolean;
16
+ /** Replaces the folder's pull.createNewFileIfNotFound when given. */
17
+ CreateNewFileIfNotFound?: boolean;
18
+ }
19
+ /**
20
+ * Returns a copy of the config with the overrides applied. Returns the same config
21
+ * object when there is nothing to apply.
22
+ */
23
+ export declare function ApplyPullOverrides(config: EntityConfig, overrides: PullFieldOverrides): EntityConfig;
24
+ //# sourceMappingURL=pull-option-overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-option-overrides.d.ts","sourceRoot":"","sources":["../../src/lib/pull-option-overrides.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qEAAqE;IACrE,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,GAAG,YAAY,CA2BpG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview Applies one pull run's CLI overrides to an entity folder's config.
3
+ * @module pull-option-overrides
4
+ */
5
+ /**
6
+ * Returns a copy of the config with the overrides applied. Returns the same config
7
+ * object when there is nothing to apply.
8
+ */
9
+ export function ApplyPullOverrides(config, overrides) {
10
+ const hasOverride = !!overrides.MergeStrategy ||
11
+ !!overrides.PreserveFields?.length ||
12
+ !!overrides.ExcludeFields?.length ||
13
+ overrides.UpdateExistingRecords !== undefined ||
14
+ overrides.CreateNewFileIfNotFound !== undefined;
15
+ if (!hasOverride) {
16
+ return config;
17
+ }
18
+ const pull = { ...config.pull };
19
+ if (overrides.MergeStrategy) {
20
+ pull.mergeStrategy = overrides.MergeStrategy;
21
+ }
22
+ if (overrides.PreserveFields?.length) {
23
+ pull.preserveFields = unique([...(pull.preserveFields ?? []), ...overrides.PreserveFields]);
24
+ }
25
+ if (overrides.ExcludeFields?.length) {
26
+ pull.excludeFields = unique([...(pull.excludeFields ?? []), ...overrides.ExcludeFields]);
27
+ }
28
+ if (overrides.UpdateExistingRecords !== undefined) {
29
+ pull.updateExistingRecords = overrides.UpdateExistingRecords;
30
+ }
31
+ if (overrides.CreateNewFileIfNotFound !== undefined) {
32
+ pull.createNewFileIfNotFound = overrides.CreateNewFileIfNotFound;
33
+ }
34
+ return { ...config, pull };
35
+ }
36
+ function unique(values) {
37
+ return [...new Set(values)];
38
+ }
39
+ //# sourceMappingURL=pull-option-overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-option-overrides.js","sourceRoot":"","sources":["../../src/lib/pull-option-overrides.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB,EAAE,SAA6B;IACpF,MAAM,WAAW,GACf,CAAC,CAAC,SAAS,CAAC,aAAa;QACzB,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM;QAClC,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM;QACjC,SAAS,CAAC,qBAAqB,KAAK,SAAS;QAC7C,SAAS,CAAC,uBAAuB,KAAK,SAAS,CAAC;IAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;IAC/C,CAAC;IACD,IAAI,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,SAAS,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,qBAAqB,CAAC;IAC/D,CAAC;IACD,IAAI,SAAS,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;QACpD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC,uBAAuB,CAAC;IACnE,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,MAAM,CAAC,MAAgB;IAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview Chooses the entity folders a push runs over.
3
+ * @module push-directories
4
+ */
5
+ import { SyncConfig } from '../config.js';
6
+ import { PushWhenFilterResult, SkippedDirectory } from './push-when.js';
7
+ /** The settings and the entity folders for one push or watch run. */
8
+ export interface PushFolders {
9
+ /** The `--dir` folder, or the original working directory when there is no `--dir`. */
10
+ ConfigDir: string;
11
+ /** The folder whose `.mj-sync.json` holds the run settings. */
12
+ SyncRootDir: string;
13
+ /** The `.mj-sync.json` of {@link SyncRootDir}, or null when there is none. */
14
+ SyncConfig: SyncConfig | null;
15
+ /**
16
+ * Finds the entity folders and removes the folders whose `pushWhen` is not true
17
+ * (see {@link SelectPushDirectories}). Reads `pushWhen` each time it is called.
18
+ * @throws Error when there is no entity folder before the `pushWhen` filter
19
+ */
20
+ SelectDirectories: () => PushWhenFilterResult;
21
+ }
22
+ /**
23
+ * Finds the start folder and the sync root for a run, and loads the sync-root `.mj-sync.json`.
24
+ * The folder selection uses that config's `directoryOrder` and `ignoreDirectories`.
25
+ * @param originalCwd - The folder the command was started from
26
+ * @param dir - The `--dir` value, relative to `originalCwd`
27
+ */
28
+ export declare function ResolvePushFolders(originalCwd: string, dir?: string, include?: string[], exclude?: string[]): Promise<PushFolders>;
29
+ /** The line printed for a folder that `pushWhen` skipped. Names the variable, never its value. */
30
+ export declare function SkippedDirectoryMessage(configDir: string, skipped: SkippedDirectory): string;
31
+ /**
32
+ * Returns the folder whose `.mj-sync.json` holds the push settings for `dir`: the nearest
33
+ * folder at or above `dir` whose config has no `entity`. Returns the resolved `dir` when there is none.
34
+ */
35
+ export declare function FindSyncRootDir(dir: string): string;
36
+ /**
37
+ * Finds the entity folders under `configDir`, or `configDir` itself when `--dir` points at an
38
+ * entity folder, then removes the folders whose `pushWhen` is not true.
39
+ * @throws Error when there is no entity folder before the `pushWhen` filter
40
+ */
41
+ export declare function SelectPushDirectories(configDir: string, dirOptionGiven: boolean, syncConfig: SyncConfig | null, include?: string[], exclude?: string[], env?: NodeJS.ProcessEnv): PushWhenFilterResult;
42
+ //# sourceMappingURL=push-directories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-directories.d.ts","sourceRoot":"","sources":["../../src/lib/push-directories.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAkB,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAoB,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvF,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAE5F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBnD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAatB"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @fileoverview Chooses the entity folders a push runs over.
3
+ * @module push-directories
4
+ */
5
+ import fs from 'fs-extra';
6
+ import path from 'path';
7
+ import { LoadSyncConfig } from '../config.js';
8
+ import { FindEntityDirectories } from './provider-utils.js';
9
+ import { FilterByPushWhen } from './push-when.js';
10
+ /**
11
+ * Finds the start folder and the sync root for a run, and loads the sync-root `.mj-sync.json`.
12
+ * The folder selection uses that config's `directoryOrder` and `ignoreDirectories`.
13
+ * @param originalCwd - The folder the command was started from
14
+ * @param dir - The `--dir` value, relative to `originalCwd`
15
+ */
16
+ export async function ResolvePushFolders(originalCwd, dir, include, exclude) {
17
+ const configDir = dir ? path.resolve(originalCwd, dir) : originalCwd;
18
+ const syncRootDir = dir ? FindSyncRootDir(configDir) : configDir;
19
+ const syncConfig = await LoadSyncConfig(syncRootDir);
20
+ return {
21
+ ConfigDir: configDir,
22
+ SyncRootDir: syncRootDir,
23
+ SyncConfig: syncConfig,
24
+ SelectDirectories: () => SelectPushDirectories(configDir, !!dir, syncConfig, include, exclude),
25
+ };
26
+ }
27
+ /** The line printed for a folder that `pushWhen` skipped. Names the variable, never its value. */
28
+ export function SkippedDirectoryMessage(configDir, skipped) {
29
+ return `⏭️ Skipped folder ${path.relative(configDir, skipped.Directory) || path.basename(skipped.Directory)}: ${skipped.Reason}`;
30
+ }
31
+ /**
32
+ * Returns the folder whose `.mj-sync.json` holds the push settings for `dir`: the nearest
33
+ * folder at or above `dir` whose config has no `entity`. Returns the resolved `dir` when there is none.
34
+ */
35
+ export function FindSyncRootDir(dir) {
36
+ let current = path.resolve(dir);
37
+ while (true) {
38
+ const config = readConfig(current);
39
+ if (!config) {
40
+ return path.resolve(dir);
41
+ }
42
+ if (!config.entity) {
43
+ return current;
44
+ }
45
+ const parent = path.dirname(current);
46
+ if (parent === current) {
47
+ return path.resolve(dir);
48
+ }
49
+ current = parent;
50
+ }
51
+ }
52
+ /**
53
+ * Finds the entity folders under `configDir`, or `configDir` itself when `--dir` points at an
54
+ * entity folder, then removes the folders whose `pushWhen` is not true.
55
+ * @throws Error when there is no entity folder before the `pushWhen` filter
56
+ */
57
+ export function SelectPushDirectories(configDir, dirOptionGiven, syncConfig, include, exclude, env = process.env) {
58
+ const found = FindEntityDirectories(configDir, dirOptionGiven ? configDir : undefined, syncConfig?.directoryOrder, syncConfig?.ignoreDirectories, include, exclude);
59
+ if (found.length === 0) {
60
+ throw new Error('No entity directories found');
61
+ }
62
+ return FilterByPushWhen(found, env);
63
+ }
64
+ function readConfig(dir) {
65
+ const configPath = path.join(dir, '.mj-sync.json');
66
+ if (!fs.existsSync(configPath)) {
67
+ return null;
68
+ }
69
+ return fs.readJsonSync(configPath);
70
+ }
71
+ //# sourceMappingURL=push-directories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-directories.js","sourceRoot":"","sources":["../../src/lib/push-directories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @fileoverview The `pushWhen` folder setting: a folder is pushed only when the
3
+ * environment variable it names is `true` or `1`.
4
+ * @module push-when
5
+ */
6
+ /** Whether push should run over a folder, and why not. */
7
+ export interface PushWhenDecision {
8
+ Push: boolean;
9
+ /** Why the folder is skipped, or null when it is pushed. Never contains the variable's value. */
10
+ Reason: string | null;
11
+ }
12
+ /** A folder that push skipped because of its `pushWhen`. */
13
+ export interface SkippedDirectory {
14
+ Directory: string;
15
+ Reason: string;
16
+ }
17
+ /** Folders split by their `pushWhen`. */
18
+ export interface PushWhenFilterResult {
19
+ Included: string[];
20
+ Skipped: SkippedDirectory[];
21
+ }
22
+ /**
23
+ * Checks the form of a `pushWhen` value.
24
+ * @returns An error message, or null when the value is a plain `@env:VAR` reference
25
+ */
26
+ export declare function PushWhenError(pushWhen: unknown): string | null;
27
+ /**
28
+ * Decides whether a folder with this `pushWhen` is pushed. An absent value always pushes.
29
+ * @throws Error when the value is malformed (see {@link PushWhenError})
30
+ */
31
+ export declare function EvaluatePushWhen(pushWhen: unknown, env?: NodeJS.ProcessEnv): PushWhenDecision;
32
+ /**
33
+ * Splits folders into the ones push runs over and the ones their `pushWhen` skips.
34
+ * Keeps the input order.
35
+ * @throws Error naming the config file when it cannot be read, is not a JSON object, or has a malformed `pushWhen`
36
+ */
37
+ export declare function FilterByPushWhen(directories: string[], env?: NodeJS.ProcessEnv): PushWhenFilterResult;
38
+ //# sourceMappingURL=push-when.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-when.d.ts","sourceRoot":"","sources":["../../src/lib/push-when.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,iGAAiG;IACjG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAY9D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CAiB1G;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,oBAAoB,CAYlH"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @fileoverview The `pushWhen` folder setting: a folder is pushed only when the
3
+ * environment variable it names is `true` or `1`.
4
+ * @module push-when
5
+ */
6
+ import fs from 'fs-extra';
7
+ import path from 'path';
8
+ import { IsEnvFlagTrue, ParseEnvReference } from './env-reference.js';
9
+ /**
10
+ * Checks the form of a `pushWhen` value.
11
+ * @returns An error message, or null when the value is a plain `@env:VAR` reference
12
+ */
13
+ export function PushWhenError(pushWhen) {
14
+ if (typeof pushWhen !== 'string') {
15
+ return 'pushWhen must be a string like "@env:VARIABLE"';
16
+ }
17
+ const reference = ParseEnvReference(pushWhen);
18
+ if (!reference) {
19
+ return `pushWhen "${pushWhen}" must be an @env: reference, like "@env:VARIABLE"`;
20
+ }
21
+ if (reference.Optional) {
22
+ return `pushWhen "${pushWhen}" cannot use ?optional`;
23
+ }
24
+ return null;
25
+ }
26
+ /**
27
+ * Decides whether a folder with this `pushWhen` is pushed. An absent value always pushes.
28
+ * @throws Error when the value is malformed (see {@link PushWhenError})
29
+ */
30
+ export function EvaluatePushWhen(pushWhen, env = process.env) {
31
+ if (pushWhen === undefined) {
32
+ return { Push: true, Reason: null };
33
+ }
34
+ const problem = PushWhenError(pushWhen);
35
+ if (problem) {
36
+ throw new Error(problem);
37
+ }
38
+ const variableName = ParseEnvReference(pushWhen)?.VariableName ?? '';
39
+ const value = env[variableName];
40
+ if (value === undefined || value.trim() === '') {
41
+ return { Push: false, Reason: `${variableName} is not set` };
42
+ }
43
+ if (!IsEnvFlagTrue(value)) {
44
+ return { Push: false, Reason: `${variableName} is not true` };
45
+ }
46
+ return { Push: true, Reason: null };
47
+ }
48
+ /**
49
+ * Splits folders into the ones push runs over and the ones their `pushWhen` skips.
50
+ * Keeps the input order.
51
+ * @throws Error naming the config file when it cannot be read, is not a JSON object, or has a malformed `pushWhen`
52
+ */
53
+ export function FilterByPushWhen(directories, env = process.env) {
54
+ const result = { Included: [], Skipped: [] };
55
+ for (const directory of directories) {
56
+ const configPath = path.join(directory, '.mj-sync.json');
57
+ const decision = decide(configPath, env);
58
+ if (decision.Push) {
59
+ result.Included.push(directory);
60
+ }
61
+ else {
62
+ result.Skipped.push({ Directory: directory, Reason: decision.Reason ?? '' });
63
+ }
64
+ }
65
+ return result;
66
+ }
67
+ function decide(configPath, env) {
68
+ if (!fs.existsSync(configPath)) {
69
+ return { Push: true, Reason: null };
70
+ }
71
+ const config = fs.readJsonSync(configPath);
72
+ if (typeof config !== 'object' || config === null || Array.isArray(config)) {
73
+ throw new Error(`Invalid .mj-sync.json in ${configPath}: expected a JSON object`);
74
+ }
75
+ const pushWhen = config.pushWhen;
76
+ try {
77
+ return EvaluatePushWhen(pushWhen, env);
78
+ }
79
+ catch (error) {
80
+ const message = error instanceof Error ? error.message : String(error);
81
+ throw new Error(`Invalid pushWhen in ${configPath}: ${message}`);
82
+ }
83
+ }
84
+ //# sourceMappingURL=push-when.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-when.js","sourceRoot":"","sources":["../../src/lib/push-when.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface FlattenedRecord {
21
21
  * Independent sibling roots get distinct graphIds and may run in parallel.
22
22
  */
23
23
  graphId: string;
24
+ /** The record file this record came from. Set by push for every record of the file. */
25
+ FilePath?: string;
24
26
  }
25
27
  /**
26
28
  * Represents a reverse dependency relationship
@@ -42,6 +44,13 @@ export interface DependencyAnalysisResult {
42
44
  dependencyGraph: Map<string, Set<string>>;
43
45
  dependencyLevels?: FlattenedRecord[][];
44
46
  }
47
+ /**
48
+ * Depth-first topological order: each record comes after every record it depends on that is in
49
+ * `byId`. Records with no dependencies are started first, then the rest in input order. A cycle is
50
+ * broken where the walk meets it (cycles are reported separately); a dependency missing from `byId`
51
+ * is skipped.
52
+ */
53
+ export declare function DependencyOrder(records: FlattenedRecord[], byId: ReadonlyMap<string, FlattenedRecord>): FlattenedRecord[];
45
54
  /**
46
55
  * Analyzes and sorts records based on their dependencies
47
56
  */
@@ -170,9 +179,9 @@ export declare class RecordDependencyAnalyzer {
170
179
  *
171
180
  * This is simply the reverse of the forward topological sort used for creates.
172
181
  */
173
- ReverseTopologicalSort(records: FlattenedRecord[], reverseDependencies: Map<string, ReverseDependency[]>): FlattenedRecord[][];
182
+ ReverseTopologicalSort(records: FlattenedRecord[]): FlattenedRecord[][];
174
183
  /** @deprecated Use {@link ReverseTopologicalSort}. */
175
- reverseTopologicalSort(records: FlattenedRecord[], reverseDependencies: Map<string, ReverseDependency[]>): FlattenedRecord[][];
184
+ reverseTopologicalSort(records: FlattenedRecord[]): FlattenedRecord[][];
176
185
  /**
177
186
  * Find all transitive dependents of a set of records
178
187
  * This is useful for finding all records that must be deleted when deleting a parent
@@ -1 +1 @@
1
- {"version":3,"file":"record-dependency-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/record-dependency-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record-dependency-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/record-dependency-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,41 @@
1
1
  import { Metadata } from '@memberjunction/core';
2
2
  import { METADATA_KEYWORDS } from '../constants/metadata-keywords.js';
3
+ /**
4
+ * Depth-first topological order: each record comes after every record it depends on that is in
5
+ * `byId`. Records with no dependencies are started first, then the rest in input order. A cycle is
6
+ * broken where the walk meets it (cycles are reported separately); a dependency missing from `byId`
7
+ * is skipped.
8
+ */
9
+ export function DependencyOrder(records, byId) {
10
+ const result = [];
11
+ const visited = new Set();
12
+ const inProgress = new Set();
13
+ const visit = (recordId) => {
14
+ if (visited.has(recordId) || inProgress.has(recordId)) {
15
+ return;
16
+ }
17
+ const record = byId.get(recordId);
18
+ if (!record) {
19
+ return;
20
+ }
21
+ inProgress.add(recordId);
22
+ for (const depId of record.dependencies) {
23
+ visit(depId);
24
+ }
25
+ inProgress.delete(recordId);
26
+ visited.add(recordId);
27
+ result.push(record);
28
+ };
29
+ for (const record of records) {
30
+ if (record.dependencies.size === 0) {
31
+ visit(record.id);
32
+ }
33
+ }
34
+ for (const record of records) {
35
+ visit(record.id);
36
+ }
37
+ return result;
38
+ }
3
39
  /**
4
40
  * Analyzes and sorts records based on their dependencies
5
41
  */
@@ -494,46 +530,7 @@ export class RecordDependencyAnalyzer {
494
530
  * Performs topological sort on the dependency graph
495
531
  */
496
532
  topologicalSort() {
497
- const result = [];
498
- const visited = new Set();
499
- const tempStack = new Set();
500
- const visit = (recordId) => {
501
- if (tempStack.has(recordId)) {
502
- // Circular dependency - we've already detected these
503
- return false;
504
- }
505
- if (visited.has(recordId)) {
506
- return true;
507
- }
508
- tempStack.add(recordId);
509
- const record = this.recordIdMap.get(recordId);
510
- if (record) {
511
- // Visit dependencies first
512
- for (const depId of record.dependencies) {
513
- visit(depId);
514
- }
515
- }
516
- tempStack.delete(recordId);
517
- visited.add(recordId);
518
- if (record) {
519
- result.push(record);
520
- }
521
- return true;
522
- };
523
- // Process all records, starting with those that have no dependencies
524
- // First, process records with no dependencies
525
- for (const record of this.flattenedRecords) {
526
- if (record.dependencies.size === 0 && !visited.has(record.id)) {
527
- visit(record.id);
528
- }
529
- }
530
- // Then process any remaining records (handles disconnected components)
531
- for (const record of this.flattenedRecords) {
532
- if (!visited.has(record.id)) {
533
- visit(record.id);
534
- }
535
- }
536
- return result;
533
+ return DependencyOrder(this.flattenedRecords, this.recordIdMap);
537
534
  }
538
535
  /**
539
536
  * Groups sorted records into dependency levels for parallel processing
@@ -646,40 +643,20 @@ export class RecordDependencyAnalyzer {
646
643
  *
647
644
  * This is simply the reverse of the forward topological sort used for creates.
648
645
  */
649
- ReverseTopologicalSort(records, reverseDependencies) {
650
- // Calculate forward dependency levels (same as creation order)
651
- const recordLevels = new Map();
652
- // Calculate the level for each record based on its FORWARD dependencies
653
- for (const record of records) {
654
- let maxDependencyLevel = -1;
655
- // Find the maximum level of all dependencies (things this record depends ON)
656
- for (const depId of record.dependencies) {
657
- const depLevel = recordLevels.get(depId);
658
- if (depLevel !== undefined && depLevel > maxDependencyLevel) {
659
- maxDependencyLevel = depLevel;
660
- }
661
- }
662
- // This record's level is one more than its highest dependency
663
- const recordLevel = maxDependencyLevel + 1;
664
- recordLevels.set(record.id, recordLevel);
665
- }
666
- // Group records by level
667
- const forwardLevels = [];
668
- for (const record of records) {
669
- const level = recordLevels.get(record.id) || 0;
670
- if (!forwardLevels[level]) {
671
- forwardLevels[level] = [];
672
- }
673
- forwardLevels[level].push(record);
674
- }
675
- // Reverse the array for deletion order
676
- // Forward level 0 (roots) becomes last to delete
677
- // Forward level N (leaves) becomes first to delete
646
+ ReverseTopologicalSort(records) {
647
+ // The same DFS order and level grouping the forward sort uses, over only these records: a
648
+ // dependency outside the set has no level, so it is ignored. The DFS visits each record's
649
+ // dependencies before the record, so the levels do not depend on the input order (#4935).
650
+ const byId = new Map(records.map((record) => [record.id, record]));
651
+ const ordered = DependencyOrder(records, byId);
652
+ // A record's level is one more than its highest dependency's, so the levels have no gaps
653
+ const forwardLevels = this.groupByDependencyLevels(ordered, new Map());
654
+ // Forward level 0 (roots) deletes last; the highest level (leaves) deletes first
678
655
  return forwardLevels.reverse();
679
656
  }
680
657
  /** @deprecated Use {@link ReverseTopologicalSort}. */
681
- reverseTopologicalSort(records, reverseDependencies) {
682
- return this.ReverseTopologicalSort(records, reverseDependencies);
658
+ reverseTopologicalSort(records) {
659
+ return this.ReverseTopologicalSort(records);
683
660
  }
684
661
  /**
685
662
  * Find all transitive dependents of a set of records