libmodulor 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +2 -2
  3. package/dist/esm/apps/Helper/src/i18n.js +4 -4
  4. package/dist/esm/apps/Helper/src/lib/layers/project.js +6 -6
  5. package/dist/esm/apps/Helper/src/ucds/CreateAppUCD.js +5 -10
  6. package/dist/esm/apps/Helper/src/ucds/CreateProductUCD.js +5 -10
  7. package/dist/esm/apps/Helper/src/ucds/CreateTargetUCD.js +6 -11
  8. package/dist/esm/apps/Helper/src/ucds/TestAppUCD.js +5 -8
  9. package/dist/esm/dt/DataType.d.ts +2 -1
  10. package/dist/esm/dt/DataTypes.d.ts +1 -1
  11. package/dist/esm/dt/DataTypes.js +1 -0
  12. package/dist/esm/dt/base/TBase.d.ts +2 -0
  13. package/dist/esm/dt/base/TBase.js +5 -0
  14. package/dist/esm/dt/base/TBoolean.d.ts +2 -0
  15. package/dist/esm/dt/base/TBoolean.js +3 -0
  16. package/dist/esm/dt/base/TInt.d.ts +2 -0
  17. package/dist/esm/dt/base/TInt.js +3 -0
  18. package/dist/esm/dt/base/TNumber.d.ts +2 -0
  19. package/dist/esm/dt/base/TNumber.js +3 -0
  20. package/dist/esm/dt/base/TObject.d.ts +2 -0
  21. package/dist/esm/dt/base/TObject.js +29 -0
  22. package/dist/esm/dt/final/TApiKey.d.ts +2 -0
  23. package/dist/esm/dt/final/TApiKey.js +3 -0
  24. package/dist/esm/dt/final/TDateISO8601.d.ts +2 -0
  25. package/dist/esm/dt/final/TDateISO8601.js +3 -0
  26. package/dist/esm/dt/final/TDomainName.d.ts +2 -0
  27. package/dist/esm/dt/final/TDomainName.js +3 -0
  28. package/dist/esm/dt/final/TEmail.d.ts +2 -0
  29. package/dist/esm/dt/final/TEmail.js +3 -0
  30. package/dist/esm/dt/final/TEncryptionKey.d.ts +2 -0
  31. package/dist/esm/dt/final/TEncryptionKey.js +3 -0
  32. package/dist/esm/dt/final/TErrorCode.d.ts +7 -0
  33. package/dist/esm/dt/final/TErrorCode.js +9 -0
  34. package/dist/esm/dt/final/TFile.d.ts +2 -0
  35. package/dist/esm/dt/final/TFile.js +3 -0
  36. package/dist/esm/dt/final/TIPv4.d.ts +2 -0
  37. package/dist/esm/dt/final/TIPv4.js +3 -0
  38. package/dist/esm/dt/final/TIPv6.d.ts +2 -0
  39. package/dist/esm/dt/final/TIPv6.js +3 -0
  40. package/dist/esm/dt/final/TJWT.d.ts +2 -0
  41. package/dist/esm/dt/final/TJWT.js +3 -0
  42. package/dist/esm/dt/final/TPassword.d.ts +2 -0
  43. package/dist/esm/dt/final/TPassword.js +3 -0
  44. package/dist/esm/dt/final/TSSHPrivateKey.d.ts +2 -0
  45. package/dist/esm/dt/final/TSSHPrivateKey.js +3 -0
  46. package/dist/esm/dt/final/TTime.d.ts +2 -0
  47. package/dist/esm/dt/final/TTime.js +3 -0
  48. package/dist/esm/dt/final/TURL.d.ts +2 -0
  49. package/dist/esm/dt/final/TURL.js +3 -0
  50. package/dist/esm/dt/index.d.ts +2 -0
  51. package/dist/esm/dt/index.js +1 -0
  52. package/dist/esm/dt/targets/json-schema.d.ts +24 -0
  53. package/dist/esm/error/CustomError.d.ts +1 -1
  54. package/dist/esm/error/CustomError.js +2 -2
  55. package/dist/esm/error/ForbiddenAsNotFoundError.js +1 -1
  56. package/dist/esm/error/ForbiddenError.js +1 -1
  57. package/dist/esm/error/IllegalArgumentError.js +2 -2
  58. package/dist/esm/error/InternalServerError.js +1 -1
  59. package/dist/esm/error/NotFoundError.js +1 -1
  60. package/dist/esm/error/UnauthorizedError.js +1 -1
  61. package/dist/esm/error/UnavailableError.d.ts +6 -0
  62. package/dist/esm/error/UnavailableError.js +9 -0
  63. package/dist/esm/error/funcs.d.ts +3 -0
  64. package/dist/esm/error/funcs.js +3 -1
  65. package/dist/esm/error/index.d.ts +2 -1
  66. package/dist/esm/error/index.js +2 -1
  67. package/dist/esm/i18n/locales/de.js +8 -0
  68. package/dist/esm/i18n/locales/en.js +8 -0
  69. package/dist/esm/i18n/locales/es.js +8 -0
  70. package/dist/esm/i18n/locales/fr.js +8 -0
  71. package/dist/esm/i18n/types.d.ts +1 -1
  72. package/dist/esm/product/manifest.d.ts +2 -0
  73. package/dist/esm/products/Helper/i18n.d.ts +8 -0
  74. package/dist/esm/std/impl/SimpleHTTPAPICaller.js +1 -1
  75. package/dist/esm/std/impl/SimpleMapI18nManager.d.ts +1 -1
  76. package/dist/esm/std/impl/SimpleMapI18nManager.js +4 -2
  77. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.d.ts +6 -2
  78. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.js +17 -9
  79. package/dist/esm/target/index.d.ts +1 -0
  80. package/dist/esm/target/lib/cli/CommandExecutor.js +2 -2
  81. package/dist/esm/target/lib/cli/renderer.d.ts +2 -1
  82. package/dist/esm/target/lib/cli/renderer.js +10 -11
  83. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.d.ts +25 -0
  84. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.js +131 -0
  85. package/dist/esm/target/lib/openapi/consts.d.ts +2 -0
  86. package/dist/esm/target/lib/openapi/consts.js +1 -0
  87. package/dist/esm/target/lib/openapi/funcs.d.ts +16 -0
  88. package/dist/esm/target/lib/openapi/funcs.js +249 -0
  89. package/dist/esm/target/lib/openapi/input.d.ts +16 -0
  90. package/dist/esm/target/lib/openapi/input.js +33 -0
  91. package/dist/esm/target/lib/openapi/types.d.ts +109 -0
  92. package/dist/esm/target/lib/rn/input.d.ts +3 -0
  93. package/dist/esm/target/lib/server/AuthCookieCreator.d.ts +2 -1
  94. package/dist/esm/target/lib/server/AuthenticationChecker.d.ts +3 -3
  95. package/dist/esm/target/lib/server/AuthenticationChecker.js +5 -5
  96. package/dist/esm/target/lib/server/ServerBooter.d.ts +4 -2
  97. package/dist/esm/target/lib/server/ServerBooter.js +34 -11
  98. package/dist/esm/target/lib/server/ServerManager.d.ts +19 -9
  99. package/dist/esm/target/lib/server/ServerRequestHandler.d.ts +0 -1
  100. package/dist/esm/target/lib/server/ServerRequestHandler.js +2 -2
  101. package/dist/esm/target/lib/server/consts.d.ts +4 -0
  102. package/dist/esm/target/lib/server/consts.js +22 -0
  103. package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.d.ts +15 -0
  104. package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.js +55 -0
  105. package/dist/esm/target/lib/server-express/funcs.d.ts +2 -1
  106. package/dist/esm/target/lib/server-express/funcs.js +7 -2
  107. package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.d.ts +14 -0
  108. package/dist/esm/target/{node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js → lib/server-hono/CORSMiddlewareBuilder.js} +22 -20
  109. package/dist/esm/target/lib/server-hono/funcs.d.ts +2 -1
  110. package/dist/esm/target/lib/server-hono/funcs.js +2 -1
  111. package/dist/esm/target/lib/shared.d.ts +4 -0
  112. package/dist/esm/target/lib/shared.js +2 -1
  113. package/dist/esm/target/nextjs-server/NextJSServerManager.d.ts +3 -1
  114. package/dist/esm/target/nextjs-server/NextJSServerManager.js +3 -0
  115. package/dist/esm/target/node-core-cli/NodeCoreCLIManager.js +1 -1
  116. package/dist/esm/target/node-express-server/NodeExpressServerManager.d.ts +7 -3
  117. package/dist/esm/target/node-express-server/NodeExpressServerManager.js +24 -14
  118. package/dist/esm/target/node-hono-server/NodeHonoServerManager.d.ts +6 -2
  119. package/dist/esm/target/node-hono-server/NodeHonoServerManager.js +21 -11
  120. package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.d.ts +3 -1
  121. package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.js +19 -14
  122. package/dist/esm/target/node-mcp-server/types.d.ts +0 -4
  123. package/dist/esm/target/react-web-pure/UCForm.d.ts +1 -1
  124. package/dist/esm/target/react-web-pure/UCForm.js +3 -2
  125. package/dist/esm/testing/workers/checkers/AppI18nChecker.js +4 -2
  126. package/dist/esm/uc/UC.d.ts +2 -0
  127. package/dist/esm/uc/UC.js +16 -1
  128. package/dist/esm/uc/data-store.d.ts +9 -1
  129. package/dist/esm/uc/data-store.js +33 -1
  130. package/dist/esm/uc/impl/CloudflareD1UCDataStore.d.ts +2 -2
  131. package/dist/esm/uc/impl/CloudflareD1UCDataStore.js +7 -0
  132. package/dist/esm/uc/impl/InMemoryUCDataStore.d.ts +8 -3
  133. package/dist/esm/uc/impl/InMemoryUCDataStore.js +19 -3
  134. package/dist/esm/uc/impl/KnexUCDataStore.d.ts +2 -2
  135. package/dist/esm/uc/impl/KnexUCDataStore.js +10 -2
  136. package/dist/esm/uc/impl/SimpleUCManager.d.ts +4 -4
  137. package/dist/esm/uc/impl/SimpleUCManager.js +10 -10
  138. package/dist/esm/uc/metadata.d.ts +7 -0
  139. package/dist/esm/uc/metadata.js +10 -0
  140. package/dist/esm/uc/output-field.d.ts +1 -0
  141. package/dist/esm/uc/output-field.js +13 -1
  142. package/dist/esm/uc/settings/consts.js +1 -0
  143. package/dist/esm/uc/settings.d.ts +8 -1
  144. package/dist/esm/uc/utils/ucHTTPContract.js +1 -1
  145. package/dist/esm/uc/workers/UCExecChecker.d.ts +3 -3
  146. package/dist/esm/uc/workers/UCExecChecker.js +5 -5
  147. package/dist/esm/utils/http/types.d.ts +5 -0
  148. package/dist/esm/utils/index.d.ts +2 -2
  149. package/dist/esm/utils/index.js +1 -1
  150. package/dist/esm/utils/ioc/bindCommon.js +4 -4
  151. package/dist/esm/utils/ioc/bindFactory.d.ts +2 -0
  152. package/dist/esm/utils/ioc/bindFactory.js +9 -0
  153. package/package.json +21 -20
  154. package/dist/esm/apps/Helper/src/lib/app.d.ts +0 -6
  155. package/dist/esm/apps/Helper/src/lib/app.js +0 -12
  156. package/dist/esm/apps/Helper/src/lib/project.d.ts +0 -3
  157. package/dist/esm/apps/Helper/src/lib/project.js +0 -163
  158. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  159. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.js +0 -18
  160. package/dist/esm/products/Helper/cli-node-core/container.d.ts +0 -3
  161. package/dist/esm/products/Helper/cli-node-core/container.js +0 -26
  162. package/dist/esm/products/Helper/cli-node-core/index.js +0 -9
  163. package/dist/esm/products/Helper/container.d.ts +0 -3
  164. package/dist/esm/products/Helper/container.js +0 -26
  165. package/dist/esm/products/Helper/index.js +0 -16
  166. package/dist/esm/target/lib/react/common.d.ts +0 -6
  167. package/dist/esm/target/lib/react/common.js +0 -1
  168. package/dist/esm/target/lib/server/RequestHandler.d.ts +0 -14
  169. package/dist/esm/target/lib/server/RequestHandler.js +0 -1
  170. package/dist/esm/target/lib/server-node/stop.d.ts +0 -2
  171. package/dist/esm/target/lib/server-node/stop.js +0 -18
  172. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.d.ts +0 -21
  173. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.js +0 -50
  174. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.d.ts +0 -21
  175. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js +0 -61
  176. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.d.ts +0 -12
  177. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.js +0 -35
  178. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.d.ts +0 -12
  179. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.js +0 -39
  180. package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.d.ts +0 -18
  181. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.d.ts +0 -12
  182. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.js +0 -36
  183. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.d.ts +0 -23
  184. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.js +0 -154
  185. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.d.ts +0 -13
  186. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.js +0 -46
  187. package/dist/esm/testing/impl/SimpleAppDocsEmitter.d.ts +0 -7
  188. package/dist/esm/testing/impl/SimpleAppDocsEmitter.js +0 -180
  189. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.d.ts +0 -14
  190. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.js +0 -35
  191. package/dist/esm/uc/utils/stripUCDLifecycleServer.d.ts +0 -15
  192. package/dist/esm/uc/utils/stripUCDLifecycleServer.js +0 -77
  193. package/dist/esm/uc/utils/ucifcoIsForArray.d.ts +0 -8
  194. package/dist/esm/uc/utils/ucifcoIsForArray.js +0 -13
  195. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  196. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.js +0 -18
  197. package/dist/esm/utils/http/toFormData.d.ts +0 -3
  198. package/dist/esm/utils/http/toFormData.js +0 -4
  199. package/dist/esm/utils/http/toJSON.d.ts +0 -3
  200. package/dist/esm/utils/http/toJSON.js +0 -3
  201. package/dist/esm/utils/http/toQueryParams.d.ts +0 -2
  202. package/dist/esm/utils/http/toQueryParams.js +0 -4
  203. package/dist/esm/utils/ioc/ContainerPrinter.d.ts +0 -15
  204. package/dist/esm/utils/ioc/ContainerPrinter.js +0 -58
  205. package/dist/esm/utils/ioc/bindProvider.d.ts +0 -2
  206. package/dist/esm/utils/ioc/bindProvider.js +0 -9
  207. /package/dist/esm/{products/Helper/cli-node-core/index.d.ts → dt/targets/json-schema.js} +0 -0
  208. /package/dist/esm/{products/Helper/index.d.ts → target/lib/openapi/types.js} +0 -0
