@betty-blocks/cli 26.0.0-alpha.1 → 26.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/build/bb-blocks-new.js +23 -0
  2. package/build/bb-blocks-new.js.map +1 -0
  3. package/build/bb-blocks-publish.js +98 -0
  4. package/build/bb-blocks-publish.js.map +1 -0
  5. package/build/bb-blocks-release.js +18 -0
  6. package/build/bb-blocks-release.js.map +1 -0
  7. package/build/bb-blocks.js +17 -0
  8. package/build/bb-blocks.js.map +1 -0
  9. package/build/bb-bundle-init.js +33 -0
  10. package/build/bb-bundle-init.js.map +1 -0
  11. package/build/bb-bundle.js +17 -0
  12. package/build/bb-bundle.js.map +1 -0
  13. package/build/bb-components-build.js +416 -0
  14. package/build/bb-components-build.js.map +1 -0
  15. package/build/bb-components-create.js +41 -0
  16. package/build/bb-components-create.js.map +1 -0
  17. package/build/bb-components-generate.js +168 -0
  18. package/build/bb-components-generate.js.map +1 -0
  19. package/build/bb-components-publish-bundle.js +50 -0
  20. package/build/bb-components-publish-bundle.js.map +1 -0
  21. package/build/bb-components-publish.js +57 -0
  22. package/build/bb-components-publish.js.map +1 -0
  23. package/build/bb-components-serve.js +35 -0
  24. package/build/bb-components-serve.js.map +1 -0
  25. package/build/bb-components.js +29 -0
  26. package/build/bb-components.js.map +1 -0
  27. package/build/bb-functions-bump.js +37 -0
  28. package/build/bb-functions-bump.js.map +1 -0
  29. package/build/bb-functions-init.js +31 -0
  30. package/build/bb-functions-init.js.map +1 -0
  31. package/build/bb-functions-login.js +17 -0
  32. package/build/bb-functions-login.js.map +1 -0
  33. package/build/bb-functions-logout.js +10 -0
  34. package/build/bb-functions-logout.js.map +1 -0
  35. package/build/bb-functions-new.js +25 -0
  36. package/build/bb-functions-new.js.map +1 -0
  37. package/build/bb-functions-publish.js +52 -0
  38. package/build/bb-functions-publish.js.map +1 -0
  39. package/build/bb-functions-validate.js +32 -0
  40. package/build/bb-functions-validate.js.map +1 -0
  41. package/build/bb-functions.js +29 -0
  42. package/build/bb-functions.js.map +1 -0
  43. package/build/bb.js +27 -0
  44. package/build/bb.js.map +1 -0
  45. package/build/blocks/blockDefinitions.js +55 -0
  46. package/build/blocks/blockDefinitions.js.map +1 -0
  47. package/build/blocks/publishBlocks.js +54 -0
  48. package/build/blocks/publishBlocks.js.map +1 -0
  49. package/build/blocks/releaseBlocks.js +78 -0
  50. package/build/blocks/releaseBlocks.js.map +1 -0
  51. package/build/components/bb-components-functions.js +40 -0
  52. package/build/components/bb-components-functions.js.map +1 -0
  53. package/build/components/comments.js +78 -0
  54. package/build/components/comments.js.map +1 -0
  55. package/build/components/compatibility.js +60 -0
  56. package/build/components/compatibility.js.map +1 -0
  57. package/build/components/transformers/index.js +36 -0
  58. package/build/components/transformers/index.js.map +1 -0
  59. package/build/components-build/index.js +3 -0
  60. package/build/components-build/index.js.map +1 -0
  61. package/build/components-build/reportDiagnostics.js +13 -0
  62. package/build/components-build/reportDiagnostics.js.map +1 -0
  63. package/build/components-build/styles.js +87 -0
  64. package/build/components-build/styles.js.map +1 -0
  65. package/build/functions/config.js +190 -0
  66. package/build/functions/config.js.map +1 -0
  67. package/build/functions/createWasmDefinitionFiles.js +61 -0
  68. package/build/functions/createWasmDefinitionFiles.js.map +1 -0
  69. package/build/functions/functionDefinitions.js +211 -0
  70. package/build/functions/functionDefinitions.js.map +1 -0
  71. package/build/functions/functionVersionBump.js +59 -0
  72. package/build/functions/functionVersionBump.js.map +1 -0
  73. package/build/functions/publishAppFunctions.js +90 -0
  74. package/build/functions/publishAppFunctions.js.map +1 -0
  75. package/build/functions/publishWasmBlockStoreFunctions.js +99 -0
  76. package/build/functions/publishWasmBlockStoreFunctions.js.map +1 -0
  77. package/build/functions/utils.js +20 -0
  78. package/build/functions/utils.js.map +1 -0
  79. package/build/functions/validateFunctions.js +20 -0
  80. package/build/functions/validateFunctions.js.map +1 -0
  81. package/build/functions/validations.js +140 -0
  82. package/build/functions/validations.js.map +1 -0
  83. package/build/interactions/compatibility.js +84 -0
  84. package/build/interactions/compatibility.js.map +1 -0
  85. package/build/interactions/diagnostics.js +23 -0
  86. package/build/interactions/diagnostics.js.map +1 -0
  87. package/build/types.js +40 -0
  88. package/build/types.js.map +1 -0
  89. package/build/utils/arguments.js +6 -0
  90. package/build/utils/arguments.js.map +1 -0
  91. package/build/utils/checkPackageVersion.js +10 -0
  92. package/build/utils/checkPackageVersion.js.map +1 -0
  93. package/build/utils/checkUpdateAvailable.js +65 -0
  94. package/build/utils/checkUpdateAvailable.js.map +1 -0
  95. package/build/utils/fusionAuth.js +108 -0
  96. package/build/utils/fusionAuth.js.map +1 -0
  97. package/build/utils/hash.js +3 -0
  98. package/build/utils/hash.js.map +1 -0
  99. package/build/utils/login.js +116 -0
  100. package/build/utils/login.js.map +1 -0
  101. package/build/utils/pick.js +16 -0
  102. package/build/utils/pick.js.map +1 -0
  103. package/build/utils/readFilesByType.js +23 -0
  104. package/build/utils/readFilesByType.js.map +1 -0
  105. package/build/utils/rootDir.js +4 -0
  106. package/build/utils/rootDir.js.map +1 -0
  107. package/build/utils/serveComponentSet.js +52 -0
  108. package/build/utils/serveComponentSet.js.map +1 -0
  109. package/build/utils/transpile.js +25 -0
  110. package/build/utils/transpile.js.map +1 -0
  111. package/build/utils/uploadBlob.js +56 -0
  112. package/build/utils/uploadBlob.js.map +1 -0
  113. package/build/utils/validation.js +74 -0
  114. package/build/utils/validation.js.map +1 -0
  115. package/build/validations/component.js +56 -0
  116. package/build/validations/component.js.map +1 -0
  117. package/build/validations/constants.js +208 -0
  118. package/build/validations/constants.js.map +1 -0
  119. package/build/validations/function-block-validations/index.js +72 -0
  120. package/build/validations/function-block-validations/index.js.map +1 -0
  121. package/build/validations/interaction.js +22 -0
  122. package/build/validations/interaction.js.map +1 -0
  123. package/build/validations/prefab/action.js +99 -0
  124. package/build/validations/prefab/action.js.map +1 -0
  125. package/build/validations/prefab/component.js +290 -0
  126. package/build/validations/prefab/component.js.map +1 -0
  127. package/build/validations/prefab/componentOption.js +176 -0
  128. package/build/validations/prefab/componentOption.js.map +1 -0
  129. package/build/validations/prefab/interaction.js +38 -0
  130. package/build/validations/prefab/interaction.js.map +1 -0
  131. package/build/validations/prefab/linkedOption.js +39 -0
  132. package/build/validations/prefab/linkedOption.js.map +1 -0
  133. package/build/validations/prefab/linkedPartial.js +30 -0
  134. package/build/validations/prefab/linkedPartial.js.map +1 -0
  135. package/build/validations/prefab/variable.js +36 -0
  136. package/build/validations/prefab/variable.js.map +1 -0
  137. package/build/validations/prefab.js +66 -0
  138. package/build/validations/prefab.js.map +1 -0
  139. package/build/validations/styles.js +103 -0
  140. package/build/validations/styles.js.map +1 -0
  141. package/package.json +4 -4
  142. package/build/src/bb-blocks-new.js +0 -9970
  143. package/build/src/bb-blocks-publish.js +0 -25832
  144. package/build/src/bb-blocks-release.js +0 -15548
  145. package/build/src/bb-blocks.js +0 -2149
  146. package/build/src/bb-bundle-init.js +0 -6666
  147. package/build/src/bb-bundle.js +0 -2639
  148. package/build/src/bb-components-build.js +0 -267853
  149. package/build/src/bb-components-create.js +0 -6677
  150. package/build/src/bb-components-generate.js +0 -6805
  151. package/build/src/bb-components-publish-bundle.js +0 -43978
  152. package/build/src/bb-components-publish.js +0 -43985
  153. package/build/src/bb-components-serve.js +0 -15958
  154. package/build/src/bb-components.js +0 -2157
  155. package/build/src/bb-functions-bump.js +0 -17897
  156. package/build/src/bb-functions-init.js +0 -4257
  157. package/build/src/bb-functions-login.js +0 -15460
  158. package/build/src/bb-functions-logout.js +0 -15454
  159. package/build/src/bb-functions-new.js +0 -12414
  160. package/build/src/bb-functions-publish.js +0 -25806
  161. package/build/src/bb-functions-validate.js +0 -25473
  162. package/build/src/bb-functions.js +0 -2157
  163. package/build/src/bb.js +0 -2743
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishAppFunctions.js","sourceRoot":"","sources":["../../src/functions/publishAppFunctions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { camel } from 'case';
2
+ import chalk from 'chalk';
3
+ import fs from 'fs-extra';
4
+ import fetch, { fileFromSync, FormData } from 'node-fetch';
5
+ import path from 'path';
6
+ import FusionAuth from '../utils/login';
7
+ import Config from './config';
8
+ export const publishWasmBlockStoreFunctions = async (functionsPath, functionPaths) => {
9
+ const config = new Config();
10
+ for (const functionPath of functionPaths) {
11
+ await publishWasmFunction(functionsPath, functionPath, config);
12
+ }
13
+ };
14
+ const publishWasmFunction = async (functionsPath, functionPath, config) => {
15
+ const functionDir = path.join(functionsPath, functionPath);
16
+ const wasmFile = getWasmFileFromDir(functionDir);
17
+ if (!wasmFile) {
18
+ console.log(chalk.yellow(`! No .wasm file found in ${functionDir}, skipping...`));
19
+ return;
20
+ }
21
+ const functionJson = getFunctionJsonFromDir(functionDir);
22
+ if (!functionJson) {
23
+ console.log(chalk.yellow(`! No function.json file found in ${functionDir}, skipping...`));
24
+ return;
25
+ }
26
+ const blockName = path.basename(path.dirname(functionPath));
27
+ await uploadBlock({
28
+ blockName,
29
+ config,
30
+ file: wasmFile,
31
+ functionJson,
32
+ });
33
+ console.log(chalk.green.underline(`✔ Published ${functionPath}`));
34
+ };
35
+ const getWasmFileFromDir = (functionDir) => {
36
+ const files = fs.readdirSync(functionDir);
37
+ for (const file of files) {
38
+ if (file.endsWith('.wasm')) {
39
+ return fileFromSync(path.join(functionDir, file));
40
+ }
41
+ }
42
+ return null;
43
+ };
44
+ const getFunctionJsonFromDir = (functionDir) => {
45
+ const functionJsonPath = path.join(functionDir, 'function.json');
46
+ if (fs.existsSync(functionJsonPath)) {
47
+ const version = path.basename(functionDir);
48
+ const name = camel(path.basename(path.dirname(functionDir)));
49
+ const json = {
50
+ ...fs.readJsonSync(functionJsonPath),
51
+ name,
52
+ version,
53
+ };
54
+ return stringifyDefinition(json);
55
+ }
56
+ return null;
57
+ };
58
+ const stringifyDefinition = (definition) => {
59
+ const updatedDefinition = {
60
+ ...definition,
61
+ options: JSON.stringify(definition.options ?? []),
62
+ paths: JSON.stringify(definition.paths ?? {}),
63
+ };
64
+ return JSON.stringify([updatedDefinition]);
65
+ };
66
+ const uploadBlock = async ({ file, functionJson, blockName, config, }) => {
67
+ const fusionAuth = new FusionAuth(config);
68
+ const { blockstoreApiUrl, agent } = config;
69
+ const applicationId = await config.applicationId();
70
+ if (!applicationId) {
71
+ throw new Error("Couldn't publish block(s), Error: application id not found");
72
+ }
73
+ const form = new FormData();
74
+ form.append('name', blockName);
75
+ form.append('file', file);
76
+ form.append('functions', functionJson);
77
+ const url = `${blockstoreApiUrl}/blocks/publish?type=wasm-function`;
78
+ return fetch(url, {
79
+ agent,
80
+ body: form,
81
+ headers: {
82
+ Accept: 'application/json',
83
+ ApplicationId: applicationId,
84
+ Authorization: `Bearer ${fusionAuth.jwt()}`,
85
+ },
86
+ method: 'POST',
87
+ }).then(async (res) => {
88
+ if (res.status === 401 || res.status === 403) {
89
+ await fusionAuth.ensureLogin();
90
+ return uploadBlock({ blockName, config, file, functionJson });
91
+ }
92
+ if (res.status !== 201) {
93
+ const error = await res.text();
94
+ throw new Error(`Couldn't publish block(s), Error: ${res.status}, ${error.match('## Connection details') ? 'Something went wrong' : error}`);
95
+ }
96
+ return true;
97
+ });
98
+ };
99
+ //# sourceMappingURL=publishWasmBlockStoreFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishWasmBlockStoreFunctions.js","sourceRoot":"","sources":["../../src/functions/publishWasmBlockStoreFunctions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import fs from 'fs-extra';
2
+ import https, {} from 'https';
3
+ import path from 'path';
4
+ export const setHttpsAgent = (agentOptions) => {
5
+ let options;
6
+ if (agentOptions) {
7
+ options = ['ca', 'cert', 'key'].reduce((acc, key) => {
8
+ if (typeof agentOptions[key] === 'string') {
9
+ return {
10
+ ...acc,
11
+ [key]: fs.readFileSync(path.resolve(agentOptions[key])),
12
+ };
13
+ }
14
+ return acc;
15
+ }, agentOptions);
16
+ }
17
+ const agent = agentOptions && options ? new https.Agent(options) : undefined;
18
+ return agent;
19
+ };
20
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/functions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,EAAE,EAAqB,MAAM,OAAO,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,YAA2B,EACF,EAAE;IAC3B,IAAI,OAAiC,CAAC;IAEtC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,GAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAW,CAAC,MAAM,CAC/C,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACX,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO;oBACL,GAAG,GAAG;oBACN,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAW,CAAC,CAAC;iBAClE,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC,EACD,YAAY,CACb,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7E,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import chalk from 'chalk';
2
+ import Config from './config';
3
+ import { FunctionValidator, logValidationResult } from './validations';
4
+ export const validateFunctions = async (isWasmFunctionProject, baseFunctionsPath) => {
5
+ const config = new Config();
6
+ const validator = new FunctionValidator(config, baseFunctionsPath);
7
+ await validator.initSchema();
8
+ console.log(chalk.bold(`Validating functions in ${baseFunctionsPath}`));
9
+ const results = await validator.validateFunctions({ isWasmFunctionProject });
10
+ results.forEach(logValidationResult);
11
+ const valid = results.every((result) => result.status === 'ok');
12
+ if (valid) {
13
+ console.log(`\n${chalk.green.underline(`✔ All your functions are valid and ready to be published!`)}`);
14
+ }
15
+ else {
16
+ console.log(`\n${chalk.red.underline(`✖ Certain functions in your project are invalid.`)}`);
17
+ }
18
+ return { valid };
19
+ };
20
+ //# sourceMappingURL=validateFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateFunctions.js","sourceRoot":"","sources":["../../src/functions/validateFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,qBAA8B,EAC9B,iBAAyB,EACI,EAAE;IAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACnE,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAE7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAExE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IAEhE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS,CACxB,2DAA2D,CAC5D,EAAE,CACJ,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CACtB,kDAAkD,CACnD,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1,140 @@
1
+ import chalk from 'chalk';
2
+ import fs from 'fs-extra';
3
+ import { ValidationError, Validator, ValidatorResult } from 'jsonschema';
4
+ import fetch from 'node-fetch';
5
+ import path from 'path';
6
+ import Config from './config';
7
+ import { functionDefinitions, isFunctionVersion, } from './functionDefinitions';
8
+ const fetchRemoteSchema = async (schemaUrl, config) => {
9
+ const res = await fetch(schemaUrl, { agent: config.agent });
10
+ const json = await res.json();
11
+ return json;
12
+ };
13
+ const importNextSchema = async (validator, schemaId, config) => {
14
+ const schemaJSON = await fetchRemoteSchema(schemaId, config);
15
+ validator.addSchema(schemaJSON, schemaId);
16
+ const nextSchemaId = validator.unresolvedRefs.shift();
17
+ if (!nextSchemaId) {
18
+ return validator;
19
+ }
20
+ return importNextSchema(validator, nextSchemaId, config);
21
+ };
22
+ const importSchema = async (validator, config) => {
23
+ const functionSchemaUrl = config.schemaUrl + config.functionSchemaPath;
24
+ return importNextSchema(validator, functionSchemaUrl, config);
25
+ };
26
+ const functionValidator = async (config) => {
27
+ const validator = new Validator();
28
+ return importSchema(validator, config);
29
+ };
30
+ const validateFunctionDefinition = (validator, definition) => {
31
+ const functionSchemaId = Object.keys(validator.schemas).find((k) => k.match(/function\.json$/));
32
+ if (!functionSchemaId) {
33
+ throw new Error(`Cannot find Function schema Id, ${functionSchemaId}`);
34
+ }
35
+ const functionSchema = validator.schemas[functionSchemaId];
36
+ return validator.validate(definition, functionSchema);
37
+ };
38
+ const forceVersion = ({ path: functionPath }, functionsDir) => {
39
+ if (!isFunctionVersion(path.dirname(functionPath), functionsDir)) {
40
+ throw new Error(`${path.dirname(functionPath)} does not apply as a valid version directory`);
41
+ }
42
+ };
43
+ const validateSchema = (functionJson, validator) => {
44
+ const { name, version, path: definitionPath, schema } = functionJson;
45
+ const { errors } = validateFunctionDefinition(validator, schema);
46
+ const status = errors.length ? 'error' : 'ok';
47
+ return {
48
+ errors,
49
+ functionName: `${name}-${version}`,
50
+ path: definitionPath,
51
+ status,
52
+ };
53
+ };
54
+ const validateWasmProjectStructure = (functionDir) => {
55
+ const functionFiles = fs.readdirSync(functionDir, {
56
+ withFileTypes: true,
57
+ });
58
+ const hasWasmFile = functionFiles.some((file) => file.name.endsWith('.wasm'));
59
+ const errors = [];
60
+ if (!hasWasmFile) {
61
+ errors.push(new Error(`Missing .wasm file in ${functionDir}`));
62
+ }
63
+ return {
64
+ errors,
65
+ status: errors.length ? 'error' : 'ok',
66
+ };
67
+ };
68
+ const mergeValidationResults = (schemaResult, wasmResult = null) => {
69
+ if (!wasmResult) {
70
+ return schemaResult;
71
+ }
72
+ const mergedErrors = [...schemaResult.errors, ...wasmResult.errors];
73
+ const status = mergedErrors.length ? 'error' : 'ok';
74
+ return {
75
+ ...schemaResult,
76
+ errors: mergedErrors,
77
+ status,
78
+ };
79
+ };
80
+ class FunctionValidator {
81
+ schemaValidator;
82
+ config;
83
+ functionsDir;
84
+ constructor(config, functionsDir) {
85
+ this.config = config;
86
+ this.schemaValidator = new Validator();
87
+ this.functionsDir = functionsDir;
88
+ }
89
+ async initSchema() {
90
+ await importSchema(this.schemaValidator, this.config);
91
+ }
92
+ validateFunction(definition, isWasmFunctionProject) {
93
+ const functionPath = definition.path;
94
+ const functionName = functionPath;
95
+ try {
96
+ forceVersion(definition, this.functionsDir);
97
+ const validatedSchema = validateSchema(definition, this.schemaValidator);
98
+ let validatedWasmStructure = null;
99
+ if (isWasmFunctionProject) {
100
+ const functionDir = path.dirname(functionPath);
101
+ validatedWasmStructure = validateWasmProjectStructure(functionDir);
102
+ }
103
+ return mergeValidationResults(validatedSchema, validatedWasmStructure);
104
+ }
105
+ catch (error) {
106
+ const message = error instanceof Error ? error.message : String(error);
107
+ return {
108
+ errors: [new Error(message)],
109
+ functionName,
110
+ path: functionPath,
111
+ status: 'error',
112
+ };
113
+ }
114
+ }
115
+ async validateFunctions({ functionName, blockFunctions, isWasmFunctionProject = false, }) {
116
+ const definitions = functionDefinitions(this.functionsDir, true);
117
+ const functions = blockFunctions ?? definitions;
118
+ const validations = [];
119
+ functions.forEach((definition) => {
120
+ const preleadingPath = path.join(this.functionsDir, functionName ?? '', path.sep);
121
+ if (definition.path.indexOf(preleadingPath) === 0) {
122
+ validations.push(this.validateFunction(definition, isWasmFunctionProject));
123
+ }
124
+ });
125
+ return Promise.all(validations);
126
+ }
127
+ }
128
+ const logValidationResult = ({ path: functionPath, status, functionName, errors, }) => {
129
+ if (status === 'ok') {
130
+ const mark = chalk.green(`✔`);
131
+ console.log(`${mark} Validate: ${functionName}`);
132
+ }
133
+ else {
134
+ const msg = chalk.red(`${errors.join('\n\t')}`);
135
+ const mark = chalk.red(`✖`);
136
+ console.log(`${mark} Validate: ${functionName ?? functionPath}\n\t${msg}`);
137
+ }
138
+ };
139
+ export { FunctionValidator, functionValidator, logValidationResult, validateSchema, };
140
+ //# sourceMappingURL=validations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validations.js","sourceRoot":"","sources":["../../src/functions/validations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import Case from 'case';
2
+ import path from 'path';
3
+ import * as ts from 'typescript';
4
+ import {} from '../types';
5
+ const allowedTypes = [
6
+ 'Event',
7
+ 'Locale',
8
+ 'Page',
9
+ 'PageVariable',
10
+ 'PageVariableId',
11
+ 'boolean',
12
+ 'number',
13
+ 'string',
14
+ 'unknown',
15
+ 'void',
16
+ ];
17
+ export default (filename) => {
18
+ if (!filename)
19
+ throw new Error(`unable to determine interaction name from ${filename}`);
20
+ const program = ts.createProgram([filename], {});
21
+ const typeChecker = program.getTypeChecker();
22
+ const sourceFile = program.getSourceFile(filename);
23
+ if (!sourceFile)
24
+ throw new Error('no source file');
25
+ const interactionName = Case.camel(path.basename(filename).replace(/.ts/, ''));
26
+ const interaction = {};
27
+ // Loop through the root AST nodes of the file
28
+ ts.forEachChild(sourceFile, (node) => {
29
+ if (ts.isFunctionDeclaration(node)) {
30
+ // name
31
+ const functionName = node.name ? node.name.text : '';
32
+ if (functionName !== interactionName) {
33
+ throw new RangeError('file contains multiple statements');
34
+ }
35
+ interaction.name = functionName;
36
+ interaction.parameters = {};
37
+ // return type
38
+ const typeNode = node.type;
39
+ if (!typeNode) {
40
+ throw new Error(`You forgot to declare a type for ${interactionName}`);
41
+ }
42
+ const returnType = typeChecker.typeToString(typeChecker.getTypeFromTypeNode(typeNode));
43
+ interaction.type = Case.pascal(returnType);
44
+ if (node.parameters.length > 1) {
45
+ throw new Error(`Only one parameter is allowed for ${interactionName}`);
46
+ }
47
+ const [firstParameter] = node.parameters;
48
+ if (firstParameter) {
49
+ if (!firstParameter.type) {
50
+ throw new Error(`You forgot to add a type to the parameter "${firstParameter.name.getText()}" for ${interactionName}`);
51
+ }
52
+ const t = typeChecker.getTypeFromTypeNode(firstParameter.type);
53
+ const parameters = JSON.parse(typeChecker
54
+ .typeToString(t)
55
+ .replace(/;(?!.*;)/g, '')
56
+ .replace(/;/g, ',')
57
+ .replace(/(\w+)/g, '"$1"'));
58
+ Object.entries(parameters).forEach(([paramName, paramType]) => {
59
+ if (!allowedTypes.includes(paramType)) {
60
+ throw new TypeError(`unsupported type for: ${paramName}`);
61
+ }
62
+ parameters[paramName] = Case.pascal(paramType);
63
+ });
64
+ interaction.parameters = parameters;
65
+ }
66
+ // function body
67
+ const functionBody = node.getText(sourceFile);
68
+ if (!functionBody) {
69
+ throw new Error(`You forgot to add code to your interaction for ${interactionName}`);
70
+ }
71
+ interaction.function = ts.transpileModule(node.getText(), {}).outputText;
72
+ }
73
+ });
74
+ if (!interaction.function) {
75
+ throw new RangeError(`
76
+ expected expression of the kind
77
+ function ${interactionName}({ event, argument }: { event: Event, argument: ArgumentType }): ReturnType {
78
+ // body
79
+ }
80
+ `);
81
+ }
82
+ return interaction;
83
+ };
84
+ //# sourceMappingURL=compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../../src/interactions/compatibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { createProgram, flattenDiagnosticMessageText, getDefaultCompilerOptions, getPreEmitDiagnostics, } from 'typescript';
2
+ const reportDiagnostics = (diagnostics) => {
3
+ diagnostics.forEach((diagnostic) => {
4
+ let message = 'Error';
5
+ if (diagnostic.file) {
6
+ const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start ?? 0);
7
+ message += ` ${diagnostic.file.fileName} (${line + 1},${character + 1})`;
8
+ }
9
+ message += `: ${flattenDiagnosticMessageText(diagnostic.messageText, '\n')}`;
10
+ console.error(`\u001b[31m${message}\u001b[0m`);
11
+ });
12
+ };
13
+ export default (filePath) => {
14
+ const config = getDefaultCompilerOptions();
15
+ config.strict = true;
16
+ const program = createProgram([filePath], config);
17
+ const diagnostics = [...getPreEmitDiagnostics(program)];
18
+ if (diagnostics.length > 0) {
19
+ reportDiagnostics(diagnostics);
20
+ process.exit(1);
21
+ }
22
+ };
23
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/interactions/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,iBAAiB,GAAG,CAAC,WAAyB,EAAQ,EAAE;IAC5D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,6BAA6B,CACvE,UAAU,CAAC,KAAK,IAAI,CAAC,CACtB,CAAC;YACF,OAAO,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,KAAK,4BAA4B,CAC1C,UAAU,CAAC,WAAW,EACtB,IAAI,CACL,EAAE,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,CAAC,QAAgB,EAAQ,EAAE;IACxC,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAC;IAE3C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAErB,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
package/build/types.js ADDED
@@ -0,0 +1,40 @@
1
+ import { ICONS } from './validations/constants';
2
+ export var AllowedStateKeys;
3
+ (function (AllowedStateKeys) {
4
+ AllowedStateKeys["SELECTED"] = "selected";
5
+ AllowedStateKeys["HOVER"] = "hover";
6
+ AllowedStateKeys["FOCUS"] = "focus";
7
+ AllowedStateKeys["DISABLED"] = "disabled";
8
+ AllowedStateKeys["VALID"] = "valid";
9
+ AllowedStateKeys["INVALID"] = "invalid";
10
+ AllowedStateKeys["READONLY"] = "readOnly";
11
+ })(AllowedStateKeys || (AllowedStateKeys = {}));
12
+ export var InteractionOptionType;
13
+ (function (InteractionOptionType) {
14
+ InteractionOptionType["Boolean"] = "Boolean";
15
+ InteractionOptionType["Number"] = "Number";
16
+ InteractionOptionType["String"] = "String";
17
+ InteractionOptionType["Event"] = "Event";
18
+ InteractionOptionType["Void"] = "Void";
19
+ InteractionOptionType["Page"] = "Page";
20
+ InteractionOptionType["Locale"] = "Locale";
21
+ InteractionOptionType["Unknown"] = "Unknown";
22
+ })(InteractionOptionType || (InteractionOptionType = {}));
23
+ // TODO: Add support
24
+ export var InteractionOptionTypeToDo;
25
+ (function (InteractionOptionTypeToDo) {
26
+ InteractionOptionTypeToDo["Color"] = "Color";
27
+ InteractionOptionTypeToDo["Endpoint"] = "Endpoint";
28
+ InteractionOptionTypeToDo["Filter"] = "Filter";
29
+ InteractionOptionTypeToDo["Font"] = "Font";
30
+ InteractionOptionTypeToDo["Properties"] = "Properties";
31
+ InteractionOptionTypeToDo["Property"] = "Property";
32
+ InteractionOptionTypeToDo["Size"] = "Size";
33
+ InteractionOptionTypeToDo["Unit"] = "Unit";
34
+ })(InteractionOptionTypeToDo || (InteractionOptionTypeToDo = {}));
35
+ export var InteractionType;
36
+ (function (InteractionType) {
37
+ InteractionType["Custom"] = "Custom";
38
+ InteractionType["Global"] = "Global";
39
+ })(InteractionType || (InteractionType = {}));
40
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AA6EhD,MAAM,CAAN,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;IACrB,mCAAe,CAAA;IACf,mCAAe,CAAA;IACf,yCAAqB,CAAA;IACrB,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;AACvB,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,QAQ3B;AAuND,MAAM,CAAN,IAAY,qBASX;AATD,WAAY,qBAAqB;IAC/B,4CAAmB,CAAA;IACnB,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;IACjB,wCAAe,CAAA;IACf,sCAAa,CAAA;IACb,sCAAa,CAAA;IACb,0CAAiB,CAAA;IACjB,4CAAmB,CAAA;AACrB,CAAC,EATW,qBAAqB,KAArB,qBAAqB,QAShC;AAED,oBAAoB;AACpB,MAAM,CAAN,IAAY,yBASX;AATD,WAAY,yBAAyB;IACnC,4CAAe,CAAA;IACf,kDAAqB,CAAA;IACrB,8CAAiB,CAAA;IACjB,0CAAa,CAAA;IACb,sDAAyB,CAAA;IACzB,kDAAqB,CAAA;IACrB,0CAAa,CAAA;IACb,0CAAa,CAAA;AACf,CAAC,EATW,yBAAyB,KAAzB,yBAAyB,QASpC;AA+BD,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B"}