@_linked/core 2.24.1 → 2.26.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 +62 -0
- package/lib/esm/ontologies/linked-core.js +10 -3
- package/lib/esm/ontologies/linked-core.js.map +1 -1
- package/lib/esm/paths/normalizePropertyPath.js +3 -2
- package/lib/esm/paths/normalizePropertyPath.js.map +1 -1
- package/lib/esm/shapes/SHACL.d.ts +2 -2
- package/lib/esm/shapes/SHACL.js.map +1 -1
- package/lib/esm/shapes/nodeShapeData.d.ts +2 -2
- package/lib/esm/shapes/nodeShapeData.js.map +1 -1
- package/lib/esm/shapes/relationShape.d.ts +35 -0
- package/lib/esm/shapes/relationShape.js +88 -0
- package/lib/esm/shapes/relationShape.js.map +1 -0
- package/lib/esm/shapes/validation.js +8 -4
- package/lib/esm/shapes/validation.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.js +4 -8
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/utils/Package.js +2 -2
- package/lib/esm/utils/Package.js.map +1 -1
- package/lib/esm/utils/ShapeClass.d.ts +26 -0
- package/lib/esm/utils/ShapeClass.js +128 -0
- package/lib/esm/utils/ShapeClass.js.map +1 -1
- package/package.json +7 -7
package/lib/esm/utils/Package.js
CHANGED
|
@@ -440,11 +440,11 @@ createPropertyShape({ path: shacl.pattern, datatype: xsd.string, maxCount: 1 },
|
|
|
440
440
|
// PropertyShape.order / group
|
|
441
441
|
createPropertyShape({ path: shacl.order, datatype: xsd.integer, maxCount: 1 }, 'order', shacl.Literal, PropertyShape);
|
|
442
442
|
createPropertyShape({ path: shacl.group, maxCount: 1 }, 'group', shacl.Literal, PropertyShape);
|
|
443
|
-
// PropertyShape.displayRank / displayHidden (
|
|
443
|
+
// PropertyShape.displayRank / displayHidden (core: display vocabulary).
|
|
444
444
|
// These materialize onto the pure sh:NodeShape and so travel with an ejected app.
|
|
445
445
|
createPropertyShape({ path: coreOntology.displayRank, datatype: xsd.integer, maxCount: 1 }, 'displayRank', shacl.Literal, PropertyShape);
|
|
446
446
|
createPropertyShape({ path: coreOntology.displayHidden, datatype: xsd.boolean, maxCount: 1 }, 'displayHidden', shacl.Literal, PropertyShape);
|
|
447
|
-
// PropertyShape.contains (
|
|
447
|
+
// PropertyShape.contains (core:contains — persists the composition flag)
|
|
448
448
|
createPropertyShape({ path: coreOntology.contains, datatype: xsd.boolean, maxCount: 1 }, 'contains', shacl.Literal, PropertyShape);
|
|
449
449
|
// NodeShape.closed / ignoredProperties / dependent
|
|
450
450
|
createPropertyShape({ path: shacl.closed, datatype: xsd.boolean, maxCount: 1 }, 'closed', shacl.Literal, NodeShape);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Package.js","sourceRoot":"","sources":["../../../src/utils/Package.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport {\n createPropertyShape,\n getAndClearCallbacks,\n getNodeShapeUri,\n getPackageUri,\n setPackagePublishConfig,\n NodeShape,\n PropertyShape,\n} from '../shapes/SHACL.js';\nimport {createNodeShapeData, type NodeShapeData} from '../shapes/nodeShapeData.js';\nimport {Shape, type ShapeConstructor} from '../shapes/Shape.js';\nimport {List} from '../shapes/List.class.js';\nimport {Prefix} from './Prefix.js';\nimport {coreOntology} from '../ontologies/linked-core.js';\nimport {rdf} from '../ontologies/rdf.js';\nimport {addNodeShapeToShapeClass,getShapeClass} from './ShapeClass.js';\nimport {shacl} from '../ontologies/shacl.js';\nimport {rdfs} from '../ontologies/rdfs.js';\nimport {xsd} from '../ontologies/xsd.js';\nimport type {NodeReferenceValue} from './NodeReference.js';\n\n//global tree\ndeclare var _linked: any;\ndeclare var window;\ndeclare var global;\n\n\n// var packageParsePromises: Map<string,Promise<any>> = new Map();\n// var loadedPackages: Set<NamedNode> = new Set();\nlet ontologies: Set<any> = new Set();\nlet _autoLoadOntologyData = false;\n/**\n * a map of requested property shapes for specific nodes\n * The value is a promise if it's still loading, or true if it is fully loaded\n */\n// type ClassDecorator = <T extends {new (...args: any[]): {}}>(\n// constructor: T,\n// ) => T;\n\nexport type ShapeConfig = {\n /**\n * The name this shape is identified by, overriding the class name.\n *\n * A shape's IRI is `<baseUri>shape/<package>/<name>`, and `Server.call`\n * routes on it — so the name is persisted data, not a label. Taking it from\n * `constructor.name` couples that data to how the code was compiled: a\n * minifier renames the class, and so does a plain name collision, because a\n * shape and the ontology term it targets deliberately share a name. Either\n * one silently changes what the shape *is*.\n *\n * Optional, and defaults to `constructor.name`, so existing shapes are\n * unaffected. Set it where the identity has to outlive the build.\n */\n name?: string;\n /**\n * A short description of the shape, what it represents and what it is used for.\n * will be stored as rdfs:comment on the shape node\n */\n description?: string;\n /**\n * Marks this shape's instances as *dependent* (composition / no independent existence):\n * they may be cascade-deleted when reached through a `contains` property.\n */\n dependent?: boolean;\n /**\n * Close the shape (sh:closed): target nodes with properties outside this shape are invalid.\n */\n closed?: boolean;\n /**\n * Properties permitted in addition to the declared ones when the shape is closed\n * (sh:ignoredProperties).\n */\n ignoredProperties?: NodeReferenceValue[];\n};\n\nexport type PackageMetadata = {\n id: string;\n packageName: string;\n type: NodeReferenceValue;\n};\n\n/**\n * This object, returned by [linkedPackage()](/docs/lincd.js/modules/utils_Module#linkedPackage),\n * contains the decorators to link different parts of a LINCD module.\n */\nexport interface LinkedPackageObject\n{\n /**\n * Links a typescript class to a SHACL shape.\n * This decorator creates a SHACL shape and looks at the static property [targetClass](/docs/lincd.js/classes/shapes_Shape.Shape#targetclass)\n * The rest of the shape is typically 'shaped' by methods that use [property decorators](/docs/lincd.js/modules/utils_ShapeDecorators).\n *\n * @example\n * Example of a typescript class using the \\@linkedShape decorator:\n * ```tsx\n * @linkedShape\n * export class Person extends Shape { ... }\n * ```\n * Or with options:\n * ```tsx\n * @linkedShape({ description: \"...\" })\n * export class Person extends Shape { ... }\n * ```\n */\n linkedShape: {\n <T extends typeof Shape>(constructor: T): void;\n <T extends typeof Shape>(config?: ShapeConfig): (constructor: T) => void;\n };\n /**\n * Use this decorator to make any other classes or functions available on demand to other LINCD modules.\n * It does not change the object it is applied on.\n * This is specifically required for their use in an open-ended LINCD application.\n *\n * @example\n * An example helper utility using the \\@linkedUtil decorator:\n * ```tsx\n * @linkedUtil\n * export class Sort {\n * static byName(persons:Person[]) {\n * return persons.sort((p1,p2) => p1.name < p2.name ? -1 : 1)\n * }\n * ```\n */\n linkedUtil: (constructor: any) => any;\n /**\n * Used to notify LINCD.js of an ontology.\n * See also the [Ontology guides](/docs/guides/linked-code/ontologies).\n *\n * @param allFileExports - all the objects that are exported by the ontology file (use `import * as _this from \"./path-to-this-file\")`)\n * @param nameSpace - the result of [createNameSpace](/docs/lincd.js/modules/utils_NameSpace#createnamespace). This allows consumers to generate NamedNodes that may not be listed in this ontology if needed\n * @param prefixAndFileName - a suggested prefix chosen by you. Make sure the suggestedPrefix matches the file name and the name of the exported object that groups all entities together\n * @param loadDataFunction - a method that loads _and parses_ the raw ontology data. This means the ontology will be loaded into the local graph. The returned result is mostly a JSONLDParsePromise (from lincd-jsonld/JSONLD, not bundled in LINCD.js)\n * @param dataSource - the relative path to the raw data of the ontology\n * @example\n * Example of an Ontology File that used linkedOntology()\n * ```tsx\n * import {NamedNode} from 'lincd/models';\n * import {JSONLD} from 'lincd-jsonld/JSONLD';\n * import {createNameSpace} from 'lincd/utils/NameSpace';\n * import {linkedOntology} from '../package.js';\n * import * as _this from './my.js-ontology';\n *\n * let dataFile = '../data/my.js-ontology.json';\n * export var loadData = () => JSONLD.parsePromise(import(dataFile));\n *\n * export var ns = createNameSpace('http://www.my-ontology.com/');\n *\n * export var _self: NamedNode = ns('');\n *\n * // Classes\n * export var ExampleClass: NamedNode = ns('ExampleClass');\n *\n * // Properties\n * export var exampleProperty: NamedNode = ns('exampleProperty');\n *\n * export const myOntology = {\n * ExampleClass,\n * exampleProperty,\n * };\n *\n * linkedOntology(_this, ns, 'myOntology', loadData, dataFile);\n * ```\n */\n linkedOntology: (\n allFileExports,\n nameSpace: (term: string) => NodeReferenceValue,\n suggestedPrefixAndFileName: string,\n loadDataFunction?: () => Promise<any>,\n dataSource?: string | string[],\n ) => void;\n /**\n * Low level method used by other decorators to write to the modules' object in the LINCD tree.\n * You should typically not need this.\n * @param exportFileName - the file name that this exported object is available under. Needs to be unique across the module.\n * @param exportedObject - the exported object (the class, constant, function, etc)\n */\n registerPackageExport: (exportedObject: any) => void;\n\n /**\n * Get a Shape subclass registered in this package by name.\n * Returns undefined if the shape is not registered or bundled.\n *\n * Useful for avoiding circular dependencies between shapes.\n * E.g. `getOneAs(..., getPackageShape('ImageObject'))` in Thing.ts\n * avoids importing ImageObject (which extends Thing).\n */\n getPackageShape: (name: string) => ShapeConstructor | undefined;\n /**\n * A reference to the modules' object in the LINCD tree.\n * Contains all linked components of the module.\n */\n packageExports: any;\n packageName: string;\n packageMetadata: PackageMetadata;\n\n /**\n * Register a file (a javascript module) and all its exported objects.\n * Specifically helpful for registering multiple functional components if you declare them without a function name\n * @param _this\n * @param _module\n */\n registerPackageModule(_module): void;\n}\n\nexport var DEFAULT_LIMIT = 12;\n\nexport function setDefaultPageLimit(limit: number)\n{\n DEFAULT_LIMIT = limit;\n}\n\nexport function autoLoadOntologyData(value: boolean)\n{\n _autoLoadOntologyData = value;\n //this may be set to true after some ontologies have already indexed,\n if (_autoLoadOntologyData)\n {\n // so in that case we load all data of ontologies that are already indexed\n ontologies.forEach((ontologyExport) => {\n //see linkedOntology() where we store the data loading method under the _load key\n if (ontologyExport['_load'])\n {\n ontologyExport['_load']();\n }\n });\n }\n}\n\n\nexport function linkedPackage(\n packageName: string,\n options?: {baseUri?: string},\n): LinkedPackageObject\n{\n // Declare the package's publish root before any shape/metadata IRI is built.\n // The slug is derived from `packageName`; only `baseUri` is configurable — CN\n // injects a workspace-scoped root for private packages, first-party packages\n // default to linked.cm.\n setPackagePublishConfig(packageName, options);\n let packageMetadata = registerPackageMetadata(packageName);\n let packageTreeObject = registerPackageInTree(packageName);\n\n //#Create declarators for this module\n let registerPackageExport = function(object) {\n // Plan-011 §I2 interim — \"Key X was already defined\" warning silenced\n // until the duplicate-instance root cause is investigated. With Vite\n // SSR resolving workspace packages from src/, package.ts evaluates\n // twice and every export key trips this warning. The overwrite is\n // safe because the second registration is the same class.\n packageTreeObject[object.name] = object;\n };\n\n let registerInPackageTree = function(exportName,exportedObject) {\n packageTreeObject[exportName] = exportedObject;\n };\n\n function registerPackageModule(_module): void\n {\n for (var key in _module.exports)\n {\n //if the exported object itself is not named or its name is _wrappedComponent\n //then we give it the same name as it's export name.\n if (\n !_module.exports[key].name ||\n _module.exports[key].name === '_wrappedComponent'\n )\n {\n Object.defineProperty(_module.exports[key],'name',{value: key});\n //manual 'hack' to set the name of the original function\n if (\n _module.exports[key]['original'] &&\n !_module.exports[key]['original']['name']\n )\n {\n Object.defineProperty(_module.exports[key]['original'],'name',{\n value: key + '_implementation',\n });\n }\n }\n registerInPackageTree(key,_module.exports[key]);\n }\n }\n\n //create a declarator function which Components of this module can use register themselves and add themselves to the global tree\n let linkedUtil = function(constructor) {\n //add the component class of this module to the global tree\n registerPackageExport(constructor);\n\n //return the original class without modifications\n return constructor;\n };\n\n // helper that contains the previous body; applies the decorator work to a given constructor\n function applyLinkedShape<T extends typeof Shape>(\n constructor: T,\n options?: ShapeConfig,\n ): void\n {\n if(!constructor) {\n throw new Error('Constructor is undefined, skipping registration: '+constructor?.toString().substring(0,100)+' '+JSON.stringify(options));\n return;\n }\n // add the component class of this module to the global tree\n registerPackageExport(constructor);\n\n // register the component and its shape\n Shape.registerByType(constructor);\n\n // Track the un-sanitized package name on the constructor so consumers\n // (e.g. LincdServerProxy) can route backend calls using the real module\n // specifier (e.g. '@_linked/server'), not the lossy URI-sanitized form\n // ('-_linked-server' — non-recoverable via decodeURIComponent).\n if (!Object.getOwnPropertyNames(constructor).includes('packageName')) {\n (constructor as any).packageName = packageName;\n }\n\n // if no shape object has been attached to the constructor\n if (!Object.getOwnPropertyNames(constructor).includes('shape'))\n {\n // The shape's identity. An explicit name wins; otherwise the class name,\n // which is what every existing shape relies on.\n const shapeName = options?.name ?? constructor.name;\n\n // A class name ending in a digit, with no explicit name given, is almost\n // always a bundler disambiguating a collision — `BackendAPIStore2` when\n // the ontology term of the same name took the binding first. The shape\n // then registers under an IRI the rest of the system will never ask for,\n // and the only symptom is a 501 several layers away. Say so here, where\n // it is cheap and early.\n if (!options?.name && /\\d$/.test(constructor.name)) {\n console.warn(\n `[linked] Shape '${constructor.name}' in '${packageName}' has a name ending in a digit, ` +\n `which usually means a bundler renamed it to avoid a collision — often with the ` +\n `ontology term it targets. Its IRI will not match what consumers ask for. ` +\n `Pass an explicit name: @linkedShape({name: '...'}).`,\n );\n }\n\n // create a new node shape (plain metadata object) for this shapeClass\n const nodeShape: NodeShapeData = createNodeShapeData(\n getNodeShapeUri(packageName, shapeName),\n );\n // connect the typescript class to its NodeShape\n constructor.shape = nodeShape;\n // set the name\n nodeShape.label = shapeName;\n\n if (options)\n {\n if (options.description)\n {\n nodeShape.description = options.description;\n }\n if (options.dependent)\n {\n nodeShape.dependent = true;\n }\n if (options.closed !== undefined)\n {\n nodeShape.closed = options.closed;\n }\n if (options.ignoredProperties)\n {\n nodeShape.ignoredProperties = options.ignoredProperties;\n }\n }\n\n // also keep track of the reverse: nodeShape to typescript class\n addNodeShapeToShapeClass(nodeShape,constructor);\n\n //track what extends what (nodeShape level)\n const extendingShapeClass = Object.getPrototypeOf(\n constructor,\n ) as typeof Shape;\n const extendingShape = extendingShapeClass.shape;\n //if this shape class is extending something other then Shape\n if (extendingShape && !(extendingShapeClass === Shape)) {\n //store which nodeShape this nodeShape extends\n nodeShape.extends = {id: extendingShape.id};\n }\n \n\n // run deferred callbacks from property decorators\n if (constructor['shapeCallbacks'])\n {\n constructor['shapeCallbacks'].forEach((callback) => {\n callback(nodeShape);\n });\n const nodeCallbacks = getAndClearCallbacks(nodeShape.id);\n if(nodeCallbacks) {\n nodeCallbacks.forEach((callback) => {\n callback(nodeShape);\n });\n }\n delete constructor['shapeCallbacks'];\n }\n }\n else\n {\n console.warn('This ShapeClass already has a shape: ',constructor.shape);\n }\n\n if (constructor.targetClass)\n {\n (constructor.shape as NodeShapeData).targetClass = constructor.targetClass;\n }\n\n // return the original class without modifications\n // return constructor;\n }\n\n // Overloaded signatures to support both usages\n function linkedShape<T extends typeof Shape>(constructor: T): void;\n function linkedShape<T extends typeof Shape>(\n options?: ShapeConfig,\n ): (constructor: T) => void;\n function linkedShape(arg?: any): void | ((constructor: any) => void)\n {\n // usage as @linkedShape\n if (typeof arg === 'function')\n {\n applyLinkedShape(arg);\n return;\n }\n // usage as @linkedShape({...}) or @linkedShape()\n const options: ShapeConfig | undefined = arg;\n return function <T extends typeof Shape>(constructor: T): void {\n applyLinkedShape(constructor,options);\n };\n }\n\n /**\n *\n * @param exports all exports of the file, simply provide \"this\" as value!\n * @param dataSource the path leading to the ontology's data file\n * @param nameSpace the base URI of the ontology\n * @param prefixAndFileName the file name MUST match the prefix for this ontology\n */\n let linkedOntology = function(\n exports,\n nameSpace: (term: string) => NodeReferenceValue,\n prefixAndFileName: string,\n loadData?,\n dataSource?: string | string[],\n ) {\n let exportsCopy = {...exports};\n //store specifics in exports. And make sure we can detect this as an ontology later\n exportsCopy['_ns'] = nameSpace;\n exportsCopy['_prefix'] = prefixAndFileName;\n exportsCopy['_load'] = loadData;\n exportsCopy['_data'] = dataSource;\n\n //register the prefix here (so just calling linkedOntology with a prefix will automatically register that prefix)\n if (prefixAndFileName)\n {\n //run the namespace without any term name, this will give back a named node with just the namespace as URI, then get that URI to provide it as full URI\n Prefix.add(prefixAndFileName,nameSpace('').id);\n }\n\n ontologies.add(exportsCopy);\n //register all the exports under the prefix. NOTE: this means the file name HAS to match the prefix\n registerInPackageTree(prefixAndFileName,exportsCopy);\n // });\n\n if (_autoLoadOntologyData)\n {\n loadData().catch((err) => {\n console.warn(\n 'Could not load ontology data. Do you need to rebuild the module of the ' +\n prefixAndFileName +\n ' ontology?',\n err,\n );\n });\n }\n };\n\n /**\n * This method is used to get a shape class in this package by its name.\n * This can be used to avoid circular dependencies between shapes.\n * @param name\n */\n let getPackageShape = (name: string): ShapeConstructor | undefined => {\n //get the named node of the node shape first,\n //then get the shape class that defines this node shape\n return getShapeClass(\n getNodeShapeUri(packageName, name),\n );\n };\n\n //return the declarators so the module can use them\n return {\n linkedShape,\n linkedUtil,\n linkedOntology,\n registerPackageExport,\n registerPackageModule,\n getPackageShape,\n packageExports: packageTreeObject,\n packageName: packageName,\n packageMetadata,\n } as LinkedPackageObject;\n}\n\nfunction registerPackageInTree(packageName,packageExports?)\n{\n //if something with this name already registered in the global tree\n if (packageName in _linked._modules)\n {\n // Plan-011 §I2 interim — silenced until the duplicate-Linked-instance\n // root cause is investigated. Vite SSR resolving workspace packages\n // from src/ for HMR causes each package.ts to evaluate twice, so this\n // warning fired ~80x per boot. Same package, same exports — the\n // Object.assign below preserves the registry correctly.\n Object.assign(_linked._modules[packageName],packageExports);\n }\n else\n {\n //initiate an empty object for this module in the global tree\n _linked._modules[packageName] = packageExports || {};\n }\n return _linked._modules[packageName];\n}\n\nfunction registerPackageMetadata(packageName: string): PackageMetadata\n{\n if (!_linked._packages)\n {\n _linked._packages = {};\n }\n if (packageName in _linked._packages)\n {\n return _linked._packages[packageName];\n }\n const packageMetadata: PackageMetadata = {\n id: getPackageUri(packageName),\n packageName,\n type: coreOntology.Package,\n };\n _linked._packages[packageName] = packageMetadata;\n return packageMetadata;\n}\n\n\nexport function initTree()\n{\n let globalObject =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : undefined;\n // Idempotent: if the global tree is already set up (by another copy of\n // this Package.ts in the same Node process — structural under Vite SSR,\n // which evaluates the file once for its own SSR transform AND once via\n // Node's resolver when a non-Vite import path reaches @_linked/core),\n // attach to it instead of throwing. Both instances write the same\n // _modules / _packages registry shape.\n //\n // Legacy `lincd` package's Package.ts (separate file) still throws on\n // dup — that throw signals a REAL problem (legacy `lincd` should never\n // load in a clean post-eradication state).\n if (!('_linked' in globalObject))\n {\n globalObject['_linked'] = {_modules: {}, _packages: {}};\n }\n}\n\n//when this file is used, make sure the tree is initialized\ninitTree();\n\n//now that this file is set up, we can link linked shapes in the core module itself\nexport const corePackage = linkedPackage('@_linked/core');\n// NodeShape, PropertyShape and List share their names with ontology terms (shacl.NodeShape,\n// shacl.PropertyShape, rdf.List), so a bundler may rename the classes. Explicit names keep\n// their IRIs independent of that.\ncorePackage.linkedShape({\n name: 'NodeShape',\n description:\n 'Represents a SHACL NodeShape; defines constraints for a class of RDF nodes. Links to multiple PropertyShapes. (schema, constraint, class validation)',\n})(NodeShape);\ncorePackage.linkedShape({\n name: 'PropertyShape',\n description:\n 'Represents a SHACL PropertyShape; specifies rules for one property of a NodeShape (path, datatype, cardinality). (validation rule, property constraint)',\n // A property shape has no independent existence — it is owned by its NodeShape via the\n // `contains` sh:property edge, so deleting the NodeShape cascade-deletes it.\n dependent: true,\n})(PropertyShape);\n// List is registered here, by value, because PropertyShape.in below uses it as its value\n// shape. Naming it by string instead would leave it unregistered for anyone who loads the\n// SHACL metamodel without importing shapes/List (backlog 045).\ncorePackage.linkedShape({\n name: 'List',\n dependent: true,\n})(List);\n// ValidationReport / ValidationResult removed in core metadata rewrite\n\n//ALL the following is to support Shape having get/set methods with property shapes\n//and Shape itself having a nodeShape\n//if we dont need Shape to have get/set methods (like label and type) then this can be removed\n// Base Shape IRI follows the same scheme as every other core shape:\n// https://linked.cm/shape/core/Shape (corePackage above declared slug 'core').\nShape.shape = createNodeShapeData(\n getNodeShapeUri('@_linked/core', 'Shape'),\n);\naddNodeShapeToShapeClass(Shape.shape,Shape);\n\n//Here we can register the properties of the Shape class itself\n//We can't do that inside of Shape because it would cause circular dependencies\ncreatePropertyShape({\n path: rdfs.label,\n //TODO: multiple labels should be possible\n maxCount: 1,//currently get label is implemented to return a single value\n },\n 'label',\n shacl.Literal,\n Shape,\n);\ncreatePropertyShape(\n {\n path: rdf.type,\n shape: Shape,\n },\n 'type',\n shacl.IRI,\n Shape,\n);\n\ncreatePropertyShape(\n {\n path: shacl.property,\n shape: PropertyShape,\n contains: true, // a NodeShape owns its property shapes (cascade on delete)\n },\n 'properties',\n shacl.IRI,\n NodeShape,\n);\n\ncreatePropertyShape({\n path: rdfs.comment,\n maxCount: 1,\n },'description',shacl.Literal, NodeShape);\n\ncreatePropertyShape({\n path: rdf.type,\n maxCount: 1,\n shape: Shape,\n},'type',shacl.IRI, NodeShape);\n\ncreatePropertyShape(\n {\n path: shacl.targetClass,\n shape: Shape, //should be rdfs Class, but that's currently not available in LINCD. So queries currently cannot continue after accessing targetClass\n maxCount: 1,\n },\n 'targetClass',\n shacl.IRI,\n NodeShape,\n);\n\ncreatePropertyShape({\n path: shacl.targetNode,\n shape: Shape,//actually returns a NamedNode... is this correct then? Should we define or use a rdfs Class that matches the potential values?\n},'targetNode',shacl.IRI, NodeShape);\n\ncreatePropertyShape({\n path: coreOntology.isExtending,\n shape: NodeShape,\n},'extends',shacl.IRI, NodeShape);\n\n//currently path accepts multiple values, so its a multi-value property\n//these values will be consequent properties that follow each other. Other property paths are not supported yet.\ncreatePropertyShape(\n {\n // No fixed valueShape: sh:path is polymorphic (a predicate IRI, an rdf:List for a\n // sequence, or a PathNode for inverse/alt/cardinality). Omitting valueShape lets the\n // create pipeline use each value's own shape. Simple paths are passed as\n // {id} node references, complex paths as List/PathNode node-data.\n path: shacl.path,\n contains: true, // a property shape owns its complex path structure (List/PathNode)\n },\n 'path',\n shacl.IRI,\n PropertyShape,\n);\n\ncreatePropertyShape(\n {\n path: shacl.node,\n shape: NodeShape,\n maxCount: 1,\n },\n 'valueShape',\n shacl.IRI,\n PropertyShape,\n);\n\ncreatePropertyShape(\n {\n maxCount: 1,\n path: shacl.nodeKind,\n shape: Shape, //actually returns a NamedNode. Queries currently cannot continue after accessing nodeKind\n },\n 'nodeKind',\n shacl.IRI,\n PropertyShape,\n);\n\ncreatePropertyShape(\n {\n path: shacl.datatype,\n shape: Shape,\n maxCount: 1,\n },\n 'datatype',\n shacl.IRI,\n PropertyShape,\n);\n\n//PropertyShape.maxCount\ncreatePropertyShape(\n {\n path: shacl.maxCount,\n datatype: xsd.integer,\n maxCount: 1,\n },\n 'maxCount',\n shacl.Literal,\n PropertyShape,\n);\n\n//PropertyShape.minCount\ncreatePropertyShape(\n {\n path: shacl.minCount,\n datatype: xsd.integer,\n maxCount: 1,\n },\n 'minCount',\n shacl.Literal,\n PropertyShape,\n);\n\n//PropertyShape.name\ncreatePropertyShape(\n {\n path: shacl.name,\n maxCount: 1,\n },\n 'name',\n shacl.Literal,\n PropertyShape,\n);\n\n//PropertyShape.description\ncreatePropertyShape(\n {\n path: shacl.description,\n maxCount: 1,\n },\n 'description',\n shacl.Literal,\n PropertyShape,\n);\n\n// ---------------------------------------------------------------------------\n// Remaining SHACL meta-model accessors for shape serialization.\n// Labels match the PropertyShapeData / NodeShapeData fields so syncShapes() can\n// build the create-pipeline data directly. `sh:in` is owned (contains, valueShape List).\n// ---------------------------------------------------------------------------\n\n// PropertyShape.class\ncreatePropertyShape(\n {path: shacl.class, shape: Shape, maxCount: 1},\n 'class',\n shacl.IRI,\n PropertyShape,\n);\n\n// PropertyShape.in → an rdf:List (owned)\ncreatePropertyShape(\n {path: shacl.in, shape: List, maxCount: 1, contains: true},\n 'in',\n shacl.IRI,\n PropertyShape,\n);\n\n// PropertyShape pair constraints (values are property IRIs)\n// Labelled `equalsConstraint`, not `equals`: `equals` is a query-builder method, so a\n// property under that label is unreachable through the DSL (backlog 041). The name also\n// matches the `PropertyShapeData` field. The predicate stays sh:equals.\ncreatePropertyShape({path: shacl.equals, shape: Shape, maxCount: 1}, 'equalsConstraint', shacl.IRI, PropertyShape);\ncreatePropertyShape({path: shacl.disjoint, shape: Shape, maxCount: 1}, 'disjoint', shacl.IRI, PropertyShape);\ncreatePropertyShape({path: shacl.lessThan, shape: Shape, maxCount: 1}, 'lessThan', shacl.IRI, PropertyShape);\ncreatePropertyShape(\n {path: shacl.lessThanOrEquals, shape: Shape, maxCount: 1},\n 'lessThanOrEquals',\n shacl.IRI,\n PropertyShape,\n);\n\n// PropertyShape.hasValue (literal or IRI — generic)\ncreatePropertyShape({path: shacl.hasValue, maxCount: 1}, 'hasValue', null, PropertyShape);\n\n// PropertyShape.defaultValue (literal or IRI — generic, mirrors hasValue).\n// getResult() already emits `defaultValue`, but without this registration the\n// property is not queryable and a query referencing it throws before executing.\ncreatePropertyShape({path: shacl.defaultValue, maxCount: 1}, 'defaultValue', null, PropertyShape);\n\n// PropertyShape value-range / string-length / pattern constraints (report 021 §3, G5).\n// The range constraints carry no fixed datatype — the literal is typed from the JS value\n// (integer/double), mirroring the constrained property's own datatype. Length is an integer;\n// pattern is the regex source string.\ncreatePropertyShape({path: shacl.minInclusive, maxCount: 1}, 'minInclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape({path: shacl.maxInclusive, maxCount: 1}, 'maxInclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape({path: shacl.minExclusive, maxCount: 1}, 'minExclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape({path: shacl.maxExclusive, maxCount: 1}, 'maxExclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape(\n {path: shacl.minLength, datatype: xsd.integer, maxCount: 1},\n 'minLength',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape(\n {path: shacl.maxLength, datatype: xsd.integer, maxCount: 1},\n 'maxLength',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape(\n {path: shacl.pattern, datatype: xsd.string, maxCount: 1},\n 'pattern',\n shacl.Literal,\n PropertyShape,\n);\n\n// PropertyShape.order / group\ncreatePropertyShape(\n {path: shacl.order, datatype: xsd.integer, maxCount: 1},\n 'order',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape({path: shacl.group, maxCount: 1}, 'group', shacl.Literal, PropertyShape);\n\n// PropertyShape.displayRank / displayHidden (linked_core: display vocabulary).\n// These materialize onto the pure sh:NodeShape and so travel with an ejected app.\ncreatePropertyShape(\n {path: coreOntology.displayRank, datatype: xsd.integer, maxCount: 1},\n 'displayRank',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape(\n {path: coreOntology.displayHidden, datatype: xsd.boolean, maxCount: 1},\n 'displayHidden',\n shacl.Literal,\n PropertyShape,\n);\n\n// PropertyShape.contains (linked_core:contains — persists the composition flag)\ncreatePropertyShape(\n {path: coreOntology.contains, datatype: xsd.boolean, maxCount: 1},\n 'contains',\n shacl.Literal,\n PropertyShape,\n);\n\n// NodeShape.closed / ignoredProperties / dependent\ncreatePropertyShape(\n {path: shacl.closed, datatype: xsd.boolean, maxCount: 1},\n 'closed',\n shacl.Literal,\n NodeShape,\n);\ncreatePropertyShape(\n {path: shacl.ignoredProperties, shape: Shape},\n 'ignoredProperties',\n shacl.IRI,\n NodeShape,\n);\ncreatePropertyShape(\n {path: coreOntology.dependent, datatype: xsd.boolean, maxCount: 1},\n 'dependent',\n shacl.Literal,\n NodeShape,\n);\n"]}
|
|
1
|
+
{"version":3,"file":"Package.js","sourceRoot":"","sources":["../../../src/utils/Package.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\nimport {\n createPropertyShape,\n getAndClearCallbacks,\n getNodeShapeUri,\n getPackageUri,\n setPackagePublishConfig,\n NodeShape,\n PropertyShape,\n} from '../shapes/SHACL.js';\nimport {createNodeShapeData, type NodeShapeData} from '../shapes/nodeShapeData.js';\nimport {Shape, type ShapeConstructor} from '../shapes/Shape.js';\nimport {List} from '../shapes/List.class.js';\nimport {Prefix} from './Prefix.js';\nimport {coreOntology} from '../ontologies/linked-core.js';\nimport {rdf} from '../ontologies/rdf.js';\nimport {addNodeShapeToShapeClass,getShapeClass} from './ShapeClass.js';\nimport {shacl} from '../ontologies/shacl.js';\nimport {rdfs} from '../ontologies/rdfs.js';\nimport {xsd} from '../ontologies/xsd.js';\nimport type {NodeReferenceValue} from './NodeReference.js';\n\n//global tree\ndeclare var _linked: any;\ndeclare var window;\ndeclare var global;\n\n\n// var packageParsePromises: Map<string,Promise<any>> = new Map();\n// var loadedPackages: Set<NamedNode> = new Set();\nlet ontologies: Set<any> = new Set();\nlet _autoLoadOntologyData = false;\n/**\n * a map of requested property shapes for specific nodes\n * The value is a promise if it's still loading, or true if it is fully loaded\n */\n// type ClassDecorator = <T extends {new (...args: any[]): {}}>(\n// constructor: T,\n// ) => T;\n\nexport type ShapeConfig = {\n /**\n * The name this shape is identified by, overriding the class name.\n *\n * A shape's IRI is `<baseUri>shape/<package>/<name>`, and `Server.call`\n * routes on it — so the name is persisted data, not a label. Taking it from\n * `constructor.name` couples that data to how the code was compiled: a\n * minifier renames the class, and so does a plain name collision, because a\n * shape and the ontology term it targets deliberately share a name. Either\n * one silently changes what the shape *is*.\n *\n * Optional, and defaults to `constructor.name`, so existing shapes are\n * unaffected. Set it where the identity has to outlive the build.\n */\n name?: string;\n /**\n * A short description of the shape, what it represents and what it is used for.\n * will be stored as rdfs:comment on the shape node\n */\n description?: string;\n /**\n * Marks this shape's instances as *dependent* (composition / no independent existence):\n * they may be cascade-deleted when reached through a `contains` property.\n */\n dependent?: boolean;\n /**\n * Close the shape (sh:closed): target nodes with properties outside this shape are invalid.\n */\n closed?: boolean;\n /**\n * Properties permitted in addition to the declared ones when the shape is closed\n * (sh:ignoredProperties).\n */\n ignoredProperties?: NodeReferenceValue[];\n};\n\nexport type PackageMetadata = {\n id: string;\n packageName: string;\n type: NodeReferenceValue;\n};\n\n/**\n * This object, returned by [linkedPackage()](/docs/lincd.js/modules/utils_Module#linkedPackage),\n * contains the decorators to link different parts of a LINCD module.\n */\nexport interface LinkedPackageObject\n{\n /**\n * Links a typescript class to a SHACL shape.\n * This decorator creates a SHACL shape and looks at the static property [targetClass](/docs/lincd.js/classes/shapes_Shape.Shape#targetclass)\n * The rest of the shape is typically 'shaped' by methods that use [property decorators](/docs/lincd.js/modules/utils_ShapeDecorators).\n *\n * @example\n * Example of a typescript class using the \\@linkedShape decorator:\n * ```tsx\n * @linkedShape\n * export class Person extends Shape { ... }\n * ```\n * Or with options:\n * ```tsx\n * @linkedShape({ description: \"...\" })\n * export class Person extends Shape { ... }\n * ```\n */\n linkedShape: {\n <T extends typeof Shape>(constructor: T): void;\n <T extends typeof Shape>(config?: ShapeConfig): (constructor: T) => void;\n };\n /**\n * Use this decorator to make any other classes or functions available on demand to other LINCD modules.\n * It does not change the object it is applied on.\n * This is specifically required for their use in an open-ended LINCD application.\n *\n * @example\n * An example helper utility using the \\@linkedUtil decorator:\n * ```tsx\n * @linkedUtil\n * export class Sort {\n * static byName(persons:Person[]) {\n * return persons.sort((p1,p2) => p1.name < p2.name ? -1 : 1)\n * }\n * ```\n */\n linkedUtil: (constructor: any) => any;\n /**\n * Used to notify LINCD.js of an ontology.\n * See also the [Ontology guides](/docs/guides/linked-code/ontologies).\n *\n * @param allFileExports - all the objects that are exported by the ontology file (use `import * as _this from \"./path-to-this-file\")`)\n * @param nameSpace - the result of [createNameSpace](/docs/lincd.js/modules/utils_NameSpace#createnamespace). This allows consumers to generate NamedNodes that may not be listed in this ontology if needed\n * @param prefixAndFileName - a suggested prefix chosen by you. Make sure the suggestedPrefix matches the file name and the name of the exported object that groups all entities together\n * @param loadDataFunction - a method that loads _and parses_ the raw ontology data. This means the ontology will be loaded into the local graph. The returned result is mostly a JSONLDParsePromise (from lincd-jsonld/JSONLD, not bundled in LINCD.js)\n * @param dataSource - the relative path to the raw data of the ontology\n * @example\n * Example of an Ontology File that used linkedOntology()\n * ```tsx\n * import {NamedNode} from 'lincd/models';\n * import {JSONLD} from 'lincd-jsonld/JSONLD';\n * import {createNameSpace} from 'lincd/utils/NameSpace';\n * import {linkedOntology} from '../package.js';\n * import * as _this from './my.js-ontology';\n *\n * let dataFile = '../data/my.js-ontology.json';\n * export var loadData = () => JSONLD.parsePromise(import(dataFile));\n *\n * export var ns = createNameSpace('http://www.my-ontology.com/');\n *\n * export var _self: NamedNode = ns('');\n *\n * // Classes\n * export var ExampleClass: NamedNode = ns('ExampleClass');\n *\n * // Properties\n * export var exampleProperty: NamedNode = ns('exampleProperty');\n *\n * export const myOntology = {\n * ExampleClass,\n * exampleProperty,\n * };\n *\n * linkedOntology(_this, ns, 'myOntology', loadData, dataFile);\n * ```\n */\n linkedOntology: (\n allFileExports,\n nameSpace: (term: string) => NodeReferenceValue,\n suggestedPrefixAndFileName: string,\n loadDataFunction?: () => Promise<any>,\n dataSource?: string | string[],\n ) => void;\n /**\n * Low level method used by other decorators to write to the modules' object in the LINCD tree.\n * You should typically not need this.\n * @param exportFileName - the file name that this exported object is available under. Needs to be unique across the module.\n * @param exportedObject - the exported object (the class, constant, function, etc)\n */\n registerPackageExport: (exportedObject: any) => void;\n\n /**\n * Get a Shape subclass registered in this package by name.\n * Returns undefined if the shape is not registered or bundled.\n *\n * Useful for avoiding circular dependencies between shapes.\n * E.g. `getOneAs(..., getPackageShape('ImageObject'))` in Thing.ts\n * avoids importing ImageObject (which extends Thing).\n */\n getPackageShape: (name: string) => ShapeConstructor | undefined;\n /**\n * A reference to the modules' object in the LINCD tree.\n * Contains all linked components of the module.\n */\n packageExports: any;\n packageName: string;\n packageMetadata: PackageMetadata;\n\n /**\n * Register a file (a javascript module) and all its exported objects.\n * Specifically helpful for registering multiple functional components if you declare them without a function name\n * @param _this\n * @param _module\n */\n registerPackageModule(_module): void;\n}\n\nexport var DEFAULT_LIMIT = 12;\n\nexport function setDefaultPageLimit(limit: number)\n{\n DEFAULT_LIMIT = limit;\n}\n\nexport function autoLoadOntologyData(value: boolean)\n{\n _autoLoadOntologyData = value;\n //this may be set to true after some ontologies have already indexed,\n if (_autoLoadOntologyData)\n {\n // so in that case we load all data of ontologies that are already indexed\n ontologies.forEach((ontologyExport) => {\n //see linkedOntology() where we store the data loading method under the _load key\n if (ontologyExport['_load'])\n {\n ontologyExport['_load']();\n }\n });\n }\n}\n\n\nexport function linkedPackage(\n packageName: string,\n options?: {baseUri?: string},\n): LinkedPackageObject\n{\n // Declare the package's publish root before any shape/metadata IRI is built.\n // The slug is derived from `packageName`; only `baseUri` is configurable — CN\n // injects a workspace-scoped root for private packages, first-party packages\n // default to linked.cm.\n setPackagePublishConfig(packageName, options);\n let packageMetadata = registerPackageMetadata(packageName);\n let packageTreeObject = registerPackageInTree(packageName);\n\n //#Create declarators for this module\n let registerPackageExport = function(object) {\n // Plan-011 §I2 interim — \"Key X was already defined\" warning silenced\n // until the duplicate-instance root cause is investigated. With Vite\n // SSR resolving workspace packages from src/, package.ts evaluates\n // twice and every export key trips this warning. The overwrite is\n // safe because the second registration is the same class.\n packageTreeObject[object.name] = object;\n };\n\n let registerInPackageTree = function(exportName,exportedObject) {\n packageTreeObject[exportName] = exportedObject;\n };\n\n function registerPackageModule(_module): void\n {\n for (var key in _module.exports)\n {\n //if the exported object itself is not named or its name is _wrappedComponent\n //then we give it the same name as it's export name.\n if (\n !_module.exports[key].name ||\n _module.exports[key].name === '_wrappedComponent'\n )\n {\n Object.defineProperty(_module.exports[key],'name',{value: key});\n //manual 'hack' to set the name of the original function\n if (\n _module.exports[key]['original'] &&\n !_module.exports[key]['original']['name']\n )\n {\n Object.defineProperty(_module.exports[key]['original'],'name',{\n value: key + '_implementation',\n });\n }\n }\n registerInPackageTree(key,_module.exports[key]);\n }\n }\n\n //create a declarator function which Components of this module can use register themselves and add themselves to the global tree\n let linkedUtil = function(constructor) {\n //add the component class of this module to the global tree\n registerPackageExport(constructor);\n\n //return the original class without modifications\n return constructor;\n };\n\n // helper that contains the previous body; applies the decorator work to a given constructor\n function applyLinkedShape<T extends typeof Shape>(\n constructor: T,\n options?: ShapeConfig,\n ): void\n {\n if(!constructor) {\n throw new Error('Constructor is undefined, skipping registration: '+constructor?.toString().substring(0,100)+' '+JSON.stringify(options));\n return;\n }\n // add the component class of this module to the global tree\n registerPackageExport(constructor);\n\n // register the component and its shape\n Shape.registerByType(constructor);\n\n // Track the un-sanitized package name on the constructor so consumers\n // (e.g. LincdServerProxy) can route backend calls using the real module\n // specifier (e.g. '@_linked/server'), not the lossy URI-sanitized form\n // ('-_linked-server' — non-recoverable via decodeURIComponent).\n if (!Object.getOwnPropertyNames(constructor).includes('packageName')) {\n (constructor as any).packageName = packageName;\n }\n\n // if no shape object has been attached to the constructor\n if (!Object.getOwnPropertyNames(constructor).includes('shape'))\n {\n // The shape's identity. An explicit name wins; otherwise the class name,\n // which is what every existing shape relies on.\n const shapeName = options?.name ?? constructor.name;\n\n // A class name ending in a digit, with no explicit name given, is almost\n // always a bundler disambiguating a collision — `BackendAPIStore2` when\n // the ontology term of the same name took the binding first. The shape\n // then registers under an IRI the rest of the system will never ask for,\n // and the only symptom is a 501 several layers away. Say so here, where\n // it is cheap and early.\n if (!options?.name && /\\d$/.test(constructor.name)) {\n console.warn(\n `[linked] Shape '${constructor.name}' in '${packageName}' has a name ending in a digit, ` +\n `which usually means a bundler renamed it to avoid a collision — often with the ` +\n `ontology term it targets. Its IRI will not match what consumers ask for. ` +\n `Pass an explicit name: @linkedShape({name: '...'}).`,\n );\n }\n\n // create a new node shape (plain metadata object) for this shapeClass\n const nodeShape: NodeShapeData = createNodeShapeData(\n getNodeShapeUri(packageName, shapeName),\n );\n // connect the typescript class to its NodeShape\n constructor.shape = nodeShape;\n // set the name\n nodeShape.label = shapeName;\n\n if (options)\n {\n if (options.description)\n {\n nodeShape.description = options.description;\n }\n if (options.dependent)\n {\n nodeShape.dependent = true;\n }\n if (options.closed !== undefined)\n {\n nodeShape.closed = options.closed;\n }\n if (options.ignoredProperties)\n {\n nodeShape.ignoredProperties = options.ignoredProperties;\n }\n }\n\n // also keep track of the reverse: nodeShape to typescript class\n addNodeShapeToShapeClass(nodeShape,constructor);\n\n //track what extends what (nodeShape level)\n const extendingShapeClass = Object.getPrototypeOf(\n constructor,\n ) as typeof Shape;\n const extendingShape = extendingShapeClass.shape;\n //if this shape class is extending something other then Shape\n if (extendingShape && !(extendingShapeClass === Shape)) {\n //store which nodeShape this nodeShape extends\n nodeShape.extends = {id: extendingShape.id};\n }\n \n\n // run deferred callbacks from property decorators\n if (constructor['shapeCallbacks'])\n {\n constructor['shapeCallbacks'].forEach((callback) => {\n callback(nodeShape);\n });\n const nodeCallbacks = getAndClearCallbacks(nodeShape.id);\n if(nodeCallbacks) {\n nodeCallbacks.forEach((callback) => {\n callback(nodeShape);\n });\n }\n delete constructor['shapeCallbacks'];\n }\n }\n else\n {\n console.warn('This ShapeClass already has a shape: ',constructor.shape);\n }\n\n if (constructor.targetClass)\n {\n (constructor.shape as NodeShapeData).targetClass = constructor.targetClass;\n }\n\n // return the original class without modifications\n // return constructor;\n }\n\n // Overloaded signatures to support both usages\n function linkedShape<T extends typeof Shape>(constructor: T): void;\n function linkedShape<T extends typeof Shape>(\n options?: ShapeConfig,\n ): (constructor: T) => void;\n function linkedShape(arg?: any): void | ((constructor: any) => void)\n {\n // usage as @linkedShape\n if (typeof arg === 'function')\n {\n applyLinkedShape(arg);\n return;\n }\n // usage as @linkedShape({...}) or @linkedShape()\n const options: ShapeConfig | undefined = arg;\n return function <T extends typeof Shape>(constructor: T): void {\n applyLinkedShape(constructor,options);\n };\n }\n\n /**\n *\n * @param exports all exports of the file, simply provide \"this\" as value!\n * @param dataSource the path leading to the ontology's data file\n * @param nameSpace the base URI of the ontology\n * @param prefixAndFileName the file name MUST match the prefix for this ontology\n */\n let linkedOntology = function(\n exports,\n nameSpace: (term: string) => NodeReferenceValue,\n prefixAndFileName: string,\n loadData?,\n dataSource?: string | string[],\n ) {\n let exportsCopy = {...exports};\n //store specifics in exports. And make sure we can detect this as an ontology later\n exportsCopy['_ns'] = nameSpace;\n exportsCopy['_prefix'] = prefixAndFileName;\n exportsCopy['_load'] = loadData;\n exportsCopy['_data'] = dataSource;\n\n //register the prefix here (so just calling linkedOntology with a prefix will automatically register that prefix)\n if (prefixAndFileName)\n {\n //run the namespace without any term name, this will give back a named node with just the namespace as URI, then get that URI to provide it as full URI\n Prefix.add(prefixAndFileName,nameSpace('').id);\n }\n\n ontologies.add(exportsCopy);\n //register all the exports under the prefix. NOTE: this means the file name HAS to match the prefix\n registerInPackageTree(prefixAndFileName,exportsCopy);\n // });\n\n if (_autoLoadOntologyData)\n {\n loadData().catch((err) => {\n console.warn(\n 'Could not load ontology data. Do you need to rebuild the module of the ' +\n prefixAndFileName +\n ' ontology?',\n err,\n );\n });\n }\n };\n\n /**\n * This method is used to get a shape class in this package by its name.\n * This can be used to avoid circular dependencies between shapes.\n * @param name\n */\n let getPackageShape = (name: string): ShapeConstructor | undefined => {\n //get the named node of the node shape first,\n //then get the shape class that defines this node shape\n return getShapeClass(\n getNodeShapeUri(packageName, name),\n );\n };\n\n //return the declarators so the module can use them\n return {\n linkedShape,\n linkedUtil,\n linkedOntology,\n registerPackageExport,\n registerPackageModule,\n getPackageShape,\n packageExports: packageTreeObject,\n packageName: packageName,\n packageMetadata,\n } as LinkedPackageObject;\n}\n\nfunction registerPackageInTree(packageName,packageExports?)\n{\n //if something with this name already registered in the global tree\n if (packageName in _linked._modules)\n {\n // Plan-011 §I2 interim — silenced until the duplicate-Linked-instance\n // root cause is investigated. Vite SSR resolving workspace packages\n // from src/ for HMR causes each package.ts to evaluate twice, so this\n // warning fired ~80x per boot. Same package, same exports — the\n // Object.assign below preserves the registry correctly.\n Object.assign(_linked._modules[packageName],packageExports);\n }\n else\n {\n //initiate an empty object for this module in the global tree\n _linked._modules[packageName] = packageExports || {};\n }\n return _linked._modules[packageName];\n}\n\nfunction registerPackageMetadata(packageName: string): PackageMetadata\n{\n if (!_linked._packages)\n {\n _linked._packages = {};\n }\n if (packageName in _linked._packages)\n {\n return _linked._packages[packageName];\n }\n const packageMetadata: PackageMetadata = {\n id: getPackageUri(packageName),\n packageName,\n type: coreOntology.Package,\n };\n _linked._packages[packageName] = packageMetadata;\n return packageMetadata;\n}\n\n\nexport function initTree()\n{\n let globalObject =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : undefined;\n // Idempotent: if the global tree is already set up (by another copy of\n // this Package.ts in the same Node process — structural under Vite SSR,\n // which evaluates the file once for its own SSR transform AND once via\n // Node's resolver when a non-Vite import path reaches @_linked/core),\n // attach to it instead of throwing. Both instances write the same\n // _modules / _packages registry shape.\n //\n // Legacy `lincd` package's Package.ts (separate file) still throws on\n // dup — that throw signals a REAL problem (legacy `lincd` should never\n // load in a clean post-eradication state).\n if (!('_linked' in globalObject))\n {\n globalObject['_linked'] = {_modules: {}, _packages: {}};\n }\n}\n\n//when this file is used, make sure the tree is initialized\ninitTree();\n\n//now that this file is set up, we can link linked shapes in the core module itself\nexport const corePackage = linkedPackage('@_linked/core');\n// NodeShape, PropertyShape and List share their names with ontology terms (shacl.NodeShape,\n// shacl.PropertyShape, rdf.List), so a bundler may rename the classes. Explicit names keep\n// their IRIs independent of that.\ncorePackage.linkedShape({\n name: 'NodeShape',\n description:\n 'Represents a SHACL NodeShape; defines constraints for a class of RDF nodes. Links to multiple PropertyShapes. (schema, constraint, class validation)',\n})(NodeShape);\ncorePackage.linkedShape({\n name: 'PropertyShape',\n description:\n 'Represents a SHACL PropertyShape; specifies rules for one property of a NodeShape (path, datatype, cardinality). (validation rule, property constraint)',\n // A property shape has no independent existence — it is owned by its NodeShape via the\n // `contains` sh:property edge, so deleting the NodeShape cascade-deletes it.\n dependent: true,\n})(PropertyShape);\n// List is registered here, by value, because PropertyShape.in below uses it as its value\n// shape. Naming it by string instead would leave it unregistered for anyone who loads the\n// SHACL metamodel without importing shapes/List (backlog 045).\ncorePackage.linkedShape({\n name: 'List',\n dependent: true,\n})(List);\n// ValidationReport / ValidationResult removed in core metadata rewrite\n\n//ALL the following is to support Shape having get/set methods with property shapes\n//and Shape itself having a nodeShape\n//if we dont need Shape to have get/set methods (like label and type) then this can be removed\n// Base Shape IRI follows the same scheme as every other core shape:\n// https://linked.cm/shape/core/Shape (corePackage above declared slug 'core').\nShape.shape = createNodeShapeData(\n getNodeShapeUri('@_linked/core', 'Shape'),\n);\naddNodeShapeToShapeClass(Shape.shape,Shape);\n\n//Here we can register the properties of the Shape class itself\n//We can't do that inside of Shape because it would cause circular dependencies\ncreatePropertyShape({\n path: rdfs.label,\n //TODO: multiple labels should be possible\n maxCount: 1,//currently get label is implemented to return a single value\n },\n 'label',\n shacl.Literal,\n Shape,\n);\ncreatePropertyShape(\n {\n path: rdf.type,\n shape: Shape,\n },\n 'type',\n shacl.IRI,\n Shape,\n);\n\ncreatePropertyShape(\n {\n path: shacl.property,\n shape: PropertyShape,\n contains: true, // a NodeShape owns its property shapes (cascade on delete)\n },\n 'properties',\n shacl.IRI,\n NodeShape,\n);\n\ncreatePropertyShape({\n path: rdfs.comment,\n maxCount: 1,\n },'description',shacl.Literal, NodeShape);\n\ncreatePropertyShape({\n path: rdf.type,\n maxCount: 1,\n shape: Shape,\n},'type',shacl.IRI, NodeShape);\n\ncreatePropertyShape(\n {\n path: shacl.targetClass,\n shape: Shape, //should be rdfs Class, but that's currently not available in LINCD. So queries currently cannot continue after accessing targetClass\n maxCount: 1,\n },\n 'targetClass',\n shacl.IRI,\n NodeShape,\n);\n\ncreatePropertyShape({\n path: shacl.targetNode,\n shape: Shape,//actually returns a NamedNode... is this correct then? Should we define or use a rdfs Class that matches the potential values?\n},'targetNode',shacl.IRI, NodeShape);\n\ncreatePropertyShape({\n path: coreOntology.isExtending,\n shape: NodeShape,\n},'extends',shacl.IRI, NodeShape);\n\n//currently path accepts multiple values, so its a multi-value property\n//these values will be consequent properties that follow each other. Other property paths are not supported yet.\ncreatePropertyShape(\n {\n // No fixed valueShape: sh:path is polymorphic (a predicate IRI, an rdf:List for a\n // sequence, or a PathNode for inverse/alt/cardinality). Omitting valueShape lets the\n // create pipeline use each value's own shape. Simple paths are passed as\n // {id} node references, complex paths as List/PathNode node-data.\n path: shacl.path,\n contains: true, // a property shape owns its complex path structure (List/PathNode)\n },\n 'path',\n shacl.IRI,\n PropertyShape,\n);\n\ncreatePropertyShape(\n {\n path: shacl.node,\n shape: NodeShape,\n maxCount: 1,\n },\n 'valueShape',\n shacl.IRI,\n PropertyShape,\n);\n\ncreatePropertyShape(\n {\n maxCount: 1,\n path: shacl.nodeKind,\n shape: Shape, //actually returns a NamedNode. Queries currently cannot continue after accessing nodeKind\n },\n 'nodeKind',\n shacl.IRI,\n PropertyShape,\n);\n\ncreatePropertyShape(\n {\n path: shacl.datatype,\n shape: Shape,\n maxCount: 1,\n },\n 'datatype',\n shacl.IRI,\n PropertyShape,\n);\n\n//PropertyShape.maxCount\ncreatePropertyShape(\n {\n path: shacl.maxCount,\n datatype: xsd.integer,\n maxCount: 1,\n },\n 'maxCount',\n shacl.Literal,\n PropertyShape,\n);\n\n//PropertyShape.minCount\ncreatePropertyShape(\n {\n path: shacl.minCount,\n datatype: xsd.integer,\n maxCount: 1,\n },\n 'minCount',\n shacl.Literal,\n PropertyShape,\n);\n\n//PropertyShape.name\ncreatePropertyShape(\n {\n path: shacl.name,\n maxCount: 1,\n },\n 'name',\n shacl.Literal,\n PropertyShape,\n);\n\n//PropertyShape.description\ncreatePropertyShape(\n {\n path: shacl.description,\n maxCount: 1,\n },\n 'description',\n shacl.Literal,\n PropertyShape,\n);\n\n// ---------------------------------------------------------------------------\n// Remaining SHACL meta-model accessors for shape serialization.\n// Labels match the PropertyShapeData / NodeShapeData fields so syncShapes() can\n// build the create-pipeline data directly. `sh:in` is owned (contains, valueShape List).\n// ---------------------------------------------------------------------------\n\n// PropertyShape.class\ncreatePropertyShape(\n {path: shacl.class, shape: Shape, maxCount: 1},\n 'class',\n shacl.IRI,\n PropertyShape,\n);\n\n// PropertyShape.in → an rdf:List (owned)\ncreatePropertyShape(\n {path: shacl.in, shape: List, maxCount: 1, contains: true},\n 'in',\n shacl.IRI,\n PropertyShape,\n);\n\n// PropertyShape pair constraints (values are property IRIs)\n// Labelled `equalsConstraint`, not `equals`: `equals` is a query-builder method, so a\n// property under that label is unreachable through the DSL (backlog 041). The name also\n// matches the `PropertyShapeData` field. The predicate stays sh:equals.\ncreatePropertyShape({path: shacl.equals, shape: Shape, maxCount: 1}, 'equalsConstraint', shacl.IRI, PropertyShape);\ncreatePropertyShape({path: shacl.disjoint, shape: Shape, maxCount: 1}, 'disjoint', shacl.IRI, PropertyShape);\ncreatePropertyShape({path: shacl.lessThan, shape: Shape, maxCount: 1}, 'lessThan', shacl.IRI, PropertyShape);\ncreatePropertyShape(\n {path: shacl.lessThanOrEquals, shape: Shape, maxCount: 1},\n 'lessThanOrEquals',\n shacl.IRI,\n PropertyShape,\n);\n\n// PropertyShape.hasValue (literal or IRI — generic)\ncreatePropertyShape({path: shacl.hasValue, maxCount: 1}, 'hasValue', null, PropertyShape);\n\n// PropertyShape.defaultValue (literal or IRI — generic, mirrors hasValue).\n// getResult() already emits `defaultValue`, but without this registration the\n// property is not queryable and a query referencing it throws before executing.\ncreatePropertyShape({path: shacl.defaultValue, maxCount: 1}, 'defaultValue', null, PropertyShape);\n\n// PropertyShape value-range / string-length / pattern constraints (report 021 §3, G5).\n// The range constraints carry no fixed datatype — the literal is typed from the JS value\n// (integer/double), mirroring the constrained property's own datatype. Length is an integer;\n// pattern is the regex source string.\ncreatePropertyShape({path: shacl.minInclusive, maxCount: 1}, 'minInclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape({path: shacl.maxInclusive, maxCount: 1}, 'maxInclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape({path: shacl.minExclusive, maxCount: 1}, 'minExclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape({path: shacl.maxExclusive, maxCount: 1}, 'maxExclusive', shacl.Literal, PropertyShape);\ncreatePropertyShape(\n {path: shacl.minLength, datatype: xsd.integer, maxCount: 1},\n 'minLength',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape(\n {path: shacl.maxLength, datatype: xsd.integer, maxCount: 1},\n 'maxLength',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape(\n {path: shacl.pattern, datatype: xsd.string, maxCount: 1},\n 'pattern',\n shacl.Literal,\n PropertyShape,\n);\n\n// PropertyShape.order / group\ncreatePropertyShape(\n {path: shacl.order, datatype: xsd.integer, maxCount: 1},\n 'order',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape({path: shacl.group, maxCount: 1}, 'group', shacl.Literal, PropertyShape);\n\n// PropertyShape.displayRank / displayHidden (core: display vocabulary).\n// These materialize onto the pure sh:NodeShape and so travel with an ejected app.\ncreatePropertyShape(\n {path: coreOntology.displayRank, datatype: xsd.integer, maxCount: 1},\n 'displayRank',\n shacl.Literal,\n PropertyShape,\n);\ncreatePropertyShape(\n {path: coreOntology.displayHidden, datatype: xsd.boolean, maxCount: 1},\n 'displayHidden',\n shacl.Literal,\n PropertyShape,\n);\n\n// PropertyShape.contains (core:contains — persists the composition flag)\ncreatePropertyShape(\n {path: coreOntology.contains, datatype: xsd.boolean, maxCount: 1},\n 'contains',\n shacl.Literal,\n PropertyShape,\n);\n\n// NodeShape.closed / ignoredProperties / dependent\ncreatePropertyShape(\n {path: shacl.closed, datatype: xsd.boolean, maxCount: 1},\n 'closed',\n shacl.Literal,\n NodeShape,\n);\ncreatePropertyShape(\n {path: shacl.ignoredProperties, shape: Shape},\n 'ignoredProperties',\n shacl.IRI,\n NodeShape,\n);\ncreatePropertyShape(\n {path: coreOntology.dependent, datatype: xsd.boolean, maxCount: 1},\n 'dependent',\n shacl.Literal,\n NodeShape,\n);\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Shape, type ShapeConstructor } from '../shapes/Shape.js';
|
|
2
2
|
import { type NodeShapeData, type PropertyShapeData } from '../shapes/nodeShapeData.js';
|
|
3
|
+
import type { NodeShapeWire } from '../shapes/nodeShapeWire.js';
|
|
3
4
|
import type { ICoreIterable } from '../interfaces/ICoreIterable.js';
|
|
4
5
|
import type { NodeReferenceValue } from './NodeReference.js';
|
|
5
6
|
/** How many distinct copies of this module are loaded. One is expected. */
|
|
@@ -72,6 +73,31 @@ export declare function getSuperShapes(shape: ShapeLike): NodeShapeData[];
|
|
|
72
73
|
export declare function getSubShapes(shape: ShapeLike): NodeShapeData[];
|
|
73
74
|
/** True when `a` extends `b` (strictly — a shape is not a sub-shape of itself). */
|
|
74
75
|
export declare function isSubShapeOf(a: ShapeLike, b: ShapeLike): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* The class a shape's instances are typed with: its own `targetClass`, else the first one
|
|
78
|
+
* found through what it extends. `undefined` when there is none anywhere in the chain.
|
|
79
|
+
*
|
|
80
|
+
* Accepts a shape IRI, a `{id}` reference, a shape's metadata (data or wire form) or a shape
|
|
81
|
+
* class. Pass `shapes` to resolve the shape — and what it extends — in that set before the
|
|
82
|
+
* registry; a project's catalog may hold shapes the registry does not.
|
|
83
|
+
*/
|
|
84
|
+
export declare function getTargetClassId(shape: ShapeLike | NodeShapeWire | {
|
|
85
|
+
id: string;
|
|
86
|
+
}, shapes?: Iterable<NodeShapeData | NodeShapeWire>): string | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* The least specific shapes whose effective targetClass (own, or inherited through
|
|
89
|
+
* `extends`) is exactly `classIri`, sorted by id. A matching shape that extends another
|
|
90
|
+
* match is left out, so one entry means the class has one root shape and more than one
|
|
91
|
+
* means unrelated roots compete for it. Sub-shapes are never chosen for a class alone.
|
|
92
|
+
*
|
|
93
|
+
* With no `shapes`, the candidates are the registered shapes. Pass `shapes` to choose among
|
|
94
|
+
* that set only — the registry also holds compiled framework shapes, and a project's
|
|
95
|
+
* `schema:Person` relation should resolve to the project's shape, not to one a framework
|
|
96
|
+
* package happens to register for the same class. Inheritance is still resolved through
|
|
97
|
+
* the registry when a candidate extends a shape outside the set.
|
|
98
|
+
*/
|
|
99
|
+
export declare function getShapesForTargetClass(classIri: string): NodeShapeData[];
|
|
100
|
+
export declare function getShapesForTargetClass<S extends NodeShapeData | NodeShapeWire>(classIri: string, shapes: Iterable<S>): S[];
|
|
75
101
|
export declare function addNodeShapeToShapeClass(nodeShape: NodeShapeData, shapeClass: typeof Shape): void;
|
|
76
102
|
/**
|
|
77
103
|
* The constructor for a shape IRI — an authored class if there is one, otherwise one
|
|
@@ -136,6 +136,7 @@ function invalidateRegistryCaches() {
|
|
|
136
136
|
subShapesCache.clear();
|
|
137
137
|
mostSpecificSubShapesCache.clear();
|
|
138
138
|
childIndex = null;
|
|
139
|
+
targetClassIndex = null;
|
|
139
140
|
}
|
|
140
141
|
/** Drop the adapter for a shape whose metadata was replaced. */
|
|
141
142
|
function invalidateShapeAdapter(id) {
|
|
@@ -332,6 +333,133 @@ export function isSubShapeOf(a, b) {
|
|
|
332
333
|
return false;
|
|
333
334
|
return getSuperShapes(a).some((superShape) => superShape.id === target.id);
|
|
334
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Every shape `shape` extends, most specific first — resolving each parent in `local`
|
|
338
|
+
* before the registry.
|
|
339
|
+
*
|
|
340
|
+
* `local` is a caller's own set of shapes (a project's catalog), which may hold shapes the
|
|
341
|
+
* registry has never seen, or newer versions of ones it has. The catalog is the authority
|
|
342
|
+
* for what it holds; once the chain leaves it, the registry knows the rest.
|
|
343
|
+
*/
|
|
344
|
+
function superShapesWithin(shape, local) {
|
|
345
|
+
var _a;
|
|
346
|
+
if (!local)
|
|
347
|
+
return getSuperShapes(shape);
|
|
348
|
+
const chain = [];
|
|
349
|
+
const seen = new Set([shape.id]);
|
|
350
|
+
let current = shape;
|
|
351
|
+
while ((_a = current.extends) === null || _a === void 0 ? void 0 : _a.id) {
|
|
352
|
+
const parentId = current.extends.id;
|
|
353
|
+
if (seen.has(parentId))
|
|
354
|
+
break; // cycle guard — malformed data must not hang a read
|
|
355
|
+
seen.add(parentId);
|
|
356
|
+
const parent = local.get(parentId);
|
|
357
|
+
if (!parent) {
|
|
358
|
+
const registered = nodeShapeRegistry.get(parentId);
|
|
359
|
+
if (registered)
|
|
360
|
+
chain.push(registered, ...getSuperShapes(registered));
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
chain.push(parent);
|
|
364
|
+
current = parent;
|
|
365
|
+
}
|
|
366
|
+
return chain;
|
|
367
|
+
}
|
|
368
|
+
function indexShapes(shapes) {
|
|
369
|
+
const index = new Map();
|
|
370
|
+
for (const shape of shapes)
|
|
371
|
+
if (shape === null || shape === void 0 ? void 0 : shape.id)
|
|
372
|
+
index.set(shape.id, shape);
|
|
373
|
+
return index;
|
|
374
|
+
}
|
|
375
|
+
function targetClassIdWithin(shape, local) {
|
|
376
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
377
|
+
if (!shape)
|
|
378
|
+
return undefined;
|
|
379
|
+
if (typeof shape === 'function') {
|
|
380
|
+
// A class's static targetClass is inherited through the prototype chain for free.
|
|
381
|
+
const asClass = shape;
|
|
382
|
+
if ((_a = asClass.targetClass) === null || _a === void 0 ? void 0 : _a.id)
|
|
383
|
+
return asClass.targetClass.id;
|
|
384
|
+
if (!((_b = asClass.shape) === null || _b === void 0 ? void 0 : _b.id))
|
|
385
|
+
return undefined;
|
|
386
|
+
shape = asClass.shape;
|
|
387
|
+
}
|
|
388
|
+
const id = typeof shape === 'string' ? shape : shape.id;
|
|
389
|
+
if (!id)
|
|
390
|
+
return undefined;
|
|
391
|
+
const given = typeof shape === 'string' ? undefined : shape;
|
|
392
|
+
const own = (_k = (_g = (_d = (_c = given === null || given === void 0 ? void 0 : given.targetClass) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : (_f = (_e = local === null || local === void 0 ? void 0 : local.get(id)) === null || _e === void 0 ? void 0 : _e.targetClass) === null || _f === void 0 ? void 0 : _f.id) !== null && _g !== void 0 ? _g : (_j = (_h = getShapeClass(id)) === null || _h === void 0 ? void 0 : _h.targetClass) === null || _j === void 0 ? void 0 : _j.id) !== null && _k !== void 0 ? _k : (_m = (_l = nodeShapeRegistry.get(id)) === null || _l === void 0 ? void 0 : _l.targetClass) === null || _m === void 0 ? void 0 : _m.id;
|
|
393
|
+
if (own)
|
|
394
|
+
return own;
|
|
395
|
+
// A data-only shape's targetClass is not inherited for free, so walk `extends`.
|
|
396
|
+
const start = (_o = local === null || local === void 0 ? void 0 : local.get(id)) !== null && _o !== void 0 ? _o : ((given === null || given === void 0 ? void 0 : given.extends) ? given : (_p = nodeShapeRegistry.get(id)) !== null && _p !== void 0 ? _p : given);
|
|
397
|
+
if (!start)
|
|
398
|
+
return undefined;
|
|
399
|
+
return (_r = (_q = superShapesWithin(start, local).find((s) => { var _a; return (_a = s.targetClass) === null || _a === void 0 ? void 0 : _a.id; })) === null || _q === void 0 ? void 0 : _q.targetClass) === null || _r === void 0 ? void 0 : _r.id;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* The class a shape's instances are typed with: its own `targetClass`, else the first one
|
|
403
|
+
* found through what it extends. `undefined` when there is none anywhere in the chain.
|
|
404
|
+
*
|
|
405
|
+
* Accepts a shape IRI, a `{id}` reference, a shape's metadata (data or wire form) or a shape
|
|
406
|
+
* class. Pass `shapes` to resolve the shape — and what it extends — in that set before the
|
|
407
|
+
* registry; a project's catalog may hold shapes the registry does not.
|
|
408
|
+
*/
|
|
409
|
+
export function getTargetClassId(shape, shapes) {
|
|
410
|
+
return targetClassIdWithin(shape, shapes ? indexShapes(shapes) : undefined);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* The least specific candidates (the roots), by id. A candidate that extends another
|
|
414
|
+
* candidate (directly or further up) is dropped: a relation to `Person` with `Person` and
|
|
415
|
+
* `Employee extends Person` both targeting it means `Person` — a relation never upgrades
|
|
416
|
+
* itself to a sub-shape; declare `sh:node` to ask for one. What remains are unrelated roots
|
|
417
|
+
* the data does not choose between; they sort by id alone — never by depth or by
|
|
418
|
+
* registration or catalog order — so the choice is stable and visibly arbitrary. If that
|
|
419
|
+
* would drop every candidate (an `extends` cycle), all of them are kept, by id.
|
|
420
|
+
*/
|
|
421
|
+
function leastSpecific(candidates, local) {
|
|
422
|
+
const ids = new Set(candidates.map((c) => c.id));
|
|
423
|
+
const byId = (a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);
|
|
424
|
+
const roots = candidates.filter((candidate) => !superShapesWithin(candidate, local).some((parent) => ids.has(parent.id)));
|
|
425
|
+
// An `extends` cycle makes each member extend another, so the filter can leave nothing.
|
|
426
|
+
// Malformed data must not turn a relation into "no shape" silently: keep every candidate
|
|
427
|
+
// instead, by id, and let the caller's ambiguity handling (warn) apply.
|
|
428
|
+
return (roots.length ? roots : [...candidates]).sort(byId);
|
|
429
|
+
}
|
|
430
|
+
/** targetClass IRI → registered shapes targeting it, ordered. Rebuilt when the registry changes. */
|
|
431
|
+
let targetClassIndex = null;
|
|
432
|
+
let targetClassIndexVersion = -1;
|
|
433
|
+
function getTargetClassIndex() {
|
|
434
|
+
if (targetClassIndex && targetClassIndexVersion === registryState.registryVersion) {
|
|
435
|
+
return targetClassIndex;
|
|
436
|
+
}
|
|
437
|
+
const index = new Map();
|
|
438
|
+
nodeShapeRegistry.forEach((shape) => {
|
|
439
|
+
const classId = targetClassIdWithin(shape);
|
|
440
|
+
if (!classId)
|
|
441
|
+
return;
|
|
442
|
+
const shapes = index.get(classId);
|
|
443
|
+
if (shapes)
|
|
444
|
+
shapes.push(shape);
|
|
445
|
+
else
|
|
446
|
+
index.set(classId, [shape]);
|
|
447
|
+
});
|
|
448
|
+
index.forEach((shapes, classId) => index.set(classId, leastSpecific(shapes)));
|
|
449
|
+
targetClassIndex = index;
|
|
450
|
+
targetClassIndexVersion = registryState.registryVersion;
|
|
451
|
+
return index;
|
|
452
|
+
}
|
|
453
|
+
export function getShapesForTargetClass(classIri, shapes) {
|
|
454
|
+
var _a;
|
|
455
|
+
if (!classIri)
|
|
456
|
+
return [];
|
|
457
|
+
if (!shapes)
|
|
458
|
+
return [...((_a = getTargetClassIndex().get(classIri)) !== null && _a !== void 0 ? _a : [])];
|
|
459
|
+
const local = indexShapes(shapes);
|
|
460
|
+
const candidates = [...local.values()].filter((shape) => targetClassIdWithin(shape, local) === classIri);
|
|
461
|
+
return leastSpecific(candidates, local);
|
|
462
|
+
}
|
|
335
463
|
export function addNodeShapeToShapeClass(nodeShape, shapeClass) {
|
|
336
464
|
var _a, _b;
|
|
337
465
|
if (!(nodeShape === null || nodeShape === void 0 ? void 0 : nodeShape.id)) {
|