@betty-blocks/cli 25.109.0-beta.1 → 26.0.0-alpha.2

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 (184) hide show
  1. package/assets/app-functions/wasm-template/.wasm-functions +0 -0
  2. package/assets/app-functions/wasm-template/functions/say-hello/1.0/Cargo.lock +449 -0
  3. package/assets/app-functions/wasm-template/functions/say-hello/1.0/Cargo.toml +10 -0
  4. package/assets/app-functions/wasm-template/functions/say-hello/1.0/Justfile +6 -0
  5. package/assets/app-functions/wasm-template/functions/say-hello/1.0/function.json +35 -0
  6. package/assets/app-functions/wasm-template/functions/say-hello/1.0/src/lib.rs +19 -0
  7. package/assets/app-functions/wasm-template/functions/say-hello/1.0/wit/world.wit +13 -0
  8. package/build/bb-blocks-new.js +23 -0
  9. package/build/bb-blocks-new.js.map +1 -0
  10. package/build/bb-blocks-publish.js +98 -0
  11. package/build/bb-blocks-publish.js.map +1 -0
  12. package/build/bb-blocks-release.js +18 -0
  13. package/build/bb-blocks-release.js.map +1 -0
  14. package/build/bb-blocks.js +17 -0
  15. package/build/bb-blocks.js.map +1 -0
  16. package/build/bb-bundle-init.js +33 -0
  17. package/build/bb-bundle-init.js.map +1 -0
  18. package/build/bb-bundle.js +17 -0
  19. package/build/bb-bundle.js.map +1 -0
  20. package/build/bb-components-build.js +416 -0
  21. package/build/bb-components-build.js.map +1 -0
  22. package/build/bb-components-create.js +41 -0
  23. package/build/bb-components-create.js.map +1 -0
  24. package/build/bb-components-generate.js +168 -0
  25. package/build/bb-components-generate.js.map +1 -0
  26. package/build/bb-components-publish-bundle.js +50 -0
  27. package/build/bb-components-publish-bundle.js.map +1 -0
  28. package/build/bb-components-publish.js +57 -0
  29. package/build/bb-components-publish.js.map +1 -0
  30. package/build/bb-components-serve.js +35 -0
  31. package/build/bb-components-serve.js.map +1 -0
  32. package/build/bb-components.js +29 -0
  33. package/build/bb-components.js.map +1 -0
  34. package/build/bb-functions-bump.js +37 -0
  35. package/build/bb-functions-bump.js.map +1 -0
  36. package/build/bb-functions-init.js +31 -0
  37. package/build/bb-functions-init.js.map +1 -0
  38. package/build/bb-functions-login.js +17 -0
  39. package/build/bb-functions-login.js.map +1 -0
  40. package/build/bb-functions-logout.js +10 -0
  41. package/build/bb-functions-logout.js.map +1 -0
  42. package/build/bb-functions-new.js +25 -0
  43. package/build/bb-functions-new.js.map +1 -0
  44. package/build/bb-functions-publish.js +70 -0
  45. package/build/bb-functions-publish.js.map +1 -0
  46. package/build/bb-functions-validate.js +32 -0
  47. package/build/bb-functions-validate.js.map +1 -0
  48. package/build/bb-functions.js +29 -0
  49. package/build/bb-functions.js.map +1 -0
  50. package/build/bb.js +27 -0
  51. package/build/bb.js.map +1 -0
  52. package/build/blocks/blockDefinitions.js +55 -0
  53. package/build/blocks/blockDefinitions.js.map +1 -0
  54. package/build/blocks/publishBlocks.js +54 -0
  55. package/build/blocks/publishBlocks.js.map +1 -0
  56. package/build/blocks/releaseBlocks.js +78 -0
  57. package/build/blocks/releaseBlocks.js.map +1 -0
  58. package/build/components/bb-components-functions.js +40 -0
  59. package/build/components/bb-components-functions.js.map +1 -0
  60. package/build/components/comments.js +78 -0
  61. package/build/components/comments.js.map +1 -0
  62. package/build/components/compatibility.js +60 -0
  63. package/build/components/compatibility.js.map +1 -0
  64. package/build/components/transformers/index.js +36 -0
  65. package/build/components/transformers/index.js.map +1 -0
  66. package/build/components-build/index.js +3 -0
  67. package/build/components-build/index.js.map +1 -0
  68. package/build/components-build/reportDiagnostics.js +13 -0
  69. package/build/components-build/reportDiagnostics.js.map +1 -0
  70. package/build/components-build/styles.js +87 -0
  71. package/build/components-build/styles.js.map +1 -0
  72. package/build/functions/config.js +190 -0
  73. package/build/functions/config.js.map +1 -0
  74. package/build/functions/createWasmDefinitionFiles.js +61 -0
  75. package/build/functions/createWasmDefinitionFiles.js.map +1 -0
  76. package/build/functions/functionDefinitions.js +211 -0
  77. package/build/functions/functionDefinitions.js.map +1 -0
  78. package/build/functions/functionVersionBump.js +59 -0
  79. package/build/functions/functionVersionBump.js.map +1 -0
  80. package/build/functions/publishAppFunctions.js +90 -0
  81. package/build/functions/publishAppFunctions.js.map +1 -0
  82. package/build/functions/publishWasmBlockStoreFunctions.js +99 -0
  83. package/build/functions/publishWasmBlockStoreFunctions.js.map +1 -0
  84. package/build/functions/utils.js +20 -0
  85. package/build/functions/utils.js.map +1 -0
  86. package/build/functions/validations.js +140 -0
  87. package/build/functions/validations.js.map +1 -0
  88. package/build/interactions/compatibility.js +84 -0
  89. package/build/interactions/compatibility.js.map +1 -0
  90. package/build/interactions/diagnostics.js +23 -0
  91. package/build/interactions/diagnostics.js.map +1 -0
  92. package/build/types.js +40 -0
  93. package/build/types.js.map +1 -0
  94. package/build/utils/arguments.js +6 -0
  95. package/build/utils/arguments.js.map +1 -0
  96. package/build/utils/checkPackageVersion.js +10 -0
  97. package/build/utils/checkPackageVersion.js.map +1 -0
  98. package/build/utils/checkUpdateAvailable.js +65 -0
  99. package/build/utils/checkUpdateAvailable.js.map +1 -0
  100. package/build/utils/fusionAuth.js +108 -0
  101. package/build/utils/fusionAuth.js.map +1 -0
  102. package/build/utils/hash.js +3 -0
  103. package/build/utils/hash.js.map +1 -0
  104. package/build/utils/login.js +116 -0
  105. package/build/utils/login.js.map +1 -0
  106. package/build/utils/pick.js +16 -0
  107. package/build/utils/pick.js.map +1 -0
  108. package/build/utils/readFilesByType.js +23 -0
  109. package/build/utils/readFilesByType.js.map +1 -0
  110. package/build/utils/rootDir.js +4 -0
  111. package/build/utils/rootDir.js.map +1 -0
  112. package/build/utils/serveComponentSet.js +52 -0
  113. package/build/utils/serveComponentSet.js.map +1 -0
  114. package/build/utils/transpile.js +25 -0
  115. package/build/utils/transpile.js.map +1 -0
  116. package/build/utils/uploadBlob.js +56 -0
  117. package/build/utils/uploadBlob.js.map +1 -0
  118. package/build/utils/validation.js +74 -0
  119. package/build/utils/validation.js.map +1 -0
  120. package/build/validations/component.js +56 -0
  121. package/build/validations/component.js.map +1 -0
  122. package/build/validations/constants.js +208 -0
  123. package/build/validations/constants.js.map +1 -0
  124. package/build/validations/function-block-validations/index.js +72 -0
  125. package/build/validations/function-block-validations/index.js.map +1 -0
  126. package/build/validations/interaction.js +22 -0
  127. package/build/validations/interaction.js.map +1 -0
  128. package/build/validations/prefab/action.js +99 -0
  129. package/build/validations/prefab/action.js.map +1 -0
  130. package/build/validations/prefab/component.js +290 -0
  131. package/build/validations/prefab/component.js.map +1 -0
  132. package/build/validations/prefab/componentOption.js +176 -0
  133. package/build/validations/prefab/componentOption.js.map +1 -0
  134. package/build/validations/prefab/interaction.js +38 -0
  135. package/build/validations/prefab/interaction.js.map +1 -0
  136. package/build/validations/prefab/linkedOption.js +39 -0
  137. package/build/validations/prefab/linkedOption.js.map +1 -0
  138. package/build/validations/prefab/linkedPartial.js +30 -0
  139. package/build/validations/prefab/linkedPartial.js.map +1 -0
  140. package/build/validations/prefab/variable.js +36 -0
  141. package/build/validations/prefab/variable.js.map +1 -0
  142. package/build/validations/prefab.js +66 -0
  143. package/build/validations/prefab.js.map +1 -0
  144. package/build/validations/styles.js +103 -0
  145. package/build/validations/styles.js.map +1 -0
  146. package/package.json +42 -43
  147. package/assets/app-functions/templates/test/helpers.js +0 -3
  148. package/assets/app-functions/templates/test/say-hello.test.js +0 -4
  149. package/assets/functions/packer/package.json +0 -9
  150. package/assets/functions/packer/webpack.config.js +0 -12
  151. package/assets/functions/templates/functions.json +0 -14
  152. package/assets/functions/templates/package.json +0 -11
  153. package/assets/functions/templates/src/all-users.js +0 -14
  154. package/assets/functions/templates/src/get-json.js +0 -9
  155. package/assets/functions/templates/src/index.js +0 -5
  156. package/assets/functions/templates/src/say-hello.js +0 -13
  157. package/build/src/bb-blocks-new.js +0 -6790
  158. package/build/src/bb-blocks-publish.js +0 -32642
  159. package/build/src/bb-blocks-release.js +0 -15529
  160. package/build/src/bb-blocks.js +0 -2149
  161. package/build/src/bb-bundle-init.js +0 -6036
  162. package/build/src/bb-bundle.js +0 -2636
  163. package/build/src/bb-components-build.js +0 -240486
  164. package/build/src/bb-components-create.js +0 -6047
  165. package/build/src/bb-components-generate.js +0 -6175
  166. package/build/src/bb-components-publish-bundle.js +0 -43348
  167. package/build/src/bb-components-publish.js +0 -43355
  168. package/build/src/bb-components-serve.js +0 -15328
  169. package/build/src/bb-components.js +0 -2157
  170. package/build/src/bb-functions-build.js +0 -4285
  171. package/build/src/bb-functions-bump.js +0 -14583
  172. package/build/src/bb-functions-init.js +0 -4750
  173. package/build/src/bb-functions-login.js +0 -15441
  174. package/build/src/bb-functions-logout.js +0 -15435
  175. package/build/src/bb-functions-new.js +0 -9145
  176. package/build/src/bb-functions-publish.js +0 -86694
  177. package/build/src/bb-functions-validate.js +0 -22161
  178. package/build/src/bb-functions.js +0 -2159
  179. package/build/src/bb.js +0 -2741
  180. package/src/bb.ts +0 -31
  181. /package/assets/app-functions/{templates → js-template}/.app-functions +0 -0
  182. /package/assets/app-functions/{templates → js-template}/functions/say-hello/1.0/function.json +0 -0
  183. /package/assets/app-functions/{templates → js-template}/functions/say-hello/1.0/index.js +0 -0
  184. /package/assets/app-functions/{templates → js-template}/package.json +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/components-build/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ import fs from 'fs-extra';
