@powerhousedao/codegen 0.32.3 → 0.34.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.js CHANGED
@@ -10,12 +10,14 @@ function parseCommand(argv) {
10
10
  "-e": "--editor",
11
11
  "--processor": String,
12
12
  "--document-types": String,
13
- "--processor-type": String
13
+ "--processor-type": String,
14
+ "--file": String
14
15
  });
15
16
  const editorName = args["--editor"];
16
17
  const processorName = args["--processor"];
17
18
  const processorType = args["--processor-type"];
18
19
  const subgraphName = args["--subgraph"];
20
+ const file = args["--file"];
19
21
  return {
20
22
  processor: !!processorName,
21
23
  processorName,
@@ -25,7 +27,8 @@ function parseCommand(argv) {
25
27
  documentTypes: args["--document-types"],
26
28
  arg: args._,
27
29
  subgraph: !!subgraphName,
28
- subgraphName: subgraphName ?? "example"
30
+ subgraphName: subgraphName ?? "example",
31
+ file
29
32
  };
30
33
  }
31
34
  async function main() {
@@ -59,9 +62,12 @@ async function main() {
59
62
  config
60
63
  );
61
64
  } else if (command.subgraph) {
62
- await generateSubgraph(command.subgraphName, config);
63
- } else if (command.arg.length === 2) {
64
- await generateFromFile(command.arg[1], config);
65
+ if (!command.subgraphName) {
66
+ throw new Error("Subgraph name is required (--subgraph)");
67
+ }
68
+ await generateSubgraph(command.subgraphName, command.file || null, config);
69
+ } else if (command.file || command.arg.length === 2) {
70
+ await generateFromFile(command.file || command.arg[1], config);
65
71
  } else {
66
72
  await generate(config);
67
73
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAWA,SAAS,aAAa,IAAgB,EAAA;AACpC,EAAM,MAAA,IAAA,GAAO,UAAU,IAAM,EAAA;AAAA,IAC3B,UAAY,EAAA,MAAA;AAAA,IACZ,YAAc,EAAA,MAAA;AAAA,IACd,IAAM,EAAA,UAAA;AAAA,IACN,aAAe,EAAA,MAAA;AAAA,IACf,kBAAoB,EAAA,MAAA;AAAA,IACpB,kBAAoB,EAAA;AAAA,GACrB,CAAA;AACD,EAAM,MAAA,UAAA,GAAa,KAAK,UAAU,CAAA;AAClC,EAAM,MAAA,aAAA,GAAgB,KAAK,aAAa,CAAA;AACxC,EAAM,MAAA,aAAA,GAAgB,KAAK,kBAAkB,CAAA;AAC7C,EAAM,MAAA,YAAA,GAAe,KAAK,YAAY,CAAA;AACtC,EAAO,OAAA;AAAA,IACL,SAAA,EAAW,CAAC,CAAC,aAAA;AAAA,IACb,aAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA,EAAQ,CAAC,CAAC,UAAA;AAAA,IACV,UAAA;AAAA,IACA,aAAA,EAAe,KAAK,kBAAkB,CAAA;AAAA,IACtC,KAAK,IAAK,CAAA,CAAA;AAAA,IACV,QAAA,EAAU,CAAC,CAAC,YAAA;AAAA,IACZ,cAAc,YAAgB,IAAA;AAAA,GAChC;AACF;AAEA,eAAe,IAAO,GAAA;AACpB,EAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAM,aAAa,SAAU,EAAA;AAC7B,EAAM,MAAA,UAAA,GAAa,YAAY,IAAI,CAAA;AACnC,EAAA,MAAM,MAAS,GAAA,EAAE,GAAG,UAAA,EAAY,GAAG,UAAW,EAAA;AAC9C,EAAA,IAAI,OAAO,WAAa,EAAA;AACtB,IAAM,MAAA,MAAA,GAAS,MAAM,iBAAA,CAAkB,MAAM,CAAA;AAC7C,IAAO,MAAA,CAAA,MAAA,CAAO,QAAQ,MAAM,CAAA;AAAA;AAG9B,EAAM,MAAA,OAAA,GAAU,aAAa,IAAI,CAAA;AAEjC,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAI,IAAA,CAAC,QAAQ,UAAY,EAAA;AACvB,MAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA;AAAA;AAE5D,IAAM,MAAA,cAAA;AAAA,MACJ,OAAQ,CAAA,UAAA;AAAA,MACR,OAAQ,CAAA,aAAA,EAAe,KAAM,CAAA,QAAQ,KAAK,EAAC;AAAA,MAC3C;AAAA,KACF;AAAA,GACF,MAAA,IAAW,QAAQ,SAAW,EAAA;AAC5B,IAAI,IAAA,CAAC,QAAQ,aAAe,EAAA;AAC1B,MAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA;AAAA;AAG5D,IAAA,MAAM,IAAO,GAAA,CAAC,OAAQ,CAAA,aAAA,GAClB,cACC,OAAQ,CAAA,aAAA;AAEb,IAAM,MAAA,iBAAA;AAAA,MACJ,OAAQ,CAAA,aAAA;AAAA,MACR,IAAA;AAAA,MACA,OAAQ,CAAA,aAAA,EAAe,KAAM,CAAA,QAAQ,KAAK,EAAC;AAAA,MAC3C;AAAA,KACF;AAAA,GACF,MAAA,IAAW,QAAQ,QAAU,EAAA;AAC3B,IAAM,MAAA,gBAAA,CAAiB,OAAQ,CAAA,YAAA,EAAc,MAAM,CAAA;AAAA,GAC1C,MAAA,IAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,KAAW,CAAG,EAAA;AACnC,IAAA,MAAM,gBAAiB,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,GAAG,MAAM,CAAA;AAAA,GACxC,MAAA;AACL,IAAA,MAAM,SAAS,MAAM,CAAA;AAAA;AAEzB;AAEA,IAAK,EAAA,CAAE,KAAM,CAAA,CAAC,CAAe,KAAA;AAC3B,EAAM,MAAA,CAAA;AACR,CAAC,CAAA","file":"cli.js","sourcesContent":["#! /usr/bin/env node\nimport { getConfig } from \"@powerhousedao/config/powerhouse\";\nimport {\n generate,\n generateEditor,\n generateFromFile,\n generateProcessor,\n generateSubgraph,\n} from \"./codegen/index\";\nimport { parseArgs, promptDirectories, parseConfig } from \"./utils/index\";\n\nfunction parseCommand(argv: string[]) {\n const args = parseArgs(argv, {\n \"--editor\": String,\n \"--subgraph\": String,\n \"-e\": \"--editor\",\n \"--processor\": String,\n \"--document-types\": String,\n \"--processor-type\": String,\n });\n const editorName = args[\"--editor\"];\n const processorName = args[\"--processor\"];\n const processorType = args[\"--processor-type\"];\n const subgraphName = args[\"--subgraph\"];\n return {\n processor: !!processorName,\n processorName,\n processorType,\n editor: !!editorName,\n editorName,\n documentTypes: args[\"--document-types\"],\n arg: args._,\n subgraph: !!subgraphName,\n subgraphName: subgraphName ?? \"example\",\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 = parseCommand(argv);\n\n if (command.editor) {\n if (!command.editorName) {\n throw new Error(\"Editor name is required (--editor or -e)\");\n }\n await generateEditor(\n command.editorName,\n command.documentTypes?.split(/[|,;]/g) ?? [],\n config,\n );\n } else if (command.processor) {\n if (!command.processorName) {\n throw new Error(\"processor name is required (--processor)\");\n }\n\n const type = !command.processorType\n ? \"analytics\"\n : (command.processorType as \"analytics\" | \"operational\");\n\n await generateProcessor(\n command.processorName,\n type,\n command.documentTypes?.split(/[|,;]/g) ?? [],\n config,\n );\n } else if (command.subgraph) {\n await generateSubgraph(command.subgraphName, config);\n } else if (command.arg.length === 2) {\n await generateFromFile(command.arg[1], config);\n } else {\n await generate(config);\n }\n}\n\nmain().catch((e: unknown) => {\n throw e;\n});\n"]}
1
+ {"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["#! /usr/bin/env node\nimport { getConfig } from \"@powerhousedao/config/powerhouse\";\nimport {\n generate,\n generateEditor,\n generateFromFile,\n generateProcessor,\n generateSubgraph,\n} from \"./codegen/index\";\nimport { parseArgs, parseConfig, promptDirectories } from \"./utils/index\";\n\nfunction parseCommand(argv: string[]) {\n const args = parseArgs(argv, {\n \"--editor\": String,\n \"--subgraph\": String,\n \"-e\": \"--editor\",\n \"--processor\": String,\n \"--document-types\": String,\n \"--processor-type\": String,\n \"--file\": String,\n });\n\n const editorName = args[\"--editor\"];\n const processorName = args[\"--processor\"];\n const processorType = args[\"--processor-type\"];\n const subgraphName = args[\"--subgraph\"];\n const file = args[\"--file\"];\n\n return {\n processor: !!processorName,\n processorName,\n processorType,\n editor: !!editorName,\n editorName,\n documentTypes: args[\"--document-types\"],\n arg: args._,\n subgraph: !!subgraphName,\n subgraphName: subgraphName ?? \"example\",\n file,\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 = parseCommand(argv);\n\n if (command.editor) {\n if (!command.editorName) {\n throw new Error(\"Editor name is required (--editor or -e)\");\n }\n await generateEditor(\n command.editorName,\n command.documentTypes?.split(/[|,;]/g) ?? [],\n config,\n );\n } else if (command.processor) {\n if (!command.processorName) {\n throw new Error(\"processor name is required (--processor)\");\n }\n\n const type = !command.processorType\n ? \"analytics\"\n : (command.processorType as \"analytics\" | \"operational\");\n\n await generateProcessor(\n command.processorName,\n type,\n command.documentTypes?.split(/[|,;]/g) ?? [],\n config,\n );\n } else if (command.subgraph) {\n if (!command.subgraphName) {\n throw new Error(\"Subgraph name is required (--subgraph)\");\n }\n await generateSubgraph(command.subgraphName, command.file || null, config);\n } else if (command.file || command.arg.length === 2) {\n await generateFromFile(command.file || command.arg[1], config);\n } else {\n await generate(config);\n }\n}\n\nmain().catch((e: unknown) => {\n throw e;\n});\n"]}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var changeCase = require('change-case');
4
+
5
+ var generate_document_model_mutations_default = {
6
+ params: ({ args }) => {
7
+ const documentModel = JSON.parse(args.documentModel);
8
+ const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
9
+ return {
10
+ rootDir: args.rootDir,
11
+ subgraph: args.subgraph,
12
+ documentTypeId: documentModel.id,
13
+ documentType: documentModel.name,
14
+ schema: latestSpec.state.global.schema,
15
+ modules: latestSpec.modules.map((m) => ({
16
+ ...m,
17
+ name: changeCase.paramCase(m.name)
18
+ }))
19
+ };
20
+ }
21
+ };
22
+
23
+ module.exports = generate_document_model_mutations_default;
24
+ //# sourceMappingURL=index.js.map
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-document-model-mutations/index.ts"],"names":["paramCase"],"mappings":";;;;AASA,IAAO,yCAAQ,GAAA;AAAA,EACb,MAAQ,EAAA,CAAC,EAAE,IAAA,EAA2B,KAAA;AACpC,IAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,aAAa,CAAA;AACnD,IAAA,MAAM,aACJ,aAAc,CAAA,cAAA,CAAe,aAAc,CAAA,cAAA,CAAe,SAAS,CAAC,CAAA;AAEtE,IAAO,OAAA;AAAA,MACL,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,UAAU,IAAK,CAAA,QAAA;AAAA,MACf,gBAAgB,aAAc,CAAA,EAAA;AAAA,MAC9B,cAAc,aAAc,CAAA,IAAA;AAAA,MAC5B,MAAA,EAAQ,UAAW,CAAA,KAAA,CAAM,MAAO,CAAA,MAAA;AAAA,MAChC,OAAS,EAAA,UAAA,CAAW,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAO,MAAA;AAAA,QACtC,GAAG,CAAA;AAAA,QACH,IAAA,EAAMA,oBAAU,CAAA,CAAA,CAAE,IAAI;AAAA,OACtB,CAAA;AAAA,KACJ;AAAA;AAEJ","file":"index.js","sourcesContent":["import { paramCase } from \"change-case\";\nimport { DocumentModelState } from \"document-model/document-model\";\n\nexport type Args = {\n documentModel: string;\n rootDir: string;\n subgraph: 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 subgraph: args.subgraph,\n documentTypeId: documentModel.id,\n documentType: documentModel.name,\n schema: latestSpec.state.global.schema,\n modules: latestSpec.modules.map((m) => ({\n ...m,\n name: paramCase(m.name),\n })),\n };\n },\n};\n"]}
@@ -0,0 +1,59 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(subgraph) %>/resolvers.ts"
3
+ force: true
4
+ ---
5
+ import { Subgraph } from "@powerhousedao/reactor-api";
6
+ import { actions } from "../../document-models/<%- h.changeCase.param(documentType) %>";
7
+ import { actions as driveActions } from "document-model-libs/document-drive";
8
+ import { utils as docUtils } from "document-model/document";
9
+
10
+ export const getResolvers = (subgraph: Subgraph, driveId: string) => {
11
+ const reactor = subgraph.reactor;
12
+
13
+ return ({
14
+ Mutation: {
15
+
16
+ <%- h.changeCase.pascal(documentType) %>_createDocument: async (_: any, args: any) => {
17
+ const docId = docUtils.generateId();
18
+
19
+ reactor.addDriveAction(driveId, driveActions.addFile({
20
+ id: docId,
21
+ name: args.name,
22
+ documentType: "<%- documentTypeId %>",
23
+ synchronizationUnits:[
24
+ {
25
+ branch: "main",
26
+ scope: "global",
27
+ syncId: docUtils.hashKey(),
28
+ },
29
+ {
30
+ branch: "main",
31
+ scope: "local",
32
+ syncId: docUtils.hashKey(),
33
+ }
34
+ ],
35
+ }));
36
+
37
+ return docId;
38
+ },
39
+
40
+ <% modules.forEach(module => { _%>
41
+ <% module.operations.forEach(op => { _%>
42
+ <%- h.changeCase.pascal(documentType) + '_' + h.changeCase.camel(op.name)
43
+ %>: async (_: any, args: any) => {
44
+ const docId: string = args.docId || "";
45
+ const doc = await reactor.getDocument(driveId, docId);
46
+
47
+ await reactor.addAction(
48
+ driveId,
49
+ docId,
50
+ actions.<%- h.changeCase.camel(op.name) %>({...args.input})
51
+ );
52
+
53
+ return doc.revision.global + 1;
54
+ },
55
+
56
+ <%_ })}); %>
57
+ }
58
+ });
59
+ };
@@ -0,0 +1,31 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(subgraph) %>/schema.graphql"
3
+ force: true
4
+ ---
5
+ """
6
+ Subgraph definition for <%= h.changeCase.pascal(documentType) %> (<%- documentTypeId %>)
7
+
8
+ """
9
+ <%- schema %>
10
+
11
+ """
12
+ Mutations: <%= h.changeCase.pascal(documentType) %>
13
+ """
14
+ type Mutation {
15
+
16
+ <%- h.changeCase.pascal(documentType) %>_createDocument(name:String): String
17
+
18
+ <% modules.forEach(module => { _%>
19
+ <% module.operations.forEach(op => { _%>
20
+ <%- h.changeCase.pascal(documentType) + '_' + h.changeCase.camel(op.name)
21
+ %>(docId: PHID, input: <%-
22
+ h.changeCase.pascal(documentType) + '_' + h.changeCase.pascal(op.name) %>Input): Int
23
+ <%_ })}); %>}
24
+ <% modules.forEach(module => { _%>
25
+
26
+ """
27
+ Module: <%= h.changeCase.pascal(module.name) %>
28
+ """
29
+ <% module.operations.forEach(op => { _%>
30
+ <%- op.schema.replace('input ', 'input ' + h.changeCase.pascal(documentType) + '_') %>
31
+ <%_ })}); %>
@@ -0,0 +1,59 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/index.ts"
3
+ force: true
4
+ ---
5
+ import { IBaseDocumentDriveServer } from "document-drive";
6
+ import { actions } from "document-model/document-model";
7
+ import {
8
+ addDocument,
9
+ addFolder,
10
+ initReactorWithRemoteDrive
11
+ } from "./utils";
12
+
13
+ async function main() {
14
+ const driveServer = (await initReactorWithRemoteDrive(
15
+ "http://localhost:4001/d/powerhouse"
16
+ )) as IBaseDocumentDriveServer;
17
+
18
+ const driveIds = await driveServer.getDrives();
19
+ let drive = await driveServer.getDrive(driveIds[0]);
20
+
21
+ // add folder to root
22
+ await addFolder(driveServer, driveIds[0], "example-folder", "Example Folder");
23
+ drive = await driveServer.getDrive(driveIds[0]);
24
+
25
+ // get root folder
26
+ const rootDirId = drive.state.global.nodes.find(
27
+ (e) => e.name === "Example Folder"
28
+ );
29
+
30
+ // check if root folder exists and throw error if it doesn't
31
+ if (!rootDirId) {
32
+ throw new Error("Root directory not found");
33
+ }
34
+
35
+ // add document to root folder
36
+ await addDocument(
37
+ driveServer,
38
+ driveIds[0],
39
+ "example-document",
40
+ "Example Document",
41
+ "powerhouse/document-model",
42
+ rootDirId.id
43
+ );
44
+
45
+ // set model name to example document
46
+ await driveServer.addAction(
47
+ driveIds[0],
48
+ "example-document",
49
+ actions.setModelName({
50
+ name: "Example Document",
51
+ })
52
+ );
53
+
54
+ // get document
55
+ const document = await driveServer.getDocument(driveIds[0], "example-document");
56
+ console.log(document.state.global);
57
+
58
+ process.exit(0);
59
+ }
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var generate_import_script_default = {
4
+ params: ({ args }) => {
5
+ return {
6
+ rootDir: args.rootDir,
7
+ name: args.name
8
+ };
9
+ }
10
+ };
11
+
12
+ module.exports = generate_import_script_default;
13
+ //# sourceMappingURL=index.js.map
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-import-script/index.ts"],"names":[],"mappings":";;AAKA,IAAO,8BAAQ,GAAA;AAAA,EACb,MAAQ,EAAA,CAAC,EAAE,IAAA,EAA2B,KAAA;AACpC,IAAO,OAAA;AAAA,MACL,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,MAAM,IAAK,CAAA;AAAA,KACb;AAAA;AAEJ","file":"index.js","sourcesContent":["export type Args = {\n name: string;\n rootDir: string;\n};\n\nexport default {\n params: ({ args }: { args: Args }) => {\n return {\n rootDir: args.rootDir,\n name: args.name,\n };\n },\n};\n"]}
@@ -0,0 +1,100 @@
1
+ ---
2
+ to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/utils.ts"
3
+ unless_exists: true
4
+ ---
5
+ import { randomUUID } from "crypto";
6
+ import { DocumentDriveServer, IBaseDocumentDriveServer } from "document-drive";
7
+ import {
8
+ actions,
9
+ generateSynchronizationUnits
10
+ } from "document-model-libs/document-drive";
11
+ import * as DocumentModelsLibs from "document-model-libs/document-models";
12
+ import { DocumentModel } from "document-model/document";
13
+ import { module as DocumentModelLib } from "document-model/document-model";
14
+ import * as LocalDocumentModels from "../../document-models";
15
+
16
+ export const addFolder = (
17
+ driveServer: IBaseDocumentDriveServer,
18
+ driveId: string,
19
+ nodeId: string,
20
+ nodeName: string,
21
+ parentFolder: string | undefined = undefined
22
+ ) => {
23
+ return driveServer.addDriveAction(
24
+ driveId,
25
+ actions.addFolder({
26
+ id: nodeId,
27
+ name: nodeName,
28
+ parentFolder: parentFolder,
29
+ })
30
+ );
31
+ };
32
+
33
+ export const addDocument = async (
34
+ driveServer: IBaseDocumentDriveServer,
35
+ driveId: string,
36
+ documentId: string,
37
+ documentName: string,
38
+ documentType: string,
39
+ parentFolder: string
40
+ ) => {
41
+ const drive = await driveServer.getDrive(driveId);
42
+ return driveServer.addDriveAction(
43
+ driveId,
44
+ actions.addFile({
45
+ documentType,
46
+ id: documentId,
47
+ name: documentName,
48
+ parentFolder,
49
+ synchronizationUnits: generateSynchronizationUnits(drive.state.global, [
50
+ "global",
51
+ ]),
52
+ })
53
+ );
54
+ };
55
+
56
+ export const initReactorWithRemoteDrive = async (driveUrl: string) => {
57
+ const documentModels = [
58
+ DocumentModelLib,
59
+ ...Object.values(LocalDocumentModels),
60
+ ...Object.values(DocumentModelsLibs),
61
+ ] as DocumentModel[];
62
+ const driveServer = new DocumentDriveServer(documentModels);
63
+ await driveServer.initialize();
64
+ return new Promise((resolve, reject) => {
65
+ // init drive server with document models
66
+ const listenerId = randomUUID();
67
+ driveServer.addRemoteDrive(driveUrl, {
68
+ availableOffline: true,
69
+ listeners: [
70
+ {
71
+ block: true,
72
+ callInfo: {
73
+ data: driveUrl,
74
+ name: "switchboard-push",
75
+ transmitterType: "SwitchboardPush",
76
+ },
77
+ filter: {
78
+ branch: ["main"],
79
+ documentId: ["*"],
80
+ documentType: ["*"],
81
+ scope: ["global"],
82
+ },
83
+ label: "Switchboard Sync",
84
+ listenerId,
85
+ system: true,
86
+ },
87
+ ],
88
+ sharingType: "public",
89
+ triggers: [],
90
+ pullInterval: 100,
91
+ });
92
+
93
+ driveServer.on("syncStatus", (driveId, status, error, syncUnitStatus) => {
94
+ if (driveId !== driveId.split("/").pop() || status !== "SUCCESS") {
95
+ return;
96
+ }
97
+ return resolve(driveServer);
98
+ });
99
+ });
100
+ };
@@ -2,11 +2,29 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/index.ts"
3
3
  force: true
