quidproquo-core 0.1.13 → 0.1.14

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 (29) hide show
  1. package/lib/commonjs/actions/keyValueStore/KeyValueStoreQueryActionTypes.d.ts +1 -0
  2. package/lib/commonjs/actions/keyValueStore/KeyValueStoreQueryActionTypes.js.map +1 -1
  3. package/lib/commonjs/config/settings/queue.js +14 -3
  4. package/lib/commonjs/config/settings/queue.js.map +1 -1
  5. package/lib/commonjs/logic/actionLogic.js +10 -0
  6. package/lib/commonjs/logic/actionLogic.js.map +1 -1
  7. package/lib/commonjs/logic/index.d.ts +1 -0
  8. package/lib/commonjs/logic/index.js +1 -0
  9. package/lib/commonjs/logic/index.js.map +1 -1
  10. package/lib/commonjs/logic/transientErrorNames.d.ts +20 -0
  11. package/lib/commonjs/logic/transientErrorNames.js +52 -0
  12. package/lib/commonjs/logic/transientErrorNames.js.map +1 -0
  13. package/lib/commonjs/qpqCoreUtils.js +7 -0
  14. package/lib/commonjs/qpqCoreUtils.js.map +1 -1
  15. package/lib/esm/actions/keyValueStore/KeyValueStoreQueryActionTypes.d.ts +1 -0
  16. package/lib/esm/actions/keyValueStore/KeyValueStoreQueryActionTypes.js.map +1 -1
  17. package/lib/esm/config/settings/queue.js +12 -1
  18. package/lib/esm/config/settings/queue.js.map +1 -1
  19. package/lib/esm/logic/actionLogic.js +10 -0
  20. package/lib/esm/logic/actionLogic.js.map +1 -1
  21. package/lib/esm/logic/index.d.ts +1 -0
  22. package/lib/esm/logic/index.js +1 -0
  23. package/lib/esm/logic/index.js.map +1 -1
  24. package/lib/esm/logic/transientErrorNames.d.ts +20 -0
  25. package/lib/esm/logic/transientErrorNames.js +48 -0
  26. package/lib/esm/logic/transientErrorNames.js.map +1 -0
  27. package/lib/esm/qpqCoreUtils.js +7 -0
  28. package/lib/esm/qpqCoreUtils.js.map +1 -1
  29. package/package.json +2 -2
@@ -9,6 +9,7 @@ export interface KeyValueStoreQueryOptions {
9
9
  nextPageKey?: string;
10
10
  filter?: KvsQueryOperation;
11
11
  scope?: string;
12
+ consistentRead?: boolean;
12
13
  }