2
+ import https, {} from 'https';
3
+ import os from 'os';
4
+ import path from 'path';
5
+ import prompts from 'prompts';
6
+ import { setHttpsAgent } from './utils';
7
+ class Config {
8
+ /* static */
9
+ static localConfigPath = path.join(process.cwd(), 'config.json');
10
+ static globalConfigPath = path.join(os.homedir(), '.bb-cli.json');
11
+ static writeToGlobalConfig(key, value) {
12
+ const config = this.readGlobalConfig();
13
+ this.writeGlobalConfig({
14
+ ...config,
15
+ [key]: value,
16
+ });
17
+ }
18
+ static registerApplicationId(identifier, zone, applicationId) {
19
+ this.writeToGlobalConfig('applicationMap', {
20
+ ...Config.readGlobalConfig().applicationMap,
21
+ [this.applicationIdKey(identifier, zone)]: applicationId,
22
+ });
23
+ }
24
+ static readGlobalConfig() {
25
+ this.ensureGlobalConfigExists();
26
+ return fs.readJSONSync(this.globalConfigPath);
27
+ }
28
+ static ensureGlobalConfigExists() {
29
+ if (!fs.existsSync(this.globalConfigPath)) {
30
+ fs.writeJSONSync(this.globalConfigPath, {
31
+ applicationMap: {},
32
+ auth: {},
33
+ }, { spaces: 2 });
34
+ }
35
+ }
36
+ static writeGlobalConfig(map) {
37
+ this.ensureGlobalConfigExists();
38
+ fs.writeJSONSync(this.globalConfigPath, map, { spaces: 2 });
39
+ }
40
+ static async promptApplicationId(identifier, zone) {
41
+ const { applicationId } = (await prompts([
42
+ {
43
+ message: `Please provide the UUID for '${identifier}' (${zone})`,
44
+ name: 'applicationId',
45
+ type: 'text',
46
+ },
47
+ ]));
48
+ if (!applicationId) {
49
+ return this.promptApplicationId(identifier, zone);
50
+ }
51
+ this.registerApplicationId(identifier, zone, applicationId);
52
+ return applicationId;
53
+ }
54
+ static applicationIdKey = (identifier, zone) => `${identifier}.${zone}`;
55
+ static readConfig = () => {
56
+ const cfgPath = Config.localConfigPath;
57
+ if (fs.pathExistsSync(cfgPath)) {
58
+ return fs.readJsonSync(cfgPath);
59
+ }
60
+ return {};
61
+ };
62
+ static defaultConfig = () => ({
63
+ agentOptions: undefined,
64
+ blockstoreApiUrl: 'https://my{ZONEPOSTFIX}.bettyblocks.com/block-store-api',
65
+ builderApiUrl: '{HOST}/api/builder',
66
+ cacheDir: '.tmp/',
67
+ domain: 'bettyblocks.com',
68
+ functionSchemaPath: '/bettyblocks/json-schema/master/schemas/actions/function.json',
69
+ fusionAuthUrl: 'https://id{ZONEPOSTFIX}.bettyblocks.com',
70
+ includes: [],
71
+ schemaUrl: 'https://raw.githubusercontent.com',
72
+ skipCompile: false,
73
+ });
74
+ /* instance */
75
+ config;
76
+ _identifier;
77
+ _zone;
78
+ _host;
79
+ _applicationId;
80
+ constructor(config) {
81
+ this.config = {
82
+ ...Config.defaultConfig(),
83
+ ...Config.readConfig(),
84
+ ...(config ?? {}),
85
+ };
86
+ }
87
+ get skipCompile() {
88
+ return !!this.config.skipCompile;
89
+ }
90
+ get agent() {
91
+ return setHttpsAgent(this.config.agentOptions);
92
+ }
93
+ get identifier() {
94
+ this._identifier ??=
95
+ this.config.identifier ?? path.basename(process.cwd()).split('.')[0];
96
+ return this._identifier;
97
+ }
98
+ get zone() {
99
+ this._zone ??=
100
+ this.config.zone ??
101
+ path.basename(process.cwd()).split('.')[1] ??
102
+ 'production';
103
+ return this._zone;
104
+ }
105
+ get buildDir() {
106
+ if (this.zone === 'production') {
107
+ return this.identifier;
108
+ }
109
+ return `${this.identifier}.${this.zone}`;
110
+ }
111
+ get host() {
112
+ this._host ??= this.config.host ?? this.defaultHost();
113
+ return this._host;
114
+ }
115
+ get fusionAuthUrl() {
116
+ let postfix = '';
117
+ if (this.zone === 'acceptance') {
118
+ postfix = '.acceptance';
119
+ }
120
+ else if (this.zone === 'edge') {
121
+ postfix = '.edge';
122
+ }
123
+ return this.config.fusionAuthUrl.replace('{ZONEPOSTFIX}', postfix);
124
+ }
125
+ get builderApiUrl() {
126
+ return this.config.builderApiUrl.replace('{HOST}', this.host);
127
+ }
128
+ get blockstoreApiUrl() {
129
+ let postfix = '';
130
+ if (this.zone.match(/^(acceptance|edge)$/)) {
131
+ postfix = `.${this.zone}`;
132
+ }
133
+ return this.config.blockstoreApiUrl.replace('{ZONEPOSTFIX}', postfix);
134
+ }
135
+ additionalHeaders() {
136
+ let tenantId = null;
137
+ if (this.config.tenantId) {
138
+ ({ tenantId } = this.config);
139
+ }
140
+ else {
141
+ switch (this.zone) {
142
+ case 'edge':
143
+ tenantId = '62313937-6230-3361-3465-643833656463';
144
+ break;
145
+ default:
146
+ tenantId = null;
147
+ }
148
+ }
149
+ if (tenantId) {
150
+ return {
151
+ 'X-FusionAuth-TenantId': tenantId,
152
+ };
153
+ }
154
+ return {};
155
+ }
156
+ async applicationId() {
157
+ this._applicationId ??=
158
+ this.config.applicationId ?? (await this.fetchApplicationId());
159
+ return this._applicationId;
160
+ }
161
+ async fetchApplicationId() {
162
+ const map = Config.readGlobalConfig();
163
+ const key = Config.applicationIdKey(this.identifier, this.zone);
164
+ if (map.applicationMap[key]) {
165
+ return map.applicationMap[key];
166
+ }
167
+ return Config.promptApplicationId(this.identifier, this.zone);
168
+ }
169
+ get schemaUrl() {
170
+ return this.config.schemaUrl;
171
+ }
172
+ get agentOptions() {
173
+ return this.config.agentOptions;
174
+ }
175
+ get functionSchemaPath() {
176
+ return this.config.functionSchemaPath;
177
+ }
178
+ defaultHost() {
179
+ let subdomain = this.identifier;
180
+ if (this.zone !== 'production') {
181
+ subdomain = `${subdomain}.${this.zone}`;
182
+ }
183
+ return `https://${subdomain}.${this.config.domain}`;
184
+ }
185
+ get includes() {
186
+ return this.config.includes ?? [];
187
+ }
188
+ }
189
+ export default Config;
190
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/functions/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { snake } from 'case';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ const createlibRsFile = (functionDir, functionName) => {
5
+ const functionDefName = snake(functionName);
6
+ fs.mkdirpSync(path.join(functionDir, 'src'));
7
+ fs.writeFileSync(path.join(functionDir, 'src', 'lib.rs'), `use crate::exports::betty_blocks::${functionDefName}::${functionDefName}::{Guest, Output};
8
+
9
+ wit_bindgen::generate!({ generate_all });
10
+
11
+ struct Component;
12
+
13
+ impl Guest for Component {
14
+ fn ${functionDefName}(name: String) -> Result<Output, String> {
15
+ if name == "oops" {
16
+ Err("Ooops. Something went wrong.".to_string())
17
+ } else {
18
+ Ok(Output {
19
+ greet: format!("Hello, {}", name),
20
+ })
21
+ }
22
+ }
23
+ }
24
+
25
+ export! {Component}
26
+ `);
27
+ };
28
+ const createWorldWitFile = (functionDir, functionName) => {
29
+ const lowercasedFunctionName = functionName.toLowerCase();
30
+ fs.mkdirpSync(path.join(functionDir, 'wit'));
31
+ fs.writeFileSync(path.join(functionDir, 'wit', 'world.wit'), `package betty-blocks:${lowercasedFunctionName}@1.0.0;
32
+
33
+ interface ${lowercasedFunctionName} {
34
+ record output {
35
+ %greet: string
36
+ }
37
+
38
+ ${lowercasedFunctionName}: func(name: string) -> result<output, string>;
39
+ }
40
+
41
+ world main {
42
+ export ${lowercasedFunctionName};
43
+ }
44
+ `);
45
+ };
46
+ const createCargoTomlFile = (functionDir, functionName) => {
47
+ const functionDefName = snake(functionName);
48
+ fs.writeFileSync(path.join(functionDir, 'Cargo.toml'), `[package]
49
+ name = "${functionDefName}"
50
+ version = "1.0.0"
51
+ edition = "2024"
52
+
53
+ [lib]
54
+ crate-type = ["cdylib"]
55
+
56
+ [dependencies]
57
+ wit-bindgen = "0.42.0"
58
+ `);
59
+ };
60
+ export { createCargoTomlFile, createlibRsFile, createWorldWitFile };
61
+ //# sourceMappingURL=createWasmDefinitionFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWasmDefinitionFiles.js","sourceRoot":"","sources":["../../src/functions/createWasmDefinitionFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,eAAe,GAAG,CAAC,WAAmB,EAAE,YAAoB,EAAQ,EAAE;IAC1E,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,EACvC,qCAAqC,eAAe,KAAK,eAAe;;;;;;;SAOnE,eAAe;;;;;;;;;;;;KAYnB,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,WAAmB,EACnB,YAAoB,EACd,EAAE;IACR,MAAM,sBAAsB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC1D,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,EAC1C,wBAAwB,sBAAsB;;YAEtC,sBAAsB;;;;;MAK5B,sBAAsB;;;;aAIf,sBAAsB;;KAE9B,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,WAAmB,EACnB,YAAoB,EACd,EAAE;IACR,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EACpC;UACM,eAAe;;;;;;;;;KASpB,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,211 @@
1
+ import AdmZip from 'adm-zip';
2
+ import { camel, title } from 'case';
3
+ import fs from 'fs-extra';
4
+ import { globSync } from 'glob';
5
+ import path from 'path';
6
+ import { createCargoTomlFile, createlibRsFile, createWorldWitFile, } from './createWasmDefinitionFiles';
7
+ /* @doc functionDefinitionPath
8
+ Expands the function dir with `function.json`.
9
+ */
10
+ const functionDefinitionPath = (functionPath) => path.join(functionPath, 'function.json');
11
+ /* @doc functionImplementationPath
12
+ Expands the function dir with `index.js`.
13
+ */
14
+ const jsFunctionImplementationPath = (functionPath) => path.join(functionPath, 'index.js');
15
+ const wasmFunctionImplementationPath = (functionPath) => path.join(functionPath, 'wit', 'world.wit');
16
+ /* @doc isFunctionDefinition
17
+ Checks the given functions dir for a file named function.json.
18
+ Returns true if the file exists.
19
+ */
20
+ const isFunctionDefinition = (functionPath) => fs.pathExistsSync(functionDefinitionPath(functionPath));
21
+ /* @doc isFunctionVersion
22
+ Checks the given functions dir to be a function version.
23
+ Returns true if applies to versioning conventions.
24
+ */
25
+ const isFunctionVersion = (functionPath, functionsDir) => !!path.basename(functionPath).match(/^\d+\.\d+$/) &&
26
+ parseFloat(path.basename(functionPath)) >= 1.0 &&
27
+ path.dirname(path.dirname(functionPath)) === functionsDir;
28
+ /* @doc isFunction
29
+ Checks the given functions dir for a file named index.js.
30
+ Returns true if the file exists.
31
+ */
32
+ const isFunction = (functionPath) => fs.pathExistsSync(jsFunctionImplementationPath(functionPath)) ||
33
+ fs.pathExistsSync(wasmFunctionImplementationPath(functionPath));
34
+ /* @doc functionDirs
35
+ Returns a list of directories inside the given functionsDir that have a function.json and index.js.
36
+ */
37
+ const functionDirs = (functionsDir, includeNonversioned = false) => globSync(path.join(functionsDir, '**', 'function.json').replace(/\\/g, '/')).reduce((dirs, functionDefinition) => {
38
+ const dir = path.dirname(functionDefinition).replace(/\//g, path.sep);
39
+ if (isFunction(dir) &&
40
+ (includeNonversioned || isFunctionVersion(dir, functionsDir))) {
41
+ dirs.push(dir);
42
+ }
43
+ return dirs;
44
+ }, []);
45
+ /* @doc functionDefinition
46
+ Reads the function.json from the given directory.
47
+ Returns the parsed function.json as object.
48
+ */
49
+ const functionDefinition = (functionPath, functionsDir) => {
50
+ let name = '';
51
+ let version = '';
52
+ if (isFunctionVersion(functionPath, functionsDir)) {
53
+ name = camel(path.basename(path.dirname(functionPath)));
54
+ version = path.basename(functionPath);
55
+ }
56
+ else {
57
+ name = camel(path.basename(functionPath));
58
+ }
59
+ const filePath = functionDefinitionPath(functionPath);
60
+ const schema = fs.readJSONSync(filePath);
61
+ try {
62
+ return {
63
+ name,
64
+ path: filePath,
65
+ schema,
66
+ version,
67
+ };
68
+ }
69
+ catch (err) {
70
+ throw new Error(`could not load json from ${filePath}: ${err}`);
71
+ }
72
+ };
73
+ /* @doc functionDefinitions
74
+ Returns an object containing all function.json definitions
75
+ inside the given functionsDir, indexed by function name.
76
+ */
77
+ const functionDefinitions = (functionsDir, includeNonversioned = false) => functionDirs(functionsDir, includeNonversioned).map((functionDir) => functionDefinition(functionDir, functionsDir));
78
+ const stringifyDefinitions = (definitions) => {
79
+ const updatedDefinitions = definitions.map(({ name, version, schema }) => ({
80
+ name,
81
+ version,
82
+ ...schema,
83
+ options: JSON.stringify(schema.options ?? []),
84
+ paths: JSON.stringify(schema.paths ?? {}),
85
+ }));
86
+ return JSON.stringify(updatedDefinitions);
87
+ };
88
+ /* @doc newFunctionDefinition
89
+ Creates a new folder for the given name and fills that folder with a function.json file
90
+ and an index.js.
91
+ */
92
+ const newFunctionDefinition = (functionsDir, functionName, isWasmFunctionProject) => {
93
+ const functionDir = path.join(functionsDir, functionName, '1.0');
94
+ try {
95
+ fs.mkdirpSync(functionDir);
96
+ fs.writeJSONSync(functionDefinitionPath(functionDir), {
97
+ category: 'Misc',
98
+ description: 'Description',
99
+ icon: { color: 'Orange', name: 'ActionsIcon' },
100
+ label: title(functionName),
101
+ options: [],
102
+ yields: 'NONE',
103
+ }, { spaces: 2 });
104
+ if (isWasmFunctionProject) {
105
+ createNewWasmFunction(functionDir, functionName);
106
+ }
107
+ else {
108
+ createNewJsFunction(functionDir, functionName);
109
+ }
110
+ }
111
+ catch (err) {
112
+ throw new Error(`could not initialize new function ${functionDir}: ${err}`);
113
+ }
114
+ };
115
+ const createNewJsFunction = (functionDir, functionName) => {
116
+ const functionDefName = functionName.replace(/-./g, (x) => x.toUpperCase()[1]);
117
+ fs.writeFileSync(path.join(functionDir, 'index.js'), `const ${functionDefName} = async () => {\n\n}\n\nexport default ${functionDefName};`);
118
+ };
119
+ const createNewWasmFunction = (functionDir, functionName) => {
120
+ createlibRsFile(functionDir, functionName);
121
+ createWorldWitFile(functionDir, functionName);
122
+ createCargoTomlFile(functionDir, functionName);
123
+ };
124
+ const toVariableName = ({ name, version }) => `${camel(name)}_${version.replace('.', '_')}`;
125
+ /* @doc importFunctions
126
+ Returns an array of strings, each item being an imported function:
127
+ `import { default as functionName_1_0 } from './function-name/1.0';`;
128
+ */
129
+ const importFunctions = (definitions, functionsPath) => definitions.map((definition) => `import { default as ${toVariableName(definition)} } from '${path
130
+ .dirname(definition.path.replace(functionsPath, `./${path.basename(functionsPath)}`))
131
+ .replace(/\\/g, '/')}';`);
132
+ /* @doc exportFunctions
133
+ Returns a string in which functions will be exported in an object;
134
+ */
135
+ const exportFunctions = (definitions) => {
136
+ const exports = definitions.map((definition) => {
137
+ const { name, version } = definition;
138
+ return ` "${name} ${version}": ${toVariableName(definition)},`;
139
+ });
140
+ return ['const fn = {', ...exports, '};', '', 'export default fn;'];
141
+ };
142
+ /* @doc whitelistedFunctions
143
+ Returns an array containing all functions based on the whitelist.
144
+ */
145
+ const whitelistedFunctions = (definitions, whitelist) => whitelist.map((whitelisted) => {
146
+ const definition = definitions.find((def) => [def.name, def.version].join(' ') === whitelisted);
147
+ if (!definition)
148
+ throw new Error(`Function ${whitelisted} could not be found. Check if function and version exists.`);
149
+ return definition;
150
+ });
151
+ /* @doc generateIndex
152
+ Fetches all functions and re-exports them.
153
+ Returns the result as a Buffer.
154
+ */
155
+ const generateIndex = (functionsPath, whitelist) => {
156
+ const definitions = functionDefinitions(functionsPath);
157
+ const functions = whitelist
158
+ ? whitelistedFunctions(definitions, whitelist)
159
+ : definitions;
160
+ const code = [];
161
+ code.push(...importFunctions(functions, functionsPath));
162
+ code.push('');
163
+ code.push(...exportFunctions(functions));
164
+ code.push('');
165
+ return code.join('\n');
166
+ };
167
+ /* @doc zipFunctionDefinitions
168
+ Takes functionsPath as path to a directory with function definitions.
169
+ Scans each directory for a function.json file, and if present adds it
170
+ to the zip file. Generates an index.js and adds it to the zip file.
171
+ Returns path to the zip file.
172
+ */
173
+ const zipFunctionDefinitions = (functionsPath, includes) => {
174
+ const zip = new AdmZip();
175
+ const tmpDir = '.tmp';
176
+ const zipFilePath = path.join(tmpDir, 'app.zip');
177
+ const cwd = path.dirname(functionsPath);
178
+ fs.ensureDirSync(tmpDir);
179
+ zip.addLocalFile(path.join(path.dirname(functionsPath), 'package.json'));
180
+ zip.addFile('index.js', Buffer.from(generateIndex(functionsPath)));
181
+ zip.addLocalFolder(functionsPath, functionsPath.replace(cwd, ''));
182
+ (includes ?? []).forEach((include) => {
183
+ zip.addLocalFolder(path.join(cwd, include), include);
184
+ });
185
+ zip.writeZip(zipFilePath);
186
+ return zipFilePath;
187
+ };
188
+ /* @doc getAllWasmFunctionsWithVersions
189
+ Scans the given functionsPath for all functions that contain a wasm implementation.
190
+ Returns an array of strings with function names and versions, e.g. ['my-function/1.0', 'my-function/2.0']
191
+ */
192
+ export const getAllWasmFunctionsWithVersions = (functionsPath) => {
193
+ if (!fs.existsSync(functionsPath)) {
194
+ return [];
195
+ }
196
+ return fs
197
+ .readdirSync(functionsPath, { withFileTypes: true })
198
+ .filter((dirent) => dirent.isDirectory())
199
+ .flatMap((dirent) => {
200
+ const functionDir = path.join(functionsPath, dirent.name);
201
+ if (!fs.existsSync(functionDir)) {
202
+ return [];
203
+ }
204
+ return fs
205
+ .readdirSync(functionDir, { withFileTypes: true })
206
+ .filter((subDirent) => subDirent.isDirectory())
207
+ .map((subDirent) => `${dirent.name}/${subDirent.name}`);
208
+ });
209
+ };
210
+ export { functionDefinition, functionDefinitionPath, functionDefinitions, functionDirs, generateIndex, isFunctionDefinition, isFunctionVersion, newFunctionDefinition, stringifyDefinitions, whitelistedFunctions, zipFunctionDefinitions, };
211
+ //# sourceMappingURL=functionDefinitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionDefinitions.js","sourceRoot":"","sources":["../../src/functions/functionDefinitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import prompts from 'prompts';
4
+ import { functionDefinitions } from './functionDefinitions';
5
+ const workingDir = process.cwd();
6
+ const baseFunctionsPath = path.join(workingDir, 'functions');
7
+ export const collectBumpInput = async () => {
8
+ const functionDir = (functionPath) => path.basename(path.dirname(path.dirname(functionPath)));
9
+ const versionedFunctions = functionDefinitions(baseFunctionsPath);
10
+ const functions = versionedFunctions.reduce((acc, { schema: { label }, path: functionPath }) => {
11
+ const name = functionDir(functionPath);
12
+ acc[name] = label;
13
+ return acc;
14
+ }, {});
15
+ const dirName = (await prompts({
16
+ choices: Object.keys(functions).map((name) => ({
17
+ title: functions[name],
18
+ value: name,
19
+ })),
20
+ initial: 0,
21
+ message: 'Which function do you want to bump?',
22
+ name: 'functionName',
23
+ type: 'select',
24
+ })).functionName;
25
+ const [[major, minor]] = versionedFunctions
26
+ .filter(({ path: functionPath }) => functionDir(functionPath) === dirName)
27
+ .sort(({ version: a }, { version: b }) => parseFloat(a) - parseFloat(b))
28
+ .slice(-1)
29
+ .map(({ version }) => version.split('.').map(Number));
30
+ const majorVersion = `${major + 1}.0`;
31
+ const minorVersion = `${major}.${minor + 1}`;
32
+ const { bumpMajor } = (await prompts({
33
+ active: majorVersion,
34
+ inactive: minorVersion,
35
+ initial: false,
36
+ message: `To which version do you want to bump your function?`,
37
+ name: 'bumpMajor',
38
+ type: 'toggle',
39
+ }));
40
+ return {
41
+ currentVersion: `${major}.${minor}`,
42
+ dirName,
43
+ newVersion: bumpMajor ? majorVersion : minorVersion,
44
+ };
45
+ };
46
+ export const replaceVersionInWitFile = ({ currentVersion, dirName, newVersion, targetDir, }) => {
47
+ const witFilePath = path.join(targetDir, 'wit', 'world.wit');
48
+ const witFileContent = fs.readFileSync(witFilePath, 'utf8');
49
+ const lowercasedFunctionName = dirName.toLowerCase();
50
+ const updatedWitFileContent = witFileContent.replace(`${lowercasedFunctionName}@${currentVersion}.0`, `${lowercasedFunctionName}@${newVersion}.0`);
51
+ fs.writeFileSync(witFilePath, updatedWitFileContent, 'utf8');
52
+ };
53
+ export const replaceVersionInCargoTomlFile = ({ currentVersion, newVersion, targetDir, }) => {
54
+ const cargoTomlFilePath = path.join(targetDir, 'Cargo.toml');
55
+ const cargoTomlFileContent = fs.readFileSync(cargoTomlFilePath, 'utf8');
56
+ const updatedCargoTomlFileContent = cargoTomlFileContent.replace(`version = "${currentVersion}.0"`, `version = "${newVersion}.0"`);
57
+ fs.writeFileSync(cargoTomlFilePath, updatedCargoTomlFileContent, 'utf8');
58
+ };
59
+ //# sourceMappingURL=functionVersionBump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionVersionBump.js","sourceRoot":"","sources":["../../src/functions/functionVersionBump.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import chalk from 'chalk';
2
+ import fetch, { fileFromSync, FormData } from 'node-fetch';
3
+ import path from 'path';
4
+ import FusionAuth from '../utils/login';
5
+ import Config from './config';
6
+ import { functionDefinitions, stringifyDefinitions, zipFunctionDefinitions, } from './functionDefinitions';
7
+ const workingDir = process.cwd();
8
+ export const logResult = ({ status, name, version, error }, operation) => {
9
+ const delimiter = version ? '-' : '';
10
+ if (status === 'ok') {
11
+ console.log(`${chalk.green(`✔`)} ${operation} ${name}${delimiter}${version ?? ''}.`);
12
+ }
13
+ else {
14
+ console.log(`${chalk.red(`✖`)} ${operation} ${name}${delimiter}${version ?? ''} failed. Errors: ${JSON.stringify(error)}.`);
15
+ }
16
+ };
17
+ const uploadAppFunctions = async (functionDefinitionsFile, functionsJson, config) => {
18
+ const fusionAuth = new FusionAuth(config);
19
+ const form = new FormData();
20
+ form.append('functions', functionsJson);
21
+ form.append('options', JSON.stringify({ compile: !config.skipCompile }));
22
+ form.append('file', fileFromSync(functionDefinitionsFile));
23
+ const applicationId = await config.applicationId();
24
+ if (!applicationId) {
25
+ throw new Error("Couldn't publish functions, Error: application id not found");
26
+ }
27
+ const url = `${config.builderApiUrl}/artifacts/actions/${applicationId}/functions`;
28
+ return fetch(url, {
29
+ agent: config.agent,
30
+ body: form,
31
+ headers: {
32
+ Authorization: `Bearer ${fusionAuth.jwt()}`,
33
+ },
34
+ method: 'POST',
35
+ }).then(async (res) => {
36
+ switch (res.status) {
37
+ case 401:
38
+ case 403: {
39
+ await fusionAuth.ensureLogin();
40
+ return uploadAppFunctions(functionDefinitionsFile, functionsJson, config);
41
+ }
42
+ case 201: {
43
+ const { created, updated, deleted, compiled } = (await res.json());
44
+ created.forEach((result) => logResult(result, 'Create:'));
45
+ updated.forEach((result) => logResult(result, 'Update:'));
46
+ deleted.forEach((result) => logResult(result, 'Delete:'));
47
+ if (!config.skipCompile) {
48
+ const compiledStatus = compiled ? 'ok' : 'error';
49
+ logResult({ name: 'triggered', status: compiledStatus }, 'Compilation');
50
+ }
51
+ return {
52
+ message: 'Your functions are published to your application.',
53
+ success: true,
54
+ };
55
+ }
56
+ case 409: {
57
+ const { created, updated, deleted, message } = (await res.json());
58
+ created.forEach((result) => logResult(result, 'Create:'));
59
+ updated.forEach((result) => logResult(result, 'Update:'));
60
+ deleted.forEach((result) => logResult(result, 'Delete:'));
61
+ return {
62
+ message: message ?? '409 Conflict',
63
+ success: false,
64
+ };
65
+ }
66
+ default:
67
+ throw new Error(`Couldn't publish functions, Error: ${res.status},${await res.text()}`);
68
+ }
69
+ });
70
+ };
71
+ const publishFunctions = async (config) => {
72
+ const functionsDir = path.join(workingDir, 'functions');
73
+ const zipFile = zipFunctionDefinitions(functionsDir, config.includes);
74
+ const functions = functionDefinitions(functionsDir);
75
+ const functionsJson = stringifyDefinitions(functions);
76
+ const { success, message } = await uploadAppFunctions(zipFile, functionsJson, config);
77
+ if (success) {
78
+ console.log(`\n${chalk.green.underline(`✔ ${message}`)}`);
79
+ }
80
+ else {
81
+ console.log(`\n${chalk.red.underline(`✖ ${message}`)}`);
82
+ }
83
+ };
84
+ const publishAppFunctions = async ({ skipCompile, }) => {
85
+ const config = new Config({ skipCompile });
86
+ console.log(chalk.bold(`\nPublishing to ${config.host} (${config.zone})`));
87
+ await publishFunctions(config);
88
+ };
89
+ export default publishAppFunctions;
90
+ //# sourceMappingURL=publishAppFunctions.js.map