@ingestron/core 0.12.0 → 0.12.2

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 CHANGED
@@ -9,7 +9,7 @@ connector runtime assets and standards through explicit package references.
9
9
 
10
10
  ## Use the library
11
11
 
12
- Requires Node 22 for runtime operations. The npm package name is `@ingestron/core`;
12
+ Requires Node 22.12 or newer for runtime operations. The npm package name is `@ingestron/core`;
13
13
  initial registry publication is pending. To build the public source checkout:
14
14
 
15
15
  ```sh
@@ -640,7 +640,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
640
640
  THE SOFTWARE.
641
641
  ```
642
642
 
643
- ### yaml@2.9.0
643
+ ### yaml@2.9.1
644
644
 
645
645
  Declared licence: ISC
646
646
 
@@ -662,7 +662,7 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
662
662
  THIS SOFTWARE.
663
663
  ```
664
664
 
665
- ### zod@4.5.4
665
+ ### zod@4.6.5
666
666
 
667
667
  Declared licence: MIT
668
668
 
@@ -5,7 +5,7 @@
5
5
  "dist/assets/schemas/provenance.json": "4b5eb1fd89b81223f7946113b651d5a3a18adaa28948e43c3615dd851fb6844e",
6
6
  "dist/core/authoring.js": "43025703f23b61090d1ea6912e387e5ed74a93568f068339f9a7ecae88795a51",
7
7
  "dist/core/config.js": "b7e7138f7cc4a7b4ec8f6d0f0616c8802f2d802ec29aa09b40c1fc5c9324e016",
8
- "dist/core/connections.js": "bd351bcb05275321078409b4de83648751a51e609ab5c5fc5489f1fe31433bcd",
8
+ "dist/core/connections.js": "504bbacd422fd0f6ef64a229f5255b377f5393a41f6366674fc5e8854a26b1d8",
9
9
  "dist/core/connector-package.js": "c1d39fce629a524fa199ed5d0dffe6a36c500e1018fbb8379d700330372b46a7",
10
10
  "dist/core/contracts.js": "a1b7fd28f776117cca86a25c6c70e852ff57ffea2bb9e7accbf2d583948d9dde",
11
11
  "dist/core/deliveries.js": "a4d2cb1213bc4c02cffb962dcb943ba98e261d37cfb21041948ec637599db080",
@@ -21,13 +21,13 @@
21
21
  "dist/core/installed-plugins.js": "817ed411aef6f5b966a1828893081406805d2c8764d2ca20fd7e250e8a2168a8",
22
22
  "dist/core/model-pack-schema.js": "e3eb7ff33ddc652643e3f896637de0034004cd0cf26b0e296a074f830ae0b870",
23
23
  "dist/core/model-packs.js": "fee776ea0804dc66c9f140e57d94a3922d69c52d03c72079842ec43417616b0d",
24
- "dist/core/operations.js": "bd6217f7eb33c3c5649f8edecab3ce87d4774c9ff790feff8763ebab71866531",
24
+ "dist/core/operations.js": "7f4a9eeee19d3e1e4c1beecc0350e38d386f012edfb31c3248efcd22ebd40a77",
25
25
  "dist/core/package-references.js": "bd3085eb6dcdac399d79af109d0a9e710a0532eba61e5298dc842aec9c7ef10a",
26
- "dist/core/packages.js": "9c699b518a5c364c361d2b856f3fc6e67fe43ce0dc906b8aa474e341c5e49110",
26
+ "dist/core/packages.js": "e30654122516573c1d8adf40f8a9e76acb54de090016751929dde679e4d1175b",
27
27
  "dist/core/planner.js": "f91902f4c37a7588965360fcddbda79301b59a0b66ef2f70c0378fa5dfcc7088",
28
28
  "dist/core/project-build.js": "1f1002b4f6c506986c5aa6a5bb01ad5f3b4658a7a1319b65d79eaa67916fb994",
29
29
  "dist/core/provider-commands.js": "8bd82821f6ed0eefce8216e7c03c271f28cb9f4bfda7724d5c1de6be1855e535",
30
- "dist/core/provider-starter.js": "0ad05cbfed3d934196f82f8b50cb982314796ef9c5f012ad49935166e93e0fb0",
30
+ "dist/core/provider-starter.js": "69795c1b79360e48664e91db0768f813fe4efc91aede003e1bf032f71731754c",
31
31
  "dist/core/report-pack-schema.js": "fe8ecdc2b8deacd8b2a1e46588ee06744a7b6d8e7342786e320f74cc848665fa",
32
32
  "dist/core/schema.js": "4cbad607f372584fe83f44a121bd978dea7529db5c1eb51168dcd62812c2eeab",
33
33
  "dist/core/workflows.js": "1a5fe93b34d963efb07ab1f67641106386fa3ef9d9e80bd3e59c13795925fda6",
@@ -44,7 +44,7 @@
44
44
  "sources": {
45
45
  "src/core/authoring.ts": "fe80e823cfb82b39894aac9c5f733d489241b4a22bed278079254acff45a0aca",
46
46
  "src/core/config.ts": "f282eb246438608e1951556dfeab9372daf65330a15a9d159d36d1f940370344",
47
- "src/core/connections.ts": "19327f428382189a73a462cfd0b48943c0ba3b000633412b35da1d2ded81868b",
47
+ "src/core/connections.ts": "84f5fb5522480b4c6cb9c90fcde65b5f8bf3db888352d0561b83dabad8ec2952",
48
48
  "src/core/connector-package.ts": "f302432c3954a6230ddf02e3ae796c0a641e52984c0db3bfbfc10b3d5539e49e",
49
49
  "src/core/contracts.ts": "b7445086085b17d5ae8d5a7f4e2e849f286948e1a2a146ceb79660846e8616e5",
50
50
  "src/core/deliveries.ts": "6be0a7059c057420ba22a5515703164a892fac9e79a5bdb0e0871ea0b92ddd15",
@@ -60,13 +60,13 @@
60
60
  "src/core/installed-plugins.ts": "951d15cdd8ca4a2c7d97fb01a46838822fe1b2fcf083ff8cf4bdca20d0997a2d",
61
61
  "src/core/model-pack-schema.ts": "bc9b30ab257fd25766cba63aa2fb6891c05e4b3eccf56d820caaab2dcc4147b4",
62
62
  "src/core/model-packs.ts": "a110d319f6feeff22a2d0d3a99ce5e49e56817d0cc27ab77d831d04a945ddfd3",
63
- "src/core/operations.ts": "3f63b1a7bab027c81a8b27dc31094910df34af6ea333b5f12590b9cf85904cb4",
63
+ "src/core/operations.ts": "e0a5a0e869e96de4e869f89e0fd794cb9fa537a16fb1f37fd8cf2b7ca777c08d",
64
64
  "src/core/package-references.ts": "5c5cee7e140158928e2e5a37f426520c7c2f042546a37eed4507d79326181f5a",
65
- "src/core/packages.ts": "b32d52adf6d4c3673cc70b5bc8638e5986fe4790b9e9ac386e057561cec13b32",
65
+ "src/core/packages.ts": "afe307b5b8058a0dfd3bef76475b32f00be7d5a5b69e73b6c0fcc557aa528d8c",
66
66
  "src/core/planner.ts": "498f5405f3088ee6d54ec8ab4a458813757697c150a56eab33f547aebb214da1",
67
67
  "src/core/project-build.ts": "feb0fe50aff7b1fbdc8d96bcdb177a72a412639d1af98c3cff3b010de90a6428",
68
68
  "src/core/provider-commands.ts": "f8a045230f61be0273910276b51e5c2e4bc0659f34c8a9361a38ab292c39eb4c",
69
- "src/core/provider-starter.ts": "e0f50e2de10d7ec345f64ab3f7b0a08bd0e7df70f36b7d9ccaed78d98ce3a47e",
69
+ "src/core/provider-starter.ts": "eeb504e347638bb933d204dd4d5a7e3e94ff45db136c5edd3fb457061342e405",
70
70
  "src/core/report-pack-schema.ts": "cf2c68f3725cef847627ce61acd0887f04d0067bc324841d8a552bcb12d274b0",
71
71
  "src/core/schema.ts": "dc1c5464878916bbdee08662320310bb202a21ebfca9e534a30746603c9aa46f",
72
72
  "src/core/workflows.ts": "b8afae8637eb92b58ab41a41fc245950e1c8e8820a6a27358508ae54c04c7a78",
@@ -2,6 +2,7 @@ import { readFileSync } from "node:fs";
2
2
  import { fence } from "./packages.js";
3
3
  import { connectorPackageSchema } from "./connector-package.js";
4
4
  import { contractColumns } from "./contracts.js";
5
+ import { resolveModelContracts } from "./model-packs.js";
5
6
  /** Project-owned configuration; schemas and runtime assets remain plugin-owned. */
6
7
  import { Ajv2020 } from "ajv/dist/2020.js";
7
8
  import { Configuration } from "./config.js";
@@ -24,6 +25,7 @@ export function prepareConnection(root, environment, flowId, validateOnly = fals
24
25
  check(profile, "ENVIRONMENT", `Unknown environment ${environment}`);
25
26
  check(!profile.environment || profile.environment === environment, "ENVIRONMENT", "Environment name differs from selected profile");
26
27
  const flows = project.flows.map((f) => reader.parse(flowSchema, f));
28
+ resolveModelContracts(reader, project, flows);
27
29
  check(new Set(flows.map((f) => f.id)).size === flows.length, "FLOW", "Duplicate flow IDs");
28
30
  const flow = flows.find((f) => f.id === flowId);
29
31
  check(flow && flow.kind === "ingestion" && !flow.steps, "FLOW", "Select an ingestion flow");
@@ -261,6 +261,10 @@ export declare const operationSchemas: {
261
261
  }, z.core.$strict>;
262
262
  readonly packages_install: z.ZodObject<{
263
263
  reference: z.ZodString;
264
+ kind: z.ZodOptional<z.ZodEnum<{
265
+ connector: "connector";
266
+ provider: "provider";
267
+ }>>;
264
268
  fromGit: z.ZodOptional<z.ZodString>;
265
269
  update: z.ZodOptional<z.ZodBoolean>;
266
270
  frozen: z.ZodOptional<z.ZodBoolean>;
@@ -259,6 +259,7 @@ export const operationSchemas = {
259
259
  packages_install: z
260
260
  .object({
261
261
  reference: z.string(),
262
+ kind: z.enum(["provider", "connector"]).optional(),
262
263
  fromGit: z.string().optional(),
263
264
  update: z.boolean().optional(),
264
265
  frozen: z.boolean().optional(),
@@ -206,6 +206,7 @@ export declare function installPackage(root: string, reference: string, options?
206
206
  update?: boolean;
207
207
  frozen?: boolean;
208
208
  tagPrefix?: string;
209
+ kind?: "provider" | "connector";
209
210
  }): {
210
211
  repository: string;
211
212
  path: string;
@@ -388,13 +388,19 @@ export function installPackage(root, reference, options = {}) {
388
388
  check(!options.frozen || previous, "PACKAGE", "Frozen install requires an existing lock entry");
389
389
  if (previous &&
390
390
  !options.update &&
391
- existsSync(resolve(root, `.ingestron/packages/${digest(previous.repository)}/${previous.commit}`)))
391
+ existsSync(resolve(root, `.ingestron/packages/${digest(previous.repository)}/${previous.commit}`))) {
392
+ if (options.kind) {
393
+ const installed = resolvePackage(root, reference);
394
+ const manifest = packageYaml(installed.file);
395
+ check(manifest.apiVersion === `ingestron.${options.kind}/v1`, "PACKAGE", `Expected a ${options.kind} package at ${reference}`);
396
+ }
392
397
  return {
393
398
  reference,
394
399
  ...resolvePackage(root, reference).entry,
395
400
  cached: true,
396
401
  informationFile: savePluginInformation(root, reference),
397
402
  };
403
+ }
398
404
  const control = fence(root, ".ingestron");
399
405
  mkdirSync(control, { recursive: true });
400
406
  const guard = resolve(control, "package-install.lock");
@@ -472,6 +478,8 @@ export function installPackage(root, reference, options = {}) {
472
478
  files[m[5]] = digest(text);
473
479
  }
474
480
  const manifest = packageYaml(fence(staged, parsed.path));
481
+ if (options.kind)
482
+ check(manifest.apiVersion === `ingestron.${options.kind}/v1`, "PACKAGE", `Expected a ${options.kind} package at ${reference}`);
475
483
  if (manifest.apiVersion === "ingestron.connector/v1") {
476
484
  const connector = connectorPackageSchema.parse(manifest);
477
485
  check(connector.upstream.licenceStatus === "evidenced", "LICENCE", "Connector licence evidence is missing or conflicting; installation held");
@@ -127,7 +127,7 @@ export function render(plan) {
127
127
  build: "node scripts/check.mjs build",
128
128
  },
129
129
  devDependencies: { "@ingestron/core": version },
130
- engines: { node: ">=22 <23" },
130
+ engines: { node: ">=22.12.0" },
131
131
  }, null, 2) + "\n",
132
132
  "test/provider.test.mjs": `import {test} from 'node:test';
