@uipath/maestro-builder-sdk 5.2.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 (238) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +322 -0
  3. package/dist/bindings-v2.d.ts +37 -0
  4. package/dist/bindings-v2.js +155 -0
  5. package/dist/bindings.d.ts +6 -0
  6. package/dist/bindings.js +6 -0
  7. package/dist/bpmn/bpmn-expr-check.d.ts +41 -0
  8. package/dist/bpmn/bpmn-expr-check.js +218 -0
  9. package/dist/bpmn/bpmn-sdk.d.ts +2257 -0
  10. package/dist/bpmn/bpmn-sdk.js +1476 -0
  11. package/dist/bpmn/check-cli.d.ts +3 -0
  12. package/dist/bpmn/check-cli.js +32 -0
  13. package/dist/bpmn/check.d.ts +25 -0
  14. package/dist/bpmn/check.js +430 -0
  15. package/dist/bpmn/compile-cli.d.ts +3 -0
  16. package/dist/bpmn/compile-cli.js +60 -0
  17. package/dist/bpmn/connector.d.ts +56 -0
  18. package/dist/bpmn/connector.js +199 -0
  19. package/dist/bpmn/decompile-cli.d.ts +8 -0
  20. package/dist/bpmn/decompile-cli.js +54 -0
  21. package/dist/bpmn/decompile.d.ts +6 -0
  22. package/dist/bpmn/decompile.js +1108 -0
  23. package/dist/bpmn/format-profile.d.ts +27 -0
  24. package/dist/bpmn/format-profile.js +11 -0
  25. package/dist/bpmn/intsvc.d.ts +77 -0
  26. package/dist/bpmn/intsvc.js +155 -0
  27. package/dist/bpmn/load.d.ts +4 -0
  28. package/dist/bpmn/load.js +22 -0
  29. package/dist/bpmn/merge-cli.d.ts +3 -0
  30. package/dist/bpmn/merge-cli.js +45 -0
  31. package/dist/bpmn/merge.d.ts +19 -0
  32. package/dist/bpmn/merge.js +293 -0
  33. package/dist/bpmn/registry-types.json +1869 -0
  34. package/dist/bpmn/serialize.d.ts +28 -0
  35. package/dist/bpmn/serialize.js +757 -0
  36. package/dist/bpmn/tidy-cli.d.ts +2 -0
  37. package/dist/bpmn/tidy-cli.js +39 -0
  38. package/dist/bpmn/typed-node.d.ts +382 -0
  39. package/dist/bpmn/typed-node.js +551 -0
  40. package/dist/bpmn/uipath-moddle.v1.json +823 -0
  41. package/dist/bpmn/xml-ranges.d.ts +45 -0
  42. package/dist/bpmn/xml-ranges.js +151 -0
  43. package/dist/case/case-expr-check.d.ts +35 -0
  44. package/dist/case/case-expr-check.js +85 -0
  45. package/dist/case/case-sdk.d.ts +1282 -0
  46. package/dist/case/case-sdk.js +923 -0
  47. package/dist/case/check-cli.d.ts +3 -0
  48. package/dist/case/check-cli.js +31 -0
  49. package/dist/case/check.d.ts +18 -0
  50. package/dist/case/check.js +456 -0
  51. package/dist/case/compile-cli.d.ts +3 -0
  52. package/dist/case/compile-cli.js +291 -0
  53. package/dist/case/decompile-cli.d.ts +9 -0
  54. package/dist/case/decompile-cli.js +117 -0
  55. package/dist/case/decompile.d.ts +187 -0
  56. package/dist/case/decompile.js +1170 -0
  57. package/dist/case/entry-points.d.ts +79 -0
  58. package/dist/case/entry-points.js +118 -0
  59. package/dist/case/format-profile.d.ts +60 -0
  60. package/dist/case/format-profile.js +79 -0
  61. package/dist/case/ids.d.ts +24 -0
  62. package/dist/case/ids.js +76 -0
  63. package/dist/case/load.d.ts +12 -0
  64. package/dist/case/load.js +32 -0
  65. package/dist/case/preserve.d.ts +133 -0
  66. package/dist/case/preserve.js +105 -0
  67. package/dist/case/serialize.d.ts +10 -0
  68. package/dist/case/serialize.js +1414 -0
  69. package/dist/check-cli.d.ts +3 -0
  70. package/dist/check-cli.js +118 -0
  71. package/dist/check.d.ts +146 -0
  72. package/dist/check.js +4898 -0
  73. package/dist/cli/commands/bpmn.d.ts +2 -0
  74. package/dist/cli/commands/bpmn.js +73 -0
  75. package/dist/cli/commands/case.d.ts +2 -0
  76. package/dist/cli/commands/case.js +60 -0
  77. package/dist/cli/commands/flow.d.ts +2 -0
  78. package/dist/cli/commands/flow.js +99 -0
  79. package/dist/cli/commands/registry.d.ts +10 -0
  80. package/dist/cli/commands/registry.js +170 -0
  81. package/dist/cli/common.d.ts +30 -0
  82. package/dist/cli/common.js +92 -0
  83. package/dist/cli/index.d.ts +2 -0
  84. package/dist/cli/index.js +18 -0
  85. package/dist/cli-run.d.ts +2 -0
  86. package/dist/cli-run.js +42 -0
  87. package/dist/compile-cli.d.ts +3 -0
  88. package/dist/compile-cli.js +160 -0
  89. package/dist/config.d.ts +47 -0
  90. package/dist/config.js +201 -0
  91. package/dist/core/actions.d.ts +3244 -0
  92. package/dist/core/actions.js +1062 -0
  93. package/dist/core/binding-messages.d.ts +1 -0
  94. package/dist/core/binding-messages.js +16 -0
  95. package/dist/core/bindings.d.ts +12 -0
  96. package/dist/core/bindings.js +67 -0
  97. package/dist/core/ceql.d.ts +73 -0
  98. package/dist/core/ceql.js +272 -0
  99. package/dist/core/cli-spelling.d.ts +39 -0
  100. package/dist/core/cli-spelling.js +62 -0
  101. package/dist/core/connector-raw-node.d.ts +21 -0
  102. package/dist/core/connector-raw-node.js +47 -0
  103. package/dist/core/connectors.d.ts +184 -0
  104. package/dist/core/connectors.js +128 -0
  105. package/dist/core/expr-check.d.ts +93 -0
  106. package/dist/core/expr-check.js +186 -0
  107. package/dist/core/expr.d.ts +323 -0
  108. package/dist/core/expr.js +400 -0
  109. package/dist/core/index.d.ts +10 -0
  110. package/dist/core/index.js +10 -0
  111. package/dist/core/library.d.ts +440 -0
  112. package/dist/core/library.js +1183 -0
  113. package/dist/core/list-envelope.d.ts +45 -0
  114. package/dist/core/list-envelope.js +97 -0
  115. package/dist/core/lookup-store.d.ts +22 -0
  116. package/dist/core/lookup-store.js +85 -0
  117. package/dist/core/lookups.d.ts +227 -0
  118. package/dist/core/lookups.js +231 -0
  119. package/dist/core/node-classes.d.ts +234 -0
  120. package/dist/core/node-classes.js +158 -0
  121. package/dist/core/script-return.d.ts +68 -0
  122. package/dist/core/script-return.js +197 -0
  123. package/dist/core/stable-id.d.ts +28 -0
  124. package/dist/core/stable-id.js +37 -0
  125. package/dist/core-definitions.json +16249 -0
  126. package/dist/decompile-cli.d.ts +3 -0
  127. package/dist/decompile-cli.js +131 -0
  128. package/dist/decompile.d.ts +138 -0
  129. package/dist/decompile.js +2482 -0
  130. package/dist/emit.d.ts +10 -0
  131. package/dist/emit.js +60 -0
  132. package/dist/event-filters.d.ts +130 -0
  133. package/dist/event-filters.js +137 -0
  134. package/dist/flow-expr-check.d.ts +17 -0
  135. package/dist/flow-expr-check.js +193 -0
  136. package/dist/flow-sdk.d.ts +1341 -0
  137. package/dist/flow-sdk.js +1164 -0
  138. package/dist/flow-variables.d.ts +13 -0
  139. package/dist/flow-variables.js +42 -0
  140. package/dist/format-profile.d.ts +72 -0
  141. package/dist/format-profile.js +97 -0
  142. package/dist/generators/_connections.py +287 -0
  143. package/dist/generators/_events.py +355 -0
  144. package/dist/generators/_lookups.py +114 -0
  145. package/dist/generators/_naming.py +185 -0
  146. package/dist/generators/_objects.py +299 -0
  147. package/dist/generators/_resolve.py +273 -0
  148. package/dist/generators/convert_library_to_md.py +1441 -0
  149. package/dist/generators/extract_library.py +125 -0
  150. package/dist/generators/generate_connectors_ts.py +936 -0
  151. package/dist/generators/generate_library_json.py +2527 -0
  152. package/dist/generators/generate_triggers_ts.py +110 -0
  153. package/dist/generators/materialize_registry.py +155 -0
  154. package/dist/generators/prepare_connector.py +1688 -0
  155. package/dist/index.d.ts +35 -0
  156. package/dist/index.js +35 -0
  157. package/dist/ixp-definition.json +1982 -0
  158. package/dist/library.d.ts +6 -0
  159. package/dist/library.js +6 -0
  160. package/dist/load.d.ts +16 -0
  161. package/dist/load.js +95 -0
  162. package/dist/merge-cli.d.ts +3 -0
  163. package/dist/merge-cli.js +47 -0
  164. package/dist/merge.d.ts +125 -0
  165. package/dist/merge.js +0 -0
  166. package/dist/migrate.d.ts +15 -0
  167. package/dist/migrate.js +245 -0
  168. package/dist/node-runtime.d.ts +3 -0
  169. package/dist/node-runtime.js +22 -0
  170. package/dist/package-name.d.ts +17 -0
  171. package/dist/package-name.js +17 -0
  172. package/dist/ref-resolve.d.ts +77 -0
  173. package/dist/ref-resolve.js +170 -0
  174. package/dist/registry/cache.d.ts +55 -0
  175. package/dist/registry/cache.js +134 -0
  176. package/dist/registry/curated-overlay.d.ts +16 -0
  177. package/dist/registry/curated-overlay.js +62 -0
  178. package/dist/registry/extractor.d.ts +22 -0
  179. package/dist/registry/extractor.js +18 -0
  180. package/dist/registry/materialize-bin.d.ts +2 -0
  181. package/dist/registry/materialize-bin.js +7 -0
  182. package/dist/registry/materialize-cli.d.ts +1 -0
  183. package/dist/registry/materialize-cli.js +46 -0
  184. package/dist/registry/materializer.d.ts +23 -0
  185. package/dist/registry/materializer.js +34 -0
  186. package/dist/registry/path-cli.d.ts +1 -0
  187. package/dist/registry/path-cli.js +56 -0
  188. package/dist/registry/prepare-cli.d.ts +62 -0
  189. package/dist/registry/prepare-cli.js +185 -0
  190. package/dist/registry/pull-cli.d.ts +1 -0
  191. package/dist/registry/pull-cli.js +274 -0
  192. package/dist/registry/python.d.ts +26 -0
  193. package/dist/registry/python.js +46 -0
  194. package/dist/registry/search-cli.d.ts +52 -0
  195. package/dist/registry/search-cli.js +159 -0
  196. package/dist/schema-version.d.ts +165 -0
  197. package/dist/schema-version.js +148 -0
  198. package/dist/serialize.d.ts +64 -0
  199. package/dist/serialize.js +6398 -0
  200. package/lib/README.md +112 -0
  201. package/lib/library-json.samples/index.json +158 -0
  202. package/lib/library-json.samples/invariant-collections.json +83 -0
  203. package/lib/library-json.samples/list-envelopes.json +123 -0
  204. package/lib/library-json.samples/uipath-atlassian-jira/create-issue@1.0.0.json +131 -0
  205. package/lib/library-json.samples/uipath-atlassian-jira/create-issue@1.0.0.v1def.json +306 -0
  206. package/lib/library-json.samples/uipath-atlassian-jira/generic/create_issue/create@1.0.0.json +86 -0
  207. package/lib/library-json.samples/uipath-atlassian-jira/generic/create_issue/create@1.0.0.v1def.json +208 -0
  208. package/lib/library-json.samples/uipath-atlassian-jira/get-issue@1.0.0.json +2040 -0
  209. package/lib/library-json.samples/uipath-atlassian-jira/get-issue@1.0.0.v1def.json +195 -0
  210. package/lib/library-json.samples/uipath-google-vertex/execute-google-vertex-agent@1.0.0.json +169 -0
  211. package/lib/library-json.samples/uipath-google-vertex/execute-google-vertex-agent@1.0.0.v1def.json +209 -0
  212. package/lib/library-json.samples/uipath-http-webhook/event-http-webhook@1.0.0.json +63 -0
  213. package/lib/library-json.samples/uipath-http-webhook/event-http-webhook@1.0.0.v1def.json +262 -0
  214. package/lib/library-json.samples/uipath-http-webhook/trigger-http-webhook@1.0.0.json +63 -0
  215. package/lib/library-json.samples/uipath-http-webhook/trigger-http-webhook@1.0.0.v1def.json +213 -0
  216. package/lib/library-json.samples/uipath-microsoft-azureactivedirectory/list-groups@1.0.0.json +227 -0
  217. package/lib/library-json.samples/uipath-microsoft-azureactivedirectory/list-groups@1.0.0.v1def.json +373 -0
  218. package/lib/library-json.samples/uipath-microsoft-onedrive/event-file-created@1.0.0.json +116 -0
  219. package/lib/library-json.samples/uipath-microsoft-onedrive/event-file-created@1.0.0.v1def.json +369 -0
  220. package/lib/library-json.samples/uipath-microsoft-onedrive/event-list-item-added@1.0.0.json +56 -0
  221. package/lib/library-json.samples/uipath-microsoft-onedrive/event-list-item-added@1.0.0.v1def.json +256 -0
  222. package/lib/library-json.samples/uipath-microsoft-onedrive/trigger-file-created@1.0.0.json +116 -0
  223. package/lib/library-json.samples/uipath-microsoft-onedrive/trigger-file-created@1.0.0.v1def.json +320 -0
  224. package/lib/library-json.samples/uipath-microsoft-onedrive/trigger-list-item-added@1.0.0.json +56 -0
  225. package/lib/library-json.samples/uipath-microsoft-onedrive/trigger-list-item-added@1.0.0.v1def.json +207 -0
  226. package/lib/library-json.samples/uipath-microsoft-outlook365/event-email-received@1.0.0.json +107 -0
  227. package/lib/library-json.samples/uipath-microsoft-outlook365/event-email-received@1.0.0.v1def.json +264 -0
  228. package/lib/library-json.samples/uipath-microsoft-outlook365/send-email@1.0.0.json +142 -0
  229. package/lib/library-json.samples/uipath-microsoft-outlook365/send-email@1.0.0.v1def.json +306 -0
  230. package/lib/library-json.samples/uipath-microsoft-outlook365/trigger-email-received@1.0.0.json +107 -0
  231. package/lib/library-json.samples/uipath-microsoft-outlook365/trigger-email-received@1.0.0.v1def.json +217 -0
  232. package/lib/library-json.samples/uipath-microsoft-powerautomate/invoke-a-microsoft-power-automate-flow@1.0.0.json +85 -0
  233. package/lib/library-json.samples/uipath-microsoft-powerautomate/invoke-a-microsoft-power-automate-flow@1.0.0.v1def.json +209 -0
  234. package/lib/library-json.samples/uipath-salesforce-slack/send-message-to-user@1.0.0.json +755 -0
  235. package/lib/library-json.samples/uipath-salesforce-slack/send-message-to-user@1.0.0.v1def.json +513 -0
  236. package/lib/library-json.samples/uipath-uipath-dataservice/query-entity-records@1.0.0.json +122 -0
  237. package/lib/library-json.samples/uipath-uipath-dataservice/query-entity-records@1.0.0.v1def.json +227 -0
  238. package/package.json +85 -0
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env python3
2
+ """Generate statically-typed TypeScript connector-TRIGGER descriptors from the
3
+ canonical trigger catalog (`registry-triggers.json`).
4
+
5
+ The catalog is IDENTITY ONLY — `{ NodeType, DisplayName, Description, Version,
6
+ connectorKey }` — because a trigger's field schema (`where`/`filters`/output)
7
+ is schema-dynamic: `uip … registry get <trigger>` refuses to return it without a
8
+ live `--connection-id`. So this generator emits DISCOVERY descriptors: one
9
+ `triggerDescriptor()` const per event, carrying its `connector`/`event`/`version`
10
+ so `onEvent`/`waitForEvent` take it in place of the stringly `{ connector, event }`,
11
+ while `where`/output stay loose (`Record<string, string>` / `unknown`). A
12
+ connection-scoped `prepare-trigger` (C4) narrows those later; the surface here is
13
+ unchanged.
14
+
15
+ One module per connector, mirroring `generate_connectors_ts.py`:
16
+
17
+ connectors/<connector-key>.triggers.ts
18
+ /** Issue Created — (Jira) Trigger when a new issue is created. */
19
+ export const IssueCreated = triggerDescriptor()({
20
+ connector: 'uipath-atlassian-jira',
21
+ event: 'issue-created',
22
+ version: '1.0.0',
23
+ displayName: 'Issue Created',
24
+ } as const);
25
+
26
+ Usage:
27
+ generate_triggers_ts.py --triggers <registry-triggers.json> --output <ts-dir>
28
+ [--import <specifier>] [--connectors a,b,c]
29
+ """
30
+ from __future__ import annotations
31
+
32
+ import argparse
33
+ import json
34
+ import re
35
+ from pathlib import Path
36
+
37
+ TRIGGER_PREFIX = "uipath.connector.trigger."
38
+
39
+
40
+ def pascal(event_id: str) -> str:
41
+ return "".join(w[:1].upper() + w[1:] for w in re.split(r"[^A-Za-z0-9]+", event_id) if w) or "Event"
42
+
43
+
44
+ def event_id(node_type: str) -> str:
45
+ # uipath.connector.trigger.<key>.<event> → <event> (the last dotted segment)
46
+ return node_type.rsplit(".", 1)[-1]
47
+
48
+
49
+ def emit_trigger(t: dict, seen: set) -> list[str]:
50
+ node_type = t["NodeType"]
51
+ ev = event_id(node_type)
52
+ name = pascal(ev)
53
+ while name in seen: # de-collide within a connector module
54
+ name += "_"
55
+ seen.add(name)
56
+ version = t.get("Version", "1.0.0")
57
+ label = t.get("DisplayName") or ev
58
+ desc = str(t.get("Description") or "").strip().replace("\n", " ")
59
+
60
+ doc = f"{label} — {desc}" if desc else label
61
+ doc = doc.replace("*/", "* /") # never let a description close the doc comment early
62
+ lines = [f"/** {doc} */"]
63
+ lines.append(f"export const {name} = triggerDescriptor()({{")
64
+ lines.append(f" connector: {json.dumps(t['connectorKey'])},")
65
+ lines.append(f" event: {json.dumps(ev)},")
66
+ lines.append(f" version: {json.dumps(version)},")
67
+ lines.append(f" displayName: {json.dumps(label)},")
68
+ lines.append("} as const);")
69
+ return lines
70
+
71
+
72
+ def main() -> None:
73
+ ap = argparse.ArgumentParser()
74
+ ap.add_argument("--triggers", required=True, help="path to registry-triggers.json")
75
+ ap.add_argument("--output", required=True)
76
+ ap.add_argument("--import", dest="imp", default="@uipath/maestro-builder-sdk",
77
+ help="module specifier for `import { triggerDescriptor }`")
78
+ ap.add_argument("--connectors", default="", help="csv subset of connector keys (default: all)")
79
+ args = ap.parse_args()
80
+
81
+ catalog = json.loads(Path(args.triggers).read_text())
82
+ triggers = catalog["triggers"] if isinstance(catalog, dict) else catalog
83
+ subset = {c for c in args.connectors.split(",") if c} or None
84
+
85
+ by_conn: dict[str, list[dict]] = {}
86
+ for t in triggers:
87
+ nt = t.get("NodeType", "")
88
+ if not nt.startswith(TRIGGER_PREFIX):
89
+ continue # catalog is trigger-only, but be defensive
90
+ ck = t["connectorKey"]
91
+ if subset and ck not in subset:
92
+ continue
93
+ by_conn.setdefault(ck, []).append(t)
94
+
95
+ out_dir = Path(args.output)
96
+ out_dir.mkdir(parents=True, exist_ok=True)
97
+ written = 0
98
+ for ck, ts in sorted(by_conn.items()):
99
+ seen: set = set()
100
+ body = [f"import {{ triggerDescriptor }} from {json.dumps(args.imp)};", ""]
101
+ for t in sorted(ts, key=lambda x: x["NodeType"]):
102
+ body += emit_trigger(t, seen)
103
+ body.append("")
104
+ (out_dir / f"{ck}.triggers.ts").write_text("\n".join(body).rstrip() + "\n")
105
+ written += 1
106
+ print(f"generated {written} trigger module(s) → {out_dir}")
107
+
108
+
109
+ if __name__ == "__main__":
110
+ main()
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env python3
2
+ """Materialize connector Markdown and TypeScript from canonical library JSON."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import os
8
+ import shutil
9
+ import subprocess
10
+ import sys
11
+ from pathlib import Path
12
+
13
+
14
+ HERE = Path(__file__).resolve().parent
15
+
16
+
17
+ def parse_args() -> argparse.Namespace:
18
+ parser = argparse.ArgumentParser(description=__doc__)
19
+ parser.add_argument(
20
+ "--library-json",
21
+ required=True,
22
+ help="Canonical connector library directory containing index.json",
23
+ )
24
+ parser.add_argument(
25
+ "--library-md",
26
+ help="Destination directory for generated Markdown. Omit to skip it — "
27
+ "the Markdown is a pure function of the library JSON, so there is "
28
+ "no reason to regenerate 2,472 pages to add one descriptor.",
29
+ )
30
+ parser.add_argument(
31
+ "--connectors",
32
+ help="Destination directory for generated TypeScript descriptors. "
33
+ "Omit to skip TypeScript generation: every compiler diagnostic "
34
+ "comes from the library JSON, so the modules serve an editor's "
35
+ "autocomplete and a project importing none does not need them.",
36
+ )
37
+ parser.add_argument(
38
+ "--connector-subset",
39
+ default="",
40
+ help="Comma-separated connector keys to emit instead of all of them",
41
+ )
42
+ parser.add_argument(
43
+ "--import",
44
+ dest="module_import",
45
+ default="@uipath/maestro-builder-sdk",
46
+ help="Module specifier used by generated TypeScript descriptors",
47
+ )
48
+ parser.add_argument(
49
+ "--triggers",
50
+ help="Optional registry-triggers.json used to generate trigger descriptors",
51
+ )
52
+ return parser.parse_args()
53
+
54
+
55
+ def run(script: str, *args: str) -> None:
56
+ subprocess.run([sys.executable, str(HERE / script), *args], check=True)
57
+
58
+
59
+ def main() -> int:
60
+ args = parse_args()
61
+ library_json = Path(args.library_json).resolve()
62
+ library_md = Path(args.library_md).resolve() if args.library_md else None
63
+ connectors = Path(args.connectors).resolve() if args.connectors else None
64
+
65
+ if not (library_json / "index.json").is_file():
66
+ print(
67
+ f"materialize-registry: missing {library_json / 'index.json'}",
68
+ file=sys.stderr,
69
+ )
70
+ return 1
71
+
72
+ outputs = ([library_md] if library_md else []) + ([connectors] if connectors else [])
73
+ if library_json in outputs or len(set(outputs)) != len(outputs):
74
+ print(
75
+ "materialize-registry: input and output directories must be distinct",
76
+ file=sys.stderr,
77
+ )
78
+ return 1
79
+
80
+ if connectors is not None:
81
+ if connectors.exists():
82
+ shutil.rmtree(connectors)
83
+ connectors.mkdir(parents=True)
84
+
85
+ if library_md is not None:
86
+ # Generate beside the target and swap, exactly as pull-cli does for
87
+ # library-json: the converter wipes and rewrites its output directory,
88
+ # and two `registry pull`s racing on the shared final path (a coding
89
+ # agent issues tool calls in parallel) left one of them with
90
+ # `shutil.rmtree` → "Directory not empty" mid-write (2026-09-01).
91
+ staging = library_md.with_name(f"{library_md.name}.tmp-{os.getpid()}")
92
+ if staging.exists():
93
+ shutil.rmtree(staging)
94
+ run(
95
+ "convert_library_to_md.py",
96
+ "--source",
97
+ str(library_json),
98
+ "--output",
99
+ str(staging),
100
+ )
101
+ if staging.is_dir():
102
+ previous = library_md.with_name(f"{library_md.name}.old-{os.getpid()}")
103
+ if library_md.exists():
104
+ library_md.rename(previous)
105
+ staging.rename(library_md)
106
+ if previous.exists():
107
+ shutil.rmtree(previous, ignore_errors=True)
108
+ if connectors is not None:
109
+ connectors_args = [
110
+ "--library", str(library_json),
111
+ "--output", str(connectors),
112
+ "--import", args.module_import,
113
+ ]
114
+ if args.connector_subset:
115
+ connectors_args += ["--connectors", args.connector_subset]
116
+ run("generate_connectors_ts.py", *connectors_args)
117
+
118
+ if connectors is not None and args.triggers:
119
+ triggers = Path(args.triggers).resolve()
120
+ if not triggers.is_file():
121
+ print(
122
+ f"materialize-registry: missing trigger catalog {triggers}",
123
+ file=sys.stderr,
124
+ )
125
+ return 1
126
+ run(
127
+ "generate_triggers_ts.py",
128
+ "--triggers",
129
+ str(triggers),
130
+ "--output",
131
+ str(connectors),
132
+ "--import",
133
+ args.module_import,
134
+ )
135
+
136
+ markdown_count = (
137
+ sum(1 for path in library_md.rglob("*.md") if path.is_file())
138
+ if library_md is not None
139
+ else 0
140
+ )
141
+ connector_count = (
142
+ sum(1 for path in connectors.glob("*.ts") if path.is_file())
143
+ if connectors is not None
144
+ else 0
145
+ )
146
+ print(
147
+ "materialize-registry: "
148
+ f"generated {markdown_count} markdown file(s) and "
149
+ f"{connector_count} TypeScript module(s)"
150
+ )
151
+ return 0
152
+
153
+
154
+ if __name__ == "__main__":
155
+ sys.exit(main())