4
4
  ---
5
- import { Subgraph, Db } from "@powerhousedao/reactor-api";
5
+ import { Subgraph } from "@powerhousedao/reactor-api";
6
6
  import { gql } from "graphql-tag";
7
+ <% if (loadFromFile) { %>
8
+ import { readFileSync } from "fs";
9
+ import path from "path";
10
+ import { getResolvers } from "./resolvers";
11
+
12
+ // TODO: find a better way to import the graphql schema
13
+ const gqlFile = path.join(path.resolve(path.dirname('')), './subgraphs/<%= h.changeCase.param(name) %>/schema.graphql');
14
+ const gqlCode = readFileSync(gqlFile).toString();
15
+ <% } %>
7
16
 
8
17
  export class <%= pascalName %>Subgraph extends Subgraph {
9
18
  name = "<%= h.changeCase.param(name) %>";
19
+ <% if (loadFromFile) { %>
20
+ typeDefs = gql`${gqlCode}`;
21
+
22
+ resolvers = getResolvers(this, "powerhouse");
23
+ additionalContextFields = {};
24
+ async onSetup() {}
25
+ async onDisconnect() {}
26
+ <% } else { %>
27
+
10
28
  resolvers = {
11
29
  Query: {
12
30
  example: {
@@ -39,4 +57,5 @@ export class <%= pascalName %>Subgraph extends Subgraph {
39
57
  }
40
58
 
41
59
  async onDisconnect() {}
60
+ <% } %>
42
61
  }
@@ -4,7 +4,8 @@ var generate_subgraph_default = {
4
4
  params: ({ args }) => {
5
5
  return {
6
6
  rootDir: args.rootDir,
7
- name: args.name
7
+ name: args.name,
8
+ loadFromFile: args.loadFromFile
8
9
  };
9
10
  }
10
11
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.ts"],"names":[],"mappings":";;AAKA,IAAO,yBAAQ,GAAA;AAAA,EACb,MAAQ,EAAA,CAAC,EAAE,IAAA,EAA2B,KAAA;AACpC,IAAO,OAAA;AAAA,MACL,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,MAAM,IAAK,CAAA;AAAA,KACb;AAAA;AAEJ","file":"index.js","sourcesContent":["export type Args = {\n name: string;\n rootDir: string;\n};\n\nexport default {\n params: ({ args }: { args: Args }) => {\n return {\n rootDir: args.rootDir,\n name: args.name,\n };\n },\n};\n"]}
1
+ {"version":3,"sources":["../../../../../../src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.ts"],"names":[],"mappings":";;AAMA,IAAO,yBAAQ,GAAA;AAAA,EACb,MAAQ,EAAA,CAAC,EAAE,IAAA,EAA2B,KAAA;AACpC,IAAO,OAAA;AAAA,MACL,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,cAAc,IAAK,CAAA;AAAA,KACrB;AAAA;AAEJ","file":"index.js","sourcesContent":["export type Args = {\n name: string;\n rootDir: string;\n loadFromFile: string;\n};\n\nexport default {\n params: ({ args }: { args: Args }) => {\n return {\n rootDir: args.rootDir,\n name: args.name,\n loadFromFile: args.loadFromFile,\n };\n },\n};\n"]}
@@ -1,10 +1,10 @@
1
+ import { pascalCase } from 'change-case';
2
+ import { Logger, runner } from 'hygen';
1
3
  import fs from 'node:fs';
2
4
  import { createRequire } from 'node:module';
3
5
  import path from 'node:path';
4
6
  import { fileURLToPath } from 'node:url';
5
- import { Logger, runner } from 'hygen';
6
7
  import { loadDocumentModel } from './utils.js';
7
- import { pascalCase } from 'change-case';
8
8
 
9
9
  const require2 = createRequire(import.meta.url);
10
10
  const __dirname = import.meta.dirname || path.dirname(fileURLToPath(import.meta.url));
@@ -127,11 +127,42 @@ async function generateProcessor(name, documentTypes, documentTypesMap, dir, doc
127
127
  { skipFormat }
128
128
  );
129
129
  }
130
- async function generateSubgraph(name, dir, { skipFormat = false } = {}) {
130
+ async function generateSubgraph(name, documentModel, dir, { skipFormat = false } = {}) {
131
+ const params = [
132
+ "powerhouse",
133
+ `generate-subgraph`,
134
+ "--name",
135
+ name,
136
+ "--pascalName",
137
+ pascalCase(name),
138
+ "--root-dir",
139
+ dir
140
+ ];
141
+ if (documentModel) {
142
+ params.push("--loadFromFile", "1");
143
+ }
144
+ await run(params, { skipFormat });
145
+ if (documentModel) {
146
+ await run(
147
+ [
148
+ "powerhouse",
149
+ "generate-document-model-mutations",
150
+ "--subgraph",
151
+ name,
152
+ "--document-model",
153
+ JSON.stringify(documentModel),
154
+ "--root-dir",
155
+ dir
156
+ ],
157
+ { skipFormat }
158
+ );
159
+ }
160
+ }
161
+ async function generateImportScript(name, dir, { skipFormat = false } = {}) {
131
162
  await run(
132
163
  [
133
164
  "powerhouse",
134
- `generate-subgraph`,
165
+ `generate-import-script`,
135
166
  "--name",
136
167
  name,
137
168
  "--pascalName",
@@ -143,6 +174,6 @@ async function generateSubgraph(name, dir, { skipFormat = false } = {}) {
143
174
  );
144
175
  }
145
176
 
146
- export { generateAll, generateDocumentModel, generateEditor, generateProcessor, generateSubgraph };
177
+ export { generateAll, generateDocumentModel, generateEditor, generateImportScript, generateProcessor, generateSubgraph };
147
178
  //# sourceMappingURL=hygen.js.map
148
179
  //# sourceMappingURL=hygen.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/codegen/hygen.ts"],"names":["require"],"mappings":"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","file":"hygen.js","sourcesContent":["import fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Logger, runner } from \"hygen\";\nimport { DocumentModel } from \"document-model\";\nimport { loadDocumentModel } from \"./utils\";\nimport { DocumentTypesMap } from \".\";\nimport { pascalCase } from \"change-case\";\n\nconst require = createRequire(import.meta.url);\n\nconst __dirname =\n import.meta.dirname || path.dirname(fileURLToPath(import.meta.url));\nconst logger = new Logger(console.log.bind(console));\nconst defaultTemplates = path.join(__dirname, \".hygen\", \"templates\");\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nasync function run(args: string[], { watch = false, skipFormat = 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\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\n return require(\"execa\").shell(action, opts);\n },\n debug: !!process.env.DEBUG,\n });\n if (!skipFormat) {\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, skipFormat = 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, skipFormat });\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, skipFormat = 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, skipFormat },\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, skipFormat },\n );\n }\n}\n\nexport async function generateEditor(\n name: string,\n documentTypes: string[],\n documentTypesMap: DocumentTypesMap,\n dir: string,\n documentModelsDir: string,\n { skipFormat = 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 { skipFormat },\n );\n}\n\nexport async function generateProcessor(\n name: string,\n documentTypes: string[],\n documentTypesMap: DocumentTypesMap,\n dir: string,\n documentModelsDir: string,\n type = \"analytics\",\n { skipFormat = false } = {},\n) {\n // Generate the singular files for the document model logic\n const processorType = type === \"operational\" ? \"operational\" : \"analytics\";\n await run(\n [\n \"powerhouse\",\n `generate-processor-${processorType}`,\n \"--name\",\n name,\n \"--pascalName\",\n pascalCase(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 { skipFormat },\n );\n}\n\nexport async function generateSubgraph(\n name: string,\n dir: string,\n { skipFormat = false } = {},\n) {\n // Generate the singular files for the document model logic\n await run(\n [\n \"powerhouse\",\n `generate-subgraph`,\n \"--name\",\n name,\n \"--pascalName\",\n pascalCase(name),\n \"--root-dir\",\n dir,\n ],\n { skipFormat },\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/codegen/hygen.ts"],"names":["require"],"mappings":"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","file":"hygen.js","sourcesContent":["import { pascalCase } from \"change-case\";\nimport { DocumentModel } from \"document-model\";\nimport { DocumentModelState } from \"document-model/document-model\";\nimport { Logger, runner } from \"hygen\";\nimport fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { DocumentTypesMap } from \".\";\nimport { loadDocumentModel } from \"./utils\";\n\nconst require = createRequire(import.meta.url);\n\nconst __dirname =\n import.meta.dirname || path.dirname(fileURLToPath(import.meta.url));\nconst logger = new Logger(console.log.bind(console));\nconst defaultTemplates = path.join(__dirname, \".hygen\", \"templates\");\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nasync function run(args: string[], { watch = false, skipFormat = 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\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\n return require(\"execa\").shell(action, opts);\n },\n debug: !!process.env.DEBUG,\n });\n if (!skipFormat) {\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, skipFormat = 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, skipFormat });\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, skipFormat = 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, skipFormat },\n );\n\n const latestSpec =\n documentModel.specifications[documentModel.specifications.length - 1];\n\n // Generate the module-specific files for the document model logic\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, skipFormat },\n );\n }\n}\n\nexport async function generateEditor(\n name: string,\n documentTypes: string[],\n documentTypesMap: DocumentTypesMap,\n dir: string,\n documentModelsDir: string,\n { skipFormat = 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 { skipFormat },\n );\n}\n\nexport async function generateProcessor(\n name: string,\n documentTypes: string[],\n documentTypesMap: DocumentTypesMap,\n dir: string,\n documentModelsDir: string,\n type = \"analytics\",\n { skipFormat = false } = {},\n) {\n // Generate the singular files for the document model logic\n const processorType = type === \"operational\" ? \"operational\" : \"analytics\";\n await run(\n [\n \"powerhouse\",\n `generate-processor-${processorType}`,\n \"--name\",\n name,\n \"--pascalName\",\n pascalCase(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 { skipFormat },\n );\n}\n\nexport async function generateSubgraph(\n name: string,\n documentModel: DocumentModelState | null,\n dir: string,\n { skipFormat = false } = {},\n) {\n const params = [\n \"powerhouse\",\n `generate-subgraph`,\n \"--name\",\n name,\n \"--pascalName\",\n pascalCase(name),\n \"--root-dir\",\n dir,\n ];\n\n if (documentModel) {\n params.push(\"--loadFromFile\", \"1\");\n }\n\n // Generate the singular files for the document model logic\n await run(params, { skipFormat });\n\n if (documentModel) {\n // Generate the GraphQL mutation schemas\n await run(\n [\n \"powerhouse\",\n \"generate-document-model-mutations\",\n \"--subgraph\",\n name,\n \"--document-model\",\n JSON.stringify(documentModel),\n \"--root-dir\",\n dir,\n ],\n { skipFormat },\n );\n }\n}\n\nexport async function generateImportScript(\n name: string,\n dir: string,\n { skipFormat = false } = {},\n) {\n // Generate the singular files for the document model logic\n await run(\n [\n \"powerhouse\",\n `generate-import-script`,\n \"--name\",\n name,\n \"--pascalName\",\n pascalCase(name),\n \"--root-dir\",\n dir,\n ],\n { skipFormat },\n );\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  #! /usr/bin/env node
2
2
  import { typeDefs } from '@powerhousedao/scalars';
3
- import { generateAll, generateDocumentModel, generateEditor as generateEditor$1, generateProcessor as generateProcessor$1, generateSubgraph as generateSubgraph$1 } from './hygen.js';
4
- import { generateSchemas, generateSchema } from './graphql.js';
3
+ import { paramCase, pascalCase } from 'change-case';
5
4
  import fs from 'node:fs';
6
5
  import { join, resolve } from 'path';
7
- import { paramCase, pascalCase } from 'change-case';
6
+ import { generateSchemas, generateSchema } from './graphql.js';
7
+ import { generateAll, generateDocumentModel, generateEditor as generateEditor$1, generateSubgraph as generateSubgraph$1, generateProcessor as generateProcessor$1, generateImportScript as generateImportScript$1 } from './hygen.js';
8
8
  import { loadDocumentModel } from './utils.js';
9
9
 
10
10
  function generateGraphqlSchema(documentModel) {
@@ -110,6 +110,14 @@ async function generateEditor(name, documentTypes, config) {
110
110
  { skipFormat }
111
111
  );
112
112
  }
113
+ async function generateSubgraph(name, file, config) {
114
+ return generateSubgraph$1(
115
+ name,
116
+ file !== null ? await loadDocumentModel(file) : null,
117
+ config.subgraphsDir,
118
+ config
119
+ );
120
+ }
113
121
  async function generateProcessor(name, type, documentTypes, config) {
114
122
  const { documentModelsDir, skipFormat } = config;
115
123
  const documentTypesMap = await getDocumentTypesMap(documentModelsDir);
@@ -129,10 +137,10 @@ async function generateProcessor(name, type, documentTypes, config) {
129
137
  { skipFormat }
130
138
  );
131
139
  }
132
- async function generateSubgraph(name, config) {
133
- return generateSubgraph$1(name, config.subgraphsDir, config);
140
+ async function generateImportScript(name, config) {
141
+ return generateImportScript$1(name, config.importScriptsDir, config);
134
142
  }
135
143
 
136
- export { generate, generateEditor, generateFromFile, generateProcessor, generateSubgraph };
144
+ export { generate, generateEditor, generateFromFile, generateImportScript, generateProcessor, generateSubgraph };
137
145
  //# sourceMappingURL=index.js.map
138
146
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/codegen/index.ts"],"names":["_generateEditor","type","_generateProcessor","_generateSubgraph"],"mappings":"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","file":"index.js","sourcesContent":["#! /usr/bin/env node\nimport { DocumentModelState } from \"document-model/document-model\";\nimport { typeDefs } from \"@powerhousedao/scalars\";\nimport {\n generateAll,\n generateEditor as _generateEditor,\n generateProcessor as _generateProcessor,\n generateDocumentModel,\n generateSubgraph as _generateSubgraph,\n} from \"./hygen\";\nimport { generateSchemas, generateSchema } from \"./graphql\";\nimport fs from \"node:fs\";\nimport { join, resolve } from \"path\";\nimport { paramCase, pascalCase } from \"change-case\";\nimport { loadDocumentModel } from \"./utils\";\nimport { DocumentModel } from \"document-model/document\";\nimport { PowerhouseConfig } from \"@powerhousedao/config/powerhouse\";\n\nfunction generateGraphqlSchema(documentModel: DocumentModelState) {\n const spec =\n documentModel.specifications[documentModel.specifications.length - 1];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!spec) {\n throw new Error(`No spec found for ${documentModel.id}`);\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\nexport type DocumentTypesMap = Record<\n DocumentModel[\"documentModel\"][\"id\"],\n { name: string; importPath: string }\n>;\n\n// returns map of document model id to document model name in pascal case and import path\nasync function getDocumentTypesMap(\n dir: string,\n pathOrigin = \"../../../\",\n): Promise<DocumentTypesMap> {\n const documentTypesMap: DocumentTypesMap = {};\n\n // add document types from provided dir\n if (fs.existsSync(dir)) {\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] = {\n name: pascalCase(name),\n importPath: join(pathOrigin, dir, name),\n };\n }\n } catch {\n console.error(`Failed to parse ${specPath}`);\n }\n });\n }\n\n // add documents from document-model-libs if lib is installed\n try {\n /* eslint-disable */\n // @ts-ignore-error TS2307 this import is expected to fail if document-model-libs is not available\n const documentModels = await import(\"document-model-libs/document-models\");\n Object.keys(documentModels).forEach((name) => {\n const documentModel = documentModels[\n name as keyof typeof documentModels\n ] as DocumentModel;\n documentTypesMap[documentModel.documentModel.id] = {\n name,\n importPath: `document-model-libs/${paramCase(name)}`,\n };\n });\n /* eslint-enable */\n } catch {\n /* document-model-libs is not available */\n }\n\n return documentTypesMap;\n}\n\nexport async function generate(config: PowerhouseConfig) {\n const { skipFormat, watch } = config;\n await generateSchemas(config.documentModelsDir, { skipFormat, watch });\n await generateAll(config.documentModelsDir, { skipFormat, 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 = [\n typeDefs.join(\"\\n\"), // inject ph scalars\n generateGraphqlSchema(documentModel),\n ].join(\"\\n\");\n\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 pathOrigin = \"../../\";\n\n const { documentModelsDir, skipFormat } = config;\n const documentTypesMap = await getDocumentTypesMap(\n documentModelsDir,\n pathOrigin,\n );\n\n const invalidType = documentTypes.find(\n (type) => !Object.keys(documentTypesMap).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 documentTypesMap,\n config.editorsDir,\n config.documentModelsDir,\n { skipFormat },\n );\n}\n\nexport async function generateProcessor(\n name: string,\n type: \"analytics\" | \"operational\",\n documentTypes: string[],\n config: PowerhouseConfig,\n) {\n const { documentModelsDir, skipFormat } = config;\n const documentTypesMap = await getDocumentTypesMap(documentModelsDir);\n\n const invalidType = documentTypes.find(\n (type) => !Object.keys(documentTypesMap).includes(type),\n );\n if (invalidType) {\n throw new Error(`Document model for ${invalidType} not found`);\n }\n\n return _generateProcessor(\n name,\n documentTypes,\n documentTypesMap,\n config.processorsDir,\n config.documentModelsDir,\n type,\n { skipFormat },\n );\n}\n\nexport async function generateSubgraph(name: string, config: PowerhouseConfig) {\n return _generateSubgraph(name, config.subgraphsDir, config);\n}\n"]}
1
+ {"version":3,"sources":["../../src/codegen/index.ts"],"names":["_generateEditor","_generateSubgraph","type","_generateProcessor","_generateImportScript"],"mappings":"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","file":"index.js","sourcesContent":["#! /usr/bin/env node\nimport { PowerhouseConfig } from \"@powerhousedao/config/powerhouse\";\nimport { typeDefs } from \"@powerhousedao/scalars\";\nimport { paramCase, pascalCase } from \"change-case\";\nimport { DocumentModel } from \"document-model/document\";\nimport { DocumentModelState } from \"document-model/document-model\";\nimport fs from \"node:fs\";\nimport { join, resolve } from \"path\";\nimport { generateSchema, generateSchemas } from \"./graphql\";\nimport {\n generateEditor as _generateEditor,\n generateImportScript as _generateImportScript,\n generateProcessor as _generateProcessor,\n generateSubgraph as _generateSubgraph,\n generateAll,\n generateDocumentModel,\n} from \"./hygen\";\nimport { loadDocumentModel } from \"./utils\";\n\nfunction generateGraphqlSchema(documentModel: DocumentModelState) {\n const spec =\n documentModel.specifications[documentModel.specifications.length - 1];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!spec) {\n throw new Error(`No spec found for ${documentModel.id}`);\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\nexport type DocumentTypesMap = Record<\n DocumentModel[\"documentModel\"][\"id\"],\n { name: string; importPath: string }\n>;\n\n// returns map of document model id to document model name in pascal case and import path\nasync function getDocumentTypesMap(\n dir: string,\n pathOrigin = \"../../../\",\n): Promise<DocumentTypesMap> {\n const documentTypesMap: DocumentTypesMap = {};\n\n // add document types from provided dir\n if (fs.existsSync(dir)) {\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] = {\n name: pascalCase(name),\n importPath: join(pathOrigin, dir, name),\n };\n }\n } catch {\n console.error(`Failed to parse ${specPath}`);\n }\n });\n }\n\n // add documents from document-model-libs if lib is installed\n try {\n /* eslint-disable */\n // @ts-ignore-error TS2307 this import is expected to fail if document-model-libs is not available\n const documentModels = await import(\"document-model-libs/document-models\");\n Object.keys(documentModels).forEach((name) => {\n const documentModel = documentModels[\n name as keyof typeof documentModels\n ] as DocumentModel;\n documentTypesMap[documentModel.documentModel.id] = {\n name,\n importPath: `document-model-libs/${paramCase(name)}`,\n };\n });\n /* eslint-enable */\n } catch {\n /* document-model-libs is not available */\n }\n\n return documentTypesMap;\n}\n\nexport async function generate(config: PowerhouseConfig) {\n const { skipFormat, watch } = config;\n await generateSchemas(config.documentModelsDir, { skipFormat, watch });\n await generateAll(config.documentModelsDir, { skipFormat, 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 = [\n typeDefs.join(\"\\n\"), // inject ph scalars\n generateGraphqlSchema(documentModel),\n ].join(\"\\n\");\n\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 pathOrigin = \"../../\";\n\n const { documentModelsDir, skipFormat } = config;\n const documentTypesMap = await getDocumentTypesMap(\n documentModelsDir,\n pathOrigin,\n );\n\n const invalidType = documentTypes.find(\n (type) => !Object.keys(documentTypesMap).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 documentTypesMap,\n config.editorsDir,\n config.documentModelsDir,\n { skipFormat },\n );\n}\n\nexport async function generateSubgraph(\n name: string,\n file: string | null,\n config: PowerhouseConfig,\n) {\n return _generateSubgraph(\n name,\n file !== null ? await loadDocumentModel(file) : null,\n config.subgraphsDir,\n config,\n );\n}\n\nexport async function generateProcessor(\n name: string,\n type: \"analytics\" | \"operational\",\n documentTypes: string[],\n config: PowerhouseConfig,\n) {\n const { documentModelsDir, skipFormat } = config;\n const documentTypesMap = await getDocumentTypesMap(documentModelsDir);\n\n const invalidType = documentTypes.find(\n (type) => !Object.keys(documentTypesMap).includes(type),\n );\n if (invalidType) {\n throw new Error(`Document model for ${invalidType} not found`);\n }\n\n return _generateProcessor(\n name,\n documentTypes,\n documentTypesMap,\n config.processorsDir,\n config.documentModelsDir,\n type,\n { skipFormat },\n );\n}\n\nexport async function generateImportScript(\n name: string,\n config: PowerhouseConfig,\n) {\n return _generateImportScript(name, config.importScriptsDir, config);\n}\n"]}
package/dist/hygen.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { DocumentModel } from 'document-model';
2
- import { D as DocumentTypesMap } from './index-CINLSROn.js';
3
- import 'document-model/document';
2
+ import { DocumentModelState } from 'document-model/document-model';
3
+ import { D as DocumentTypesMap } from './index-DT1dkT-t.js';
4
4
  import '@powerhousedao/config/powerhouse';
5
+ import 'document-model/document';
5
6
 
6
7
  declare function generateAll(dir: string, { watch, skipFormat }?: {
7
8
  watch?: boolean | undefined;
@@ -17,8 +18,11 @@ declare function generateEditor(name: string, documentTypes: string[], documentT
17
18
  declare function generateProcessor(name: string, documentTypes: string[], documentTypesMap: DocumentTypesMap, dir: string, documentModelsDir: string, type?: string, { skipFormat }?: {
18
19
  skipFormat?: boolean | undefined;
19
20
  }): Promise<void>;
20
- declare function generateSubgraph(name: string, dir: string, { skipFormat }?: {
21
+ declare function generateSubgraph(name: string, documentModel: DocumentModelState | null, dir: string, { skipFormat }?: {
22
+ skipFormat?: boolean | undefined;
23
+ }): Promise<void>;
24
+ declare function generateImportScript(name: string, dir: string, { skipFormat }?: {
21
25
  skipFormat?: boolean | undefined;
22
26
  }): Promise<void>;
23
27
 
24
- export { generateAll, generateDocumentModel, generateEditor, generateProcessor, generateSubgraph };
28
+ export { generateAll, generateDocumentModel, generateEditor, generateImportScript, generateProcessor, generateSubgraph };
@@ -1,5 +1,5 @@
1
- import { DocumentModel } from 'document-model/document';
2
1
  import { PowerhouseConfig } from '@powerhousedao/config/powerhouse';
2
+ import { DocumentModel } from 'document-model/document';
3
3
 
4
4
  type DocumentTypesMap = Record<DocumentModel["documentModel"]["id"], {
5
5
  name: string;
@@ -8,7 +8,8 @@ type DocumentTypesMap = Record<DocumentModel["documentModel"]["id"], {
8
8
  declare function generate(config: PowerhouseConfig): Promise<void>;
9
9
  declare function generateFromFile(path: string, config: PowerhouseConfig): Promise<void>;
10
10
  declare function generateEditor(name: string, documentTypes: string[], config: PowerhouseConfig): Promise<void>;
11
+ declare function generateSubgraph(name: string, file: string | null, config: PowerhouseConfig): Promise<void>;
11
12
  declare function generateProcessor(name: string, type: "analytics" | "operational", documentTypes: string[], config: PowerhouseConfig): Promise<void>;
12
- declare function generateSubgraph(name: string, config: PowerhouseConfig): Promise<void>;
13
+ declare function generateImportScript(name: string, config: PowerhouseConfig): Promise<void>;
13
14
 
14
- export { type DocumentTypesMap as D, generateFromFile as a, generateEditor as b, generateProcessor as c, generateSubgraph as d, generate as g };
15
+ export { type DocumentTypesMap as D, generateFromFile as a, generateEditor as b, generateSubgraph as c, generateProcessor as d, generateImportScript as e, generate as g };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { D as DocumentTypesMap, g as generate, b as generateEditor, a as generateFromFile, c as generateProcessor, d as generateSubgraph } from './index-CINLSROn.js';
1
+ export { D as DocumentTypesMap, g as generate, b as generateEditor, a as generateFromFile, e as generateImportScript, d as generateProcessor, c as generateSubgraph } from './index-DT1dkT-t.js';
2
2
  export { ICreateProjectOptions, configSpec, createProject, createProjectSpec, generateMock, generateMockTypeFn, getPackageManager, parseArgs, parseConfig, parseVersion, promptDirectories } from './utils.js';
3
- import 'document-model/document';
4
3
  import '@powerhousedao/config/powerhouse';
4
+ import 'document-model/document';
5
5
  import 'arg';
6
6
  import '@anatine/zod-mock';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/cli.ts"],"names":[],"mappings":";;;AAGA,MAAM,EAAE,QAAW,GAAA,QAAA;AAEZ,MAAM,UAAa,GAAA;AAAA,EACxB,mBAAqB,EAAA,MAAA;AAAA,EACrB,WAAa,EAAA,MAAA;AAAA,EACb,eAAiB,EAAA,OAAA;AAAA,EACjB,eAAiB,EAAA,OAAA;AAAA,EACjB,SAAW,EAAA,OAAA;AAAA,EACX,IAAM,EAAA,eAAA;AAAA,EACN,KAAO,EAAA,eAAA;AAAA,EACP,IAAM,EAAA;AACR;AAEO,SAAS,SAAA,CAA8B,MAAgB,IAAS,EAAA;AACrE,EAAM,MAAA,IAAA,GAAO,IAAI,IAAM,EAAA;AAAA,IACrB,UAAY,EAAA,IAAA;AAAA,IACZ;AAAA,GACD,CAAA;AAED,EAAO,OAAA,IAAA;AACT;AAEO,SAAS,YAAY,IAAgB,EAAA;AAC1C,EAAA,MAAM,SAMD,EAAC;AACN,EAAM,MAAA,IAAA,GAAO,SAAU,CAAA,IAAA,EAAM,UAAU,CAAA;AAEvC,EAAA,IAAI,uBAAuB,IAAM,EAAA;AAC/B,IAAO,MAAA,CAAA,iBAAA,GAAoB,KAAK,mBAAmB,CAAA;AAAA;AAGrD,EAAA,IAAI,eAAe,IAAM,EAAA;AACvB,IAAO,MAAA,CAAA,UAAA,GAAa,KAAK,WAAW,CAAA;AAAA;AAGtC,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAA,MAAA,CAAO,UAAa,GAAA,IAAA;AAAA;AAEtB,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAA,MAAA,CAAO,WAAc,GAAA,IAAA;AAAA;AAEvB,EAAA,IAAI,aAAa,IAAM,EAAA;AACrB,IAAA,MAAA,CAAO,KAAQ,GAAA,IAAA;AAAA;AAGjB,EAAO,OAAA,MAAA;AACT;AAOA,eAAsB,kBAAkB,WAAiC,EAAA;AACvE,EAAA,OAAO,MAA2B,CAAA;AAAA,IAChC;AAAA,MACE,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,mBAAA;AAAA,MACN,OAAS,EAAA,qCAAA;AAAA,MACT,SAAS,WAAY,CAAA;AAAA,KACvB;AAAA,IACA;AAAA,MACE,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,YAAA;AAAA,MACN,OAAS,EAAA,6BAAA;AAAA,MACT,SAAS,WAAY,CAAA;AAAA;AACvB,GACD,CAAA;AACH","file":"cli.js","sourcesContent":["import arg from \"arg\";\nimport enquirer from \"enquirer\";\n\nconst { prompt } = enquirer;\n\nexport const configSpec = {\n \"--document-models\": String,\n \"--editors\": String,\n \"--interactive\": Boolean,\n \"--skip-format\": Boolean,\n \"--watch\": Boolean,\n \"-i\": \"--interactive\",\n \"-sf\": \"--skip-format\",\n \"-w\": \"--watch\",\n} as const;\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<{\n documentModelsDir?: string;\n editorsDir?: string;\n skipFormat?: boolean;\n interactive?: boolean;\n watch?: boolean;\n }> = {};\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 (\"--skip-format\" in args) {\n config.skipFormat = 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\ntype DefaultDirectories = {\n documentModelsDir: string;\n editorsDir: string;\n};\n\nexport async function promptDirectories(defaultDirs: DefaultDirectories) {\n return prompt<DefaultDirectories>([\n {\n type: \"input\",\n name: \"documentModelsDir\",\n message: \"Where to place the Document Models?\",\n initial: defaultDirs.documentModelsDir,\n },\n {\n type: \"input\",\n name: \"editorsDir\",\n message: \"Where to place the Editors?\",\n initial: defaultDirs.editorsDir,\n },\n ]);\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/cli.ts"],"names":[],"mappings":";;;AAOA,MAAM,EAAE,QAAW,GAAA,QAAA;AAEZ,MAAM,UAAa,GAAA;AAAA,EACxB,mBAAqB,EAAA,MAAA;AAAA,EACrB,WAAa,EAAA,MAAA;AAAA,EACb,eAAiB,EAAA,OAAA;AAAA,EACjB,eAAiB,EAAA,OAAA;AAAA,EACjB,SAAW,EAAA,OAAA;AAAA,EACX,IAAM,EAAA,eAAA;AAAA,EACN,KAAO,EAAA,eAAA;AAAA,EACP,IAAM,EAAA;AACR;AAEO,SAAS,SAAA,CAA8B,MAAgB,IAAS,EAAA;AACrE,EAAM,MAAA,IAAA,GAAO,IAAI,IAAM,EAAA;AAAA,IACrB,UAAY,EAAA,IAAA;AAAA,IACZ;AAAA,GACD,CAAA;AAED,EAAO,OAAA,IAAA;AACT;AAEO,SAAS,YAAY,IAAgB,EAAA;AAC1C,EAAA,MAAM,SAMD,EAAC;AACN,EAAM,MAAA,IAAA,GAAO,SAAU,CAAA,IAAA,EAAM,UAAU,CAAA;AAEvC,EAAA,IAAI,uBAAuB,IAAM,EAAA;AAC/B,IAAO,MAAA,CAAA,iBAAA,GAAoB,KAAK,mBAAmB,CAAA;AAAA;AAGrD,EAAA,IAAI,eAAe,IAAM,EAAA;AACvB,IAAO,MAAA,CAAA,UAAA,GAAa,KAAK,WAAW,CAAA;AAAA;AAGtC,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAA,MAAA,CAAO,UAAa,GAAA,IAAA;AAAA;AAEtB,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAA,MAAA,CAAO,WAAc,GAAA,IAAA;AAAA;AAEvB,EAAA,IAAI,aAAa,IAAM,EAAA;AACrB,IAAA,MAAA,CAAO,KAAQ,GAAA,IAAA;AAAA;AAGjB,EAAO,OAAA,MAAA;AACT;AAOA,eAAsB,kBAAkB,WAAiC,EAAA;AACvE,EAAA,OAAO,MAA2B,CAAA;AAAA,IAChC;AAAA,MACE,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,mBAAA;AAAA,MACN,OAAS,EAAA,qCAAA;AAAA,MACT,SAAS,WAAY,CAAA;AAAA,KACvB;AAAA,IACA;AAAA,MACE,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,YAAA;AAAA,MACN,OAAS,EAAA,6BAAA;AAAA,MACT,SAAS,WAAY,CAAA;AAAA;AACvB,GACD,CAAA;AACH","file":"cli.js","sourcesContent":["import {\n DEFAULT_CONFIG,\n PowerhouseConfig,\n} from \"@powerhousedao/config/powerhouse\";\nimport arg from \"arg\";\nimport enquirer from \"enquirer\";\n\nconst { prompt } = enquirer;\n\nexport const configSpec = {\n \"--document-models\": String,\n \"--editors\": String,\n \"--interactive\": Boolean,\n \"--skip-format\": Boolean,\n \"--watch\": Boolean,\n \"-i\": \"--interactive\",\n \"-sf\": \"--skip-format\",\n \"-w\": \"--watch\",\n} as const;\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<{\n documentModelsDir?: string;\n editorsDir?: string;\n skipFormat?: boolean;\n interactive?: boolean;\n watch?: boolean;\n }> = {};\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 (\"--skip-format\" in args) {\n config.skipFormat = 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\ntype DefaultDirectories = {\n documentModelsDir: string;\n editorsDir: string;\n};\n\nexport async function promptDirectories(defaultDirs: DefaultDirectories) {\n return prompt<DefaultDirectories>([\n {\n type: \"input\",\n name: \"documentModelsDir\",\n message: \"Where to place the Document Models?\",\n initial: defaultDirs.documentModelsDir,\n },\n {\n type: \"input\",\n name: \"editorsDir\",\n message: \"Where to place the Editors?\",\n initial: defaultDirs.editorsDir,\n },\n ]);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/codegen",
3
- "version": "0.32.3",
3
+ "version": "0.34.0",
4
4
  "license": "AGPL-3.0-only",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -33,15 +33,15 @@
33
33
  "execa": "^8.0.1",
34
34
  "hygen": "^6.2.11",
35
35
  "prettier": "^3.4.2",
36
- "document-model": "2.18.0",
37
- "@powerhousedao/config": "1.15.0"
36
+ "@powerhousedao/config": "1.16.0",
37
+ "document-model": "2.19.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "copyfiles": "^2.4.1",
41
41
  "esbuild-fix-imports-plugin": "^1.0.7",
42
42
  "graphql": "^16.8.1",
43
43
  "husky": "^8.0.3",
44
- "@powerhousedao/scalars": "1.21.1"
44
+ "@powerhousedao/scalars": "1.22.0"
45
45
  },
46
46
  "scripts": {
47
47
  "check-types": "tsc --build",