@manta-eu/codegen 0.5.0 → 0.5.1
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/README.md +5 -0
- package/dist/cli.js +2 -8
- package/dist/cli.js.map +1 -1
- package/dist/fetch-shapes.d.ts +1 -0
- package/dist/fetch-shapes.d.ts.map +1 -1
- package/dist/fetch-shapes.js +6 -3
- package/dist/fetch-shapes.js.map +1 -1
- package/dist/generate.d.ts +2 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +2 -2
- package/dist/generate.js.map +1 -1
- package/dist/shapes.d.ts +2 -0
- package/dist/shapes.d.ts.map +1 -1
- package/dist/shapes.js +15 -0
- package/dist/shapes.js.map +1 -1
- package/dist/turtle.d.ts +2 -1
- package/dist/turtle.d.ts.map +1 -1
- package/dist/turtle.js +45 -5
- package/dist/turtle.js.map +1 -1
- package/package.json +2 -2
- package/src/cli.ts +2 -15
- package/src/fetch-shapes.ts +10 -2
- package/src/generate.ts +6 -3
- package/src/shapes.ts +18 -0
- package/src/turtle.ts +65 -5
package/README.md
CHANGED
|
@@ -27,6 +27,11 @@ The run writes one `.ts` file per namespace (`manta.ts`, `meta.ts`, `google.ts`
|
|
|
27
27
|
`namespaces.ts` for the vocabulary constants, and an `index.ts` that re-exports every file. It writes
|
|
28
28
|
nothing else: the directory holds generated code, and the CLI keeps no copy of either graph it read.
|
|
29
29
|
|
|
30
|
+
An app that pushed its own vocabulary and shapes with `manta ontology push` and `manta shapes push` (from
|
|
31
|
+
`@manta-eu/cli`) gets schemas for its classes too, in a file named after the prefix its vocabulary declared
|
|
32
|
+
(`todo.ts` for `@prefix todo:`). The run stops if two apps, or an app and the realm, use one prefix for two
|
|
33
|
+
namespaces.
|
|
34
|
+
|
|
30
35
|
A run removes the `.ts` files of the run before it, so a class the shapes no longer describe loses
|
|
31
36
|
its file. It leaves every other file in the directory alone.
|
|
32
37
|
|
package/dist/cli.js
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { clientIdHelp, cliTokenSource, defaultDeployment, describeError, registerAuthCommands, } from "@manta-eu/auth";
|
|
3
3
|
import { Command, Option } from "commander";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { fetchRealmShapes, sparqlEndpoint } from "./fetch-shapes.js";
|
|
6
6
|
import { generatePackage } from "./generate.js";
|
|
7
|
-
// The secret stays out of the flags: an argument list is readable to every process on the machine.
|
|
8
7
|
function tokenSourceFor(options) {
|
|
9
|
-
|
|
10
|
-
if (secret) {
|
|
11
|
-
const client = publicClientFrom({ ...options, clientId: options.clientId ?? ciClientId });
|
|
12
|
-
return cachedToken(() => mintWithClientCredentials({ ...client, clientSecret: secret, scope: options.scope }));
|
|
13
|
-
}
|
|
14
|
-
return userTokenSource(publicClientFrom(options), { label: "manta-codegen", useDeviceCode: options.useDeviceCode });
|
|
8
|
+
return cliTokenSource(options, { label: "manta-codegen" });
|
|
15
9
|
}
|
|
16
10
|
function reportTargetClasses(targetClasses) {
|
|
17
11
|
const total = Object.values(targetClasses).reduce((sum, count) => sum + count, 0);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch-shapes.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-shapes.d.ts","sourceRoot":"","sources":["../src/fetch-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAe,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-shapes.d.ts","sourceRoot":"","sources":["../src/fetch-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAe,MAAM,gBAAgB,CAAC;AAW/E,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,SAAiB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAwBtB"}
|
package/dist/fetch-shapes.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { withRenewal } from "@manta-eu/auth";
|
|
2
|
-
import { countTargetClasses, fetchGraphList, fetchGraphTurtle, findOntologyGraph, shaclGraphIri, vocabBaseFromOntologyGraph, } from "./shapes.js";
|
|
2
|
+
import { countTargetClasses, fetchAppGraphsTurtle, fetchGraphList, fetchGraphTurtle, findOntologyGraph, shaclGraphIri, vocabBaseFromOntologyGraph, } from "./shapes.js";
|
|
3
3
|
export function sparqlEndpoint(apiUrl, datastoreId) {
|
|
4
4
|
return `${apiUrl.replace(/\/$/, "")}/d/${encodeURIComponent(datastoreId)}/sparql`;
|
|
5
5
|
}
|
|
@@ -8,12 +8,15 @@ export async function fetchRealmShapes(endpoint, token, fetchImpl = fetch) {
|
|
|
8
8
|
const ontologyGraphIri = findOntologyGraph(graphs);
|
|
9
9
|
const shacl = await withRenewal(token, (accessToken) => fetchGraphTurtle({ endpoint, graphIri: shaclGraphIri, token: accessToken }, fetchImpl));
|
|
10
10
|
const ontology = await withRenewal(token, (accessToken) => fetchGraphTurtle({ endpoint, graphIri: ontologyGraphIri, token: accessToken }, fetchImpl));
|
|
11
|
+
const vocabBase = vocabBaseFromOntologyGraph(ontologyGraphIri);
|
|
12
|
+
const apps = await withRenewal(token, (accessToken) => fetchAppGraphsTurtle({ endpoint, token: accessToken }, fetchImpl));
|
|
11
13
|
return {
|
|
12
|
-
vocabBase
|
|
14
|
+
vocabBase,
|
|
13
15
|
ontologyGraphIri,
|
|
14
16
|
shacl,
|
|
15
17
|
ontology,
|
|
16
|
-
|
|
18
|
+
apps,
|
|
19
|
+
targetClasses: countTargetClasses(`${shacl}\n${ontology}\n${apps}`),
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
22
|
//# sourceMappingURL=fetch-shapes.js.map
|
package/dist/fetch-shapes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-shapes.js","sourceRoot":"","sources":["../src/fetch-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,GAC3B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-shapes.js","sourceRoot":"","sources":["../src/fetch-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAWrB,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAChE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,KAAkB,EAClB,YAAuB,KAAK;IAE5B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACtH,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE,CACrD,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,CACvF,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE,CACxD,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,CAC1F,CAAC;IAEF,MAAM,SAAS,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE,CACpD,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,CAClE,CAAC;IAEF,OAAO;QACL,SAAS;QACT,gBAAgB;QAChB,KAAK;QACL,QAAQ;QACR,IAAI;QACJ,aAAa,EAAE,kBAAkB,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK,IAAI,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC"}
|
package/dist/generate.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type ShapeSources = {
|
|
|
9
9
|
shacl: string;
|
|
10
10
|
ontology: string;
|
|
11
11
|
vocabBase: string;
|
|
12
|
+
apps?: string;
|
|
12
13
|
};
|
|
13
|
-
export declare function generatePackage({ shacl, ontology, vocabBase }: ShapeSources, outDir: string): Promise<void>;
|
|
14
|
+
export declare function generatePackage({ shacl, ontology, vocabBase, apps }: ShapeSources, outDir: string): Promise<void>;
|
|
14
15
|
//# sourceMappingURL=generate.d.ts.map
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAqB,GAAG,MAAM,CAOjE;AAOD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAGD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpF;AAOD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E;AAMD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAGD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAchE;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAqB,GAAG,MAAM,CAOjE;AAOD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAGD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpF;AAOD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E;AAMD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAGD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAchE;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,wBAAsB,eAAe,CACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAClD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
package/dist/generate.js
CHANGED
|
@@ -63,11 +63,11 @@ export function runLdkit(shaclPath, outDir) {
|
|
|
63
63
|
}
|
|
64
64
|
failOnUnknownNamespace(outDir);
|
|
65
65
|
}
|
|
66
|
-
export async function generatePackage({ shacl, ontology, vocabBase }, outDir) {
|
|
66
|
+
export async function generatePackage({ shacl, ontology, vocabBase, apps }, outDir) {
|
|
67
67
|
const stageDir = mkdtempSync(join(tmpdir(), "manta-codegen-"));
|
|
68
68
|
try {
|
|
69
69
|
const merged = join(stageDir, "shapes.ttl");
|
|
70
|
-
writeFileSync(merged, await mergeShapes(shacl, ontology, vocabBase));
|
|
70
|
+
writeFileSync(merged, await mergeShapes(shacl, ontology, vocabBase, apps));
|
|
71
71
|
runLdkit(merged, outDir);
|
|
72
72
|
await normalizeGeneratedFiles(outDir);
|
|
73
73
|
}
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/shapes.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type FetchLike } from "@manta-eu/auth";
|
|
2
2
|
export declare const shaclGraphIri = "https://rdfox.com/default-base-iri/shacl";
|
|
3
3
|
export declare function constructGraphQuery(graphIri: string): string;
|
|
4
|
+
export declare function appGraphsQuery(): string;
|
|
4
5
|
export declare function graphListQuery(): string;
|
|
5
6
|
export declare function readGraphList(results: unknown): string[];
|
|
6
7
|
export declare function findOntologyGraph(graphIris: readonly string[]): string;
|
|
@@ -13,6 +14,7 @@ export type GraphRequest = DatastoreAccess & {
|
|
|
13
14
|
graphIri: string;
|
|
14
15
|
};
|
|
15
16
|
export declare function fetchGraphTurtle(request: GraphRequest, fetchImpl?: FetchLike): Promise<string>;
|
|
17
|
+
export declare function fetchAppGraphsTurtle(access: DatastoreAccess, fetchImpl?: FetchLike): Promise<string>;
|
|
16
18
|
export declare function fetchGraphList(access: DatastoreAccess, fetchImpl?: FetchLike): Promise<string[]>;
|
|
17
19
|
export declare const realmGroup = "(realm)";
|
|
18
20
|
export declare function countTargetClasses(turtle: string): Record<string, number>;
|
package/dist/shapes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../src/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAG7E,eAAO,MAAM,aAAa,6CAA6C,CAAC;AAMxE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAIxD;AAID,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAiBtE;AAED,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAkClE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,GAAE,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3G;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,GAAE,SAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7G;AAMD,eAAO,MAAM,UAAU,YAAY,CAAC;AAGpC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAazE"}
|
|
1
|
+
{"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../src/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAG7E,eAAO,MAAM,aAAa,6CAA6C,CAAC;AAMxE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAGD,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAIxD;AAID,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAiBtE;AAED,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAkClE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,GAAE,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3G;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,GAAE,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQjH;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,GAAE,SAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7G;AAMD,eAAO,MAAM,UAAU,YAAY,CAAC;AAGpC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAazE"}
|
package/dist/shapes.js
CHANGED
|
@@ -9,6 +9,13 @@ export function constructGraphQuery(graphIri) {
|
|
|
9
9
|
}
|
|
10
10
|
return `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${graphIri}> { ?s ?p ?o } }`;
|
|
11
11
|
}
|
|
12
|
+
// Each app's vocabulary graph describes itself as an owl:Ontology with an identifier, so it is found from triples.
|
|
13
|
+
export function appGraphsQuery() {
|
|
14
|
+
return `CONSTRUCT { ?s ?p ?o } WHERE {
|
|
15
|
+
GRAPH ?g { ?appGraph a <http://www.w3.org/2002/07/owl#Ontology> ; <http://purl.org/dc/terms/identifier> ?name . ?s ?p ?o }
|
|
16
|
+
FILTER(?appGraph = ?g)
|
|
17
|
+
}`;
|
|
18
|
+
}
|
|
12
19
|
export function graphListQuery() {
|
|
13
20
|
return "SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }";
|
|
14
21
|
}
|
|
@@ -55,6 +62,14 @@ export async function fetchGraphTurtle(request, fetchImpl = fetch) {
|
|
|
55
62
|
};
|
|
56
63
|
return (await runSparql(request, call, fetchImpl)).text();
|
|
57
64
|
}
|
|
65
|
+
export async function fetchAppGraphsTurtle(access, fetchImpl = fetch) {
|
|
66
|
+
const call = {
|
|
67
|
+
query: appGraphsQuery(),
|
|
68
|
+
accept: "text/turtle",
|
|
69
|
+
action: "the read of the apps' vocabularies",
|
|
70
|
+
};
|
|
71
|
+
return (await runSparql(access, call, fetchImpl)).text();
|
|
72
|
+
}
|
|
58
73
|
export async function fetchGraphList(access, fetchImpl = fetch) {
|
|
59
74
|
const call = { query: graphListQuery(), accept: "application/sparql-results+json", action: "the graph list" };
|
|
60
75
|
return readGraphList(await (await runSparql(access, call, fetchImpl)).json());
|
package/dist/shapes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapes.js","sourceRoot":"","sources":["../src/shapes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shapes.js","sourceRoot":"","sources":["../src/shapes.ts"],"names":[],"mappings":"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"}
|
package/dist/turtle.d.ts
CHANGED
|
@@ -9,5 +9,6 @@ export declare function writeTurtle({ quads, prefixes }: ParsedTurtle): Promise<
|
|
|
9
9
|
export declare function namePrefixes(prefixes: Record<string, string>, vocabBase: string): Record<string, string>;
|
|
10
10
|
export declare function quadKey(quad: Quad): string;
|
|
11
11
|
export declare function sortQuads(quads: readonly Quad[]): Quad[];
|
|
12
|
-
export declare function
|
|
12
|
+
export declare function declaredPrefixes(quads: readonly Quad[]): Record<string, string>;
|
|
13
|
+
export declare function mergeShapes(shacl: string, ontology: string, vocabBase: string, apps?: string): Promise<string>;
|
|
13
14
|
//# sourceMappingURL=turtle.d.ts.map
|
package/dist/turtle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turtle.d.ts","sourceRoot":"","sources":["../src/turtle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAQ,MAAM,IAAI,CAAC;AAIrC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAE/E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAOxD;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E;AAGD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxG;AAUD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE1C;AAID,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,EAAE,CAKxD;
|
|
1
|
+
{"version":3,"file":"turtle.d.ts","sourceRoot":"","sources":["../src/turtle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAQ,MAAM,IAAI,CAAC;AAIrC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAE/E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAOxD;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E;AAGD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxG;AAUD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE1C;AAID,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,EAAE,CAKxD;AAyBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqB/E;AAcD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAWhH"}
|
package/dist/turtle.js
CHANGED
|
@@ -43,13 +43,53 @@ export function sortQuads(quads) {
|
|
|
43
43
|
keyed.sort((left, right) => (left.key < right.key ? -1 : left.key > right.key ? 1 : 0));
|
|
44
44
|
return keyed.map((each) => each.quad);
|
|
45
45
|
}
|
|
46
|
+
const shaclNamespace = "http://www.w3.org/ns/shacl#";
|
|
47
|
+
const rdfType = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
48
|
+
const owlOntology = "http://www.w3.org/2002/07/owl#Ontology";
|
|
49
|
+
const dctermsIdentifier = "http://purl.org/dc/terms/identifier";
|
|
50
|
+
// The app ontologies' headers: an app's vocabulary graph describes itself as an owl:Ontology with an identifier.
|
|
51
|
+
function appOntologies(quads) {
|
|
52
|
+
const typed = new Set(quads
|
|
53
|
+
.filter((quad) => quad.predicate.value === rdfType && quad.object.value === owlOntology)
|
|
54
|
+
.map((quad) => quad.subject.value));
|
|
55
|
+
return new Set(quads
|
|
56
|
+
.filter((quad) => quad.predicate.value === dctermsIdentifier && typed.has(quad.subject.value))
|
|
57
|
+
.map((quad) => quad.subject.value));
|
|
58
|
+
}
|
|
59
|
+
// An app declares its prefixes with sh:declare from its ontology, since the store keeps no prefix of an app's.
|
|
60
|
+
export function declaredPrefixes(quads) {
|
|
61
|
+
const valueOf = (subject, predicate) => quads.find((quad) => quad.subject.value === subject && quad.predicate.value === `${shaclNamespace}${predicate}`)
|
|
62
|
+
?.object.value;
|
|
63
|
+
const ontologies = appOntologies(quads);
|
|
64
|
+
const declarations = new Set(quads
|
|
65
|
+
.filter((quad) => quad.predicate.value === `${shaclNamespace}declare` && ontologies.has(quad.subject.value))
|
|
66
|
+
.map((quad) => quad.object.value));
|
|
67
|
+
const prefixes = {};
|
|
68
|
+
for (const declaration of declarations) {
|
|
69
|
+
const prefix = valueOf(declaration, "prefix");
|
|
70
|
+
const namespace = valueOf(declaration, "namespace");
|
|
71
|
+
if (prefix === undefined || namespace === undefined)
|
|
72
|
+
continue;
|
|
73
|
+
addPrefix(prefixes, prefix, namespace);
|
|
74
|
+
}
|
|
75
|
+
return prefixes;
|
|
76
|
+
}
|
|
77
|
+
function addPrefix(prefixes, prefix, namespace) {
|
|
78
|
+
const taken = prefixes[prefix];
|
|
79
|
+
if (taken !== undefined && taken !== namespace) {
|
|
80
|
+
throw new Error(`the prefix ${prefix}: names both <${taken}> and <${namespace}>. Give one of the apps another prefix.`);
|
|
81
|
+
}
|
|
82
|
+
prefixes[prefix] = namespace;
|
|
83
|
+
}
|
|
46
84
|
// LDkit reads one document.
|
|
47
|
-
export function mergeShapes(shacl, ontology, vocabBase) {
|
|
85
|
+
export async function mergeShapes(shacl, ontology, vocabBase, apps = "") {
|
|
48
86
|
const shapes = parseTurtle(shacl);
|
|
49
87
|
const subclasses = parseTurtle(ontology);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
const appGraphs = parseTurtle(apps);
|
|
89
|
+
const prefixes = namePrefixes({ ...shapes.prefixes, ...subclasses.prefixes }, vocabBase);
|
|
90
|
+
for (const [prefix, namespace] of Object.entries(declaredPrefixes(appGraphs.quads))) {
|
|
91
|
+
addPrefix(prefixes, prefix, namespace);
|
|
92
|
+
}
|
|
93
|
+
return writeTurtle({ quads: sortQuads([...shapes.quads, ...subclasses.quads, ...appGraphs.quads]), prefixes });
|
|
54
94
|
}
|
|
55
95
|
//# sourceMappingURL=turtle.js.map
|
package/dist/turtle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turtle.js","sourceRoot":"","sources":["../src/turtle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"turtle.js","sourceRoot":"","sources":["../src/turtle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manta-eu/codegen",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "CLI that generates LDkit schemas from a realm's SHACL shapes, read from its datastore",
|
|
5
5
|
"homepage": "https://developers.manta.eu",
|
|
6
6
|
"keywords": [
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"ldkit": "^2.9.0",
|
|
30
30
|
"n3": "^2.7.12",
|
|
31
31
|
"prettier": "^3.8.1",
|
|
32
|
-
"@manta-eu/auth": "0.5.
|
|
32
|
+
"@manta-eu/auth": "0.5.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^24.13.3",
|
package/src/cli.ts
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
cachedToken,
|
|
4
|
-
ciClientId,
|
|
5
3
|
clientIdHelp,
|
|
4
|
+
cliTokenSource,
|
|
6
5
|
defaultDeployment,
|
|
7
6
|
describeError,
|
|
8
|
-
mintWithClientCredentials,
|
|
9
|
-
publicClientFrom,
|
|
10
7
|
registerAuthCommands,
|
|
11
8
|
type TokenSource,
|
|
12
|
-
userTokenSource,
|
|
13
9
|
} from "@manta-eu/auth";
|
|
14
10
|
import { Command, Option } from "commander";
|
|
15
11
|
import { resolve } from "node:path";
|
|
@@ -27,17 +23,8 @@ type FetchOptions = {
|
|
|
27
23
|
out: string;
|
|
28
24
|
};
|
|
29
25
|
|
|
30
|
-
// The secret stays out of the flags: an argument list is readable to every process on the machine.
|
|
31
26
|
function tokenSourceFor(options: FetchOptions): TokenSource {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (secret) {
|
|
35
|
-
const client = publicClientFrom({ ...options, clientId: options.clientId ?? ciClientId });
|
|
36
|
-
|
|
37
|
-
return cachedToken(() => mintWithClientCredentials({ ...client, clientSecret: secret, scope: options.scope }));
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return userTokenSource(publicClientFrom(options), { label: "manta-codegen", useDeviceCode: options.useDeviceCode });
|
|
27
|
+
return cliTokenSource(options, { label: "manta-codegen" });
|
|
41
28
|
}
|
|
42
29
|
|
|
43
30
|
function reportTargetClasses(targetClasses: Record<string, number>): void {
|
package/src/fetch-shapes.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type FetchLike, type TokenSource, withRenewal } from "@manta-eu/auth";
|
|
2
2
|
import {
|
|
3
3
|
countTargetClasses,
|
|
4
|
+
fetchAppGraphsTurtle,
|
|
4
5
|
fetchGraphList,
|
|
5
6
|
fetchGraphTurtle,
|
|
6
7
|
findOntologyGraph,
|
|
@@ -13,6 +14,7 @@ export type RealmShapes = {
|
|
|
13
14
|
ontologyGraphIri: string;
|
|
14
15
|
shacl: string;
|
|
15
16
|
ontology: string;
|
|
17
|
+
apps: string;
|
|
16
18
|
targetClasses: Record<string, number>;
|
|
17
19
|
};
|
|
18
20
|
|
|
@@ -35,11 +37,17 @@ export async function fetchRealmShapes(
|
|
|
35
37
|
fetchGraphTurtle({ endpoint, graphIri: ontologyGraphIri, token: accessToken }, fetchImpl),
|
|
36
38
|
);
|
|
37
39
|
|
|
40
|
+
const vocabBase = vocabBaseFromOntologyGraph(ontologyGraphIri);
|
|
41
|
+
const apps = await withRenewal(token, (accessToken) =>
|
|
42
|
+
fetchAppGraphsTurtle({ endpoint, token: accessToken }, fetchImpl),
|
|
43
|
+
);
|
|
44
|
+
|
|
38
45
|
return {
|
|
39
|
-
vocabBase
|
|
46
|
+
vocabBase,
|
|
40
47
|
ontologyGraphIri,
|
|
41
48
|
shacl,
|
|
42
49
|
ontology,
|
|
43
|
-
|
|
50
|
+
apps,
|
|
51
|
+
targetClasses: countTargetClasses(`${shacl}\n${ontology}\n${apps}`),
|
|
44
52
|
};
|
|
45
53
|
}
|
package/src/generate.ts
CHANGED
|
@@ -83,14 +83,17 @@ export function runLdkit(shaclPath: string, outDir: string): void {
|
|
|
83
83
|
failOnUnknownNamespace(outDir);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
export type ShapeSources = { shacl: string; ontology: string; vocabBase: string };
|
|
86
|
+
export type ShapeSources = { shacl: string; ontology: string; vocabBase: string; apps?: string };
|
|
87
87
|
|
|
88
|
-
export async function generatePackage(
|
|
88
|
+
export async function generatePackage(
|
|
89
|
+
{ shacl, ontology, vocabBase, apps }: ShapeSources,
|
|
90
|
+
outDir: string,
|
|
91
|
+
): Promise<void> {
|
|
89
92
|
const stageDir = mkdtempSync(join(tmpdir(), "manta-codegen-"));
|
|
90
93
|
|
|
91
94
|
try {
|
|
92
95
|
const merged = join(stageDir, "shapes.ttl");
|
|
93
|
-
writeFileSync(merged, await mergeShapes(shacl, ontology, vocabBase));
|
|
96
|
+
writeFileSync(merged, await mergeShapes(shacl, ontology, vocabBase, apps));
|
|
94
97
|
runLdkit(merged, outDir);
|
|
95
98
|
await normalizeGeneratedFiles(outDir);
|
|
96
99
|
} finally {
|
package/src/shapes.ts
CHANGED
|
@@ -15,6 +15,14 @@ export function constructGraphQuery(graphIri: string): string {
|
|
|
15
15
|
return `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${graphIri}> { ?s ?p ?o } }`;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
// Each app's vocabulary graph describes itself as an owl:Ontology with an identifier, so it is found from triples.
|
|
19
|
+
export function appGraphsQuery(): string {
|
|
20
|
+
return `CONSTRUCT { ?s ?p ?o } WHERE {
|
|
21
|
+
GRAPH ?g { ?appGraph a <http://www.w3.org/2002/07/owl#Ontology> ; <http://purl.org/dc/terms/identifier> ?name . ?s ?p ?o }
|
|
22
|
+
FILTER(?appGraph = ?g)
|
|
23
|
+
}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
18
26
|
export function graphListQuery(): string {
|
|
19
27
|
return "SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }";
|
|
20
28
|
}
|
|
@@ -98,6 +106,16 @@ export async function fetchGraphTurtle(request: GraphRequest, fetchImpl: FetchLi
|
|
|
98
106
|
return (await runSparql(request, call, fetchImpl)).text();
|
|
99
107
|
}
|
|
100
108
|
|
|
109
|
+
export async function fetchAppGraphsTurtle(access: DatastoreAccess, fetchImpl: FetchLike = fetch): Promise<string> {
|
|
110
|
+
const call = {
|
|
111
|
+
query: appGraphsQuery(),
|
|
112
|
+
accept: "text/turtle",
|
|
113
|
+
action: "the read of the apps' vocabularies",
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
return (await runSparql(access, call, fetchImpl)).text();
|
|
117
|
+
}
|
|
118
|
+
|
|
101
119
|
export async function fetchGraphList(access: DatastoreAccess, fetchImpl: FetchLike = fetch): Promise<string[]> {
|
|
102
120
|
const call = { query: graphListQuery(), accept: "application/sparql-results+json", action: "the graph list" };
|
|
103
121
|
|
package/src/turtle.ts
CHANGED
|
@@ -57,13 +57,73 @@ export function sortQuads(quads: readonly Quad[]): Quad[] {
|
|
|
57
57
|
return keyed.map((each) => each.quad);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
const shaclNamespace = "http://www.w3.org/ns/shacl#";
|
|
61
|
+
|
|
62
|
+
const rdfType = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
63
|
+
|
|
64
|
+
const owlOntology = "http://www.w3.org/2002/07/owl#Ontology";
|
|
65
|
+
|
|
66
|
+
const dctermsIdentifier = "http://purl.org/dc/terms/identifier";
|
|
67
|
+
|
|
68
|
+
// The app ontologies' headers: an app's vocabulary graph describes itself as an owl:Ontology with an identifier.
|
|
69
|
+
function appOntologies(quads: readonly Quad[]): Set<string> {
|
|
70
|
+
const typed = new Set(
|
|
71
|
+
quads
|
|
72
|
+
.filter((quad) => quad.predicate.value === rdfType && quad.object.value === owlOntology)
|
|
73
|
+
.map((quad) => quad.subject.value),
|
|
74
|
+
);
|
|
75
|
+
return new Set(
|
|
76
|
+
quads
|
|
77
|
+
.filter((quad) => quad.predicate.value === dctermsIdentifier && typed.has(quad.subject.value))
|
|
78
|
+
.map((quad) => quad.subject.value),
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// An app declares its prefixes with sh:declare from its ontology, since the store keeps no prefix of an app's.
|
|
83
|
+
export function declaredPrefixes(quads: readonly Quad[]): Record<string, string> {
|
|
84
|
+
const valueOf = (subject: string, predicate: string) =>
|
|
85
|
+
quads.find((quad) => quad.subject.value === subject && quad.predicate.value === `${shaclNamespace}${predicate}`)
|
|
86
|
+
?.object.value;
|
|
87
|
+
const ontologies = appOntologies(quads);
|
|
88
|
+
const declarations = new Set(
|
|
89
|
+
quads
|
|
90
|
+
.filter((quad) => quad.predicate.value === `${shaclNamespace}declare` && ontologies.has(quad.subject.value))
|
|
91
|
+
.map((quad) => quad.object.value),
|
|
92
|
+
);
|
|
93
|
+
const prefixes: Record<string, string> = {};
|
|
94
|
+
|
|
95
|
+
for (const declaration of declarations) {
|
|
96
|
+
const prefix = valueOf(declaration, "prefix");
|
|
97
|
+
const namespace = valueOf(declaration, "namespace");
|
|
98
|
+
if (prefix === undefined || namespace === undefined) continue;
|
|
99
|
+
|
|
100
|
+
addPrefix(prefixes, prefix, namespace);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return prefixes;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function addPrefix(prefixes: Record<string, string>, prefix: string, namespace: string): void {
|
|
107
|
+
const taken = prefixes[prefix];
|
|
108
|
+
if (taken !== undefined && taken !== namespace) {
|
|
109
|
+
throw new Error(
|
|
110
|
+
`the prefix ${prefix}: names both <${taken}> and <${namespace}>. Give one of the apps another prefix.`,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
prefixes[prefix] = namespace;
|
|
115
|
+
}
|
|
116
|
+
|
|
60
117
|
// LDkit reads one document.
|
|
61
|
-
export function mergeShapes(shacl: string, ontology: string, vocabBase: string): Promise<string> {
|
|
118
|
+
export async function mergeShapes(shacl: string, ontology: string, vocabBase: string, apps = ""): Promise<string> {
|
|
62
119
|
const shapes = parseTurtle(shacl);
|
|
63
120
|
const subclasses = parseTurtle(ontology);
|
|
121
|
+
const appGraphs = parseTurtle(apps);
|
|
122
|
+
const prefixes = namePrefixes({ ...shapes.prefixes, ...subclasses.prefixes }, vocabBase);
|
|
64
123
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
124
|
+
for (const [prefix, namespace] of Object.entries(declaredPrefixes(appGraphs.quads))) {
|
|
125
|
+
addPrefix(prefixes, prefix, namespace);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return writeTurtle({ quads: sortQuads([...shapes.quads, ...subclasses.quads, ...appGraphs.quads]), prefixes });
|
|
69
129
|
}
|