@powerhousedao/codegen 0.4.0 → 0.6.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/dist/cli.d.ts +1 -0
- package/dist/cli.js +45 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen/.hygen/templates/powerhouse/generate-document-model/index.js +73 -0
- package/dist/codegen/.hygen/templates/powerhouse/generate-document-model/index.js.map +1 -0
- package/dist/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js +31 -0
- package/dist/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js.map +1 -0
- package/dist/codegen/.hygen/templates/powerhouse/generate-editor/index.js +17 -0
- package/dist/codegen/.hygen/templates/powerhouse/generate-editor/index.js.map +1 -0
- package/dist/codegen/graphql.js +95 -0
- package/dist/codegen/graphql.js.map +1 -0
- package/dist/codegen/hygen.js +115 -0
- package/dist/codegen/hygen.js.map +1 -0
- package/dist/codegen/index.js +100 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/utils.js +33 -0
- package/dist/codegen/utils.js.map +1 -0
- package/dist/create-lib/command.js +21 -0
- package/dist/create-lib/command.js.map +1 -0
- package/dist/create-lib/index.js +136 -0
- package/dist/create-lib/index.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/cli.js +93 -0
- package/dist/utils/cli.js.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/mock.js +11 -0
- package/dist/utils/mock.js.map +1 -0
- package/package.json +5 -4
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var index = require('./codegen/index');
|
|
5
|
+
var utils = require('./utils');
|
|
6
|
+
|
|
7
|
+
async function parseCommand(argv) {
|
|
8
|
+
const args = utils.parseArgs(argv, {
|
|
9
|
+
"--editor": String,
|
|
10
|
+
"-e": "--editor",
|
|
11
|
+
"--document-types": String
|
|
12
|
+
});
|
|
13
|
+
const editorName = args["--editor"];
|
|
14
|
+
return {
|
|
15
|
+
editor: !!editorName,
|
|
16
|
+
editorName,
|
|
17
|
+
documentTypes: args["--document-types"],
|
|
18
|
+
arg: args._
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function main() {
|
|
22
|
+
const argv = process.argv.slice(2);
|
|
23
|
+
const baseConfig = utils.getConfig();
|
|
24
|
+
const argsConfig = utils.parseConfig(argv);
|
|
25
|
+
const config = { ...baseConfig, ...argsConfig };
|
|
26
|
+
if (config.interactive) {
|
|
27
|
+
const result = await utils.promptDirectories(config);
|
|
28
|
+
Object.assign(config, result);
|
|
29
|
+
}
|
|
30
|
+
const command = await parseCommand(argv);
|
|
31
|
+
if (command.editor) {
|
|
32
|
+
await index.generateEditor(
|
|
33
|
+
command.editorName,
|
|
34
|
+
command.documentTypes?.split(/[|,;]/g) ?? [],
|
|
35
|
+
config
|
|
36
|
+
);
|
|
37
|
+
} else if (command.arg.length === 2) {
|
|
38
|
+
await index.generateFromFile(command.arg[1], config);
|
|
39
|
+
} else {
|
|
40
|
+
await index.generate(config);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
main();
|
|
44
|
+
//# sourceMappingURL=cli.js.map
|
|
45
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"names":["parseArgs","getConfig","parseConfig","promptDirectories","generateEditor","generateFromFile","generate"],"mappings":";;;;;;AAIA,eAAe,aAAa,IAAgB,EAAA;AAC1C,EAAM,MAAA,IAAA,GAAOA,gBAAU,IAAM,EAAA;AAAA,IAC3B,UAAY,EAAA,MAAA;AAAA,IACZ,IAAM,EAAA,UAAA;AAAA,IACN,kBAAoB,EAAA,MAAA;AAAA,GACrB,CAAA,CAAA;AACD,EAAM,MAAA,UAAA,GAAa,KAAK,UAAU,CAAA,CAAA;AAClC,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,CAAC,CAAC,UAAA;AAAA,IACV,UAAA;AAAA,IACA,aAAA,EAAe,KAAK,kBAAkB,CAAA;AAAA,IACtC,KAAK,IAAK,CAAA,CAAA;AAAA,GACZ,CAAA;AACF,CAAA;AAEA,eAAe,IAAO,GAAA;AACpB,EAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AACjC,EAAA,MAAM,aAAaC,eAAU,EAAA,CAAA;AAC7B,EAAM,MAAA,UAAA,GAAaC,kBAAY,IAAI,CAAA,CAAA;AACnC,EAAA,MAAM,MAAS,GAAA,EAAE,GAAG,UAAA,EAAY,GAAG,UAAW,EAAA,CAAA;AAC9C,EAAA,IAAI,OAAO,WAAa,EAAA;AACtB,IAAM,MAAA,MAAA,GAAS,MAAMC,uBAAA,CAAkB,MAAM,CAAA,CAAA;AAC7C,IAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,MAAM,CAAA,CAAA;AAAA,GAC9B;AAEA,EAAM,MAAA,OAAA,GAAU,MAAM,YAAA,CAAa,IAAI,CAAA,CAAA;AACvC,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAM,MAAAC,oBAAA;AAAA,MACJ,OAAQ,CAAA,UAAA;AAAA,MACR,OAAQ,CAAA,aAAA,EAAe,KAAM,CAAA,QAAQ,KAAK,EAAC;AAAA,MAC3C,MAAA;AAAA,KACF,CAAA;AAAA,GACS,MAAA,IAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,KAAW,CAAG,EAAA;AACnC,IAAA,MAAMC,sBAAiB,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AAAA,GACxC,MAAA;AACL,IAAA,MAAMC,eAAS,MAAM,CAAA,CAAA;AAAA,GACvB;AACF,CAAA;AAEA,IAAK,EAAA","file":"cli.js","sourcesContent":["#! /usr/bin/env node\nimport { generate, generateEditor, generateFromFile } from \"./codegen/index\";\nimport { parseArgs, getConfig, promptDirectories, parseConfig } from \"./utils\";\n\nasync function parseCommand(argv: string[]) {\n const args = parseArgs(argv, {\n \"--editor\": String,\n \"-e\": \"--editor\",\n \"--document-types\": String,\n });\n const editorName = args[\"--editor\"];\n return {\n editor: !!editorName,\n editorName,\n documentTypes: args[\"--document-types\"],\n arg: args._,\n };\n}\n\nasync function main() {\n const argv = process.argv.slice(2);\n const baseConfig = getConfig();\n const argsConfig = parseConfig(argv);\n const config = { ...baseConfig, ...argsConfig };\n if (config.interactive) {\n const result = await promptDirectories(config);\n Object.assign(config, result);\n }\n\n const command = await parseCommand(argv);\n if (command.editor) {\n await generateEditor(\n command.editorName!,\n command.documentTypes?.split(/[|,;]/g) ?? [],\n config,\n );\n } else if (command.arg.length === 2) {\n await generateFromFile(command.arg[1], config);\n } else {\n await generate(config);\n }\n}\n\nmain();\n"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var changeCase = require('change-case');
|
|
4
|
+
|
|
5
|
+
function documentModelToString(documentModel) {
|
|
6
|
+
return JSON.stringify(
|
|
7
|
+
{
|
|
8
|
+
...documentModel,
|
|
9
|
+
specifications: documentModel.specifications.map((s) => ({
|
|
10
|
+
...s,
|
|
11
|
+
state: Object.keys(s.state).reduce((values, scope) => {
|
|
12
|
+
const state = s.state[scope];
|
|
13
|
+
return {
|
|
14
|
+
...values,
|
|
15
|
+
[scope]: {
|
|
16
|
+
...state,
|
|
17
|
+
// initial value has to be stringified twice
|
|
18
|
+
// as it is expected to be a string
|
|
19
|
+
initialValue: JSON.stringify(state.initialValue)
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}, {})
|
|
23
|
+
}))
|
|
24
|
+
},
|
|
25
|
+
null,
|
|
26
|
+
4
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
var generate_document_model_default = {
|
|
30
|
+
params: ({ args }) => {
|
|
31
|
+
const documentModel = JSON.parse(args.documentModel);
|
|
32
|
+
const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
|
|
33
|
+
return {
|
|
34
|
+
rootDir: args.rootDir,
|
|
35
|
+
documentModel: documentModelToString(documentModel),
|
|
36
|
+
documentTypeId: documentModel.id,
|
|
37
|
+
documentType: documentModel.name,
|
|
38
|
+
extension: documentModel.extension,
|
|
39
|
+
modules: latestSpec.modules.map((m) => ({
|
|
40
|
+
...m,
|
|
41
|
+
name: changeCase.paramCase(m.name)
|
|
42
|
+
})),
|
|
43
|
+
fileExtension: documentModel.extension,
|
|
44
|
+
hasLocalSchema: latestSpec.state.local.schema !== "",
|
|
45
|
+
...getInitialStates(latestSpec.state)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
function getInitialStates(scopeState) {
|
|
50
|
+
const { global, local } = scopeState;
|
|
51
|
+
const scopes = { global, local };
|
|
52
|
+
Object.entries(scopes).forEach(([scope, state]) => {
|
|
53
|
+
if (!isEmptyStateSchema(state.schema) && state.initialValue === "") {
|
|
54
|
+
throw new Error(
|
|
55
|
+
`${scope.charAt(0).toLocaleUpperCase() + scope.slice(1)} scope has a defined schema but is missing an initial value.`
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
initialGlobalState: handleEmptyState(global.initialValue),
|
|
61
|
+
initialLocalState: handleEmptyState(local.initialValue)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function isEmptyStateSchema(schema) {
|
|
65
|
+
return schema === "" || !schema.includes("{");
|
|
66
|
+
}
|
|
67
|
+
function handleEmptyState(state) {
|
|
68
|
+
return state === "" ? "{}" : state;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
module.exports = generate_document_model_default;
|
|
72
|
+
//# sourceMappingURL=index.js.map
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-document-model/index.ts"],"names":["paramCase"],"mappings":"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","file":"index.js","sourcesContent":["import { paramCase } from \"change-case\";\nimport { DocumentModelState, ScopeState } from \"document-model/document-model\";\n\nfunction documentModelToString(documentModel: DocumentModelState) {\n return JSON.stringify(\n {\n ...documentModel,\n specifications: documentModel.specifications.map((s) => ({\n ...s,\n state: Object.keys(s.state).reduce((values, scope) => {\n const state = s.state[scope as keyof typeof s.state];\n return {\n ...values,\n [scope]: {\n ...state,\n // initial value has to be stringified twice\n // as it is expected to be a string\n initialValue: JSON.stringify(state.initialValue),\n },\n };\n }, {}),\n })),\n },\n null,\n 4,\n );\n}\n\nexport type Args = {\n documentModel: string;\n rootDir: string;\n};\n\nexport default {\n params: ({ args }: { args: Args }) => {\n const documentModel = JSON.parse(args.documentModel) as DocumentModelState;\n const latestSpec =\n documentModel.specifications[documentModel.specifications.length - 1];\n\n return {\n rootDir: args.rootDir,\n documentModel: documentModelToString(documentModel),\n documentTypeId: documentModel.id,\n documentType: documentModel.name,\n extension: documentModel.extension,\n modules: latestSpec.modules.map((m) => ({\n ...m,\n name: paramCase(m.name),\n })),\n fileExtension: documentModel.extension,\n hasLocalSchema: latestSpec.state.local.schema !== \"\",\n ...getInitialStates(latestSpec.state),\n };\n },\n};\n\nfunction getInitialStates(scopeState: ScopeState) {\n const { global, local } = scopeState;\n const scopes = { global, local };\n\n Object.entries(scopes).forEach(([scope, state]) => {\n if (!isEmptyStateSchema(state.schema) && state.initialValue === \"\") {\n throw new Error(\n `${\n scope.charAt(0).toLocaleUpperCase() + scope.slice(1)\n } scope has a defined schema but is missing an initial value.`,\n );\n }\n });\n\n return {\n initialGlobalState: handleEmptyState(global.initialValue),\n initialLocalState: handleEmptyState(local.initialValue),\n };\n}\n\nfunction isEmptyStateSchema(schema: string) {\n return schema === \"\" || !schema.includes(\"{\");\n}\n\nfunction handleEmptyState(state: string) {\n return state === \"\" ? \"{}\" : state;\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var changeCase = require('change-case');
|
|
4
|
+
|
|
5
|
+
var generate_document_model_module_default = {
|
|
6
|
+
params: ({ args }) => {
|
|
7
|
+
const documentModel = JSON.parse(args.documentModel);
|
|
8
|
+
const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
|
|
9
|
+
const filteredModules = latestSpec.modules.filter(
|
|
10
|
+
(m) => m.name === args.module
|
|
11
|
+
);
|
|
12
|
+
const actions = filteredModules.length > 0 ? filteredModules[0].operations.map((a) => ({
|
|
13
|
+
name: a.name,
|
|
14
|
+
hasInput: a.schema !== null,
|
|
15
|
+
hasAttachment: a.schema?.includes(": Attachment"),
|
|
16
|
+
scope: a.scope || "global",
|
|
17
|
+
state: a.scope === "global" ? "" : a.scope
|
|
18
|
+
// the state this action affects
|
|
19
|
+
})) : [];
|
|
20
|
+
return {
|
|
21
|
+
rootDir: args.rootDir,
|
|
22
|
+
documentType: documentModel.name,
|
|
23
|
+
module: changeCase.paramCase(args.module),
|
|
24
|
+
actions
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
module.exports = generate_document_model_module_default;
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.ts"],"names":["paramCase"],"mappings":";;;;AAcA,IAAO,sCAAQ,GAAA;AAAA,EACb,MAAQ,EAAA,CAAC,EAAE,IAAA,EAAiC,KAAA;AAC1C,IAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AACnD,IAAA,MAAM,aACJ,aAAc,CAAA,cAAA,CAAe,aAAc,CAAA,cAAA,CAAe,SAAS,CAAC,CAAA,CAAA;AACtE,IAAM,MAAA,eAAA,GAAkB,WAAW,OAAQ,CAAA,MAAA;AAAA,MACzC,CAAC,CAAA,KAAM,CAAE,CAAA,IAAA,KAAS,IAAK,CAAA,MAAA;AAAA,KACzB,CAAA;AAEA,IAAM,MAAA,OAAA,GACJ,eAAgB,CAAA,MAAA,GAAS,CACrB,GAAA,eAAA,CAAgB,CAAC,CAAE,CAAA,UAAA,CAAW,GAAI,CAAA,CAAC,CAAO,MAAA;AAAA,MACxC,MAAM,CAAE,CAAA,IAAA;AAAA,MACR,QAAA,EAAU,EAAE,MAAW,KAAA,IAAA;AAAA,MACvB,aAAe,EAAA,CAAA,CAAE,MAAQ,EAAA,QAAA,CAAS,cAAc,CAAA;AAAA,MAChD,KAAA,EAAO,EAAE,KAAS,IAAA,QAAA;AAAA,MAClB,KAAO,EAAA,CAAA,CAAE,KAAU,KAAA,QAAA,GAAW,KAAK,CAAE,CAAA,KAAA;AAAA;AAAA,KACvC,CAAE,IACF,EAAC,CAAA;AAEP,IAAO,OAAA;AAAA,MACL,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,cAAc,aAAc,CAAA,IAAA;AAAA,MAC5B,MAAA,EAAQA,oBAAU,CAAA,IAAA,CAAK,MAAM,CAAA;AAAA,MAC7B,OAAA;AAAA,KACF,CAAA;AAAA,GACF;AACF","file":"index.js","sourcesContent":["import { DocumentModelState } from \"document-model/document-model\";\nimport { paramCase } from \"change-case\";\nimport { Maybe, OperationScope } from \"document-model/document\";\nimport { Args } from \"../generate-document-model\";\n\ntype ModuleArgs = Args & { module: string };\ntype Actions = {\n name: Maybe<string>;\n hasInput: boolean;\n hasAttachment: boolean | undefined;\n scope: OperationScope;\n state: string;\n};\n\nexport default {\n params: ({ args }: { args: ModuleArgs }) => {\n const documentModel = JSON.parse(args.documentModel) as DocumentModelState;\n const latestSpec =\n documentModel.specifications[documentModel.specifications.length - 1];\n const filteredModules = latestSpec.modules.filter(\n (m) => m.name === args.module,\n );\n\n const actions: Actions[] =\n filteredModules.length > 0\n ? filteredModules[0].operations.map((a) => ({\n name: a.name,\n hasInput: a.schema !== null,\n hasAttachment: a.schema?.includes(\": Attachment\"),\n scope: a.scope || \"global\",\n state: a.scope === \"global\" ? \"\" : a.scope, // the state this action affects\n }))\n : [];\n\n return {\n rootDir: args.rootDir,\n documentType: documentModel.name,\n module: paramCase(args.module),\n actions,\n };\n },\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var generate_editor_default = {
|
|
4
|
+
params: ({ args }) => {
|
|
5
|
+
return {
|
|
6
|
+
rootDir: args.rootDir,
|
|
7
|
+
documentModelsDir: args.documentModelsDir,
|
|
8
|
+
name: args.name,
|
|
9
|
+
documentTypes: args.documentTypes.split(",").filter((type) => type !== ""),
|
|
10
|
+
documentTypesMap: JSON.parse(args.documentTypesMap)
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
module.exports = generate_editor_default;
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-editor/index.ts"],"names":[],"mappings":";;AAQA,IAAO,uBAAQ,GAAA;AAAA,EACb,MAAQ,EAAA,CAAC,EAAE,IAAA,EAA2B,KAAA;AACpC,IAAO,OAAA;AAAA,MACL,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,mBAAmB,IAAK,CAAA,iBAAA;AAAA,MACxB,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,aAAA,EAAe,IAAK,CAAA,aAAA,CACjB,KAAM,CAAA,GAAG,EACT,MAAO,CAAA,CAAC,IAAS,KAAA,IAAA,KAAS,EAAE,CAAA;AAAA,MAC/B,gBAAkB,EAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,gBAAgB,CAAA;AAAA,KAIpD,CAAA;AAAA,GACF;AACF","file":"index.js","sourcesContent":["export type Args = {\n name: string;\n rootDir: string;\n documentModelsDir: string;\n documentTypes: string;\n documentTypesMap: string;\n};\n\nexport default {\n params: ({ args }: { args: Args }) => {\n return {\n rootDir: args.rootDir,\n documentModelsDir: args.documentModelsDir,\n name: args.name,\n documentTypes: args.documentTypes\n .split(\",\")\n .filter((type) => type !== \"\"),\n documentTypesMap: JSON.parse(args.documentTypesMap) as Record<\n string,\n string\n >,\n };\n },\n};\n"]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var cli = require('@graphql-codegen/cli');
|
|
4
|
+
var node_fs = require('node:fs');
|
|
5
|
+
|
|
6
|
+
const getDirectories = (source) => node_fs.readdirSync(source, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
|
7
|
+
const tsConfig = {
|
|
8
|
+
strictScalars: true,
|
|
9
|
+
scalars: {
|
|
10
|
+
Unknown: "unknown",
|
|
11
|
+
DateTime: "string",
|
|
12
|
+
Attachment: "string",
|
|
13
|
+
Address: "`${string}:0x${string}`"
|
|
14
|
+
},
|
|
15
|
+
enumsAsTypes: true,
|
|
16
|
+
allowEnumStringTypes: true,
|
|
17
|
+
avoidOptionals: {
|
|
18
|
+
field: true
|
|
19
|
+
},
|
|
20
|
+
skipTypename: true,
|
|
21
|
+
// maybeValue: "T | null | undefined",
|
|
22
|
+
inputMaybeValue: "T | null | undefined"
|
|
23
|
+
};
|
|
24
|
+
function schemaConfig(name, dir) {
|
|
25
|
+
return {
|
|
26
|
+
[`${dir}/${name}/gen/schema/types.ts`]: {
|
|
27
|
+
schema: [
|
|
28
|
+
{
|
|
29
|
+
[`${dir}/${name}/schema.graphql`]: {
|
|
30
|
+
skipGraphQLImport: false
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
plugins: ["typescript"],
|
|
35
|
+
config: tsConfig
|
|
36
|
+
},
|
|
37
|
+
[`${dir}/${name}/gen/schema/zod.ts`]: {
|
|
38
|
+
schema: `${dir}/${name}/schema.graphql`,
|
|
39
|
+
plugins: ["@acaldas/graphql-codegen-typescript-validation-schema"],
|
|
40
|
+
config: {
|
|
41
|
+
importFrom: `./types`,
|
|
42
|
+
schema: "zod",
|
|
43
|
+
...tsConfig,
|
|
44
|
+
scalarSchemas: {
|
|
45
|
+
Unknown: "z.unknown()",
|
|
46
|
+
DateTime: "z.string().datetime()",
|
|
47
|
+
Attachment: "z.string()",
|
|
48
|
+
Address: "z.custom<`${string}:0x${string}`>((val) => /^[a-zA-Z0-9]+:0x[a-fA-F0-9]{40}$/.test(val as string))"
|
|
49
|
+
},
|
|
50
|
+
directives: {
|
|
51
|
+
equals: {
|
|
52
|
+
value: ["regex", "/^$1$/"]
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
withObjectType: true
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const generateSchema = (model, dir, { watch = false, format = false } = {}) => {
|
|
61
|
+
const documentModelConfig = schemaConfig(model, dir);
|
|
62
|
+
const config = {
|
|
63
|
+
overwrite: true,
|
|
64
|
+
generates: documentModelConfig,
|
|
65
|
+
watch,
|
|
66
|
+
hooks: {
|
|
67
|
+
afterOneFileWrite: format ? ["prettier --ignore-path --write"] : []
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
return cli.generate(config, true);
|
|
71
|
+
};
|
|
72
|
+
const generateSchemas = (dir, { watch = false, format = false } = {}) => {
|
|
73
|
+
const documentModels = getDirectories(dir);
|
|
74
|
+
const documentModelConfigs = documentModels.reduce(
|
|
75
|
+
(obj, model) => ({
|
|
76
|
+
...obj,
|
|
77
|
+
...schemaConfig(model, dir)
|
|
78
|
+
}),
|
|
79
|
+
{}
|
|
80
|
+
);
|
|
81
|
+
const config = {
|
|
82
|
+
overwrite: true,
|
|
83
|
+
generates: documentModelConfigs,
|
|
84
|
+
watch,
|
|
85
|
+
hooks: {
|
|
86
|
+
afterOneFileWrite: format ? ["prettier --ignore-path --write"] : []
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
return cli.generate(config, true);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
exports.generateSchema = generateSchema;
|
|
93
|
+
exports.generateSchemas = generateSchemas;
|
|
94
|
+
//# sourceMappingURL=graphql.js.map
|
|
95
|
+
//# sourceMappingURL=graphql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/graphql.ts"],"names":["readdirSync","generate"],"mappings":";;;;;AAIA,MAAM,cAAA,GAAiB,CAAC,MACtB,KAAAA,mBAAA,CAAY,QAAQ,EAAE,aAAA,EAAe,MAAM,CAAA,CACxC,OAAO,CAAC,MAAA,KAAW,OAAO,WAAY,EAAC,EACvC,GAAI,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAEhC,MAAM,QAAmC,GAAA;AAAA,EACvC,aAAe,EAAA,IAAA;AAAA,EACf,OAAS,EAAA;AAAA,IACP,OAAS,EAAA,SAAA;AAAA,IACT,QAAU,EAAA,QAAA;AAAA,IACV,UAAY,EAAA,QAAA;AAAA,IACZ,OAAS,EAAA,yBAAA;AAAA,GACX;AAAA,EACA,YAAc,EAAA,IAAA;AAAA,EACd,oBAAsB,EAAA,IAAA;AAAA,EACtB,cAAgB,EAAA;AAAA,IACd,KAAO,EAAA,IAAA;AAAA,GACT;AAAA,EACA,YAAc,EAAA,IAAA;AAAA;AAAA,EAEd,eAAiB,EAAA,sBAAA;AACnB,CAAA,CAAA;AAEA,SAAS,YAAA,CAAa,MAAc,GAAyC,EAAA;AAC3E,EAAO,OAAA;AAAA,IACL,CAAC,CAAG,EAAA,GAAG,CAAI,CAAA,EAAA,IAAI,sBAAsB,GAAG;AAAA,MACtC,MAAQ,EAAA;AAAA,QACN;AAAA,UACE,CAAC,CAAG,EAAA,GAAG,CAAI,CAAA,EAAA,IAAI,iBAAiB,GAAG;AAAA,YACjC,iBAAmB,EAAA,KAAA;AAAA,WACrB;AAAA,SACF;AAAA,OACF;AAAA,MACA,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,MACtB,MAAQ,EAAA,QAAA;AAAA,KACV;AAAA,IACA,CAAC,CAAG,EAAA,GAAG,CAAI,CAAA,EAAA,IAAI,oBAAoB,GAAG;AAAA,MACpC,MAAQ,EAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,eAAA,CAAA;AAAA,MACtB,OAAA,EAAS,CAAC,uDAAuD,CAAA;AAAA,MACjE,MAAQ,EAAA;AAAA,QACN,UAAY,EAAA,CAAA,OAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,KAAA;AAAA,QACR,GAAG,QAAA;AAAA,QACH,aAAe,EAAA;AAAA,UACb,OAAS,EAAA,aAAA;AAAA,UACT,QAAU,EAAA,uBAAA;AAAA,UACV,UAAY,EAAA,YAAA;AAAA,UACZ,OACE,EAAA,oGAAA;AAAA,SACJ;AAAA,QACA,UAAY,EAAA;AAAA,UACV,MAAQ,EAAA;AAAA,YACN,KAAA,EAAO,CAAC,OAAA,EAAS,QAAQ,CAAA;AAAA,WAC3B;AAAA,SACF;AAAA,QACA,cAAgB,EAAA,IAAA;AAAA,OAClB;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAEa,MAAA,cAAA,GAAiB,CAC5B,KAAA,EACA,GACA,EAAA,EAAE,KAAQ,GAAA,KAAA,EAAO,MAAS,GAAA,KAAA,EAAU,GAAA,EACjC,KAAA;AACH,EAAM,MAAA,mBAAA,GAAsB,YAAa,CAAA,KAAA,EAAO,GAAG,CAAA,CAAA;AACnD,EAAA,MAAM,MAAwB,GAAA;AAAA,IAC5B,SAAW,EAAA,IAAA;AAAA,IACX,SAAW,EAAA,mBAAA;AAAA,IACX,KAAA;AAAA,IACA,KAAO,EAAA;AAAA,MACL,iBAAmB,EAAA,MAAA,GAAS,CAAC,gCAAgC,IAAI,EAAC;AAAA,KACpE;AAAA,GACF,CAAA;AACA,EAAO,OAAAC,YAAA,CAAS,QAAQ,IAAI,CAAA,CAAA;AAC9B,EAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,GAAA,EACA,EAAE,KAAA,GAAQ,OAAO,MAAS,GAAA,KAAA,EAAU,GAAA,EACjC,KAAA;AACH,EAAM,MAAA,cAAA,GAAiB,eAAe,GAAG,CAAA,CAAA;AACzC,EAAA,MAAM,uBAAuB,cAAe,CAAA,MAAA;AAAA,IAC1C,CAAC,KAAK,KAAW,MAAA;AAAA,MACf,GAAG,GAAA;AAAA,MACH,GAAG,YAAa,CAAA,KAAA,EAAO,GAAG,CAAA;AAAA,KAC5B,CAAA;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,MAAwB,GAAA;AAAA,IAC5B,SAAW,EAAA,IAAA;AAAA,IACX,SAAW,EAAA,oBAAA;AAAA,IACX,KAAA;AAAA,IACA,KAAO,EAAA;AAAA,MACL,iBAAmB,EAAA,MAAA,GAAS,CAAC,gCAAgC,IAAI,EAAC;AAAA,KACpE;AAAA,GACF,CAAA;AACA,EAAO,OAAAA,YAAA,CAAS,QAAQ,IAAI,CAAA,CAAA;AAC9B","file":"graphql.js","sourcesContent":["import { type CodegenConfig, generate } from \"@graphql-codegen/cli\";\nimport { TypeScriptPluginConfig } from \"@graphql-codegen/typescript\";\nimport { readdirSync } from \"node:fs\";\n\nconst getDirectories = (source: string) =>\n readdirSync(source, { withFileTypes: true })\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n\nconst tsConfig: TypeScriptPluginConfig = {\n strictScalars: true,\n scalars: {\n Unknown: \"unknown\",\n DateTime: \"string\",\n Attachment: \"string\",\n Address: \"`${string}:0x${string}`\",\n },\n enumsAsTypes: true,\n allowEnumStringTypes: true,\n avoidOptionals: {\n field: true,\n },\n skipTypename: true,\n // maybeValue: \"T | null | undefined\",\n inputMaybeValue: \"T | null | undefined\",\n};\n\nfunction schemaConfig(name: string, dir: string): CodegenConfig[\"generates\"] {\n return {\n [`${dir}/${name}/gen/schema/types.ts`]: {\n schema: [\n {\n [`${dir}/${name}/schema.graphql`]: {\n skipGraphQLImport: false,\n },\n },\n ],\n plugins: [\"typescript\"],\n config: tsConfig,\n },\n [`${dir}/${name}/gen/schema/zod.ts`]: {\n schema: `${dir}/${name}/schema.graphql`,\n plugins: [\"@acaldas/graphql-codegen-typescript-validation-schema\"],\n config: {\n importFrom: `./types`,\n schema: \"zod\",\n ...tsConfig,\n scalarSchemas: {\n Unknown: \"z.unknown()\",\n DateTime: \"z.string().datetime()\",\n Attachment: \"z.string()\",\n Address:\n \"z.custom<`${string}:0x${string}`>((val) => /^[a-zA-Z0-9]+:0x[a-fA-F0-9]{40}$/.test(val as string))\",\n },\n directives: {\n equals: {\n value: [\"regex\", \"/^$1$/\"],\n },\n },\n withObjectType: true,\n },\n },\n };\n}\n\nexport const generateSchema = (\n model: string,\n dir: string,\n { watch = false, format = false } = {},\n) => {\n const documentModelConfig = schemaConfig(model, dir);\n const config: CodegenConfig = {\n overwrite: true,\n generates: documentModelConfig,\n watch,\n hooks: {\n afterOneFileWrite: format ? [\"prettier --ignore-path --write\"] : [],\n },\n };\n return generate(config, true);\n};\n\nexport const generateSchemas = (\n dir: string,\n { watch = false, format = false } = {},\n) => {\n const documentModels = getDirectories(dir);\n const documentModelConfigs = documentModels.reduce(\n (obj, model) => ({\n ...obj,\n ...schemaConfig(model, dir),\n }),\n {},\n );\n\n const config: CodegenConfig = {\n overwrite: true,\n generates: documentModelConfigs,\n watch,\n hooks: {\n afterOneFileWrite: format ? [\"prettier --ignore-path --write\"] : [],\n },\n };\n return generate(config, true);\n};\n"]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('node:fs');
|
|
4
|
+
var hygen = require('hygen');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
var utils = require('./utils');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
11
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
12
|
+
|
|
13
|
+
const logger = new hygen.Logger(console.log.bind(console));
|
|
14
|
+
const defaultTemplates = path__default.default.join(__dirname, ".hygen", "templates");
|
|
15
|
+
async function run(args, { watch = false, format = false } = {}) {
|
|
16
|
+
const result = await hygen.runner(args, {
|
|
17
|
+
templates: defaultTemplates,
|
|
18
|
+
cwd: process.cwd(),
|
|
19
|
+
logger,
|
|
20
|
+
createPrompter: () => {
|
|
21
|
+
return require("enquirer");
|
|
22
|
+
},
|
|
23
|
+
exec: (action, body) => {
|
|
24
|
+
const opts = body && body.length > 0 ? { input: body } : {};
|
|
25
|
+
return require("execa").shell(action, opts);
|
|
26
|
+
},
|
|
27
|
+
debug: !!process.env.DEBUG
|
|
28
|
+
});
|
|
29
|
+
if (format) {
|
|
30
|
+
const execa = await import('execa');
|
|
31
|
+
const actions = result.actions;
|
|
32
|
+
actions.filter((action) => ["added", "inject"].includes(action.status)).forEach((action) => {
|
|
33
|
+
execa.$`prettier --ignore-path --write ${action.subject.replace(
|
|
34
|
+
".",
|
|
35
|
+
process.cwd()
|
|
36
|
+
)}`.catch((err) => {
|
|
37
|
+
console.log(err);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
async function generateAll(dir, { watch = false, format = false } = {}) {
|
|
44
|
+
const files = fs__default.default.readdirSync(dir, { withFileTypes: true });
|
|
45
|
+
for (const directory of files.filter((f) => f.isDirectory())) {
|
|
46
|
+
const documentModelPath = path__default.default.join(
|
|
47
|
+
dir,
|
|
48
|
+
directory.name,
|
|
49
|
+
`${directory.name}.json`
|
|
50
|
+
);
|
|
51
|
+
if (!fs__default.default.existsSync(documentModelPath)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const documentModel = await utils.loadDocumentModel(documentModelPath);
|
|
56
|
+
await generateDocumentModel(documentModel, dir, { watch, format });
|
|
57
|
+
} catch (error) {
|
|
58
|
+
console.error(directory.name, error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function generateDocumentModel(documentModel, dir, { watch = false, format = false } = {}) {
|
|
63
|
+
await run(
|
|
64
|
+
[
|
|
65
|
+
"powerhouse",
|
|
66
|
+
"generate-document-model",
|
|
67
|
+
"--document-model",
|
|
68
|
+
JSON.stringify(documentModel),
|
|
69
|
+
"--root-dir",
|
|
70
|
+
dir
|
|
71
|
+
],
|
|
72
|
+
{ watch, format }
|
|
73
|
+
);
|
|
74
|
+
const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
|
|
75
|
+
for (const module of latestSpec.modules) {
|
|
76
|
+
await run(
|
|
77
|
+
[
|
|
78
|
+
"powerhouse",
|
|
79
|
+
"generate-document-model-module",
|
|
80
|
+
"--document-model",
|
|
81
|
+
JSON.stringify(documentModel),
|
|
82
|
+
"--root-dir",
|
|
83
|
+
dir,
|
|
84
|
+
"--module",
|
|
85
|
+
module.name
|
|
86
|
+
],
|
|
87
|
+
{ watch, format }
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function generateEditor(name, documentTypes, documentTypesMap, dir, documentModelsDir, { format = false } = {}) {
|
|
92
|
+
await run(
|
|
93
|
+
[
|
|
94
|
+
"powerhouse",
|
|
95
|
+
"generate-editor",
|
|
96
|
+
"--name",
|
|
97
|
+
name,
|
|
98
|
+
"--root-dir",
|
|
99
|
+
dir,
|
|
100
|
+
"--document-types",
|
|
101
|
+
documentTypes.join(","),
|
|
102
|
+
"--document-types-map",
|
|
103
|
+
JSON.stringify(documentTypesMap),
|
|
104
|
+
"--document-models-dir",
|
|
105
|
+
documentModelsDir
|
|
106
|
+
],
|
|
107
|
+
{ format }
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
exports.generateAll = generateAll;
|
|
112
|
+
exports.generateDocumentModel = generateDocumentModel;
|
|
113
|
+
exports.generateEditor = generateEditor;
|
|
114
|
+
//# sourceMappingURL=hygen.js.map
|
|
115
|
+
//# sourceMappingURL=hygen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/hygen.ts"],"names":["Logger","path","runner","fs","loadDocumentModel"],"mappings":"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","file":"hygen.js","sourcesContent":["import { DocumentModel } from \"document-model\";\nimport fs from \"node:fs\";\nimport { Logger, runner } from \"hygen\";\nimport path from \"path\";\nimport { loadDocumentModel } from \"./utils\";\n\nconst logger = new Logger(console.log.bind(console));\nconst defaultTemplates = path.join(__dirname, \".hygen\", \"templates\");\n\nasync function run(args: string[], { watch = false, format = false } = {}) {\n const result = await runner(args, {\n templates: defaultTemplates,\n cwd: process.cwd(),\n logger,\n createPrompter: () => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-require-imports\n return require(\"enquirer\");\n },\n exec: (action, body) => {\n const opts = body && body.length > 0 ? { input: body } : {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-require-imports\n return require(\"execa\").shell(action, opts);\n },\n debug: !!process.env.DEBUG,\n });\n if (format) {\n const execa = await import(\"execa\");\n const actions = result.actions as { status: string; subject: string }[];\n actions\n .filter((action) => [\"added\", \"inject\"].includes(action.status))\n .forEach((action) => {\n execa.$`prettier --ignore-path --write ${action.subject.replace(\n \".\",\n process.cwd(),\n )}`.catch((err: unknown) => {\n console.log(err);\n });\n });\n }\n\n return result;\n}\n\nexport async function generateAll(\n dir: string,\n { watch = false, format = false } = {},\n) {\n const files = fs.readdirSync(dir, { withFileTypes: true });\n for (const directory of files.filter((f) => f.isDirectory())) {\n const documentModelPath = path.join(\n dir,\n directory.name,\n `${directory.name}.json`,\n );\n if (!fs.existsSync(documentModelPath)) {\n continue;\n }\n\n try {\n const documentModel = await loadDocumentModel(documentModelPath);\n await generateDocumentModel(documentModel, dir, { watch, format });\n } catch (error) {\n console.error(directory.name, error);\n }\n }\n}\n\nexport async function generateDocumentModel(\n documentModel: DocumentModel.DocumentModelState,\n dir: string,\n { watch = false, format = false } = {},\n) {\n // Generate the singular files for the document model logic\n await run(\n [\n \"powerhouse\",\n \"generate-document-model\",\n \"--document-model\",\n JSON.stringify(documentModel),\n \"--root-dir\",\n dir,\n ],\n { watch, format },\n );\n\n // Generate the module-specific files for the document model logic\n const latestSpec =\n documentModel.specifications[documentModel.specifications.length - 1];\n for (const module of latestSpec.modules) {\n await run(\n [\n \"powerhouse\",\n \"generate-document-model-module\",\n \"--document-model\",\n JSON.stringify(documentModel),\n \"--root-dir\",\n dir,\n \"--module\",\n module.name,\n ],\n { watch, format },\n );\n }\n}\n\nexport async function generateEditor(\n name: string,\n documentTypes: string[],\n documentTypesMap: Record<string, string>,\n dir: string,\n documentModelsDir: string,\n { format = false } = {},\n) {\n // Generate the singular files for the document model logic\n await run(\n [\n \"powerhouse\",\n \"generate-editor\",\n \"--name\",\n name,\n \"--root-dir\",\n dir,\n \"--document-types\",\n documentTypes.join(\",\"),\n \"--document-types-map\",\n JSON.stringify(documentTypesMap),\n \"--document-models-dir\",\n documentModelsDir,\n ],\n { format },\n );\n}\n"]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var hygen = require('./hygen');
|
|
5
|
+
var graphql = require('./graphql');
|
|
6
|
+
var fs = require('node:fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var changeCase = require('change-case');
|
|
9
|
+
var utils = require('./utils');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
14
|
+
|
|
15
|
+
function generateGraphqlSchema(documentModel) {
|
|
16
|
+
const spec = documentModel.specifications[documentModel.specifications.length - 1];
|
|
17
|
+
if (!spec) {
|
|
18
|
+
console.log(`No spec found for ${documentModel.id}`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const {
|
|
22
|
+
modules,
|
|
23
|
+
state: { global, local }
|
|
24
|
+
} = spec;
|
|
25
|
+
const schemas = [
|
|
26
|
+
global.schema,
|
|
27
|
+
local.schema,
|
|
28
|
+
...modules.map((module) => [
|
|
29
|
+
`# ${module.name}`,
|
|
30
|
+
...module.operations.map((op) => op.schema)
|
|
31
|
+
]).flat().filter((schema) => schema && schema.length > 0)
|
|
32
|
+
];
|
|
33
|
+
return schemas.join("\n\n");
|
|
34
|
+
}
|
|
35
|
+
function getDocumentTypesMap(dir) {
|
|
36
|
+
const documentTypesMap = {};
|
|
37
|
+
fs__default.default.readdirSync(dir, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name).forEach((name) => {
|
|
38
|
+
const specPath = path.resolve(dir, name, `${name}.json`);
|
|
39
|
+
if (!fs__default.default.existsSync(specPath)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const specRaw = fs__default.default.readFileSync(specPath, "utf-8");
|
|
43
|
+
try {
|
|
44
|
+
const spec = JSON.parse(specRaw);
|
|
45
|
+
if (spec.id) {
|
|
46
|
+
documentTypesMap[spec.id] = changeCase.pascalCase(name);
|
|
47
|
+
}
|
|
48
|
+
} catch {
|
|
49
|
+
console.error(`Failed to parse ${specPath}`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return documentTypesMap;
|
|
53
|
+
}
|
|
54
|
+
async function generate(config) {
|
|
55
|
+
const { format, watch } = config;
|
|
56
|
+
await graphql.generateSchemas(config.documentModelsDir, { format, watch });
|
|
57
|
+
await hygen.generateAll(config.documentModelsDir, { format, watch });
|
|
58
|
+
}
|
|
59
|
+
async function generateFromFile(path$1, config) {
|
|
60
|
+
const documentModel = await utils.loadDocumentModel(path$1);
|
|
61
|
+
const name = changeCase.paramCase(documentModel.name);
|
|
62
|
+
fs__default.default.mkdirSync(path.join(config.documentModelsDir, name), { recursive: true });
|
|
63
|
+
fs__default.default.writeFileSync(
|
|
64
|
+
path.join(config.documentModelsDir, name, `${name}.json`),
|
|
65
|
+
JSON.stringify(documentModel, null, 4)
|
|
66
|
+
);
|
|
67
|
+
const schemaStr = generateGraphqlSchema(documentModel);
|
|
68
|
+
if (schemaStr) {
|
|
69
|
+
fs__default.default.writeFileSync(
|
|
70
|
+
path.join(config.documentModelsDir, name, `schema.graphql`),
|
|
71
|
+
schemaStr
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
await graphql.generateSchema(name, config.documentModelsDir, config);
|
|
75
|
+
await hygen.generateDocumentModel(documentModel, config.documentModelsDir, config);
|
|
76
|
+
}
|
|
77
|
+
async function generateEditor(name, documentTypes, config) {
|
|
78
|
+
const { documentModelsDir, format } = config;
|
|
79
|
+
const docummentTypesMap = getDocumentTypesMap(documentModelsDir);
|
|
80
|
+
const invalidType = documentTypes.find(
|
|
81
|
+
(type) => !Object.keys(docummentTypesMap).includes(type)
|
|
82
|
+
);
|
|
83
|
+
if (invalidType) {
|
|
84
|
+
throw new Error(`Document model for ${invalidType} not found`);
|
|
85
|
+
}
|
|
86
|
+
return hygen.generateEditor(
|
|
87
|
+
name,
|
|
88
|
+
documentTypes,
|
|
89
|
+
docummentTypesMap,
|
|
90
|
+
config.editorsDir,
|
|
91
|
+
config.documentModelsDir,
|
|
92
|
+
{ format }
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
exports.generate = generate;
|
|
97
|
+
exports.generateEditor = generateEditor;
|
|
98
|
+
exports.generateFromFile = generateFromFile;
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/index.ts"],"names":["fs","resolve","pascalCase","generateSchemas","generateAll","path","loadDocumentModel","paramCase","join","generateSchema","generateDocumentModel","_generateEditor"],"mappings":"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","file":"index.js","sourcesContent":["#! /usr/bin/env node\nimport { DocumentModelState } from \"document-model/document-model\";\nimport {\n generateAll,\n generateEditor as _generateEditor,\n generateDocumentModel,\n} from \"./hygen\";\nimport { generateSchemas, generateSchema } from \"./graphql\";\nimport type { PowerhouseConfig } from \"../utils\";\nimport fs from \"node:fs\";\nimport { join, resolve } from \"path\";\nimport { paramCase, pascalCase } from \"change-case\";\nimport { loadDocumentModel } from \"./utils\";\n\nfunction generateGraphqlSchema(documentModel: DocumentModelState) {\n const spec =\n documentModel.specifications[documentModel.specifications.length - 1];\n\n if (!spec) {\n console.log(`No spec found for ${documentModel.id}`);\n return;\n }\n\n const {\n modules,\n state: { global, local },\n } = spec;\n const schemas = [\n global.schema,\n local.schema,\n ...modules\n .map((module) => [\n `# ${module.name}`,\n ...module.operations.map((op) => op.schema),\n ])\n .flat()\n .filter((schema) => schema && schema.length > 0),\n ];\n return schemas.join(\"\\n\\n\");\n}\n\nfunction getDocumentTypesMap(dir: string) {\n const documentTypesMap: Record<string, string> = {};\n fs.readdirSync(dir, { withFileTypes: true })\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name)\n .forEach((name) => {\n const specPath = resolve(dir, name, `${name}.json`);\n if (!fs.existsSync(specPath)) {\n return;\n }\n\n const specRaw = fs.readFileSync(specPath, \"utf-8\");\n try {\n const spec = JSON.parse(specRaw) as DocumentModelState;\n if (spec.id) {\n documentTypesMap[spec.id] = pascalCase(name);\n }\n } catch {\n console.error(`Failed to parse ${specPath}`);\n }\n });\n return documentTypesMap;\n}\n\nexport async function generate(config: PowerhouseConfig) {\n const { format, watch } = config;\n await generateSchemas(config.documentModelsDir, { format, watch });\n await generateAll(config.documentModelsDir, { format, watch });\n}\n\nexport async function generateFromFile(path: string, config: PowerhouseConfig) {\n // load document model spec from file\n const documentModel = await loadDocumentModel(path);\n\n const name = paramCase(documentModel.name);\n\n // create document model folder and spec as json\n fs.mkdirSync(join(config.documentModelsDir, name), { recursive: true });\n fs.writeFileSync(\n join(config.documentModelsDir, name, `${name}.json`),\n JSON.stringify(documentModel, null, 4),\n );\n\n // bundle graphql schemas together\n const schemaStr = generateGraphqlSchema(documentModel);\n if (schemaStr) {\n fs.writeFileSync(\n join(config.documentModelsDir, name, `schema.graphql`),\n schemaStr,\n );\n }\n\n await generateSchema(name, config.documentModelsDir, config);\n await generateDocumentModel(documentModel, config.documentModelsDir, config);\n}\n\nexport async function generateEditor(\n name: string,\n documentTypes: string[],\n config: PowerhouseConfig,\n) {\n const { documentModelsDir, format } = config;\n const docummentTypesMap = getDocumentTypesMap(documentModelsDir);\n\n const invalidType = documentTypes.find(\n (type) => !Object.keys(docummentTypesMap).includes(type),\n );\n if (invalidType) {\n throw new Error(`Document model for ${invalidType} not found`);\n }\n return _generateEditor(\n name,\n documentTypes,\n docummentTypesMap,\n config.editorsDir,\n config.documentModelsDir,\n { format },\n );\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var documentModel = require('document-model/document-model');
|
|
4
|
+
var fs = require('node:fs');
|
|
5
|
+
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
9
|
+
|
|
10
|
+
async function loadDocumentModel(path) {
|
|
11
|
+
let documentModel$1;
|
|
12
|
+
try {
|
|
13
|
+
if (!path) {
|
|
14
|
+
throw new Error("Document model file not specified");
|
|
15
|
+
} else if (path.endsWith(".zip")) {
|
|
16
|
+
const file = await documentModel.utils.loadFromFile(path);
|
|
17
|
+
documentModel$1 = file.state.global;
|
|
18
|
+
} else if (path.endsWith(".json")) {
|
|
19
|
+
const data = fs__default.default.readFileSync(path, "utf-8");
|
|
20
|
+
const document = JSON.parse(data);
|
|
21
|
+
documentModel$1 = document;
|
|
22
|
+
} else {
|
|
23
|
+
throw new Error("File type not supported. Must be zip or json.");
|
|
24
|
+
}
|
|
25
|
+
return documentModel$1;
|
|
26
|
+
} catch (error) {
|
|
27
|
+
throw error.code === "MODULE_NOT_FOUND" ? new Error(`Document model not found.`) : error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
exports.loadDocumentModel = loadDocumentModel;
|
|
32
|
+
//# sourceMappingURL=utils.js.map
|
|
33
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/utils.ts"],"names":["documentModel","utils","fs"],"mappings":";;;;;;;;;AAGA,eAAsB,kBACpB,IAC6B,EAAA;AAC7B,EAAI,IAAAA,eAAA,CAAA;AACJ,EAAI,IAAA;AACF,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAM,MAAA,IAAI,MAAM,mCAAmC,CAAA,CAAA;AAAA,KAC1C,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,MAAM,CAAG,EAAA;AAChC,MAAA,MAAM,IAAO,GAAA,MAAMC,mBAAM,CAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAC1C,MAAAD,eAAA,GAAgB,KAAK,KAAM,CAAA,MAAA,CAAA;AAAA,KAClB,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,OAAO,CAAG,EAAA;AACjC,MAAA,MAAM,IAAO,GAAAE,mBAAA,CAAG,YAAa,CAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAC1C,MAAM,MAAA,QAAA,GAAW,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAEhC,MAAgBF,eAAA,GAAA,QAAA,CAAA;AAAA,KACX,MAAA;AACL,MAAM,MAAA,IAAI,MAAM,+CAA+C,CAAA,CAAA;AAAA,KACjE;AACA,IAAO,OAAAA,eAAA,CAAA;AAAA,WACA,KAAO,EAAA;AAEd,IAAA,MAAM,MAAM,IAAS,KAAA,kBAAA,GACjB,IAAI,KAAA,CAAM,2BAA2B,CACrC,GAAA,KAAA,CAAA;AAAA,GACN;AACF","file":"utils.js","sourcesContent":["import { DocumentModelState, utils, z } from \"document-model/document-model\";\nimport fs from \"node:fs\";\n\nexport async function loadDocumentModel(\n path: string,\n): Promise<DocumentModelState> {\n let documentModel: DocumentModelState;\n try {\n if (!path) {\n throw new Error(\"Document model file not specified\");\n } else if (path.endsWith(\".zip\")) {\n const file = await utils.loadFromFile(path);\n documentModel = file.state.global;\n } else if (path.endsWith(\".json\")) {\n const data = fs.readFileSync(path, \"utf-8\");\n const document = JSON.parse(data) as DocumentModelState;\n // z.DocumentModelStateSchema().parse(document);\n documentModel = document;\n } else {\n throw new Error(\"File type not supported. Must be zip or json.\");\n }\n return documentModel;\n } catch (error) {\n // @ts-expect-error\n throw error.code === \"MODULE_NOT_FOUND\"\n ? new Error(`Document model not found.`)\n : error;\n }\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const packageManagers = ["npm", "yarn", "pnpm", "bun"];
|
|
4
|
+
const defaultPackageManager = "npm";
|
|
5
|
+
function getPackageManager(userAgent) {
|
|
6
|
+
if (!userAgent) {
|
|
7
|
+
return defaultPackageManager;
|
|
8
|
+
}
|
|
9
|
+
const pkgSpec = userAgent.split(" ")[0];
|
|
10
|
+
const pkgSpecArr = pkgSpec.split("/");
|
|
11
|
+
const name = pkgSpecArr[0];
|
|
12
|
+
if (packageManagers.includes(name)) {
|
|
13
|
+
return name;
|
|
14
|
+
} else {
|
|
15
|
+
return defaultPackageManager;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.getPackageManager = getPackageManager;
|
|
20
|
+
//# sourceMappingURL=command.js.map
|
|
21
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/create-lib/command.ts"],"names":[],"mappings":";;AAAA,MAAM,eAAkB,GAAA,CAAC,KAAO,EAAA,MAAA,EAAQ,QAAQ,KAAK,CAAA,CAAA;AACrD,MAAM,qBAAwB,GAAA,KAAA,CAAA;AAIvB,SAAS,kBAAkB,SAAoC,EAAA;AACpE,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,qBAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,OAAU,GAAA,SAAA,CAAU,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA,CAAA;AACtC,EAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AACpC,EAAM,MAAA,IAAA,GAAO,WAAW,CAAC,CAAA,CAAA;AAEzB,EAAI,IAAA,eAAA,CAAgB,QAAS,CAAA,IAAsB,CAAG,EAAA;AACpD,IAAO,OAAA,IAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,qBAAA,CAAA;AAAA,GACT;AACF","file":"command.js","sourcesContent":["const packageManagers = [\"npm\", \"yarn\", \"pnpm\", \"bun\"] as const;\nconst defaultPackageManager = \"npm\";\n\nexport type PackageManager = (typeof packageManagers)[number];\n\nexport function getPackageManager(userAgent?: string): PackageManager {\n if (!userAgent) {\n return defaultPackageManager;\n }\n\n const pkgSpec = userAgent.split(\" \")[0];\n const pkgSpecArr = pkgSpec.split(\"/\");\n const name = pkgSpecArr[0];\n\n if (packageManagers.includes(name as PackageManager)) {\n return name as PackageManager;\n } else {\n return defaultPackageManager;\n }\n}\n\nfunction pkgFromUserAgent(userAgent: string | undefined) {\n if (!userAgent) return undefined;\n const pkgSpec = userAgent.split(\" \")[0];\n const pkgSpecArr = pkgSpec.split(\"/\");\n return {\n name: pkgSpecArr[0],\n version: pkgSpecArr[1],\n };\n}\n"]}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var child_process = require('child_process');
|
|
5
|
+
var enquirer = require('enquirer');
|
|
6
|
+
var fs = require('node:fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var cli = require('../utils/cli');
|
|
9
|
+
var command = require('./command');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
14
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
15
|
+
|
|
16
|
+
const BOILERPLATE_REPO = "https://github.com/powerhouse-inc/document-model-boilerplate.git";
|
|
17
|
+
const packageManager = command.getPackageManager(process.env.npm_config_user_agent);
|
|
18
|
+
const isNpm = packageManager === "npm";
|
|
19
|
+
function buildPackageJson(appPath, projectName) {
|
|
20
|
+
const packageJson = JSON.parse(
|
|
21
|
+
fs__default.default.readFileSync(path__default.default.join(appPath, "package.json"), "utf-8")
|
|
22
|
+
);
|
|
23
|
+
const newPackage = {
|
|
24
|
+
...packageJson,
|
|
25
|
+
name: projectName,
|
|
26
|
+
version: "1.0.0",
|
|
27
|
+
description: ""
|
|
28
|
+
};
|
|
29
|
+
fs__default.default.writeFileSync(
|
|
30
|
+
path__default.default.join(appPath, "package.json"),
|
|
31
|
+
JSON.stringify(newPackage, null, 2),
|
|
32
|
+
"utf8"
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
function buildPowerhouseConfig(appPath, documentModelsDir, editorsDir) {
|
|
36
|
+
const filePath = path__default.default.join(appPath, "powerhouse.config.json");
|
|
37
|
+
const packageJson = JSON.parse(fs__default.default.readFileSync(filePath, "utf-8"));
|
|
38
|
+
const newPackage = {
|
|
39
|
+
...packageJson,
|
|
40
|
+
documentModelsDir,
|
|
41
|
+
editorsDir
|
|
42
|
+
};
|
|
43
|
+
fs__default.default.writeFileSync(filePath, JSON.stringify(newPackage, null, 2), "utf8");
|
|
44
|
+
}
|
|
45
|
+
function buildIndex(appPath, documentModelsDir, editorsDir) {
|
|
46
|
+
fs__default.default.writeFileSync(
|
|
47
|
+
path__default.default.join(appPath, "index.ts"),
|
|
48
|
+
`import * as documentModelsExports from '${documentModelsDir}';
|
|
49
|
+
import * as editorsExports from '${editorsDir}';
|
|
50
|
+
|
|
51
|
+
export const documentModels = Object.values(documentModelsExports);
|
|
52
|
+
export const editors = Object.values(editorsExports);`,
|
|
53
|
+
"utf8"
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function runCmd(command) {
|
|
57
|
+
try {
|
|
58
|
+
child_process.execSync(command, { stdio: "inherit" });
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.log("\x1B[31m", error, "\x1B[0m");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function init() {
|
|
64
|
+
const args = cli.parseArgs(process.argv.slice(2), cli.configSpec);
|
|
65
|
+
let projectName = args._.shift();
|
|
66
|
+
if (!projectName) {
|
|
67
|
+
const result = await enquirer.prompt([
|
|
68
|
+
{
|
|
69
|
+
type: "input",
|
|
70
|
+
name: "projectName",
|
|
71
|
+
message: "What is the project name?",
|
|
72
|
+
required: true
|
|
73
|
+
}
|
|
74
|
+
]);
|
|
75
|
+
if (!result.projectName) {
|
|
76
|
+
console.log("\x1B[31m", "You have to provide name to your app.");
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
projectName = result.projectName;
|
|
80
|
+
}
|
|
81
|
+
const { documentModelsDir, editorsDir } = args["--interactive"] ? await cli.promptDirectories() : cli.DEFAULT_CONFIG;
|
|
82
|
+
const appPath = path__default.default.join(process.cwd(), projectName);
|
|
83
|
+
try {
|
|
84
|
+
fs__default.default.mkdirSync(appPath);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
if (err.code === "EEXIST") {
|
|
87
|
+
console.log(
|
|
88
|
+
"\x1B[31m",
|
|
89
|
+
`The folder ${projectName} already exists in the current directory, please give it another name.`,
|
|
90
|
+
"\x1B[0m"
|
|
91
|
+
);
|
|
92
|
+
} else {
|
|
93
|
+
console.log(err);
|
|
94
|
+
}
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
createProject(projectName, documentModelsDir, editorsDir);
|
|
98
|
+
}
|
|
99
|
+
function createProject(projectName, documentModelsDir, editorsDir) {
|
|
100
|
+
try {
|
|
101
|
+
console.log("\x1B[33m", "Downloading the project structure...", "\x1B[0m");
|
|
102
|
+
runCmd(`git clone --depth 1 ${BOILERPLATE_REPO} ${projectName}`);
|
|
103
|
+
const appPath = path__default.default.join(process.cwd(), projectName);
|
|
104
|
+
process.chdir(appPath);
|
|
105
|
+
console.log("\x1B[34m", "Installing dependencies...", "\x1B[0m");
|
|
106
|
+
runCmd(`${packageManager} install`);
|
|
107
|
+
fs__default.default.rmSync(path__default.default.join(appPath, "./.git"), { recursive: true });
|
|
108
|
+
runCmd("git init");
|
|
109
|
+
try {
|
|
110
|
+
fs__default.default.mkdirSync(path__default.default.join(appPath, documentModelsDir));
|
|
111
|
+
fs__default.default.writeFileSync(path__default.default.join(appPath, documentModelsDir, "index.ts"), "");
|
|
112
|
+
fs__default.default.mkdirSync(path__default.default.join(appPath, editorsDir));
|
|
113
|
+
fs__default.default.writeFileSync(path__default.default.join(appPath, editorsDir, "index.ts"), "");
|
|
114
|
+
} catch (error) {
|
|
115
|
+
if (!error.message.includes("EEXIST")) {
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
buildPackageJson(appPath, projectName);
|
|
120
|
+
buildPowerhouseConfig(appPath, documentModelsDir, editorsDir);
|
|
121
|
+
buildIndex(appPath, documentModelsDir, editorsDir);
|
|
122
|
+
console.log("\x1B[32m", "The installation is done!", "\x1B[0m");
|
|
123
|
+
console.log();
|
|
124
|
+
console.log("\x1B[34m", "You can start by typing:");
|
|
125
|
+
console.log(` cd ${projectName}`);
|
|
126
|
+
console.log(
|
|
127
|
+
isNpm ? " npm run generate" : ` ${packageManager} generate`,
|
|
128
|
+
"\x1B[0m"
|
|
129
|
+
);
|
|
130
|
+
} catch (error) {
|
|
131
|
+
console.log(error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
init();
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
136
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/create-lib/index.ts"],"names":["getPackageManager","fs","path","execSync","parseArgs","configSpec","prompt","promptDirectories","DEFAULT_CONFIG"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,gBACJ,GAAA,kEAAA,CAAA;AAEF,MAAM,cAAiB,GAAAA,yBAAA,CAAkB,OAAQ,CAAA,GAAA,CAAI,qBAAqB,CAAA,CAAA;AAC1E,MAAM,QAAQ,cAAmB,KAAA,KAAA,CAAA;AAEjC,SAAS,gBAAA,CAAiB,SAAiB,WAAqB,EAAA;AAC9D,EAAA,MAAM,cAAc,IAAK,CAAA,KAAA;AAAA,IACvBC,oBAAG,YAAa,CAAAC,qBAAA,CAAK,KAAK,OAAS,EAAA,cAAc,GAAG,OAAO,CAAA;AAAA,GAC7D,CAAA;AACA,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,GAAG,WAAA;AAAA,IACH,IAAM,EAAA,WAAA;AAAA,IACN,OAAS,EAAA,OAAA;AAAA,IACT,WAAa,EAAA,EAAA;AAAA,GACf,CAAA;AAEA,EAAGD,mBAAA,CAAA,aAAA;AAAA,IACDC,qBAAA,CAAK,IAAK,CAAA,OAAA,EAAS,cAAc,CAAA;AAAA,IACjC,IAAK,CAAA,SAAA,CAAU,UAAY,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA,IAClC,MAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,qBAAA,CACP,OACA,EAAA,iBAAA,EACA,UACA,EAAA;AACA,EAAA,MAAM,QAAW,GAAAA,qBAAA,CAAK,IAAK,CAAA,OAAA,EAAS,wBAAwB,CAAA,CAAA;AAC5D,EAAA,MAAM,cAAc,IAAK,CAAA,KAAA,CAAMD,oBAAG,YAAa,CAAA,QAAA,EAAU,OAAO,CAAC,CAAA,CAAA;AAIjE,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,GAAG,WAAA;AAAA,IACH,iBAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AAEA,EAAGA,mBAAA,CAAA,aAAA,CAAc,UAAU,IAAK,CAAA,SAAA,CAAU,YAAY,IAAM,EAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AACxE,CAAA;AAEA,SAAS,UAAA,CACP,OACA,EAAA,iBAAA,EACA,UACA,EAAA;AACA,EAAGA,mBAAA,CAAA,aAAA;AAAA,IACDC,qBAAA,CAAK,IAAK,CAAA,OAAA,EAAS,UAAU,CAAA;AAAA,IAC7B,2CAA2C,iBAAiB,CAAA;AAAA,yCAAA,EACrB,UAAU,CAAA;AAAA;AAAA;AAAA,6DAAA,CAAA;AAAA,IAIjD,MAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,OAAO,OAAiB,EAAA;AAC/B,EAAI,IAAA;AACF,IAAAC,sBAAA,CAAS,OAAS,EAAA,EAAE,KAAO,EAAA,SAAA,EAAW,CAAA,CAAA;AAAA,WAC/B,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,GAAA,CAAI,UAAY,EAAA,KAAA,EAAO,SAAS,CAAA,CAAA;AAAA,GAC1C;AACF,CAAA;AAEA,eAAe,IAAO,GAAA;AACpB,EAAA,MAAM,OAAOC,aAAU,CAAA,OAAA,CAAQ,KAAK,KAAM,CAAA,CAAC,GAAGC,cAAU,CAAA,CAAA;AAGxD,EAAI,IAAA,WAAA,GAAc,IAAK,CAAA,CAAA,CAAE,KAAM,EAAA,CAAA;AAC/B,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAM,MAAA,MAAA,GAAS,MAAMC,eAAgC,CAAA;AAAA,MACnD;AAAA,QACE,IAAM,EAAA,OAAA;AAAA,QACN,IAAM,EAAA,aAAA;AAAA,QACN,OAAS,EAAA,2BAAA;AAAA,QACT,QAAU,EAAA,IAAA;AAAA,OACZ;AAAA,KACD,CAAA,CAAA;AACD,IAAI,IAAA,CAAC,OAAO,WAAa,EAAA;AACvB,MAAQ,OAAA,CAAA,GAAA,CAAI,YAAY,uCAAuC,CAAA,CAAA;AAC/D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,KAChB;AACA,IAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAA;AAAA,GACvB;AAEA,EAAM,MAAA,EAAE,mBAAmB,UAAW,EAAA,GAAI,KAAK,eAAe,CAAA,GAC1D,MAAMC,qBAAA,EACN,GAAAC,kBAAA,CAAA;AAEJ,EAAA,MAAM,UAAUN,qBAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,IAAO,WAAW,CAAA,CAAA;AAEpD,EAAI,IAAA;AACF,IAAAD,mBAAA,CAAG,UAAU,OAAO,CAAA,CAAA;AAAA,WACb,GAAK,EAAA;AACZ,IAAK,IAAA,GAAA,CAAyB,SAAS,QAAU,EAAA;AAC/C,MAAQ,OAAA,CAAA,GAAA;AAAA,QACN,UAAA;AAAA,QACA,cAAc,WAAW,CAAA,sEAAA,CAAA;AAAA,QACzB,SAAA;AAAA,OACF,CAAA;AAAA,KACK,MAAA;AACL,MAAA,OAAA,CAAQ,IAAI,GAAG,CAAA,CAAA;AAAA,KACjB;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,GAChB;AAEA,EAAc,aAAA,CAAA,WAAA,EAAa,mBAAmB,UAAU,CAAA,CAAA;AAC1D,CAAA;AAEA,SAAS,aAAA,CACP,WACA,EAAA,iBAAA,EACA,UACA,EAAA;AACA,EAAI,IAAA;AACF,IAAQ,OAAA,CAAA,GAAA,CAAI,UAAY,EAAA,sCAAA,EAAwC,SAAS,CAAA,CAAA;AACzE,IAAA,MAAA,CAAO,CAAuB,oBAAA,EAAA,gBAAgB,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,CAAA,CAAA;AAE/D,IAAA,MAAM,UAAUC,qBAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,IAAO,WAAW,CAAA,CAAA;AACpD,IAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAA;AAErB,IAAQ,OAAA,CAAA,GAAA,CAAI,UAAY,EAAA,4BAAA,EAA8B,SAAS,CAAA,CAAA;AAC/D,IAAO,MAAA,CAAA,CAAA,EAAG,cAAc,CAAU,QAAA,CAAA,CAAA,CAAA;AAElC,IAAGD,mBAAA,CAAA,MAAA,CAAOC,sBAAK,IAAK,CAAA,OAAA,EAAS,QAAQ,CAAG,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA,CAAA;AAC3D,IAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AAEjB,IAAI,IAAA;AACF,MAAAD,mBAAA,CAAG,SAAU,CAAAC,qBAAA,CAAK,IAAK,CAAA,OAAA,EAAS,iBAAiB,CAAC,CAAA,CAAA;AAClD,MAAAD,mBAAA,CAAG,cAAcC,qBAAK,CAAA,IAAA,CAAK,SAAS,iBAAmB,EAAA,UAAU,GAAG,EAAE,CAAA,CAAA;AACtE,MAAAD,mBAAA,CAAG,SAAU,CAAAC,qBAAA,CAAK,IAAK,CAAA,OAAA,EAAS,UAAU,CAAC,CAAA,CAAA;AAC3C,MAAAD,mBAAA,CAAG,cAAcC,qBAAK,CAAA,IAAA,CAAK,SAAS,UAAY,EAAA,UAAU,GAAG,EAAE,CAAA,CAAA;AAAA,aACxD,KAAO,EAAA;AACd,MAAA,IAAI,CAAE,KAAA,CAAgB,OAAQ,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA;AAChD,QAAM,MAAA,KAAA,CAAA;AAAA,OACR;AAAA,KACF;AACA,IAAA,gBAAA,CAAiB,SAAS,WAAW,CAAA,CAAA;AACrC,IAAsB,qBAAA,CAAA,OAAA,EAAS,mBAAmB,UAAU,CAAA,CAAA;AAC5D,IAAW,UAAA,CAAA,OAAA,EAAS,mBAAmB,UAAU,CAAA,CAAA;AAEjD,IAAQ,OAAA,CAAA,GAAA,CAAI,UAAY,EAAA,2BAAA,EAA6B,SAAS,CAAA,CAAA;AAC9D,IAAA,OAAA,CAAQ,GAAI,EAAA,CAAA;AAEZ,IAAQ,OAAA,CAAA,GAAA,CAAI,YAAY,0BAA0B,CAAA,CAAA;AAClD,IAAQ,OAAA,CAAA,GAAA,CAAI,CAAU,OAAA,EAAA,WAAW,CAAE,CAAA,CAAA,CAAA;AACnC,IAAQ,OAAA,CAAA,GAAA;AAAA,MACN,KAAA,GAAQ,sBAAyB,GAAA,CAAA,IAAA,EAAO,cAAc,CAAA,SAAA,CAAA;AAAA,MACtD,SAAA;AAAA,KACF,CAAA;AAAA,WACO,KAAO,EAAA;AACd,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,GACnB;AACF,CAAA;AAEA,IAAK,EAAA","file":"index.js","sourcesContent":["#! /usr/bin/env node\n\nimport { execSync } from \"child_process\";\nimport { prompt } from \"enquirer\";\nimport fs from \"node:fs\";\nimport path from \"path\";\nimport {\n DEFAULT_CONFIG,\n configSpec,\n parseArgs,\n promptDirectories,\n} from \"../utils/cli\";\nimport { getPackageManager } from \"./command\";\n\nconst BOILERPLATE_REPO =\n \"https://github.com/powerhouse-inc/document-model-boilerplate.git\";\n\nconst packageManager = getPackageManager(process.env.npm_config_user_agent);\nconst isNpm = packageManager === \"npm\";\n\nfunction buildPackageJson(appPath: string, projectName: string) {\n const packageJson = JSON.parse(\n fs.readFileSync(path.join(appPath, \"package.json\"), \"utf-8\"),\n ) as Record<string, any>;\n const newPackage = {\n ...packageJson,\n name: projectName,\n version: \"1.0.0\",\n description: \"\",\n };\n\n fs.writeFileSync(\n path.join(appPath, \"package.json\"),\n JSON.stringify(newPackage, null, 2),\n \"utf8\",\n );\n}\n\nfunction buildPowerhouseConfig(\n appPath: string,\n documentModelsDir: string,\n editorsDir: string,\n) {\n const filePath = path.join(appPath, \"powerhouse.config.json\");\n const packageJson = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as Record<\n string,\n any\n >;\n const newPackage = {\n ...packageJson,\n documentModelsDir,\n editorsDir,\n };\n\n fs.writeFileSync(filePath, JSON.stringify(newPackage, null, 2), \"utf8\");\n}\n\nfunction buildIndex(\n appPath: string,\n documentModelsDir: string,\n editorsDir: string,\n) {\n fs.writeFileSync(\n path.join(appPath, \"index.ts\"),\n `import * as documentModelsExports from '${documentModelsDir}';\n import * as editorsExports from '${editorsDir}';\n\n export const documentModels = Object.values(documentModelsExports);\n export const editors = Object.values(editorsExports);`,\n \"utf8\",\n );\n}\n\nfunction runCmd(command: string) {\n try {\n execSync(command, { stdio: \"inherit\" });\n } catch (error) {\n console.log(\"\\x1b[31m\", error, \"\\x1b[0m\");\n }\n}\n\nasync function init() {\n const args = parseArgs(process.argv.slice(2), configSpec);\n\n // checks if a project name was provided\n let projectName = args._.shift();\n if (!projectName) {\n const result = await prompt<{ projectName: string }>([\n {\n type: \"input\",\n name: \"projectName\",\n message: \"What is the project name?\",\n required: true,\n },\n ]);\n if (!result.projectName) {\n console.log(\"\\x1b[31m\", \"You have to provide name to your app.\");\n process.exit(1);\n }\n projectName = result.projectName;\n }\n\n const { documentModelsDir, editorsDir } = args[\"--interactive\"]\n ? await promptDirectories()\n : DEFAULT_CONFIG;\n\n const appPath = path.join(process.cwd(), projectName);\n\n try {\n fs.mkdirSync(appPath);\n } catch (err) {\n if ((err as { code: string }).code === \"EEXIST\") {\n console.log(\n \"\\x1b[31m\",\n `The folder ${projectName} already exists in the current directory, please give it another name.`,\n \"\\x1b[0m\",\n );\n } else {\n console.log(err);\n }\n process.exit(1);\n }\n\n createProject(projectName, documentModelsDir, editorsDir);\n}\n\nfunction createProject(\n projectName: string,\n documentModelsDir: string,\n editorsDir: string,\n) {\n try {\n console.log(\"\\x1b[33m\", \"Downloading the project structure...\", \"\\x1b[0m\");\n runCmd(`git clone --depth 1 ${BOILERPLATE_REPO} ${projectName}`);\n\n const appPath = path.join(process.cwd(), projectName);\n process.chdir(appPath);\n\n console.log(\"\\x1b[34m\", \"Installing dependencies...\", \"\\x1b[0m\");\n runCmd(`${packageManager} install`);\n\n fs.rmSync(path.join(appPath, \"./.git\"), { recursive: true });\n runCmd(\"git init\");\n\n try {\n fs.mkdirSync(path.join(appPath, documentModelsDir));\n fs.writeFileSync(path.join(appPath, documentModelsDir, \"index.ts\"), \"\");\n fs.mkdirSync(path.join(appPath, editorsDir));\n fs.writeFileSync(path.join(appPath, editorsDir, \"index.ts\"), \"\");\n } catch (error) {\n if (!(error as Error).message.includes(\"EEXIST\")) {\n throw error;\n }\n }\n buildPackageJson(appPath, projectName);\n buildPowerhouseConfig(appPath, documentModelsDir, editorsDir);\n buildIndex(appPath, documentModelsDir, editorsDir);\n\n console.log(\"\\x1b[32m\", \"The installation is done!\", \"\\x1b[0m\");\n console.log();\n\n console.log(\"\\x1b[34m\", \"You can start by typing:\");\n console.log(` cd ${projectName}`);\n console.log(\n isNpm ? \" npm run generate\" : ` ${packageManager} generate`,\n \"\\x1b[0m\",\n );\n } catch (error) {\n console.log(error);\n }\n}\n\ninit();\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import arg from 'arg';
|
|
2
|
+
import { generateMock as generateMock$1 } from '@anatine/zod-mock';
|
|
3
|
+
|
|
4
|
+
type PowerhouseConfig = {
|
|
5
|
+
documentModelsDir: string;
|
|
6
|
+
editorsDir: string;
|
|
7
|
+
interactive?: boolean;
|
|
8
|
+
format?: boolean;
|
|
9
|
+
watch?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const DEFAULT_CONFIG: PowerhouseConfig;
|
|
12
|
+
declare const configSpec: {
|
|
13
|
+
readonly "--document-models": StringConstructor;
|
|
14
|
+
readonly "--editors": StringConstructor;
|
|
15
|
+
readonly "--interactive": BooleanConstructor;
|
|
16
|
+
readonly "--format": BooleanConstructor;
|
|
17
|
+
readonly "--watch": BooleanConstructor;
|
|
18
|
+
readonly "-i": "--interactive";
|
|
19
|
+
readonly "-f": "--format";
|
|
20
|
+
readonly "-w": "--watch";
|
|
21
|
+
};
|
|
22
|
+
declare function getConfig(): PowerhouseConfig;
|
|
23
|
+
declare function writeConfig(config: PowerhouseConfig): void;
|
|
24
|
+
declare function parseArgs<T extends arg.Spec>(argv: string[], spec: T): arg.Result<T>;
|
|
25
|
+
declare function parseConfig(argv: string[]): Partial<PowerhouseConfig>;
|
|
26
|
+
declare function promptDirectories(config?: PowerhouseConfig): Promise<Pick<PowerhouseConfig, "documentModelsDir" | "editorsDir">>;
|
|
27
|
+
|
|
28
|
+
type generateMockTypeFn = typeof generateMock$1;
|
|
29
|
+
declare const generateMock: generateMockTypeFn;
|
|
30
|
+
|
|
31
|
+
declare function generate(config: PowerhouseConfig): Promise<void>;
|
|
32
|
+
declare function generateFromFile(path: string, config: PowerhouseConfig): Promise<void>;
|
|
33
|
+
declare function generateEditor(name: string, documentTypes: string[], config: PowerhouseConfig): Promise<void>;
|
|
34
|
+
|
|
35
|
+
export { DEFAULT_CONFIG, type PowerhouseConfig, configSpec, generate, generateEditor, generateFromFile, generateMock, type generateMockTypeFn, getConfig, parseArgs, parseConfig, promptDirectories, writeConfig };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var codegen = require('./codegen');
|
|
4
|
+
var utils = require('./utils');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Object.keys(codegen).forEach(function (k) {
|
|
9
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return codegen[k]; }
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
Object.keys(utils).forEach(function (k) {
|
|
15
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return utils[k]; }
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var arg = require('arg');
|
|
4
|
+
var enquirer = require('enquirer');
|
|
5
|
+
var node_fs = require('node:fs');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var arg__default = /*#__PURE__*/_interopDefault(arg);
|
|
10
|
+
|
|
11
|
+
const DEFAULT_DOCUMENT_MODELS_DIR = "./document-models";
|
|
12
|
+
const DEFAULT_EDITORS_DIR = "./editors";
|
|
13
|
+
const DEFAULT_CONFIG = {
|
|
14
|
+
documentModelsDir: DEFAULT_DOCUMENT_MODELS_DIR,
|
|
15
|
+
editorsDir: DEFAULT_EDITORS_DIR
|
|
16
|
+
};
|
|
17
|
+
const configSpec = {
|
|
18
|
+
"--document-models": String,
|
|
19
|
+
"--editors": String,
|
|
20
|
+
"--interactive": Boolean,
|
|
21
|
+
"--format": Boolean,
|
|
22
|
+
"--watch": Boolean,
|
|
23
|
+
"-i": "--interactive",
|
|
24
|
+
"-f": "--format",
|
|
25
|
+
"-w": "--watch"
|
|
26
|
+
};
|
|
27
|
+
function getConfig() {
|
|
28
|
+
let config = { ...DEFAULT_CONFIG };
|
|
29
|
+
try {
|
|
30
|
+
const configStr = node_fs.readFileSync("./powerhouse.config.json", "utf-8");
|
|
31
|
+
const userConfig = JSON.parse(configStr);
|
|
32
|
+
config = { ...config, ...userConfig };
|
|
33
|
+
} catch {
|
|
34
|
+
console.warn("No powerhouse.config.json found, using defaults");
|
|
35
|
+
}
|
|
36
|
+
return config;
|
|
37
|
+
}
|
|
38
|
+
function writeConfig(config) {
|
|
39
|
+
node_fs.writeFileSync("./powerhouse.config.json", JSON.stringify(config, null, 4));
|
|
40
|
+
}
|
|
41
|
+
function parseArgs(argv, spec) {
|
|
42
|
+
const args = arg__default.default(spec, {
|
|
43
|
+
permissive: true,
|
|
44
|
+
argv
|
|
45
|
+
});
|
|
46
|
+
return args;
|
|
47
|
+
}
|
|
48
|
+
function parseConfig(argv) {
|
|
49
|
+
const config = {};
|
|
50
|
+
const args = parseArgs(argv, configSpec);
|
|
51
|
+
if ("--document-models" in args) {
|
|
52
|
+
config.documentModelsDir = args["--document-models"];
|
|
53
|
+
}
|
|
54
|
+
if ("--editors" in args) {
|
|
55
|
+
config.editorsDir = args["--editors"];
|
|
56
|
+
}
|
|
57
|
+
if ("--format" in args) {
|
|
58
|
+
config.format = true;
|
|
59
|
+
}
|
|
60
|
+
if ("--interactive" in args) {
|
|
61
|
+
config.interactive = true;
|
|
62
|
+
}
|
|
63
|
+
if ("--watch" in args) {
|
|
64
|
+
config.watch = true;
|
|
65
|
+
}
|
|
66
|
+
return config;
|
|
67
|
+
}
|
|
68
|
+
async function promptDirectories(config = DEFAULT_CONFIG) {
|
|
69
|
+
return enquirer.prompt([
|
|
70
|
+
{
|
|
71
|
+
type: "input",
|
|
72
|
+
name: "documentModelsDir",
|
|
73
|
+
message: "Where to place the Document Models?",
|
|
74
|
+
initial: config.documentModelsDir
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: "input",
|
|
78
|
+
name: "editorsDir",
|
|
79
|
+
message: "Where to place the Editors?",
|
|
80
|
+
initial: config.editorsDir
|
|
81
|
+
}
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
86
|
+
exports.configSpec = configSpec;
|
|
87
|
+
exports.getConfig = getConfig;
|
|
88
|
+
exports.parseArgs = parseArgs;
|
|
89
|
+
exports.parseConfig = parseConfig;
|
|
90
|
+
exports.promptDirectories = promptDirectories;
|
|
91
|
+
exports.writeConfig = writeConfig;
|
|
92
|
+
//# sourceMappingURL=cli.js.map
|
|
93
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cli.ts"],"names":["readFileSync","writeFileSync","arg","prompt"],"mappings":"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","file":"cli.js","sourcesContent":["import arg from \"arg\";\nimport { prompt } from \"enquirer\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\n\nexport type PowerhouseConfig = {\n documentModelsDir: string;\n editorsDir: string;\n interactive?: boolean;\n format?: boolean;\n watch?: boolean;\n};\n\nconst DEFAULT_DOCUMENT_MODELS_DIR = \"./document-models\";\nconst DEFAULT_EDITORS_DIR = \"./editors\";\n\nexport const DEFAULT_CONFIG: PowerhouseConfig = {\n documentModelsDir: DEFAULT_DOCUMENT_MODELS_DIR,\n editorsDir: DEFAULT_EDITORS_DIR,\n};\n\nexport const configSpec = {\n \"--document-models\": String,\n \"--editors\": String,\n \"--interactive\": Boolean,\n \"--format\": Boolean,\n \"--watch\": Boolean,\n \"-i\": \"--interactive\",\n \"-f\": \"--format\",\n \"-w\": \"--watch\",\n} as const;\n\nexport function getConfig() {\n let config: PowerhouseConfig = { ...DEFAULT_CONFIG };\n try {\n const configStr = readFileSync(\"./powerhouse.config.json\", \"utf-8\");\n const userConfig = JSON.parse(configStr) as PowerhouseConfig;\n config = { ...config, ...userConfig };\n } catch {\n console.warn(\"No powerhouse.config.json found, using defaults\");\n }\n return config;\n}\n\nexport function writeConfig(config: PowerhouseConfig) {\n writeFileSync(\"./powerhouse.config.json\", JSON.stringify(config, null, 4));\n}\n\nexport function parseArgs<T extends arg.Spec>(argv: string[], spec: T) {\n const args = arg(spec, {\n permissive: true,\n argv,\n });\n\n return args;\n}\n\nexport function parseConfig(argv: string[]) {\n const config: Partial<PowerhouseConfig> = {};\n const args = parseArgs(argv, configSpec);\n\n if (\"--document-models\" in args) {\n config.documentModelsDir = args[\"--document-models\"];\n }\n\n if (\"--editors\" in args) {\n config.editorsDir = args[\"--editors\"];\n }\n\n if (\"--format\" in args) {\n config.format = true;\n }\n if (\"--interactive\" in args) {\n config.interactive = true;\n }\n if (\"--watch\" in args) {\n config.watch = true;\n }\n\n return config;\n}\n\nexport async function promptDirectories(\n config: PowerhouseConfig = DEFAULT_CONFIG,\n) {\n return prompt<Pick<PowerhouseConfig, \"documentModelsDir\" | \"editorsDir\">>([\n {\n type: \"input\",\n name: \"documentModelsDir\",\n message: \"Where to place the Document Models?\",\n initial: config.documentModelsDir,\n },\n {\n type: \"input\",\n name: \"editorsDir\",\n message: \"Where to place the Editors?\",\n initial: config.editorsDir,\n },\n ]);\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var cli = require('./cli');
|
|
4
|
+
var mock = require('./mock');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Object.keys(cli).forEach(function (k) {
|
|
9
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return cli[k]; }
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
Object.keys(mock).forEach(function (k) {
|
|
15
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return mock[k]; }
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var zodMock = require('@anatine/zod-mock');
|
|
4
|
+
|
|
5
|
+
const generateMock = (zodRef, options) => {
|
|
6
|
+
return zodMock.generateMock(zodRef, options);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.generateMock = generateMock;
|
|
10
|
+
//# sourceMappingURL=mock.js.map
|
|
11
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/mock.ts"],"names":["zodGenerateMock"],"mappings":";;;;AAGa,MAAA,YAAA,GAAmC,CAAC,MAAA,EAAQ,OAAY,KAAA;AACnE,EAAO,OAAAA,oBAAA,CAAgB,QAAQ,OAAO,CAAA,CAAA;AACxC","file":"mock.js","sourcesContent":["import { generateMock as zodGenerateMock } from \"@anatine/zod-mock\";\nexport type generateMockTypeFn = typeof zodGenerateMock;\n\nexport const generateMock: generateMockTypeFn = (zodRef, options) => {\n return zodGenerateMock(zodRef, options) as generateMockTypeFn;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/codegen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"graphql": "^16.8.1",
|
|
32
32
|
"husky": "^8.0.3",
|
|
33
33
|
"rimraf": "^5.0.5",
|
|
34
|
-
"ts-node": "^10.9.2"
|
|
34
|
+
"ts-node": "^10.9.2",
|
|
35
|
+
"tsup": "^8.3.0"
|
|
35
36
|
},
|
|
36
37
|
"peerDependencies": {
|
|
37
38
|
"graphql": "^16.8.1"
|
|
@@ -42,9 +43,9 @@
|
|
|
42
43
|
"lint": "eslint",
|
|
43
44
|
"clean": "rimraf dist/",
|
|
44
45
|
"copy-files": "copyfiles -u 1 src/codegen/.hygen/templates/**/*.esm.t dist/",
|
|
45
|
-
"build": "
|
|
46
|
+
"build": "tsup",
|
|
46
47
|
"build:create-lib": "tsc --project src/create-lib/tsconfig.json",
|
|
47
|
-
"publish:create-lib": "
|
|
48
|
+
"publish:create-lib": "npm publish --cwd ./src/create-lib/",
|
|
48
49
|
"start": "ts-node src/cli.ts",
|
|
49
50
|
"clean:node_modules": "rimraf node_modules"
|
|
50
51
|
}
|