@wictorwilen/cocogen 1.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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/RELEASING.md +36 -0
  4. package/THIRD_PARTY_NOTICES.md +11 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +288 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/emit/emit.d.ts +3 -0
  10. package/dist/emit/emit.d.ts.map +1 -0
  11. package/dist/emit/emit.js +13 -0
  12. package/dist/emit/emit.js.map +1 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +6 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/init/init.d.ts +34 -0
  18. package/dist/init/init.d.ts.map +1 -0
  19. package/dist/init/init.js +886 -0
  20. package/dist/init/init.js.map +1 -0
  21. package/dist/init/template.d.ts +2 -0
  22. package/dist/init/template.d.ts.map +1 -0
  23. package/dist/init/template.js +19 -0
  24. package/dist/init/template.js.map +1 -0
  25. package/dist/init/templates/dotnet/.env.example.ejs +12 -0
  26. package/dist/init/templates/dotnet/.gitignore.ejs +6 -0
  27. package/dist/init/templates/dotnet/Datasource/CsvItemSource.cs.ejs +42 -0
  28. package/dist/init/templates/dotnet/Datasource/IItemSource.cs.ejs +12 -0
  29. package/dist/init/templates/dotnet/Generated/Constants.cs.ejs +17 -0
  30. package/dist/init/templates/dotnet/Generated/CsvParser.cs.ejs +119 -0
  31. package/dist/init/templates/dotnet/Generated/FromCsvRow.cs.ejs +14 -0
  32. package/dist/init/templates/dotnet/Generated/ItemPayload.cs.ejs +41 -0
  33. package/dist/init/templates/dotnet/Generated/Model.cs.ejs +28 -0
  34. package/dist/init/templates/dotnet/Generated/PersonEntityDefaults.cs.ejs +48 -0
  35. package/dist/init/templates/dotnet/Generated/PropertyTransforms.cs.ejs +22 -0
  36. package/dist/init/templates/dotnet/Generated/SchemaPayload.cs.ejs +18 -0
  37. package/dist/init/templates/dotnet/PersonEntityOverrides.cs.ejs +49 -0
  38. package/dist/init/templates/dotnet/Program.commandline.cs.ejs +426 -0
  39. package/dist/init/templates/dotnet/Program.cs.ejs +487 -0
  40. package/dist/init/templates/dotnet/README.md.ejs +56 -0
  41. package/dist/init/templates/dotnet/appsettings.json.ejs +21 -0
  42. package/dist/init/templates/dotnet/package.json.ejs +7 -0
  43. package/dist/init/templates/dotnet/project.csproj.ejs +29 -0
  44. package/dist/init/templates/dotnet/tspconfig.yaml.ejs +2 -0
  45. package/dist/init/templates/ts/.env.example.ejs +20 -0
  46. package/dist/init/templates/ts/README.md.ejs +54 -0
  47. package/dist/init/templates/ts/package.json.ejs +25 -0
  48. package/dist/init/templates/ts/src/cli.ts.ejs +299 -0
  49. package/dist/init/templates/ts/src/datasource/csvItemSource.ts.ejs +25 -0
  50. package/dist/init/templates/ts/src/datasource/itemSource.ts.ejs +8 -0
  51. package/dist/init/templates/ts/src/generated/constants.ts.ejs +10 -0
  52. package/dist/init/templates/ts/src/generated/csv.ts.ejs +44 -0
  53. package/dist/init/templates/ts/src/generated/fromCsvRow.ts.ejs +43 -0
  54. package/dist/init/templates/ts/src/generated/index.ts.ejs +5 -0
  55. package/dist/init/templates/ts/src/generated/itemPayload.ts.ejs +21 -0
  56. package/dist/init/templates/ts/src/generated/model.ts.ejs +16 -0
  57. package/dist/init/templates/ts/src/generated/personEntityDefaults.ts.ejs +33 -0
  58. package/dist/init/templates/ts/src/generated/propertyTransforms.ts.ejs +23 -0
  59. package/dist/init/templates/ts/src/generated/schemaPayload.ts.ejs +1 -0
  60. package/dist/init/templates/ts/src/index.ts.ejs +1 -0
  61. package/dist/init/templates/ts/src/personEntityOverrides.ts.ejs +36 -0
  62. package/dist/init/templates/ts/tsconfig.json.ejs +13 -0
  63. package/dist/init/templates/ts/tspconfig.yaml.ejs +2 -0
  64. package/dist/ir.d.ts +49 -0
  65. package/dist/ir.d.ts.map +1 -0
  66. package/dist/ir.js +2 -0
  67. package/dist/ir.js.map +1 -0
  68. package/dist/tsp/init-tsp.d.ts +14 -0
  69. package/dist/tsp/init-tsp.d.ts.map +1 -0
  70. package/dist/tsp/init-tsp.js +126 -0
  71. package/dist/tsp/init-tsp.js.map +1 -0
  72. package/dist/tsp/loader.d.ts +8 -0
  73. package/dist/tsp/loader.d.ts.map +1 -0
  74. package/dist/tsp/loader.js +264 -0
  75. package/dist/tsp/loader.js.map +1 -0
  76. package/dist/typespec/decorators.d.ts +14 -0
  77. package/dist/typespec/decorators.d.ts.map +1 -0
  78. package/dist/typespec/decorators.js +139 -0
  79. package/dist/typespec/decorators.js.map +1 -0
  80. package/dist/typespec/state.d.ts +37 -0
  81. package/dist/typespec/state.d.ts.map +1 -0
  82. package/dist/typespec/state.js +13 -0
  83. package/dist/typespec/state.js.map +1 -0
  84. package/dist/validate/validator.d.ts +9 -0
  85. package/dist/validate/validator.d.ts.map +1 -0
  86. package/dist/validate/validator.js +204 -0
  87. package/dist/validate/validator.js.map +1 -0
  88. package/package.json +66 -0
  89. package/typespec/main.tsp +117 -0
  90. package/typespec/tsp-index.js +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,SAAS,GACT,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,WAAW,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE;QACV,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,aAAa,CAAC,EAAE;YACd,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;SAC7B,CAAC;QACF,eAAe,EAAE,eAAe,CAAC;KAClC,CAAC;IACF,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,YAAY,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,WAAW,CAAC;QACpB,YAAY,CAAC,EAAE;YACb,MAAM,EACF,wBAAwB,GACxB,YAAY,GACZ,cAAc,GACd,aAAa,GACb,WAAW,GACX,WAAW,GACX,aAAa,GACb,qBAAqB,GACrB,sBAAsB,GACtB,kBAAkB,GAClB,YAAY,GACZ,eAAe,GACf,mBAAmB,GACnB,kBAAkB,CAAC;YACvB,MAAM,EAAE,KAAK,CAAC;gBACZ,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE;oBACN,UAAU,EAAE,MAAM,EAAE,CAAC;iBACtB,CAAC;aACH,CAAC,CAAC;SACJ,CAAC;QACF,MAAM,EAAE;YACN,UAAU,EAAE,MAAM,EAAE,CAAC;YACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC;KACH,CAAC,CAAC;CACJ,CAAC"}
