@sprucelabs/spruce-templates 22.1.13 → 22.2.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 (209) hide show
  1. package/build/addons/eq.addon.js.map +1 -0
  2. package/build/addons/escape.addon.js.map +1 -0
  3. package/build/addons/fieldDefinitionBodyPartial.addon.js.map +1 -0
  4. package/build/addons/fieldDefinitionOptions.addon.js.map +1 -0
  5. package/build/addons/fieldTypeEnum.addon.js.map +1 -0
  6. package/build/addons/fieldValue.addon.js.map +1 -0
  7. package/build/addons/gt.addon.js.map +1 -0
  8. package/build/addons/hasKeys.addon.js.map +1 -0
  9. package/build/addons/hasNoneCoreSchemaTemplateItems.addon.js.map +1 -0
  10. package/build/addons/importRelatedSchemas.addon.js.map +1 -0
  11. package/build/addons/index.js.map +1 -0
  12. package/build/addons/isDefined.addon.js.map +1 -0
  13. package/build/addons/json.addon.js.map +1 -0
  14. package/build/addons/neq.addon.js.map +1 -0
  15. package/build/addons/operators.addon.js.map +1 -0
  16. package/build/addons/pascalCase.addon.js.map +1 -0
  17. package/build/addons/permissionContractBuilder.addon.js.map +1 -0
  18. package/build/addons/schemaBodyPartial.addon.js.map +1 -0
  19. package/build/addons/schemaNamespacePath.addon.js.map +1 -0
  20. package/build/addons/schemaValuesPartial.addon.js.map +1 -0
  21. package/build/addons/valueTypeGenerator.addon.js.map +1 -0
  22. package/build/addons/valueTypeLiteral.addon.js.map +1 -0
  23. package/build/addons/valueTypeMapper.addon.js.map +1 -0
  24. package/build/dist/templates/directories/skill/.nvmrc +1 -0
  25. package/build/dist/templates/directories/skill/README.md +4 -0
  26. package/build/dist/templates/directories/skill/eslint.config.mjs +3 -0
  27. package/build/dist/templates/directories/skill/package.json.hbs +15 -0
  28. package/build/dist/templates/directories/skill/src/errors/SpruceError.ts.hbs +20 -0
  29. package/build/dist/templates/directories/skill/tsconfig.json +39 -0
  30. package/build/dist/templates/directories/vscode/.vscode/launch.json +58 -0
  31. package/build/dist/templates/directories/vscode/.vscode/settings.json +67 -0
  32. package/build/dist/templates/directories/vscode/.vscode/tasks.json +112 -0
  33. package/build/dist/templates/typescript/conversation/conversation.plugin.ts.hbs +1 -0
  34. package/build/dist/templates/typescript/conversation/conversation.topic.ts.hbs +19 -0
  35. package/build/dist/templates/typescript/deploy/deploy.plugin.ts.hbs +1 -0
  36. package/build/dist/templates/typescript/error/SpruceError.ts.hbs +31 -0
  37. package/build/dist/templates/typescript/error/error.plugin.ts.hbs +78 -0
  38. package/build/dist/templates/typescript/error/example.ts.hbs +10 -0
  39. package/build/dist/templates/typescript/error/options.types.ts.hbs +12 -0
  40. package/build/dist/templates/typescript/event/event.contract.ts.hbs +24 -0
  41. package/build/dist/templates/typescript/event/event.options.ts.hbs +11 -0
  42. package/build/dist/templates/typescript/event/events.contract.ts.hbs +24 -0
  43. package/build/dist/templates/typescript/event/listener.ts.hbs +23 -0
  44. package/build/dist/templates/typescript/event/listeners.ts.hbs +15 -0
  45. package/build/dist/templates/typescript/event/payload.builder.ts.hbs +15 -0
  46. package/build/dist/templates/typescript/log/transport.plugin.ts.hbs +14 -0
  47. package/build/dist/templates/typescript/permissions/contract.builder.ts.hbs +36 -0
  48. package/build/dist/templates/typescript/permissions/permission.plugin.ts.hbs +1 -0
  49. package/build/dist/templates/typescript/permissions/permissions.ts.hbs +13 -0
  50. package/build/dist/templates/typescript/permissions/permissions.types.ts.hbs +14 -0
  51. package/build/dist/templates/typescript/polish/polish.ts.hbs +67 -0
  52. package/build/dist/templates/typescript/sandbox/will-boot.listener.ts.hbs +109 -0
  53. package/build/dist/templates/typescript/schema/builder.ts.hbs +24 -0
  54. package/build/dist/templates/typescript/schema/core.schemas.types.ts.hbs +34 -0
  55. package/build/dist/templates/typescript/schema/example.ts.hbs +20 -0
  56. package/build/dist/templates/typescript/schema/fields/fieldClassMap.ts.hbs +16 -0
  57. package/build/dist/templates/typescript/schema/fields/fields.types.ts.hbs +1 -0
  58. package/build/dist/templates/typescript/schema/imported.schema.ts.hbs +1 -0
  59. package/build/dist/templates/typescript/schema/partials/fieldDefinitionBody.ts.hbs +12 -0
  60. package/build/dist/templates/typescript/schema/partials/schemaBody.ts.hbs +20 -0
  61. package/build/dist/templates/typescript/schema/partials/schemaValues.ts.hbs +7 -0
  62. package/build/dist/templates/typescript/schema/schema.plugin.ts.hbs +101 -0
  63. package/build/dist/templates/typescript/schema/schema.ts.hbs +12 -0
  64. package/build/dist/templates/typescript/schema/schemas.types.ts.hbs +44 -0
  65. package/build/dist/templates/typescript/schema/valueTypes.ts.hbs +67 -0
  66. package/build/dist/templates/typescript/store/Store.store.ts.hbs +95 -0
  67. package/build/dist/templates/typescript/store/store.plugin.ts.hbs +1 -0
  68. package/build/dist/templates/typescript/store/stores.ts.hbs +9 -0
  69. package/build/dist/templates/typescript/store/stores.types.ts.hbs +17 -0
  70. package/build/dist/templates/typescript/test/Test.test.ts.hbs +20 -0
  71. package/build/dist/templates/typescript/view/App.avc.ts.hbs +5 -0
  72. package/build/dist/templates/typescript/view/View.svc.ts.hbs +23 -0
  73. package/build/dist/templates/typescript/view/View.vc.ts.hbs +17 -0
  74. package/build/dist/templates/typescript/view/skill.theme.ts.hbs +70 -0
  75. package/build/dist/templates/typescript/view/view.plugin.ts.hbs +1 -0
  76. package/build/dist/templates/typescript/view/viewController.plugin.ts.hbs +3 -0
  77. package/build/dist/templates/typescript/view/views.ts.hbs +78 -0
  78. package/build/esm/addons/eq.addon.d.ts +1 -0
  79. package/build/esm/addons/eq.addon.js +4 -0
  80. package/build/esm/addons/escape.addon.d.ts +1 -0
  81. package/build/esm/addons/escape.addon.js +5 -0
  82. package/build/esm/addons/fieldDefinitionBodyPartial.addon.d.ts +1 -0
  83. package/build/esm/addons/fieldDefinitionBodyPartial.addon.js +8 -0
  84. package/build/esm/addons/fieldDefinitionOptions.addon.d.ts +1 -0
  85. package/build/esm/addons/fieldDefinitionOptions.addon.js +66 -0
  86. package/build/esm/addons/fieldTypeEnum.addon.d.ts +1 -0
  87. package/build/esm/addons/fieldTypeEnum.addon.js +9 -0
  88. package/build/esm/addons/fieldValue.addon.d.ts +1 -0
  89. package/build/esm/addons/fieldValue.addon.js +8 -0
  90. package/build/esm/addons/gt.addon.d.ts +1 -0
  91. package/build/esm/addons/gt.addon.js +4 -0
  92. package/build/esm/addons/hasKeys.addon.d.ts +1 -0
  93. package/build/esm/addons/hasKeys.addon.js +4 -0
  94. package/build/esm/addons/hasNoneCoreSchemaTemplateItems.addon.d.ts +1 -0
  95. package/build/esm/addons/hasNoneCoreSchemaTemplateItems.addon.js +6 -0
  96. package/build/esm/addons/importRelatedSchemas.addon.d.ts +1 -0
  97. package/build/esm/addons/importRelatedSchemas.addon.js +34 -0
  98. package/build/esm/addons/index.d.ts +23 -0
  99. package/build/esm/addons/index.js +23 -0
  100. package/build/esm/addons/isDefined.addon.d.ts +1 -0
  101. package/build/esm/addons/isDefined.addon.js +5 -0
  102. package/build/esm/addons/json.addon.d.ts +1 -0
  103. package/build/esm/addons/json.addon.js +7 -0
  104. package/build/esm/addons/neq.addon.d.ts +1 -0
  105. package/build/esm/addons/neq.addon.js +4 -0
  106. package/build/esm/addons/operators.addon.d.ts +1 -0
  107. package/build/esm/addons/operators.addon.js +15 -0
  108. package/build/esm/addons/pascalCase.addon.d.ts +1 -0
  109. package/build/esm/addons/pascalCase.addon.js +6 -0
  110. package/build/esm/addons/permissionContractBuilder.addon.d.ts +1 -0
  111. package/build/esm/addons/permissionContractBuilder.addon.js +4 -0
  112. package/build/esm/addons/schemaBodyPartial.addon.d.ts +1 -0
  113. package/build/esm/addons/schemaBodyPartial.addon.js +8 -0
  114. package/build/esm/addons/schemaNamespacePath.addon.d.ts +1 -0
  115. package/build/esm/addons/schemaNamespacePath.addon.js +18 -0
  116. package/build/esm/addons/schemaValuesPartial.addon.d.ts +1 -0
  117. package/build/esm/addons/schemaValuesPartial.addon.js +8 -0
  118. package/build/esm/addons/valueTypeGenerator.addon.d.ts +1 -0
  119. package/build/esm/addons/valueTypeGenerator.addon.js +15 -0
  120. package/build/esm/addons/valueTypeLiteral.addon.d.ts +1 -0
  121. package/build/esm/addons/valueTypeLiteral.addon.js +32 -0
  122. package/build/esm/addons/valueTypeMapper.addon.d.ts +1 -0
  123. package/build/esm/addons/valueTypeMapper.addon.js +9 -0
  124. package/build/esm/index.d.ts +138 -0
  125. package/build/esm/index.js +255 -0
  126. package/build/esm/templates/directories/skill/.nvmrc +1 -0
  127. package/build/esm/templates/directories/skill/README.md +4 -0
  128. package/build/esm/templates/directories/skill/eslint.config.mjs +3 -0
  129. package/build/esm/templates/directories/skill/package.json.hbs +15 -0
  130. package/build/esm/templates/directories/skill/src/.spruce/errors/options.types.ts +6 -0
  131. package/build/esm/templates/directories/skill/src/.spruce/features/event.plugin.ts +1 -0
  132. package/build/esm/templates/directories/skill/src/.spruce/skill.ts +8 -0
  133. package/build/esm/templates/directories/skill/src/errors/SpruceError.ts.hbs +20 -0
  134. package/build/esm/templates/directories/skill/src/index.ts +35 -0
  135. package/build/esm/templates/directories/skill/tsconfig.json +39 -0
  136. package/build/esm/templates/directories/vscode/.vscode/launch.json +58 -0
  137. package/build/esm/templates/directories/vscode/.vscode/settings.json +67 -0
  138. package/build/esm/templates/directories/vscode/.vscode/tasks.json +112 -0
  139. package/build/esm/templates/typescript/conversation/conversation.plugin.ts.hbs +1 -0
  140. package/build/esm/templates/typescript/conversation/conversation.topic.ts.hbs +19 -0
  141. package/build/esm/templates/typescript/deploy/deploy.plugin.ts.hbs +1 -0
  142. package/build/esm/templates/typescript/error/SpruceError.ts.hbs +31 -0
  143. package/build/esm/templates/typescript/error/error.plugin.ts.hbs +78 -0
  144. package/build/esm/templates/typescript/error/example.ts.hbs +10 -0
  145. package/build/esm/templates/typescript/error/options.types.ts.hbs +12 -0
  146. package/build/esm/templates/typescript/event/event.contract.ts.hbs +24 -0
  147. package/build/esm/templates/typescript/event/event.options.ts.hbs +11 -0
  148. package/build/esm/templates/typescript/event/events.contract.ts.hbs +24 -0
  149. package/build/esm/templates/typescript/event/listener.ts.hbs +23 -0
  150. package/build/esm/templates/typescript/event/listeners.ts.hbs +15 -0
  151. package/build/esm/templates/typescript/event/payload.builder.ts.hbs +15 -0
  152. package/build/esm/templates/typescript/log/transport.plugin.ts.hbs +14 -0
  153. package/build/esm/templates/typescript/permissions/contract.builder.ts.hbs +36 -0
  154. package/build/esm/templates/typescript/permissions/permission.plugin.ts.hbs +1 -0
  155. package/build/esm/templates/typescript/permissions/permissions.ts.hbs +13 -0
  156. package/build/esm/templates/typescript/permissions/permissions.types.ts.hbs +14 -0
  157. package/build/esm/templates/typescript/polish/polish.ts.hbs +67 -0
  158. package/build/esm/templates/typescript/sandbox/will-boot.listener.ts.hbs +109 -0
  159. package/build/esm/templates/typescript/schema/builder.ts.hbs +24 -0
  160. package/build/esm/templates/typescript/schema/core.schemas.types.ts.hbs +34 -0
  161. package/build/esm/templates/typescript/schema/example.ts.hbs +20 -0
  162. package/build/esm/templates/typescript/schema/fields/fieldClassMap.ts.hbs +16 -0
  163. package/build/esm/templates/typescript/schema/fields/fields.types.ts.hbs +1 -0
  164. package/build/esm/templates/typescript/schema/imported.schema.ts.hbs +1 -0
  165. package/build/esm/templates/typescript/schema/partials/fieldDefinitionBody.ts.hbs +12 -0
  166. package/build/esm/templates/typescript/schema/partials/schemaBody.ts.hbs +20 -0
  167. package/build/esm/templates/typescript/schema/partials/schemaValues.ts.hbs +7 -0
  168. package/build/esm/templates/typescript/schema/schema.plugin.ts.hbs +101 -0
  169. package/build/esm/templates/typescript/schema/schema.ts.hbs +12 -0
  170. package/build/esm/templates/typescript/schema/schemas.types.ts.hbs +44 -0
  171. package/build/esm/templates/typescript/schema/valueTypes.ts.hbs +67 -0
  172. package/build/esm/templates/typescript/store/Store.store.ts.hbs +95 -0
  173. package/build/esm/templates/typescript/store/store.plugin.ts.hbs +1 -0
  174. package/build/esm/templates/typescript/store/stores.ts.hbs +9 -0
  175. package/build/esm/templates/typescript/store/stores.types.ts.hbs +17 -0
  176. package/build/esm/templates/typescript/test/Test.test.ts.hbs +20 -0
  177. package/build/esm/templates/typescript/view/App.avc.ts.hbs +5 -0
  178. package/build/esm/templates/typescript/view/View.svc.ts.hbs +23 -0
  179. package/build/esm/templates/typescript/view/View.vc.ts.hbs +17 -0
  180. package/build/esm/templates/typescript/view/skill.theme.ts.hbs +70 -0
  181. package/build/esm/templates/typescript/view/view.plugin.ts.hbs +1 -0
  182. package/build/esm/templates/typescript/view/viewController.plugin.ts.hbs +3 -0
  183. package/build/esm/templates/typescript/view/views.ts.hbs +78 -0
  184. package/build/esm/types/templates.types.d.ts +121 -0
  185. package/build/esm/types/templates.types.js +5 -0
  186. package/build/esm/utilities/DirectoryTemplateUtility.d.ts +15 -0
  187. package/build/esm/utilities/DirectoryTemplateUtility.js +79 -0
  188. package/build/esm/utilities/KeyGeneratorUtility.d.ts +5 -0
  189. package/build/esm/utilities/KeyGeneratorUtility.js +6 -0
  190. package/build/esm/utilities/importExtractor.utility.d.ts +10 -0
  191. package/build/esm/utilities/importExtractor.utility.js +32 -0
  192. package/build/esm/utilities/templateImporter.utility.d.ts +4 -0
  193. package/build/esm/utilities/templateImporter.utility.js +18 -0
  194. package/build/esm/utilities/templateItem.utility.d.ts +6 -0
  195. package/build/esm/utilities/templateItem.utility.js +25 -0
  196. package/build/index.d.ts +3 -2
  197. package/build/index.js +4 -0
  198. package/build/index.js.map +1 -0
  199. package/build/templates/typescript/view/App.avc.ts.hbs +5 -0
  200. package/build/templates/typescript/view/views.ts.hbs +6 -1
  201. package/build/types/templates.types.d.ts +1 -0
  202. package/build/types/templates.types.js.map +1 -0
  203. package/build/utilities/DirectoryTemplateUtility.js.map +1 -0
  204. package/build/utilities/KeyGeneratorUtility.js.map +1 -0
  205. package/build/utilities/importExtractor.utility.js.map +1 -0
  206. package/build/utilities/templateImporter.utility.js.map +1 -0
  207. package/build/utilities/templateItem.utility.js.map +1 -0
  208. package/package.json +9 -9
  209. package/LICENSE +0 -21
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import handlebars from 'handlebars';
2
+ /* Quick way to do an equals check against 2 values */
3
+ handlebars.registerHelper('isDefined', function (value) {
4
+ return value !== undefined;
5
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import handlebars from 'handlebars';
2
+ /* Quick way to do an equals check against 2 values */
3
+ handlebars.registerHelper('json', function (arg1) {
4
+ //@ts-ignore // TODO how should this work in a typed environment?
5
+ const value = JSON.stringify(arg1);
6
+ return value;
7
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import handlebars from 'handlebars';
2
+ handlebars.registerHelper('neq', (val1, val2) => {
3
+ return val1 !== val2;
4
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import handlebars from 'handlebars';
2
+ handlebars.registerHelper({
3
+ eq: (v1, v2) => v1 === v2,
4
+ ne: (v1, v2) => v1 !== v2,
5
+ lt: (v1, v2) => v1 < v2,
6
+ gt: (v1, v2) => v1 > v2,
7
+ lte: (v1, v2) => v1 <= v2,
8
+ gte: (v1, v2) => v1 >= v2,
9
+ and(...params) {
10
+ return Array.prototype.every.call(params, Boolean);
11
+ },
12
+ or(...params) {
13
+ return Array.prototype.slice.call(params, 0, -1).some(Boolean);
14
+ },
15
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import handlebars from 'handlebars';
2
+ import { upperFirst } from 'lodash';
3
+ /* Start case (cap first letter, lower rest) */
4
+ handlebars.registerHelper('pascalCase', (val) => {
5
+ return upperFirst(val);
6
+ });
@@ -0,0 +1,4 @@
1
+ import handlebars from 'handlebars';
2
+ handlebars.registerHelper('permissionContractBuilder', function (permissionContract) {
3
+ return `buildPermissionContract(${JSON.stringify(permissionContract, null, 2)})`;
4
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import handlebars from 'handlebars';
4
+ const templatePath = path.join(__dirname, '..', 'templates', 'typescript');
5
+ const schemaBodyPartial = fs
6
+ .readFileSync(path.join(templatePath, 'schema/partials/schemaBody.ts.hbs'))
7
+ .toString();
8
+ handlebars.registerPartial('schemaBody', schemaBodyPartial);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import handlebars from 'handlebars';
2
+ handlebars.registerHelper('schemaNamespacePath', function (options) {
3
+ var _a, _b;
4
+ const { schemaTemplateItem } = options.hash;
5
+ if (!schemaTemplateItem) {
6
+ throw new Error(`schemaNamespacePath needs schemaTemplateItem=item`);
7
+ }
8
+ const { globalSchemaNamespace } = (_b = (_a = options === null || options === void 0 ? void 0 : options.data) === null || _a === void 0 ? void 0 : _a.root) !== null && _b !== void 0 ? _b : {};
9
+ if (!globalSchemaNamespace) {
10
+ throw new Error('schemaNamespacePath template addon needs globalSchemaNamespace in the root context.');
11
+ }
12
+ let path = `${globalSchemaNamespace}.${schemaTemplateItem.namespace}`;
13
+ if (schemaTemplateItem.schema.version) {
14
+ path += `.${schemaTemplateItem.schema.version}`;
15
+ }
16
+ path += `.${schemaTemplateItem.namePascal}`;
17
+ return path;
18
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import handlebars from 'handlebars';
4
+ const templatePath = path.join(__dirname, '..', 'templates', 'typescript');
5
+ const schemaValuesPartial = fs
6
+ .readFileSync(path.join(templatePath, 'schema/partials/schemaValues.ts.hbs'))
7
+ .toString();
8
+ handlebars.registerPartial('schemaValues', schemaValuesPartial);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import handlebars from 'handlebars';
2
+ import { upperFirst } from 'lodash';
3
+ handlebars.registerHelper('valueTypeGenerator', function (fieldDefinition, renderAs, func, options) {
4
+ const { data: { root: { fieldTemplateItems }, }, } = options;
5
+ const match = fieldTemplateItems.filter((item) => item.camelType === fieldDefinition.type)[0];
6
+ if (!match) {
7
+ throw new Error(`valueTypeGenerator.addon could not find a fieldTemplateItem with type ${fieldDefinition.type}`);
8
+ }
9
+ const type = handlebars.helpers.fieldTypeEnum(fieldDefinition, options);
10
+ const fieldDefinitionCopy = Object.assign({}, fieldDefinition);
11
+ // @ts-ignore
12
+ fieldDefinitionCopy === null || fieldDefinitionCopy === void 0 ? true : delete fieldDefinitionCopy.keyName;
13
+ const def = JSON.stringify(Object.assign(Object.assign({}, fieldDefinitionCopy), { type: '{{TYPE_ENUM}}' })).replace('"{{TYPE_ENUM}}"', type);
14
+ return `${func}(${def}, TemplateRenderAs.${upperFirst(renderAs)}, "${match.importAs}")`;
15
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ import { TemplateRenderAs } from '@sprucelabs/schema';
2
+ import { SCHEMA_VERSION_FALLBACK } from '@sprucelabs/spruce-skill-utils';
3
+ import handlebars from 'handlebars';
4
+ /* The type for the value of a field. the special case is if the field is of type schema, then we get the target's interface */
5
+ handlebars.registerHelper('valueTypeLiteral', function (namespace, nameCamel, version, fieldName, renderAs, options) {
6
+ var _a, _b, _c, _d;
7
+ if (!namespace) {
8
+ throw new Error('valueTypeLiteral needs namespace as 1st argument');
9
+ }
10
+ if (!nameCamel) {
11
+ throw new Error('valueTypeLiteral needs nameCamel as 2st argument');
12
+ }
13
+ if (!fieldName) {
14
+ throw new Error('valueTypeLiteral needs fieldName as 3st argument');
15
+ }
16
+ if (renderAs !== TemplateRenderAs.Value &&
17
+ renderAs !== TemplateRenderAs.Type &&
18
+ renderAs !== TemplateRenderAs.SchemaType) {
19
+ throw new Error('valueTypeLiteral helper needs renderAs to be "TemplateRenderAs.Type" or "TemplateRenderAs.Value" or "TemplateRenderAs.schemaType"');
20
+ }
21
+ const { data: { root }, } = options;
22
+ const valueTypes = root === null || root === void 0 ? void 0 : root.valueTypes;
23
+ if (!valueTypes) {
24
+ throw new Error('valueTypeLiteral helper needs a valuesTypes in the root context');
25
+ }
26
+ const v = version ? version : SCHEMA_VERSION_FALLBACK;
27
+ const valueType = (_d = (_c = (_b = (_a = valueTypes[namespace]) === null || _a === void 0 ? void 0 : _a[nameCamel]) === null || _b === void 0 ? void 0 : _b[v]) === null || _c === void 0 ? void 0 : _c[fieldName]) === null || _d === void 0 ? void 0 : _d.valueTypes[renderAs];
28
+ if (!valueType) {
29
+ throw new Error(`Unable to render value type for field "${namespace}.${nameCamel}.${v}.${fieldName}"`);
30
+ }
31
+ return valueType;
32
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import handlebars from 'handlebars';
2
+ handlebars.registerHelper('valueTypeMapper', function (typeMapper, renderAs) {
3
+ if (renderAs === 'typeOnly') {
4
+ return typeMapper.split('<')[0];
5
+ }
6
+ else {
7
+ return typeMapper;
8
+ }
9
+ });
@@ -0,0 +1,138 @@
1
+ import { PermissionContractMap } from '@sprucelabs/mercury-types';
2
+ import { Schema, SchemaTemplateItem, FieldTemplateItem } from '@sprucelabs/schema';
3
+ import { TemplateRenderAs } from '@sprucelabs/schema';
4
+ import handlebars from 'handlebars';
5
+ import { FieldDefinitions } from '#spruce/schemas/fields/fields.types';
6
+ import { DirectoryTemplateCode, DirectoryTemplateContextMap, ValueTypes, SchemaBuilderTemplateItem, ErrorOptions, ErrorTemplateItem, TestOptions, EventListenerOptions, EventContractTemplateItem, EventPayloadOptions, StoreTemplateOptions, StoreTemplateItem, ViewsOptions as CombinedViewsOptions, ListenerTemplateItem } from './types/templates.types';
7
+ import './addons';
8
+ export declare const templates: {
9
+ schemasTypes(options: {
10
+ schemaTemplateItems: SchemaTemplateItem[];
11
+ fieldTemplateItems: FieldTemplateItem[];
12
+ valueTypes: ValueTypes;
13
+ globalSchemaNamespace?: string;
14
+ typesTemplate?: string;
15
+ }): string;
16
+ valueTypes(options: {
17
+ schemaTemplateItems: SchemaTemplateItem[];
18
+ fieldTemplateItems: FieldTemplateItem[];
19
+ globalSchemaNamespace?: string;
20
+ }): string;
21
+ schema(options: SchemaTemplateItem & {
22
+ schemaTemplateItems: SchemaTemplateItem[];
23
+ fieldTemplateItems: FieldTemplateItem[];
24
+ valueTypes: ValueTypes;
25
+ globalSchemaNamespace?: string;
26
+ registerBuiltSchemas: boolean;
27
+ schemaFile?: string;
28
+ typesFile?: string;
29
+ }): string;
30
+ schemaBuilder(options: SchemaBuilderTemplateItem): string;
31
+ error(options: ErrorOptions): string;
32
+ errorOptionsTypes(options: {
33
+ options: ErrorTemplateItem[];
34
+ }): string;
35
+ schemaExample(options: {
36
+ nameCamel: string;
37
+ namePascal: string;
38
+ definition: Schema;
39
+ }): string;
40
+ schemaPlugin(): string;
41
+ errorPlugin(): string;
42
+ conversationPlugin(): string;
43
+ deployPlugin(): string;
44
+ errorExample(options: {
45
+ nameCamel: string;
46
+ namePascal: string;
47
+ definition: Schema;
48
+ }): string;
49
+ test(options: TestOptions): string;
50
+ fieldsTypes(options: {
51
+ fieldTemplateItems: FieldTemplateItem[];
52
+ }): string;
53
+ fieldClassMap(options: {
54
+ fieldTemplateItems: FieldTemplateItem[];
55
+ }): string;
56
+ launchConfig(): string;
57
+ vsCodeSettings(): Promise<string>;
58
+ listener(options: EventListenerOptions): string;
59
+ listeners(options: {
60
+ listeners: ListenerTemplateItem[];
61
+ }): string;
62
+ eventContract(options: EventContractTemplateItem & {
63
+ schemaTemplateItems: SchemaTemplateItem[];
64
+ }): string;
65
+ eventOptions(options: {
66
+ isGlobal: boolean;
67
+ }): string;
68
+ permissionPlugin(): string;
69
+ permissions(options: {
70
+ contracts: {
71
+ path: string;
72
+ nameCamel: string;
73
+ }[];
74
+ }): string;
75
+ permissionContractBuilder(options: {
76
+ nameCamel: string;
77
+ nameKebab: string;
78
+ nameReadable: string;
79
+ description?: string;
80
+ }): string;
81
+ permissionTypes(options: {
82
+ contracts: PermissionContractMap;
83
+ }): string;
84
+ eventEmitPayload(options: EventPayloadOptions): string;
85
+ eventEmitTarget(options: EventPayloadOptions): string;
86
+ eventResponsePayload(options: EventPayloadOptions): string;
87
+ combinedEventsContract(options: {
88
+ templateItems: EventContractTemplateItem[];
89
+ shouldImportCoreEvents?: boolean;
90
+ skillEventContractTypesFile: string;
91
+ }): string;
92
+ sandboxWillBootListener(): string;
93
+ polish(): string;
94
+ directoryTemplate<K extends DirectoryTemplateCode>(options: {
95
+ kind: K;
96
+ context: DirectoryTemplateContextMap[K];
97
+ }): Promise<(import("./types/templates.types").DirectoryTemplateFile & {
98
+ contents: string;
99
+ })[]>;
100
+ isValidTemplatedDirectory(options: {
101
+ kind: DirectoryTemplateCode;
102
+ dir: string;
103
+ }): Promise<boolean>;
104
+ conversationTopic(options: {
105
+ nameReadable: string;
106
+ }): string;
107
+ generateFieldKey(renderAs: TemplateRenderAs, definition: FieldDefinitions): string;
108
+ storePlugin(): string;
109
+ store(options: StoreTemplateOptions): string;
110
+ storeTypes(options: {
111
+ stores: StoreTemplateItem[];
112
+ }): string;
113
+ stores(options: {
114
+ stores: StoreTemplateItem[];
115
+ }): string;
116
+ skillViewController(options: {
117
+ namePascal: string;
118
+ nameKebab: string;
119
+ }): string;
120
+ viewController(options: {
121
+ viewModel: string;
122
+ namePascal: string;
123
+ nameKebab: string;
124
+ }): string;
125
+ appViewController(): string;
126
+ views(options: CombinedViewsOptions): string;
127
+ viewPlugin(): string;
128
+ viewControllerPlugin(options: {
129
+ namePascal: string;
130
+ nameCamel: string;
131
+ }): string;
132
+ theme(): string;
133
+ logTransport(): string;
134
+ };
135
+ export type Templates = typeof templates;
136
+ export { default as importExtractorUtil } from './utilities/importExtractor.utility';
137
+ export default handlebars;
138
+ export * from './types/templates.types';
@@ -0,0 +1,255 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import fs from 'fs';
11
+ import path from 'path';
12
+ import { TemplateRenderAs } from '@sprucelabs/schema';
13
+ import { SCHEMA_VERSION_FALLBACK, DEFAULT_GLOBAL_SCHEMA_NAMESPACE, DEFAULT_BUILDER_FUNCTION, DEFAULT_SCHEMA_TYPES_FILE, } from '@sprucelabs/spruce-skill-utils';
14
+ import handlebars from 'handlebars';
15
+ import { DirectoryTemplateCode, } from './types/templates.types';
16
+ import DirectoryTemplateUtility from './utilities/DirectoryTemplateUtility';
17
+ import importExtractorUtil from './utilities/importExtractor.utility';
18
+ import KeyGeneratorUtility from './utilities/KeyGeneratorUtility';
19
+ import templateImportUtil from './utilities/templateImporter.utility';
20
+ import templateItemUtil from './utilities/templateItem.utility';
21
+ // Manual import of addons for Bun
22
+ import './addons';
23
+ // addonUtil.importSync({}, __dirname, 'addons')
24
+ export const templates = {
25
+ schemasTypes(options) {
26
+ var _a, _b;
27
+ const imports = importExtractorUtil.extractFieldImports(options.fieldTemplateItems);
28
+ const template = templateImportUtil.getTemplate((_a = options.typesTemplate) !== null && _a !== void 0 ? _a : 'schema/schemas.types.ts.hbs');
29
+ const schemaImports = importExtractorUtil.extractSchemaImports(options.schemaTemplateItems);
30
+ return template(Object.assign(Object.assign({}, options), { imports,
31
+ schemaImports, globalSchemaNamespace: (_b = options.globalSchemaNamespace) !== null && _b !== void 0 ? _b : DEFAULT_GLOBAL_SCHEMA_NAMESPACE }));
32
+ },
33
+ valueTypes(options) {
34
+ var _a;
35
+ const imports = importExtractorUtil.extractFieldImports(options.fieldTemplateItems);
36
+ const rendersAs = Object.values(TemplateRenderAs);
37
+ const schemaTemplatesByNamespaceAndName = templateItemUtil.groupSchemaTemplatesByNamespaceAndName(options.schemaTemplateItems);
38
+ const fieldTemplatesByType = templateItemUtil.groupFieldItemsByNamespace(options.fieldTemplateItems);
39
+ const template = templateImportUtil.getTemplate('schema/valueTypes.ts.hbs');
40
+ return template(Object.assign(Object.assign({}, options), { imports,
41
+ fieldTemplatesByType,
42
+ schemaTemplatesByNamespaceAndName,
43
+ SCHEMA_VERSION_FALLBACK,
44
+ rendersAs, globalSchemaNamespace: (_a = options.globalSchemaNamespace) !== null && _a !== void 0 ? _a : DEFAULT_GLOBAL_SCHEMA_NAMESPACE }));
45
+ },
46
+ schema(options) {
47
+ var _a, _b, _c;
48
+ const imports = importExtractorUtil.extractFieldImports(options.fieldTemplateItems);
49
+ const template = templateImportUtil.getTemplate((_a = options.schemaFile) !== null && _a !== void 0 ? _a : 'schema/schema.ts.hbs');
50
+ return template(Object.assign(Object.assign({}, options), { imports, globalSchemaNamespace: (_b = options.globalSchemaNamespace) !== null && _b !== void 0 ? _b : DEFAULT_GLOBAL_SCHEMA_NAMESPACE, typesFile: (_c = options.typesFile) !== null && _c !== void 0 ? _c : DEFAULT_SCHEMA_TYPES_FILE }));
51
+ },
52
+ schemaBuilder(options) {
53
+ var _a;
54
+ const template = templateImportUtil.getTemplate('schema/builder.ts.hbs');
55
+ return template(Object.assign(Object.assign({}, options), { builderFunction: (_a = options.builderFunction) !== null && _a !== void 0 ? _a : DEFAULT_BUILDER_FUNCTION }));
56
+ },
57
+ error(options) {
58
+ const template = templateImportUtil.getTemplate('error/SpruceError.ts.hbs');
59
+ return template(Object.assign({ renderClassDefinition: true }, options));
60
+ },
61
+ errorOptionsTypes(options) {
62
+ const template = templateImportUtil.getTemplate('error/options.types.ts.hbs');
63
+ return template(options);
64
+ },
65
+ schemaExample(options) {
66
+ const template = templateImportUtil.getTemplate('schema/example.ts.hbs');
67
+ return template(options);
68
+ },
69
+ schemaPlugin() {
70
+ const template = templateImportUtil.getTemplate('schema/schema.plugin.ts.hbs');
71
+ return template({});
72
+ },
73
+ errorPlugin() {
74
+ const template = templateImportUtil.getTemplate('error/error.plugin.ts.hbs');
75
+ return template({});
76
+ },
77
+ conversationPlugin() {
78
+ const template = templateImportUtil.getTemplate('conversation/conversation.plugin.ts.hbs');
79
+ return template({});
80
+ },
81
+ deployPlugin() {
82
+ const template = templateImportUtil.getTemplate('deploy/deploy.plugin.ts.hbs');
83
+ return template({});
84
+ },
85
+ errorExample(options) {
86
+ const template = templateImportUtil.getTemplate('error/example.ts.hbs');
87
+ return template(options);
88
+ },
89
+ test(options) {
90
+ const template = templateImportUtil.getTemplate('test/Test.test.ts.hbs');
91
+ return template(options);
92
+ },
93
+ fieldsTypes(options) {
94
+ const template = templateImportUtil.getTemplate('schema/fields/fields.types.ts.hbs');
95
+ return template(options);
96
+ },
97
+ fieldClassMap(options) {
98
+ const template = templateImportUtil.getTemplate('schema/fields/fieldClassMap.ts.hbs');
99
+ return template(options);
100
+ },
101
+ launchConfig() {
102
+ const template = templateImportUtil.getTemplate('vscode/launch.json');
103
+ return template({});
104
+ },
105
+ vsCodeSettings() {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ const files = yield templates.directoryTemplate({
108
+ kind: DirectoryTemplateCode.VsCode,
109
+ context: {},
110
+ });
111
+ const settings = files.find((f) => f.filename === 'settings.json');
112
+ return settings.contents;
113
+ });
114
+ },
115
+ listener(options) {
116
+ const template = templateImportUtil.getTemplate('event/listener.ts.hbs');
117
+ return template(Object.assign(Object.assign({ globalSchemaNamespace: DEFAULT_GLOBAL_SCHEMA_NAMESPACE }, options), { shouldImportGlobalSchema: options.emitPayloadSchemaTemplateItem ||
118
+ options.responsePayloadSchemaTemplateItem }));
119
+ },
120
+ listeners(options) {
121
+ const template = templateImportUtil.getTemplate('event/listeners.ts.hbs');
122
+ return template(Object.assign({}, options));
123
+ },
124
+ eventContract(options) {
125
+ const template = templateImportUtil.getTemplate('event/event.contract.ts.hbs');
126
+ return template(options);
127
+ },
128
+ eventOptions(options) {
129
+ const template = templateImportUtil.getTemplate('event/event.options.ts.hbs');
130
+ return template(Object.assign(Object.assign({}, options), { isGlobal: options.isGlobal ? 'true' : 'false' }));
131
+ },
132
+ permissionPlugin() {
133
+ const template = templateImportUtil.getTemplate('permissions/permission.plugin.ts.hbs');
134
+ return template({});
135
+ },
136
+ permissions(options) {
137
+ const template = templateImportUtil.getTemplate('permissions/permissions.ts.hbs');
138
+ return template(Object.assign({}, options));
139
+ },
140
+ permissionContractBuilder(options) {
141
+ const template = templateImportUtil.getTemplate('permissions/contract.builder.ts.hbs');
142
+ return template(options);
143
+ },
144
+ permissionTypes(options) {
145
+ const template = templateImportUtil.getTemplate('permissions/permissions.types.ts.hbs');
146
+ return template(options);
147
+ },
148
+ eventEmitPayload(options) {
149
+ const template = templateImportUtil.getTemplate('event/payload.builder.ts.hbs');
150
+ return template(Object.assign(Object.assign({}, options), { actionCamel: 'EmitPayload' }));
151
+ },
152
+ eventEmitTarget(options) {
153
+ const template = templateImportUtil.getTemplate('event/payload.builder.ts.hbs');
154
+ return template(Object.assign(Object.assign({}, options), { actionCamel: 'EmitTarget' }));
155
+ },
156
+ eventResponsePayload(options) {
157
+ const template = templateImportUtil.getTemplate('event/payload.builder.ts.hbs');
158
+ return template(Object.assign(Object.assign({}, options), { actionCamel: 'ResponsePayload' }));
159
+ },
160
+ combinedEventsContract(options) {
161
+ const template = templateImportUtil.getTemplate('event/events.contract.ts.hbs');
162
+ return template(Object.assign(Object.assign({}, options), { contracts: options.templateItems }));
163
+ },
164
+ sandboxWillBootListener() {
165
+ const template = templateImportUtil.getTemplate('sandbox/will-boot.listener.ts.hbs');
166
+ return template({});
167
+ },
168
+ polish() {
169
+ const template = templateImportUtil.getTemplate('polish/polish.ts.hbs');
170
+ return template({});
171
+ },
172
+ directoryTemplate(options) {
173
+ return __awaiter(this, void 0, void 0, function* () {
174
+ return DirectoryTemplateUtility.build(options);
175
+ });
176
+ },
177
+ isValidTemplatedDirectory(options) {
178
+ return __awaiter(this, void 0, void 0, function* () {
179
+ const { kind, dir } = options;
180
+ if (kind === DirectoryTemplateCode.Skill) {
181
+ return fs.existsSync(path.join(dir, 'package.json'));
182
+ }
183
+ const filesToCheck = yield DirectoryTemplateUtility.filesInTemplate(kind);
184
+ let filesMissing = false;
185
+ for (const file of filesToCheck) {
186
+ if (!fs.existsSync(file.path)) {
187
+ filesMissing = true;
188
+ break;
189
+ }
190
+ }
191
+ if (!filesMissing) {
192
+ return true;
193
+ }
194
+ return false;
195
+ });
196
+ },
197
+ conversationTopic(options) {
198
+ const template = templateImportUtil.getTemplate('conversation/conversation.topic.ts.hbs');
199
+ return template(options);
200
+ },
201
+ generateFieldKey(renderAs, definition) {
202
+ return KeyGeneratorUtility.generateFieldKey(renderAs, definition);
203
+ },
204
+ storePlugin() {
205
+ const template = templateImportUtil.getTemplate('store/store.plugin.ts.hbs');
206
+ return template({});
207
+ },
208
+ store(options) {
209
+ const template = templateImportUtil.getTemplate('store/Store.store.ts.hbs');
210
+ return template(options);
211
+ },
212
+ storeTypes(options) {
213
+ const template = templateImportUtil.getTemplate('store/stores.types.ts.hbs');
214
+ return template(options);
215
+ },
216
+ stores(options) {
217
+ const template = templateImportUtil.getTemplate('store/stores.ts.hbs');
218
+ return template(options);
219
+ },
220
+ skillViewController(options) {
221
+ const template = templateImportUtil.getTemplate('view/View.svc.ts.hbs');
222
+ return template(options);
223
+ },
224
+ viewController(options) {
225
+ const template = templateImportUtil.getTemplate('view/View.vc.ts.hbs');
226
+ return template(options);
227
+ },
228
+ appViewController() {
229
+ const template = templateImportUtil.getTemplate('view/App.avc.ts.hbs');
230
+ return template({});
231
+ },
232
+ views(options) {
233
+ const template = templateImportUtil.getTemplate('view/views.ts.hbs');
234
+ return template(options);
235
+ },
236
+ viewPlugin() {
237
+ const template = templateImportUtil.getTemplate('view/view.plugin.ts.hbs');
238
+ return template({});
239
+ },
240
+ viewControllerPlugin(options) {
241
+ const template = templateImportUtil.getTemplate('view/viewController.plugin.ts.hbs');
242
+ return template(options);
243
+ },
244
+ theme() {
245
+ const template = templateImportUtil.getTemplate('view/skill.theme.ts.hbs');
246
+ return template({});
247
+ },
248
+ logTransport() {
249
+ const template = templateImportUtil.getTemplate('log/transport.plugin.ts.hbs');
250
+ return template({});
251
+ },
252
+ };
253
+ export { default as importExtractorUtil } from './utilities/importExtractor.utility';
254
+ export default handlebars;
255
+ export * from './types/templates.types';
@@ -0,0 +1,4 @@
1
+ # [Your Skill Name]
2
+
3
+ ## Useful links
4
+ * [Spruce Developer Documentation: https://developer.spruce.ai](https://developer.spruce.ai)
@@ -0,0 +1,3 @@
1
+ import eslintConfigSpruce from 'eslint-config-spruce'
2
+
3
+ export default eslintConfigSpruce
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "{{name}}",
3
+ "description": "{{description}}",
4
+ "version": "0.0.1",
5
+ "skill": {},
6
+ "homepage": "https://github.com/[YOUR REPO PATH]",
7
+ "bugs": {
8
+ "url": "https://github.com/[YOUR REPO PATH]/issues"
9
+ },
10
+ "keywords": [],
11
+ "scripts": {},
12
+ "dependencies": {},
13
+ "devDependencies": {
14
+ }
15
+ }
@@ -0,0 +1,6 @@
1
+ interface ErrorOptions {
2
+ code: 'NO_ERRORS_CREATED'
3
+ friendlyMessage?: string
4
+ }
5
+
6
+ export default ErrorOptions
@@ -0,0 +1 @@
1
+ export { plugin as default } from '@sprucelabs/spruce-event-plugin'
@@ -0,0 +1,8 @@
1
+ import pathUtil from 'path'
2
+ import Skill from '@sprucelabs/spruce-skill-booter'
3
+
4
+ export default new Skill({
5
+ rootDir: pathUtil.join(__dirname, '..', '..'),
6
+ activeDir: pathUtil.join(__dirname, '..'),
7
+ hashSpruceDir: pathUtil.join(__dirname, '..', '.spruce'),
8
+ })
@@ -0,0 +1,20 @@
1
+ import AbstractSpruceError from '@sprucelabs/error'
2
+ import ErrorOptions from '#spruce/errors/options.types'
3
+
4
+ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
5
+ public friendlyMessage(): string {
6
+ const { options } = this
7
+ let message
8
+
9
+ switch (options?.code) {
10
+ default:
11
+ message = super.friendlyMessage()
12
+ }
13
+
14
+ const fullMessage = options.friendlyMessage
15
+ ? options.friendlyMessage
16
+ : message
17
+
18
+ return fullMessage
19
+ }
20
+ }