13
14
  export interface KeyValueStoreQueryActionPayload {
14
15
  keyValueStoreName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValueStoreQueryActionTypes.js","sourceRoot":"","sources":["../../../../src/actions/keyValueStore/KeyValueStoreQueryActionTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { QpqPagedData } from '../../types';\nimport { Action, ActionProcessor, ActionRequester } from '../../types/Action';\nimport { KeyValueStoreActionType } from './KeyValueStoreActionType';\nimport { KvsQueryOperation } from './types';\n\n// Options Type\nexport interface KeyValueStoreQueryOptions {\n // Accepted but not implemented: no processor applies a TTL to query results.\n ttlInSeconds?: number;\n sortAscending?: boolean;\n limit?: number;\n nextPageKey?: string;\n filter?: KvsQueryOperation;\n // Composed into partition-key conditions by the processor; requires a string-typed partition key.\n scope?: string;\n}\n\n// Payload\nexport interface KeyValueStoreQueryActionPayload {\n keyValueStoreName: string;\n\n keyCondition: KvsQueryOperation;\n\n options?: KeyValueStoreQueryOptions;\n}\n\n// Action\nexport interface KeyValueStoreQueryAction extends Action<KeyValueStoreQueryActionPayload> {\n type: KeyValueStoreActionType.Query;\n payload: KeyValueStoreQueryActionPayload;\n}\n\n// Function Types\nexport type KeyValueStoreQueryActionProcessor<KvsItem> = ActionProcessor<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\nexport type KeyValueStoreQueryActionRequester<KvsItem> = ActionRequester<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\n"]}
1
+ {"version":3,"file":"KeyValueStoreQueryActionTypes.js","sourceRoot":"","sources":["../../../../src/actions/keyValueStore/KeyValueStoreQueryActionTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { QpqPagedData } from '../../types';\nimport { Action, ActionProcessor, ActionRequester } from '../../types/Action';\nimport { KeyValueStoreActionType } from './KeyValueStoreActionType';\nimport { KvsQueryOperation } from './types';\n\n// Options Type\nexport interface KeyValueStoreQueryOptions {\n // Accepted but not implemented: no processor applies a TTL to query results.\n ttlInSeconds?: number;\n sortAscending?: boolean;\n limit?: number;\n nextPageKey?: string;\n filter?: KvsQueryOperation;\n // Composed into partition-key conditions by the processor; requires a string-typed partition key.\n scope?: string;\n // Read the writer's own most recent writes, at the cost of a slower and (on DynamoDB) doubly-charged\n // read.\n //\n // Default reads are EVENTUALLY consistent, which is right for a viewer and wrong for a caller that just\n // wrote and is now reading back to decide something. That case is not hypothetical: a flow run appends\n // its terminal event and immediately re-lists the log to fold the outcome, and under load the terminal\n // event is intermittently not yet visible — so a run that succeeded reads back as having no outcome at\n // all, with nothing recorded to explain it.\n //\n // Use it for read-your-own-writes and for any fold used as a COORDINATION primitive (deciding \"am I\n // last\", \"did this finish\"). Do not use it for ordinary reads.\n consistentRead?: boolean;\n}\n\n// Payload\nexport interface KeyValueStoreQueryActionPayload {\n keyValueStoreName: string;\n\n keyCondition: KvsQueryOperation;\n\n options?: KeyValueStoreQueryOptions;\n}\n\n// Action\nexport interface KeyValueStoreQueryAction extends Action<KeyValueStoreQueryActionPayload> {\n type: KeyValueStoreActionType.Query;\n payload: KeyValueStoreQueryActionPayload;\n}\n\n// Function Types\nexport type KeyValueStoreQueryActionProcessor<KvsItem> = ActionProcessor<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\nexport type KeyValueStoreQueryActionRequester<KvsItem> = ActionRequester<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\n"]}
@@ -3,17 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineQueue = void 0;
4
4
  const QPQConfig_1 = require("../QPQConfig");
5
5
  const defineQueue = (name, processors, options) => {
6
- var _a;
6
+ var _a, _b;
7
7
  return {
8
8
  configSettingType: QPQConfig_1.QPQCoreConfigSettingType.queue,
9
9
  uniqueKey: name,
10
10
  name,
11
11
  batchSize: (options === null || options === void 0 ? void 0 : options.batchSize) || 0,
12
- batchWindowInSeconds: (options === null || options === void 0 ? void 0 : options.batchWindowInSeconds) || 5,
12
+ // Default 0 invoke as soon as a message arrives which is also AWS's own default for
13
+ // MaximumBatchingWindowInSeconds.
14
+ //
15
+ // It used to default to 5 with a `||`, which was wrong twice over. A window only ever reaches AWS for a
16
+ // queue that sets `batchSize > 0` (the CDK construct omits both together otherwise), and in practice
17
+ // those queues all use batchSize 1 — where a batch is FULL on the first message, so a window can never
18
+ // gather a second one and can only delay the first. And `||` meant 0 was falsy, so a caller who noticed
19
+ // and passed 0 still got 5: the setting could not be turned off at all.
20
+ //
21
+ // A queue that genuinely wants to accumulate should ask for a window explicitly, rather than every
22
+ // queue inheriting latency that most of them cannot use.
23
+ batchWindowInSeconds: (_a = options === null || options === void 0 ? void 0 : options.batchWindowInSeconds) !== null && _a !== void 0 ? _a : 0,
13
24
  concurrency: (options === null || options === void 0 ? void 0 : options.concurrency) || 1,
14
25
  maxTries: (options === null || options === void 0 ? void 0 : options.maxTries) || 1,
15
26
  ttRetryInSeconds: Math.min((options === null || options === void 0 ? void 0 : options.ttRetryInSeconds) || 15 * 60, 15 * 60),
16
- hasDeadLetterQueue: (_a = options === null || options === void 0 ? void 0 : options.hasDeadLetterQueue) !== null && _a !== void 0 ? _a : true,
27
+ hasDeadLetterQueue: (_b = options === null || options === void 0 ? void 0 : options.hasDeadLetterQueue) !== null && _b !== void 0 ? _b : true,
17
28
  qpqQueueProcessors: processors,
18
29
  eventBusSubscriptions: (options === null || options === void 0 ? void 0 : options.eventBusSubscriptions) || [],
19
30
  maxConcurrentExecutions: options === null || options === void 0 ? void 0 : options.maxConcurrentExecutions,
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../src/config/settings/queue.ts"],"names":[],"mappings":";;;AACA,4CAAqG;AAuC9F,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,UAA8B,EAAE,OAAwC,EAAyB,EAAE;;IAC3I,OAAO;QACL,iBAAiB,EAAE,oCAAwB,CAAC,KAAK;QACjD,SAAS,EAAE,IAAI;QAEf,IAAI;QAEJ,SAAS,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,KAAI,CAAC;QAClC,oBAAoB,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,oBAAoB,KAAI,CAAC;QAExD,WAAW,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,CAAC;QAEtC,QAAQ,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,KAAI,CAAC;QAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,KAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAEzE,kBAAkB,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,mCAAI,IAAI;QAEvD,kBAAkB,EAAE,UAAU;QAE9B,qBAAqB,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qBAAqB,KAAI,EAAE;QAE3D,uBAAuB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB;QAEzD,MAAM,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,KAAI,KAAK;KACjC,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,WAAW,eAyBtB","sourcesContent":["import { QpqFunctionRuntime } from '../../types';\nimport { QPQConfigAdvancedSettings, QPQConfigSetting, QPQCoreConfigSettingType } from '../QPQConfig';\n\nexport interface QpqQueueProcessors {\n [type: string]: QpqFunctionRuntime;\n}\n\nexport interface QPQConfigAdvancedQueueSettings extends QPQConfigAdvancedSettings {\n batchSize?: number;\n batchWindowInSeconds?: number;\n concurrency?: number;\n maxTries?: number;\n ttRetryInSeconds?: number;\n hasDeadLetterQueue?: boolean;\n eventBusSubscriptions?: string[];\n maxConcurrentExecutions?: number;\n isFifo?: boolean;\n}\n\nexport interface QueueQPQConfigSetting extends QPQConfigSetting {\n name: string;\n\n batchSize: number;\n batchWindowInSeconds: number;\n\n concurrency: number;\n\n maxTries: number;\n ttRetryInSeconds: number;\n\n hasDeadLetterQueue: boolean;\n qpqQueueProcessors: QpqQueueProcessors;\n\n eventBusSubscriptions: string[];\n\n maxConcurrentExecutions?: number;\n\n isFifo: boolean;\n}\n\nexport const defineQueue = (name: string, processors: QpqQueueProcessors, options?: QPQConfigAdvancedQueueSettings): QueueQPQConfigSetting => {\n return {\n configSettingType: QPQCoreConfigSettingType.queue,\n uniqueKey: name,\n\n name,\n\n batchSize: options?.batchSize || 0,\n batchWindowInSeconds: options?.batchWindowInSeconds || 5,\n\n concurrency: options?.concurrency || 1,\n\n maxTries: options?.maxTries || 1,\n ttRetryInSeconds: Math.min(options?.ttRetryInSeconds || 15 * 60, 15 * 60),\n\n hasDeadLetterQueue: options?.hasDeadLetterQueue ?? true,\n\n qpqQueueProcessors: processors,\n\n eventBusSubscriptions: options?.eventBusSubscriptions || [],\n\n maxConcurrentExecutions: options?.maxConcurrentExecutions,\n\n isFifo: options?.isFifo || false,\n };\n};\n"]}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../src/config/settings/queue.ts"],"names":[],"mappings":";;;AACA,4CAAqG;AAuC9F,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,UAA8B,EAAE,OAAwC,EAAyB,EAAE;;IAC3I,OAAO;QACL,iBAAiB,EAAE,oCAAwB,CAAC,KAAK;QACjD,SAAS,EAAE,IAAI;QAEf,IAAI;QAEJ,SAAS,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,KAAI,CAAC;QAClC,wFAAwF;QACxF,kCAAkC;QAClC,EAAE;QACF,wGAAwG;QACxG,qGAAqG;QACrG,uGAAuG;QACvG,wGAAwG;QACxG,wEAAwE;QACxE,EAAE;QACF,mGAAmG;QACnG,yDAAyD;QACzD,oBAAoB,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,oBAAoB,mCAAI,CAAC;QAExD,WAAW,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,CAAC;QAEtC,QAAQ,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,KAAI,CAAC;QAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,KAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAEzE,kBAAkB,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,mCAAI,IAAI;QAEvD,kBAAkB,EAAE,UAAU;QAE9B,qBAAqB,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qBAAqB,KAAI,EAAE;QAE3D,uBAAuB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB;QAEzD,MAAM,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,KAAI,KAAK;KACjC,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,WAAW,eAoCtB","sourcesContent":["import { QpqFunctionRuntime } from '../../types';\nimport { QPQConfigAdvancedSettings, QPQConfigSetting, QPQCoreConfigSettingType } from '../QPQConfig';\n\nexport interface QpqQueueProcessors {\n [type: string]: QpqFunctionRuntime;\n}\n\nexport interface QPQConfigAdvancedQueueSettings extends QPQConfigAdvancedSettings {\n batchSize?: number;\n batchWindowInSeconds?: number;\n concurrency?: number;\n maxTries?: number;\n ttRetryInSeconds?: number;\n hasDeadLetterQueue?: boolean;\n eventBusSubscriptions?: string[];\n maxConcurrentExecutions?: number;\n isFifo?: boolean;\n}\n\nexport interface QueueQPQConfigSetting extends QPQConfigSetting {\n name: string;\n\n batchSize: number;\n batchWindowInSeconds: number;\n\n concurrency: number;\n\n maxTries: number;\n ttRetryInSeconds: number;\n\n hasDeadLetterQueue: boolean;\n qpqQueueProcessors: QpqQueueProcessors;\n\n eventBusSubscriptions: string[];\n\n maxConcurrentExecutions?: number;\n\n isFifo: boolean;\n}\n\nexport const defineQueue = (name: string, processors: QpqQueueProcessors, options?: QPQConfigAdvancedQueueSettings): QueueQPQConfigSetting => {\n return {\n configSettingType: QPQCoreConfigSettingType.queue,\n uniqueKey: name,\n\n name,\n\n batchSize: options?.batchSize || 0,\n // Default 0 — invoke as soon as a message arrives — which is also AWS's own default for\n // MaximumBatchingWindowInSeconds.\n //\n // It used to default to 5 with a `||`, which was wrong twice over. A window only ever reaches AWS for a\n // queue that sets `batchSize > 0` (the CDK construct omits both together otherwise), and in practice\n // those queues all use batchSize 1 — where a batch is FULL on the first message, so a window can never\n // gather a second one and can only delay the first. And `||` meant 0 was falsy, so a caller who noticed\n // and passed 0 still got 5: the setting could not be turned off at all.\n //\n // A queue that genuinely wants to accumulate should ask for a window explicitly, rather than every\n // queue inheriting latency that most of them cannot use.\n batchWindowInSeconds: options?.batchWindowInSeconds ?? 0,\n\n concurrency: options?.concurrency || 1,\n\n maxTries: options?.maxTries || 1,\n ttRetryInSeconds: Math.min(options?.ttRetryInSeconds || 15 * 60, 15 * 60),\n\n hasDeadLetterQueue: options?.hasDeadLetterQueue ?? true,\n\n qpqQueueProcessors: processors,\n\n eventBusSubscriptions: options?.eventBusSubscriptions || [],\n\n maxConcurrentExecutions: options?.maxConcurrentExecutions,\n\n isFifo: options?.isFifo || false,\n };\n};\n"]}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.actionResultErrorFromCaughtError = exports.resolveActionResultError = exports.resolveActionResult = exports.isErroredActionResult = exports.actionResult = exports.actionResultError = exports.getUnsuccessfulEitherActionResult = exports.getSuccessfulEitherActionResult = void 0;
4
4
  const ErrorTypeEnum_1 = require("../types/ErrorTypeEnum");
5
+ const transientErrorNames_1 = require("./transientErrorNames");
5
6
  const getSuccessfulEitherActionResult = (result) => ({
6
7
  success: true,
7
8
  result,
@@ -51,6 +52,15 @@ const actionResultErrorFromCaughtError = (error, errorMap) => {
51
52
  return handler(error);
52
53
  }
53
54
  const unmappedKey = errorCode !== null && errorCode !== void 0 ? errorCode : errorName;
55
+ // TODO: This is really shit... this does not belong here.
56
+ //
57
+ // Classify throttles and transient service failures BEFORE the generic fallback, so a caller can tell
58
+ // "the service is busy" from "this request is wrong" without matching on error text. Without this they
59
+ // are indistinguishable GenericErrors, and a caller that records failures durably writes a permanent
60
+ // failure for something that would have succeeded on the next attempt.
61
+ if ((0, transientErrorNames_1.isTransientErrorName)(errorCode) || (0, transientErrorNames_1.isTransientErrorName)(errorName)) {
62
+ return (0, exports.actionResultError)(ErrorTypeEnum_1.ErrorTypeEnum.OutOfResources, `A transient error occurred, retry [${unmappedKey}].`);
63
+ }
54
64
  console.log(`Error: ${unmappedKey}`);
55
65
  return (0, exports.actionResultError)(ErrorTypeEnum_1.ErrorTypeEnum.GenericError, `An unexpected error occurred [${unmappedKey}].`);
56
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"actionLogic.js","sourceRoot":"","sources":["../../../src/logic/actionLogic.ts"],"names":[],"mappings":";;;AACA,0DAAuD;AAGhD,MAAM,+BAA+B,GAAG,CAAI,MAAS,EAAyB,EAAE,CAAC,CAAC;IACvF,OAAO,EAAE,IAAI;IACb,MAAM;CACP,CAAC,CAAC;AAHU,QAAA,+BAA+B,mCAGzC;AAEI,MAAM,iCAAiC,GAAG,CAAC,KAAe,EAA2B,EAAE,CAAC,CAAC;IAC9F,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAHU,QAAA,iCAAiC,qCAG3C;AAEI,MAAM,iBAAiB,GAAG,CAAC,SAAiC,EAAE,SAAiB,EAAE,UAAmB,EAA8B,EAAE;IACzI,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B;AAEK,MAAM,YAAY,GAAG,CAAI,MAAS,EAA4B,EAAE;IACrE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEK,MAAM,qBAAqB,GAAG,CAAI,YAAsC,EAAW,EAAE;IAC1F,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,qBAAqB,yBAEhC;AAEK,MAAM,mBAAmB,GAAG,CAAI,YAAsC,EAAE,EAAE;IAC/E,yEAAyE;IACzE,qCAAqC;IACrC,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;AAC1B,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,MAAM,wBAAwB,GAAG,CAAI,YAAsC,EAAY,EAAE;IAC9F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,SAAS,EAAE,wCAAwC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;YAClF,SAAS,EAAE,6BAAa,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC,CAAC,CAAa,CAAC;AACrC,CAAC,CAAC;AATW,QAAA,wBAAwB,4BASnC;AAIK,MAAM,gCAAgC,GAAG,CAAC,KAAc,EAAE,QAAkB,EAAwC,EAAE;IAC3H,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAI,KAAa,CAAC,IAA0B,CAAC;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAE7B,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,WAAW,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,SAAS,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;QACrC,OAAO,IAAA,yBAAiB,EAAC,6BAAa,CAAC,YAAY,EAAE,iCAAiC,WAAW,IAAI,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAExC,OAAO,IAAA,yBAAiB,EAAC,6BAAa,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;AACrF,CAAC,CAAC;AApBW,QAAA,gCAAgC,oCAoB3C","sourcesContent":["import { ActionProcessorResult, EitherActionResult } from '../types/Action';\nimport { ErrorTypeEnum } from '../types/ErrorTypeEnum';\nimport { QPQError } from '../types/ErrorTypeEnum';\n\nexport const getSuccessfulEitherActionResult = <T>(result: T): EitherActionResult<T> => ({\n success: true,\n result,\n});\n\nexport const getUnsuccessfulEitherActionResult = (error: QPQError): EitherActionResult<any> => ({\n success: false,\n error: error,\n});\n\nexport const actionResultError = (errorType: ErrorTypeEnum | string, errorText: string, errorStack?: string): ActionProcessorResult<any> => {\n return [undefined, { errorType, errorText, errorStack }];\n};\n\nexport const actionResult = <T>(result: T): ActionProcessorResult<T> => {\n return [result];\n};\n\nexport const isErroredActionResult = <T>(actionResult: ActionProcessorResult<T>): boolean => {\n return !actionResult || !!actionResult[1];\n};\n\nexport const resolveActionResult = <T>(actionResult: ActionProcessorResult<T>) => {\n // We say that it has to have a value, otherwise don't call this function\n // use isErroredActionResult to check\n return actionResult[0]!;\n};\n\nexport const resolveActionResultError = <T>(actionResult: ActionProcessorResult<T>): QPQError => {\n if (!actionResult) {\n return {\n errorText: `Action processor returned no result [${JSON.stringify(actionResult)}]`,\n errorType: ErrorTypeEnum.GenericError,\n };\n }\n\n return actionResult[1] as QPQError;\n};\n\ntype ErrorMap = { [key: string]: (error: Error) => ActionProcessorResult<any> };\n\nexport const actionResultErrorFromCaughtError = (error: unknown, errorMap: ErrorMap): ReturnType<typeof actionResultError> => {\n if (error instanceof Error) {\n const errorCode = (error as any).code as string | undefined;\n const errorName = error.name;\n\n // Prefer the OS/runtime code (node fs: EACCES, ENOENT...), then fall back\n // to the error name (AWS SDK: AccessDenied, NoSuchBucket...).\n const handler = (errorCode && errorMap[errorCode]) || errorMap[errorName];\n if (handler) {\n return handler(error);\n }\n\n const unmappedKey = errorCode ?? errorName;\n console.log(`Error: ${unmappedKey}`);\n return actionResultError(ErrorTypeEnum.GenericError, `An unexpected error occurred [${unmappedKey}].`);\n }\n\n console.log('Caught non-error:', error);\n\n return actionResultError(ErrorTypeEnum.GenericError, 'An unknown error occurred.');\n};\n"]}
1
+ {"version":3,"file":"actionLogic.js","sourceRoot":"","sources":["../../../src/logic/actionLogic.ts"],"names":[],"mappings":"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","sourcesContent":["import { ActionProcessorResult, EitherActionResult } from '../types/Action';\nimport { ErrorTypeEnum } from '../types/ErrorTypeEnum';\nimport { QPQError } from '../types/ErrorTypeEnum';\nimport { isTransientErrorName } from './transientErrorNames';\n\nexport const getSuccessfulEitherActionResult = <T>(result: T): EitherActionResult<T> => ({\n success: true,\n result,\n});\n\nexport const getUnsuccessfulEitherActionResult = (error: QPQError): EitherActionResult<any> => ({\n success: false,\n error: error,\n});\n\nexport const actionResultError = (errorType: ErrorTypeEnum | string, errorText: string, errorStack?: string): ActionProcessorResult<any> => {\n return [undefined, { errorType, errorText, errorStack }];\n};\n\nexport const actionResult = <T>(result: T): ActionProcessorResult<T> => {\n return [result];\n};\n\nexport const isErroredActionResult = <T>(actionResult: ActionProcessorResult<T>): boolean => {\n return !actionResult || !!actionResult[1];\n};\n\nexport const resolveActionResult = <T>(actionResult: ActionProcessorResult<T>) => {\n // We say that it has to have a value, otherwise don't call this function\n // use isErroredActionResult to check\n return actionResult[0]!;\n};\n\nexport const resolveActionResultError = <T>(actionResult: ActionProcessorResult<T>): QPQError => {\n if (!actionResult) {\n return {\n errorText: `Action processor returned no result [${JSON.stringify(actionResult)}]`,\n errorType: ErrorTypeEnum.GenericError,\n };\n }\n\n return actionResult[1] as QPQError;\n};\n\ntype ErrorMap = { [key: string]: (error: Error) => ActionProcessorResult<any> };\n\nexport const actionResultErrorFromCaughtError = (error: unknown, errorMap: ErrorMap): ReturnType<typeof actionResultError> => {\n if (error instanceof Error) {\n const errorCode = (error as any).code as string | undefined;\n const errorName = error.name;\n\n // Prefer the OS/runtime code (node fs: EACCES, ENOENT...), then fall back\n // to the error name (AWS SDK: AccessDenied, NoSuchBucket...).\n const handler = (errorCode && errorMap[errorCode]) || errorMap[errorName];\n if (handler) {\n return handler(error);\n }\n\n const unmappedKey = errorCode ?? errorName;\n\n // TODO: This is really shit... this does not belong here.\n //\n // Classify throttles and transient service failures BEFORE the generic fallback, so a caller can tell\n // \"the service is busy\" from \"this request is wrong\" without matching on error text. Without this they\n // are indistinguishable GenericErrors, and a caller that records failures durably writes a permanent\n // failure for something that would have succeeded on the next attempt.\n if (isTransientErrorName(errorCode) || isTransientErrorName(errorName)) {\n return actionResultError(ErrorTypeEnum.OutOfResources, `A transient error occurred, retry [${unmappedKey}].`);\n }\n\n console.log(`Error: ${unmappedKey}`);\n return actionResultError(ErrorTypeEnum.GenericError, `An unexpected error occurred [${unmappedKey}].`);\n }\n\n console.log('Caught non-error:', error);\n\n return actionResultError(ErrorTypeEnum.GenericError, 'An unknown error occurred.');\n};\n"]}
@@ -7,3 +7,4 @@ export * from './lookup';
7
7
  export * from './scope';
8
8
  export * from './stateEffects';
9
9
  export * from './stream';
10
+ export * from './transientErrorNames';
@@ -23,4 +23,5 @@ __exportStar(require("./lookup"), exports);
23
23
  __exportStar(require("./scope"), exports);
24
24
  __exportStar(require("./stateEffects"), exports);
25
25
  __exportStar(require("./stream"), exports);
26
+ __exportStar(require("./transientErrorNames"), exports);
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logic/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,4CAA0B;AAC1B,qDAAmC;AACnC,0CAAwB;AACxB,+CAA6B;AAC7B,2CAAyB;AACzB,0CAAwB;AACxB,iDAA+B;AAC/B,2CAAyB","sourcesContent":["export * from './actionValidators';\nexport * from './context';\nexport * from './decomposedString';\nexport * from './error';\nexport * from './logHistory';\nexport * from './lookup';\nexport * from './scope';\nexport * from './stateEffects';\nexport * from './stream';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logic/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,4CAA0B;AAC1B,qDAAmC;AACnC,0CAAwB;AACxB,+CAA6B;AAC7B,2CAAyB;AACzB,0CAAwB;AACxB,iDAA+B;AAC/B,2CAAyB;AACzB,wDAAsC","sourcesContent":["export * from './actionValidators';\nexport * from './context';\nexport * from './decomposedString';\nexport * from './error';\nexport * from './logHistory';\nexport * from './lookup';\nexport * from './scope';\nexport * from './stateEffects';\nexport * from './stream';\nexport * from './transientErrorNames';\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AWS / runtime error names that mean "try again shortly", not "this will never work".
3
+ *
4
+ * These are RATE and CAPACITY signals, not faults in the request. A throttled DynamoDB write or a
5
+ * throttled Lambda invoke is a statement about the last few seconds of traffic, and the identical call a
6
+ * moment later usually succeeds.
7
+ *
8
+ * They matter because the default classification is the opposite. An unmapped error name falls through to
9
+ * GenericError, which callers reasonably treat as terminal — so a caller with retry machinery available
10
+ * will not use it, and a caller that records failures durably will record a permanent failure for
11
+ * something that was only ever momentary. That was observed in DocGen: a 300-record fanned-out batch put
12
+ * ~100 concurrent flows against DynamoDB, 64 records came back `ThrottlingException`, and every one was
13
+ * written down as a failed run rather than retried.
14
+ *
15
+ * Mapping them to OutOfResources gives callers a single typed thing to branch on, instead of matching
16
+ * substrings against error text.
17
+ */
18
+ export declare const TRANSIENT_ERROR_NAMES: ReadonlySet<string>;
19
+ /** Whether an error name or OS code names a transient, worth-retrying condition. */
20
+ export declare const isTransientErrorName: (name?: string) => boolean;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTransientErrorName = exports.TRANSIENT_ERROR_NAMES = void 0;
4
+ /**
5
+ * AWS / runtime error names that mean "try again shortly", not "this will never work".
6
+ *
7
+ * These are RATE and CAPACITY signals, not faults in the request. A throttled DynamoDB write or a
8
+ * throttled Lambda invoke is a statement about the last few seconds of traffic, and the identical call a
9
+ * moment later usually succeeds.
10
+ *
11
+ * They matter because the default classification is the opposite. An unmapped error name falls through to
12
+ * GenericError, which callers reasonably treat as terminal — so a caller with retry machinery available
13
+ * will not use it, and a caller that records failures durably will record a permanent failure for
14
+ * something that was only ever momentary. That was observed in DocGen: a 300-record fanned-out batch put
15
+ * ~100 concurrent flows against DynamoDB, 64 records came back `ThrottlingException`, and every one was
16
+ * written down as a failed run rather than retried.
17
+ *
18
+ * Mapping them to OutOfResources gives callers a single typed thing to branch on, instead of matching
19
+ * substrings against error text.
20
+ */
21
+ exports.TRANSIENT_ERROR_NAMES = new Set([
22
+ // Generic AWS SDK throttle, used by DynamoDB, SQS, Lambda and others.
23
+ 'ThrottlingException',
24
+ 'Throttling',
25
+ 'ThrottledException',
26
+ 'RequestThrottled',
27
+ 'RequestThrottledException',
28
+ 'TooManyRequestsException',
29
+ // DynamoDB capacity.
30
+ 'ProvisionedThroughputExceededException',
31
+ 'RequestLimitExceeded',
32
+ // Lambda concurrency.
33
+ 'EC2ThrottledException',
34
+ // Transient service-side failures — retrying is the documented response to both.
35
+ 'ServiceUnavailable',
36
+ 'InternalServerError',
37
+ 'InternalFailure',
38
+ 'ServiceException',
39
+ // Network-level interruptions.
40
+ 'TimeoutError',
41
+ 'RequestTimeout',
42
+ 'RequestTimeoutException',
43
+ 'ECONNRESET',
44
+ 'ETIMEDOUT',
45
+ 'EPIPE',
46
+ 'ENOTFOUND',
47
+ ]);
48
+ /** Whether an error name or OS code names a transient, worth-retrying condition. */
49
+ const isTransientErrorName = (name) => !!name && exports.TRANSIENT_ERROR_NAMES.has(name);
50
+ exports.isTransientErrorName = isTransientErrorName;
51
+ // TODO: This is a shit file, we should do this a better way,
52
+ //# sourceMappingURL=transientErrorNames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transientErrorNames.js","sourceRoot":"","sources":["../../../src/logic/transientErrorNames.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACU,QAAA,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,sEAAsE;IACtE,qBAAqB;IACrB,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,2BAA2B;IAC3B,0BAA0B;IAC1B,qBAAqB;IACrB,wCAAwC;IACxC,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,iFAAiF;IACjF,oBAAoB;IACpB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,+BAA+B;IAC/B,cAAc;IACd,gBAAgB;IAChB,yBAAyB;IACzB,YAAY;IACZ,WAAW;IACX,OAAO;IACP,WAAW;CACZ,CAAC,CAAC;AAEH,oFAAoF;AAC7E,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,6BAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAA7F,QAAA,oBAAoB,wBAAyE;AAE1G,6DAA6D","sourcesContent":["/**\n * AWS / runtime error names that mean \"try again shortly\", not \"this will never work\".\n *\n * These are RATE and CAPACITY signals, not faults in the request. A throttled DynamoDB write or a\n * throttled Lambda invoke is a statement about the last few seconds of traffic, and the identical call a\n * moment later usually succeeds.\n *\n * They matter because the default classification is the opposite. An unmapped error name falls through to\n * GenericError, which callers reasonably treat as terminal — so a caller with retry machinery available\n * will not use it, and a caller that records failures durably will record a permanent failure for\n * something that was only ever momentary. That was observed in DocGen: a 300-record fanned-out batch put\n * ~100 concurrent flows against DynamoDB, 64 records came back `ThrottlingException`, and every one was\n * written down as a failed run rather than retried.\n *\n * Mapping them to OutOfResources gives callers a single typed thing to branch on, instead of matching\n * substrings against error text.\n */\nexport const TRANSIENT_ERROR_NAMES: ReadonlySet<string> = new Set([\n // Generic AWS SDK throttle, used by DynamoDB, SQS, Lambda and others.\n 'ThrottlingException',\n 'Throttling',\n 'ThrottledException',\n 'RequestThrottled',\n 'RequestThrottledException',\n 'TooManyRequestsException',\n // DynamoDB capacity.\n 'ProvisionedThroughputExceededException',\n 'RequestLimitExceeded',\n // Lambda concurrency.\n 'EC2ThrottledException',\n // Transient service-side failures — retrying is the documented response to both.\n 'ServiceUnavailable',\n 'InternalServerError',\n 'InternalFailure',\n 'ServiceException',\n // Network-level interruptions.\n 'TimeoutError',\n 'RequestTimeout',\n 'RequestTimeoutException',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'EPIPE',\n 'ENOTFOUND',\n]);\n\n/** Whether an error name or OS code names a transient, worth-retrying condition. */\nexport const isTransientErrorName = (name?: string): boolean => !!name && TRANSIENT_ERROR_NAMES.has(name);\n\n// TODO: This is a shit file, we should do this a better way,\n"]}
@@ -322,6 +322,13 @@ const getAllSrcEntries = (qpqConfig) => {
322
322
  ...(0, exports.getUserDirectorySrcEntries)(qpqConfig),
323
323
  ...(0, exports.getDeployEventConfigs)(qpqConfig).map((r) => r.runtime),
324
324
  ...(0, exports.getStorageDrives)(qpqConfig).flatMap((sd) => { var _a, _b; return [(_a = sd.onEvent) === null || _a === void 0 ? void 0 : _a.create, (_b = sd.onEvent) === null || _b === void 0 ? void 0 : _b.delete].filter((r) => !!r); }),
325
+ // A store's change-stream handler. Missing here, the bundler never sees it: the lambda
326
+ // zip omits it and the dev server's dynamic loader has nothing to resolve, so the handler
327
+ // simply never runs — and since nothing throws, the only symptom is a projection that
328
+ // silently stops updating.
329
+ ...(0, exports.getAllKeyValueStores)(qpqConfig)
330
+ .map((kvs) => { var _a; return (_a = kvs.onStream) === null || _a === void 0 ? void 0 : _a.runtime; })
331
+ .filter((runtime) => !!runtime),
325
332
  ...(0, exports.getAllInlineFunctions)(qpqConfig).map((f) => f.runtime),
326
333
  ];
327
334
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"qpqCoreUtils.js","sourceRoot":"","sources":["../../src/qpqCoreUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionProcessorsQPQConfigSetting,\n AiQPQConfigSetting,\n ApiBuildPathQPQConfigSetting,\n ApplicationQPQConfigSetting,\n BackendBundleOptions,\n BackendBundleOptionsQPQConfigSetting,\n ClaudeAIQPQConfigSetting,\n CryptoKeyQPQConfigSetting,\n defineJavascriptRuntime,\n DeployEventsQPQConfigSetting,\n EmailTemplates,\n EnvironmentSettingsQPQConfigSetting,\n EventBusQPQConfigSetting,\n FederatedModuleStoreQPQConfigSetting,\n FrontendBundleOptions,\n FrontendBundleOptionsQPQConfigSetting,\n GlobalQPQConfigSetting,\n GraphDatabaseQPQConfigSetting,\n InlineFunctionQPQConfigSetting,\n JavascriptRuntimeQPQConfigSetting,\n KeyValueStoreQPQConfigSetting,\n ModuleQPQConfigSetting,\n NotifyErrorQPQConfigSetting,\n ParameterQPQConfigSetting,\n QPQConfig,\n QPQConfigItem,\n QPQConfigSetting,\n QPQCoreConfigSettingType,\n QpqQueueProcessors,\n QueueQPQConfigSetting,\n ScheduleQPQConfigSetting,\n SecretQPQConfigSetting,\n ServiceSettingsQPQConfigSetting,\n StorageDriveQPQConfigSetting,\n UserDirectoryQPQConfigSetting,\n VirtualNetworkQPQConfigSetting,\n} from './config';\nimport {\n ConfigUrl,\n CrossModuleOwner,\n CrossServiceResourceName,\n CustomFullyQualifiedResource,\n FullyQualifiedResource,\n KeyOf,\n QpqFunctionRuntime,\n ResourceName,\n} from './types';\nimport { isQpqFunctionRuntimeAdvanced } from './utils';\n\n/**\n * Flattens a QPQConfig array into a single array of QPQConfigSetting objects.\n * If a QPQConfigItem has a configSettingType of QPQCoreConfigSettingType.environmentSettings,\n * and its environment matches the current environment, its settings will be added to the flattened array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array to be flattened.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects\n */\nexport const flattenQpqConfig = (qpqConfig: QPQConfig): QPQConfigSetting[] => {\n let environment = 'development';\n let service: string | undefined;\n\n /**\n * A recursive helper function that flattens an array of QPQConfigItem objects.\n * @function\n * @param {QPQConfigItem[]} configItems - An array of QPQConfigItem objects to be flattened.\n * @param {QPQConfigSetting[]} accumulator - An accumulator array for storing the flattened QPQConfigSetting objects.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects.\n */\n const flatten = (configItems: QPQConfigItem[], accumulator: QPQConfigSetting[] = []): QPQConfigSetting[] => {\n return configItems.reduce<QPQConfigSetting[]>((acc, item) => {\n if (Array.isArray(item)) {\n return flatten(item, acc);\n } else {\n // If its a appName config item, update the environment variable\n if (item.configSettingType === QPQCoreConfigSettingType.appName) {\n environment = (item as ApplicationQPQConfigSetting).environment || 'development';\n }\n\n // If its a moduleName config item, update the service variable\n else if (item.configSettingType === QPQCoreConfigSettingType.moduleName) {\n service = (item as ModuleQPQConfigSetting).moduleName;\n }\n\n // Otherwise if its an environmentSettings config item, flatten out the child settings\n // for the current environment, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.environmentSettings) {\n const envSetting = item as EnvironmentSettingsQPQConfigSetting;\n const settings = envSetting.settingsByEnvironment[environment] ?? envSetting.settingsByEnvironment['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise if its a serviceSettings config item, flatten out the child settings\n // for the current service, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.serviceSettings) {\n if (!service) {\n throw new Error('defineServiceSettings requires a module to be set first via defineModule (usually through defineApplicationModule)');\n }\n\n const svcSetting = item as ServiceSettingsQPQConfigSetting;\n const settings = svcSetting.settingsByService[service] ?? svcSetting.settingsByService['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise its just a regular config item, add it to the list\n return [...acc, item];\n }\n }, accumulator);\n };\n\n return flatten(qpqConfig);\n};\n\n/**\n * Filters and returns the config settings of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to filter.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} configSettingType - The specific config setting type to filter.\n * @returns {T[]} - An array of filtered config settings of the specified type.\n */\nexport const getConfigSettings = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, configSettingType: string): T[] => {\n const flatConfig = flattenQpqConfig(qpqConfig);\n return flatConfig.filter((c) => c.configSettingType === configSettingType) as T[];\n};\n\n/**\n * Retrieves a single config setting of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to retrieve.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} serviceInfrastructureConfigType - The specific config setting type to retrieve.\n * @returns {T | undefined} - The found config setting of the specified type or undefined if not found.\n */\nexport const getConfigSetting = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, serviceInfrastructureConfigType: string): T | undefined => {\n const [setting] = getConfigSettings<T>(qpqConfig, serviceInfrastructureConfigType);\n return setting;\n};\n\n/**\n * Retrieves the ApplicationModuleSetting from a QPQConfig array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @returns {ApplicationQPQConfigSetting} - The ApplicationQPQConfigSetting from the QPQConfig array.\n * @throws {Error} - If the ApplicationQPQConfigSetting is not found in the QPQConfig array.\n */\nexport const getApplicationConfigSetting = (qpqConfig: QPQConfig): ApplicationQPQConfigSetting => {\n const applicationModuleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!applicationModuleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return applicationModuleSetting;\n};\n\nexport const getApplicationModuleName = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ModuleQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.moduleName);\n\n if (!moduleSetting) {\n throw new Error('please use defineModule in your QPQ config');\n }\n\n return moduleSetting.moduleName;\n};\n\nexport const getApplicationConfigRoot = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!moduleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return moduleSetting.configRoot;\n};\n\nexport const getApplicationName = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).applicationName;\n};\n\nexport const getApplicationModuleFeature = (qpqConfig: QPQConfig): string | undefined => {\n return getApplicationConfigSetting(qpqConfig).feature;\n};\n\nexport const getConfigRoot = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).configRoot;\n};\n\nexport const getApplicationModuleEnvironment = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).environment || 'production';\n};\n\nexport const getStorageDrives = (configs: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive);\n};\n\nexport const getStorageDriveByName = (storageDriveName: string, configs: QPQConfig): StorageDriveQPQConfigSetting | undefined => {\n return getStorageDrives(configs).find((sd) => sd.storageDrive === storageDriveName);\n};\n\nexport const getFederatedModuleStore = (qpqConfig: QPQConfig): FederatedModuleStoreQPQConfigSetting | undefined => {\n return getConfigSetting<FederatedModuleStoreQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.federatedModuleStore);\n};\n\nexport const getQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n};\n\nexport const getOwnedQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getOwnedItems(getQueues(configs), configs);\n};\n\nexport const getNotifyErrorConfigs = (configs: QPQConfig): NotifyErrorQPQConfigSetting[] => {\n return getConfigSettings<NotifyErrorQPQConfigSetting>(configs, QPQCoreConfigSettingType.notifyError);\n};\n\nexport const getQueueByName = (configs: QPQConfig, name: string): QueueQPQConfigSetting | undefined => {\n return getQueues(configs).find((q) => q.name === name);\n};\n\n// A FIFO queue can only be fed by a FIFO event bus - standard SNS topics cannot deliver\n// to FIFO SQS queues at all. Called at deploy/startup time (the queue and bus are separate\n// settings, so defineQueue can't validate this on its own).\nexport const assertFifoQueueEventBusSubscriptionsAreValid = (qpqConfig: QPQConfig): void => {\n const invalidSubscriptions = getQueues(qpqConfig)\n .filter((queue) => queue.isFifo)\n .flatMap((queue) =>\n queue.eventBusSubscriptions\n .filter((eventBusName) => !getEventBusConfigByName(eventBusName, qpqConfig)?.isFifo)\n .map((eventBusName) => `queue [${queue.name}] -> event bus [${eventBusName}]`),\n );\n\n if (invalidSubscriptions.length > 0) {\n throw new Error(\n `FIFO queues can only subscribe to FIFO event buses (standard SNS topics cannot deliver to FIFO SQS queues): ${invalidSubscriptions.join(', ')}`,\n );\n }\n};\n\nexport const getStorageDriveNames = (configs: QPQConfig): string[] => {\n const storageDriveNames = getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive).map(\n (sd) => sd.storageDrive,\n );\n\n return storageDriveNames;\n};\n\nexport const getAllEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const eventBuses = getConfigSettings<EventBusQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.eventBus);\n\n return eventBuses;\n};\n\nexport const getAllAiConfigs = (qpqConfig: QPQConfig): AiQPQConfigSetting[] => {\n return getConfigSettings<AiQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.ai);\n};\n\n// Always resolves - falls back to the defineJavascriptRuntime defaults when no setting is present\nexport const getJavascriptRuntimeConfig = (qpqConfig: QPQConfig): JavascriptRuntimeQPQConfigSetting => {\n return getConfigSetting<JavascriptRuntimeQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.javascriptRuntime) ?? defineJavascriptRuntime();\n};\n\nexport const getAllClaudeAiConfigs = (qpqConfig: QPQConfig): ClaudeAIQPQConfigSetting[] => {\n const claudeAis = getConfigSettings<ClaudeAIQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.claudeAi);\n\n return claudeAis;\n};\n\nexport const getOwnedEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const ownedEventBusConfigs = getOwnedItems(getAllEventBusConfigs(qpqConfig), qpqConfig);\n\n return ownedEventBusConfigs;\n};\n\nexport const getEventBusConfigByName = (eventBusName: string, qpqConfig: QPQConfig): EventBusQPQConfigSetting | undefined => {\n const allConfigs = getAllEventBusConfigs(qpqConfig);\n\n const eventBusConfig = allConfigs.find((eb) => eb.owner?.resourceNameOverride === eventBusName);\n\n if (eventBusConfig) {\n return eventBusConfig;\n }\n\n return allConfigs.find((eb) => eb.name === eventBusName);\n};\n\nexport const getOwnedItems = <T extends QPQConfigSetting>(settings: T[], qpqConfig: QPQConfig): T[] => {\n const appModuleName = getApplicationModuleName(qpqConfig);\n const appName = getApplicationName(qpqConfig);\n const appFeature = getApplicationModuleFeature(qpqConfig);\n const appEnvironment = getApplicationModuleEnvironment(qpqConfig);\n\n return settings.filter(\n (s) =>\n !s.owner ||\n ((!s.owner.module || s.owner.module === appModuleName) &&\n (!s.owner.application || s.owner.application === appName) &&\n (s.owner.feature === undefined || (!s.owner.feature && !appFeature) || s.owner.feature === appFeature) &&\n (!s.owner.environment || s.owner.environment === appEnvironment)),\n );\n};\n\nexport const getAllKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n const keyValueStores = getConfigSettings<KeyValueStoreQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.keyValueStore);\n\n return keyValueStores;\n};\n\nexport const getAllGraphDatabaseConfigs = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n const graphDatabases = getConfigSettings<GraphDatabaseQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.graphDatabase);\n\n return graphDatabases;\n};\n\nexport const getDeployEventConfigs = (qpqConfig: QPQConfig): DeployEventsQPQConfigSetting[] => {\n const deployEvents = getConfigSettings<DeployEventsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.deployEvent);\n\n return deployEvents;\n};\n\nexport const getVirualNetworkConfigs = (qpqConfig: QPQConfig): VirtualNetworkQPQConfigSetting[] => {\n return getConfigSettings<VirtualNetworkQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.virtualNetwork);\n};\n\nexport const getOwnedKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n return getOwnedItems(getAllKeyValueStores(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedGraphDatabases = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n return getOwnedItems(getAllGraphDatabaseConfigs(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedStorageDrives = (qpqConfig: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getOwnedItems(getStorageDrives(qpqConfig), qpqConfig);\n};\n\nexport const resolveCrossServiceResourceName = (resourceName: ResourceName): CrossServiceResourceName => {\n if (typeof resourceName === 'string') {\n return {\n name: resourceName,\n };\n }\n\n return resourceName;\n};\n\nexport const getKeyValueStoreByName = <T extends object = any>(\n qpqConfig: QPQConfig,\n kvsName: string,\n): KeyValueStoreQPQConfigSetting<T> | undefined => {\n const keyValueStore = getAllKeyValueStores<T>(qpqConfig).find((kvs) => kvs.keyValueStoreName === kvsName);\n\n return keyValueStore;\n};\n\nexport const getActionProcessorSources = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const sources = getConfigSettings<ActionProcessorsQPQConfigSetting>(configs, QPQCoreConfigSettingType.actionProcessors).map((ap) => ap.runtime);\n\n return sources;\n};\n\nexport const getUserDirectoryEmailTemplates = (qpqConfig: QPQConfig): Record<string, EmailTemplates> => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.userDirectory);\n\n const record = userDirectories.reduce(\n (acc, ud) => ({\n ...acc,\n [ud.name]: ud.emailTemplates,\n }),\n {} as Record<string, EmailTemplates>,\n );\n\n return record;\n};\n\nexport const getScheduleEvents = (configs: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getConfigSettings<ScheduleQPQConfigSetting>(configs, QPQCoreConfigSettingType.schedule);\n};\n\nexport const getOwnedScheduleEvents = (qpqConfig: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getOwnedItems(getScheduleEvents(qpqConfig), qpqConfig);\n};\n\nexport const getQueueSrcEntries = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.reduce((acc, qc) => [...acc, ...Object.values(qc.qpqQueueProcessors)], [] as QpqFunctionRuntime[]);\n};\n\nexport const getUserDirectorySrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n // We just want the ones this service owns.\n const userConfigs = getOwnedUserDirectories(qpqConfig);\n\n return userConfigs\n .reduce((acc, ud) => [...acc, ...Object.values(ud.emailTemplates), ...Object.values(ud.customAuthRuntime || {})], [] as QpqFunctionRuntime[])\n .filter((se) => !!se);\n};\n\nexport const getAllInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getConfigSettings<InlineFunctionQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.inlineFunction);\n};\n\nexport const getOwnedInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getOwnedItems(getAllInlineFunctions(qpqConfig), qpqConfig);\n};\n\n// Used in bundlers to know where and what to build and index\nexport const getAllSrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n const result = [\n ...getActionProcessorSources(qpqConfig),\n ...getScheduleEvents(qpqConfig).map((r) => r.runtime),\n ...getQueueSrcEntries(qpqConfig),\n ...getUserDirectorySrcEntries(qpqConfig),\n ...getDeployEventConfigs(qpqConfig).map((r) => r.runtime),\n ...getStorageDrives(qpqConfig).flatMap((sd) => [sd.onEvent?.create, sd.onEvent?.delete].filter((r) => !!r) as QpqFunctionRuntime[]),\n ...getAllInlineFunctions(qpqConfig).map((f) => f.runtime),\n ];\n\n return result;\n};\n\nexport const getApiBuildPath = (qpqConfig: QPQConfig): string => {\n const [apiBuildPathConfig] = getConfigSettings<ApiBuildPathQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.apiBuildPath);\n\n if (!apiBuildPathConfig) {\n throw new Error(`Can not find app base path use defineApiBuildPath or defineApplicationModule`);\n }\n\n return apiBuildPathConfig.apiBuildPath;\n};\n\nexport const getSrcFilenameFromQpqFunctionRuntime = (qpqFunctionRuntime: QpqFunctionRuntime): string => {\n if (isQpqFunctionRuntimeAdvanced(qpqFunctionRuntime)) {\n return qpqFunctionRuntime.relativePath.split('/').pop() || '';\n }\n\n const [srcPath] = qpqFunctionRuntime.split('::');\n return srcPath.split('/').pop() || '';\n};\n\nexport const getSecretByName = (secretName: string, qpqConfig: QPQConfig): SecretQPQConfigSetting => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n const secret = secrets.find((s) => s.key === secretName);\n\n if (!secret) {\n throw new Error(`Can not find secret [${secretName}]`);\n }\n\n return secret;\n};\n\nexport const getAllSecretConfigs = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n return secrets;\n};\n\nexport const getOwnedSecrets = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getAllSecretConfigs(qpqConfig);\n\n return getOwnedItems(secrets, qpqConfig);\n};\n\nexport const getCryptoKeyByName = (cryptoKeyName: string, qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n const cryptoKey = cryptoKeys.find((k) => k.keyName === cryptoKeyName);\n\n if (!cryptoKey) {\n throw new Error(`Can not find crypto key [${cryptoKeyName}]`);\n }\n\n return cryptoKey;\n};\n\nexport const getAllCryptoKeyConfigs = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n return cryptoKeys;\n};\n\nexport const getOwnedCryptoKeys = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getAllCryptoKeyConfigs(qpqConfig);\n\n return getOwnedItems(cryptoKeys, qpqConfig);\n};\n\nexport const getGlobalConfigValue = <T>(qpqConfig: QPQConfig, name: string): T => {\n const global = getConfigSettings<GlobalQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.global).find((g) => g.key === name);\n\n if (!global) {\n throw new Error(`Global config ${name} not found`);\n }\n\n return global.value;\n};\n\n// Resolves a global by name, giving precedence to globals declared on the\n// executing function (functionGlobals) before falling back to the service-wide\n// config global. Throws (via getGlobalConfigValue) if the name is found in neither.\nexport const resolveGlobalValue = <T>(qpqConfig: QPQConfig, functionGlobals: Record<string, unknown> | undefined, name: string): T => {\n if (functionGlobals && Object.prototype.hasOwnProperty.call(functionGlobals, name)) {\n return functionGlobals[name] as T;\n }\n\n return getGlobalConfigValue<T>(qpqConfig, name);\n};\n\nexport const getUserDirectories = (configs: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(configs, QPQCoreConfigSettingType.userDirectory);\n\n return userDirectories;\n};\n\nexport const getOwnedUserDirectories = (qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getUserDirectories(qpqConifg);\n\n return getOwnedItems(userDirectories, qpqConifg);\n};\n\nexport const getUserDirectoryByName = (userDirectoryName: string, qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting => {\n const userDirectory = getUserDirectories(qpqConifg).find((ud) => ud.name === userDirectoryName);\n\n if (!userDirectory) {\n throw new Error(`UserDirectory not found: ${userDirectoryName}`);\n }\n\n return userDirectory;\n};\n\nexport const getAllParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n return parameters;\n};\n\nexport const getParameterConfig = (name: string, qpqConfig: QPQConfig): ParameterQPQConfigSetting => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n const param = parameters.find((p) => p.key === name);\n\n if (!param) {\n throw new Error(`Parameter ${name} not found`);\n }\n\n return param;\n};\n\nexport const getOwnedParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getAllParameterConfigs(qpqConfig);\n\n return getOwnedItems(parameters, qpqConfig);\n};\n\n/**\n * Merges every `defineBackendBundleOptions` in the config into a single set of\n * bundler directives. Services compose config from many fragments, so each\n * fragment can declare the build quirks of its own dependencies.\n */\nexport const getBackendBundleOptions = (qpqConfig: QPQConfig): Required<BackendBundleOptions> => {\n const settings = getConfigSettings<BackendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.backendBundleOptions);\n\n return {\n externals: settings.flatMap((setting) => setting.externals),\n ignoreModules: settings.flatMap((setting) => setting.ignoreModules),\n ignoreWarnings: settings.flatMap((setting) => setting.ignoreWarnings),\n };\n};\n\n/**\n * Merges every `defineFrontendBundleOptions` in the config into a single set\n * of views-bundler directives.\n */\nexport const getFrontendBundleOptions = (qpqConfig: QPQConfig): Required<FrontendBundleOptions> => {\n const settings = getConfigSettings<FrontendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.frontendBundleOptions);\n\n return {\n sharedSingletons: settings.flatMap((setting) => setting.sharedSingletons),\n };\n};\n\nexport const getUniqueKeyForSetting = (setting: QPQConfigSetting) => {\n const type = setting.configSettingType.split('/').pop();\n const key = setting.uniqueKey;\n\n return `${type}${key}`;\n};\n\nexport const getQueueConfigSettingByName = (name: string, qpqConfig: QPQConfig): QueueQPQConfigSetting | undefined => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.find((c) => c.name === name);\n};\n\nexport const getQueueQueueProcessors = (name: string, qpqConfig: QPQConfig): QpqQueueProcessors => {\n return getQueueConfigSettingByName(name, qpqConfig)?.qpqQueueProcessors || {};\n};\n\nexport const convertCustomFullyQualifiedResourceToGeneric = <T extends string>(resource: CustomFullyQualifiedResource<T>): FullyQualifiedResource => {\n type KeyType = KeyOf<CustomFullyQualifiedResource<T>>;\n const key: KeyType = Array.from(Object.keys(resource)).find(\n (k) => k !== 'module' && k !== 'application' && k !== 'feature' && k !== 'environment',\n ) as any as KeyType;\n\n const resourceName = resource[key as T];\n\n return {\n module: resource.module,\n application: resource.application,\n feature: resource.feature,\n environment: resource.environment,\n resourceName: resourceName,\n };\n};\n\nexport const getFullyQualifiedResourceName = (qpqConfig: QPQConfig, resourceName: string, config?: QPQConfigSetting): FullyQualifiedResource => {\n const confApplication = getApplicationName(qpqConfig);\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n const confModule = getApplicationModuleName(qpqConfig);\n\n return {\n resourceName: config?.owner?.resourceNameOverride || resourceName,\n\n application: config?.owner?.application || confApplication,\n environment: config?.owner?.environment || confEnvironment,\n module: config?.owner?.module || confModule,\n feature: config?.owner?.feature || confFeature || '',\n };\n};\n\n// Fully Qualified Resource Names\nexport const getKeyValueStoreFullyQualifiedResourceName = (kvsName: string, qpqConfig: QPQConfig): FullyQualifiedResource => {\n const storeConfig = getKeyValueStoreByName(qpqConfig, kvsName);\n\n return getFullyQualifiedResourceName(qpqConfig, kvsName, storeConfig);\n};\n\nexport const isSameResource = (resourceA: FullyQualifiedResource, resourceB: FullyQualifiedResource): boolean => {\n return (\n resourceA.application === resourceB.application &&\n resourceA.environment === resourceB.environment &&\n resourceA.feature === resourceB.feature &&\n resourceA.module === resourceB.module &&\n resourceA.resourceName === resourceB.resourceName\n );\n};\n\nexport const getFullUrlFromConfigUrl = (configUrl: ConfigUrl, qpqConfig: QPQConfig): string => {\n if (typeof configUrl === 'string') {\n return configUrl;\n }\n\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n\n let fullUrl = `${configUrl.domain}`;\n\n if (confEnvironment !== 'production') {\n fullUrl = `${confEnvironment}.${fullUrl}`;\n }\n\n if (confFeature) {\n fullUrl = `${confFeature}.${fullUrl}`;\n }\n\n if (configUrl.module) {\n fullUrl = `${configUrl.module}.${fullUrl}`;\n }\n\n if (configUrl.path) {\n fullUrl = `${fullUrl}${configUrl.path}`;\n }\n\n fullUrl = `${configUrl.protocol}://${fullUrl}`;\n\n return fullUrl;\n};\n"]}
1
+ {"version":3,"file":"qpqCoreUtils.js","sourceRoot":"","sources":["../../src/qpqCoreUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionProcessorsQPQConfigSetting,\n AiQPQConfigSetting,\n ApiBuildPathQPQConfigSetting,\n ApplicationQPQConfigSetting,\n BackendBundleOptions,\n BackendBundleOptionsQPQConfigSetting,\n ClaudeAIQPQConfigSetting,\n CryptoKeyQPQConfigSetting,\n defineJavascriptRuntime,\n DeployEventsQPQConfigSetting,\n EmailTemplates,\n EnvironmentSettingsQPQConfigSetting,\n EventBusQPQConfigSetting,\n FederatedModuleStoreQPQConfigSetting,\n FrontendBundleOptions,\n FrontendBundleOptionsQPQConfigSetting,\n GlobalQPQConfigSetting,\n GraphDatabaseQPQConfigSetting,\n InlineFunctionQPQConfigSetting,\n JavascriptRuntimeQPQConfigSetting,\n KeyValueStoreQPQConfigSetting,\n ModuleQPQConfigSetting,\n NotifyErrorQPQConfigSetting,\n ParameterQPQConfigSetting,\n QPQConfig,\n QPQConfigItem,\n QPQConfigSetting,\n QPQCoreConfigSettingType,\n QpqQueueProcessors,\n QueueQPQConfigSetting,\n ScheduleQPQConfigSetting,\n SecretQPQConfigSetting,\n ServiceSettingsQPQConfigSetting,\n StorageDriveQPQConfigSetting,\n UserDirectoryQPQConfigSetting,\n VirtualNetworkQPQConfigSetting,\n} from './config';\nimport {\n ConfigUrl,\n CrossModuleOwner,\n CrossServiceResourceName,\n CustomFullyQualifiedResource,\n FullyQualifiedResource,\n KeyOf,\n QpqFunctionRuntime,\n ResourceName,\n} from './types';\nimport { isQpqFunctionRuntimeAdvanced } from './utils';\n\n/**\n * Flattens a QPQConfig array into a single array of QPQConfigSetting objects.\n * If a QPQConfigItem has a configSettingType of QPQCoreConfigSettingType.environmentSettings,\n * and its environment matches the current environment, its settings will be added to the flattened array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array to be flattened.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects\n */\nexport const flattenQpqConfig = (qpqConfig: QPQConfig): QPQConfigSetting[] => {\n let environment = 'development';\n let service: string | undefined;\n\n /**\n * A recursive helper function that flattens an array of QPQConfigItem objects.\n * @function\n * @param {QPQConfigItem[]} configItems - An array of QPQConfigItem objects to be flattened.\n * @param {QPQConfigSetting[]} accumulator - An accumulator array for storing the flattened QPQConfigSetting objects.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects.\n */\n const flatten = (configItems: QPQConfigItem[], accumulator: QPQConfigSetting[] = []): QPQConfigSetting[] => {\n return configItems.reduce<QPQConfigSetting[]>((acc, item) => {\n if (Array.isArray(item)) {\n return flatten(item, acc);\n } else {\n // If its a appName config item, update the environment variable\n if (item.configSettingType === QPQCoreConfigSettingType.appName) {\n environment = (item as ApplicationQPQConfigSetting).environment || 'development';\n }\n\n // If its a moduleName config item, update the service variable\n else if (item.configSettingType === QPQCoreConfigSettingType.moduleName) {\n service = (item as ModuleQPQConfigSetting).moduleName;\n }\n\n // Otherwise if its an environmentSettings config item, flatten out the child settings\n // for the current environment, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.environmentSettings) {\n const envSetting = item as EnvironmentSettingsQPQConfigSetting;\n const settings = envSetting.settingsByEnvironment[environment] ?? envSetting.settingsByEnvironment['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise if its a serviceSettings config item, flatten out the child settings\n // for the current service, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.serviceSettings) {\n if (!service) {\n throw new Error('defineServiceSettings requires a module to be set first via defineModule (usually through defineApplicationModule)');\n }\n\n const svcSetting = item as ServiceSettingsQPQConfigSetting;\n const settings = svcSetting.settingsByService[service] ?? svcSetting.settingsByService['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise its just a regular config item, add it to the list\n return [...acc, item];\n }\n }, accumulator);\n };\n\n return flatten(qpqConfig);\n};\n\n/**\n * Filters and returns the config settings of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to filter.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} configSettingType - The specific config setting type to filter.\n * @returns {T[]} - An array of filtered config settings of the specified type.\n */\nexport const getConfigSettings = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, configSettingType: string): T[] => {\n const flatConfig = flattenQpqConfig(qpqConfig);\n return flatConfig.filter((c) => c.configSettingType === configSettingType) as T[];\n};\n\n/**\n * Retrieves a single config setting of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to retrieve.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} serviceInfrastructureConfigType - The specific config setting type to retrieve.\n * @returns {T | undefined} - The found config setting of the specified type or undefined if not found.\n */\nexport const getConfigSetting = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, serviceInfrastructureConfigType: string): T | undefined => {\n const [setting] = getConfigSettings<T>(qpqConfig, serviceInfrastructureConfigType);\n return setting;\n};\n\n/**\n * Retrieves the ApplicationModuleSetting from a QPQConfig array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @returns {ApplicationQPQConfigSetting} - The ApplicationQPQConfigSetting from the QPQConfig array.\n * @throws {Error} - If the ApplicationQPQConfigSetting is not found in the QPQConfig array.\n */\nexport const getApplicationConfigSetting = (qpqConfig: QPQConfig): ApplicationQPQConfigSetting => {\n const applicationModuleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!applicationModuleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return applicationModuleSetting;\n};\n\nexport const getApplicationModuleName = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ModuleQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.moduleName);\n\n if (!moduleSetting) {\n throw new Error('please use defineModule in your QPQ config');\n }\n\n return moduleSetting.moduleName;\n};\n\nexport const getApplicationConfigRoot = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!moduleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return moduleSetting.configRoot;\n};\n\nexport const getApplicationName = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).applicationName;\n};\n\nexport const getApplicationModuleFeature = (qpqConfig: QPQConfig): string | undefined => {\n return getApplicationConfigSetting(qpqConfig).feature;\n};\n\nexport const getConfigRoot = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).configRoot;\n};\n\nexport const getApplicationModuleEnvironment = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).environment || 'production';\n};\n\nexport const getStorageDrives = (configs: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive);\n};\n\nexport const getStorageDriveByName = (storageDriveName: string, configs: QPQConfig): StorageDriveQPQConfigSetting | undefined => {\n return getStorageDrives(configs).find((sd) => sd.storageDrive === storageDriveName);\n};\n\nexport const getFederatedModuleStore = (qpqConfig: QPQConfig): FederatedModuleStoreQPQConfigSetting | undefined => {\n return getConfigSetting<FederatedModuleStoreQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.federatedModuleStore);\n};\n\nexport const getQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n};\n\nexport const getOwnedQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getOwnedItems(getQueues(configs), configs);\n};\n\nexport const getNotifyErrorConfigs = (configs: QPQConfig): NotifyErrorQPQConfigSetting[] => {\n return getConfigSettings<NotifyErrorQPQConfigSetting>(configs, QPQCoreConfigSettingType.notifyError);\n};\n\nexport const getQueueByName = (configs: QPQConfig, name: string): QueueQPQConfigSetting | undefined => {\n return getQueues(configs).find((q) => q.name === name);\n};\n\n// A FIFO queue can only be fed by a FIFO event bus - standard SNS topics cannot deliver\n// to FIFO SQS queues at all. Called at deploy/startup time (the queue and bus are separate\n// settings, so defineQueue can't validate this on its own).\nexport const assertFifoQueueEventBusSubscriptionsAreValid = (qpqConfig: QPQConfig): void => {\n const invalidSubscriptions = getQueues(qpqConfig)\n .filter((queue) => queue.isFifo)\n .flatMap((queue) =>\n queue.eventBusSubscriptions\n .filter((eventBusName) => !getEventBusConfigByName(eventBusName, qpqConfig)?.isFifo)\n .map((eventBusName) => `queue [${queue.name}] -> event bus [${eventBusName}]`),\n );\n\n if (invalidSubscriptions.length > 0) {\n throw new Error(\n `FIFO queues can only subscribe to FIFO event buses (standard SNS topics cannot deliver to FIFO SQS queues): ${invalidSubscriptions.join(', ')}`,\n );\n }\n};\n\nexport const getStorageDriveNames = (configs: QPQConfig): string[] => {\n const storageDriveNames = getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive).map(\n (sd) => sd.storageDrive,\n );\n\n return storageDriveNames;\n};\n\nexport const getAllEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const eventBuses = getConfigSettings<EventBusQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.eventBus);\n\n return eventBuses;\n};\n\nexport const getAllAiConfigs = (qpqConfig: QPQConfig): AiQPQConfigSetting[] => {\n return getConfigSettings<AiQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.ai);\n};\n\n// Always resolves - falls back to the defineJavascriptRuntime defaults when no setting is present\nexport const getJavascriptRuntimeConfig = (qpqConfig: QPQConfig): JavascriptRuntimeQPQConfigSetting => {\n return getConfigSetting<JavascriptRuntimeQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.javascriptRuntime) ?? defineJavascriptRuntime();\n};\n\nexport const getAllClaudeAiConfigs = (qpqConfig: QPQConfig): ClaudeAIQPQConfigSetting[] => {\n const claudeAis = getConfigSettings<ClaudeAIQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.claudeAi);\n\n return claudeAis;\n};\n\nexport const getOwnedEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const ownedEventBusConfigs = getOwnedItems(getAllEventBusConfigs(qpqConfig), qpqConfig);\n\n return ownedEventBusConfigs;\n};\n\nexport const getEventBusConfigByName = (eventBusName: string, qpqConfig: QPQConfig): EventBusQPQConfigSetting | undefined => {\n const allConfigs = getAllEventBusConfigs(qpqConfig);\n\n const eventBusConfig = allConfigs.find((eb) => eb.owner?.resourceNameOverride === eventBusName);\n\n if (eventBusConfig) {\n return eventBusConfig;\n }\n\n return allConfigs.find((eb) => eb.name === eventBusName);\n};\n\nexport const getOwnedItems = <T extends QPQConfigSetting>(settings: T[], qpqConfig: QPQConfig): T[] => {\n const appModuleName = getApplicationModuleName(qpqConfig);\n const appName = getApplicationName(qpqConfig);\n const appFeature = getApplicationModuleFeature(qpqConfig);\n const appEnvironment = getApplicationModuleEnvironment(qpqConfig);\n\n return settings.filter(\n (s) =>\n !s.owner ||\n ((!s.owner.module || s.owner.module === appModuleName) &&\n (!s.owner.application || s.owner.application === appName) &&\n (s.owner.feature === undefined || (!s.owner.feature && !appFeature) || s.owner.feature === appFeature) &&\n (!s.owner.environment || s.owner.environment === appEnvironment)),\n );\n};\n\nexport const getAllKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n const keyValueStores = getConfigSettings<KeyValueStoreQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.keyValueStore);\n\n return keyValueStores;\n};\n\nexport const getAllGraphDatabaseConfigs = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n const graphDatabases = getConfigSettings<GraphDatabaseQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.graphDatabase);\n\n return graphDatabases;\n};\n\nexport const getDeployEventConfigs = (qpqConfig: QPQConfig): DeployEventsQPQConfigSetting[] => {\n const deployEvents = getConfigSettings<DeployEventsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.deployEvent);\n\n return deployEvents;\n};\n\nexport const getVirualNetworkConfigs = (qpqConfig: QPQConfig): VirtualNetworkQPQConfigSetting[] => {\n return getConfigSettings<VirtualNetworkQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.virtualNetwork);\n};\n\nexport const getOwnedKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n return getOwnedItems(getAllKeyValueStores(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedGraphDatabases = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n return getOwnedItems(getAllGraphDatabaseConfigs(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedStorageDrives = (qpqConfig: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getOwnedItems(getStorageDrives(qpqConfig), qpqConfig);\n};\n\nexport const resolveCrossServiceResourceName = (resourceName: ResourceName): CrossServiceResourceName => {\n if (typeof resourceName === 'string') {\n return {\n name: resourceName,\n };\n }\n\n return resourceName;\n};\n\nexport const getKeyValueStoreByName = <T extends object = any>(\n qpqConfig: QPQConfig,\n kvsName: string,\n): KeyValueStoreQPQConfigSetting<T> | undefined => {\n const keyValueStore = getAllKeyValueStores<T>(qpqConfig).find((kvs) => kvs.keyValueStoreName === kvsName);\n\n return keyValueStore;\n};\n\nexport const getActionProcessorSources = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const sources = getConfigSettings<ActionProcessorsQPQConfigSetting>(configs, QPQCoreConfigSettingType.actionProcessors).map((ap) => ap.runtime);\n\n return sources;\n};\n\nexport const getUserDirectoryEmailTemplates = (qpqConfig: QPQConfig): Record<string, EmailTemplates> => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.userDirectory);\n\n const record = userDirectories.reduce(\n (acc, ud) => ({\n ...acc,\n [ud.name]: ud.emailTemplates,\n }),\n {} as Record<string, EmailTemplates>,\n );\n\n return record;\n};\n\nexport const getScheduleEvents = (configs: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getConfigSettings<ScheduleQPQConfigSetting>(configs, QPQCoreConfigSettingType.schedule);\n};\n\nexport const getOwnedScheduleEvents = (qpqConfig: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getOwnedItems(getScheduleEvents(qpqConfig), qpqConfig);\n};\n\nexport const getQueueSrcEntries = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.reduce((acc, qc) => [...acc, ...Object.values(qc.qpqQueueProcessors)], [] as QpqFunctionRuntime[]);\n};\n\nexport const getUserDirectorySrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n // We just want the ones this service owns.\n const userConfigs = getOwnedUserDirectories(qpqConfig);\n\n return userConfigs\n .reduce((acc, ud) => [...acc, ...Object.values(ud.emailTemplates), ...Object.values(ud.customAuthRuntime || {})], [] as QpqFunctionRuntime[])\n .filter((se) => !!se);\n};\n\nexport const getAllInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getConfigSettings<InlineFunctionQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.inlineFunction);\n};\n\nexport const getOwnedInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getOwnedItems(getAllInlineFunctions(qpqConfig), qpqConfig);\n};\n\n// Used in bundlers to know where and what to build and index\nexport const getAllSrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n const result = [\n ...getActionProcessorSources(qpqConfig),\n ...getScheduleEvents(qpqConfig).map((r) => r.runtime),\n ...getQueueSrcEntries(qpqConfig),\n ...getUserDirectorySrcEntries(qpqConfig),\n ...getDeployEventConfigs(qpqConfig).map((r) => r.runtime),\n ...getStorageDrives(qpqConfig).flatMap((sd) => [sd.onEvent?.create, sd.onEvent?.delete].filter((r) => !!r) as QpqFunctionRuntime[]),\n // A store's change-stream handler. Missing here, the bundler never sees it: the lambda\n // zip omits it and the dev server's dynamic loader has nothing to resolve, so the handler\n // simply never runs — and since nothing throws, the only symptom is a projection that\n // silently stops updating.\n ...(getAllKeyValueStores(qpqConfig)\n .map((kvs) => kvs.onStream?.runtime)\n .filter((runtime) => !!runtime) as QpqFunctionRuntime[]),\n ...getAllInlineFunctions(qpqConfig).map((f) => f.runtime),\n ];\n\n return result;\n};\n\nexport const getApiBuildPath = (qpqConfig: QPQConfig): string => {\n const [apiBuildPathConfig] = getConfigSettings<ApiBuildPathQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.apiBuildPath);\n\n if (!apiBuildPathConfig) {\n throw new Error(`Can not find app base path use defineApiBuildPath or defineApplicationModule`);\n }\n\n return apiBuildPathConfig.apiBuildPath;\n};\n\nexport const getSrcFilenameFromQpqFunctionRuntime = (qpqFunctionRuntime: QpqFunctionRuntime): string => {\n if (isQpqFunctionRuntimeAdvanced(qpqFunctionRuntime)) {\n return qpqFunctionRuntime.relativePath.split('/').pop() || '';\n }\n\n const [srcPath] = qpqFunctionRuntime.split('::');\n return srcPath.split('/').pop() || '';\n};\n\nexport const getSecretByName = (secretName: string, qpqConfig: QPQConfig): SecretQPQConfigSetting => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n const secret = secrets.find((s) => s.key === secretName);\n\n if (!secret) {\n throw new Error(`Can not find secret [${secretName}]`);\n }\n\n return secret;\n};\n\nexport const getAllSecretConfigs = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n return secrets;\n};\n\nexport const getOwnedSecrets = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getAllSecretConfigs(qpqConfig);\n\n return getOwnedItems(secrets, qpqConfig);\n};\n\nexport const getCryptoKeyByName = (cryptoKeyName: string, qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n const cryptoKey = cryptoKeys.find((k) => k.keyName === cryptoKeyName);\n\n if (!cryptoKey) {\n throw new Error(`Can not find crypto key [${cryptoKeyName}]`);\n }\n\n return cryptoKey;\n};\n\nexport const getAllCryptoKeyConfigs = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n return cryptoKeys;\n};\n\nexport const getOwnedCryptoKeys = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getAllCryptoKeyConfigs(qpqConfig);\n\n return getOwnedItems(cryptoKeys, qpqConfig);\n};\n\nexport const getGlobalConfigValue = <T>(qpqConfig: QPQConfig, name: string): T => {\n const global = getConfigSettings<GlobalQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.global).find((g) => g.key === name);\n\n if (!global) {\n throw new Error(`Global config ${name} not found`);\n }\n\n return global.value;\n};\n\n// Resolves a global by name, giving precedence to globals declared on the\n// executing function (functionGlobals) before falling back to the service-wide\n// config global. Throws (via getGlobalConfigValue) if the name is found in neither.\nexport const resolveGlobalValue = <T>(qpqConfig: QPQConfig, functionGlobals: Record<string, unknown> | undefined, name: string): T => {\n if (functionGlobals && Object.prototype.hasOwnProperty.call(functionGlobals, name)) {\n return functionGlobals[name] as T;\n }\n\n return getGlobalConfigValue<T>(qpqConfig, name);\n};\n\nexport const getUserDirectories = (configs: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(configs, QPQCoreConfigSettingType.userDirectory);\n\n return userDirectories;\n};\n\nexport const getOwnedUserDirectories = (qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getUserDirectories(qpqConifg);\n\n return getOwnedItems(userDirectories, qpqConifg);\n};\n\nexport const getUserDirectoryByName = (userDirectoryName: string, qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting => {\n const userDirectory = getUserDirectories(qpqConifg).find((ud) => ud.name === userDirectoryName);\n\n if (!userDirectory) {\n throw new Error(`UserDirectory not found: ${userDirectoryName}`);\n }\n\n return userDirectory;\n};\n\nexport const getAllParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n return parameters;\n};\n\nexport const getParameterConfig = (name: string, qpqConfig: QPQConfig): ParameterQPQConfigSetting => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n const param = parameters.find((p) => p.key === name);\n\n if (!param) {\n throw new Error(`Parameter ${name} not found`);\n }\n\n return param;\n};\n\nexport const getOwnedParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getAllParameterConfigs(qpqConfig);\n\n return getOwnedItems(parameters, qpqConfig);\n};\n\n/**\n * Merges every `defineBackendBundleOptions` in the config into a single set of\n * bundler directives. Services compose config from many fragments, so each\n * fragment can declare the build quirks of its own dependencies.\n */\nexport const getBackendBundleOptions = (qpqConfig: QPQConfig): Required<BackendBundleOptions> => {\n const settings = getConfigSettings<BackendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.backendBundleOptions);\n\n return {\n externals: settings.flatMap((setting) => setting.externals),\n ignoreModules: settings.flatMap((setting) => setting.ignoreModules),\n ignoreWarnings: settings.flatMap((setting) => setting.ignoreWarnings),\n };\n};\n\n/**\n * Merges every `defineFrontendBundleOptions` in the config into a single set\n * of views-bundler directives.\n */\nexport const getFrontendBundleOptions = (qpqConfig: QPQConfig): Required<FrontendBundleOptions> => {\n const settings = getConfigSettings<FrontendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.frontendBundleOptions);\n\n return {\n sharedSingletons: settings.flatMap((setting) => setting.sharedSingletons),\n };\n};\n\nexport const getUniqueKeyForSetting = (setting: QPQConfigSetting) => {\n const type = setting.configSettingType.split('/').pop();\n const key = setting.uniqueKey;\n\n return `${type}${key}`;\n};\n\nexport const getQueueConfigSettingByName = (name: string, qpqConfig: QPQConfig): QueueQPQConfigSetting | undefined => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.find((c) => c.name === name);\n};\n\nexport const getQueueQueueProcessors = (name: string, qpqConfig: QPQConfig): QpqQueueProcessors => {\n return getQueueConfigSettingByName(name, qpqConfig)?.qpqQueueProcessors || {};\n};\n\nexport const convertCustomFullyQualifiedResourceToGeneric = <T extends string>(resource: CustomFullyQualifiedResource<T>): FullyQualifiedResource => {\n type KeyType = KeyOf<CustomFullyQualifiedResource<T>>;\n const key: KeyType = Array.from(Object.keys(resource)).find(\n (k) => k !== 'module' && k !== 'application' && k !== 'feature' && k !== 'environment',\n ) as any as KeyType;\n\n const resourceName = resource[key as T];\n\n return {\n module: resource.module,\n application: resource.application,\n feature: resource.feature,\n environment: resource.environment,\n resourceName: resourceName,\n };\n};\n\nexport const getFullyQualifiedResourceName = (qpqConfig: QPQConfig, resourceName: string, config?: QPQConfigSetting): FullyQualifiedResource => {\n const confApplication = getApplicationName(qpqConfig);\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n const confModule = getApplicationModuleName(qpqConfig);\n\n return {\n resourceName: config?.owner?.resourceNameOverride || resourceName,\n\n application: config?.owner?.application || confApplication,\n environment: config?.owner?.environment || confEnvironment,\n module: config?.owner?.module || confModule,\n feature: config?.owner?.feature || confFeature || '',\n };\n};\n\n// Fully Qualified Resource Names\nexport const getKeyValueStoreFullyQualifiedResourceName = (kvsName: string, qpqConfig: QPQConfig): FullyQualifiedResource => {\n const storeConfig = getKeyValueStoreByName(qpqConfig, kvsName);\n\n return getFullyQualifiedResourceName(qpqConfig, kvsName, storeConfig);\n};\n\nexport const isSameResource = (resourceA: FullyQualifiedResource, resourceB: FullyQualifiedResource): boolean => {\n return (\n resourceA.application === resourceB.application &&\n resourceA.environment === resourceB.environment &&\n resourceA.feature === resourceB.feature &&\n resourceA.module === resourceB.module &&\n resourceA.resourceName === resourceB.resourceName\n );\n};\n\nexport const getFullUrlFromConfigUrl = (configUrl: ConfigUrl, qpqConfig: QPQConfig): string => {\n if (typeof configUrl === 'string') {\n return configUrl;\n }\n\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n\n let fullUrl = `${configUrl.domain}`;\n\n if (confEnvironment !== 'production') {\n fullUrl = `${confEnvironment}.${fullUrl}`;\n }\n\n if (confFeature) {\n fullUrl = `${confFeature}.${fullUrl}`;\n }\n\n if (configUrl.module) {\n fullUrl = `${configUrl.module}.${fullUrl}`;\n }\n\n if (configUrl.path) {\n fullUrl = `${fullUrl}${configUrl.path}`;\n }\n\n fullUrl = `${configUrl.protocol}://${fullUrl}`;\n\n return fullUrl;\n};\n"]}
@@ -9,6 +9,7 @@ export interface KeyValueStoreQueryOptions {
9
9
  nextPageKey?: string;
10
10
  filter?: KvsQueryOperation;
11
11
  scope?: string;
12
+ consistentRead?: boolean;
12
13
  }
13
14
  export interface KeyValueStoreQueryActionPayload {
14
15
  keyValueStoreName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValueStoreQueryActionTypes.js","sourceRoot":"","sources":["../../../../src/actions/keyValueStore/KeyValueStoreQueryActionTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { QpqPagedData } from '../../types';\nimport { Action, ActionProcessor, ActionRequester } from '../../types/Action';\nimport { KeyValueStoreActionType } from './KeyValueStoreActionType';\nimport { KvsQueryOperation } from './types';\n\n// Options Type\nexport interface KeyValueStoreQueryOptions {\n // Accepted but not implemented: no processor applies a TTL to query results.\n ttlInSeconds?: number;\n sortAscending?: boolean;\n limit?: number;\n nextPageKey?: string;\n filter?: KvsQueryOperation;\n // Composed into partition-key conditions by the processor; requires a string-typed partition key.\n scope?: string;\n}\n\n// Payload\nexport interface KeyValueStoreQueryActionPayload {\n keyValueStoreName: string;\n\n keyCondition: KvsQueryOperation;\n\n options?: KeyValueStoreQueryOptions;\n}\n\n// Action\nexport interface KeyValueStoreQueryAction extends Action<KeyValueStoreQueryActionPayload> {\n type: KeyValueStoreActionType.Query;\n payload: KeyValueStoreQueryActionPayload;\n}\n\n// Function Types\nexport type KeyValueStoreQueryActionProcessor<KvsItem> = ActionProcessor<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\nexport type KeyValueStoreQueryActionRequester<KvsItem> = ActionRequester<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\n"]}
1
+ {"version":3,"file":"KeyValueStoreQueryActionTypes.js","sourceRoot":"","sources":["../../../../src/actions/keyValueStore/KeyValueStoreQueryActionTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { QpqPagedData } from '../../types';\nimport { Action, ActionProcessor, ActionRequester } from '../../types/Action';\nimport { KeyValueStoreActionType } from './KeyValueStoreActionType';\nimport { KvsQueryOperation } from './types';\n\n// Options Type\nexport interface KeyValueStoreQueryOptions {\n // Accepted but not implemented: no processor applies a TTL to query results.\n ttlInSeconds?: number;\n sortAscending?: boolean;\n limit?: number;\n nextPageKey?: string;\n filter?: KvsQueryOperation;\n // Composed into partition-key conditions by the processor; requires a string-typed partition key.\n scope?: string;\n // Read the writer's own most recent writes, at the cost of a slower and (on DynamoDB) doubly-charged\n // read.\n //\n // Default reads are EVENTUALLY consistent, which is right for a viewer and wrong for a caller that just\n // wrote and is now reading back to decide something. That case is not hypothetical: a flow run appends\n // its terminal event and immediately re-lists the log to fold the outcome, and under load the terminal\n // event is intermittently not yet visible — so a run that succeeded reads back as having no outcome at\n // all, with nothing recorded to explain it.\n //\n // Use it for read-your-own-writes and for any fold used as a COORDINATION primitive (deciding \"am I\n // last\", \"did this finish\"). Do not use it for ordinary reads.\n consistentRead?: boolean;\n}\n\n// Payload\nexport interface KeyValueStoreQueryActionPayload {\n keyValueStoreName: string;\n\n keyCondition: KvsQueryOperation;\n\n options?: KeyValueStoreQueryOptions;\n}\n\n// Action\nexport interface KeyValueStoreQueryAction extends Action<KeyValueStoreQueryActionPayload> {\n type: KeyValueStoreActionType.Query;\n payload: KeyValueStoreQueryActionPayload;\n}\n\n// Function Types\nexport type KeyValueStoreQueryActionProcessor<KvsItem> = ActionProcessor<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\nexport type KeyValueStoreQueryActionRequester<KvsItem> = ActionRequester<KeyValueStoreQueryAction, QpqPagedData<KvsItem>>;\n"]}
@@ -5,7 +5,18 @@ export const defineQueue = (name, processors, options) => {
5
5
  uniqueKey: name,
6
6
  name,
7
7
  batchSize: options?.batchSize || 0,
8
- batchWindowInSeconds: options?.batchWindowInSeconds || 5,
8
+ // Default 0 — invoke as soon as a message arrives — which is also AWS's own default for
9
+ // MaximumBatchingWindowInSeconds.
10
+ //
11
+ // It used to default to 5 with a `||`, which was wrong twice over. A window only ever reaches AWS for a
12
+ // queue that sets `batchSize > 0` (the CDK construct omits both together otherwise), and in practice
13
+ // those queues all use batchSize 1 — where a batch is FULL on the first message, so a window can never
14
+ // gather a second one and can only delay the first. And `||` meant 0 was falsy, so a caller who noticed
15
+ // and passed 0 still got 5: the setting could not be turned off at all.
16
+ //
17
+ // A queue that genuinely wants to accumulate should ask for a window explicitly, rather than every
18
+ // queue inheriting latency that most of them cannot use.
19
+ batchWindowInSeconds: options?.batchWindowInSeconds ?? 0,
9
20
  concurrency: options?.concurrency || 1,
10
21
  maxTries: options?.maxTries || 1,
11
22
  ttRetryInSeconds: Math.min(options?.ttRetryInSeconds || 15 * 60, 15 * 60),
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../src/config/settings/queue.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAuCrG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,UAA8B,EAAE,OAAwC,EAAyB,EAAE;IAC3I,OAAO;QACL,iBAAiB,EAAE,wBAAwB,CAAC,KAAK;QACjD,SAAS,EAAE,IAAI;QAEf,IAAI;QAEJ,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC;QAExD,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,CAAC;QAEtC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC;QAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAEzE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,IAAI,IAAI;QAEvD,kBAAkB,EAAE,UAAU;QAE9B,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,IAAI,EAAE;QAE3D,uBAAuB,EAAE,OAAO,EAAE,uBAAuB;QAEzD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;KACjC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { QpqFunctionRuntime } from '../../types';\nimport { QPQConfigAdvancedSettings, QPQConfigSetting, QPQCoreConfigSettingType } from '../QPQConfig';\n\nexport interface QpqQueueProcessors {\n [type: string]: QpqFunctionRuntime;\n}\n\nexport interface QPQConfigAdvancedQueueSettings extends QPQConfigAdvancedSettings {\n batchSize?: number;\n batchWindowInSeconds?: number;\n concurrency?: number;\n maxTries?: number;\n ttRetryInSeconds?: number;\n hasDeadLetterQueue?: boolean;\n eventBusSubscriptions?: string[];\n maxConcurrentExecutions?: number;\n isFifo?: boolean;\n}\n\nexport interface QueueQPQConfigSetting extends QPQConfigSetting {\n name: string;\n\n batchSize: number;\n batchWindowInSeconds: number;\n\n concurrency: number;\n\n maxTries: number;\n ttRetryInSeconds: number;\n\n hasDeadLetterQueue: boolean;\n qpqQueueProcessors: QpqQueueProcessors;\n\n eventBusSubscriptions: string[];\n\n maxConcurrentExecutions?: number;\n\n isFifo: boolean;\n}\n\nexport const defineQueue = (name: string, processors: QpqQueueProcessors, options?: QPQConfigAdvancedQueueSettings): QueueQPQConfigSetting => {\n return {\n configSettingType: QPQCoreConfigSettingType.queue,\n uniqueKey: name,\n\n name,\n\n batchSize: options?.batchSize || 0,\n batchWindowInSeconds: options?.batchWindowInSeconds || 5,\n\n concurrency: options?.concurrency || 1,\n\n maxTries: options?.maxTries || 1,\n ttRetryInSeconds: Math.min(options?.ttRetryInSeconds || 15 * 60, 15 * 60),\n\n hasDeadLetterQueue: options?.hasDeadLetterQueue ?? true,\n\n qpqQueueProcessors: processors,\n\n eventBusSubscriptions: options?.eventBusSubscriptions || [],\n\n maxConcurrentExecutions: options?.maxConcurrentExecutions,\n\n isFifo: options?.isFifo || false,\n };\n};\n"]}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../src/config/settings/queue.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAuCrG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,UAA8B,EAAE,OAAwC,EAAyB,EAAE;IAC3I,OAAO;QACL,iBAAiB,EAAE,wBAAwB,CAAC,KAAK;QACjD,SAAS,EAAE,IAAI;QAEf,IAAI;QAEJ,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;QAClC,wFAAwF;QACxF,kCAAkC;QAClC,EAAE;QACF,wGAAwG;QACxG,qGAAqG;QACrG,uGAAuG;QACvG,wGAAwG;QACxG,wEAAwE;QACxE,EAAE;QACF,mGAAmG;QACnG,yDAAyD;QACzD,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC;QAExD,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,CAAC;QAEtC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC;QAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAEzE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,IAAI,IAAI;QAEvD,kBAAkB,EAAE,UAAU;QAE9B,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,IAAI,EAAE;QAE3D,uBAAuB,EAAE,OAAO,EAAE,uBAAuB;QAEzD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;KACjC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { QpqFunctionRuntime } from '../../types';\nimport { QPQConfigAdvancedSettings, QPQConfigSetting, QPQCoreConfigSettingType } from '../QPQConfig';\n\nexport interface QpqQueueProcessors {\n [type: string]: QpqFunctionRuntime;\n}\n\nexport interface QPQConfigAdvancedQueueSettings extends QPQConfigAdvancedSettings {\n batchSize?: number;\n batchWindowInSeconds?: number;\n concurrency?: number;\n maxTries?: number;\n ttRetryInSeconds?: number;\n hasDeadLetterQueue?: boolean;\n eventBusSubscriptions?: string[];\n maxConcurrentExecutions?: number;\n isFifo?: boolean;\n}\n\nexport interface QueueQPQConfigSetting extends QPQConfigSetting {\n name: string;\n\n batchSize: number;\n batchWindowInSeconds: number;\n\n concurrency: number;\n\n maxTries: number;\n ttRetryInSeconds: number;\n\n hasDeadLetterQueue: boolean;\n qpqQueueProcessors: QpqQueueProcessors;\n\n eventBusSubscriptions: string[];\n\n maxConcurrentExecutions?: number;\n\n isFifo: boolean;\n}\n\nexport const defineQueue = (name: string, processors: QpqQueueProcessors, options?: QPQConfigAdvancedQueueSettings): QueueQPQConfigSetting => {\n return {\n configSettingType: QPQCoreConfigSettingType.queue,\n uniqueKey: name,\n\n name,\n\n batchSize: options?.batchSize || 0,\n // Default 0 — invoke as soon as a message arrives — which is also AWS's own default for\n // MaximumBatchingWindowInSeconds.\n //\n // It used to default to 5 with a `||`, which was wrong twice over. A window only ever reaches AWS for a\n // queue that sets `batchSize > 0` (the CDK construct omits both together otherwise), and in practice\n // those queues all use batchSize 1 — where a batch is FULL on the first message, so a window can never\n // gather a second one and can only delay the first. And `||` meant 0 was falsy, so a caller who noticed\n // and passed 0 still got 5: the setting could not be turned off at all.\n //\n // A queue that genuinely wants to accumulate should ask for a window explicitly, rather than every\n // queue inheriting latency that most of them cannot use.\n batchWindowInSeconds: options?.batchWindowInSeconds ?? 0,\n\n concurrency: options?.concurrency || 1,\n\n maxTries: options?.maxTries || 1,\n ttRetryInSeconds: Math.min(options?.ttRetryInSeconds || 15 * 60, 15 * 60),\n\n hasDeadLetterQueue: options?.hasDeadLetterQueue ?? true,\n\n qpqQueueProcessors: processors,\n\n eventBusSubscriptions: options?.eventBusSubscriptions || [],\n\n maxConcurrentExecutions: options?.maxConcurrentExecutions,\n\n isFifo: options?.isFifo || false,\n };\n};\n"]}
@@ -1,4 +1,5 @@
1
1
  import { ErrorTypeEnum } from '../types/ErrorTypeEnum';
2
+ import { isTransientErrorName } from './transientErrorNames';
2
3
  export const getSuccessfulEitherActionResult = (result) => ({
3
4
  success: true,
4
5
  result,
@@ -41,6 +42,15 @@ export const actionResultErrorFromCaughtError = (error, errorMap) => {
41
42
  return handler(error);
42
43
  }
43
44
  const unmappedKey = errorCode ?? errorName;
45
+ // TODO: This is really shit... this does not belong here.
46
+ //
47
+ // Classify throttles and transient service failures BEFORE the generic fallback, so a caller can tell
48
+ // "the service is busy" from "this request is wrong" without matching on error text. Without this they
49
+ // are indistinguishable GenericErrors, and a caller that records failures durably writes a permanent
50
+ // failure for something that would have succeeded on the next attempt.
51
+ if (isTransientErrorName(errorCode) || isTransientErrorName(errorName)) {
52
+ return actionResultError(ErrorTypeEnum.OutOfResources, `A transient error occurred, retry [${unmappedKey}].`);
53
+ }
44
54
  console.log(`Error: ${unmappedKey}`);
45
55
  return actionResultError(ErrorTypeEnum.GenericError, `An unexpected error occurred [${unmappedKey}].`);
46
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"actionLogic.js","sourceRoot":"","sources":["../../../src/logic/actionLogic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAI,MAAS,EAAyB,EAAE,CAAC,CAAC;IACvF,OAAO,EAAE,IAAI;IACb,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,KAAe,EAA2B,EAAE,CAAC,CAAC;IAC9F,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiC,EAAE,SAAiB,EAAE,UAAmB,EAA8B,EAAE;IACzI,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,MAAS,EAA4B,EAAE;IACrE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAI,YAAsC,EAAW,EAAE;IAC1F,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,YAAsC,EAAE,EAAE;IAC/E,yEAAyE;IACzE,qCAAqC;IACrC,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAI,YAAsC,EAAY,EAAE;IAC9F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,SAAS,EAAE,wCAAwC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;YAClF,SAAS,EAAE,aAAa,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC,CAAC,CAAa,CAAC;AACrC,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,KAAc,EAAE,QAAkB,EAAwC,EAAE;IAC3H,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAI,KAAa,CAAC,IAA0B,CAAC;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAE7B,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,WAAW,GAAG,SAAS,IAAI,SAAS,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;QACrC,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,iCAAiC,WAAW,IAAI,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAExC,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;AACrF,CAAC,CAAC","sourcesContent":["import { ActionProcessorResult, EitherActionResult } from '../types/Action';\nimport { ErrorTypeEnum } from '../types/ErrorTypeEnum';\nimport { QPQError } from '../types/ErrorTypeEnum';\n\nexport const getSuccessfulEitherActionResult = <T>(result: T): EitherActionResult<T> => ({\n success: true,\n result,\n});\n\nexport const getUnsuccessfulEitherActionResult = (error: QPQError): EitherActionResult<any> => ({\n success: false,\n error: error,\n});\n\nexport const actionResultError = (errorType: ErrorTypeEnum | string, errorText: string, errorStack?: string): ActionProcessorResult<any> => {\n return [undefined, { errorType, errorText, errorStack }];\n};\n\nexport const actionResult = <T>(result: T): ActionProcessorResult<T> => {\n return [result];\n};\n\nexport const isErroredActionResult = <T>(actionResult: ActionProcessorResult<T>): boolean => {\n return !actionResult || !!actionResult[1];\n};\n\nexport const resolveActionResult = <T>(actionResult: ActionProcessorResult<T>) => {\n // We say that it has to have a value, otherwise don't call this function\n // use isErroredActionResult to check\n return actionResult[0]!;\n};\n\nexport const resolveActionResultError = <T>(actionResult: ActionProcessorResult<T>): QPQError => {\n if (!actionResult) {\n return {\n errorText: `Action processor returned no result [${JSON.stringify(actionResult)}]`,\n errorType: ErrorTypeEnum.GenericError,\n };\n }\n\n return actionResult[1] as QPQError;\n};\n\ntype ErrorMap = { [key: string]: (error: Error) => ActionProcessorResult<any> };\n\nexport const actionResultErrorFromCaughtError = (error: unknown, errorMap: ErrorMap): ReturnType<typeof actionResultError> => {\n if (error instanceof Error) {\n const errorCode = (error as any).code as string | undefined;\n const errorName = error.name;\n\n // Prefer the OS/runtime code (node fs: EACCES, ENOENT...), then fall back\n // to the error name (AWS SDK: AccessDenied, NoSuchBucket...).\n const handler = (errorCode && errorMap[errorCode]) || errorMap[errorName];\n if (handler) {\n return handler(error);\n }\n\n const unmappedKey = errorCode ?? errorName;\n console.log(`Error: ${unmappedKey}`);\n return actionResultError(ErrorTypeEnum.GenericError, `An unexpected error occurred [${unmappedKey}].`);\n }\n\n console.log('Caught non-error:', error);\n\n return actionResultError(ErrorTypeEnum.GenericError, 'An unknown error occurred.');\n};\n"]}
1
+ {"version":3,"file":"actionLogic.js","sourceRoot":"","sources":["../../../src/logic/actionLogic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAI,MAAS,EAAyB,EAAE,CAAC,CAAC;IACvF,OAAO,EAAE,IAAI;IACb,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,KAAe,EAA2B,EAAE,CAAC,CAAC;IAC9F,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiC,EAAE,SAAiB,EAAE,UAAmB,EAA8B,EAAE;IACzI,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,MAAS,EAA4B,EAAE;IACrE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAI,YAAsC,EAAW,EAAE;IAC1F,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,YAAsC,EAAE,EAAE;IAC/E,yEAAyE;IACzE,qCAAqC;IACrC,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAI,YAAsC,EAAY,EAAE;IAC9F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,SAAS,EAAE,wCAAwC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;YAClF,SAAS,EAAE,aAAa,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC,CAAC,CAAa,CAAC;AACrC,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,KAAc,EAAE,QAAkB,EAAwC,EAAE;IAC3H,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAI,KAAa,CAAC,IAA0B,CAAC;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAE7B,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,WAAW,GAAG,SAAS,IAAI,SAAS,CAAC;QAE3C,0DAA0D;QAC1D,EAAE;QACF,sGAAsG;QACtG,uGAAuG;QACvG,qGAAqG;QACrG,uEAAuE;QACvE,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;YACvE,OAAO,iBAAiB,CAAC,aAAa,CAAC,cAAc,EAAE,sCAAsC,WAAW,IAAI,CAAC,CAAC;QAChH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;QACrC,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,iCAAiC,WAAW,IAAI,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAExC,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;AACrF,CAAC,CAAC","sourcesContent":["import { ActionProcessorResult, EitherActionResult } from '../types/Action';\nimport { ErrorTypeEnum } from '../types/ErrorTypeEnum';\nimport { QPQError } from '../types/ErrorTypeEnum';\nimport { isTransientErrorName } from './transientErrorNames';\n\nexport const getSuccessfulEitherActionResult = <T>(result: T): EitherActionResult<T> => ({\n success: true,\n result,\n});\n\nexport const getUnsuccessfulEitherActionResult = (error: QPQError): EitherActionResult<any> => ({\n success: false,\n error: error,\n});\n\nexport const actionResultError = (errorType: ErrorTypeEnum | string, errorText: string, errorStack?: string): ActionProcessorResult<any> => {\n return [undefined, { errorType, errorText, errorStack }];\n};\n\nexport const actionResult = <T>(result: T): ActionProcessorResult<T> => {\n return [result];\n};\n\nexport const isErroredActionResult = <T>(actionResult: ActionProcessorResult<T>): boolean => {\n return !actionResult || !!actionResult[1];\n};\n\nexport const resolveActionResult = <T>(actionResult: ActionProcessorResult<T>) => {\n // We say that it has to have a value, otherwise don't call this function\n // use isErroredActionResult to check\n return actionResult[0]!;\n};\n\nexport const resolveActionResultError = <T>(actionResult: ActionProcessorResult<T>): QPQError => {\n if (!actionResult) {\n return {\n errorText: `Action processor returned no result [${JSON.stringify(actionResult)}]`,\n errorType: ErrorTypeEnum.GenericError,\n };\n }\n\n return actionResult[1] as QPQError;\n};\n\ntype ErrorMap = { [key: string]: (error: Error) => ActionProcessorResult<any> };\n\nexport const actionResultErrorFromCaughtError = (error: unknown, errorMap: ErrorMap): ReturnType<typeof actionResultError> => {\n if (error instanceof Error) {\n const errorCode = (error as any).code as string | undefined;\n const errorName = error.name;\n\n // Prefer the OS/runtime code (node fs: EACCES, ENOENT...), then fall back\n // to the error name (AWS SDK: AccessDenied, NoSuchBucket...).\n const handler = (errorCode && errorMap[errorCode]) || errorMap[errorName];\n if (handler) {\n return handler(error);\n }\n\n const unmappedKey = errorCode ?? errorName;\n\n // TODO: This is really shit... this does not belong here.\n //\n // Classify throttles and transient service failures BEFORE the generic fallback, so a caller can tell\n // \"the service is busy\" from \"this request is wrong\" without matching on error text. Without this they\n // are indistinguishable GenericErrors, and a caller that records failures durably writes a permanent\n // failure for something that would have succeeded on the next attempt.\n if (isTransientErrorName(errorCode) || isTransientErrorName(errorName)) {\n return actionResultError(ErrorTypeEnum.OutOfResources, `A transient error occurred, retry [${unmappedKey}].`);\n }\n\n console.log(`Error: ${unmappedKey}`);\n return actionResultError(ErrorTypeEnum.GenericError, `An unexpected error occurred [${unmappedKey}].`);\n }\n\n console.log('Caught non-error:', error);\n\n return actionResultError(ErrorTypeEnum.GenericError, 'An unknown error occurred.');\n};\n"]}
@@ -7,3 +7,4 @@ export * from './lookup';
7
7
  export * from './scope';
8
8
  export * from './stateEffects';
9
9
  export * from './stream';
10
+ export * from './transientErrorNames';
@@ -7,4 +7,5 @@ export * from './lookup';
7
7
  export * from './scope';
8
8
  export * from './stateEffects';
9
9
  export * from './stream';
10
+ export * from './transientErrorNames';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logic/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC","sourcesContent":["export * from './actionValidators';\nexport * from './context';\nexport * from './decomposedString';\nexport * from './error';\nexport * from './logHistory';\nexport * from './lookup';\nexport * from './scope';\nexport * from './stateEffects';\nexport * from './stream';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logic/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './actionValidators';\nexport * from './context';\nexport * from './decomposedString';\nexport * from './error';\nexport * from './logHistory';\nexport * from './lookup';\nexport * from './scope';\nexport * from './stateEffects';\nexport * from './stream';\nexport * from './transientErrorNames';\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AWS / runtime error names that mean "try again shortly", not "this will never work".
3
+ *
4
+ * These are RATE and CAPACITY signals, not faults in the request. A throttled DynamoDB write or a
5
+ * throttled Lambda invoke is a statement about the last few seconds of traffic, and the identical call a
6
+ * moment later usually succeeds.
7
+ *
8
+ * They matter because the default classification is the opposite. An unmapped error name falls through to
9
+ * GenericError, which callers reasonably treat as terminal — so a caller with retry machinery available
10
+ * will not use it, and a caller that records failures durably will record a permanent failure for
11
+ * something that was only ever momentary. That was observed in DocGen: a 300-record fanned-out batch put
12
+ * ~100 concurrent flows against DynamoDB, 64 records came back `ThrottlingException`, and every one was
13
+ * written down as a failed run rather than retried.
14
+ *
15
+ * Mapping them to OutOfResources gives callers a single typed thing to branch on, instead of matching
16
+ * substrings against error text.
17
+ */
18
+ export declare const TRANSIENT_ERROR_NAMES: ReadonlySet<string>;
19
+ /** Whether an error name or OS code names a transient, worth-retrying condition. */
20
+ export declare const isTransientErrorName: (name?: string) => boolean;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * AWS / runtime error names that mean "try again shortly", not "this will never work".
3
+ *
4
+ * These are RATE and CAPACITY signals, not faults in the request. A throttled DynamoDB write or a
5
+ * throttled Lambda invoke is a statement about the last few seconds of traffic, and the identical call a
6
+ * moment later usually succeeds.
7
+ *
8
+ * They matter because the default classification is the opposite. An unmapped error name falls through to
9
+ * GenericError, which callers reasonably treat as terminal — so a caller with retry machinery available
10
+ * will not use it, and a caller that records failures durably will record a permanent failure for
11
+ * something that was only ever momentary. That was observed in DocGen: a 300-record fanned-out batch put
12
+ * ~100 concurrent flows against DynamoDB, 64 records came back `ThrottlingException`, and every one was
13
+ * written down as a failed run rather than retried.
14
+ *
15
+ * Mapping them to OutOfResources gives callers a single typed thing to branch on, instead of matching
16
+ * substrings against error text.
17
+ */
18
+ export const TRANSIENT_ERROR_NAMES = new Set([
19
+ // Generic AWS SDK throttle, used by DynamoDB, SQS, Lambda and others.
20
+ 'ThrottlingException',
21
+ 'Throttling',
22
+ 'ThrottledException',
23
+ 'RequestThrottled',
24
+ 'RequestThrottledException',
25
+ 'TooManyRequestsException',
26
+ // DynamoDB capacity.
27
+ 'ProvisionedThroughputExceededException',
28
+ 'RequestLimitExceeded',
29
+ // Lambda concurrency.
30
+ 'EC2ThrottledException',
31
+ // Transient service-side failures — retrying is the documented response to both.
32
+ 'ServiceUnavailable',
33
+ 'InternalServerError',
34
+ 'InternalFailure',
35
+ 'ServiceException',
36
+ // Network-level interruptions.
37
+ 'TimeoutError',
38
+ 'RequestTimeout',
39
+ 'RequestTimeoutException',
40
+ 'ECONNRESET',
41
+ 'ETIMEDOUT',
42
+ 'EPIPE',
43
+ 'ENOTFOUND',
44
+ ]);
45
+ /** Whether an error name or OS code names a transient, worth-retrying condition. */
46
+ export const isTransientErrorName = (name) => !!name && TRANSIENT_ERROR_NAMES.has(name);
47
+ // TODO: This is a shit file, we should do this a better way,
48
+ //# sourceMappingURL=transientErrorNames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transientErrorNames.js","sourceRoot":"","sources":["../../../src/logic/transientErrorNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,sEAAsE;IACtE,qBAAqB;IACrB,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,2BAA2B;IAC3B,0BAA0B;IAC1B,qBAAqB;IACrB,wCAAwC;IACxC,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,iFAAiF;IACjF,oBAAoB;IACpB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,+BAA+B;IAC/B,cAAc;IACd,gBAAgB;IAChB,yBAAyB;IACzB,YAAY;IACZ,WAAW;IACX,OAAO;IACP,WAAW;CACZ,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE1G,6DAA6D","sourcesContent":["/**\n * AWS / runtime error names that mean \"try again shortly\", not \"this will never work\".\n *\n * These are RATE and CAPACITY signals, not faults in the request. A throttled DynamoDB write or a\n * throttled Lambda invoke is a statement about the last few seconds of traffic, and the identical call a\n * moment later usually succeeds.\n *\n * They matter because the default classification is the opposite. An unmapped error name falls through to\n * GenericError, which callers reasonably treat as terminal — so a caller with retry machinery available\n * will not use it, and a caller that records failures durably will record a permanent failure for\n * something that was only ever momentary. That was observed in DocGen: a 300-record fanned-out batch put\n * ~100 concurrent flows against DynamoDB, 64 records came back `ThrottlingException`, and every one was\n * written down as a failed run rather than retried.\n *\n * Mapping them to OutOfResources gives callers a single typed thing to branch on, instead of matching\n * substrings against error text.\n */\nexport const TRANSIENT_ERROR_NAMES: ReadonlySet<string> = new Set([\n // Generic AWS SDK throttle, used by DynamoDB, SQS, Lambda and others.\n 'ThrottlingException',\n 'Throttling',\n 'ThrottledException',\n 'RequestThrottled',\n 'RequestThrottledException',\n 'TooManyRequestsException',\n // DynamoDB capacity.\n 'ProvisionedThroughputExceededException',\n 'RequestLimitExceeded',\n // Lambda concurrency.\n 'EC2ThrottledException',\n // Transient service-side failures — retrying is the documented response to both.\n 'ServiceUnavailable',\n 'InternalServerError',\n 'InternalFailure',\n 'ServiceException',\n // Network-level interruptions.\n 'TimeoutError',\n 'RequestTimeout',\n 'RequestTimeoutException',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'EPIPE',\n 'ENOTFOUND',\n]);\n\n/** Whether an error name or OS code names a transient, worth-retrying condition. */\nexport const isTransientErrorName = (name?: string): boolean => !!name && TRANSIENT_ERROR_NAMES.has(name);\n\n// TODO: This is a shit file, we should do this a better way,\n"]}
@@ -276,6 +276,13 @@ export const getAllSrcEntries = (qpqConfig) => {
276
276
  ...getUserDirectorySrcEntries(qpqConfig),
277
277
  ...getDeployEventConfigs(qpqConfig).map((r) => r.runtime),
278
278
  ...getStorageDrives(qpqConfig).flatMap((sd) => [sd.onEvent?.create, sd.onEvent?.delete].filter((r) => !!r)),
279
+ // A store's change-stream handler. Missing here, the bundler never sees it: the lambda
280
+ // zip omits it and the dev server's dynamic loader has nothing to resolve, so the handler
281
+ // simply never runs — and since nothing throws, the only symptom is a projection that
282
+ // silently stops updating.
283
+ ...getAllKeyValueStores(qpqConfig)
284
+ .map((kvs) => kvs.onStream?.runtime)
285
+ .filter((runtime) => !!runtime),
279
286
  ...getAllInlineFunctions(qpqConfig).map((f) => f.runtime),
280
287
  ];
281
288
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"qpqCoreUtils.js","sourceRoot":"","sources":["../../src/qpqCoreUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionProcessorsQPQConfigSetting,\n AiQPQConfigSetting,\n ApiBuildPathQPQConfigSetting,\n ApplicationQPQConfigSetting,\n BackendBundleOptions,\n BackendBundleOptionsQPQConfigSetting,\n ClaudeAIQPQConfigSetting,\n CryptoKeyQPQConfigSetting,\n defineJavascriptRuntime,\n DeployEventsQPQConfigSetting,\n EmailTemplates,\n EnvironmentSettingsQPQConfigSetting,\n EventBusQPQConfigSetting,\n FederatedModuleStoreQPQConfigSetting,\n FrontendBundleOptions,\n FrontendBundleOptionsQPQConfigSetting,\n GlobalQPQConfigSetting,\n GraphDatabaseQPQConfigSetting,\n InlineFunctionQPQConfigSetting,\n JavascriptRuntimeQPQConfigSetting,\n KeyValueStoreQPQConfigSetting,\n ModuleQPQConfigSetting,\n NotifyErrorQPQConfigSetting,\n ParameterQPQConfigSetting,\n QPQConfig,\n QPQConfigItem,\n QPQConfigSetting,\n QPQCoreConfigSettingType,\n QpqQueueProcessors,\n QueueQPQConfigSetting,\n ScheduleQPQConfigSetting,\n SecretQPQConfigSetting,\n ServiceSettingsQPQConfigSetting,\n StorageDriveQPQConfigSetting,\n UserDirectoryQPQConfigSetting,\n VirtualNetworkQPQConfigSetting,\n} from './config';\nimport {\n ConfigUrl,\n CrossModuleOwner,\n CrossServiceResourceName,\n CustomFullyQualifiedResource,\n FullyQualifiedResource,\n KeyOf,\n QpqFunctionRuntime,\n ResourceName,\n} from './types';\nimport { isQpqFunctionRuntimeAdvanced } from './utils';\n\n/**\n * Flattens a QPQConfig array into a single array of QPQConfigSetting objects.\n * If a QPQConfigItem has a configSettingType of QPQCoreConfigSettingType.environmentSettings,\n * and its environment matches the current environment, its settings will be added to the flattened array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array to be flattened.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects\n */\nexport const flattenQpqConfig = (qpqConfig: QPQConfig): QPQConfigSetting[] => {\n let environment = 'development';\n let service: string | undefined;\n\n /**\n * A recursive helper function that flattens an array of QPQConfigItem objects.\n * @function\n * @param {QPQConfigItem[]} configItems - An array of QPQConfigItem objects to be flattened.\n * @param {QPQConfigSetting[]} accumulator - An accumulator array for storing the flattened QPQConfigSetting objects.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects.\n */\n const flatten = (configItems: QPQConfigItem[], accumulator: QPQConfigSetting[] = []): QPQConfigSetting[] => {\n return configItems.reduce<QPQConfigSetting[]>((acc, item) => {\n if (Array.isArray(item)) {\n return flatten(item, acc);\n } else {\n // If its a appName config item, update the environment variable\n if (item.configSettingType === QPQCoreConfigSettingType.appName) {\n environment = (item as ApplicationQPQConfigSetting).environment || 'development';\n }\n\n // If its a moduleName config item, update the service variable\n else if (item.configSettingType === QPQCoreConfigSettingType.moduleName) {\n service = (item as ModuleQPQConfigSetting).moduleName;\n }\n\n // Otherwise if its an environmentSettings config item, flatten out the child settings\n // for the current environment, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.environmentSettings) {\n const envSetting = item as EnvironmentSettingsQPQConfigSetting;\n const settings = envSetting.settingsByEnvironment[environment] ?? envSetting.settingsByEnvironment['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise if its a serviceSettings config item, flatten out the child settings\n // for the current service, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.serviceSettings) {\n if (!service) {\n throw new Error('defineServiceSettings requires a module to be set first via defineModule (usually through defineApplicationModule)');\n }\n\n const svcSetting = item as ServiceSettingsQPQConfigSetting;\n const settings = svcSetting.settingsByService[service] ?? svcSetting.settingsByService['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise its just a regular config item, add it to the list\n return [...acc, item];\n }\n }, accumulator);\n };\n\n return flatten(qpqConfig);\n};\n\n/**\n * Filters and returns the config settings of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to filter.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} configSettingType - The specific config setting type to filter.\n * @returns {T[]} - An array of filtered config settings of the specified type.\n */\nexport const getConfigSettings = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, configSettingType: string): T[] => {\n const flatConfig = flattenQpqConfig(qpqConfig);\n return flatConfig.filter((c) => c.configSettingType === configSettingType) as T[];\n};\n\n/**\n * Retrieves a single config setting of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to retrieve.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} serviceInfrastructureConfigType - The specific config setting type to retrieve.\n * @returns {T | undefined} - The found config setting of the specified type or undefined if not found.\n */\nexport const getConfigSetting = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, serviceInfrastructureConfigType: string): T | undefined => {\n const [setting] = getConfigSettings<T>(qpqConfig, serviceInfrastructureConfigType);\n return setting;\n};\n\n/**\n * Retrieves the ApplicationModuleSetting from a QPQConfig array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @returns {ApplicationQPQConfigSetting} - The ApplicationQPQConfigSetting from the QPQConfig array.\n * @throws {Error} - If the ApplicationQPQConfigSetting is not found in the QPQConfig array.\n */\nexport const getApplicationConfigSetting = (qpqConfig: QPQConfig): ApplicationQPQConfigSetting => {\n const applicationModuleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!applicationModuleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return applicationModuleSetting;\n};\n\nexport const getApplicationModuleName = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ModuleQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.moduleName);\n\n if (!moduleSetting) {\n throw new Error('please use defineModule in your QPQ config');\n }\n\n return moduleSetting.moduleName;\n};\n\nexport const getApplicationConfigRoot = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!moduleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return moduleSetting.configRoot;\n};\n\nexport const getApplicationName = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).applicationName;\n};\n\nexport const getApplicationModuleFeature = (qpqConfig: QPQConfig): string | undefined => {\n return getApplicationConfigSetting(qpqConfig).feature;\n};\n\nexport const getConfigRoot = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).configRoot;\n};\n\nexport const getApplicationModuleEnvironment = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).environment || 'production';\n};\n\nexport const getStorageDrives = (configs: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive);\n};\n\nexport const getStorageDriveByName = (storageDriveName: string, configs: QPQConfig): StorageDriveQPQConfigSetting | undefined => {\n return getStorageDrives(configs).find((sd) => sd.storageDrive === storageDriveName);\n};\n\nexport const getFederatedModuleStore = (qpqConfig: QPQConfig): FederatedModuleStoreQPQConfigSetting | undefined => {\n return getConfigSetting<FederatedModuleStoreQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.federatedModuleStore);\n};\n\nexport const getQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n};\n\nexport const getOwnedQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getOwnedItems(getQueues(configs), configs);\n};\n\nexport const getNotifyErrorConfigs = (configs: QPQConfig): NotifyErrorQPQConfigSetting[] => {\n return getConfigSettings<NotifyErrorQPQConfigSetting>(configs, QPQCoreConfigSettingType.notifyError);\n};\n\nexport const getQueueByName = (configs: QPQConfig, name: string): QueueQPQConfigSetting | undefined => {\n return getQueues(configs).find((q) => q.name === name);\n};\n\n// A FIFO queue can only be fed by a FIFO event bus - standard SNS topics cannot deliver\n// to FIFO SQS queues at all. Called at deploy/startup time (the queue and bus are separate\n// settings, so defineQueue can't validate this on its own).\nexport const assertFifoQueueEventBusSubscriptionsAreValid = (qpqConfig: QPQConfig): void => {\n const invalidSubscriptions = getQueues(qpqConfig)\n .filter((queue) => queue.isFifo)\n .flatMap((queue) =>\n queue.eventBusSubscriptions\n .filter((eventBusName) => !getEventBusConfigByName(eventBusName, qpqConfig)?.isFifo)\n .map((eventBusName) => `queue [${queue.name}] -> event bus [${eventBusName}]`),\n );\n\n if (invalidSubscriptions.length > 0) {\n throw new Error(\n `FIFO queues can only subscribe to FIFO event buses (standard SNS topics cannot deliver to FIFO SQS queues): ${invalidSubscriptions.join(', ')}`,\n );\n }\n};\n\nexport const getStorageDriveNames = (configs: QPQConfig): string[] => {\n const storageDriveNames = getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive).map(\n (sd) => sd.storageDrive,\n );\n\n return storageDriveNames;\n};\n\nexport const getAllEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const eventBuses = getConfigSettings<EventBusQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.eventBus);\n\n return eventBuses;\n};\n\nexport const getAllAiConfigs = (qpqConfig: QPQConfig): AiQPQConfigSetting[] => {\n return getConfigSettings<AiQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.ai);\n};\n\n// Always resolves - falls back to the defineJavascriptRuntime defaults when no setting is present\nexport const getJavascriptRuntimeConfig = (qpqConfig: QPQConfig): JavascriptRuntimeQPQConfigSetting => {\n return getConfigSetting<JavascriptRuntimeQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.javascriptRuntime) ?? defineJavascriptRuntime();\n};\n\nexport const getAllClaudeAiConfigs = (qpqConfig: QPQConfig): ClaudeAIQPQConfigSetting[] => {\n const claudeAis = getConfigSettings<ClaudeAIQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.claudeAi);\n\n return claudeAis;\n};\n\nexport const getOwnedEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const ownedEventBusConfigs = getOwnedItems(getAllEventBusConfigs(qpqConfig), qpqConfig);\n\n return ownedEventBusConfigs;\n};\n\nexport const getEventBusConfigByName = (eventBusName: string, qpqConfig: QPQConfig): EventBusQPQConfigSetting | undefined => {\n const allConfigs = getAllEventBusConfigs(qpqConfig);\n\n const eventBusConfig = allConfigs.find((eb) => eb.owner?.resourceNameOverride === eventBusName);\n\n if (eventBusConfig) {\n return eventBusConfig;\n }\n\n return allConfigs.find((eb) => eb.name === eventBusName);\n};\n\nexport const getOwnedItems = <T extends QPQConfigSetting>(settings: T[], qpqConfig: QPQConfig): T[] => {\n const appModuleName = getApplicationModuleName(qpqConfig);\n const appName = getApplicationName(qpqConfig);\n const appFeature = getApplicationModuleFeature(qpqConfig);\n const appEnvironment = getApplicationModuleEnvironment(qpqConfig);\n\n return settings.filter(\n (s) =>\n !s.owner ||\n ((!s.owner.module || s.owner.module === appModuleName) &&\n (!s.owner.application || s.owner.application === appName) &&\n (s.owner.feature === undefined || (!s.owner.feature && !appFeature) || s.owner.feature === appFeature) &&\n (!s.owner.environment || s.owner.environment === appEnvironment)),\n );\n};\n\nexport const getAllKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n const keyValueStores = getConfigSettings<KeyValueStoreQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.keyValueStore);\n\n return keyValueStores;\n};\n\nexport const getAllGraphDatabaseConfigs = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n const graphDatabases = getConfigSettings<GraphDatabaseQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.graphDatabase);\n\n return graphDatabases;\n};\n\nexport const getDeployEventConfigs = (qpqConfig: QPQConfig): DeployEventsQPQConfigSetting[] => {\n const deployEvents = getConfigSettings<DeployEventsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.deployEvent);\n\n return deployEvents;\n};\n\nexport const getVirualNetworkConfigs = (qpqConfig: QPQConfig): VirtualNetworkQPQConfigSetting[] => {\n return getConfigSettings<VirtualNetworkQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.virtualNetwork);\n};\n\nexport const getOwnedKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n return getOwnedItems(getAllKeyValueStores(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedGraphDatabases = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n return getOwnedItems(getAllGraphDatabaseConfigs(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedStorageDrives = (qpqConfig: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getOwnedItems(getStorageDrives(qpqConfig), qpqConfig);\n};\n\nexport const resolveCrossServiceResourceName = (resourceName: ResourceName): CrossServiceResourceName => {\n if (typeof resourceName === 'string') {\n return {\n name: resourceName,\n };\n }\n\n return resourceName;\n};\n\nexport const getKeyValueStoreByName = <T extends object = any>(\n qpqConfig: QPQConfig,\n kvsName: string,\n): KeyValueStoreQPQConfigSetting<T> | undefined => {\n const keyValueStore = getAllKeyValueStores<T>(qpqConfig).find((kvs) => kvs.keyValueStoreName === kvsName);\n\n return keyValueStore;\n};\n\nexport const getActionProcessorSources = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const sources = getConfigSettings<ActionProcessorsQPQConfigSetting>(configs, QPQCoreConfigSettingType.actionProcessors).map((ap) => ap.runtime);\n\n return sources;\n};\n\nexport const getUserDirectoryEmailTemplates = (qpqConfig: QPQConfig): Record<string, EmailTemplates> => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.userDirectory);\n\n const record = userDirectories.reduce(\n (acc, ud) => ({\n ...acc,\n [ud.name]: ud.emailTemplates,\n }),\n {} as Record<string, EmailTemplates>,\n );\n\n return record;\n};\n\nexport const getScheduleEvents = (configs: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getConfigSettings<ScheduleQPQConfigSetting>(configs, QPQCoreConfigSettingType.schedule);\n};\n\nexport const getOwnedScheduleEvents = (qpqConfig: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getOwnedItems(getScheduleEvents(qpqConfig), qpqConfig);\n};\n\nexport const getQueueSrcEntries = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.reduce((acc, qc) => [...acc, ...Object.values(qc.qpqQueueProcessors)], [] as QpqFunctionRuntime[]);\n};\n\nexport const getUserDirectorySrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n // We just want the ones this service owns.\n const userConfigs = getOwnedUserDirectories(qpqConfig);\n\n return userConfigs\n .reduce((acc, ud) => [...acc, ...Object.values(ud.emailTemplates), ...Object.values(ud.customAuthRuntime || {})], [] as QpqFunctionRuntime[])\n .filter((se) => !!se);\n};\n\nexport const getAllInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getConfigSettings<InlineFunctionQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.inlineFunction);\n};\n\nexport const getOwnedInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getOwnedItems(getAllInlineFunctions(qpqConfig), qpqConfig);\n};\n\n// Used in bundlers to know where and what to build and index\nexport const getAllSrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n const result = [\n ...getActionProcessorSources(qpqConfig),\n ...getScheduleEvents(qpqConfig).map((r) => r.runtime),\n ...getQueueSrcEntries(qpqConfig),\n ...getUserDirectorySrcEntries(qpqConfig),\n ...getDeployEventConfigs(qpqConfig).map((r) => r.runtime),\n ...getStorageDrives(qpqConfig).flatMap((sd) => [sd.onEvent?.create, sd.onEvent?.delete].filter((r) => !!r) as QpqFunctionRuntime[]),\n ...getAllInlineFunctions(qpqConfig).map((f) => f.runtime),\n ];\n\n return result;\n};\n\nexport const getApiBuildPath = (qpqConfig: QPQConfig): string => {\n const [apiBuildPathConfig] = getConfigSettings<ApiBuildPathQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.apiBuildPath);\n\n if (!apiBuildPathConfig) {\n throw new Error(`Can not find app base path use defineApiBuildPath or defineApplicationModule`);\n }\n\n return apiBuildPathConfig.apiBuildPath;\n};\n\nexport const getSrcFilenameFromQpqFunctionRuntime = (qpqFunctionRuntime: QpqFunctionRuntime): string => {\n if (isQpqFunctionRuntimeAdvanced(qpqFunctionRuntime)) {\n return qpqFunctionRuntime.relativePath.split('/').pop() || '';\n }\n\n const [srcPath] = qpqFunctionRuntime.split('::');\n return srcPath.split('/').pop() || '';\n};\n\nexport const getSecretByName = (secretName: string, qpqConfig: QPQConfig): SecretQPQConfigSetting => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n const secret = secrets.find((s) => s.key === secretName);\n\n if (!secret) {\n throw new Error(`Can not find secret [${secretName}]`);\n }\n\n return secret;\n};\n\nexport const getAllSecretConfigs = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n return secrets;\n};\n\nexport const getOwnedSecrets = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getAllSecretConfigs(qpqConfig);\n\n return getOwnedItems(secrets, qpqConfig);\n};\n\nexport const getCryptoKeyByName = (cryptoKeyName: string, qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n const cryptoKey = cryptoKeys.find((k) => k.keyName === cryptoKeyName);\n\n if (!cryptoKey) {\n throw new Error(`Can not find crypto key [${cryptoKeyName}]`);\n }\n\n return cryptoKey;\n};\n\nexport const getAllCryptoKeyConfigs = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n return cryptoKeys;\n};\n\nexport const getOwnedCryptoKeys = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getAllCryptoKeyConfigs(qpqConfig);\n\n return getOwnedItems(cryptoKeys, qpqConfig);\n};\n\nexport const getGlobalConfigValue = <T>(qpqConfig: QPQConfig, name: string): T => {\n const global = getConfigSettings<GlobalQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.global).find((g) => g.key === name);\n\n if (!global) {\n throw new Error(`Global config ${name} not found`);\n }\n\n return global.value;\n};\n\n// Resolves a global by name, giving precedence to globals declared on the\n// executing function (functionGlobals) before falling back to the service-wide\n// config global. Throws (via getGlobalConfigValue) if the name is found in neither.\nexport const resolveGlobalValue = <T>(qpqConfig: QPQConfig, functionGlobals: Record<string, unknown> | undefined, name: string): T => {\n if (functionGlobals && Object.prototype.hasOwnProperty.call(functionGlobals, name)) {\n return functionGlobals[name] as T;\n }\n\n return getGlobalConfigValue<T>(qpqConfig, name);\n};\n\nexport const getUserDirectories = (configs: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(configs, QPQCoreConfigSettingType.userDirectory);\n\n return userDirectories;\n};\n\nexport const getOwnedUserDirectories = (qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getUserDirectories(qpqConifg);\n\n return getOwnedItems(userDirectories, qpqConifg);\n};\n\nexport const getUserDirectoryByName = (userDirectoryName: string, qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting => {\n const userDirectory = getUserDirectories(qpqConifg).find((ud) => ud.name === userDirectoryName);\n\n if (!userDirectory) {\n throw new Error(`UserDirectory not found: ${userDirectoryName}`);\n }\n\n return userDirectory;\n};\n\nexport const getAllParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n return parameters;\n};\n\nexport const getParameterConfig = (name: string, qpqConfig: QPQConfig): ParameterQPQConfigSetting => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n const param = parameters.find((p) => p.key === name);\n\n if (!param) {\n throw new Error(`Parameter ${name} not found`);\n }\n\n return param;\n};\n\nexport const getOwnedParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getAllParameterConfigs(qpqConfig);\n\n return getOwnedItems(parameters, qpqConfig);\n};\n\n/**\n * Merges every `defineBackendBundleOptions` in the config into a single set of\n * bundler directives. Services compose config from many fragments, so each\n * fragment can declare the build quirks of its own dependencies.\n */\nexport const getBackendBundleOptions = (qpqConfig: QPQConfig): Required<BackendBundleOptions> => {\n const settings = getConfigSettings<BackendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.backendBundleOptions);\n\n return {\n externals: settings.flatMap((setting) => setting.externals),\n ignoreModules: settings.flatMap((setting) => setting.ignoreModules),\n ignoreWarnings: settings.flatMap((setting) => setting.ignoreWarnings),\n };\n};\n\n/**\n * Merges every `defineFrontendBundleOptions` in the config into a single set\n * of views-bundler directives.\n */\nexport const getFrontendBundleOptions = (qpqConfig: QPQConfig): Required<FrontendBundleOptions> => {\n const settings = getConfigSettings<FrontendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.frontendBundleOptions);\n\n return {\n sharedSingletons: settings.flatMap((setting) => setting.sharedSingletons),\n };\n};\n\nexport const getUniqueKeyForSetting = (setting: QPQConfigSetting) => {\n const type = setting.configSettingType.split('/').pop();\n const key = setting.uniqueKey;\n\n return `${type}${key}`;\n};\n\nexport const getQueueConfigSettingByName = (name: string, qpqConfig: QPQConfig): QueueQPQConfigSetting | undefined => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.find((c) => c.name === name);\n};\n\nexport const getQueueQueueProcessors = (name: string, qpqConfig: QPQConfig): QpqQueueProcessors => {\n return getQueueConfigSettingByName(name, qpqConfig)?.qpqQueueProcessors || {};\n};\n\nexport const convertCustomFullyQualifiedResourceToGeneric = <T extends string>(resource: CustomFullyQualifiedResource<T>): FullyQualifiedResource => {\n type KeyType = KeyOf<CustomFullyQualifiedResource<T>>;\n const key: KeyType = Array.from(Object.keys(resource)).find(\n (k) => k !== 'module' && k !== 'application' && k !== 'feature' && k !== 'environment',\n ) as any as KeyType;\n\n const resourceName = resource[key as T];\n\n return {\n module: resource.module,\n application: resource.application,\n feature: resource.feature,\n environment: resource.environment,\n resourceName: resourceName,\n };\n};\n\nexport const getFullyQualifiedResourceName = (qpqConfig: QPQConfig, resourceName: string, config?: QPQConfigSetting): FullyQualifiedResource => {\n const confApplication = getApplicationName(qpqConfig);\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n const confModule = getApplicationModuleName(qpqConfig);\n\n return {\n resourceName: config?.owner?.resourceNameOverride || resourceName,\n\n application: config?.owner?.application || confApplication,\n environment: config?.owner?.environment || confEnvironment,\n module: config?.owner?.module || confModule,\n feature: config?.owner?.feature || confFeature || '',\n };\n};\n\n// Fully Qualified Resource Names\nexport const getKeyValueStoreFullyQualifiedResourceName = (kvsName: string, qpqConfig: QPQConfig): FullyQualifiedResource => {\n const storeConfig = getKeyValueStoreByName(qpqConfig, kvsName);\n\n return getFullyQualifiedResourceName(qpqConfig, kvsName, storeConfig);\n};\n\nexport const isSameResource = (resourceA: FullyQualifiedResource, resourceB: FullyQualifiedResource): boolean => {\n return (\n resourceA.application === resourceB.application &&\n resourceA.environment === resourceB.environment &&\n resourceA.feature === resourceB.feature &&\n resourceA.module === resourceB.module &&\n resourceA.resourceName === resourceB.resourceName\n );\n};\n\nexport const getFullUrlFromConfigUrl = (configUrl: ConfigUrl, qpqConfig: QPQConfig): string => {\n if (typeof configUrl === 'string') {\n return configUrl;\n }\n\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n\n let fullUrl = `${configUrl.domain}`;\n\n if (confEnvironment !== 'production') {\n fullUrl = `${confEnvironment}.${fullUrl}`;\n }\n\n if (confFeature) {\n fullUrl = `${confFeature}.${fullUrl}`;\n }\n\n if (configUrl.module) {\n fullUrl = `${configUrl.module}.${fullUrl}`;\n }\n\n if (configUrl.path) {\n fullUrl = `${fullUrl}${configUrl.path}`;\n }\n\n fullUrl = `${configUrl.protocol}://${fullUrl}`;\n\n return fullUrl;\n};\n"]}
1
+ {"version":3,"file":"qpqCoreUtils.js","sourceRoot":"","sources":["../../src/qpqCoreUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionProcessorsQPQConfigSetting,\n AiQPQConfigSetting,\n ApiBuildPathQPQConfigSetting,\n ApplicationQPQConfigSetting,\n BackendBundleOptions,\n BackendBundleOptionsQPQConfigSetting,\n ClaudeAIQPQConfigSetting,\n CryptoKeyQPQConfigSetting,\n defineJavascriptRuntime,\n DeployEventsQPQConfigSetting,\n EmailTemplates,\n EnvironmentSettingsQPQConfigSetting,\n EventBusQPQConfigSetting,\n FederatedModuleStoreQPQConfigSetting,\n FrontendBundleOptions,\n FrontendBundleOptionsQPQConfigSetting,\n GlobalQPQConfigSetting,\n GraphDatabaseQPQConfigSetting,\n InlineFunctionQPQConfigSetting,\n JavascriptRuntimeQPQConfigSetting,\n KeyValueStoreQPQConfigSetting,\n ModuleQPQConfigSetting,\n NotifyErrorQPQConfigSetting,\n ParameterQPQConfigSetting,\n QPQConfig,\n QPQConfigItem,\n QPQConfigSetting,\n QPQCoreConfigSettingType,\n QpqQueueProcessors,\n QueueQPQConfigSetting,\n ScheduleQPQConfigSetting,\n SecretQPQConfigSetting,\n ServiceSettingsQPQConfigSetting,\n StorageDriveQPQConfigSetting,\n UserDirectoryQPQConfigSetting,\n VirtualNetworkQPQConfigSetting,\n} from './config';\nimport {\n ConfigUrl,\n CrossModuleOwner,\n CrossServiceResourceName,\n CustomFullyQualifiedResource,\n FullyQualifiedResource,\n KeyOf,\n QpqFunctionRuntime,\n ResourceName,\n} from './types';\nimport { isQpqFunctionRuntimeAdvanced } from './utils';\n\n/**\n * Flattens a QPQConfig array into a single array of QPQConfigSetting objects.\n * If a QPQConfigItem has a configSettingType of QPQCoreConfigSettingType.environmentSettings,\n * and its environment matches the current environment, its settings will be added to the flattened array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array to be flattened.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects\n */\nexport const flattenQpqConfig = (qpqConfig: QPQConfig): QPQConfigSetting[] => {\n let environment = 'development';\n let service: string | undefined;\n\n /**\n * A recursive helper function that flattens an array of QPQConfigItem objects.\n * @function\n * @param {QPQConfigItem[]} configItems - An array of QPQConfigItem objects to be flattened.\n * @param {QPQConfigSetting[]} accumulator - An accumulator array for storing the flattened QPQConfigSetting objects.\n * @returns {QPQConfigSetting[]} - The flattened array of QPQConfigSetting objects.\n */\n const flatten = (configItems: QPQConfigItem[], accumulator: QPQConfigSetting[] = []): QPQConfigSetting[] => {\n return configItems.reduce<QPQConfigSetting[]>((acc, item) => {\n if (Array.isArray(item)) {\n return flatten(item, acc);\n } else {\n // If its a appName config item, update the environment variable\n if (item.configSettingType === QPQCoreConfigSettingType.appName) {\n environment = (item as ApplicationQPQConfigSetting).environment || 'development';\n }\n\n // If its a moduleName config item, update the service variable\n else if (item.configSettingType === QPQCoreConfigSettingType.moduleName) {\n service = (item as ModuleQPQConfigSetting).moduleName;\n }\n\n // Otherwise if its an environmentSettings config item, flatten out the child settings\n // for the current environment, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.environmentSettings) {\n const envSetting = item as EnvironmentSettingsQPQConfigSetting;\n const settings = envSetting.settingsByEnvironment[environment] ?? envSetting.settingsByEnvironment['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise if its a serviceSettings config item, flatten out the child settings\n // for the current service, falling back to the '*' key if present.\n else if (item.configSettingType === QPQCoreConfigSettingType.serviceSettings) {\n if (!service) {\n throw new Error('defineServiceSettings requires a module to be set first via defineModule (usually through defineApplicationModule)');\n }\n\n const svcSetting = item as ServiceSettingsQPQConfigSetting;\n const settings = svcSetting.settingsByService[service] ?? svcSetting.settingsByService['*'] ?? [];\n\n return flatten(settings, acc);\n }\n\n // Otherwise its just a regular config item, add it to the list\n return [...acc, item];\n }\n }, accumulator);\n };\n\n return flatten(qpqConfig);\n};\n\n/**\n * Filters and returns the config settings of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to filter.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} configSettingType - The specific config setting type to filter.\n * @returns {T[]} - An array of filtered config settings of the specified type.\n */\nexport const getConfigSettings = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, configSettingType: string): T[] => {\n const flatConfig = flattenQpqConfig(qpqConfig);\n return flatConfig.filter((c) => c.configSettingType === configSettingType) as T[];\n};\n\n/**\n * Retrieves a single config setting of a specific type from a QPQConfig array.\n * @function\n * @template T - The specific type of QPQConfigSetting to retrieve.\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @param {string} serviceInfrastructureConfigType - The specific config setting type to retrieve.\n * @returns {T | undefined} - The found config setting of the specified type or undefined if not found.\n */\nexport const getConfigSetting = <T extends QPQConfigSetting>(qpqConfig: QPQConfig, serviceInfrastructureConfigType: string): T | undefined => {\n const [setting] = getConfigSettings<T>(qpqConfig, serviceInfrastructureConfigType);\n return setting;\n};\n\n/**\n * Retrieves the ApplicationModuleSetting from a QPQConfig array.\n * @function\n * @param {QPQConfig} qpqConfig - The input QPQConfig array.\n * @returns {ApplicationQPQConfigSetting} - The ApplicationQPQConfigSetting from the QPQConfig array.\n * @throws {Error} - If the ApplicationQPQConfigSetting is not found in the QPQConfig array.\n */\nexport const getApplicationConfigSetting = (qpqConfig: QPQConfig): ApplicationQPQConfigSetting => {\n const applicationModuleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!applicationModuleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return applicationModuleSetting;\n};\n\nexport const getApplicationModuleName = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ModuleQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.moduleName);\n\n if (!moduleSetting) {\n throw new Error('please use defineModule in your QPQ config');\n }\n\n return moduleSetting.moduleName;\n};\n\nexport const getApplicationConfigRoot = (qpqConfig: QPQConfig): string => {\n const moduleSetting = getConfigSetting<ApplicationQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.appName);\n\n if (!moduleSetting) {\n throw new Error('please use defineApplication in your QPQ config');\n }\n\n return moduleSetting.configRoot;\n};\n\nexport const getApplicationName = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).applicationName;\n};\n\nexport const getApplicationModuleFeature = (qpqConfig: QPQConfig): string | undefined => {\n return getApplicationConfigSetting(qpqConfig).feature;\n};\n\nexport const getConfigRoot = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).configRoot;\n};\n\nexport const getApplicationModuleEnvironment = (qpqConfig: QPQConfig): string => {\n return getApplicationConfigSetting(qpqConfig).environment || 'production';\n};\n\nexport const getStorageDrives = (configs: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive);\n};\n\nexport const getStorageDriveByName = (storageDriveName: string, configs: QPQConfig): StorageDriveQPQConfigSetting | undefined => {\n return getStorageDrives(configs).find((sd) => sd.storageDrive === storageDriveName);\n};\n\nexport const getFederatedModuleStore = (qpqConfig: QPQConfig): FederatedModuleStoreQPQConfigSetting | undefined => {\n return getConfigSetting<FederatedModuleStoreQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.federatedModuleStore);\n};\n\nexport const getQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n};\n\nexport const getOwnedQueues = (configs: QPQConfig): QueueQPQConfigSetting[] => {\n return getOwnedItems(getQueues(configs), configs);\n};\n\nexport const getNotifyErrorConfigs = (configs: QPQConfig): NotifyErrorQPQConfigSetting[] => {\n return getConfigSettings<NotifyErrorQPQConfigSetting>(configs, QPQCoreConfigSettingType.notifyError);\n};\n\nexport const getQueueByName = (configs: QPQConfig, name: string): QueueQPQConfigSetting | undefined => {\n return getQueues(configs).find((q) => q.name === name);\n};\n\n// A FIFO queue can only be fed by a FIFO event bus - standard SNS topics cannot deliver\n// to FIFO SQS queues at all. Called at deploy/startup time (the queue and bus are separate\n// settings, so defineQueue can't validate this on its own).\nexport const assertFifoQueueEventBusSubscriptionsAreValid = (qpqConfig: QPQConfig): void => {\n const invalidSubscriptions = getQueues(qpqConfig)\n .filter((queue) => queue.isFifo)\n .flatMap((queue) =>\n queue.eventBusSubscriptions\n .filter((eventBusName) => !getEventBusConfigByName(eventBusName, qpqConfig)?.isFifo)\n .map((eventBusName) => `queue [${queue.name}] -> event bus [${eventBusName}]`),\n );\n\n if (invalidSubscriptions.length > 0) {\n throw new Error(\n `FIFO queues can only subscribe to FIFO event buses (standard SNS topics cannot deliver to FIFO SQS queues): ${invalidSubscriptions.join(', ')}`,\n );\n }\n};\n\nexport const getStorageDriveNames = (configs: QPQConfig): string[] => {\n const storageDriveNames = getConfigSettings<StorageDriveQPQConfigSetting>(configs, QPQCoreConfigSettingType.storageDrive).map(\n (sd) => sd.storageDrive,\n );\n\n return storageDriveNames;\n};\n\nexport const getAllEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const eventBuses = getConfigSettings<EventBusQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.eventBus);\n\n return eventBuses;\n};\n\nexport const getAllAiConfigs = (qpqConfig: QPQConfig): AiQPQConfigSetting[] => {\n return getConfigSettings<AiQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.ai);\n};\n\n// Always resolves - falls back to the defineJavascriptRuntime defaults when no setting is present\nexport const getJavascriptRuntimeConfig = (qpqConfig: QPQConfig): JavascriptRuntimeQPQConfigSetting => {\n return getConfigSetting<JavascriptRuntimeQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.javascriptRuntime) ?? defineJavascriptRuntime();\n};\n\nexport const getAllClaudeAiConfigs = (qpqConfig: QPQConfig): ClaudeAIQPQConfigSetting[] => {\n const claudeAis = getConfigSettings<ClaudeAIQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.claudeAi);\n\n return claudeAis;\n};\n\nexport const getOwnedEventBusConfigs = (qpqConfig: QPQConfig): EventBusQPQConfigSetting[] => {\n const ownedEventBusConfigs = getOwnedItems(getAllEventBusConfigs(qpqConfig), qpqConfig);\n\n return ownedEventBusConfigs;\n};\n\nexport const getEventBusConfigByName = (eventBusName: string, qpqConfig: QPQConfig): EventBusQPQConfigSetting | undefined => {\n const allConfigs = getAllEventBusConfigs(qpqConfig);\n\n const eventBusConfig = allConfigs.find((eb) => eb.owner?.resourceNameOverride === eventBusName);\n\n if (eventBusConfig) {\n return eventBusConfig;\n }\n\n return allConfigs.find((eb) => eb.name === eventBusName);\n};\n\nexport const getOwnedItems = <T extends QPQConfigSetting>(settings: T[], qpqConfig: QPQConfig): T[] => {\n const appModuleName = getApplicationModuleName(qpqConfig);\n const appName = getApplicationName(qpqConfig);\n const appFeature = getApplicationModuleFeature(qpqConfig);\n const appEnvironment = getApplicationModuleEnvironment(qpqConfig);\n\n return settings.filter(\n (s) =>\n !s.owner ||\n ((!s.owner.module || s.owner.module === appModuleName) &&\n (!s.owner.application || s.owner.application === appName) &&\n (s.owner.feature === undefined || (!s.owner.feature && !appFeature) || s.owner.feature === appFeature) &&\n (!s.owner.environment || s.owner.environment === appEnvironment)),\n );\n};\n\nexport const getAllKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n const keyValueStores = getConfigSettings<KeyValueStoreQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.keyValueStore);\n\n return keyValueStores;\n};\n\nexport const getAllGraphDatabaseConfigs = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n const graphDatabases = getConfigSettings<GraphDatabaseQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.graphDatabase);\n\n return graphDatabases;\n};\n\nexport const getDeployEventConfigs = (qpqConfig: QPQConfig): DeployEventsQPQConfigSetting[] => {\n const deployEvents = getConfigSettings<DeployEventsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.deployEvent);\n\n return deployEvents;\n};\n\nexport const getVirualNetworkConfigs = (qpqConfig: QPQConfig): VirtualNetworkQPQConfigSetting[] => {\n return getConfigSettings<VirtualNetworkQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.virtualNetwork);\n};\n\nexport const getOwnedKeyValueStores = <T extends object = any>(qpqConfig: QPQConfig): KeyValueStoreQPQConfigSetting<T>[] => {\n return getOwnedItems(getAllKeyValueStores(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedGraphDatabases = (qpqConfig: QPQConfig): GraphDatabaseQPQConfigSetting[] => {\n return getOwnedItems(getAllGraphDatabaseConfigs(qpqConfig), qpqConfig);\n};\n\nexport const getOwnedStorageDrives = (qpqConfig: QPQConfig): StorageDriveQPQConfigSetting[] => {\n return getOwnedItems(getStorageDrives(qpqConfig), qpqConfig);\n};\n\nexport const resolveCrossServiceResourceName = (resourceName: ResourceName): CrossServiceResourceName => {\n if (typeof resourceName === 'string') {\n return {\n name: resourceName,\n };\n }\n\n return resourceName;\n};\n\nexport const getKeyValueStoreByName = <T extends object = any>(\n qpqConfig: QPQConfig,\n kvsName: string,\n): KeyValueStoreQPQConfigSetting<T> | undefined => {\n const keyValueStore = getAllKeyValueStores<T>(qpqConfig).find((kvs) => kvs.keyValueStoreName === kvsName);\n\n return keyValueStore;\n};\n\nexport const getActionProcessorSources = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const sources = getConfigSettings<ActionProcessorsQPQConfigSetting>(configs, QPQCoreConfigSettingType.actionProcessors).map((ap) => ap.runtime);\n\n return sources;\n};\n\nexport const getUserDirectoryEmailTemplates = (qpqConfig: QPQConfig): Record<string, EmailTemplates> => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.userDirectory);\n\n const record = userDirectories.reduce(\n (acc, ud) => ({\n ...acc,\n [ud.name]: ud.emailTemplates,\n }),\n {} as Record<string, EmailTemplates>,\n );\n\n return record;\n};\n\nexport const getScheduleEvents = (configs: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getConfigSettings<ScheduleQPQConfigSetting>(configs, QPQCoreConfigSettingType.schedule);\n};\n\nexport const getOwnedScheduleEvents = (qpqConfig: QPQConfig): ScheduleQPQConfigSetting[] => {\n return getOwnedItems(getScheduleEvents(qpqConfig), qpqConfig);\n};\n\nexport const getQueueSrcEntries = (configs: QPQConfig): QpqFunctionRuntime[] => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(configs, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.reduce((acc, qc) => [...acc, ...Object.values(qc.qpqQueueProcessors)], [] as QpqFunctionRuntime[]);\n};\n\nexport const getUserDirectorySrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n // We just want the ones this service owns.\n const userConfigs = getOwnedUserDirectories(qpqConfig);\n\n return userConfigs\n .reduce((acc, ud) => [...acc, ...Object.values(ud.emailTemplates), ...Object.values(ud.customAuthRuntime || {})], [] as QpqFunctionRuntime[])\n .filter((se) => !!se);\n};\n\nexport const getAllInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getConfigSettings<InlineFunctionQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.inlineFunction);\n};\n\nexport const getOwnedInlineFunctions = (qpqConfig: QPQConfig): InlineFunctionQPQConfigSetting[] => {\n return getOwnedItems(getAllInlineFunctions(qpqConfig), qpqConfig);\n};\n\n// Used in bundlers to know where and what to build and index\nexport const getAllSrcEntries = (qpqConfig: QPQConfig): QpqFunctionRuntime[] => {\n const result = [\n ...getActionProcessorSources(qpqConfig),\n ...getScheduleEvents(qpqConfig).map((r) => r.runtime),\n ...getQueueSrcEntries(qpqConfig),\n ...getUserDirectorySrcEntries(qpqConfig),\n ...getDeployEventConfigs(qpqConfig).map((r) => r.runtime),\n ...getStorageDrives(qpqConfig).flatMap((sd) => [sd.onEvent?.create, sd.onEvent?.delete].filter((r) => !!r) as QpqFunctionRuntime[]),\n // A store's change-stream handler. Missing here, the bundler never sees it: the lambda\n // zip omits it and the dev server's dynamic loader has nothing to resolve, so the handler\n // simply never runs — and since nothing throws, the only symptom is a projection that\n // silently stops updating.\n ...(getAllKeyValueStores(qpqConfig)\n .map((kvs) => kvs.onStream?.runtime)\n .filter((runtime) => !!runtime) as QpqFunctionRuntime[]),\n ...getAllInlineFunctions(qpqConfig).map((f) => f.runtime),\n ];\n\n return result;\n};\n\nexport const getApiBuildPath = (qpqConfig: QPQConfig): string => {\n const [apiBuildPathConfig] = getConfigSettings<ApiBuildPathQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.apiBuildPath);\n\n if (!apiBuildPathConfig) {\n throw new Error(`Can not find app base path use defineApiBuildPath or defineApplicationModule`);\n }\n\n return apiBuildPathConfig.apiBuildPath;\n};\n\nexport const getSrcFilenameFromQpqFunctionRuntime = (qpqFunctionRuntime: QpqFunctionRuntime): string => {\n if (isQpqFunctionRuntimeAdvanced(qpqFunctionRuntime)) {\n return qpqFunctionRuntime.relativePath.split('/').pop() || '';\n }\n\n const [srcPath] = qpqFunctionRuntime.split('::');\n return srcPath.split('/').pop() || '';\n};\n\nexport const getSecretByName = (secretName: string, qpqConfig: QPQConfig): SecretQPQConfigSetting => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n const secret = secrets.find((s) => s.key === secretName);\n\n if (!secret) {\n throw new Error(`Can not find secret [${secretName}]`);\n }\n\n return secret;\n};\n\nexport const getAllSecretConfigs = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getConfigSettings<SecretQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.secret);\n\n return secrets;\n};\n\nexport const getOwnedSecrets = (qpqConfig: QPQConfig): SecretQPQConfigSetting[] => {\n const secrets = getAllSecretConfigs(qpqConfig);\n\n return getOwnedItems(secrets, qpqConfig);\n};\n\nexport const getCryptoKeyByName = (cryptoKeyName: string, qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n const cryptoKey = cryptoKeys.find((k) => k.keyName === cryptoKeyName);\n\n if (!cryptoKey) {\n throw new Error(`Can not find crypto key [${cryptoKeyName}]`);\n }\n\n return cryptoKey;\n};\n\nexport const getAllCryptoKeyConfigs = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getConfigSettings<CryptoKeyQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.cryptoKey);\n\n return cryptoKeys;\n};\n\nexport const getOwnedCryptoKeys = (qpqConfig: QPQConfig): CryptoKeyQPQConfigSetting[] => {\n const cryptoKeys = getAllCryptoKeyConfigs(qpqConfig);\n\n return getOwnedItems(cryptoKeys, qpqConfig);\n};\n\nexport const getGlobalConfigValue = <T>(qpqConfig: QPQConfig, name: string): T => {\n const global = getConfigSettings<GlobalQPQConfigSetting<T>>(qpqConfig, QPQCoreConfigSettingType.global).find((g) => g.key === name);\n\n if (!global) {\n throw new Error(`Global config ${name} not found`);\n }\n\n return global.value;\n};\n\n// Resolves a global by name, giving precedence to globals declared on the\n// executing function (functionGlobals) before falling back to the service-wide\n// config global. Throws (via getGlobalConfigValue) if the name is found in neither.\nexport const resolveGlobalValue = <T>(qpqConfig: QPQConfig, functionGlobals: Record<string, unknown> | undefined, name: string): T => {\n if (functionGlobals && Object.prototype.hasOwnProperty.call(functionGlobals, name)) {\n return functionGlobals[name] as T;\n }\n\n return getGlobalConfigValue<T>(qpqConfig, name);\n};\n\nexport const getUserDirectories = (configs: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getConfigSettings<UserDirectoryQPQConfigSetting>(configs, QPQCoreConfigSettingType.userDirectory);\n\n return userDirectories;\n};\n\nexport const getOwnedUserDirectories = (qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting[] => {\n const userDirectories = getUserDirectories(qpqConifg);\n\n return getOwnedItems(userDirectories, qpqConifg);\n};\n\nexport const getUserDirectoryByName = (userDirectoryName: string, qpqConifg: QPQConfig): UserDirectoryQPQConfigSetting => {\n const userDirectory = getUserDirectories(qpqConifg).find((ud) => ud.name === userDirectoryName);\n\n if (!userDirectory) {\n throw new Error(`UserDirectory not found: ${userDirectoryName}`);\n }\n\n return userDirectory;\n};\n\nexport const getAllParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n return parameters;\n};\n\nexport const getParameterConfig = (name: string, qpqConfig: QPQConfig): ParameterQPQConfigSetting => {\n const parameters = getConfigSettings<ParameterQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.parameter);\n\n const param = parameters.find((p) => p.key === name);\n\n if (!param) {\n throw new Error(`Parameter ${name} not found`);\n }\n\n return param;\n};\n\nexport const getOwnedParameterConfigs = (qpqConfig: QPQConfig): ParameterQPQConfigSetting[] => {\n const parameters = getAllParameterConfigs(qpqConfig);\n\n return getOwnedItems(parameters, qpqConfig);\n};\n\n/**\n * Merges every `defineBackendBundleOptions` in the config into a single set of\n * bundler directives. Services compose config from many fragments, so each\n * fragment can declare the build quirks of its own dependencies.\n */\nexport const getBackendBundleOptions = (qpqConfig: QPQConfig): Required<BackendBundleOptions> => {\n const settings = getConfigSettings<BackendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.backendBundleOptions);\n\n return {\n externals: settings.flatMap((setting) => setting.externals),\n ignoreModules: settings.flatMap((setting) => setting.ignoreModules),\n ignoreWarnings: settings.flatMap((setting) => setting.ignoreWarnings),\n };\n};\n\n/**\n * Merges every `defineFrontendBundleOptions` in the config into a single set\n * of views-bundler directives.\n */\nexport const getFrontendBundleOptions = (qpqConfig: QPQConfig): Required<FrontendBundleOptions> => {\n const settings = getConfigSettings<FrontendBundleOptionsQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.frontendBundleOptions);\n\n return {\n sharedSingletons: settings.flatMap((setting) => setting.sharedSingletons),\n };\n};\n\nexport const getUniqueKeyForSetting = (setting: QPQConfigSetting) => {\n const type = setting.configSettingType.split('/').pop();\n const key = setting.uniqueKey;\n\n return `${type}${key}`;\n};\n\nexport const getQueueConfigSettingByName = (name: string, qpqConfig: QPQConfig): QueueQPQConfigSetting | undefined => {\n const queueConfigs = getConfigSettings<QueueQPQConfigSetting>(qpqConfig, QPQCoreConfigSettingType.queue);\n\n return queueConfigs.find((c) => c.name === name);\n};\n\nexport const getQueueQueueProcessors = (name: string, qpqConfig: QPQConfig): QpqQueueProcessors => {\n return getQueueConfigSettingByName(name, qpqConfig)?.qpqQueueProcessors || {};\n};\n\nexport const convertCustomFullyQualifiedResourceToGeneric = <T extends string>(resource: CustomFullyQualifiedResource<T>): FullyQualifiedResource => {\n type KeyType = KeyOf<CustomFullyQualifiedResource<T>>;\n const key: KeyType = Array.from(Object.keys(resource)).find(\n (k) => k !== 'module' && k !== 'application' && k !== 'feature' && k !== 'environment',\n ) as any as KeyType;\n\n const resourceName = resource[key as T];\n\n return {\n module: resource.module,\n application: resource.application,\n feature: resource.feature,\n environment: resource.environment,\n resourceName: resourceName,\n };\n};\n\nexport const getFullyQualifiedResourceName = (qpqConfig: QPQConfig, resourceName: string, config?: QPQConfigSetting): FullyQualifiedResource => {\n const confApplication = getApplicationName(qpqConfig);\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n const confModule = getApplicationModuleName(qpqConfig);\n\n return {\n resourceName: config?.owner?.resourceNameOverride || resourceName,\n\n application: config?.owner?.application || confApplication,\n environment: config?.owner?.environment || confEnvironment,\n module: config?.owner?.module || confModule,\n feature: config?.owner?.feature || confFeature || '',\n };\n};\n\n// Fully Qualified Resource Names\nexport const getKeyValueStoreFullyQualifiedResourceName = (kvsName: string, qpqConfig: QPQConfig): FullyQualifiedResource => {\n const storeConfig = getKeyValueStoreByName(qpqConfig, kvsName);\n\n return getFullyQualifiedResourceName(qpqConfig, kvsName, storeConfig);\n};\n\nexport const isSameResource = (resourceA: FullyQualifiedResource, resourceB: FullyQualifiedResource): boolean => {\n return (\n resourceA.application === resourceB.application &&\n resourceA.environment === resourceB.environment &&\n resourceA.feature === resourceB.feature &&\n resourceA.module === resourceB.module &&\n resourceA.resourceName === resourceB.resourceName\n );\n};\n\nexport const getFullUrlFromConfigUrl = (configUrl: ConfigUrl, qpqConfig: QPQConfig): string => {\n if (typeof configUrl === 'string') {\n return configUrl;\n }\n\n const confEnvironment = getApplicationModuleEnvironment(qpqConfig);\n const confFeature = getApplicationModuleFeature(qpqConfig);\n\n let fullUrl = `${configUrl.domain}`;\n\n if (confEnvironment !== 'production') {\n fullUrl = `${confEnvironment}.${fullUrl}`;\n }\n\n if (confFeature) {\n fullUrl = `${confFeature}.${fullUrl}`;\n }\n\n if (configUrl.module) {\n fullUrl = `${configUrl.module}.${fullUrl}`;\n }\n\n if (configUrl.path) {\n fullUrl = `${fullUrl}${configUrl.path}`;\n }\n\n fullUrl = `${configUrl.protocol}://${fullUrl}`;\n\n return fullUrl;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quidproquo-core",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -33,7 +33,7 @@
33
33
  "homepage": "https://github.com/joe-coady/quidproquo#readme",
34
34
  "devDependencies": {
35
35
  "@types/node": "^24.2.1",
36
- "quidproquo-tsconfig": "0.1.13",
36
+ "quidproquo-tsconfig": "0.1.14",
37
37
  "typescript": "^5.8.2"
38
38
  },
39
39
  "dependencies": {