@magda/typescript-common 1.1.0-alpha.2 → 1.1.0-alpha.3

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 (249) hide show
  1. package/dist/AspectBuilder.d.ts +7 -0
  2. package/dist/AspectBuilder.js +3 -0
  3. package/dist/AspectBuilder.js.map +1 -0
  4. package/dist/AspectCreationFailure.d.ts +5 -0
  5. package/dist/AspectCreationFailure.js +10 -0
  6. package/dist/AspectCreationFailure.js.map +1 -0
  7. package/dist/AsyncPage.d.ts +18 -0
  8. package/dist/AsyncPage.js +140 -0
  9. package/dist/AsyncPage.js.map +1 -0
  10. package/dist/ConnectionResult.d.ts +16 -0
  11. package/dist/ConnectionResult.js +77 -0
  12. package/dist/ConnectionResult.js.map +1 -0
  13. package/dist/ConnectorRecordId.d.ts +15 -0
  14. package/dist/ConnectorRecordId.js +46 -0
  15. package/dist/ConnectorRecordId.js.map +1 -0
  16. package/dist/JsonConnector.d.ts +195 -0
  17. package/dist/JsonConnector.js +427 -0
  18. package/dist/JsonConnector.js.map +1 -0
  19. package/dist/JsonTransformer.d.ts +112 -0
  20. package/dist/JsonTransformer.js +225 -0
  21. package/dist/JsonTransformer.js.map +1 -0
  22. package/dist/OpaCompileResponseParser.d.ts +480 -0
  23. package/dist/OpaCompileResponseParser.js +1134 -0
  24. package/dist/OpaCompileResponseParser.js.map +1 -0
  25. package/dist/RecordCreationFailure.d.ts +7 -0
  26. package/dist/RecordCreationFailure.js +11 -0
  27. package/dist/RecordCreationFailure.js.map +1 -0
  28. package/dist/SimpleOpaSQLTranslator.d.ts +14 -0
  29. package/dist/SimpleOpaSQLTranslator.js +79 -0
  30. package/dist/SimpleOpaSQLTranslator.js.map +1 -0
  31. package/dist/addTrailingSlash.d.ts +1 -0
  32. package/dist/addTrailingSlash.js +15 -0
  33. package/dist/addTrailingSlash.js.map +1 -0
  34. package/dist/appendUrlSegments.d.ts +2 -0
  35. package/dist/appendUrlSegments.js +18 -0
  36. package/dist/appendUrlSegments.js.map +1 -0
  37. package/dist/authorization-api/AccessControlError.d.ts +4 -0
  38. package/dist/authorization-api/AccessControlError.js +13 -0
  39. package/dist/authorization-api/AccessControlError.js.map +1 -0
  40. package/dist/authorization-api/ApiClient.d.ts +141 -0
  41. package/dist/authorization-api/ApiClient.js +335 -0
  42. package/dist/authorization-api/ApiClient.js.map +1 -0
  43. package/dist/authorization-api/AuthError.d.ts +4 -0
  44. package/dist/authorization-api/AuthError.js +13 -0
  45. package/dist/authorization-api/AuthError.js.map +1 -0
  46. package/dist/authorization-api/GenericError.d.ts +9 -0
  47. package/dist/authorization-api/GenericError.js +17 -0
  48. package/dist/authorization-api/GenericError.js.map +1 -0
  49. package/dist/authorization-api/authMiddleware.d.ts +7 -0
  50. package/dist/authorization-api/authMiddleware.js +52 -0
  51. package/dist/authorization-api/authMiddleware.js.map +1 -0
  52. package/dist/authorization-api/model.d.ts +99 -0
  53. package/dist/authorization-api/model.js +3 -0
  54. package/dist/authorization-api/model.js.map +1 -0
  55. package/dist/coerceJson.d.ts +2 -0
  56. package/dist/coerceJson.js +13 -0
  57. package/dist/coerceJson.js.map +1 -0
  58. package/dist/createServiceError.d.ts +19 -0
  59. package/dist/createServiceError.js +45 -0
  60. package/dist/createServiceError.js.map +1 -0
  61. package/dist/delay.d.ts +2 -0
  62. package/dist/delay.js +9 -0
  63. package/dist/delay.js.map +1 -0
  64. package/dist/express/status.d.ts +30 -0
  65. package/dist/express/status.js +180 -0
  66. package/dist/express/status.js.map +1 -0
  67. package/dist/formatServiceError.d.ts +1 -0
  68. package/dist/formatServiceError.js +23 -0
  69. package/dist/formatServiceError.js.map +1 -0
  70. package/dist/generated/registry/api.d.ts +596 -0
  71. package/dist/generated/registry/api.js +2060 -0
  72. package/dist/generated/registry/api.js.map +1 -0
  73. package/dist/getAbsoluteUrl.d.ts +12 -0
  74. package/dist/getAbsoluteUrl.js +35 -0
  75. package/dist/getAbsoluteUrl.js.map +1 -0
  76. package/dist/getBasePathFromUrl.d.ts +10 -0
  77. package/dist/getBasePathFromUrl.js +27 -0
  78. package/dist/getBasePathFromUrl.js.map +1 -0
  79. package/dist/markdownToHtml.d.ts +3 -0
  80. package/dist/markdownToHtml.js +38 -0
  81. package/dist/markdownToHtml.js.map +1 -0
  82. package/dist/opa/OpaTypes.d.ts +41 -0
  83. package/dist/opa/OpaTypes.js +3 -0
  84. package/dist/opa/OpaTypes.js.map +1 -0
  85. package/dist/opa/getAuthDecision.d.ts +19 -0
  86. package/dist/opa/getAuthDecision.js +94 -0
  87. package/dist/opa/getAuthDecision.js.map +1 -0
  88. package/dist/opa/queryOpa.d.ts +1 -0
  89. package/dist/opa/queryOpa.js +41 -0
  90. package/dist/opa/queryOpa.js.map +1 -0
  91. package/dist/registry/AuthorizedRegistryClient.d.ts +29 -0
  92. package/dist/registry/AuthorizedRegistryClient.js +115 -0
  93. package/dist/registry/AuthorizedRegistryClient.js.map +1 -0
  94. package/dist/registry/RegistryClient.d.ts +36 -0
  95. package/dist/registry/RegistryClient.js +59 -0
  96. package/dist/registry/RegistryClient.js.map +1 -0
  97. package/dist/registry/TenantConsts.d.ts +31 -0
  98. package/dist/registry/TenantConsts.js +35 -0
  99. package/dist/registry/TenantConsts.js.map +1 -0
  100. package/dist/registry-manual/api.d.ts +9 -0
  101. package/dist/registry-manual/api.js +10 -0
  102. package/dist/registry-manual/api.js.map +1 -0
  103. package/dist/request.d.ts +3 -0
  104. package/dist/request.js +19 -0
  105. package/dist/request.js.map +1 -0
  106. package/dist/retry.d.ts +1 -0
  107. package/dist/retry.js +21 -0
  108. package/dist/retry.js.map +1 -0
  109. package/dist/retryBackoff.d.ts +1 -0
  110. package/dist/retryBackoff.js +21 -0
  111. package/dist/retryBackoff.js.map +1 -0
  112. package/dist/runLater.d.ts +1 -0
  113. package/dist/runLater.js +16 -0
  114. package/dist/runLater.js.map +1 -0
  115. package/dist/session/GetUserId.d.ts +5 -0
  116. package/dist/session/GetUserId.js +41 -0
  117. package/dist/session/GetUserId.js.map +1 -0
  118. package/dist/session/GetUserSession.d.ts +3 -0
  119. package/dist/session/GetUserSession.js +22 -0
  120. package/dist/session/GetUserSession.js.map +1 -0
  121. package/dist/session/addJwtSecretFromEnvVar.d.ts +14 -0
  122. package/dist/session/addJwtSecretFromEnvVar.js +23 -0
  123. package/dist/session/addJwtSecretFromEnvVar.js.map +1 -0
  124. package/dist/session/buildJwt.d.ts +1 -0
  125. package/dist/session/buildJwt.js +8 -0
  126. package/dist/session/buildJwt.js.map +1 -0
  127. package/dist/session/cookieUtils.d.ts +16 -0
  128. package/dist/session/cookieUtils.js +19 -0
  129. package/dist/session/cookieUtils.js.map +1 -0
  130. package/dist/session/destroySession.d.ts +10 -0
  131. package/dist/session/destroySession.js +44 -0
  132. package/dist/session/destroySession.js.map +1 -0
  133. package/dist/session/getSessionId.d.ts +2 -0
  134. package/dist/session/getSessionId.js +28 -0
  135. package/dist/session/getSessionId.js.map +1 -0
  136. package/dist/tenant-api/AuthorizedTenantClient.d.ts +25 -0
  137. package/dist/tenant-api/AuthorizedTenantClient.js +61 -0
  138. package/dist/tenant-api/AuthorizedTenantClient.js.map +1 -0
  139. package/dist/tenant-api/Tenant.d.ts +17 -0
  140. package/dist/tenant-api/Tenant.js +10 -0
  141. package/dist/tenant-api/Tenant.js.map +1 -0
  142. package/dist/test/JsonConnector.spec.d.ts +1 -0
  143. package/dist/test/JsonConnector.spec.js +352 -0
  144. package/dist/test/JsonConnector.spec.js.map +1 -0
  145. package/dist/test/JsonTransformer.spec.d.ts +1 -0
  146. package/dist/test/JsonTransformer.spec.js +98 -0
  147. package/dist/test/JsonTransformer.spec.js.map +1 -0
  148. package/dist/test/arbitraries.d.ts +98 -0
  149. package/dist/test/arbitraries.js +264 -0
  150. package/dist/test/arbitraries.js.map +1 -0
  151. package/dist/test/aspect-templates/organization-details.d.ts +4 -0
  152. package/dist/test/aspect-templates/organization-details.js +11 -0
  153. package/dist/test/aspect-templates/organization-details.js.map +1 -0
  154. package/dist/test/buildApiClient.spec.d.ts +1 -0
  155. package/dist/test/buildApiClient.spec.js +177 -0
  156. package/dist/test/buildApiClient.spec.js.map +1 -0
  157. package/dist/test/buildAuthorizedTenantClient.spec.d.ts +1 -0
  158. package/dist/test/buildAuthorizedTenantClient.spec.js +60 -0
  159. package/dist/test/buildAuthorizedTenantClient.spec.js.map +1 -0
  160. package/dist/test/connectors/MockExpressServer.d.ts +5 -0
  161. package/dist/test/connectors/MockExpressServer.js +28 -0
  162. package/dist/test/connectors/MockExpressServer.js.map +1 -0
  163. package/dist/test/connectors/MockRegistry.d.ts +7 -0
  164. package/dist/test/connectors/MockRegistry.js +93 -0
  165. package/dist/test/connectors/MockRegistry.js.map +1 -0
  166. package/dist/test/connectors/runConnectorTest.d.ts +5 -0
  167. package/dist/test/connectors/runConnectorTest.js +106 -0
  168. package/dist/test/connectors/runConnectorTest.js.map +1 -0
  169. package/dist/test/db/getTestDBConfig.d.ts +7 -0
  170. package/dist/test/db/getTestDBConfig.js +13 -0
  171. package/dist/test/db/getTestDBConfig.js.map +1 -0
  172. package/dist/test/db/runMigrationSql.d.ts +9 -0
  173. package/dist/test/db/runMigrationSql.js +82 -0
  174. package/dist/test/db/runMigrationSql.js.map +1 -0
  175. package/dist/test/express/status.spec.d.ts +1 -0
  176. package/dist/test/express/status.spec.js +160 -0
  177. package/dist/test/express/status.spec.js.map +1 -0
  178. package/dist/test/fakeArgv.d.ts +2 -0
  179. package/dist/test/fakeArgv.js +7 -0
  180. package/dist/test/fakeArgv.js.map +1 -0
  181. package/dist/test/getAuthDecision.spec.d.ts +1 -0
  182. package/dist/test/getAuthDecision.spec.js +22 -0
  183. package/dist/test/getAuthDecision.spec.js.map +1 -0
  184. package/dist/test/getBasePathFromUrl.spec.d.ts +1 -0
  185. package/dist/test/getBasePathFromUrl.spec.js +25 -0
  186. package/dist/test/getBasePathFromUrl.spec.js.map +1 -0
  187. package/dist/test/jsverify.d.ts +2 -0
  188. package/dist/test/jsverify.js +8 -0
  189. package/dist/test/jsverify.js.map +1 -0
  190. package/dist/test/mockAuthApiHost.d.ts +14 -0
  191. package/dist/test/mockAuthApiHost.js +174 -0
  192. package/dist/test/mockAuthApiHost.js.map +1 -0
  193. package/dist/test/mockAuthorization.d.ts +3 -0
  194. package/dist/test/mockAuthorization.js +24 -0
  195. package/dist/test/mockAuthorization.js.map +1 -0
  196. package/dist/test/mockTenantDataStore.d.ts +8 -0
  197. package/dist/test/mockTenantDataStore.js +41 -0
  198. package/dist/test/mockTenantDataStore.js.map +1 -0
  199. package/dist/test/mockUserDataStore.d.ts +11 -0
  200. package/dist/test/mockUserDataStore.js +56 -0
  201. package/dist/test/mockUserDataStore.js.map +1 -0
  202. package/dist/test/registry/buildAuthorizedClient.spec.d.ts +1 -0
  203. package/dist/test/registry/buildAuthorizedClient.spec.js +101 -0
  204. package/dist/test/registry/buildAuthorizedClient.spec.js.map +1 -0
  205. package/dist/test/sampleOpaResponse.json +480 -0
  206. package/dist/test/sampleOpaResponseSimple.json +173 -0
  207. package/dist/test/sampleOpaResponseUnconditionalTrue.json +193 -0
  208. package/dist/test/sampleOpaResponseUnconditionalTrueWithDefaultRule.json +303 -0
  209. package/dist/test/sampleOpaResponseWithDefaultRule.json +303 -0
  210. package/dist/test/session/buildJwt.spec.d.ts +1 -0
  211. package/dist/test/session/buildJwt.spec.js +50 -0
  212. package/dist/test/session/buildJwt.spec.js.map +1 -0
  213. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.d.ts +1 -0
  214. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js +64 -0
  215. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsAndOwnerTest.spec.js.map +1 -0
  216. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.d.ts +1 -0
  217. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js +52 -0
  218. package/dist/test/session/buildJwtForRegistryEsriOpaGroupsTest.spec.js.map +1 -0
  219. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.d.ts +1 -0
  220. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js +36 -0
  221. package/dist/test/session/buildJwtForRegistryEsriOpaOwnerTest.spec.js.map +1 -0
  222. package/dist/test/testAsyncPage.spec.d.ts +1 -0
  223. package/dist/test/testAsyncPage.spec.js +463 -0
  224. package/dist/test/testAsyncPage.spec.js.map +1 -0
  225. package/dist/test/testOpaCompileResponseParser.spec.d.ts +1 -0
  226. package/dist/test/testOpaCompileResponseParser.spec.js +148 -0
  227. package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -0
  228. package/dist/test/util.d.ts +1 -0
  229. package/dist/test/util.js +8 -0
  230. package/dist/test/util.js.map +1 -0
  231. package/dist/util/arrayToMaybe.d.ts +2 -0
  232. package/dist/util/arrayToMaybe.js +8 -0
  233. package/dist/util/arrayToMaybe.js.map +1 -0
  234. package/dist/util/cleanOrgTitle.d.ts +1 -0
  235. package/dist/util/cleanOrgTitle.js +13 -0
  236. package/dist/util/cleanOrgTitle.js.map +1 -0
  237. package/dist/util/getMinikubeIP.d.ts +1 -0
  238. package/dist/util/getMinikubeIP.js +13 -0
  239. package/dist/util/getMinikubeIP.js.map +1 -0
  240. package/dist/util/isUuid.d.ts +2 -0
  241. package/dist/util/isUuid.js +6 -0
  242. package/dist/util/isUuid.js.map +1 -0
  243. package/dist/util/unionToThrowable.d.ts +1 -0
  244. package/dist/util/unionToThrowable.js +12 -0
  245. package/dist/util/unionToThrowable.js.map +1 -0
  246. package/dist/utilityTypes.d.ts +1 -0
  247. package/dist/utilityTypes.js +3 -0
  248. package/dist/utilityTypes.js.map +1 -0
  249. package/package.json +3 -3
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __importDefault = (this && this.__importDefault) || function (mod) {
31
+ return (mod && mod.__esModule) ? mod : { "default": mod };
32
+ };
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ const AspectCreationFailure_1 = __importDefault(require("./AspectCreationFailure"));
35
+ const AsyncPage_1 = __importStar(require("./AsyncPage"));
36
+ const ConnectorRecordId_1 = __importDefault(require("./ConnectorRecordId"));
37
+ const ConnectionResult_1 = __importDefault(require("./ConnectionResult"));
38
+ const RecordCreationFailure_1 = __importDefault(require("./RecordCreationFailure"));
39
+ const unionToThrowable_1 = __importDefault(require("./util/unionToThrowable"));
40
+ const yargs_1 = require("yargs");
41
+ const express_1 = __importDefault(require("express"));
42
+ const fs_1 = __importDefault(require("fs"));
43
+ const path_1 = __importDefault(require("path"));
44
+ const process_1 = __importDefault(require("process"));
45
+ const uuid_1 = require("uuid");
46
+ const lodash_1 = __importDefault(require("lodash"));
47
+ /**
48
+ * A base class for connectors for most any JSON-based catalog source.
49
+ */
50
+ class JsonConnector {
51
+ constructor({ source, transformer, registry, maxConcurrency = 1, sourceTag = uuid_1.v4() }) {
52
+ this.source = source;
53
+ this.transformer = transformer;
54
+ this.registry = registry;
55
+ this.maxConcurrency = maxConcurrency;
56
+ this.sourceTag = sourceTag;
57
+ this.configData = this.readConfigData();
58
+ }
59
+ readConfigData() {
60
+ try {
61
+ const argv = yargs_1.parse(process_1.default.argv);
62
+ if (!argv) {
63
+ throw new Error("failed to parse commandline parameter!");
64
+ }
65
+ let configData;
66
+ if (!argv.config) {
67
+ if (!argv.id) {
68
+ configData = {
69
+ id: this.source.id,
70
+ name: this.source.name
71
+ };
72
+ if (this.source.extras) {
73
+ configData.extras = this.source.extras;
74
+ }
75
+ if (this.source.presetRecordAspects) {
76
+ configData.presetRecordAspects = this.source.presetRecordAspects;
77
+ }
78
+ }
79
+ else {
80
+ configData = {
81
+ id: argv.id,
82
+ name: argv.name
83
+ };
84
+ if (argv.extras) {
85
+ configData.extras = argv.extras;
86
+ }
87
+ if (argv.presetRecordAspects) {
88
+ configData.presetRecordAspects = argv.presetRecordAspects;
89
+ }
90
+ }
91
+ }
92
+ else {
93
+ configData = JSON.parse(fs_1.default.readFileSync(argv.config, {
94
+ encoding: "utf-8"
95
+ }));
96
+ }
97
+ if (!configData) {
98
+ throw new Error("invalid empty config data.");
99
+ }
100
+ if (!configData.id) {
101
+ throw new Error("invalid config data, missing compulsory `id`.");
102
+ }
103
+ if (!configData.name) {
104
+ throw new Error("invalid config data, missing compulsory `name`.");
105
+ }
106
+ if (configData.presetRecordAspects &&
107
+ !configData.presetRecordAspects.length) {
108
+ console.log("Warning: `presetRecordAspects` exists but is not an array. It will not be used.");
109
+ }
110
+ return configData;
111
+ }
112
+ catch (e) {
113
+ throw new Error(`Can't read connector config data: ${e}`);
114
+ }
115
+ }
116
+ createAspectDefinitions() {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const result = new ConnectionResult_1.default();
119
+ const allAspectDefinitions = this.transformer.getRequiredAspectDefinitions();
120
+ const aspectBuilderPage = AsyncPage_1.default.single(allAspectDefinitions);
121
+ yield AsyncPage_1.forEachAsync(aspectBuilderPage, this.maxConcurrency, (aspectDefinition) => __awaiter(this, void 0, void 0, function* () {
122
+ const aspectDefinitionOrError = yield this.registry.putAspectDefinition(aspectDefinition);
123
+ if (aspectDefinitionOrError instanceof Error) {
124
+ result.aspectDefinitionFailures.push(new AspectCreationFailure_1.default(aspectDefinition.id, aspectDefinitionOrError));
125
+ }
126
+ else {
127
+ ++result.aspectDefinitionsConnected;
128
+ }
129
+ }));
130
+ return result;
131
+ });
132
+ }
133
+ createOrganization(organizationJson) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ return this.putRecord(this.transformer.organizationJsonToRecord(organizationJson), "Organization");
136
+ });
137
+ }
138
+ createDataset(datasetJson) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ return this.putRecord(this.transformer.datasetJsonToRecord(datasetJson), "Dataset");
141
+ });
142
+ }
143
+ createDistribution(distributionJson, datasetJson) {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ return this.putRecord(this.transformer.distributionJsonToRecord(distributionJson, datasetJson), "Distribution");
146
+ });
147
+ }
148
+ createOrganizations() {
149
+ return __awaiter(this, void 0, void 0, function* () {
150
+ const result = new ConnectionResult_1.default();
151
+ if (this.source.hasFirstClassOrganizations) {
152
+ const organizations = this.source.getJsonFirstClassOrganizations();
153
+ yield AsyncPage_1.forEachAsync(organizations, this.maxConcurrency, (organization) => __awaiter(this, void 0, void 0, function* () {
154
+ if (!organization) {
155
+ return;
156
+ }
157
+ const recordOrError = yield this.createOrganization(organization);
158
+ if (recordOrError instanceof Error) {
159
+ result.organizationFailures.push(new RecordCreationFailure_1.default(this.transformer.getIdFromJsonOrganization(organization, this.source.id), undefined, recordOrError));
160
+ }
161
+ else {
162
+ ++result.organizationsConnected;
163
+ }
164
+ }));
165
+ }
166
+ return result;
167
+ });
168
+ }
169
+ createDatasetsAndDistributions() {
170
+ return __awaiter(this, void 0, void 0, function* () {
171
+ const result = new ConnectionResult_1.default();
172
+ const datasets = this.source.getJsonDatasets();
173
+ yield AsyncPage_1.forEachAsync(datasets, this.maxConcurrency, (dataset) => __awaiter(this, void 0, void 0, function* () {
174
+ const record = this.transformer.datasetJsonToRecord(dataset);
175
+ const distributions = this.source.getJsonDistributions(dataset);
176
+ if (distributions) {
177
+ const distributionIds = [];
178
+ yield AsyncPage_1.forEachAsync(distributions, 1, (distribution) => __awaiter(this, void 0, void 0, function* () {
179
+ const recordOrError = yield this.createDistribution(distribution, dataset);
180
+ if (recordOrError instanceof Error) {
181
+ result.distributionFailures.push(new RecordCreationFailure_1.default(this.transformer.getIdFromJsonDistribution(distribution, dataset, this.source.id), this.transformer.getIdFromJsonDataset(dataset, this.source.id), recordOrError));
182
+ }
183
+ else {
184
+ ++result.distributionsConnected;
185
+ distributionIds.push(this.transformer.getIdFromJsonDistribution(distribution, dataset, this.source.id));
186
+ }
187
+ }));
188
+ record.aspects["dataset-distributions"] = {
189
+ distributions: distributionIds.map((id) => id.toString())
190
+ };
191
+ }
192
+ if (this.source.hasFirstClassOrganizations) {
193
+ const publisher = this.source.getJsonDatasetPublisherId(dataset);
194
+ if (publisher) {
195
+ record.aspects["dataset-publisher"] = {
196
+ publisher: new ConnectorRecordId_1.default(publisher, "Organization", this.source.id).toString()
197
+ };
198
+ }
199
+ }
200
+ else {
201
+ const publisher = yield this.source.getJsonDatasetPublisher(dataset);
202
+ if (publisher) {
203
+ const publisherId = this.transformer.getIdFromJsonOrganization(publisher, this.source.id);
204
+ if (publisherId) {
205
+ const recordOrError = yield this.createOrganization(publisher);
206
+ if (recordOrError instanceof Error) {
207
+ result.organizationFailures.push(new RecordCreationFailure_1.default(publisherId, undefined, recordOrError));
208
+ }
209
+ else {
210
+ record.aspects["dataset-publisher"] = {
211
+ publisher: publisherId.toString()
212
+ };
213
+ ++result.organizationsConnected;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ const recordOrError = yield this.putRecord(record, "Dataset");
219
+ if (recordOrError instanceof Error) {
220
+ result.datasetFailures.push(new RecordCreationFailure_1.default(this.transformer.getIdFromJsonDataset(dataset, this.source.id), undefined, recordOrError));
221
+ }
222
+ else {
223
+ ++result.datasetsConnected;
224
+ }
225
+ }));
226
+ return result;
227
+ });
228
+ }
229
+ trimRecords() {
230
+ return __awaiter(this, void 0, void 0, function* () {
231
+ return this.registry
232
+ .deleteBySource(this.sourceTag, this.source.id)
233
+ .then(unionToThrowable_1.default)
234
+ .then((deletionResult) => {
235
+ const result = new ConnectionResult_1.default();
236
+ if (deletionResult !== undefined &&
237
+ deletionResult !== "Processing") {
238
+ result.recordsTrimmed = deletionResult.count;
239
+ }
240
+ else {
241
+ result.trimStillProcessing = true;
242
+ }
243
+ return result;
244
+ });
245
+ });
246
+ }
247
+ /**
248
+ * Runs the connector, creating aspect definitions, organizations, datasets, and distributions in the
249
+ * registry as necessary.
250
+ *
251
+ * @returns {Promise<ConnectionResult>}
252
+ * @memberof JsonConnector
253
+ */
254
+ run() {
255
+ return __awaiter(this, void 0, void 0, function* () {
256
+ const aspectResult = yield this.createAspectDefinitions();
257
+ const organizationResult = yield this.createOrganizations();
258
+ const datasetAndDistributionResult = yield this.createDatasetsAndDistributions();
259
+ const recordsTrimmedResult = yield this.trimRecords();
260
+ return ConnectionResult_1.default.combine(aspectResult, organizationResult, datasetAndDistributionResult, recordsTrimmedResult);
261
+ });
262
+ }
263
+ runInteractive(options) {
264
+ const transformerForBrowserPath = path_1.default.resolve(process_1.default.cwd(), "dist", "createTransformerForBrowser.js");
265
+ if (!fs_1.default.existsSync(transformerForBrowserPath)) {
266
+ throw new Error("Cannot run this connector in interactive mode because dist/createTransformerForBrowser.js does not exist.");
267
+ }
268
+ var app = express_1.default();
269
+ app.use(require("body-parser").json());
270
+ if (options.timeoutSeconds > 0) {
271
+ this.shutdownOnIdle(app, options.timeoutSeconds);
272
+ }
273
+ app.get("/v0/status", (req, res) => {
274
+ res.send("OK");
275
+ });
276
+ app.get("/v0/config", (req, res) => {
277
+ res.send(options.transformerOptions);
278
+ });
279
+ app.get("/v0/datasets/:id", (req, res) => {
280
+ this.source.getJsonDataset(req.params.id).then(function (dataset) {
281
+ res.send(dataset);
282
+ });
283
+ });
284
+ app.get("/v0/datasets/:id/distributions", (req, res) => {
285
+ this.source.getJsonDataset(req.params.id).then((dataset) => {
286
+ return AsyncPage_1.asyncPageToArray(this.source.getJsonDistributions(dataset)).then((distributions) => {
287
+ res.send(distributions);
288
+ });
289
+ });
290
+ });
291
+ app.get("/v0/datasets/:id/publisher", (req, res) => {
292
+ this.source.getJsonDataset(req.params.id).then((dataset) => {
293
+ return this.source
294
+ .getJsonDatasetPublisher(dataset)
295
+ .then((publisher) => {
296
+ res.send(publisher);
297
+ });
298
+ });
299
+ });
300
+ app.get("/v0/search/datasets", (req, res) => {
301
+ AsyncPage_1.asyncPageToArray(this.source.searchDatasetsByTitle(req.query.title, 10)).then((datasets) => {
302
+ res.send(datasets);
303
+ });
304
+ });
305
+ if (this.source.hasFirstClassOrganizations) {
306
+ app.get("/v0/organizations/:id", (req, res) => {
307
+ this.source
308
+ .getJsonFirstClassOrganization(req.params.id)
309
+ .then(function (organization) {
310
+ res.send(organization);
311
+ });
312
+ });
313
+ app.get("/v0/search/organizations", (req, res) => {
314
+ AsyncPage_1.asyncPageToArray(this.source.searchFirstClassOrganizationsByTitle(req.query.title, 5)).then((organizations) => {
315
+ res.send(organizations);
316
+ });
317
+ });
318
+ }
319
+ app.get("/v0/test-harness.js", function (req, res) {
320
+ res.sendFile(transformerForBrowserPath);
321
+ });
322
+ app.listen(options.listenPort);
323
+ console.log(`Listening on port ${options.listenPort}.`);
324
+ }
325
+ shutdownOnIdle(express, timeoutSeconds) {
326
+ // Arrange to shut down the Express server after the idle timeout expires.
327
+ let timeoutId;
328
+ function resetTimeout() {
329
+ if (timeoutId !== undefined) {
330
+ clearTimeout(timeoutId);
331
+ }
332
+ timeoutId = setTimeout(function () {
333
+ console.log("Shutting down due to idle timeout.");
334
+ // TODO: Should just shut down the HTTP server instead of the whole process.
335
+ process_1.default.exit(0);
336
+ }, timeoutSeconds * 1000);
337
+ }
338
+ express.use(function (req, res, next) {
339
+ resetTimeout();
340
+ next();
341
+ });
342
+ resetTimeout();
343
+ }
344
+ putRecord(record, recordType) {
345
+ return __awaiter(this, void 0, void 0, function* () {
346
+ if (!record.id) {
347
+ const noIdMessage = `Tried to put record with no id: ${JSON.stringify(record)}`;
348
+ console.error(noIdMessage);
349
+ return Promise.resolve(new Error(noIdMessage));
350
+ }
351
+ return this.registry.putRecord(Object.assign(Object.assign({}, this.attachConnectorDataToSource(this.attachConnectorPresetAspects(record, recordType))), { sourceTag: this.sourceTag }));
352
+ });
353
+ }
354
+ /**
355
+ * Copy `extras` from connector config data to
356
+ * records `source` aspect
357
+ */
358
+ attachConnectorDataToSource(record) {
359
+ if (!record ||
360
+ !record.aspects ||
361
+ !record.aspects.source ||
362
+ !this.configData.extras) {
363
+ return record;
364
+ }
365
+ const deepDataCopy = lodash_1.default.merge({}, this.configData.extras);
366
+ record.aspects.source["extras"] = deepDataCopy;
367
+ return record;
368
+ }
369
+ attachConnectorPresetAspects(record, recordType) {
370
+ if (!this.configData.presetRecordAspects ||
371
+ !this.configData.presetRecordAspects.length) {
372
+ // --- no `presetRecordAspects` config, do nothing
373
+ return record;
374
+ }
375
+ const presetRecordAspects = this.configData.presetRecordAspects.filter((presetAspect) => {
376
+ if (!presetAspect.recordType) {
377
+ // --- if not specified, apply to all records
378
+ return true;
379
+ }
380
+ return (presetAspect.recordType.toUpperCase() ===
381
+ recordType.toUpperCase());
382
+ });
383
+ if (!presetRecordAspects.length) {
384
+ return record;
385
+ }
386
+ if (!record.aspects) {
387
+ record.aspects = {};
388
+ }
389
+ presetRecordAspects.forEach((presetRecordAspect) => {
390
+ if (typeof presetRecordAspect !== "object") {
391
+ return;
392
+ }
393
+ const { id, data } = presetRecordAspect;
394
+ if (!id || !data) {
395
+ return;
396
+ }
397
+ const opType = String(presetRecordAspect.opType).toUpperCase();
398
+ //--- avoid deep merge from altering data later
399
+ const deepDataCopy = lodash_1.default.merge({}, data);
400
+ if (!record.aspects[id]) {
401
+ record.aspects[id] = deepDataCopy;
402
+ return;
403
+ }
404
+ if (opType === "FILL") {
405
+ return;
406
+ }
407
+ else if (opType === "REPLACE") {
408
+ record.aspects[id] = deepDataCopy;
409
+ return;
410
+ }
411
+ else if (opType === "MERGE_RIGHT") {
412
+ record.aspects[id] = lodash_1.default.merge(record.aspects[id], deepDataCopy);
413
+ return;
414
+ }
415
+ else {
416
+ // --- MERGE_LEFT should be default operation
417
+ record.aspects[id] = lodash_1.default.mergeWith(deepDataCopy, record.aspects[id],
418
+ // --- if target property is null, it should be overwritten as well
419
+ (a, b) => (b === null ? a : undefined));
420
+ return;
421
+ }
422
+ });
423
+ return record;
424
+ }
425
+ }
426
+ exports.default = JsonConnector;
427
+ //# sourceMappingURL=JsonConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonConnector.js","sourceRoot":"","sources":["../src/JsonConnector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oFAA4D;AAC5D,yDAAwE;AACxE,4EAAoE;AACpE,0EAAkD;AAClD,oFAA4D;AAG5D,+EAAuD;AACvD,iCAA2C;AAE3C,sDAA8B;AAC9B,4CAAoB;AACpB,gDAAwB;AACxB,sDAA8B;AAC9B,+BAAoC;AACpC,oDAAuB;AAEvB;;GAEG;AACH,MAAqB,aAAa;IAQ9B,YAAY,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,cAAc,GAAG,CAAC,EAClB,SAAS,GAAG,SAAM,EAAE,EACD;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAED,cAAc;QACV,IAAI;YACA,MAAM,IAAI,GAAG,aAAS,CAAC,iBAAO,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE;gBACP,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;aAC7D;YAED,IAAI,UAA+B,CAAC;YAEpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;oBACV,UAAU,GAAG;wBACT,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;wBAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;qBACzB,CAAC;oBACF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;wBACpB,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;qBAC1C;oBACD,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;wBACjC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;qBACpE;iBACJ;qBAAM;oBACH,UAAU,GAAG;wBACT,EAAE,EAAE,IAAI,CAAC,EAAY;wBACrB,IAAI,EAAE,IAAI,CAAC,IAAc;qBAC5B,CAAC;oBACF,IAAI,IAAI,CAAC,MAAM,EAAE;wBACb,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAA0C,CAAC;qBACvE;oBACD,IAAI,IAAI,CAAC,mBAAmB,EAAE;wBAC1B,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAwD,CAAC;qBAClG;iBACJ;aACJ;iBAAM;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CACnB,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAgB,EAAE;oBACnC,QAAQ,EAAE,OAAO;iBACpB,CAAC,CACL,CAAC;aACL;YAED,IAAI,CAAC,UAAU,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;aACjD;YAED,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CACX,+CAA+C,CAClD,CAAC;aACL;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAClB,MAAM,IAAI,KAAK,CACX,iDAAiD,CACpD,CAAC;aACL;YAED,IACI,UAAU,CAAC,mBAAmB;gBAC9B,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,EACxC;gBACE,OAAO,CAAC,GAAG,CACP,iFAAiF,CACpF,CAAC;aACL;YAED,OAAO,UAAU,CAAC;SACrB;QAAC,OAAO,CAAC,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC;SAC7D;IACL,CAAC;IAEK,uBAAuB;;YACzB,MAAM,MAAM,GAAG,IAAI,0BAAgB,EAAE,CAAC;YAEtC,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAC;YAE7E,MAAM,iBAAiB,GAAG,mBAAS,CAAC,MAAM,CACtC,oBAAoB,CACvB,CAAC;YACF,MAAM,wBAAY,CACd,iBAAiB,EACjB,IAAI,CAAC,cAAc,EACnB,CAAO,gBAAgB,EAAE,EAAE;gBACvB,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CACnE,gBAAgB,CACnB,CAAC;gBACF,IAAI,uBAAuB,YAAY,KAAK,EAAE;oBAC1C,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAChC,IAAI,+BAAqB,CACrB,gBAAgB,CAAC,EAAE,EACnB,uBAAuB,CAC1B,CACJ,CAAC;iBACL;qBAAM;oBACH,EAAE,MAAM,CAAC,0BAA0B,CAAC;iBACvC;YACL,CAAC,CAAA,CACJ,CAAC;YAEF,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;IAEK,kBAAkB,CACpB,gBAAwB;;YAExB,OAAO,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,EAC3D,cAAc,CACjB,CAAC;QACN,CAAC;KAAA;IAEK,aAAa,CAAC,WAAmB;;YACnC,OAAO,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,EACjD,SAAS,CACZ,CAAC;QACN,CAAC;KAAA;IAEK,kBAAkB,CACpB,gBAAwB,EACxB,WAAmB;;YAEnB,OAAO,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,WAAW,CAAC,wBAAwB,CACrC,gBAAgB,EAChB,WAAW,CACd,EACD,cAAc,CACjB,CAAC;QACN,CAAC;KAAA;IAEK,mBAAmB;;YACrB,MAAM,MAAM,GAAG,IAAI,0BAAgB,EAAE,CAAC;YAEtC,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;gBACxC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC;gBACnE,MAAM,wBAAY,CACd,aAAa,EACb,IAAI,CAAC,cAAc,EACnB,CAAO,YAAY,EAAE,EAAE;oBACnB,IAAI,CAAC,YAAY,EAAE;wBACf,OAAO;qBACV;oBACD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC/C,YAAY,CACf,CAAC;oBACF,IAAI,aAAa,YAAY,KAAK,EAAE;wBAChC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAC5B,IAAI,+BAAqB,CACrB,IAAI,CAAC,WAAW,CAAC,yBAAyB,CACtC,YAAY,EACZ,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,EACD,SAAS,EACT,aAAa,CAChB,CACJ,CAAC;qBACL;yBAAM;wBACH,EAAE,MAAM,CAAC,sBAAsB,CAAC;qBACnC;gBACL,CAAC,CAAA,CACJ,CAAC;aACL;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;IAEK,8BAA8B;;YAChC,MAAM,MAAM,GAAG,IAAI,0BAAgB,EAAE,CAAC;YAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC/C,MAAM,wBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAO,OAAO,EAAE,EAAE;gBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAE7D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,aAAa,EAAE;oBACf,MAAM,eAAe,GAAwB,EAAE,CAAC;oBAChD,MAAM,wBAAY,CAAC,aAAa,EAAE,CAAC,EAAE,CAAO,YAAY,EAAE,EAAE;wBACxD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC/C,YAAY,EACZ,OAAO,CACV,CAAC;wBACF,IAAI,aAAa,YAAY,KAAK,EAAE;4BAChC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAC5B,IAAI,+BAAqB,CACrB,IAAI,CAAC,WAAW,CAAC,yBAAyB,CACtC,YAAY,EACZ,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,EACD,IAAI,CAAC,WAAW,CAAC,oBAAoB,CACjC,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,EACD,aAAa,CAChB,CACJ,CAAC;yBACL;6BAAM;4BACH,EAAE,MAAM,CAAC,sBAAsB,CAAC;4BAChC,eAAe,CAAC,IAAI,CAChB,IAAI,CAAC,WAAW,CAAC,yBAAyB,CACtC,YAAY,EACZ,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,CACJ,CAAC;yBACL;oBACL,CAAC,CAAA,CAAC,CAAC;oBAEH,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG;wBACtC,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;qBAC5D,CAAC;iBACL;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;oBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,yBAAyB,CACnD,OAAO,CACV,CAAC;oBACF,IAAI,SAAS,EAAE;wBACX,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;4BAClC,SAAS,EAAE,IAAI,2BAAiB,CAC5B,SAAS,EACT,cAAc,EACd,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,CAAC,QAAQ,EAAE;yBACf,CAAC;qBACL;iBACJ;qBAAM;oBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,CACvD,OAAO,CACV,CAAC;oBACF,IAAI,SAAS,EAAE;wBACX,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAC1D,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,CAAC;wBAEF,IAAI,WAAW,EAAE;4BACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC/C,SAAS,CACZ,CAAC;4BACF,IAAI,aAAa,YAAY,KAAK,EAAE;gCAChC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAC5B,IAAI,+BAAqB,CACrB,WAAW,EACX,SAAS,EACT,aAAa,CAChB,CACJ,CAAC;6BACL;iCAAM;gCACH,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;oCAClC,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE;iCACpC,CAAC;gCACF,EAAE,MAAM,CAAC,sBAAsB,CAAC;6BACnC;yBACJ;qBACJ;iBACJ;gBAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC9D,IAAI,aAAa,YAAY,KAAK,EAAE;oBAChC,MAAM,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,+BAAqB,CACrB,IAAI,CAAC,WAAW,CAAC,oBAAoB,CACjC,OAAO,EACP,IAAI,CAAC,MAAM,CAAC,EAAE,CACjB,EACD,SAAS,EACT,aAAa,CAChB,CACJ,CAAC;iBACL;qBAAM;oBACH,EAAE,MAAM,CAAC,iBAAiB,CAAC;iBAC9B;YACL,CAAC,CAAA,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;IAEK,WAAW;;YACb,OAAO,IAAI,CAAC,QAAQ;iBACf,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;iBAC9C,IAAI,CAAC,0BAAgB,CAAC;iBACtB,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,IAAI,0BAAgB,EAAE,CAAC;gBAEtC,IACI,cAAc,KAAK,SAAS;oBAC5B,cAAc,KAAK,YAAY,EACjC;oBACE,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC;iBAChD;qBAAM;oBACH,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;iBACrC;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC,CAAC,CAAC;QACX,CAAC;KAAA;IAED;;;;;;OAMG;IACG,GAAG;;YACL,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC1D,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5D,MAAM,4BAA4B,GAAG,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACjF,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAEtD,OAAO,0BAAgB,CAAC,OAAO,CAC3B,YAAY,EACZ,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,CACvB,CAAC;QACN,CAAC;KAAA;IAED,cAAc,CAAC,OAA2C;QACtD,MAAM,yBAAyB,GAAG,cAAI,CAAC,OAAO,CAC1C,iBAAO,CAAC,GAAG,EAAE,EACb,MAAM,EACN,gCAAgC,CACnC,CAAC;QACF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE;YAC3C,MAAM,IAAI,KAAK,CACX,2GAA2G,CAC9G,CAAC;SACL;QAED,IAAI,GAAG,GAAG,iBAAO,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvC,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;SACpD;QAED,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,OAAO;gBAC5D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACnD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACvD,OAAO,4BAAgB,CACnB,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAC5C,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;oBACrB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACvD,OAAO,IAAI,CAAC,MAAM;qBACb,uBAAuB,CAAC,OAAO,CAAC;qBAChC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;oBAChB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACxC,4BAAgB,CACZ,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,CACnE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;YACxC,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC1C,IAAI,CAAC,MAAM;qBACN,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;qBAC5C,IAAI,CAAC,UAAU,YAAY;oBACxB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC7C,4BAAgB,CACZ,IAAI,CAAC,MAAM,CAAC,oCAAoC,CAC5C,GAAG,CAAC,KAAK,CAAC,KAAe,EACzB,CAAC,CACJ,CACJ,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;oBACrB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;QAED,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,GAAG,EAAE,GAAG;YAC7C,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;IAC5D,CAAC;IAEO,cAAc,CAAC,OAAwB,EAAE,cAAsB;QACnE,0EAA0E;QAC1E,IAAI,SAAuB,CAAC;QAE5B,SAAS,YAAY;YACjB,IAAI,SAAS,KAAK,SAAS,EAAE;gBACzB,YAAY,CAAC,SAAS,CAAC,CAAC;aAC3B;YAED,SAAS,GAAG,UAAU,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBAElD,4EAA4E;gBAC5E,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI;YAChC,YAAY,EAAE,CAAC;YACf,IAAI,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,YAAY,EAAE,CAAC;IACnB,CAAC;IAEY,SAAS,CAClB,MAAc,EACd,UAAsB;;YAEtB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBACZ,MAAM,WAAW,GAAG,mCAAmC,IAAI,CAAC,SAAS,CACjE,MAAM,CACT,EAAE,CAAC;gBAEJ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAE3B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;aAClD;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,iCACvB,IAAI,CAAC,2BAA2B,CAC/B,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,CACxD,KACD,SAAS,EAAE,IAAI,CAAC,SAAS,IAC3B,CAAC;QACP,CAAC;KAAA;IAED;;;OAGG;IACK,2BAA2B,CAAC,MAAc;QAC9C,IACI,CAAC,MAAM;YACP,CAAC,MAAM,CAAC,OAAO;YACf,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;YACtB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EACzB;YACE,OAAO,MAAM,CAAC;SACjB;QACD,MAAM,YAAY,GAAG,gBAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;QAC/C,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,4BAA4B,CAChC,MAAc,EACd,UAAsB;QAEtB,IACI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB;YACpC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAC7C;YACE,kDAAkD;YAClD,OAAO,MAAM,CAAC;SACjB;QACD,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAClE,CAAC,YAAY,EAAE,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;gBAC1B,6CAA6C;gBAC7C,OAAO,IAAI,CAAC;aACf;YACD,OAAO,CACH,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE;gBACrC,UAAU,CAAC,WAAW,EAAE,CAC3B,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;YAC7B,OAAO,MAAM,CAAC;SACjB;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACjB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;SACvB;QACD,mBAAmB,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,EAAE;YAC/C,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE;gBACxC,OAAO;aACV;YAED,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC;YACxC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE;gBACd,OAAO;aACV;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/D,+CAA+C;YAC/C,MAAM,YAAY,GAAG,gBAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACrB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC;gBAClC,OAAO;aACV;YAED,IAAI,MAAM,KAAK,MAAM,EAAE;gBACnB,OAAO;aACV;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAC7B,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC;gBAClC,OAAO;aACV;iBAAM,IAAI,MAAM,KAAK,aAAa,EAAE;gBACjC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,gBAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;gBAC/D,OAAO;aACV;iBAAM;gBACH,6CAA6C;gBAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,gBAAC,CAAC,SAAS,CAC5B,YAAY,EACZ,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClB,mEAAmE;gBACnE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACzC,CAAC;gBACF,OAAO;aACV;QACL,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA1jBD,gCA0jBC"}
@@ -0,0 +1,112 @@
1
+ import { AspectDefinition, Record } from "./generated/registry/api";
2
+ import AspectBuilder from "./AspectBuilder";
3
+ import ConnectorRecordId from "./ConnectorRecordId";
4
+ /**
5
+ * A base class for transformers for most any JSON-based catalog source.
6
+ * A transformer takes source data and transforms it to registry records and aspects.
7
+ */
8
+ export default abstract class JsonTransformer {
9
+ readonly sourceId: string;
10
+ private datasetAspectBuilders;
11
+ private distributionAspectBuilders;
12
+ private organizationAspectBuilders;
13
+ private organizationAspects;
14
+ private datasetAspects;
15
+ private distributionAspects;
16
+ private tenantId;
17
+ constructor({ sourceId, libraries, datasetAspectBuilders, distributionAspectBuilders, organizationAspectBuilders }: JsonTransformerOptions);
18
+ /**
19
+ * Create a {@link Record} from JSON data representing an organization.
20
+ *
21
+ * @param {string} id The ID of the record.
22
+ * @param {string} name The name of the record.
23
+ * @param {object} jsonOrganization The JSON data representing the organization.
24
+ * @returns {Record} The record.
25
+ *
26
+ * @memberof JsonConnector
27
+ */
28
+ organizationJsonToRecord(jsonOrganization: object): Record;
29
+ datasetJsonToRecord(jsonDataset: object): Record;
30
+ distributionJsonToRecord(jsonDistribution: object, jsonDataset: object): Record;
31
+ getRequiredAspectDefinitions(): AspectDefinition[];
32
+ abstract getIdFromJsonOrganization(jsonOrganization: any, sourceId: string): ConnectorRecordId;
33
+ abstract getIdFromJsonDataset(jsonDataset: any, sourceId: string): ConnectorRecordId;
34
+ abstract getIdFromJsonDistribution(jsonDistribution: any, jsonDataset: any, sourceId: string): ConnectorRecordId;
35
+ abstract getNameFromJsonOrganization(jsonOrganization: any): string;
36
+ abstract getNameFromJsonDataset(jsonDataset: any): string;
37
+ abstract getNameFromJsonDistribution(jsonDistribution: any, jsonDataset: any): string;
38
+ reviseOrganizationRecord(record: Record): Record;
39
+ jsonToRecord(id: ConnectorRecordId, name: string, json: any, aspects: CompiledAspects): Record;
40
+ }
41
+ export declare function buildersToCompiledAspects(builders: AspectBuilder[], setupParameters: BuilderSetupFunctionParameters, buildParameters: BuilderFunctionParameters): CompiledAspects;
42
+ export interface JsonTransformerOptions {
43
+ sourceId: string;
44
+ libraries?: object;
45
+ datasetAspectBuilders?: AspectBuilder[];
46
+ distributionAspectBuilders?: AspectBuilder[];
47
+ organizationAspectBuilders?: AspectBuilder[];
48
+ maxConcurrency?: number;
49
+ tenantId: number;
50
+ }
51
+ export interface CompiledAspects {
52
+ parameterNames: string[];
53
+ parameters: BuilderFunctionParameters;
54
+ aspects: CompiledAspect[];
55
+ }
56
+ interface CompiledAspect {
57
+ id: string;
58
+ builderFunction: Function;
59
+ setupResult: any;
60
+ }
61
+ interface ReportProblem {
62
+ (title: string, message?: string, additionalInfo?: any): void;
63
+ }
64
+ export interface BuilderSetupFunctionParameters {
65
+ /**
66
+ * The transformer that is building aspects.
67
+ *
68
+ * @type {JsonTransformer}
69
+ * @memberof BuilderFunctionParameters
70
+ */
71
+ transformer: JsonTransformer;
72
+ /**
73
+ * Provides access to utility libraries that may be helpful in setting up the builder.
74
+ *
75
+ * @type {BuilderFunctionLibraries}
76
+ * @memberOf BuilderFunctionParameters
77
+ */
78
+ libraries: object;
79
+ }
80
+ export declare abstract class BuilderFunctionParameters {
81
+ /**
82
+ * The result of invoking the {@link AspectBuilder#setupFunctionString}, or undefined if there is no
83
+ * {@link AspectBuilder#setupFunctionString} defined for this builder.
84
+ *
85
+ * @type {*}
86
+ * @memberOf BuilderFunctionParameters
87
+ */
88
+ setup: any;
89
+ /**
90
+ * The transformer that is building aspects.
91
+ *
92
+ * @type {JsonTransformer}
93
+ * @memberof BuilderFunctionParameters
94
+ */
95
+ transformer: JsonTransformer;
96
+ /**
97
+ * Reports a non-fatal problem creating an aspect.
98
+ *
99
+ * @type {ReportProblem}
100
+ * @memberOf BuilderFunctionParameters
101
+ */
102
+ reportProblem: ReportProblem;
103
+ /**
104
+ * Provides access to utility libraries that may be helpful in building aspects.
105
+ *
106
+ * @type {BuilderFunctionLibraries}
107
+ * @memberOf BuilderFunctionParameters
108
+ */
109
+ libraries: object;
110
+ [propName: string]: any;
111
+ }
112
+ export {};