@ingestron/core 0.12.3 → 0.12.4

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.
@@ -3,7 +3,7 @@
3
3
  "dist/assets/schemas/ODCS-LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
4
4
  "dist/assets/schemas/odcs-3.1.0.json": "1a35de14c688b400fef306564f66e2af3304f057cd5cd6e7b847c1a8bf252c5b",
5
5
  "dist/assets/schemas/provenance.json": "4b5eb1fd89b81223f7946113b651d5a3a18adaa28948e43c3615dd851fb6844e",
6
- "dist/core/authoring.js": "405c818184960c93a0cd0c041af2d415d56f62670ff91b0fb5f0d2aeed1feb9b",
6
+ "dist/core/authoring.js": "c144374cccbb512be7b3cd26700bc29538236eeeb35493eeec3bab938e08ff2a",
7
7
  "dist/core/config.js": "b7e7138f7cc4a7b4ec8f6d0f0616c8802f2d802ec29aa09b40c1fc5c9324e016",
8
8
  "dist/core/connections.js": "37b797b402788e00c51f3cac93b87342d158ed9b279753db91006d2d6c66bb4a",
9
9
  "dist/core/connector-package.js": "de9729e9e4b0cf05bd1ef347e57ffd489245bb68efce5c313ccba72b78409f41",
@@ -23,7 +23,7 @@
23
23
  "dist/core/model-packs.js": "fee776ea0804dc66c9f140e57d94a3922d69c52d03c72079842ec43417616b0d",
24
24
  "dist/core/operations.js": "7f4a9eeee19d3e1e4c1beecc0350e38d386f012edfb31c3248efcd22ebd40a77",
25
25
  "dist/core/package-references.js": "bd3085eb6dcdac399d79af109d0a9e710a0532eba61e5298dc842aec9c7ef10a",
26
- "dist/core/packages.js": "6af57d7f2b3d78837a39cf9b14a5d8151a6825dfce359680382fd8096a08d259",
26
+ "dist/core/packages.js": "c6bcbc90aa3597fcd4205b27136221229d9efedc9bfa68a83a134cb5e8f51d2b",
27
27
  "dist/core/planner.js": "974c6bac5c533a32a7c45f797ef4d857c644448aa243a929caca5917fb9f3fb8",
28
28
  "dist/core/project-build.js": "18ffe962068967af255e77f1dc48fa4dd9161cd50659a8a3d9ac3b161856082e",
29
29
  "dist/core/project-packages.js": "b031dd9e3c5c147e8e1ed589b5eab21b9067acbefc1d4cd1dc5b6b7018cc39cf",
@@ -43,7 +43,7 @@
43
43
  "dist/version.js": "48af2aa1e425f1e387c082bbf0ad2c0c8d757c468101a614c3864153a94e6889"
44
44
  },
