@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 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
@@ -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":"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","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":"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","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"]}
@@ -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.4.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": "npm run clean && npm run copy-files",
46
+ "build": "tsup",
46
47
  "build:create-lib": "tsc --project src/create-lib/tsconfig.json",
47
- "publish:create-lib": "yarn publish --cwd ./src/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
  }