@sprucelabs/spruce-templates 24.1.33 → 25.0.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.
- package/build/addons/eq.addon.js.map +1 -0
- package/build/addons/escape.addon.js.map +1 -0
- package/build/addons/fieldDefinitionBodyPartial.addon.js.map +1 -0
- package/build/addons/fieldDefinitionOptions.addon.js.map +1 -0
- package/build/addons/fieldTypeEnum.addon.js.map +1 -0
- package/build/addons/fieldValue.addon.js.map +1 -0
- package/build/addons/gt.addon.js.map +1 -0
- package/build/addons/hasKeys.addon.js.map +1 -0
- package/build/addons/hasNoneCoreSchemaTemplateItems.addon.js.map +1 -0
- package/build/addons/importRelatedSchemas.addon.js.map +1 -0
- package/build/addons/index.js.map +1 -0
- package/build/addons/isDefined.addon.js.map +1 -0
- package/build/addons/json.addon.js.map +1 -0
- package/build/addons/neq.addon.js.map +1 -0
- package/build/addons/operators.addon.js.map +1 -0
- package/build/addons/pascalCase.addon.js.map +1 -0
- package/build/addons/permissionContractBuilder.addon.js.map +1 -0
- package/build/addons/schemaBodyPartial.addon.js.map +1 -0
- package/build/addons/schemaNamespacePath.addon.js.map +1 -0
- package/build/addons/schemaValuesPartial.addon.js.map +1 -0
- package/build/addons/valueTypeGenerator.addon.js.map +1 -0
- package/build/addons/valueTypeLiteral.addon.js.map +1 -0
- package/build/addons/valueTypeMapper.addon.js.map +1 -0
- package/build/dist/templates/directories/skill/.nvmrc +1 -0
- package/build/dist/templates/directories/skill/README.md +4 -0
- package/build/dist/templates/directories/skill/eslint.config.mjs +3 -0
- package/build/dist/templates/directories/skill/package.json.hbs +15 -0
- package/build/dist/templates/directories/skill/src/errors/SpruceError.ts.hbs +20 -0
- package/build/dist/templates/directories/skill/tsconfig.json +39 -0
- package/build/dist/templates/directories/vscode/.vscode/launch.json +58 -0
- package/build/dist/templates/directories/vscode/.vscode/settings.json +67 -0
- package/build/dist/templates/directories/vscode/.vscode/tasks.json +112 -0
- package/build/dist/templates/typescript/conversation/conversation.plugin.ts.hbs +1 -0
- package/build/dist/templates/typescript/conversation/conversation.topic.ts.hbs +19 -0
- package/build/dist/templates/typescript/deploy/deploy.plugin.ts.hbs +1 -0
- package/build/dist/templates/typescript/error/SpruceError.ts.hbs +31 -0
- package/build/dist/templates/typescript/error/error.plugin.ts.hbs +78 -0
- package/build/dist/templates/typescript/error/example.ts.hbs +10 -0
- package/build/dist/templates/typescript/error/options.types.ts.hbs +12 -0
- package/build/dist/templates/typescript/event/event.contract.ts.hbs +26 -0
- package/build/dist/templates/typescript/event/event.options.ts.hbs +11 -0
- package/build/dist/templates/typescript/event/events.contract.ts.hbs +24 -0
- package/build/dist/templates/typescript/event/listener.ts.hbs +23 -0
- package/build/dist/templates/typescript/event/listeners.ts.hbs +15 -0
- package/build/dist/templates/typescript/event/payload.builder.ts.hbs +15 -0
- package/build/dist/templates/typescript/log/transport.plugin.ts.hbs +14 -0
- package/build/dist/templates/typescript/permissions/contract.builder.ts.hbs +36 -0
- package/build/dist/templates/typescript/permissions/permission.plugin.ts.hbs +1 -0
- package/build/dist/templates/typescript/permissions/permissions.ts.hbs +13 -0
- package/build/dist/templates/typescript/permissions/permissions.types.ts.hbs +14 -0
- package/build/dist/templates/typescript/polish/polish.ts.hbs +67 -0
- package/build/dist/templates/typescript/sandbox/will-boot.listener.ts.hbs +172 -0
- package/build/dist/templates/typescript/schema/builder.ts.hbs +24 -0
- package/build/dist/templates/typescript/schema/core.schemas.types.ts.hbs +34 -0
- package/build/dist/templates/typescript/schema/example.ts.hbs +20 -0
- package/build/dist/templates/typescript/schema/fields/fieldClassMap.ts.hbs +16 -0
- package/build/dist/templates/typescript/schema/fields/fields.types.ts.hbs +1 -0
- package/build/dist/templates/typescript/schema/imported.schema.ts.hbs +1 -0
- package/build/dist/templates/typescript/schema/partials/fieldDefinitionBody.ts.hbs +12 -0
- package/build/dist/templates/typescript/schema/partials/schemaBody.ts.hbs +20 -0
- package/build/dist/templates/typescript/schema/partials/schemaValues.ts.hbs +7 -0
- package/build/dist/templates/typescript/schema/schema.plugin.ts.hbs +101 -0
- package/build/dist/templates/typescript/schema/schema.ts.hbs +12 -0
- package/build/dist/templates/typescript/schema/schemas.types.ts.hbs +44 -0
- package/build/dist/templates/typescript/schema/valueTypes.ts.hbs +67 -0
- package/build/dist/templates/typescript/store/Store.store.ts.hbs +95 -0
- package/build/dist/templates/typescript/store/store.plugin.ts.hbs +1 -0
- package/build/dist/templates/typescript/store/stores.ts.hbs +9 -0
- package/build/dist/templates/typescript/store/stores.types.ts.hbs +17 -0
- package/build/dist/templates/typescript/test/StaticTest.test.ts.hbs +20 -0
- package/build/dist/templates/typescript/test/Test.test.ts.hbs +21 -0
- package/build/dist/templates/typescript/view/App.ac.ts.hbs +6 -0
- package/build/dist/templates/typescript/view/View.svc.ts.hbs +23 -0
- package/build/dist/templates/typescript/view/View.vc.ts.hbs +17 -0
- package/build/dist/templates/typescript/view/skill.theme.ts.hbs +70 -0
- package/build/dist/templates/typescript/view/view.plugin.ts.hbs +1 -0
- package/build/dist/templates/typescript/view/viewController.plugin.ts.hbs +3 -0
- package/build/dist/templates/typescript/view/views.ts.hbs +93 -0
- package/build/esm/addons/eq.addon.d.ts +1 -0
- package/build/esm/addons/eq.addon.js +4 -0
- package/build/esm/addons/escape.addon.d.ts +1 -0
- package/build/esm/addons/escape.addon.js +5 -0
- package/build/esm/addons/fieldDefinitionBodyPartial.addon.d.ts +1 -0
- package/build/esm/addons/fieldDefinitionBodyPartial.addon.js +8 -0
- package/build/esm/addons/fieldDefinitionOptions.addon.d.ts +1 -0
- package/build/esm/addons/fieldDefinitionOptions.addon.js +66 -0
- package/build/esm/addons/fieldTypeEnum.addon.d.ts +1 -0
- package/build/esm/addons/fieldTypeEnum.addon.js +9 -0
- package/build/esm/addons/fieldValue.addon.d.ts +1 -0
- package/build/esm/addons/fieldValue.addon.js +8 -0
- package/build/esm/addons/gt.addon.d.ts +1 -0
- package/build/esm/addons/gt.addon.js +4 -0
- package/build/esm/addons/hasKeys.addon.d.ts +1 -0
- package/build/esm/addons/hasKeys.addon.js +4 -0
- package/build/esm/addons/hasNoneCoreSchemaTemplateItems.addon.d.ts +1 -0
- package/build/esm/addons/hasNoneCoreSchemaTemplateItems.addon.js +6 -0
- package/build/esm/addons/importRelatedSchemas.addon.d.ts +1 -0
- package/build/esm/addons/importRelatedSchemas.addon.js +34 -0
- package/build/esm/addons/index.d.ts +23 -0
- package/build/esm/addons/index.js +23 -0
- package/build/esm/addons/isDefined.addon.d.ts +1 -0
- package/build/esm/addons/isDefined.addon.js +5 -0
- package/build/esm/addons/json.addon.d.ts +1 -0
- package/build/esm/addons/json.addon.js +7 -0
- package/build/esm/addons/neq.addon.d.ts +1 -0
- package/build/esm/addons/neq.addon.js +4 -0
- package/build/esm/addons/operators.addon.d.ts +1 -0
- package/build/esm/addons/operators.addon.js +15 -0
- package/build/esm/addons/pascalCase.addon.d.ts +1 -0
- package/build/esm/addons/pascalCase.addon.js +6 -0
- package/build/esm/addons/permissionContractBuilder.addon.d.ts +1 -0
- package/build/esm/addons/permissionContractBuilder.addon.js +4 -0
- package/build/esm/addons/schemaBodyPartial.addon.d.ts +1 -0
- package/build/esm/addons/schemaBodyPartial.addon.js +8 -0
- package/build/esm/addons/schemaNamespacePath.addon.d.ts +1 -0
- package/build/esm/addons/schemaNamespacePath.addon.js +18 -0
- package/build/esm/addons/schemaValuesPartial.addon.d.ts +1 -0
- package/build/esm/addons/schemaValuesPartial.addon.js +8 -0
- package/build/esm/addons/valueTypeGenerator.addon.d.ts +1 -0
- package/build/esm/addons/valueTypeGenerator.addon.js +15 -0
- package/build/esm/addons/valueTypeLiteral.addon.d.ts +1 -0
- package/build/esm/addons/valueTypeLiteral.addon.js +32 -0
- package/build/esm/addons/valueTypeMapper.addon.d.ts +1 -0
- package/build/esm/addons/valueTypeMapper.addon.js +9 -0
- package/build/esm/index.d.ts +141 -0
- package/build/esm/index.js +258 -0
- package/build/esm/templates/directories/skill/.nvmrc +1 -0
- package/build/esm/templates/directories/skill/README.md +4 -0
- package/build/esm/templates/directories/skill/eslint.config.mjs +3 -0
- package/build/esm/templates/directories/skill/package.json.hbs +15 -0
- package/build/esm/templates/directories/skill/src/.spruce/errors/options.types.ts +6 -0
- package/build/esm/templates/directories/skill/src/.spruce/features/event.plugin.ts +1 -0
- package/build/esm/templates/directories/skill/src/.spruce/skill.ts +8 -0
- package/build/esm/templates/directories/skill/src/errors/SpruceError.ts.hbs +20 -0
- package/build/esm/templates/directories/skill/src/index.ts +35 -0
- package/build/esm/templates/directories/skill/tsconfig.json +39 -0
- package/build/esm/templates/directories/vscode/.vscode/launch.json +58 -0
- package/build/esm/templates/directories/vscode/.vscode/settings.json +67 -0
- package/build/esm/templates/directories/vscode/.vscode/tasks.json +112 -0
- package/build/esm/templates/typescript/conversation/conversation.plugin.ts.hbs +1 -0
- package/build/esm/templates/typescript/conversation/conversation.topic.ts.hbs +19 -0
- package/build/esm/templates/typescript/deploy/deploy.plugin.ts.hbs +1 -0
- package/build/esm/templates/typescript/error/SpruceError.ts.hbs +31 -0
- package/build/esm/templates/typescript/error/error.plugin.ts.hbs +78 -0
- package/build/esm/templates/typescript/error/example.ts.hbs +10 -0
- package/build/esm/templates/typescript/error/options.types.ts.hbs +12 -0
- package/build/esm/templates/typescript/event/event.contract.ts.hbs +26 -0
- package/build/esm/templates/typescript/event/event.options.ts.hbs +11 -0
- package/build/esm/templates/typescript/event/events.contract.ts.hbs +24 -0
- package/build/esm/templates/typescript/event/listener.ts.hbs +23 -0
- package/build/esm/templates/typescript/event/listeners.ts.hbs +15 -0
- package/build/esm/templates/typescript/event/payload.builder.ts.hbs +15 -0
- package/build/esm/templates/typescript/log/transport.plugin.ts.hbs +14 -0
- package/build/esm/templates/typescript/permissions/contract.builder.ts.hbs +36 -0
- package/build/esm/templates/typescript/permissions/permission.plugin.ts.hbs +1 -0
- package/build/esm/templates/typescript/permissions/permissions.ts.hbs +13 -0
- package/build/esm/templates/typescript/permissions/permissions.types.ts.hbs +14 -0
- package/build/esm/templates/typescript/polish/polish.ts.hbs +67 -0
- package/build/esm/templates/typescript/sandbox/will-boot.listener.ts.hbs +172 -0
- package/build/esm/templates/typescript/schema/builder.ts.hbs +24 -0
- package/build/esm/templates/typescript/schema/core.schemas.types.ts.hbs +34 -0
- package/build/esm/templates/typescript/schema/example.ts.hbs +20 -0
- package/build/esm/templates/typescript/schema/fields/fieldClassMap.ts.hbs +16 -0
- package/build/esm/templates/typescript/schema/fields/fields.types.ts.hbs +1 -0
- package/build/esm/templates/typescript/schema/imported.schema.ts.hbs +1 -0
- package/build/esm/templates/typescript/schema/partials/fieldDefinitionBody.ts.hbs +12 -0
- package/build/esm/templates/typescript/schema/partials/schemaBody.ts.hbs +20 -0
- package/build/esm/templates/typescript/schema/partials/schemaValues.ts.hbs +7 -0
- package/build/esm/templates/typescript/schema/schema.plugin.ts.hbs +101 -0
- package/build/esm/templates/typescript/schema/schema.ts.hbs +12 -0
- package/build/esm/templates/typescript/schema/schemas.types.ts.hbs +44 -0
- package/build/esm/templates/typescript/schema/valueTypes.ts.hbs +67 -0
- package/build/esm/templates/typescript/store/Store.store.ts.hbs +95 -0
- package/build/esm/templates/typescript/store/store.plugin.ts.hbs +1 -0
- package/build/esm/templates/typescript/store/stores.ts.hbs +9 -0
- package/build/esm/templates/typescript/store/stores.types.ts.hbs +17 -0
- package/build/esm/templates/typescript/test/StaticTest.test.ts.hbs +20 -0
- package/build/esm/templates/typescript/test/Test.test.ts.hbs +21 -0
- package/build/esm/templates/typescript/view/App.ac.ts.hbs +6 -0
- package/build/esm/templates/typescript/view/View.svc.ts.hbs +23 -0
- package/build/esm/templates/typescript/view/View.vc.ts.hbs +17 -0
- package/build/esm/templates/typescript/view/skill.theme.ts.hbs +70 -0
- package/build/esm/templates/typescript/view/view.plugin.ts.hbs +1 -0
- package/build/esm/templates/typescript/view/viewController.plugin.ts.hbs +3 -0
- package/build/esm/templates/typescript/view/views.ts.hbs +93 -0
- package/build/esm/types/templates.types.d.ts +122 -0
- package/build/esm/types/templates.types.js +5 -0
- package/build/esm/utilities/DirectoryTemplateUtility.d.ts +15 -0
- package/build/esm/utilities/DirectoryTemplateUtility.js +79 -0
- package/build/esm/utilities/KeyGeneratorUtility.d.ts +5 -0
- package/build/esm/utilities/KeyGeneratorUtility.js +6 -0
- package/build/esm/utilities/importExtractor.utility.d.ts +10 -0
- package/build/esm/utilities/importExtractor.utility.js +32 -0
- package/build/esm/utilities/templateImporter.utility.d.ts +4 -0
- package/build/esm/utilities/templateImporter.utility.js +18 -0
- package/build/esm/utilities/templateItem.utility.d.ts +6 -0
- package/build/esm/utilities/templateItem.utility.js +25 -0
- package/build/index.js.map +1 -0
- package/build/types/templates.types.js.map +1 -0
- package/build/utilities/DirectoryTemplateUtility.js.map +1 -0
- package/build/utilities/KeyGeneratorUtility.js.map +1 -0
- package/build/utilities/importExtractor.utility.js.map +1 -0
- package/build/utilities/templateImporter.utility.js.map +1 -0
- package/build/utilities/templateItem.utility.js.map +1 -0
- package/package.json +3 -3
- package/LICENSE +0 -21
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-namespace */
|
|
2
|
+
/* eslint-disable no-redeclare */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
|
+
/* eslint-disable import/order */
|
|
5
|
+
|
|
6
|
+
export { SpruceSchemas } from '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schemas.types'
|
|
7
|
+
|
|
8
|
+
{{#if (hasNonCoreSchemaTemplateItems schemaTemplateItems)}}
|
|
9
|
+
import { default as SchemaEntity } from '@sprucelabs/schema'
|
|
10
|
+
{{/if}}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
{{#if (hasNonCoreSchemaTemplateItems schemaTemplateItems)}}
|
|
14
|
+
|
|
15
|
+
{{#each imports}}
|
|
16
|
+
import * as {{importAs}} from '{{package}}'
|
|
17
|
+
{{/each}}
|
|
18
|
+
|
|
19
|
+
{{#each schemaImports}}
|
|
20
|
+
{{{this}}}
|
|
21
|
+
{{/each}}
|
|
22
|
+
|
|
23
|
+
declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schemas.types' {
|
|
24
|
+
|
|
25
|
+
{{#each schemaTemplateItems}}
|
|
26
|
+
|
|
27
|
+
namespace {{../globalSchemaNamespace}}.{{namespace}}{{#if (isDefined schema.version)}}.{{schema.version}}{{/if}} {
|
|
28
|
+
|
|
29
|
+
{{#if schema.description}}/** {{schema.description}} */{{/if}}
|
|
30
|
+
interface {{namePascal}}{{{schema.typeSuffix}}} {
|
|
31
|
+
{{> schemaValues schema=schema renderAs="type" }}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface {{namePascal}}Schema extends SpruceSchema.Schema {
|
|
35
|
+
{{> schemaBody namespace=namespace schema=schema renderAs="type" }}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface {{namePascal}}Entity extends SchemaEntity<{{../globalSchemaNamespace}}.{{namespace}}{{#if (isDefined schema.version)}}.{{schema.version}}{{/if}}.{{namePascal}}Schema> {}
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
{{/each}}
|
|
43
|
+
}
|
|
44
|
+
{{/if}}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { FieldDefinitions } from '#spruce/schemas/fields/fields.types'
|
|
2
|
+
|
|
3
|
+
import fieldClassMap from '#spruce/schemas/fields/fieldClassMap'
|
|
4
|
+
import { TemplateRenderAs, FieldTemplateDetailOptions } from '@sprucelabs/schema'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
{{#each imports}}
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
import * as {{importAs}} from '{{package}}'
|
|
10
|
+
{{/each}}
|
|
11
|
+
|
|
12
|
+
const schemaTemplateItems = {{{json schemaTemplateItems}}}
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const generateTypeLiteral = (definition: FieldDefinitions, renderAs: TemplateRenderAs, importAs: string) => {
|
|
15
|
+
const options: FieldTemplateDetailOptions<FieldDefinitions> = {
|
|
16
|
+
language: 'ts',
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
templateItems: schemaTemplateItems,
|
|
19
|
+
globalNamespace: '{{globalSchemaNamespace}}',
|
|
20
|
+
definition,
|
|
21
|
+
importAs,
|
|
22
|
+
renderAs
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const FieldClass = fieldClassMap[definition.type]
|
|
26
|
+
const details = FieldClass.generateTemplateDetails(
|
|
27
|
+
options as any
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return details.valueType
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const valueTypes = {
|
|
35
|
+
{{#each schemaTemplatesByNamespaceAndName}}
|
|
36
|
+
"{{@key}}": {
|
|
37
|
+
{{#each this}}
|
|
38
|
+
"{{@key}}": {
|
|
39
|
+
{{#each this}}
|
|
40
|
+
"{{schema.version}}{{#unless schema.version}}{{../../../SCHEMA_VERSION_FALLBACK}}{{/unless}}":{
|
|
41
|
+
{{#if schema.dynamicFieldSignature}}
|
|
42
|
+
__dynamicFieldSignature: {
|
|
43
|
+
valueTypes: {
|
|
44
|
+
{{#each ../../../rendersAs}}
|
|
45
|
+
{{this}}: {{{ valueTypeGenerator ../schema.dynamicFieldSignature this 'generateTypeLiteral'}}},
|
|
46
|
+
{{/each}}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{{/if}}
|
|
50
|
+
{{#each schema.fields}}
|
|
51
|
+
"{{@key}}": {
|
|
52
|
+
valueTypes: {
|
|
53
|
+
{{#each ../../../../rendersAs}}
|
|
54
|
+
{{this}}: {{{ valueTypeGenerator ../this this 'generateTypeLiteral'}}},
|
|
55
|
+
{{/each}}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{{/each}}
|
|
59
|
+
},
|
|
60
|
+
{{/each}}
|
|
61
|
+
},
|
|
62
|
+
{{/each}}
|
|
63
|
+
},
|
|
64
|
+
{{/each}}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default valueTypes
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AbstractStore, UniversalStoreOptions, PrepareOptions, PrepareResults } from '@sprucelabs/data-stores'
|
|
2
|
+
import { buildSchema, dropFields, makeFieldsOptional, SchemaValues, SchemaFieldNames } from '@sprucelabs/schema'
|
|
3
|
+
|
|
4
|
+
export default class {{namePascalPlural}}Store extends AbstractStore<
|
|
5
|
+
FullSchema,
|
|
6
|
+
CreateSchema,
|
|
7
|
+
UpdateSchema,
|
|
8
|
+
DatabaseSchema
|
|
9
|
+
> {
|
|
10
|
+
public name = '{{namePascalPlural}}'
|
|
11
|
+
protected collectionName = '{{nameSnakePlural}}'
|
|
12
|
+
|
|
13
|
+
protected createSchema = createSchema
|
|
14
|
+
protected updateSchema = updateSchema
|
|
15
|
+
protected fullSchema = fullSchema
|
|
16
|
+
protected databaseSchema = databaseSchema
|
|
17
|
+
|
|
18
|
+
public static Store(options: {{namePascal}}StoreOptions & UniversalStoreOptions) {
|
|
19
|
+
return new this(options.db)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
protected async willCreate(
|
|
23
|
+
values: Create{{namePascal}}
|
|
24
|
+
): Promise<Omit<Database{{namePascal}}, 'id'>> {
|
|
25
|
+
return values
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected async willUpdate(values: Update{{namePascal}}) {
|
|
29
|
+
return values as Partial<Database{{namePascal}}>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
protected async prepareRecord<
|
|
34
|
+
IncludePrivateFields extends boolean,
|
|
35
|
+
F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>
|
|
36
|
+
>(
|
|
37
|
+
record: Database{{namePascal}},
|
|
38
|
+
_options?: PrepareOptions<IncludePrivateFields, FullSchema, F>
|
|
39
|
+
) {
|
|
40
|
+
return record as PrepareResults<FullSchema, IncludePrivateFields>
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The structure of the data you'll be returning from finds
|
|
46
|
+
const fullSchema = buildSchema({
|
|
47
|
+
id: 'full{{namePascal}}',
|
|
48
|
+
fields: {
|
|
49
|
+
id: {
|
|
50
|
+
type: 'id',
|
|
51
|
+
isRequired: true,
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
// The values you will accept when creating a record
|
|
57
|
+
const createSchema = buildSchema({
|
|
58
|
+
id: 'create{{namePascal}}',
|
|
59
|
+
fields: {
|
|
60
|
+
...dropFields(fullSchema.fields, ['id'])
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// The values you will accept when updating a record
|
|
65
|
+
const updateSchema = buildSchema({
|
|
66
|
+
id: 'update{{namePascal}}',
|
|
67
|
+
fields: {
|
|
68
|
+
...makeFieldsOptional(dropFields(fullSchema.fields, ['id']))
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
// The values you will actually save to the databases (in this case, makes id required)
|
|
73
|
+
const databaseSchema = buildSchema({
|
|
74
|
+
id: 'database{{namePascal}}',
|
|
75
|
+
fields: {
|
|
76
|
+
...fullSchema.fields,
|
|
77
|
+
id: {
|
|
78
|
+
type: 'id',
|
|
79
|
+
isRequired: true
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
type FullSchema = typeof fullSchema
|
|
85
|
+
type CreateSchema = typeof createSchema
|
|
86
|
+
type UpdateSchema = typeof updateSchema
|
|
87
|
+
type DatabaseSchema = typeof databaseSchema
|
|
88
|
+
|
|
89
|
+
// type {{namePascal}} = SchemaValues<FullSchema>
|
|
90
|
+
type Create{{namePascal}} = SchemaValues<CreateSchema>
|
|
91
|
+
type Update{{namePascal}} = SchemaValues<UpdateSchema>
|
|
92
|
+
type Database{{namePascal}} = SchemaValues<DatabaseSchema>
|
|
93
|
+
// type Query{{namePascal}} = Partial<{{namePascal}}>
|
|
94
|
+
|
|
95
|
+
type {{namePascal}}StoreOptions = UniversalStoreOptions
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { plugin as default } from '@sprucelabs/spruce-store-plugin'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{{#each stores}}
|
|
2
|
+
import {{namePascalPlural}}Store from '{{path}}'
|
|
3
|
+
{{/each}}
|
|
4
|
+
|
|
5
|
+
declare module '@sprucelabs/data-stores/build/types/stores.types' {
|
|
6
|
+
interface StoreMap {
|
|
7
|
+
{{#each stores}}
|
|
8
|
+
{{nameCamelPlural}}: {{namePascalPlural}}Store
|
|
9
|
+
{{/each}}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface StoreOptionsMap {
|
|
13
|
+
{{#each stores}}
|
|
14
|
+
{{nameCamelPlural}}: Omit<Parameters<typeof {{namePascalPlural}}Store['Store']>[0], keyof UniversalStoreOptions>
|
|
15
|
+
{{/each}}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{{#if isTestFixturesInstalled}}import { fake } from '@sprucelabs/spruce-test-fixtures'{{/if}}
|
|
2
|
+
import {{#unless (isDefined parentTestClass)}}AbstractSpruceTest, {{/unless}}{ test, assert } from '@sprucelabs/test-utils'
|
|
3
|
+
{{#if (isDefined parentTestClass)}}import {{#if parentTestClass.isDefaultExport}}{{parentTestClass.name}}{{else}}{ {{parentTestClass.name}} }{{/if}} from '{{parentTestClass.importPath}}'
|
|
4
|
+
{{/if}}
|
|
5
|
+
|
|
6
|
+
{{#if isTestFixturesInstalled}}@fake.login(){{/if}}
|
|
7
|
+
export default class {{namePascal}}Test extends {{#if (isDefined parentTestClass)}}{{parentTestClass.name}}{{else}}AbstractSpruceTest{{/if}} {
|
|
8
|
+
@test()
|
|
9
|
+
protected static async canCreate{{namePascal}}() {
|
|
10
|
+
const {{nameCamel}} = new {{namePascal}}()
|
|
11
|
+
assert.isTruthy({{nameCamel}})
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@test()
|
|
15
|
+
protected static async yourNextTest() {
|
|
16
|
+
assert.isTrue(false)
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class {{namePascal}} {}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{{#if isTestFixturesInstalled}}import { fake } from '@sprucelabs/spruce-test-fixtures'{{/if}}
|
|
2
|
+
import {{#unless (isDefined parentTestClass)}}AbstractSpruceTest, {{/unless}}{ test, suite, assert } from '@sprucelabs/test-utils'
|
|
3
|
+
{{#if (isDefined parentTestClass)}}import {{#if parentTestClass.isDefaultExport}}{{parentTestClass.name}}{{else}}{ {{parentTestClass.name}} }{{/if}} from '{{parentTestClass.importPath}}'
|
|
4
|
+
{{/if}}
|
|
5
|
+
|
|
6
|
+
{{#if isTestFixturesInstalled}}@fake.login(){{/if}}
|
|
7
|
+
@suite()
|
|
8
|
+
export default class {{namePascal}}Test extends {{#if (isDefined parentTestClass)}}{{parentTestClass.name}}{{else}}AbstractSpruceTest{{/if}} {
|
|
9
|
+
@test()
|
|
10
|
+
protected async canCreate{{namePascal}}() {
|
|
11
|
+
const {{nameCamel}} = new {{namePascal}}()
|
|
12
|
+
assert.isTruthy({{nameCamel}})
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@test()
|
|
16
|
+
protected async yourNextTest() {
|
|
17
|
+
assert.isTrue(false)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
class {{namePascal}} {}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AbstractAppController, AppControllerLoadOptions } from '@sprucelabs/heartwood-view-controllers'
|
|
2
|
+
|
|
3
|
+
export default class {{ namespacePascal }}AppController extends AbstractAppController {
|
|
4
|
+
public static id = "{{ id }}"
|
|
5
|
+
public async load(_options: AppControllerLoadOptions) {}
|
|
6
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractSkillViewController,
|
|
3
|
+
ViewControllerOptions,
|
|
4
|
+
SkillView,
|
|
5
|
+
} from '@sprucelabs/heartwood-view-controllers'
|
|
6
|
+
|
|
7
|
+
export default class {{namePascal}}SkillViewController extends AbstractSkillViewController {
|
|
8
|
+
public static id = '{{nameKebab}}'
|
|
9
|
+
|
|
10
|
+
public constructor(options: ViewControllerOptions) {
|
|
11
|
+
super(options)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public render(): SkillView {
|
|
15
|
+
return {
|
|
16
|
+
layouts: [
|
|
17
|
+
{
|
|
18
|
+
cards: [],
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractViewController,
|
|
3
|
+
ViewControllerOptions,
|
|
4
|
+
{{viewModel}},
|
|
5
|
+
} from '@sprucelabs/heartwood-view-controllers'
|
|
6
|
+
|
|
7
|
+
export default class {{namePascal}}ViewController extends AbstractViewController<{{viewModel}}> {
|
|
8
|
+
public static id = '{{nameKebab}}'
|
|
9
|
+
|
|
10
|
+
public constructor(options: ViewControllerOptions) {
|
|
11
|
+
super(options)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public render() {
|
|
15
|
+
return {}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { SpruceSchemas } from '@sprucelabs/spruce-core-schemas'
|
|
2
|
+
import '#spruce/schemas/schemas.types'
|
|
3
|
+
|
|
4
|
+
// The Theme Skill (https://theme.spruce.bot/) is available to help you build your theme!
|
|
5
|
+
|
|
6
|
+
const theme: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ThemeProps = {
|
|
7
|
+
/**
|
|
8
|
+
************************************
|
|
9
|
+
* Background
|
|
10
|
+
************************************
|
|
11
|
+
*/
|
|
12
|
+
color1: '#ffffff',
|
|
13
|
+
color1Inverse: '#0f4c8a',
|
|
14
|
+
color1InverseGradient: 'linear-gradient(to left, #24c6dc, #514a9d)',
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
************************************
|
|
18
|
+
* Cards
|
|
19
|
+
************************************
|
|
20
|
+
*/
|
|
21
|
+
color2: 'black',
|
|
22
|
+
color2Transparent: 'rgba(0,0,0,0.4)',
|
|
23
|
+
color2Inverse: 'white',
|
|
24
|
+
color2InverseTransparent: 'rgba(255,255,255,0.9)',
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
************************************
|
|
28
|
+
* Headers
|
|
29
|
+
************************************
|
|
30
|
+
*/
|
|
31
|
+
color3: 'grey',
|
|
32
|
+
color3Inverse: 'transparent',
|
|
33
|
+
color3Compliment: 'grey',
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
************************************
|
|
37
|
+
* Buttons
|
|
38
|
+
************************************
|
|
39
|
+
*/
|
|
40
|
+
color4: '#3a3a3a',
|
|
41
|
+
color4Inverse: '#DCE0E7',
|
|
42
|
+
color4Compliment: '#DCE0E4',
|
|
43
|
+
color4ComplimentTransparent: 'rgba(0,0,0,0.2)',
|
|
44
|
+
color4InverseCompliment: '#c7c7c7',
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
************************************
|
|
48
|
+
* Control bar
|
|
49
|
+
************************************
|
|
50
|
+
*/
|
|
51
|
+
controlBarColor1: 'black',
|
|
52
|
+
controlBarColor2: 'white',
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
************************************
|
|
56
|
+
* Tool belt
|
|
57
|
+
************************************
|
|
58
|
+
*/
|
|
59
|
+
toolBeltColor2: 'white',
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
************************************
|
|
63
|
+
* Errors
|
|
64
|
+
************************************
|
|
65
|
+
*/
|
|
66
|
+
errorColor1: '#fff',
|
|
67
|
+
errorColor1Inverse: '#FF3326',
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default theme
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { plugin as default } from '@sprucelabs/spruce-view-plugin'
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{{#each svcTemplateItems}}
|
|
2
|
+
import {{namePascal}} from '{{path}}'
|
|
3
|
+
{{/each}}
|
|
4
|
+
{{#each vcTemplateItems}}
|
|
5
|
+
import {{namePascal}} from '{{path}}'
|
|
6
|
+
{{/each}}
|
|
7
|
+
{{#each viewPluginItems}}
|
|
8
|
+
import {{namePascal}} from '{{path}}'
|
|
9
|
+
{{/each}}
|
|
10
|
+
{{#if appTemplateItem}}
|
|
11
|
+
import {{appTemplateItem.namePascal}} from '{{appTemplateItem.path}}'
|
|
12
|
+
{{/if}}
|
|
13
|
+
|
|
14
|
+
import '@sprucelabs/heartwood-view-controllers'
|
|
15
|
+
|
|
16
|
+
const vcs = {
|
|
17
|
+
{{#each svcTemplateItems}}
|
|
18
|
+
{{namePascal}},
|
|
19
|
+
{{/each}}
|
|
20
|
+
{{#each vcTemplateItems}}
|
|
21
|
+
{{namePascal}},
|
|
22
|
+
{{/each}}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const pluginsByName = {
|
|
26
|
+
{{#each viewPluginItems}}
|
|
27
|
+
{{nameCamel}}: {{namePascal}},
|
|
28
|
+
{{/each}}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
{{#if svcTemplateItems}}
|
|
34
|
+
type LoadOptions<Args extends Record<string,any>[]> = Args[0]['args'] extends Record<string, any> ? Args[0]['args'] : Record<never, any>
|
|
35
|
+
{{/if}}
|
|
36
|
+
|
|
37
|
+
declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.types' {
|
|
38
|
+
interface SkillViewControllerMap {
|
|
39
|
+
{{#each svcTemplateItems}}
|
|
40
|
+
'{{../namespaceKebab}}.{{id}}': {{namePascal}}
|
|
41
|
+
{{/each}}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface SkillViewControllerArgsMap {
|
|
45
|
+
{{#each svcTemplateItems}}
|
|
46
|
+
'{{../namespaceKebab}}.{{id}}': LoadOptions<Parameters<{{namePascal}}['load']>>
|
|
47
|
+
{{/each}}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface ViewControllerMap {
|
|
51
|
+
{{#each vcTemplateItems}}
|
|
52
|
+
'{{../namespaceKebab}}.{{id}}': {{namePascal}}
|
|
53
|
+
{{/each}}
|
|
54
|
+
{{#each svcTemplateItems}}
|
|
55
|
+
'{{../namespaceKebab}}.{{id}}': {{namePascal}}
|
|
56
|
+
{{/each}}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface ViewControllerOptionsMap {
|
|
60
|
+
{{#each vcTemplateItems}}
|
|
61
|
+
'{{../namespaceKebab}}.{{id}}': ConstructorParameters<typeof {{namePascal}}>[0]
|
|
62
|
+
{{/each}}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface ViewControllerPlugins {
|
|
66
|
+
{{#each viewPluginItems}}
|
|
67
|
+
{{nameCamel}}: {{namePascal}}
|
|
68
|
+
{{/each}}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
interface AppControllerMap {
|
|
72
|
+
{{#if appTemplateItem}}
|
|
73
|
+
'{{namespaceKebab}}': {{appTemplateItem.namePascal}}
|
|
74
|
+
{{/if}}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
//@ts-ignore
|
|
80
|
+
if(typeof heartwood === 'function') {
|
|
81
|
+
{{#if appTemplateItem}}
|
|
82
|
+
//@ts-ignore
|
|
83
|
+
heartwood({ vcs, pluginsByName, App: {{appTemplateItem.namePascal}} })
|
|
84
|
+
{{else}}
|
|
85
|
+
//@ts-ignore
|
|
86
|
+
heartwood({ vcs, pluginsByName })
|
|
87
|
+
{{/if}}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export default vcs
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
export const App = {{#if appTemplateItem}}{{appTemplateItem.namePascal}}{{else}}undefined{{/if}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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 fieldPartial = fs
|
|
6
|
+
.readFileSync(path.join(templatePath, 'schema/partials/fieldDefinitionBody.ts.hbs'))
|
|
7
|
+
.toString();
|
|
8
|
+
handlebars.registerPartial('fieldDefinitionBody', fieldPartial);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { TemplateRenderAs } from '@sprucelabs/schema';
|
|
2
|
+
import handlebars from 'handlebars';
|
|
3
|
+
/** Renders field options */
|
|
4
|
+
handlebars.registerHelper('fieldDefinitionOptions', function (namespace, schemaNameCamel, version, fieldName, fieldDefinition, renderAs, options) {
|
|
5
|
+
if (typeof namespace !== 'string') {
|
|
6
|
+
throw new Error('fieldDefinitionOptions helper needs namespace first');
|
|
7
|
+
}
|
|
8
|
+
if (typeof schemaNameCamel !== 'string') {
|
|
9
|
+
throw new Error('fieldDefinitionOptions helper needs schemaNameCamel 2nd.');
|
|
10
|
+
}
|
|
11
|
+
if (typeof fieldName !== 'string') {
|
|
12
|
+
throw new Error('fieldDefinitionOptions helper needs fieldName 3rd');
|
|
13
|
+
}
|
|
14
|
+
if (!fieldDefinition) {
|
|
15
|
+
throw new Error('fieldDefinitionOptions helper needs a FieldDefinition as the 4th argument');
|
|
16
|
+
}
|
|
17
|
+
if (!options ||
|
|
18
|
+
(renderAs !== TemplateRenderAs.Type &&
|
|
19
|
+
renderAs !== TemplateRenderAs.Value)) {
|
|
20
|
+
throw new Error("fieldDefinitionOptions helper's second arg as type|value");
|
|
21
|
+
}
|
|
22
|
+
const { data: { root }, } = options;
|
|
23
|
+
const schemaTemplateItems = root && root.schemaTemplateItems;
|
|
24
|
+
if (!schemaTemplateItems) {
|
|
25
|
+
throw new Error('fieldDefinitionOptions needs schemaTemplateItems passed to parent template');
|
|
26
|
+
}
|
|
27
|
+
const updatedOptions = fieldDefinition.options && Object.assign({}, fieldDefinition.options);
|
|
28
|
+
// If this is a schema type, we need to map it to it's proper value type
|
|
29
|
+
if (fieldDefinition.type === 'schema' && updatedOptions) {
|
|
30
|
+
const value = handlebars.helpers.valueTypeLiteral(namespace, schemaNameCamel, version, fieldName, renderAs === TemplateRenderAs.Type
|
|
31
|
+
? TemplateRenderAs.SchemaType
|
|
32
|
+
: TemplateRenderAs.Value, options);
|
|
33
|
+
// Swap out id for reference
|
|
34
|
+
delete updatedOptions.schemaId;
|
|
35
|
+
delete updatedOptions.schema;
|
|
36
|
+
delete updatedOptions.schemaIds;
|
|
37
|
+
delete updatedOptions.schemas;
|
|
38
|
+
if (value.substr(-1) === ']') {
|
|
39
|
+
updatedOptions.schemas = value;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
updatedOptions.schema = value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// No options, undefined is acceptable
|
|
46
|
+
if (Object.keys(updatedOptions !== null && updatedOptions !== void 0 ? updatedOptions : {}).length === 0) {
|
|
47
|
+
return 'undefined';
|
|
48
|
+
}
|
|
49
|
+
let template = `{`;
|
|
50
|
+
Object.keys(updatedOptions !== null && updatedOptions !== void 0 ? updatedOptions : {}).forEach((key) => {
|
|
51
|
+
// @ts-ignore TODO how to type this
|
|
52
|
+
const value = updatedOptions[key];
|
|
53
|
+
template += `${key}: `;
|
|
54
|
+
if (key === 'schemas' || key === 'schema') {
|
|
55
|
+
template += `${value},`;
|
|
56
|
+
}
|
|
57
|
+
else if (typeof value !== 'string') {
|
|
58
|
+
template += `${JSON.stringify(value)},`;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
template += `\`${value.replace(/([`])/g, '\\$1')}\`,`;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
template += '}';
|
|
65
|
+
return template;
|
|
66
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import handlebars from 'handlebars';
|
|
2
|
+
/* The enum for schema.fields.fieldName.type as a string */
|
|
3
|
+
handlebars.registerHelper('fieldTypeEnum', function (fieldDefinitions) {
|
|
4
|
+
if (!fieldDefinitions) {
|
|
5
|
+
throw new Error('fieldTypeEnum helper needs a FieldDefinitions as the first argument');
|
|
6
|
+
}
|
|
7
|
+
const { type } = fieldDefinitions;
|
|
8
|
+
return `'${type}'`;
|
|
9
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import handlebars from 'handlebars';
|
|
2
|
+
/** Drop in the value of a field which quotes if needed */
|
|
3
|
+
handlebars.registerHelper('fieldValue', function (fieldDefinitions, value) {
|
|
4
|
+
if (value) {
|
|
5
|
+
throw new Error('field value not yet implemented');
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CORE_NAMESPACE } from '@sprucelabs/spruce-skill-utils';
|
|
2
|
+
import handlebars from 'handlebars';
|
|
3
|
+
handlebars.registerHelper('hasNonCoreSchemaTemplateItems', function (schemaTemplateItems) {
|
|
4
|
+
return (schemaTemplateItems.filter((i) => i.namespace !== CORE_NAMESPACE)
|
|
5
|
+
.length > 0);
|
|
6
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|