package/dist/ir.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ir.js.map
package/dist/ir.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ export type StarterTspKind = "content" | "people";
2
+ export type StarterTspOptions = {
3
+ outPath?: string;
4
+ kind?: StarterTspKind;
5
+ modelName?: string;
6
+ idPropertyName?: string;
7
+ force?: boolean;
8
+ prompt?: boolean;
9
+ };
10
+ export declare function initStarterTsp(options: StarterTspOptions): Promise<{
11
+ outPath: string;
12
+ kind: StarterTspKind;
13
+ }>;
14
+ //# sourceMappingURL=init-tsp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-tsp.d.ts","sourceRoot":"","sources":["../../src/tsp/init-tsp.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAoFF,wBAAsB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CA0DnH"}
@@ -0,0 +1,126 @@
1
+ import { access, mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { input, select } from "@inquirer/prompts";
4
+ function defaultModelName(kind) {
5
+ return kind === "people" ? "PersonProfile" : "Item";
6
+ }
7
+ function defaultIdProperty(kind) {
8
+ return kind === "people" ? "userPrincipalName" : "id";
9
+ }
10
+ function ensureTspExtension(value) {
11
+ return value.endsWith(".tsp") ? value : `${value}.tsp`;
12
+ }
13
+ function starterTspContents(options) {
14
+ const { kind, modelName, idPropertyName } = options;
15
+ if (kind === "people") {
16
+ return `using coco;
17
+
18
+ // People connectors use Graph /beta. Use --use-preview-features with cocogen validate/init/update.
19
+ // Optional: set defaults for profile source registration.
20
+ // @coco.profileSource({ webUrl: "https://contoso.com/people", displayName: "Contoso HR", priority: "first" })
21
+
22
+ @coco.connection({ contentCategory: "people" })
23
+ @coco.item()
24
+ model ${modelName} {
25
+ @coco.id
26
+ @coco.label("personAccount")
27
+ ${idPropertyName}: string;
28
+
29
+ @coco.label("personName")
30
+ displayName: string;
31
+
32
+ // TODO: map CSV headers if they differ from property names.
33
+ // @coco.source("upn", "userPrincipalName")
34
+ // userPrincipalName: string;
35
+
36
+ // TODO: add more people fields and labels.
37
+ // @coco.label("personEmails")
38
+ // @coco.source("email", "address")
39
+ // emails: string;
40
+
41
+ // TODO: map profile entities with @coco.source("column", "entity.path").
42
+ // @coco.label("personCurrentPosition")
43
+ // @coco.source("job title", "detail.jobTitle")
44
+ // workPosition: string;
45
+ }
46
+ `;
47
+ }
48
+ return `using coco;
49
+
50
+ // Optional: set connection defaults in generated config.
51
+ // @coco.connection({ connectionId: "my-connection", connectionDescription: "My connector" })
52
+
53
+ @coco.item()
54
+ model ${modelName} {
55
+ @coco.id
56
+ ${idPropertyName}: string;
57
+
58
+ // TODO: mark a title for rich results.
59
+ // @coco.label("title")
60
+ // title: string;
61
+
62
+ // TODO: add searchable fields.
63
+ // @coco.search({ searchable: true, retrievable: true })
64
+ // summary: string;
65
+
66
+ // Optional: full-text content field (content connectors only).
67
+ // @coco.content({ type: "text" })
68
+ // body: string;
69
+
70
+ // TODO: map CSV headers if they differ from property names.
71
+ // @coco.source("csv column")
72
+ // field: string;
73
+ }
74
+ `;
75
+ }
76
+ export async function initStarterTsp(options) {
77
+ const wantsPrompt = Boolean(options.prompt);
78
+ if (wantsPrompt && !process.stdin.isTTY) {
79
+ throw new Error("Prompt requires an interactive TTY.");
80
+ }
81
+ let outPath = options.outPath ?? "schema.tsp";
82
+ let kind = options.kind ?? "content";
83
+ let modelName = options.modelName ?? defaultModelName(kind);
84
+ let idPropertyName = options.idPropertyName ?? defaultIdProperty(kind);
85
+ if (wantsPrompt) {
86
+ outPath = ensureTspExtension(await input({
87
+ message: "Where should the .tsp file be created?",
88
+ default: outPath
89
+ }));
90
+ kind = await select({
91
+ message: "Which connector type?",
92
+ default: kind,
93
+ choices: [
94
+ { value: "content", name: "content (Graph v1.0)" },
95
+ { value: "people", name: "people (Graph beta)" }
96
+ ]
97
+ });
98
+ modelName = await input({
99
+ message: "Model name",
100
+ default: defaultModelName(kind)
101
+ });
102
+ idPropertyName = await input({
103
+ message: "ID property name",
104
+ default: defaultIdProperty(kind)
105
+ });
106
+ }
107
+ outPath = ensureTspExtension(outPath);
108
+ const resolved = path.resolve(outPath);
109
+ const dir = path.dirname(resolved);
110
+ await mkdir(dir, { recursive: true });
111
+ try {
112
+ await access(resolved);
113
+ if (!options.force) {
114
+ throw new Error(`File already exists: ${resolved}. Use --force to overwrite.`);
115
+ }
116
+ }
117
+ catch (error) {
118
+ const code = error.code;
119
+ if (code && code !== "ENOENT")
120
+ throw error;
121
+ }
122
+ const contents = starterTspContents({ kind, modelName, idPropertyName });
123
+ await writeFile(resolved, contents, "utf8");
124
+ return { outPath: resolved, kind };
125
+ }
126
+ //# sourceMappingURL=init-tsp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-tsp.js","sourceRoot":"","sources":["../../src/tsp/init-tsp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Program } from "@typespec/compiler";
2
+ import type { ConnectorIr } from "../ir.js";
3
+ export declare class CocogenError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ export declare function compileTypeSpec(entryTspPath: string): Promise<Program>;
7
+ export declare function loadIrFromTypeSpec(entryTspPath: string): Promise<ConnectorIr>;
8
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/tsp/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAQL,KAAK,OAAO,EAGb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAA8C,MAAM,UAAU,CAAC;AAqBxF,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AA6QD,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAc5E;AAED,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAuEnF"}
@@ -0,0 +1,264 @@
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { NodeHost, compile, formatDiagnostic, getDoc, isArrayModelType, } from "@typespec/compiler";
4
+ import { COCOGEN_STATE_CONNECTION_SETTINGS, COCOGEN_STATE_PROFILE_SOURCE_SETTINGS, COCOGEN_STATE_CONTENT_PROPERTIES, COCOGEN_STATE_ID_PROPERTIES, COCOGEN_STATE_ITEM_MODELS, COCOGEN_STATE_PROPERTY_ALIASES, COCOGEN_STATE_PROPERTY_DESCRIPTIONS, COCOGEN_STATE_PROPERTY_LABELS, COCOGEN_STATE_PROPERTY_NAME_OVERRIDES, COCOGEN_STATE_PROPERTY_SEARCH, COCOGEN_STATE_PROPERTY_SOURCE, COCOGEN_STATE_PROPERTY_PERSON_FIELDS, } from "../typespec/state.js";
5
+ export class CocogenError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "CocogenError";
9
+ }
10
+ }
11
+ function requireSingleItemModel(program) {
12
+ const items = [...program.stateSet(COCOGEN_STATE_ITEM_MODELS)].filter((t) => t.kind === "Model");
13
+ if (items.length === 0) {
14
+ throw new CocogenError("No @coco.item() model found. Add @coco.item() to the model that represents an external item.");
15
+ }
16
+ if (items.length > 1) {
17
+ throw new CocogenError(`Multiple @coco.item() models found (${items
18
+ .map((m) => m.name)
19
+ .join(", ")}). Use exactly one for now.`);
20
+ }
21
+ return items[0];
22
+ }
23
+ function getConnectionSettings(program, itemModel) {
24
+ return (program.stateMap(COCOGEN_STATE_CONNECTION_SETTINGS).get(itemModel) ?? {});
25
+ }
26
+ function getProfileSourceSettings(program, itemModel) {
27
+ return program.stateMap(COCOGEN_STATE_PROFILE_SOURCE_SETTINGS).get(itemModel);
28
+ }
29
+ function computeGraphApiVersion(contentCategory, usesPrincipal) {
30
+ // Microsoft Graph exposes externalConnection.contentCategory on /beta.
31
+ // If the schema specifies a category, we must use beta for provisioning.
32
+ if (contentCategory)
33
+ return "beta";
34
+ // Graph propertyType 'principal' is only available on /beta.
35
+ if (usesPrincipal)
36
+ return "beta";
37
+ return "v1.0";
38
+ }
39
+ function getStringArray(program, key, prop) {
40
+ const raw = program.stateMap(key).get(prop);
41
+ return raw ? [...raw] : [];
42
+ }
43
+ function getSearchFlags(program, prop) {
44
+ const raw = (program.stateMap(COCOGEN_STATE_PROPERTY_SEARCH).get(prop) ?? {});
45
+ return { ...raw };
46
+ }
47
+ function normalizeSourceSettings(raw, fallbackName, explicit) {
48
+ const settings = (raw ?? {});
49
+ const csv = typeof settings === "string" ? settings : settings?.csv;
50
+ let csvHeaders = [];
51
+ if (typeof csv === "string") {
52
+ csvHeaders = csv.trim().length > 0 ? [csv] : [];
53
+ }
54
+ else if (Array.isArray(csv)) {
55
+ throw new CocogenError("Source field merging is not supported. Use a single CSV header per property or preprocess your data.");
56
+ }
57
+ if (csvHeaders.length === 0) {
58
+ csvHeaders = [fallbackName];
59
+ }
60
+ return {
61
+ csvHeaders,
62
+ explicit,
63
+ };
64
+ }
65
+ function getSourceSettings(program, prop, fallbackName) {
66
+ const map = program.stateMap(COCOGEN_STATE_PROPERTY_SOURCE);
67
+ const raw = map.get(prop);
68
+ const explicit = map.has(prop);
69
+ return normalizeSourceSettings(raw, fallbackName, explicit);
70
+ }
71
+ function getPersonEntityMapping(program, prop) {
72
+ const labelToEntity = new Map([
73
+ ["personAccount", "userAccountInformation"],
74
+ ["personName", "personName"],
75
+ ["personCurrentPosition", "workPosition"],
76
+ ["personAddresses", "itemAddress"],
77
+ ["personEmails", "itemEmail"],
78
+ ["personPhones", "itemPhone"],
79
+ ["personAwards", "personAward"],
80
+ ["personCertifications", "personCertification"],
81
+ ["personProjects", "projectParticipation"],
82
+ ["personSkills", "skillProficiency"],
83
+ ["personWebAccounts", "webAccount"],
84
+ ["personWebSite", "personWebsite"],
85
+ ["personAnniversaries", "personAnniversary"],
86
+ ["personNote", "personAnnotation"],
87
+ ]);
88
+ const labels = getStringArray(program, COCOGEN_STATE_PROPERTY_LABELS, prop);
89
+ const entity = labels.map((label) => labelToEntity.get(label)).find(Boolean);
90
+ const rawFields = program.stateMap(COCOGEN_STATE_PROPERTY_PERSON_FIELDS).get(prop) ?? [];
91
+ const fields = rawFields
92
+ .map((field) => {
93
+ const path = typeof field.path === "string" ? field.path : "";
94
+ if (!path)
95
+ return undefined;
96
+ const source = normalizeSourceSettings(field.source, path, true);
97
+ return { path, source };
98
+ })
99
+ .filter((value) => Boolean(value));
100
+ if (fields.length === 0)
101
+ return undefined;
102
+ if (!entity) {
103
+ throw new CocogenError(`Property '${prop.name}' maps people entity fields but is missing a people label. Add @coco.label("person...").`);
104
+ }
105
+ return {
106
+ entity,
107
+ fields,
108
+ };
109
+ }
110
+ function getDescription(program, prop) {
111
+ const fromDecorator = program.stateMap(COCOGEN_STATE_PROPERTY_DESCRIPTIONS).get(prop);
112
+ if (fromDecorator && fromDecorator.trim().length > 0)
113
+ return fromDecorator;
114
+ const fromDoc = getDoc(program, prop);
115
+ if (fromDoc && fromDoc.trim().length > 0)
116
+ return fromDoc;
117
+ return undefined;
118
+ }
119
+ function getName(program, prop) {
120
+ const override = program.stateMap(COCOGEN_STATE_PROPERTY_NAME_OVERRIDES).get(prop);
121
+ return override ?? prop.name;
122
+ }
123
+ function isContentProperty(program, prop) {
124
+ return Boolean(program.stateMap(COCOGEN_STATE_CONTENT_PROPERTIES).get(prop));
125
+ }
126
+ function isIdProperty(program, prop) {
127
+ return Boolean(program.stateMap(COCOGEN_STATE_ID_PROPERTIES).get(prop));
128
+ }
129
+ function isPrincipalScalar(type) {
130
+ if (type.kind !== "Scalar")
131
+ return false;
132
+ const scalar = type;
133
+ return scalar.name === "Principal" && scalar.namespace?.name === "coco";
134
+ }
135
+ function mapTypeToPropertyType(program, type) {
136
+ // Arrays
137
+ if (type.kind === "Model" && isArrayModelType(program, type)) {
138
+ const element = type.indexer.value;
139
+ if (isPrincipalScalar(element)) {
140
+ // Graph does not list principalCollection in externalConnectors.propertyType.
141
+ throw new CocogenError("principalCollection is not supported by Microsoft Graph external connectors schema (no official propertyType value). Use a different representation.");
142
+ }
143
+ return mapCollectionType(element);
144
+ }
145
+ // Scalars
146
+ if (isPrincipalScalar(type))
147
+ return "principal";
148
+ if (type.kind === "Scalar") {
149
+ const scalarName = type.name;
150
+ switch (scalarName) {
151
+ case "string":
152
+ return "string";
153
+ case "boolean":
154
+ return "boolean";
155
+ case "int32":
156
+ case "int64":
157
+ return "int64";
158
+ case "float32":
159
+ case "float64":
160
+ return "double";
161
+ case "utcDateTime":
162
+ return "dateTime";
163
+ default:
164
+ break;
165
+ }
166
+ }
167
+ if (type.kind === "Model") {
168
+ throw new CocogenError("Nested models are not supported for connector schema properties. Flatten the model so every property is a scalar or scalar collection.");
169
+ }
170
+ throw new CocogenError(`Unsupported TypeSpec property type kind: ${type.kind}`);
171
+ }
172
+ function mapCollectionType(element) {
173
+ if (element.kind === "Scalar") {
174
+ const scalarName = element.name;
175
+ switch (scalarName) {
176
+ case "string":
177
+ return "stringCollection";
178
+ case "int32":
179
+ case "int64":
180
+ return "int64Collection";
181
+ case "float32":
182
+ case "float64":
183
+ return "doubleCollection";
184
+ case "utcDateTime":
185
+ return "dateTimeCollection";
186
+ default:
187
+ break;
188
+ }
189
+ }
190
+ throw new CocogenError("Unsupported collection element type.");
191
+ }
192
+ export async function compileTypeSpec(entryTspPath) {
193
+ const absolute = path.resolve(entryTspPath);
194
+ // Ensure the cocogen decorator library declarations and JS implementations are available
195
+ // even if the user's schema doesn't explicitly import the package yet.
196
+ //
197
+ // When running from a published package, these are present in the package file tree.
198
+ const libraryTspMain = fileURLToPath(new URL("../../typespec/main.tsp", import.meta.url));
199
+ return compile(NodeHost, absolute, {
200
+ noEmit: true,
201
+ additionalImports: [libraryTspMain],
202
+ warningAsError: false,
203
+ });
204
+ }
205
+ export async function loadIrFromTypeSpec(entryTspPath) {
206
+ const program = await compileTypeSpec(entryTspPath);
207
+ if (program.hasError()) {
208
+ const formatted = program.diagnostics
209
+ .filter((d) => d.severity === "error")
210
+ .map((d) => formatDiagnostic(d, { pretty: true, pathRelativeTo: process.cwd() }))
211
+ .join("\n");
212
+ throw new CocogenError(`TypeSpec compilation failed:\n${formatted}`);
213
+ }
214
+ const itemModel = requireSingleItemModel(program);
215
+ const connection = getConnectionSettings(program, itemModel);
216
+ const profileSource = getProfileSourceSettings(program, itemModel);
217
+ const properties = [...itemModel.properties.values()];
218
+ const idProps = properties.filter((p) => isIdProperty(program, p));
219
+ if (idProps.length !== 1) {
220
+ throw new CocogenError(idProps.length === 0
221
+ ? "Missing @coco.id property. Add @coco.id to the property that uniquely identifies items."
222
+ : `Multiple @coco.id properties found (${idProps.map((p) => p.name).join(", ")}). Use exactly one.`);
223
+ }
224
+ const contentProps = properties.filter((p) => isContentProperty(program, p));
225
+ const contentPropName = contentProps.length > 0 ? getName(program, contentProps[0]) : undefined;
226
+ const irProperties = properties.map((prop) => {
227
+ const name = getName(program, prop);
228
+ const labels = getStringArray(program, COCOGEN_STATE_PROPERTY_LABELS, prop);
229
+ const aliases = getStringArray(program, COCOGEN_STATE_PROPERTY_ALIASES, prop);
230
+ const description = getDescription(program, prop);
231
+ const personEntity = getPersonEntityMapping(program, prop);
232
+ return {
233
+ name,
234
+ type: mapTypeToPropertyType(program, prop.type),
235
+ ...(description ? { description } : {}),
236
+ labels,
237
+ aliases,
238
+ search: getSearchFlags(program, prop),
239
+ ...(personEntity ? { personEntity } : {}),
240
+ source: getSourceSettings(program, prop, name),
241
+ };
242
+ });
243
+ const usesPrincipal = irProperties.some((prop) => prop.type === "principal");
244
+ const graphApiVersion = computeGraphApiVersion(connection.contentCategory, usesPrincipal);
245
+ const connectionCategory = connection.contentCategory;
246
+ const connectionId = typeof connection.connectionId === "string" ? connection.connectionId.trim() : "";
247
+ const connectionDescription = typeof connection.connectionDescription === "string" ? connection.connectionDescription.trim() : "";
248
+ return {
249
+ connection: {
250
+ ...(connectionCategory ? { contentCategory: connectionCategory } : {}),
251
+ ...(connectionId ? { connectionId } : {}),
252
+ ...(connectionDescription ? { connectionDescription } : {}),
253
+ ...(profileSource ? { profileSource } : {}),
254
+ graphApiVersion,
255
+ },
256
+ item: {
257
+ typeName: itemModel.name,
258
+ idPropertyName: getName(program, idProps[0]),
259
+ ...(contentPropName ? { contentPropertyName: contentPropName } : {}),
260
+ },
261
+ properties: irProperties,
262
+ };
263
+ }
264
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/tsp/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { DecoratorContext, Model, ModelProperty } from "@typespec/compiler";
2
+ import { type CocogenConnectionSettings, type CocogenProfileSourceSettings, type CocogenSearchFlags, type CocogenSourceSettings } from "./state.js";
3
+ export declare function $item(context: DecoratorContext, target: Model): void;
4
+ export declare function $id(context: DecoratorContext, target: ModelProperty): void;
5
+ export declare function $label(context: DecoratorContext, target: ModelProperty, value: string): void;
6
+ export declare function $aliases(context: DecoratorContext, target: ModelProperty, value: string): void;
7
+ export declare function $description(context: DecoratorContext, target: ModelProperty, value: string): void;
8
+ export declare function $name(context: DecoratorContext, target: ModelProperty, value: string): void;
9
+ export declare function $connection(context: DecoratorContext, target: Model, settings: CocogenConnectionSettings): void;
10
+ export declare function $profileSource(context: DecoratorContext, target: Model, settings: CocogenProfileSourceSettings): void;
11
+ export declare function $search(context: DecoratorContext, target: ModelProperty, flags: CocogenSearchFlags): void;
12
+ export declare function $content(context: DecoratorContext, target: ModelProperty): void;
13
+ export declare function $source(context: DecoratorContext, target: ModelProperty, from: CocogenSourceSettings | string, to?: string): void;
14
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/typespec/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,EACL,aAAa,EAEd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAaL,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE3B,MAAM,YAAY,CAAC;AAwDpB,wBAAgB,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,CAGpE;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAG1E;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK5F;AAGD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK9F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKlG;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK3F;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAM/G;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,4BAA4B,GACrC,IAAI,CAMN;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAGzG;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAG/E;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,qBAAqB,GAAG,MAAM,EACpC,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CA2BN"}
@@ -0,0 +1,139 @@
1
+ import { setTypeSpecNamespace, } from "@typespec/compiler";
2
+ import { COCOGEN_STATE_CONNECTION_SETTINGS, COCOGEN_STATE_PROFILE_SOURCE_SETTINGS, COCOGEN_STATE_CONTENT_PROPERTIES, COCOGEN_STATE_ID_PROPERTIES, COCOGEN_STATE_ITEM_MODELS, COCOGEN_STATE_PROPERTY_ALIASES, COCOGEN_STATE_PROPERTY_DESCRIPTIONS, COCOGEN_STATE_PROPERTY_LABELS, COCOGEN_STATE_PROPERTY_NAME_OVERRIDES, COCOGEN_STATE_PROPERTY_SEARCH, COCOGEN_STATE_PROPERTY_SOURCE, COCOGEN_STATE_PROPERTY_PERSON_FIELDS, } from "./state.js";
3
+ function unwrapValue(value) {
4
+ if (value === undefined || value === null)
5
+ return undefined;
6
+ if (typeof value !== "object")
7
+ return value;
8
+ if ("value" in value)
9
+ return value.value;
10
+ return value;
11
+ }
12
+ function modelValueToObject(model) {
13
+ const output = {};
14
+ for (const [name, prop] of model.properties) {
15
+ const literal = unwrapValue(prop.type);
16
+ if (literal !== undefined)
17
+ output[name] = literal;
18
+ }
19
+ return output;
20
+ }
21
+ function normalizeObject(raw) {
22
+ if (isModel(raw)) {
23
+ return modelValueToObject(raw);
24
+ }
25
+ const input = (raw ?? {});
26
+ const output = {};
27
+ for (const [key, value] of Object.entries(input)) {
28
+ const unwrapped = unwrapValue(value);
29
+ if (unwrapped !== undefined)
30
+ output[key] = unwrapped;
31
+ }
32
+ return output;
33
+ }
34
+ function pushArrayValue(map, key, value) {
35
+ const existing = map.get(key);
36
+ if (existing) {
37
+ existing.push(value);
38
+ return;
39
+ }
40
+ map.set(key, [value]);
41
+ }
42
+ function isModel(target) {
43
+ return typeof target === "object" && target !== null && target.kind === "Model";
44
+ }
45
+ function isModelProperty(target) {
46
+ return (typeof target === "object" &&
47
+ target !== null &&
48
+ target.kind === "ModelProperty" &&
49
+ typeof target.name === "string");
50
+ }
51
+ export function $item(context, target) {
52
+ if (!isModel(target))
53
+ return;
54
+ context.program.stateSet(COCOGEN_STATE_ITEM_MODELS).add(target);
55
+ }
56
+ export function $id(context, target) {
57
+ if (!isModelProperty(target))
58
+ return;
59
+ context.program.stateMap(COCOGEN_STATE_ID_PROPERTIES).set(target, true);
60
+ }
61
+ export function $label(context, target, value) {
62
+ if (!isModelProperty(target))
63
+ return;
64
+ const text = unwrapValue(value);
65
+ if (typeof text !== "string")
66
+ return;
67
+ pushArrayValue(context.program.stateMap(COCOGEN_STATE_PROPERTY_LABELS), target, text);
68
+ }
69
+ export function $aliases(context, target, value) {
70
+ if (!isModelProperty(target))
71
+ return;
72
+ const text = unwrapValue(value);
73
+ if (typeof text !== "string")
74
+ return;
75
+ pushArrayValue(context.program.stateMap(COCOGEN_STATE_PROPERTY_ALIASES), target, text);
76
+ }
77
+ export function $description(context, target, value) {
78
+ if (!isModelProperty(target))
79
+ return;
80
+ const text = unwrapValue(value);
81
+ if (typeof text !== "string")
82
+ return;
83
+ context.program.stateMap(COCOGEN_STATE_PROPERTY_DESCRIPTIONS).set(target, text);
84
+ }
85
+ export function $name(context, target, value) {
86
+ if (!isModelProperty(target))
87
+ return;
88
+ const text = unwrapValue(value);
89
+ if (typeof text !== "string")
90
+ return;
91
+ context.program.stateMap(COCOGEN_STATE_PROPERTY_NAME_OVERRIDES).set(target, text);
92
+ }
93
+ export function $connection(context, target, settings) {
94
+ if (!isModel(target))
95
+ return;
96
+ context.program.stateMap(COCOGEN_STATE_CONNECTION_SETTINGS).set(target, normalizeObject(settings));
97
+ }
98
+ export function $profileSource(context, target, settings) {
99
+ if (!isModel(target))
100
+ return;
101
+ context.program.stateMap(COCOGEN_STATE_PROFILE_SOURCE_SETTINGS).set(target, normalizeObject(settings));
102
+ }
103
+ export function $search(context, target, flags) {
104
+ if (!isModelProperty(target))
105
+ return;
106
+ context.program.stateMap(COCOGEN_STATE_PROPERTY_SEARCH).set(target, normalizeObject(flags));
107
+ }
108
+ export function $content(context, target) {
109
+ if (!isModelProperty(target))
110
+ return;
111
+ context.program.stateMap(COCOGEN_STATE_CONTENT_PROPERTIES).set(target, true);
112
+ }
113
+ export function $source(context, target, from, to) {
114
+ if (!isModelProperty(target))
115
+ return;
116
+ const rawTo = unwrapValue(to);
117
+ if (typeof rawTo === "string" && rawTo.trim().length > 0) {
118
+ const rawFrom = unwrapValue(from);
119
+ const entry = {
120
+ path: rawTo,
121
+ source: typeof rawFrom === "string" ? rawFrom : normalizeObject(from),
122
+ };
123
+ pushArrayValue(context.program.stateMap(COCOGEN_STATE_PROPERTY_PERSON_FIELDS), target, entry);
124
+ return;
125
+ }
126
+ const rawFrom = unwrapValue(from);
127
+ if (typeof rawFrom === "string") {
128
+ const text = rawFrom.trim();
129
+ if (text.length > 0) {
130
+ context.program.stateMap(COCOGEN_STATE_PROPERTY_SOURCE).set(target, { csv: text });
131
+ }
132
+ return;
133
+ }
134
+ const normalized = normalizeObject(from);
135
+ context.program.stateMap(COCOGEN_STATE_PROPERTY_SOURCE).set(target, normalized);
136
+ }
137
+ // Ensure the decorators are registered under the `coco` namespace.
138
+ setTypeSpecNamespace("coco", $item, $id, $label, $aliases, $description, $name, $connection, $profileSource, $search, $content, $source);
139
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/typespec/decorators.ts"],"names":[],"mappings":"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"}