133
133
  import assert from 'node:assert/strict';
@@ -142,7 +142,7 @@ const result=await executeAsync({root:process.cwd(),allowWrite:build},build?'bui
142
142
  console.log(JSON.stringify(result,null,2));
143
143
  if(!result.ok)process.exitCode=1;
144
144
  `,
145
- "README.md": `# ${id} provider starter\n\nA synthetic SQL generator demonstrating the Ingestron plugin contract. It has no platform connection or execution adapter.\n\nUse Node 22. Run npm install, npm test, npm run check and npm run build. Review out/model.sql and out/ingestron-project.json. Change the target to an invalid identifier to verify rejection.\n\nReplace the example with your platform implementation and tests before publishing. Declare only implemented capabilities. The core plugin contract is documented at https://github.com/ingestron/core/blob/main/docs/plugins.md.\n`,
145
+ "README.md": `# ${id} provider starter\n\nA synthetic SQL generator demonstrating the Ingestron plugin contract. It has no platform connection or execution adapter.\n\nUse Node 22.12 or newer. Run npm install, npm test, npm run check and npm run build. Review out/model.sql and out/ingestron-project.json. Change the target to an invalid identifier to verify rejection.\n\nReplace the example with your platform implementation and tests before publishing. Declare only implemented capabilities. The core plugin contract is documented at https://github.com/ingestron/core/blob/main/docs/plugins.md.\n`,
146
146
  "SECURITY.md": "Do not include secrets or source data in packages or fixtures. Compiler hooks are offline; credentials belong in customer execution context. Report suspected vulnerabilities privately to the repository owner.\n",
147
147
  ".gitignore": "out/\nnode_modules/\n.ingestron/\n",
148
148
  };
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@ingestron/core",
3
- "version": "0.12.0",
3
+ "version": "0.12.2",
4
4
  "type": "module",
5
5
  "description": "Shared Ingestron project compiler, operations and editor schemas",
6
6
  "license": "Apache-2.0",
7
7
  "engines": {
8
- "node": ">=22 <23"
8
+ "node": ">=22.12.0"
9
9
  },
10
10
  "files": [
11
11
  "dist",
@@ -34,8 +34,8 @@
34
34
  "ajv": "8.20.0",
35
35
  "ajv-formats": "3.0.1",
36
36
  "quickjs-emscripten": "0.32.0",
37
- "yaml": "2.9.0",
38
- "zod": "4.5.4"
37
+ "yaml": "2.9.1",
38
+ "zod": "4.6.5"
39
39
  },
40
40
  "publishConfig": {
41
41
  "access": "public",
@@ -61,7 +61,7 @@
61
61
  "packageManager": "pnpm@10.15.0",
62
62
  "devDependencies": {
63
63
  "@types/node": "22.20.1",
64
- "prettier": "3.9.6",
64
+ "prettier": "3.9.8",
65
65
  "tsx": "4.23.13",
66
66
  "typescript": "7.0.2"
67
67
  },