45
45
  "sources": {
46
- "src/core/authoring.ts": "e1f02cf6c50cda20a62c1ea318908854939ab5be7da7de829350c7e11788be01",
46
+ "src/core/authoring.ts": "4389a1c8994b1c5da6d470e29806e547d9e5c13ed481b5e34acbe919b6b4b3d8",
47
47
  "src/core/config.ts": "f282eb246438608e1951556dfeab9372daf65330a15a9d159d36d1f940370344",
48
48
  "src/core/connections.ts": "dbdaca4193efa203cffa02fd819b95f82bbd604a7678ba7dc6ba065205c49ce7",
49
49
  "src/core/connector-package.ts": "a36151f6ffb49836547984eae871023ad1ad69a136f33cd6ad608496f84c85f8",
@@ -63,7 +63,7 @@
63
63
  "src/core/model-packs.ts": "a110d319f6feeff22a2d0d3a99ce5e49e56817d0cc27ab77d831d04a945ddfd3",
64
64
  "src/core/operations.ts": "e0a5a0e869e96de4e869f89e0fd794cb9fa537a16fb1f37fd8cf2b7ca777c08d",
65
65
  "src/core/package-references.ts": "5c5cee7e140158928e2e5a37f426520c7c2f042546a37eed4507d79326181f5a",
66
- "src/core/packages.ts": "5a8ac2c2c2b5ac70c97339d7d5b9d76ac44422566c1dcbb780323de512905fd4",
66
+ "src/core/packages.ts": "8a9b6612325de68ab2610f540bd39e4f899b06d1cc1fbd54ecfd2abb8b4e9c40",
67
67
  "src/core/planner.ts": "2c6f0d53e21cbb60fc2433e7da1245707133336274c60b9a5678614dabf09bca",
68
68
  "src/core/project-build.ts": "7fa5038e7e2ff2625a30ffae282369954a5989347c6435849b72c95f2e52e247",
69
69
  "src/core/project-packages.ts": "4c5cb98aeb5030db7cf2c851cd9e40ed9aae038517fba2d8d7159e884f08b7a0",
@@ -5,10 +5,28 @@ import { resolve, dirname, relative } from "node:path";
5
5
  import { parseDocument, stringify } from "yaml";
6
6
  import { check, digest, canonical, merge, Problem } from "./errors.js";
7
7
  import { Configuration } from "./config.js";
8
- import { projectSchema } from "./schema.js";
8
+ import { packageReferenceSchema, projectSchema } from "./schema.js";
9
9
  import { projectPackages } from "./project-packages.js";
10
10
  import { contractColumns } from "./contracts.js";
11
- import { fence, installedProviders, canonicalPackageReference, } from "./packages.js";
11
+ import { fence, installedProviders, canonicalPackageReference, configuredPackageReference, resolvePackage, packageYaml, } from "./packages.js";
12
+ function concisePackageReference(root, value) {
13
+ const pkg = packageReferenceSchema.parse(value);
14
+ const reference = configuredPackageReference(pkg);
15
+ const installed = resolvePackage(root, reference);
16
+ const manifest = packageYaml(installed.file);
17
+ const short = `${manifest.id}@${manifest.version}`;
18
+ try {
19
+ const selected = resolvePackage(root, short);
20
+ if (selected.entry.repository === installed.entry.repository &&
21
+ selected.entry.path === installed.entry.path &&
22
+ selected.entry.commit === installed.entry.commit)
23
+ return short;
24
+ }
25
+ catch {
26
+ // Keep an explicit reference if multiple installed packages share the ID.
27
+ }
28
+ return `${pkg.source}@${pkg.version}`;
29
+ }
12
30
  const yaml = (text, file) => {
13
31
  const doc = parseDocument(text, { uniqueKeys: true });
14
32
  check(!doc.errors.length, "YAML", doc.errors[0]?.message ?? "Invalid YAML", file);
@@ -116,7 +134,8 @@ export function initialise(root, options) {
116
134
  "project.yaml": stringify({
117
135
  apiVersion: "ingestron.project/v1",
118
136
  id: options.id,
119
- providers: { packages: {}, configurations: {} },
137
+ packages: {},
138
+ providers: { configurations: {} },
120
139
  defaults: {},
121
140
  environments: Object.fromEntries(environments.map((name) => [
122
141
  name,
@@ -150,6 +169,16 @@ export function initialise(root, options) {
150
169
  name === ".gitignore" ||
151
170
  /^environments\/[\w-]+\.yaml$/.test(name));
152
171
  check(files["project.yaml"], "PROVIDER", "Provider must author a project");
172
+ const authored = yaml(files["project.yaml"], "project.yaml").toJS();
173
+ const providerPackages = authored.providers?.packages ?? {};
174
+ authored.packages ??= {};
175
+ for (const [name, value] of Object.entries(providerPackages)) {
176
+ check(!Object.hasOwn(authored.packages, name), "PACKAGE", `Duplicate package alias ${name}`);
177
+ authored.packages[name] = concisePackageReference(root, value);
178
+ }
179
+ if (authored.providers)
180
+ delete authored.providers.packages;
181
+ files["project.yaml"] = stringify(authored);
153
182
  // Providers may return JSON (valid YAML); editable scaffolds use block YAML.
154
183
  for (const [name, text] of Object.entries(files)) {
155
184
  if (name.endsWith(".yaml"))
@@ -161,12 +190,14 @@ export function initialise(root, options) {
161
190
  }
162
191
  export function migrateProvider(root, options) {
163
192
  const reader = new Configuration(root), doc = yaml(reader.text("project.yaml"), "project.yaml");
164
- check(doc.hasIn(["providers", "packages", options.package]), "PACKAGE", "Unknown project package");
193
+ const location = doc.hasIn(["packages", options.package])
194
+ ? ["packages", options.package]
195
+ : ["providers", "packages", options.package];
196
+ check(doc.hasIn(location), "PACKAGE", "Unknown project package");
165
197
  const selected = providerReference(root, options.to);
166
- doc.setIn(["providers", "packages", options.package], {
167
- source: selected.source,
168
- version: selected.version,
169
- });
198
+ doc.setIn(location, location[0] === "packages"
199
+ ? concisePackageReference(root, `${selected.source}@${selected.version}`)
200
+ : { source: selected.source, version: selected.version });
170
201
  return preview(root, { "project.yaml": doc.toString() });
171
202
  }
172
203
  function flowFile(root, id) {
@@ -198,7 +229,7 @@ export function addFlow(root, options) {
198
229
  value: yaml(reader.text(file), file).toJS(),
199
230
  };
200
231
  });
201
- const files = providerAuthor(root, `${pkg.source}@${pkg.version}`, {
232
+ const files = providerAuthor(root, resolvePackage(root, configuredPackageReference(pkg)).reference, {
202
233
  operation: "flow",
203
234
  options,
204
235
  configuration,
@@ -194,6 +194,7 @@ export declare function packageLock(root: string): {
194
194
  }>;
195
195
  };
196
196
  export declare function resolvePackage(root: string, reference: string): {
197
+ reference: string;
197
198
  file: string;
198
199
  root: string;
199
200
  entry: {
@@ -332,7 +332,7 @@ export function resolvePackage(root, reference) {
332
332
  check(canonical(inventory(cache)) === canonical(Object.keys(entry.files).sort()), "PACKAGE", "Package file inventory changed");
333
333
  for (const [file, hash] of Object.entries(entry.files))
334
334
  check(digest(readFileSync(fence(cache, file))) === hash, "PACKAGE", `Package integrity failed: ${file}`);
335
- return { file: fence(cache, entry.path), root: cache, entry };
335
+ return { reference, file: fence(cache, entry.path), root: cache, entry };
336
336
  }
337
337
  /** Derived information lives outside the integrity-checked source cache. */
338
338
  export function savePluginInformation(root, reference) {
@@ -1,4 +1,5 @@
1
1
  export declare function providerReference(root: string, reference: string): {
2
+ reference: string;
2
3
  file: string;
3
4
  root: string;
4
5
  entry: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingestron/core",
3
- "version": "0.12.3",
3
+ "version": "0.12.4",
4
4
  "type": "module",
5
5
  "description": "Shared Ingestron project compiler, operations and editor schemas",
6
6
  "license": "Apache-2.0",