@@ -1,11 +1,16 @@
1
+ import type { Configurable, SettingsManager } from '../../std/index.js';
1
2
  import type { UCData } from '../data.js';
2
- import type { UCDataStore, UCDataStoreReadOpts, UCDataStoreReadResponse, UCDataStoreRecord, UCDataStoreTx, UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
3
+ import { type UCDataStore, type UCDataStoreReadOpts, type UCDataStoreReadResponse, type UCDataStoreRecord, type UCDataStoreTx, type UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
3
4
  import type { UCInput } from '../input.js';
5
+ import type { UCSettings } from '../settings.js';
4
6
  type TxState = 'committed' | 'pending' | 'rollbacked';
5
- export declare class InMemoryUCDataStore implements UCDataStore {
7
+ type S = Pick<UCSettings, 'uc_data_store_mode'>;
8
+ export declare class InMemoryUCDataStore implements Configurable<S>, UCDataStore {
9
+ protected settingsManager: SettingsManager<S>;
6
10
  entries: UCDataStoreRecord<any, any>[];
7
11
  tx: TxState | undefined;
8
- constructor();
12
+ constructor(settingsManager: SettingsManager<S>);
13
+ s(): S;
9
14
  clear(): Promise<void>;
10
15
  destroy(): Promise<void>;
11
16
  exists(): Promise<boolean>;
@@ -7,8 +7,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { injectable } from 'inversify';
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { inject, injectable } from 'inversify';
11
14
  import { NotImplementedError } from '../../error/index.js';
15
+ import { assertCan, } from '../data-store.js';
12
16
  function predicate(key, filter) {
13
17
  if (filter === null) {
14
18
  return (r) => r[key] === null;
@@ -19,12 +23,19 @@ function predicate(key, filter) {
19
23
  return (r) => r[key] === filter;
20
24
  }
21
25
  let InMemoryUCDataStore = class InMemoryUCDataStore {
26
+ settingsManager;
22
27
  // biome-ignore lint/suspicious/noExplicitAny: can be anything
23
28
  entries;
24
29
  tx;
25
- constructor() {
30
+ constructor(settingsManager) {
31
+ this.settingsManager = settingsManager;
26
32
  this.entries = [];
27
33
  }
34
+ s() {
35
+ return {
36
+ uc_data_store_mode: this.settingsManager.get()('uc_data_store_mode'),
37
+ };
38
+ }
28
39
  async clear() {
29
40
  this.entries = [];
30
41
  }
@@ -41,6 +52,7 @@ let InMemoryUCDataStore = class InMemoryUCDataStore {
41
52
  // Nothing to do
42
53
  }
43
54
  async read(opts) {
55
+ assertCan('read', this.s().uc_data_store_mode);
44
56
  let items = this
45
57
  .entries;
46
58
  // Filter
@@ -70,6 +82,7 @@ let InMemoryUCDataStore = class InMemoryUCDataStore {
70
82
  };
71
83
  }
72
84
  async readProjection() {
85
+ assertCan('read', this.s().uc_data_store_mode);
73
86
  return [];
74
87
  }
75
88
  async startTx() {
@@ -94,14 +107,17 @@ let InMemoryUCDataStore = class InMemoryUCDataStore {
94
107
  this.writeBulk([record]);
95
108
  }
96
109
  async writeBulk(records) {
110
+ assertCan('write', this.s().uc_data_store_mode);
97
111
  this.entries.push(...records);
98
112
  }
99
113
  async writeProjection() {
114
+ assertCan('write', this.s().uc_data_store_mode);
100
115
  throw new NotImplementedError('writeProjection');
101
116
  }
102
117
  };
103
118
  InMemoryUCDataStore = __decorate([
104
119
  injectable(),
105
- __metadata("design:paramtypes", [])
120
+ __param(0, inject('SettingsManager')),
121
+ __metadata("design:paramtypes", [Object])
106
122
  ], InMemoryUCDataStore);
107
123
  export { InMemoryUCDataStore };
@@ -2,7 +2,7 @@ import { type Knex } from 'knex';
2
2
  import type { FilePath, UIntQuantity } from '../../dt/index.js';
3
3
  import type { Configurable, Settings, SettingsManager } from '../../std/index.js';
4
4
  import type { UCData } from '../data.js';
5
- import type { UCDataStore, UCDataStoreReadOpts, UCDataStoreReadProjectionOpts, UCDataStoreReadResponse, UCDataStoreRecord, UCDataStoreTx, UCDataStoreWriteOpts, UCDataStoreWriteProjectionOpts, UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
5
+ import { type UCDataStore, type UCDataStoreReadOpts, type UCDataStoreReadProjectionOpts, type UCDataStoreReadResponse, type UCDataStoreRecord, type UCDataStoreTx, type UCDataStoreWriteOpts, type UCDataStoreWriteProjectionOpts, type UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
6
6
  import type { UCInput } from '../input.js';
7
7
  import type { UCSettings } from '../settings.js';
8
8
  /**
@@ -16,7 +16,7 @@ export interface KnexUCDataStoreSettings extends Settings {
16
16
  knex_uc_data_store_pool_min: UIntQuantity;
17
17
  knex_uc_data_store_type: 'pg' | 'sqlite3';
18
18
  }
19
- type S = KnexUCDataStoreSettings & Pick<UCSettings, 'uc_data_store_ucs_dataset_name'>;
19
+ type S = KnexUCDataStoreSettings & Pick<UCSettings, 'uc_data_store_mode' | 'uc_data_store_ucs_dataset_name'>;
20
20
  export declare class KnexUCDataStore implements Configurable<S>, UCDataStore {
21
21
  protected settingsManager: SettingsManager<S>;
22
22
  protected config: Knex.Config;
@@ -13,6 +13,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  import { inject, injectable } from 'inversify';
14
14
  import knex, {} from 'knex';
15
15
  import { NotAvailableError, NotCallableError } from '../../error/index.js';
16
+ import { assertCan, } from '../data-store.js';
16
17
  const FILTERS_MAPPING = new Map([
17
18
  ['aggregateId', 'aggregate_id'],
18
19
  ['appName', 'app_name'],
@@ -37,6 +38,7 @@ let KnexUCDataStore = class KnexUCDataStore {
37
38
  knex_uc_data_store_pool_max: this.settingsManager.get()('knex_uc_data_store_pool_max'),
38
39
  knex_uc_data_store_pool_min: this.settingsManager.get()('knex_uc_data_store_pool_min'),
39
40
  knex_uc_data_store_type: this.settingsManager.get()('knex_uc_data_store_type'),
41
+ uc_data_store_mode: this.settingsManager.get()('uc_data_store_mode'),
40
42
  uc_data_store_ucs_dataset_name: this.settingsManager.get()('uc_data_store_ucs_dataset_name'),
41
43
  };
42
44
  }
@@ -58,6 +60,7 @@ let KnexUCDataStore = class KnexUCDataStore {
58
60
  throw new NotCallableError('initSync', 'init', 'async-only');
59
61
  }
60
62
  async read(opts) {
63
+ assertCan('read', this.s().uc_data_store_mode);
61
64
  const query = this.client(this.s().uc_data_store_ucs_dataset_name);
62
65
  // Filter
63
66
  if (opts?.filters) {
@@ -87,6 +90,7 @@ let KnexUCDataStore = class KnexUCDataStore {
87
90
  };
88
91
  }
89
92
  async readProjection(name, opts) {
93
+ assertCan('read', this.s().uc_data_store_mode);
90
94
  const query = this.client(name);
91
95
  // Sort
92
96
  if (opts?.orderBy) {
@@ -123,6 +127,7 @@ let KnexUCDataStore = class KnexUCDataStore {
123
127
  await this.writeBulk([record], opts);
124
128
  }
125
129
  async writeBulk(records, opts) {
130
+ assertCan('write', this.s().uc_data_store_mode);
126
131
  const query = this.client(this.s().uc_data_store_ucs_dataset_name).insert(records.map((r) => this.mapRecordToRow(r)));
127
132
  if (opts?.tx) {
128
133
  query.transacting(opts.tx.ref);
@@ -130,6 +135,7 @@ let KnexUCDataStore = class KnexUCDataStore {
130
135
  await query;
131
136
  }
132
137
  async writeProjection(name, data, opts) {
138
+ assertCan('write', this.s().uc_data_store_mode);
133
139
  const dataToInsert = {};
134
140
  for (const [k, v] of Object.entries(data)) {
135
141
  const specificBinding = opts?.specificBindings?.[k];
@@ -183,8 +189,10 @@ let KnexUCDataStore = class KnexUCDataStore {
183
189
  return;
184
190
  }
185
191
  Array.isArray(value)
186
- ? query.whereIn(col, value)
187
- : query.where(col, value);
192
+ ? // @ts-expect-error : https://github.com/knex/knex/pull/6428
193
+ query.whereIn(col, value)
194
+ : // @ts-expect-error : https://github.com/knex/knex/pull/6428
195
+ query.where(col, value);
188
196
  }
189
197
  mapRecordToRow(record) {
190
198
  return {
@@ -1,4 +1,4 @@
1
- import { type Provider } from 'inversify';
1
+ import { type Factory } from 'inversify';
2
2
  import type { ClockManager, CryptoManager, Logger } from '../../std/index.js';
3
3
  import type { UCClientConfirmManager } from '../client.js';
4
4
  import type { UCData } from '../data.js';
@@ -23,10 +23,10 @@ export declare class SimpleUCManager implements UCManager {
23
23
  private ucExecChecker;
24
24
  private ucInputFilesProcessor;
25
25
  private ucInputValidator;
26
- private ucInitProvider;
27
- private ucMainProvider;
26
+ private ucInitFactory;
27
+ private ucMainFactory;
28
28
  private tx?;
29
- constructor(ucClientConfirmManager: UCClientConfirmManager, clockManager: ClockManager, cryptoManager: CryptoManager, logger: Logger, ucDataStore: UCDataStore, ucExecChecker: UCExecChecker, ucInputFilesProcessor: UCInputFilesProcessor, ucInputValidator: UCInputValidator, ucInitProvider: Provider<UCInit>, ucMainProvider: Provider<UCMain>);
29
+ constructor(ucClientConfirmManager: UCClientConfirmManager, clockManager: ClockManager, cryptoManager: CryptoManager, logger: Logger, ucDataStore: UCDataStore, ucExecChecker: UCExecChecker, ucInputFilesProcessor: UCInputFilesProcessor, ucInputValidator: UCInputValidator, ucInitFactory: Factory<UCInit>, ucMainFactory: Factory<UCMain>);
30
30
  commitTx(): Promise<void>;
31
31
  confirmClient<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(uc: UC<I, OPI0, OPI1>): Promise<boolean>;
32
32
  execClient<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(uc: UC<I, OPI0, OPI1>, opts?: UCManagerExecClientOpts<I, OPI0, OPI1>): Promise<UCOutputReader<I, OPI0, OPI1>>;
@@ -27,11 +27,11 @@ let SimpleUCManager = class SimpleUCManager {
27
27
  ucExecChecker;
28
28
  ucInputFilesProcessor;
29
29
  ucInputValidator;
30
- ucInitProvider;
31
- ucMainProvider;
30
+ ucInitFactory;
31
+ ucMainFactory;
32
32
  // WARNING : This property makes this class "thread unsafe". Be careful how you inject it into your components.
33
33
  tx;
34
- constructor(ucClientConfirmManager, clockManager, cryptoManager, logger, ucDataStore, ucExecChecker, ucInputFilesProcessor, ucInputValidator, ucInitProvider, ucMainProvider) {
34
+ constructor(ucClientConfirmManager, clockManager, cryptoManager, logger, ucDataStore, ucExecChecker, ucInputFilesProcessor, ucInputValidator, ucInitFactory, ucMainFactory) {
35
35
  this.ucClientConfirmManager = ucClientConfirmManager;
36
36
  this.clockManager = clockManager;
37
37
  this.cryptoManager = cryptoManager;
@@ -40,8 +40,8 @@ let SimpleUCManager = class SimpleUCManager {
40
40
  this.ucExecChecker = ucExecChecker;
41
41
  this.ucInputFilesProcessor = ucInputFilesProcessor;
42
42
  this.ucInputValidator = ucInputValidator;
43
- this.ucInitProvider = ucInitProvider;
44
- this.ucMainProvider = ucMainProvider;
43
+ this.ucInitFactory = ucInitFactory;
44
+ this.ucMainFactory = ucMainFactory;
45
45
  this.tx = undefined;
46
46
  }
47
47
  async commitTx() {
@@ -80,7 +80,7 @@ let SimpleUCManager = class SimpleUCManager {
80
80
  if (server === undefined) {
81
81
  await this.ucInputFilesProcessor.exec({ uc });
82
82
  }
83
- const main = (await this.ucMainProvider(client.main));
83
+ const main = (await this.ucMainFactory(client.main));
84
84
  const streamOpts = opts?.stream;
85
85
  const output = await main.exec({
86
86
  opts: {
@@ -113,7 +113,7 @@ let SimpleUCManager = class SimpleUCManager {
113
113
  }
114
114
  this.ucInputValidator.exec({ uc });
115
115
  await this.ucInputFilesProcessor.exec({ uc });
116
- const main = (await this.ucMainProvider(server.main));
116
+ const main = (await this.ucMainFactory(server.main));
117
117
  const output = main.exec({
118
118
  opts: {
119
119
  stream: opts?.stream,
@@ -132,7 +132,7 @@ let SimpleUCManager = class SimpleUCManager {
132
132
  return;
133
133
  }
134
134
  this.logger.info('Initializing ucd', { name: metadata.name });
135
- const init = (await this.ucInitProvider(server.init));
135
+ const init = (await this.ucInitFactory(server.init));
136
136
  await init.exec();
137
137
  }
138
138
  async startTx() {
@@ -179,8 +179,8 @@ SimpleUCManager = __decorate([
179
179
  __param(5, inject(UCExecChecker)),
180
180
  __param(6, inject(UCInputFilesProcessor)),
181
181
  __param(7, inject(UCInputValidator)),
182
- __param(8, inject('Provider<UCInit>')),
183
- __param(9, inject('Provider<UCMain>')),
182
+ __param(8, inject('Factory<UCInit>')),
183
+ __param(9, inject('Factory<UCMain>')),
184
184
  __metadata("design:paramtypes", [Object, Object, Object, Object, Object, UCExecChecker,
185
185
  UCInputFilesProcessor,
186
186
  UCInputValidator, Function, Function])
@@ -1,4 +1,5 @@
1
1
  import type { AppName } from '../app/index.js';
2
+ import { UC_INPUT_SUFFIX, UC_OPI0_SUFFIX, UC_OPI1_SUFFIX } from '../convention.js';
2
3
  import type { IconCode } from '../icon/index.js';
3
4
  /**
4
5
  * The type of action the use case performs
@@ -14,6 +15,9 @@ export type FQUCNameSeparator = '_';
14
15
  * It's made with the {@link AppName} and the {@link UCName} linked by {@link FQUCNameSeparator}.
15
16
  */
16
17
  export type FQUCName = `${AppName}${FQUCNameSeparator}${UCName}`;
18
+ export type FQUCInputName = `${FQUCName}${typeof UC_INPUT_SUFFIX}`;
19
+ export type FQUCOPI0Name = `${FQUCName}${typeof UC_OPI0_SUFFIX}`;
20
+ export type FQUCOPI1Name = `${FQUCName}${typeof UC_OPI1_SUFFIX}`;
17
21
  export interface UCMetadata {
18
22
  action: UCAction;
19
23
  beta?: boolean;
@@ -24,4 +28,7 @@ export interface UCMetadata {
24
28
  }
25
29
  export declare const FQ_UC_NAME_SEPARATOR: FQUCNameSeparator;
26
30
  export declare function formatFQUCName(appName: AppName, ucName: UCName): FQUCName;
31
+ export declare function formatFQUCInputName(fqUCName: FQUCName): FQUCInputName;
32
+ export declare function formatFQUCOPI0Name(fqUCName: FQUCName): FQUCOPI0Name;
33
+ export declare function formatFQUCOPI1Name(fqUCName: FQUCName): FQUCOPI1Name;
27
34
  export declare function parseFQUCName(value: string): [AppName, UCName];
@@ -1,9 +1,19 @@
1
+ import { UC_INPUT_SUFFIX, UC_OPI0_SUFFIX, UC_OPI1_SUFFIX, } from '../convention.js';
1
2
  import { isCapitalized } from '../utils/index.js';
2
3
  const ERR_INVALID_FQ_UC_NAME = (value) => `Invalid fully qualified use case name : ${value}`;
3
4
  export const FQ_UC_NAME_SEPARATOR = '_';
4
5
  export function formatFQUCName(appName, ucName) {
5
6
  return [appName, ucName].join(FQ_UC_NAME_SEPARATOR);
6
7
  }
8
+ export function formatFQUCInputName(fqUCName) {
9
+ return `${fqUCName}${UC_INPUT_SUFFIX}`;
10
+ }
11
+ export function formatFQUCOPI0Name(fqUCName) {
12
+ return `${fqUCName}${UC_OPI0_SUFFIX}`;
13
+ }
14
+ export function formatFQUCOPI1Name(fqUCName) {
15
+ return `${fqUCName}${UC_OPI1_SUFFIX}`;
16
+ }
7
17
  export function parseFQUCName(value) {
8
18
  const elements = value.split(FQ_UC_NAME_SEPARATOR);
9
19
  if (elements.length !== 2) {
@@ -15,3 +15,4 @@ export interface UCOutputFieldDef<OPI extends UCOPIBase, T extends DataType> {
15
15
  totalType?: 'sum';
16
16
  type: TBase<T>;
17
17
  }
18
+ export declare function ucofExamples<OPI extends UCOPIBase, T extends DataType>(def: UCOutputFieldDef<OPI, T>): T[] | undefined;
@@ -1 +1,13 @@
1
- export {};
1
+ export function ucofExamples(def) {
2
+ const { type } = def;
3
+ const examples = type.getExamples();
4
+ // Leaving the value `undefined` means you want the default value
5
+ if (examples === undefined) {
6
+ return [type.example()];
7
+ }
8
+ // Setting the examples to `[]` means you don't want them
9
+ if (examples.length === 0) {
10
+ return undefined;
11
+ }
12
+ return examples;
13
+ }
@@ -1,4 +1,5 @@
1
1
  export const UC_DEFAULT_SETTINGS = {
2
+ uc_data_store_mode: 'READ_WRITE',
2
3
  uc_data_store_ucs_dataset_name: 'uc_executions',
3
4
  uc_disabled_use_cases: [],
4
5
  uc_file_ref_prefix: '$ref:',
@@ -1,9 +1,15 @@
1
1
  import type { FilePath } from '../dt/index.js';
2
2
  import type { Settings } from '../std/index.js';
3
- import type { UCDataStoreDatasetName } from './data-store.js';
3
+ import type { UCDataStoreDatasetName, UCDataStoreMode } from './data-store.js';
4
4
  import type { UCFileInputFieldRefPrefix } from './file.js';
5
5
  import type { UCName } from './metadata.js';
6
6
  export interface UCSettings extends Settings {
7
+ /**
8
+ * The mode of the data store.
9
+ *
10
+ * @default UC_DEFAULT_SETTINGS.uc_data_store_mode
11
+ */
12
+ uc_data_store_mode: UCDataStoreMode;
7
13
  /**
8
14
  * The name of the collection/table storing the persisted use cases in the data store
9
15
  *
@@ -22,6 +28,7 @@ export interface UCSettings extends Settings {
22
28
  uc_disabled_use_cases: UCName[];
23
29
  /**
24
30
  * The prefix of the file path when the use case has been processed, before storing
31
+ *
25
32
  * @default UC_DEFAULT_SETTINGS.uc_file_ref_prefix
26
33
  */
27
34
  uc_file_ref_prefix: UCFileInputFieldRefPrefix;
@@ -7,7 +7,7 @@ const ACTION_HTTP_METHOD_MAPPING = {
7
7
  Update: 'PUT',
8
8
  View: 'GET',
9
9
  };
10
- const METHODS_WITH_NO_BODY = ['GET', 'HEAD'];
10
+ const METHODS_WITH_NO_BODY = ['DELETE', 'GET', 'HEAD'];
11
11
  export function ucHTTPContract(uc, pathPrefix = '/api/v1') {
12
12
  const { ext, metadata } = uc.def;
13
13
  const { action } = metadata;
@@ -1,4 +1,4 @@
1
- import { type Provider } from 'inversify';
1
+ import { type Factory } from 'inversify';
2
2
  import type { ProductManifest } from '../../product/index.js';
3
3
  import type { Configurable, SettingsManager, Worker } from '../../std/index.js';
4
4
  import type { UCDefLifecycle } from '../def.js';
@@ -16,8 +16,8 @@ type S = Pick<UCSettings, 'uc_disabled_use_cases'>;
16
16
  export declare class UCExecChecker implements Configurable<S>, Worker<Input, Promise<Output>> {
17
17
  private productManifest;
18
18
  private settingsManager;
19
- private ucPolicyProvider;
20
- constructor(productManifest: ProductManifest, settingsManager: SettingsManager<S>, ucPolicyProvider: Provider<UCPolicy>);
19
+ private ucPolicyFactory;
20
+ constructor(productManifest: ProductManifest, settingsManager: SettingsManager<S>, ucPolicyFactory: Factory<UCPolicy>);
21
21
  s(): S;
22
22
  exec<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ lifecycle, uc }: Input<I, OPI0, OPI1>): Promise<Output>;
23
23
  }
@@ -14,11 +14,11 @@ import { inject, injectable } from 'inversify';
14
14
  let UCExecChecker = class UCExecChecker {
15
15
  productManifest;
16
16
  settingsManager;
17
- ucPolicyProvider;
18
- constructor(productManifest, settingsManager, ucPolicyProvider) {
17
+ ucPolicyFactory;
18
+ constructor(productManifest, settingsManager, ucPolicyFactory) {
19
19
  this.productManifest = productManifest;
20
20
  this.settingsManager = settingsManager;
21
- this.ucPolicyProvider = ucPolicyProvider;
21
+ this.ucPolicyFactory = ucPolicyFactory;
22
22
  }
23
23
  s() {
24
24
  return {
@@ -47,7 +47,7 @@ let UCExecChecker = class UCExecChecker {
47
47
  const ucds = app.ucds?.exclude ?? [];
48
48
  output.allowed = !ucds.includes(metadata.name);
49
49
  if (output.allowed) {
50
- const policy = (await this.ucPolicyProvider(client.policy));
50
+ const policy = (await this.ucPolicyFactory(client.policy));
51
51
  const { allowed } = await policy.exec({ uc });
52
52
  output.allowed = allowed;
53
53
  }
@@ -68,7 +68,7 @@ UCExecChecker = __decorate([
68
68
  injectable(),
69
69
  __param(0, inject('ProductManifest')),
70
70
  __param(1, inject('SettingsManager')),
71
- __param(2, inject('Provider<UCPolicy>')),
71
+ __param(2, inject('Factory<UCPolicy>')),
72
72
  __metadata("design:paramtypes", [Object, Object, Function])
73
73
  ], UCExecChecker);
74
74
  export { UCExecChecker };
@@ -1,2 +1,7 @@
1
+ import type { URL } from '../../dt/index.js';
2
+ export type HTTPCSPType = 'defaultSrc' | 'imgSrc' | 'scriptSrc';
3
+ export type HTTPCSPValue = URL[];
4
+ export type HTTPCookieSameSite = 'lax' | 'none' | 'strict';
1
5
  export type HTTPDataEnvelope = 'form-data' | 'json' | 'query-params';
2
6
  export type HTTPReqData = Record<string, unknown>;
7
+ export type HTTPHeaderName = 'Accept' | 'Authorization' | 'Content-Type' | 'Cookie' | 'Origin' | 'X-Requested-With' | (string & {});
@@ -11,8 +11,8 @@ export { fromQueryParams, toQueryParams } from './http/query-params.js';
11
11
  export { SSEStreamManager } from './http/SSEStreamManager.js';
12
12
  export { fmtSingleDataMsg, fmtSSEError, isSSEError, parseDataLine, SSE_HEADERS, } from './http/sse.js';
13
13
  export { isClientError, isError, isServerError } from './http/status.js';
14
- export type { HTTPDataEnvelope, HTTPReqData } from './http/types.js';
15
- export { bindProvider } from './ioc/bindProvider.js';
14
+ export type { HTTPCookieSameSite, HTTPCSPType, HTTPCSPValue, HTTPDataEnvelope, HTTPHeaderName, HTTPReqData, } from './http/types.js';
15
+ export { bindFactory } from './ioc/bindFactory.js';
16
16
  export { CONTAINER_OPTS } from './ioc/container.js';
17
17
  export type { Class } from './ioc/types.js';
18
18
  export { fmt as fmtNumber } from './numbers/fmt.js';
@@ -7,7 +7,7 @@ export { fromQueryParams, toQueryParams } from './http/query-params.js';
7
7
  export { SSEStreamManager } from './http/SSEStreamManager.js';
8
8
  export { fmtSingleDataMsg, fmtSSEError, isSSEError, parseDataLine, SSE_HEADERS, } from './http/sse.js';
9
9
  export { isClientError, isError, isServerError } from './http/status.js';
10
- export { bindProvider } from './ioc/bindProvider.js';
10
+ export { bindFactory } from './ioc/bindFactory.js';
11
11
  export { CONTAINER_OPTS } from './ioc/container.js';
12
12
  export { fmt as fmtNumber } from './numbers/fmt.js';
13
13
  export { baseFromSquareUnit, isSquareUnit, } from './numbers/units.js';
@@ -16,7 +16,7 @@ import { InMemoryUCDataStore } from '../../uc/impl/InMemoryUCDataStore.js';
16
16
  import { SimpleUCManager } from '../../uc/impl/SimpleUCManager.js';
17
17
  import { StaticUCClientConfirmManager } from '../../uc/impl/StaticUCClientConfirmManager.js';
18
18
  import { UC_DEFAULT_SETTINGS, } from '../../uc/index.js';
19
- import { bindProvider } from './bindProvider.js';
19
+ import { bindFactory } from './bindFactory.js';
20
20
  export function bindCommon(container) {
21
21
  // settings
22
22
  container.bind('Settings').toConstantValue({
@@ -55,9 +55,9 @@ export function bindCommon(container) {
55
55
  .to(SettingsServerClientManager);
56
56
  container.bind('XMLManager').to(NoopXMLManager);
57
57
  // uc
58
- bindProvider(container, 'UCInit');
59
- bindProvider(container, 'UCMain');
60
- bindProvider(container, 'UCPolicy');
58
+ bindFactory(container, 'UCInit');
59
+ bindFactory(container, 'UCMain');
60
+ bindFactory(container, 'UCPolicy');
61
61
  container
62
62
  .bind('UCClientConfirmManager')
63
63
  .to(StaticUCClientConfirmManager);
@@ -0,0 +1,2 @@
1
+ import type { Container } from 'inversify';
2
+ export declare function bindFactory<T>(container: Container, identifier: string): void;
@@ -0,0 +1,9 @@
1
+ export function bindFactory(container, identifier) {
2
+ container
3
+ .bind(`Factory<${identifier}>`)
4
+ .toFactory((context) => {
5
+ return async (clazz) => {
6
+ return context.get(clazz);
7
+ };
8
+ });
9
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "libmodulor",
3
3
  "description": "A TypeScript library to create platform-agnostic applications",
4
- "version": "0.27.0",
4
+ "version": "0.29.0",
5
5
  "license": "LGPL-3.0",
6
6
  "author": "Chafik H'nini <chafik.hnini@gmail.com>",
7
7
  "homepage": "https://libmodulor.c100k.eu",
@@ -97,40 +97,41 @@
97
97
  "test": "tsc && vitest run"
98
98
  },
99
99
  "devDependencies": {
100
- "@biomejs/biome": "^2.3.14",
100
+ "@biomejs/biome": "^2.4.14",
101
101
  "@react-native-community/slider": "^4.5.7",
102
- "@types/react": "^19.2.11",
102
+ "@types/react": "^19.2.14",
103
103
  "@types/react-dom": "^19.2.3",
104
104
  "babel-plugin-parameter-decorator": "^1.0.16",
105
105
  "babel-plugin-transform-typescript-metadata": "^0.3.2",
106
- "expo": "55.0.0-preview.9",
106
+ "expo": "55.0.11",
107
107
  "expo-document-picker": "~14.0.8",
108
- "expo-image-picker": "^17.0.10",
109
- "wrangler": "^4.62.0"
108
+ "expo-image-picker": "^17.0.11",
109
+ "react-native-safe-area-context": "^5.7.0",
110
+ "wrangler": "^4.90.0"
110
111
  },
111
112
  "peerDependencies": {
112
- "@hono/node-server": "^1.19.9",
113
- "@modelcontextprotocol/sdk": "^1.25.3",
114
- "@stricli/core": "^1.2.5",
113
+ "@hono/node-server": "^1.19.14",
114
+ "@modelcontextprotocol/sdk": "^1.29.0",
115
+ "@stricli/core": "^1.2.6",
115
116
  "buffer": "^6.0.3",
116
117
  "cookie-parser": "^1.4.7",
117
118
  "express": "^5.2.1",
118
119
  "express-fileupload": "^1.5.2",
119
- "fast-check": "^4.5.3",
120
+ "fast-check": "^4.7.0",
120
121
  "helmet": "^8.1.0",
121
- "hono": "^4.11.7",
122
+ "hono": "^4.12.18",
122
123
  "inversify": "^7.11.0",
123
- "jose": "^6.1.3",
124
- "knex": "^3.1.0",
125
- "next": "^15.5.12",
126
- "pg": "^8.18.0",
127
- "react": "^19.2.4",
128
- "react-dom": "^19.2.4",
129
- "react-native": "^0.83.1",
124
+ "jose": "^6.2.3",
125
+ "knex": "^3.2.10",
126
+ "next": "^15.5.18",
127
+ "pg": "^8.20.0",
128
+ "react": "19.2.3",
129
+ "react-dom": "19.2.3",
130
+ "react-native": "^0.84.1",
130
131
  "reflect-metadata": "^0.2.2",
131
132
  "sqlite3": "^5.1.7",
132
- "typescript": "^5.9.3",
133
- "vite": "^6.4.1",
133
+ "typescript": "^6.0.3",
134
+ "vite": "^6.4.2",
134
135
  "vitest": "^3.2.4"
135
136
  },
136
137
  "peerDependenciesMeta": {
@@ -1,6 +0,0 @@
1
- import { type DirPath } from '../../../../dt/index.js';
2
- import type { UCInput, UCInputDef, UCInputFieldValue } from '../../../../uc/index.js';
3
- export interface AppInput extends UCInput {
4
- appsPath: UCInputFieldValue<DirPath>;
5
- }
6
- export declare const AppInputFieldsDef: UCInputDef<AppInput>['fields'];
@@ -1,12 +0,0 @@
1
- import { APPS_ROOT_PATH } from '../../../../convention.js';
2
- import { TDirPath } from '../../../../dt/index.js';
3
- export const AppInputFieldsDef = {
4
- appsPath: {
5
- cardinality: {
6
- min: 0,
7
- },
8
- type: new TDirPath()
9
- .setDefaultValue(APPS_ROOT_PATH.join('/'))
10
- .setExamples([APPS_ROOT_PATH.join('/')]),
11
- },
12
- };
@@ -1,3 +0,0 @@
1
- import type { FileName, Slug } from '../../../../dt/index.js';
2
- export declare const PACKAGE_JSON: (name: Slug) => string;
3
- export declare function projectFiles(name: Slug): Map<FileName, string>;