@fabricorg/gen-graphql 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/index.cjs +7 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/package.json +7 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Make the capability runtime vertical-neutral and instance-scoped. Move experience and display
|
|
8
|
+
semantics into a namespaced companion package, require explicit host registries, replace privacy
|
|
9
|
+
field defaults with caller-owned policy, add PostgreSQL projection adapters, and generate executable
|
|
10
|
+
ProjectionHost read and PlatformHost mutation seams.
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
- @fabricorg/platform@1.0.0
|
|
16
|
+
- @fabricorg/platform-host@4.0.0
|
|
17
|
+
- @fabricorg/projection-host@1.0.0
|
|
18
|
+
- @fabricorg/compiler@2.0.0
|
|
19
|
+
|
|
20
|
+
## 1.2.0
|
|
21
|
+
|
|
22
|
+
- Generate executable mutation helpers that call `PlatformHost.submitAction()` with trusted resolver context.
|
|
23
|
+
- Keep generated queries routed through `ProjectionHost.project()`.
|
|
24
|
+
|
|
3
25
|
## 1.1.0
|
|
4
26
|
|
|
5
27
|
- Generate version-pinned view identities and a `ProjectionHost`-backed query resolver helper.
|
package/dist/index.cjs
CHANGED
|
@@ -34,7 +34,7 @@ var identifier = (value) => {
|
|
|
34
34
|
};
|
|
35
35
|
var graphqlGenerator = {
|
|
36
36
|
name: "@fabricorg/gen-graphql",
|
|
37
|
-
version: "
|
|
37
|
+
version: "2.0.0",
|
|
38
38
|
generate(ir) {
|
|
39
39
|
return ir.modules.flatMap((module2) => {
|
|
40
40
|
const types = module2.objectTypes.map((objectType) => {
|
|
@@ -71,6 +71,7 @@ ${mutations.length ? mutations.join("\n") : " _fabric: Boolean!"}
|
|
|
71
71
|
].join("\n\n");
|
|
72
72
|
const resolvers = [
|
|
73
73
|
'import type { ProjectionHost, ProjectionQuery } from "@fabricorg/projection-host";',
|
|
74
|
+
'import type { GovernedActionHost, SubmitActionInput, SubmitActionResult } from "@fabricorg/platform-host";',
|
|
74
75
|
"",
|
|
75
76
|
"// Generated resolver seam. Authenticate first; derive actor and tenant server-side.",
|
|
76
77
|
`export const actionIds = ${JSON.stringify(Object.fromEntries(module2.actions.map((action) => [fieldName(action.actionId), action.actionId])), null, 2)} as const;`,
|
|
@@ -79,8 +80,12 @@ ${mutations.length ? mutations.join("\n") : " _fabric: Boolean!"}
|
|
|
79
80
|
" const result = await host.project({ ...context, view: viewIds[field] });",
|
|
80
81
|
" return result.state;",
|
|
81
82
|
"}",
|
|
83
|
+
'export type GovernedMutationContext = Omit<SubmitActionInput, "actionId" | "parameters">;',
|
|
84
|
+
'export async function submitMutation(host: Pick<GovernedActionHost, "submitAction">, field: keyof typeof actionIds, parameters: Record<string, unknown>, context: GovernedMutationContext): Promise<SubmitActionResult> {',
|
|
85
|
+
" return await host.submitAction({ ...context, actionId: actionIds[field], parameters });",
|
|
86
|
+
"}",
|
|
82
87
|
"// Query resolvers call resolveProjection(); never read a projection store directly.",
|
|
83
|
-
"//
|
|
88
|
+
"// Mutation resolvers call submitMutation(); never call handlers directly.",
|
|
84
89
|
""
|
|
85
90
|
].join("\n");
|
|
86
91
|
return [{ path: `${module2.namespace}/schema.graphql`, content }, { path: `${module2.namespace}/resolver-contract.ts`, content: resolvers }];
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import type { GeneratorTarget } from \"@fabricorg/compiler\";\nimport type { PortableJsonSchema } from \"@fabricorg/platform\";\n\nconst pascal = (value: string): string =>\n\tvalue.split(/[-._/]/).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(\"\");\nconst gql = (schema: PortableJsonSchema): string => {\n\tconst type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\treturn type === \"integer\" ? \"Int\" : type === \"number\" ? \"Float\" : type === \"boolean\" ? \"Boolean\" : type === \"string\" ? \"String\" : \"JSON\";\n};\nconst identifier = (value: string): string => {\n\tconst normalized = value.replace(/[^_0-9A-Za-z]/g, \"_\");\n\treturn /^[_A-Za-z]/.test(normalized) ? normalized : `field_${normalized}`;\n};\n\nexport const graphqlGenerator: GeneratorTarget = {\n\tname: \"@fabricorg/gen-graphql\",\n\tversion: \"
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import type { GeneratorTarget } from \"@fabricorg/compiler\";\nimport type { PortableJsonSchema } from \"@fabricorg/platform\";\n\nconst pascal = (value: string): string =>\n\tvalue.split(/[-._/]/).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(\"\");\nconst gql = (schema: PortableJsonSchema): string => {\n\tconst type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\treturn type === \"integer\" ? \"Int\" : type === \"number\" ? \"Float\" : type === \"boolean\" ? \"Boolean\" : type === \"string\" ? \"String\" : \"JSON\";\n};\nconst identifier = (value: string): string => {\n\tconst normalized = value.replace(/[^_0-9A-Za-z]/g, \"_\");\n\treturn /^[_A-Za-z]/.test(normalized) ? normalized : `field_${normalized}`;\n};\n\nexport const graphqlGenerator: GeneratorTarget = {\n\tname: \"@fabricorg/gen-graphql\",\n\tversion: \"2.0.0\",\n\tgenerate(ir) {\n\t\treturn ir.modules.flatMap((module) => {\n\t\t\tconst types = module.objectTypes.map((objectType) => {\n\t\t\t\tconst required = new Set(objectType.schema?.required ?? []);\n\t\t\t\tconst properties = Object.entries(objectType.schema?.properties ?? {}).filter(([name]) => ![\"id\", \"tenantId\", \"spaceId\"].includes(name));\n\t\t\t\tconst fieldNames = properties.map(([name]) => identifier(name));\n\t\t\t\tif (new Set(fieldNames).size !== fieldNames.length) throw new Error(`Object \"${module.namespace}.${objectType.type}\" produces colliding GraphQL field names.`);\n\t\t\t\tconst fields = properties.map(\n\t\t\t\t\t([name, schema]) => ` ${identifier(name)}: ${gql(schema)}${required.has(name) ? \"!\" : \"\"}`,\n\t\t\t\t);\n\t\t\t\treturn [`type ${pascal(module.namespace)}${objectType.type} @key(fields: \"id\") {`, \" id: ID!\", \" tenantId: ID!\", \" spaceId: ID!\", ...fields, \"}\"].join(\"\\n\");\n\t\t\t});\n\t\t\tconst fieldName = (value: string): string => {\n\t\t\t\tconst name = pascal(value);\n\t\t\t\treturn `${name[0]?.toLowerCase() ?? \"\"}${name.slice(1)}`;\n\t\t\t};\n\t\t\tconst queryFields = module.views.map((view) => ` ${fieldName(view.name)}: JSON!`);\n\t\t\tconst mutations = module.actions.map((action) => ` ${fieldName(action.actionId)}(parameters: JSON!): GovernedActionSubmission!`);\n\t\t\tconst operationNames = [...module.views.map((view) => fieldName(view.name)), ...module.actions.map((action) => fieldName(action.actionId))];\n\t\t\tif (new Set(operationNames).size !== operationNames.length) throw new Error(`Module \"${module.namespace}\" produces colliding GraphQL operation names.`);\n\t\t\tconst content = [\n\t\t\t\t`# Generated by ${graphqlGenerator.name}@${graphqlGenerator.version}`,\n\t\t\t\t`# Manifest digest: ${ir.manifestDigest}`,\n\t\t\t\t\"scalar JSON\",\n\t\t\t\t\"type GovernedActionSubmission { actionInvocationId: ID!, status: String! }\",\n\t\t\t\t...types,\n\t\t\t\t`type Query {\\n${queryFields.length ? queryFields.join(\"\\n\") : \" _fabric: Boolean!\"}\\n}`,\n\t\t\t\t`type Mutation {\\n${mutations.length ? mutations.join(\"\\n\") : \" _fabric: Boolean!\"}\\n}`,\n\t\t\t\t\"\",\n\t\t\t].join(\"\\n\\n\");\n\t\t\tconst resolvers = [\n\t\t\t\t'import type { ProjectionHost, ProjectionQuery } from \"@fabricorg/projection-host\";',\n\t\t\t\t'import type { GovernedActionHost, SubmitActionInput, SubmitActionResult } from \"@fabricorg/platform-host\";',\n\t\t\t\t\"\",\n\t\t\t\t\"// Generated resolver seam. Authenticate first; derive actor and tenant server-side.\",\n\t\t\t\t`export const actionIds = ${JSON.stringify(Object.fromEntries(module.actions.map((action) => [fieldName(action.actionId), action.actionId])), null, 2)} as const;`,\n\t\t\t\t`export const viewIds = ${JSON.stringify(Object.fromEntries(module.views.map((view) => [fieldName(view.name), { name: view.name, version: view.version }])), null, 2)} as const;`,\n\t\t\t\t\"export async function resolveProjection(host: Pick<ProjectionHost, \\\"project\\\">, field: keyof typeof viewIds, context: Omit<ProjectionQuery, \\\"view\\\">): Promise<unknown> {\",\n\t\t\t\t\" const result = await host.project({ ...context, view: viewIds[field] });\",\n\t\t\t\t\" return result.state;\",\n\t\t\t\t\"}\",\n\t\t\t\t\"export type GovernedMutationContext = Omit<SubmitActionInput, \\\"actionId\\\" | \\\"parameters\\\">;\",\n\t\t\t\t\"export async function submitMutation(host: Pick<GovernedActionHost, \\\"submitAction\\\">, field: keyof typeof actionIds, parameters: Record<string, unknown>, context: GovernedMutationContext): Promise<SubmitActionResult> {\",\n\t\t\t\t\" return await host.submitAction({ ...context, actionId: actionIds[field], parameters });\",\n\t\t\t\t\"}\",\n\t\t\t\t\"// Query resolvers call resolveProjection(); never read a projection store directly.\",\n\t\t\t\t\"// Mutation resolvers call submitMutation(); never call handlers directly.\",\n\t\t\t\t\"\",\n\t\t\t].join(\"\\n\");\n\t\t\treturn [{ path: `${module.namespace}/schema.graphql`, content }, { path: `${module.namespace}/resolver-contract.ts`, content: resolvers }];\n\t\t});\n\t},\n};\n"],"mappings":"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","names":["module"]}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var identifier = (value) => {
|
|
|
10
10
|
};
|
|
11
11
|
var graphqlGenerator = {
|
|
12
12
|
name: "@fabricorg/gen-graphql",
|
|
13
|
-
version: "
|
|
13
|
+
version: "2.0.0",
|
|
14
14
|
generate(ir) {
|
|
15
15
|
return ir.modules.flatMap((module) => {
|
|
16
16
|
const types = module.objectTypes.map((objectType) => {
|
|
@@ -47,6 +47,7 @@ ${mutations.length ? mutations.join("\n") : " _fabric: Boolean!"}
|
|
|
47
47
|
].join("\n\n");
|
|
48
48
|
const resolvers = [
|
|
49
49
|
'import type { ProjectionHost, ProjectionQuery } from "@fabricorg/projection-host";',
|
|
50
|
+
'import type { GovernedActionHost, SubmitActionInput, SubmitActionResult } from "@fabricorg/platform-host";',
|
|
50
51
|
"",
|
|
51
52
|
"// Generated resolver seam. Authenticate first; derive actor and tenant server-side.",
|
|
52
53
|
`export const actionIds = ${JSON.stringify(Object.fromEntries(module.actions.map((action) => [fieldName(action.actionId), action.actionId])), null, 2)} as const;`,
|
|
@@ -55,8 +56,12 @@ ${mutations.length ? mutations.join("\n") : " _fabric: Boolean!"}
|
|
|
55
56
|
" const result = await host.project({ ...context, view: viewIds[field] });",
|
|
56
57
|
" return result.state;",
|
|
57
58
|
"}",
|
|
59
|
+
'export type GovernedMutationContext = Omit<SubmitActionInput, "actionId" | "parameters">;',
|
|
60
|
+
'export async function submitMutation(host: Pick<GovernedActionHost, "submitAction">, field: keyof typeof actionIds, parameters: Record<string, unknown>, context: GovernedMutationContext): Promise<SubmitActionResult> {',
|
|
61
|
+
" return await host.submitAction({ ...context, actionId: actionIds[field], parameters });",
|
|
62
|
+
"}",
|
|
58
63
|
"// Query resolvers call resolveProjection(); never read a projection store directly.",
|
|
59
|
-
"//
|
|
64
|
+
"// Mutation resolvers call submitMutation(); never call handlers directly.",
|
|
60
65
|
""
|
|
61
66
|
].join("\n");
|
|
62
67
|
return [{ path: `${module.namespace}/schema.graphql`, content }, { path: `${module.namespace}/resolver-contract.ts`, content: resolvers }];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import type { GeneratorTarget } from \"@fabricorg/compiler\";\nimport type { PortableJsonSchema } from \"@fabricorg/platform\";\n\nconst pascal = (value: string): string =>\n\tvalue.split(/[-._/]/).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(\"\");\nconst gql = (schema: PortableJsonSchema): string => {\n\tconst type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\treturn type === \"integer\" ? \"Int\" : type === \"number\" ? \"Float\" : type === \"boolean\" ? \"Boolean\" : type === \"string\" ? \"String\" : \"JSON\";\n};\nconst identifier = (value: string): string => {\n\tconst normalized = value.replace(/[^_0-9A-Za-z]/g, \"_\");\n\treturn /^[_A-Za-z]/.test(normalized) ? normalized : `field_${normalized}`;\n};\n\nexport const graphqlGenerator: GeneratorTarget = {\n\tname: \"@fabricorg/gen-graphql\",\n\tversion: \"
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import type { GeneratorTarget } from \"@fabricorg/compiler\";\nimport type { PortableJsonSchema } from \"@fabricorg/platform\";\n\nconst pascal = (value: string): string =>\n\tvalue.split(/[-._/]/).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(\"\");\nconst gql = (schema: PortableJsonSchema): string => {\n\tconst type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\treturn type === \"integer\" ? \"Int\" : type === \"number\" ? \"Float\" : type === \"boolean\" ? \"Boolean\" : type === \"string\" ? \"String\" : \"JSON\";\n};\nconst identifier = (value: string): string => {\n\tconst normalized = value.replace(/[^_0-9A-Za-z]/g, \"_\");\n\treturn /^[_A-Za-z]/.test(normalized) ? normalized : `field_${normalized}`;\n};\n\nexport const graphqlGenerator: GeneratorTarget = {\n\tname: \"@fabricorg/gen-graphql\",\n\tversion: \"2.0.0\",\n\tgenerate(ir) {\n\t\treturn ir.modules.flatMap((module) => {\n\t\t\tconst types = module.objectTypes.map((objectType) => {\n\t\t\t\tconst required = new Set(objectType.schema?.required ?? []);\n\t\t\t\tconst properties = Object.entries(objectType.schema?.properties ?? {}).filter(([name]) => ![\"id\", \"tenantId\", \"spaceId\"].includes(name));\n\t\t\t\tconst fieldNames = properties.map(([name]) => identifier(name));\n\t\t\t\tif (new Set(fieldNames).size !== fieldNames.length) throw new Error(`Object \"${module.namespace}.${objectType.type}\" produces colliding GraphQL field names.`);\n\t\t\t\tconst fields = properties.map(\n\t\t\t\t\t([name, schema]) => ` ${identifier(name)}: ${gql(schema)}${required.has(name) ? \"!\" : \"\"}`,\n\t\t\t\t);\n\t\t\t\treturn [`type ${pascal(module.namespace)}${objectType.type} @key(fields: \"id\") {`, \" id: ID!\", \" tenantId: ID!\", \" spaceId: ID!\", ...fields, \"}\"].join(\"\\n\");\n\t\t\t});\n\t\t\tconst fieldName = (value: string): string => {\n\t\t\t\tconst name = pascal(value);\n\t\t\t\treturn `${name[0]?.toLowerCase() ?? \"\"}${name.slice(1)}`;\n\t\t\t};\n\t\t\tconst queryFields = module.views.map((view) => ` ${fieldName(view.name)}: JSON!`);\n\t\t\tconst mutations = module.actions.map((action) => ` ${fieldName(action.actionId)}(parameters: JSON!): GovernedActionSubmission!`);\n\t\t\tconst operationNames = [...module.views.map((view) => fieldName(view.name)), ...module.actions.map((action) => fieldName(action.actionId))];\n\t\t\tif (new Set(operationNames).size !== operationNames.length) throw new Error(`Module \"${module.namespace}\" produces colliding GraphQL operation names.`);\n\t\t\tconst content = [\n\t\t\t\t`# Generated by ${graphqlGenerator.name}@${graphqlGenerator.version}`,\n\t\t\t\t`# Manifest digest: ${ir.manifestDigest}`,\n\t\t\t\t\"scalar JSON\",\n\t\t\t\t\"type GovernedActionSubmission { actionInvocationId: ID!, status: String! }\",\n\t\t\t\t...types,\n\t\t\t\t`type Query {\\n${queryFields.length ? queryFields.join(\"\\n\") : \" _fabric: Boolean!\"}\\n}`,\n\t\t\t\t`type Mutation {\\n${mutations.length ? mutations.join(\"\\n\") : \" _fabric: Boolean!\"}\\n}`,\n\t\t\t\t\"\",\n\t\t\t].join(\"\\n\\n\");\n\t\t\tconst resolvers = [\n\t\t\t\t'import type { ProjectionHost, ProjectionQuery } from \"@fabricorg/projection-host\";',\n\t\t\t\t'import type { GovernedActionHost, SubmitActionInput, SubmitActionResult } from \"@fabricorg/platform-host\";',\n\t\t\t\t\"\",\n\t\t\t\t\"// Generated resolver seam. Authenticate first; derive actor and tenant server-side.\",\n\t\t\t\t`export const actionIds = ${JSON.stringify(Object.fromEntries(module.actions.map((action) => [fieldName(action.actionId), action.actionId])), null, 2)} as const;`,\n\t\t\t\t`export const viewIds = ${JSON.stringify(Object.fromEntries(module.views.map((view) => [fieldName(view.name), { name: view.name, version: view.version }])), null, 2)} as const;`,\n\t\t\t\t\"export async function resolveProjection(host: Pick<ProjectionHost, \\\"project\\\">, field: keyof typeof viewIds, context: Omit<ProjectionQuery, \\\"view\\\">): Promise<unknown> {\",\n\t\t\t\t\" const result = await host.project({ ...context, view: viewIds[field] });\",\n\t\t\t\t\" return result.state;\",\n\t\t\t\t\"}\",\n\t\t\t\t\"export type GovernedMutationContext = Omit<SubmitActionInput, \\\"actionId\\\" | \\\"parameters\\\">;\",\n\t\t\t\t\"export async function submitMutation(host: Pick<GovernedActionHost, \\\"submitAction\\\">, field: keyof typeof actionIds, parameters: Record<string, unknown>, context: GovernedMutationContext): Promise<SubmitActionResult> {\",\n\t\t\t\t\" return await host.submitAction({ ...context, actionId: actionIds[field], parameters });\",\n\t\t\t\t\"}\",\n\t\t\t\t\"// Query resolvers call resolveProjection(); never read a projection store directly.\",\n\t\t\t\t\"// Mutation resolvers call submitMutation(); never call handlers directly.\",\n\t\t\t\t\"\",\n\t\t\t].join(\"\\n\");\n\t\t\treturn [{ path: `${module.namespace}/schema.graphql`, content }, { path: `${module.namespace}/resolver-contract.ts`, content: resolvers }];\n\t\t});\n\t},\n};\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fabricorg/gen-graphql",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Federation-ready GraphQL contract generator for Fabric compiler IR.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,23 +25,20 @@
|
|
|
25
25
|
"CHANGELOG.md"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@fabricorg/compiler": "^
|
|
28
|
+
"@fabricorg/compiler": "^2.0.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@fabricorg/platform": "^0.
|
|
32
|
-
"@fabricorg/projection-host": "^
|
|
33
|
-
|
|
34
|
-
"peerDependenciesMeta": {
|
|
35
|
-
"@fabricorg/projection-host": {
|
|
36
|
-
"optional": true
|
|
37
|
-
}
|
|
31
|
+
"@fabricorg/platform": "^1.0.0",
|
|
32
|
+
"@fabricorg/projection-host": "^1.0.0",
|
|
33
|
+
"@fabricorg/platform-host": "^4.0.0"
|
|
38
34
|
},
|
|
39
35
|
"devDependencies": {
|
|
40
36
|
"@types/node": "^22.10.0",
|
|
41
37
|
"tsup": "^8.5.0",
|
|
42
38
|
"typescript": "^5.7.3",
|
|
43
39
|
"vitest": "^4.1.5",
|
|
44
|
-
"@fabricorg/platform": "^0.
|
|
40
|
+
"@fabricorg/platform-host": "^4.0.0",
|
|
41
|
+
"@fabricorg/platform": "^1.0.0"
|
|
45
42
|
},
|
|
46
43
|
"engines": {
|
|
47
44
|
"node": ">=20"
|