@stamhoofd/build-development-env 2.86.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 (166) hide show
  1. package/LICENSE +665 -0
  2. package/README.md +3 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +5 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/Service.d.ts +6 -0
  8. package/dist/src/Service.d.ts.map +1 -0
  9. package/dist/src/Service.js +3 -0
  10. package/dist/src/Service.js.map +1 -0
  11. package/dist/src/build.d.ts +9 -0
  12. package/dist/src/build.d.ts.map +1 -0
  13. package/dist/src/build.js +128 -0
  14. package/dist/src/build.js.map +1 -0
  15. package/dist/src/buildPresets.d.ts +8 -0
  16. package/dist/src/buildPresets.d.ts.map +1 -0
  17. package/dist/src/buildPresets.js +100 -0
  18. package/dist/src/buildPresets.js.map +1 -0
  19. package/dist/src/helpers/1password.d.ts +8 -0
  20. package/dist/src/helpers/1password.d.ts.map +1 -0
  21. package/dist/src/helpers/1password.js +33 -0
  22. package/dist/src/helpers/1password.js.map +1 -0
  23. package/dist/src/helpers/cache.d.ts +9 -0
  24. package/dist/src/helpers/cache.d.ts.map +1 -0
  25. package/dist/src/helpers/cache.js +144 -0
  26. package/dist/src/helpers/cache.js.map +1 -0
  27. package/dist/src/helpers/project-path.d.ts +5 -0
  28. package/dist/src/helpers/project-path.d.ts.map +1 -0
  29. package/dist/src/helpers/project-path.js +35 -0
  30. package/dist/src/helpers/project-path.js.map +1 -0
  31. package/dist/src/init.d.ts +2 -0
  32. package/dist/src/init.d.ts.map +1 -0
  33. package/dist/src/init.js +41 -0
  34. package/dist/src/init.js.map +1 -0
  35. package/dist/src/presets/internal.d.ts +5 -0
  36. package/dist/src/presets/internal.d.ts.map +1 -0
  37. package/dist/src/presets/internal.js +38 -0
  38. package/dist/src/presets/internal.js.map +1 -0
  39. package/dist/src/presets/keeo.d.ts +3 -0
  40. package/dist/src/presets/keeo.d.ts.map +1 -0
  41. package/dist/src/presets/keeo.js +36 -0
  42. package/dist/src/presets/keeo.js.map +1 -0
  43. package/dist/src/presets/platform.d.ts +2 -0
  44. package/dist/src/presets/platform.d.ts.map +1 -0
  45. package/dist/src/presets/platform.js +10 -0
  46. package/dist/src/presets/platform.js.map +1 -0
  47. package/dist/src/presets/ports-primary.d.ts +3 -0
  48. package/dist/src/presets/ports-primary.d.ts.map +1 -0
  49. package/dist/src/presets/ports-primary.js +53 -0
  50. package/dist/src/presets/ports-primary.js.map +1 -0
  51. package/dist/src/presets/ports-secundary.d.ts +3 -0
  52. package/dist/src/presets/ports-secundary.d.ts.map +1 -0
  53. package/dist/src/presets/ports-secundary.js +16 -0
  54. package/dist/src/presets/ports-secundary.js.map +1 -0
  55. package/dist/src/presets/ravot.d.ts +3 -0
  56. package/dist/src/presets/ravot.d.ts.map +1 -0
  57. package/dist/src/presets/ravot.js +35 -0
  58. package/dist/src/presets/ravot.js.map +1 -0
  59. package/dist/src/presets/services/caddy.d.ts +3 -0
  60. package/dist/src/presets/services/caddy.d.ts.map +1 -0
  61. package/dist/src/presets/services/caddy.js +253 -0
  62. package/dist/src/presets/services/caddy.js.map +1 -0
  63. package/dist/src/presets/services/coredns.d.ts +3 -0
  64. package/dist/src/presets/services/coredns.d.ts.map +1 -0
  65. package/dist/src/presets/services/coredns.js +13 -0
  66. package/dist/src/presets/services/coredns.js.map +1 -0
  67. package/dist/src/presets/services/frontend-type-checking.d.ts +3 -0
  68. package/dist/src/presets/services/frontend-type-checking.d.ts.map +1 -0
  69. package/dist/src/presets/services/frontend-type-checking.js +13 -0
  70. package/dist/src/presets/services/frontend-type-checking.js.map +1 -0
  71. package/dist/src/presets/services/maildev.d.ts +5 -0
  72. package/dist/src/presets/services/maildev.d.ts.map +1 -0
  73. package/dist/src/presets/services/maildev.js +28 -0
  74. package/dist/src/presets/services/maildev.js.map +1 -0
  75. package/dist/src/presets/services/stripe.d.ts +11 -0
  76. package/dist/src/presets/services/stripe.d.ts.map +1 -0
  77. package/dist/src/presets/services/stripe.js +51 -0
  78. package/dist/src/presets/services/stripe.js.map +1 -0
  79. package/dist/src/presets/stamhoofd.d.ts +3 -0
  80. package/dist/src/presets/stamhoofd.d.ts.map +1 -0
  81. package/dist/src/presets/stamhoofd.js +43 -0
  82. package/dist/src/presets/stamhoofd.js.map +1 -0
  83. package/dist/tsconfig.tsbuildinfo +1 -0
  84. package/esm/dist/index.d.ts +2 -0
  85. package/esm/dist/index.d.ts.map +1 -0
  86. package/esm/dist/index.js +2 -0
  87. package/esm/dist/index.js.map +1 -0
  88. package/esm/dist/src/Service.d.ts +6 -0
  89. package/esm/dist/src/Service.d.ts.map +1 -0
  90. package/esm/dist/src/Service.js +2 -0
  91. package/esm/dist/src/Service.js.map +1 -0
  92. package/esm/dist/src/build.d.ts +9 -0
  93. package/esm/dist/src/build.d.ts.map +1 -0
  94. package/esm/dist/src/build.js +122 -0
  95. package/esm/dist/src/build.js.map +1 -0
  96. package/esm/dist/src/buildPresets.d.ts +8 -0
  97. package/esm/dist/src/buildPresets.d.ts.map +1 -0
  98. package/esm/dist/src/buildPresets.js +74 -0
  99. package/esm/dist/src/buildPresets.js.map +1 -0
  100. package/esm/dist/src/helpers/1password.d.ts +8 -0
  101. package/esm/dist/src/helpers/1password.d.ts.map +1 -0
  102. package/esm/dist/src/helpers/1password.js +28 -0
  103. package/esm/dist/src/helpers/1password.js.map +1 -0
  104. package/esm/dist/src/helpers/cache.d.ts +9 -0
  105. package/esm/dist/src/helpers/cache.d.ts.map +1 -0
  106. package/esm/dist/src/helpers/cache.js +139 -0
  107. package/esm/dist/src/helpers/cache.js.map +1 -0
  108. package/esm/dist/src/helpers/project-path.d.ts +5 -0
  109. package/esm/dist/src/helpers/project-path.d.ts.map +1 -0
  110. package/esm/dist/src/helpers/project-path.js +31 -0
  111. package/esm/dist/src/helpers/project-path.js.map +1 -0
  112. package/esm/dist/src/init.d.ts +2 -0
  113. package/esm/dist/src/init.d.ts.map +1 -0
  114. package/esm/dist/src/init.js +38 -0
  115. package/esm/dist/src/init.js.map +1 -0
  116. package/esm/dist/src/presets/internal.d.ts +5 -0
  117. package/esm/dist/src/presets/internal.d.ts.map +1 -0
  118. package/esm/dist/src/presets/internal.js +34 -0
  119. package/esm/dist/src/presets/internal.js.map +1 -0
  120. package/esm/dist/src/presets/keeo.d.ts +3 -0
  121. package/esm/dist/src/presets/keeo.d.ts.map +1 -0
  122. package/esm/dist/src/presets/keeo.js +33 -0
  123. package/esm/dist/src/presets/keeo.js.map +1 -0
  124. package/esm/dist/src/presets/platform.d.ts +2 -0
  125. package/esm/dist/src/presets/platform.d.ts.map +1 -0
  126. package/esm/dist/src/presets/platform.js +7 -0
  127. package/esm/dist/src/presets/platform.js.map +1 -0
  128. package/esm/dist/src/presets/ports-primary.d.ts +3 -0
  129. package/esm/dist/src/presets/ports-primary.d.ts.map +1 -0
  130. package/esm/dist/src/presets/ports-primary.js +50 -0
  131. package/esm/dist/src/presets/ports-primary.js.map +1 -0
  132. package/esm/dist/src/presets/ports-secundary.d.ts +3 -0
  133. package/esm/dist/src/presets/ports-secundary.d.ts.map +1 -0
  134. package/esm/dist/src/presets/ports-secundary.js +13 -0
  135. package/esm/dist/src/presets/ports-secundary.js.map +1 -0
  136. package/esm/dist/src/presets/ravot.d.ts +3 -0
  137. package/esm/dist/src/presets/ravot.d.ts.map +1 -0
  138. package/esm/dist/src/presets/ravot.js +32 -0
  139. package/esm/dist/src/presets/ravot.js.map +1 -0
  140. package/esm/dist/src/presets/services/caddy.d.ts +3 -0
  141. package/esm/dist/src/presets/services/caddy.d.ts.map +1 -0
  142. package/esm/dist/src/presets/services/caddy.js +249 -0
  143. package/esm/dist/src/presets/services/caddy.js.map +1 -0
  144. package/esm/dist/src/presets/services/coredns.d.ts +3 -0
  145. package/esm/dist/src/presets/services/coredns.d.ts.map +1 -0
  146. package/esm/dist/src/presets/services/coredns.js +10 -0
  147. package/esm/dist/src/presets/services/coredns.js.map +1 -0
  148. package/esm/dist/src/presets/services/frontend-type-checking.d.ts +3 -0
  149. package/esm/dist/src/presets/services/frontend-type-checking.d.ts.map +1 -0
  150. package/esm/dist/src/presets/services/frontend-type-checking.js +10 -0
  151. package/esm/dist/src/presets/services/frontend-type-checking.js.map +1 -0
  152. package/esm/dist/src/presets/services/maildev.d.ts +5 -0
  153. package/esm/dist/src/presets/services/maildev.d.ts.map +1 -0
  154. package/esm/dist/src/presets/services/maildev.js +24 -0
  155. package/esm/dist/src/presets/services/maildev.js.map +1 -0
  156. package/esm/dist/src/presets/services/stripe.d.ts +11 -0
  157. package/esm/dist/src/presets/services/stripe.d.ts.map +1 -0
  158. package/esm/dist/src/presets/services/stripe.js +46 -0
  159. package/esm/dist/src/presets/services/stripe.js.map +1 -0
  160. package/esm/dist/src/presets/stamhoofd.d.ts +3 -0
  161. package/esm/dist/src/presets/stamhoofd.d.ts.map +1 -0
  162. package/esm/dist/src/presets/stamhoofd.js +40 -0
  163. package/esm/dist/src/presets/stamhoofd.js.map +1 -0
  164. package/esm/dist/tsconfig.tsbuildinfo +1 -0
  165. package/esm/package.json +3 -0
  166. package/package.json +24 -0
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./src/build"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B"}
@@ -0,0 +1,6 @@
1
+ export type Service = {
2
+ backend: 'redirecter' | 'api' | 'renderer' | 'backup';
3
+ } | {
4
+ frontend: 'dashboard' | 'registration' | 'webshop';
5
+ };
6
+ //# sourceMappingURL=Service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../../src/Service.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IAClB,OAAO,EAAE,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;CACzD,GAAG;IACA,QAAQ,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;CACtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/Service.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { InitFunction } from './buildPresets';
2
+ import { Service } from './Service';
3
+ export declare function loadEnvironmentFile(name: string): Promise<any>;
4
+ export declare function buildConfig(name: string, service: Service): Promise<{
5
+ config: any;
6
+ initFunctions: InitFunction[];
7
+ }>;
8
+ export declare function build(name: string, service: Service): Promise<any>;
9
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,gBAgCrD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,aAAa,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAgGzH;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAExE"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadEnvironmentFile = loadEnvironmentFile;
4
+ exports.buildConfig = buildConfig;
5
+ exports.build = build;
6
+ const tslib_1 = require("tslib");
7
+ const buildPresets_1 = require("./buildPresets");
8
+ const project_path_1 = require("./helpers/project-path");
9
+ const promises_1 = tslib_1.__importDefault(require("node:fs/promises"));
10
+ async function fileExists(path) {
11
+ try {
12
+ await promises_1.default.access(path);
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ async function loadEnvironmentFile(name) {
20
+ var _a;
21
+ const rootPath = await (0, project_path_1.getProjectPath)();
22
+ const envFileName = name ? `env.${name}` : 'env';
23
+ if (!(await fileExists(rootPath + envFileName + '.js'))) {
24
+ throw new Error(`Environment file "${envFileName}.js" not found in the root directory`);
25
+ }
26
+ const isInternalContributor = await fileExists(rootPath + '.internal-contributor');
27
+ // Load names
28
+ const globalEnvFile = await Promise.resolve(`${rootPath + envFileName + '.js'}`).then(s => tslib_1.__importStar(require(s)));
29
+ let localEnvFile = undefined;
30
+ try {
31
+ localEnvFile = await Promise.resolve(`${rootPath + envFileName + '.local.js'}`).then(s => tslib_1.__importStar(require(s)));
32
+ }
33
+ catch (e) {
34
+ // If the local env file doesn't exist, we can ignore it
35
+ }
36
+ let environment = localEnvFile !== null && localEnvFile !== void 0 ? localEnvFile : globalEnvFile;
37
+ if (isInternalContributor) {
38
+ environment = {
39
+ ...environment,
40
+ presets: [...((_a = environment.presets) !== null && _a !== void 0 ? _a : []), 'internal'],
41
+ };
42
+ }
43
+ return environment;
44
+ }
45
+ async function buildConfig(name, service) {
46
+ var _a;
47
+ const projectPath = await (0, project_path_1.getProjectPath)();
48
+ const environment = await loadEnvironmentFile(name);
49
+ // Only return these env variables in backend services, to not expose development credentials in the browser
50
+ const backendSpecific = {
51
+ // By default use local MySQL server
52
+ DB_HOST: '127.0.0.1',
53
+ DB_USER: 'root',
54
+ DB_PASS: 'root',
55
+ DB_DATABASE: 'stamhoofd',
56
+ // We don't need AWS in development, so set it to empty values
57
+ AWS_ACCESS_KEY_ID: '',
58
+ AWS_SECRET_ACCESS_KEY: '',
59
+ AWS_REGION: 'eu-west-1',
60
+ // We do need an AWS S3 compatible storage in development.
61
+ // Set it to empty for now...
62
+ SPACES_ENDPOINT: 'ams3.digitaloceanspaces.com',
63
+ SPACES_BUCKET: 'stamhoofd',
64
+ SPACES_KEY: '',
65
+ SPACES_SECRET: '',
66
+ SPACES_PREFIX: 'simon', // todo: use username
67
+ // Mollie client id is shared with the frontend
68
+ MOLLIE_SECRET: '',
69
+ MOLLIE_API_KEY: '',
70
+ // Stripe secret key - required to test Stripe locally
71
+ STRIPE_SECRET_KEY: '',
72
+ STRIPE_ENDPOINT_SECRET: '',
73
+ STRIPE_CONNECT_ENDPOINT_SECRET: '',
74
+ // An internal secret, used for verifying infomration passed between services
75
+ // This one is public and committed to the repository because it is only used in development
76
+ INTERNAL_SECRET_KEY: 'vklRsSAOd0hqb4sx42kcTpFK6f3rCePi3HK/pJw5vz8=',
77
+ // Disable crons in certain development environments
78
+ CRONS_DISABLED: false,
79
+ // Change this if the SMTP server can't send from all domains
80
+ WHITELISTED_EMAIL_DESTINATIONS: ['*'],
81
+ // Whether to store cache files: todo
82
+ CACHE_PATH: 'backend' in service ? (projectPath + 'backend/app/' + service.backend + '/.cache') : undefined,
83
+ // These are used in development, and are not used in production so safe to use.
84
+ FILE_SIGNING_PUBLIC_KEY: { kty: 'EC', x: 'LZPou8JKNPoxgc1FXqLW_dqAYrv3_3ZoFHACwCiiunw', y: 'kBSKvtDVpa29J2mh5pICQD12dKO25fU3Bz-JItNAgEE', crv: 'P-256' },
85
+ FILE_SIGNING_PRIVATE_KEY: { kty: 'EC', x: 'LZPou8JKNPoxgc1FXqLW_dqAYrv3_3ZoFHACwCiiunw', y: 'kBSKvtDVpa29J2mh5pICQD12dKO25fU3Bz-JItNAgEE', crv: 'P-256', d: 'C0xuuMOMKeIDP6YPOz2dO1ccMYYrnpDpzz-_oRoq4io' },
86
+ FILE_SIGNING_ALG: 'ES256',
87
+ // Doesn't matter in development, unless you want to test the upgrade toasts and flows
88
+ LATEST_IOS_VERSION: 109,
89
+ LATEST_ANDROID_VERSION: 109,
90
+ // To test Mollie, we'll need the keys in both the frontend and backend
91
+ MOLLIE_CLIENT_ID: '',
92
+ MOLLIE_ORGANIZATION_TOKEN: '',
93
+ };
94
+ const frontendSpecific = {
95
+ // To test Mollie, we'll need the keys in both the frontend and backend
96
+ MOLLIE_CLIENT_ID: '',
97
+ // The version is visible in the footer of the frontend
98
+ VERSION: '',
99
+ };
100
+ const base = {
101
+ environment: 'development',
102
+ };
103
+ const { config: presetConfig, initFunctions } = await (0, buildPresets_1.buildPresets)(((_a = environment.presets) !== null && _a !== void 0 ? _a : []), service);
104
+ if ('backend' in service) {
105
+ return {
106
+ config: {
107
+ ...backendSpecific,
108
+ ...base,
109
+ ...presetConfig,
110
+ ...environment,
111
+ },
112
+ initFunctions,
113
+ };
114
+ }
115
+ return {
116
+ config: {
117
+ ...frontendSpecific,
118
+ ...base,
119
+ ...presetConfig,
120
+ ...environment,
121
+ },
122
+ initFunctions,
123
+ };
124
+ }
125
+ async function build(name, service) {
126
+ return (await buildConfig(name, service)).config;
127
+ }
128
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type ConcurrentlyCommandInput } from 'concurrently';
2
+ import { Service } from './Service';
3
+ export type InitFunction = (config: SharedEnvironment) => Promise<undefined | ConcurrentlyCommandInput[]>;
4
+ export declare function buildPresets(presets: string[], service: Service): Promise<{
5
+ config: any;
6
+ initFunctions: InitFunction[];
7
+ }>;
8
+ //# sourceMappingURL=buildPresets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildPresets.d.ts","sourceRoot":"","sources":["../../src/buildPresets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,GAAG,wBAAwB,EAAE,CAAC,CAAC;AAC1G,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,aAAa,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAkF/H"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.buildPresets = buildPresets;
27
+ async function buildPresets(presets, service) {
28
+ const defaultPrests = [];
29
+ const todo = [...presets];
30
+ for (const defaultPreset of defaultPrests) {
31
+ if (!todo.includes(defaultPreset)) {
32
+ todo.unshift(defaultPreset);
33
+ }
34
+ }
35
+ const result = {};
36
+ const presetsSet = new Set(todo);
37
+ const initFunctions = [];
38
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
39
+ for (let index = 0; index < todo.length; index++) {
40
+ const preset = todo[index];
41
+ // Loop
42
+ const fileLocation = `./presets/${preset}.js`;
43
+ try {
44
+ const presetBuilder = await Promise.resolve(`${fileLocation}`).then(s => __importStar(require(s)));
45
+ let config;
46
+ if ('config' in presetBuilder) {
47
+ config = presetBuilder.config;
48
+ }
49
+ else {
50
+ if ('init' in presetBuilder) {
51
+ initFunctions.push(presetBuilder.init);
52
+ }
53
+ if ('build' in presetBuilder) {
54
+ config = await presetBuilder.build(service);
55
+ }
56
+ }
57
+ if (config && 'presets' in config) {
58
+ // Append to current loop if not yet in the loop
59
+ for (const key of config.presets) {
60
+ if (!presetsSet.has(key)) {
61
+ presetsSet.add(key);
62
+ todo.push(key);
63
+ }
64
+ }
65
+ }
66
+ if (config) {
67
+ Object.assign(result, config);
68
+ }
69
+ }
70
+ catch (error) {
71
+ if (error.message.includes('Cannot find module') && !error.message.includes('package.json')) {
72
+ console.error(error);
73
+ throw new Error(`Preset ${preset} does not exist. Please check the presets directory.`);
74
+ }
75
+ throw new Error(`Failed to load preset ${preset}: ${error.message}`);
76
+ }
77
+ }
78
+ // Some presets still need to inject things, because they depend on the total configuration of the service
79
+ for (const preset of presetsSet) {
80
+ const fileLocation = `./presets/${preset}.js`;
81
+ try {
82
+ const presetBuilder = await Promise.resolve(`${fileLocation}`).then(s => __importStar(require(s)));
83
+ if ('inject' in presetBuilder) {
84
+ const injectedConfig = await presetBuilder.inject(result, service);
85
+ Object.assign(result, injectedConfig);
86
+ }
87
+ }
88
+ catch (error) {
89
+ if (error.message.includes('Cannot find module')) {
90
+ throw new Error(`Preset ${preset} does not exist. Please check the presets directory.`);
91
+ }
92
+ throw new Error(`Failed to inject preset ${preset}: ${error.message}`);
93
+ }
94
+ }
95
+ return {
96
+ config: result,
97
+ initFunctions,
98
+ };
99
+ }
100
+ //# sourceMappingURL=buildPresets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildPresets.js","sourceRoot":"","sources":["../../src/buildPresets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function escapeShellArg(arg: any): string;
2
+ /**
3
+ * A bit slower - uses local 1Password CLI
4
+ */
5
+ export declare function read1PasswordCli(key: string, options?: {
6
+ optional: boolean;
7
+ }): Promise<string>;
8
+ //# sourceMappingURL=1password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1password.d.ts","sourceRoot":"","sources":["../../../src/helpers/1password.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAAC,GAAG,KAAA,UAEjC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBpG"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeShellArg = escapeShellArg;
4
+ exports.read1PasswordCli = read1PasswordCli;
5
+ const tslib_1 = require("tslib");
6
+ const child_process_1 = require("child_process");
7
+ const util_1 = tslib_1.__importDefault(require("util"));
8
+ const cache_1 = require("./cache");
9
+ const utility_1 = require("@stamhoofd/utility");
10
+ const execPromise = util_1.default.promisify(child_process_1.exec);
11
+ function escapeShellArg(arg) {
12
+ return `'${arg.replace(/'/g, `'\\''`)}'`;
13
+ }
14
+ /**
15
+ * A bit slower - uses local 1Password CLI
16
+ */
17
+ async function read1PasswordCli(key, options) {
18
+ return await (0, cache_1.cache)(utility_1.Formatter.slug('1password-cli-' + key), async () => {
19
+ // Read key from 1Password
20
+ const result = await execPromise(`op read ${escapeShellArg(key)}`);
21
+ const value = result.stdout;
22
+ // Remove trailing newline (only 1)
23
+ const val = value.substring(0, value.length - 1);
24
+ if (val === '') {
25
+ if (options === null || options === void 0 ? void 0 : options.optional) {
26
+ return '';
27
+ }
28
+ throw new Error('Key not found in 1Password: ' + key);
29
+ }
30
+ return val;
31
+ });
32
+ }
33
+ //# sourceMappingURL=1password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1password.js","sourceRoot":"","sources":["../../../src/helpers/1password.ts"],"names":[],"mappings":";;AAMA,wCAEC;AAKD,4CAkBC;;AA/BD,iDAAqC;AACrC,wDAAwB;AACxB,mCAAgC;AAChC,gDAA+C;AAC/C,MAAM,WAAW,GAAG,cAAI,CAAC,SAAS,CAAC,oBAAI,CAAC,CAAC;AAEzC,SAAgB,cAAc,CAAC,GAAG;IAC9B,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAA+B;IAC/E,OAAO,MAAM,IAAA,aAAK,EAAC,mBAAS,CAAC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE;QAClE,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,mCAAmC;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACb,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Since we need to build the environment for every running app, we want to cache some results
3
+ * to prevent for example, prompting for 1Password credentials every time.
4
+ *
5
+ * On top of that, we want to pass data from the 'init' step to the 'build' step, such as the stripe webhook secret.
6
+ */
7
+ export declare function withFileLock<T>(filePath: string, action: () => Promise<T>): Promise<T>;
8
+ export declare function cache(key: string, getValue?: () => Promise<string>): Promise<any>;
9
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/helpers/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH,wBAAsB,YAAY,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CA0DZ;AAOD,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,gBAsDxE"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * Since we need to build the environment for every running app, we want to cache some results
4
+ * to prevent for example, prompting for 1Password credentials every time.
5
+ *
6
+ * On top of that, we want to pass data from the 'init' step to the 'build' step, such as the stripe webhook secret.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.withFileLock = withFileLock;
10
+ exports.cache = cache;
11
+ const tslib_1 = require("tslib");
12
+ const promises_1 = tslib_1.__importDefault(require("node:fs/promises"));
13
+ const project_path_1 = require("./project-path");
14
+ // Wait max 60 seconds to acquire the lock
15
+ const LOCK_RETRY_INTERVAL = 100; // ms
16
+ const MAX_RETRIES = 600;
17
+ function withTemporarySignalHandler(cleanup) {
18
+ const handleShutdown = () => {
19
+ cleanup().then(() => {
20
+ // Cleanup completed, exit the process
21
+ process.exit(0); // Exit gracefully
22
+ }).catch((err) => {
23
+ console.error('Error during cleanup:', err);
24
+ });
25
+ };
26
+ // Attach listeners
27
+ process.on('SIGINT', handleShutdown);
28
+ process.on('SIGTERM', handleShutdown);
29
+ return () => {
30
+ // Detach listeners
31
+ process.off('SIGINT', handleShutdown);
32
+ process.off('SIGTERM', handleShutdown);
33
+ };
34
+ }
35
+ async function withFileLock(filePath, action) {
36
+ const lockPath = `${filePath}.lock`;
37
+ let didLock = false;
38
+ ;
39
+ const cleanup = withTemporarySignalHandler(async () => {
40
+ if (!didLock)
41
+ return; // No need to clean up if we never acquired the lock
42
+ try {
43
+ await promises_1.default.unlink(lockPath);
44
+ didLock = false; // Reset the lock state
45
+ }
46
+ catch (err) {
47
+ // ignore
48
+ }
49
+ });
50
+ try {
51
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
52
+ try {
53
+ if (attempt > 0 && attempt * LOCK_RETRY_INTERVAL % 1000 === 0) {
54
+ console.log('Waiting for lock...');
55
+ }
56
+ const fd = await promises_1.default.open(lockPath, 'wx'); // 'wx' fails if exists
57
+ await fd.close();
58
+ didLock = true;
59
+ try {
60
+ const result = await action(); // Do the actual file operation
61
+ try {
62
+ await promises_1.default.unlink(lockPath); // Release the lock
63
+ }
64
+ catch (err) {
65
+ // ignore
66
+ }
67
+ didLock = false;
68
+ return result;
69
+ }
70
+ catch (err) {
71
+ try {
72
+ await promises_1.default.unlink(lockPath); // Release the lock
73
+ }
74
+ catch (err) {
75
+ // ignore
76
+ }
77
+ didLock = false;
78
+ throw err;
79
+ }
80
+ }
81
+ catch (err) {
82
+ if (err.code !== 'EEXIST')
83
+ throw err; // Unexpected error
84
+ await sleep(LOCK_RETRY_INTERVAL);
85
+ }
86
+ }
87
+ throw new Error(`Could not acquire lock for ${filePath} after ${MAX_RETRIES} attempts`);
88
+ }
89
+ finally {
90
+ cleanup(); // Ensure cleanup is called on exit
91
+ }
92
+ }
93
+ function sleep(ms) {
94
+ return new Promise(resolve => setTimeout(resolve, ms));
95
+ }
96
+ // Store the cache in the project root folder (yarn workspace root)
97
+ async function cache(key, getValue) {
98
+ const rootPath = await (0, project_path_1.getProjectPath)();
99
+ // Create cache folder if it doesn't exist
100
+ const cacheFolder = rootPath + '.cache';
101
+ try {
102
+ await promises_1.default.mkdir(cacheFolder, { recursive: true });
103
+ }
104
+ catch (error) {
105
+ console.error('Failed to create cache folder:', error);
106
+ throw error;
107
+ }
108
+ const filePath = `${cacheFolder}/${key}`;
109
+ return await withFileLock(filePath, async () => {
110
+ // First read to check if it is cached
111
+ let cachedValue = null;
112
+ try {
113
+ cachedValue = await promises_1.default.readFile(filePath, 'utf-8');
114
+ const decoded = JSON.parse(cachedValue);
115
+ if (decoded && typeof decoded.date === 'number' && typeof decoded.value === 'string') {
116
+ const now = new Date().getTime();
117
+ const age = now - decoded.date;
118
+ // If the cache is older than 1 day, we consider it stale
119
+ if (age < 60 * 60 * 1000 * 24) {
120
+ return decoded.value; // Return cached value if it's still fresh
121
+ }
122
+ }
123
+ }
124
+ catch (error) {
125
+ if (error.code !== 'ENOENT') {
126
+ console.error('Failed to read cache file:', error);
127
+ throw error;
128
+ }
129
+ }
130
+ // Write file
131
+ if (!getValue) {
132
+ throw new Error(key + ' is not cached, and cannot get fresh value');
133
+ }
134
+ const value = await getValue();
135
+ const data = {
136
+ date: new Date().getTime(),
137
+ value,
138
+ };
139
+ // Write the value to the cache file
140
+ await promises_1.default.writeFile(filePath, JSON.stringify(data), 'utf-8');
141
+ return value;
142
+ });
143
+ }
144
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/helpers/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Includes trailing slash
3
+ */
4
+ export declare function getProjectPath(): Promise<string>;
5
+ //# sourceMappingURL=project-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-path.d.ts","sourceRoot":"","sources":["../../../src/helpers/project-path.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAsB,cAAc,oBAkBnC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectPath = getProjectPath;
4
+ const tslib_1 = require("tslib");
5
+ const promises_1 = tslib_1.__importDefault(require("node:fs/promises"));
6
+ const node_path_1 = tslib_1.__importDefault(require("node:path"));
7
+ async function fileExists(path) {
8
+ try {
9
+ await promises_1.default.access(path);
10
+ return true;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ /**
17
+ * Includes trailing slash
18
+ */
19
+ async function getProjectPath() {
20
+ let depth = 2;
21
+ while (true) {
22
+ // check lerna.json exists at depth
23
+ const fileName = __dirname + '/' + '../'.repeat(depth) + `lerna.json`;
24
+ if (await fileExists(fileName)) {
25
+ break;
26
+ }
27
+ depth++;
28
+ if (depth >= 7) {
29
+ throw new Error('Could not find lerna.json in the parent directories');
30
+ }
31
+ }
32
+ const rootPath = node_path_1.default.normalize(__dirname + '/' + '../'.repeat(depth));
33
+ return rootPath;
34
+ }
35
+ //# sourceMappingURL=project-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-path.js","sourceRoot":"","sources":["../../../src/helpers/project-path.ts"],"names":[],"mappings":";;AAgBA,wCAkBC;;AAlCD,wEAAkC;AAClC,kEAA6B;AAE7B,KAAK,UAAU,UAAU,CAAC,IAAY;IAClC,IAAI,CAAC;QACD,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,IAAI,EAAE,CAAC;QACV,mCAAmC;QACnC,MAAM,QAAQ,GAAG,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;QACtE,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM;QACV,CAAC;QACD,KAAK,EAAE,CAAC;QAER,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAI,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const concurrently_1 = require("concurrently");
5
+ const build_1 = require("./build");
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ async function init() {
8
+ var _a;
9
+ console.log(chalk_1.default.magenta('[INIT]') + ' Initializing development environment...');
10
+ const services = [];
11
+ // Loop all presets with a init method and call that method.
12
+ // Append responses to the services array
13
+ const { config, initFunctions } = await (0, build_1.buildConfig)((_a = process.env.STAMHOOFD_ENV) !== null && _a !== void 0 ? _a : '', { backend: 'api' });
14
+ for (const initFunction of initFunctions) {
15
+ const s = await initFunction(config);
16
+ if (Array.isArray(s)) {
17
+ services.push(...s);
18
+ }
19
+ }
20
+ if (services.length === 0) {
21
+ return;
22
+ }
23
+ // Run concurrently all services
24
+ const { result } = (0, concurrently_1.concurrently)(services, {
25
+ prefix: 'name',
26
+ killOthersOn: [], // don't kill on failure
27
+ successCondition: 'first',
28
+ cwd: process.cwd(),
29
+ });
30
+ try {
31
+ await result;
32
+ }
33
+ catch (e) {
34
+ // Ignore error
35
+ }
36
+ }
37
+ init().catch((error) => {
38
+ console.error('Error during initialization:', error);
39
+ process.exit(1);
40
+ });
41
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":";;;AAAA,+CAA2E;AAC3E,mCAAsC;AACtC,0DAA0B;AAE1B,KAAK,UAAU,IAAI;;IACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,0CAA0C,CAAC,CAAC;IAClF,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAEhD,4DAA4D;IAC5D,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,mBAAW,EAAC,MAAA,OAAO,CAAC,GAAG,CAAC,aAAa,mCAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzG,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,MAA2B,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,gCAAgC;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,2BAAY,EAAC,QAAQ,EAAE;QACtC,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,EAAE,EAAE,wBAAwB;QAC1C,gBAAgB,EAAE,OAAO;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,MAAM,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,eAAe;IACnB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Service } from '../Service';
2
+ export declare function build(service: Service): Promise<{
3
+ presets: never[];
4
+ }>;
5
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/presets/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAKrC,wBAAsB,KAAK,CAAC,OAAO,EAAE,OAAO;;GAmC3C"}