Open leorumma opened 2 years ago
Thanks for reporting!
My package.json file
{
"name":"tep-banco-dados-01-trabalho-final",
"version":"1.0.0",
"description":"",
"main":"src/lib/index.js",
"typings":"src/lib",
"lsd:module":true,
"scripts":{
"test":"echo \"Error: no test specified\" && exit 1",
"build":"npm run build:ts && npm run build:components",
"build:ts":"tsc",
"build:components":"componentsjs-generator",
"prepare":"npm run build"
},
"files":[
"components",
"lib/**/*.d.ts",
"lib/**/*.js"
],
"keywords":[
],
"author":"",
"license":"ISC",
"devDependencies":{
"@types/node":"^18.0.6",
"componentsjs-generator":"^3.0.5",
"typescript":"^4.7.4"
},
"dependencies":{
"componentsjs":"^5.2.0"
}
}
What tutorial are you following exactly (there are multiple)?
the tutorial I'm following is in the repository readme https://github.com/LinkedSoftwareDependencies/Components-Generator.js
Can you try moving your index
file outside of the lib
directory as a test? (and updating the references in your package.json
)
ok, I moved the index to the src folder and I changed my json.package
"main": "src/index.js",
"typings": "src",
"lsd:module": true,
but the error continued
2022-07-19T12:38:29.052Z [Components.js] info: Generating components for 1 package
Could not find a valid import path for src/lib/MyActor.jsonld. 'lsd:importPaths' in package.json may be invalid.
MyActor class does not generate jsonld
components.jsonld
{
"@context": [
"https://linkedsoftwaredependencies.org/bundles/npm/tep-banco-dados-01-trabalho-final/^1.0.0/components/context.jsonld"
],
"@id": "npmd:tep-banco-dados-01-trabalho-final",
"@type": "Module",
"requireName": "tep-banco-dados-01-trabalho-final",
"import": []
}
context.jsonld
{
"@context": [
"https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^5.0.0/components/context.jsonld",
{
"npmd": "https://linkedsoftwaredependencies.org/bundles/npm/",
"tbd0tf": "npmd:tep-banco-dados-01-trabalho-final/^1.0.0/"
}
]
}
Hmm, that doesn't seem to be the cause of the problem then.
Can you try setting your typings
entry in package.json
to refer to the actual index file, instead of the directory it exists within?
I tried again another way.
I modified the package.json file with the information contained in the repository
Before (package.json)
{
"name": "tep-banco-dados-01-trabalho-final",
"version": "1.0.0",
"description": "",
"main": "src/lib/index.js",
"typings": "src/lib",
"lsd:module": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "npm run build:ts && npm run build:components",
"build:ts": "tsc",
"build:components": "componentsjs-generator",
"prepare": "npm run build"
},
"files": [
"components",
"lib/**/*.d.ts",
"lib/**/*.js"
],
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node": "^18.0.6",
"componentsjs-generator": "^3.0.5",
"typescript": "^4.7.4"
},
"dependencies": {
"componentsjs": "^5.2.0"
}
}
After (package.json)
{
"name": "tep-banco-dados-01-trabalho-final",
"version": "1.0.0",
"description": "",
"lsd:module": "testing_any_value",
"lsd:components": "components/components.jsonld",
"lsd:contexts": {
"https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/context.jsonld": "components/context.jsonld"
},
"lsd:importPaths": {
"https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/": "lib/"
},
"main": "index.js",
"typings": "index",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "npm run build:ts && npm run build:components",
"build:ts": "tsc",
"build:components": "componentsjs-generator",
"prepare": "npm run build"
},
"files": [
"components",
"lib/**/*.d.ts",
"lib/**/*.js"
],
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/node": "^18.0.6",
"componentsjs-generator": "^3.0.5",
"typescript": "^4.7.4"
},
"dependencies": {
"componentsjs": "^5.2.0"
}
}
I added the following parameters
"lsd:module": "testing_any_value", "lsd:components": "components/components.jsonld", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/context.jsonld": "components/context.jsonld" }, "lsd:importPaths": { "https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/": "lib/" },
the npm build command worked and generated the jsonld of the MyActor.ts class
PS > npm run build
> tep-banco-dados-01-trabalho-final@1.0.0 build
> npm run build:ts && npm run build:components
> tep-banco-dados-01-trabalho-final@1.0.0 build:ts
> tsc
> tep-banco-dados-01-trabalho-final@1.0.0 build:components
> componentsjs-generator
2022-07-20T01:52:27.687Z [Components.js] info: Generating components for 1 package
PS >
MyActor.jsonld
{
"@context": [
"https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/context.jsonld"
],
"@id": "testing_any_value",
"components": [
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass",
"@type": "Class",
"requireElement": "MyClass",
"comment": "This is a great class!",
"parameters": [
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass_paramA",
"range": "xsd:boolean",
"comment": "My parameter"
},
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass_paramB",
"range": "xsd:number"
},
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass_paramC",
"range": {
"@type": "ParameterRangeArray",
"parameterRangeValue": "xsd:string"
}
}
],
"memberFields": [
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass__member_constructor",
"memberFieldName": "constructor"
}
],
"constructorArguments": [
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass_paramA"
},
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass_paramB"
},
{
"@id": "testing_any_value/^1.0.0/lib/MyActor.jsonld#MyClass_paramC"
}
]
}
]
}
.componentsjs-generator-config.json
{
"source": "lib",
"destination": "components",
"extension": "jsonld",
"logLevel": "info",
"ignorePackagePaths": [],
"ignoreComponents": [],
"modulePrefix": {}
}
however, I found three problems
the option "lsd:module": true does not work, only with some text parameter "lsd:module": "testing_any_value".
jsonld files are being generated in the lib folder. The correct one should be in the components folder
in the example repository the option "lsd:importPaths": { "https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/": "components/" }, works. But, in my code I needed to change from components to lib to work and generate the jsonld from MyActor.ts
Thanks for the findings @leorumma!
jsonld files are being generated in the lib folder. The correct one should be in the components folder
The lib folder is correct though, since that is that you've defined in your lsd:importPaths
. If you want the components folder, then the following should work:
"lsd:importPaths": {
"https://linkedsoftwaredependencies.org/bundles/npm/documentation-components/^1.0.0/components/": "components/"
}
(but this should be the default when using "lsd:module": true
)
in the example repository the option "lsd:importPaths" works. But, in my code I needed to change from components to lib to work and generate the jsonld from MyActor.ts
So there must be some other difference between your package and the example package. Perhaps this function may help uncovering this difference: https://github.com/LinkedSoftwareDependencies/Components.js/blob/master/lib/loading/ModuleStateBuilder.ts#L175-L220
I had a brief look at this, since I've also have experienced troubles when trying to set "lsd:module": true
in my projects.
Here are my findings so far.
Using:
componentsjs
: 5.2.0
componentsjs-generator
: 3.0.5
I put a breakpoint at: https://github.com/LinkedSoftwareDependencies/Components-Generator.js/blob/master/lib/generate/Generator.ts#L139 and to inspect the components
argument.
I find that the componentsjs-generator
does not adhere to the configured paths in my package.json
whenever the lsd:module
is set to true
.
See the following two examples:
Example 1
For a package.json
configured like this (notice the lsd:module
property is not a boolean):
"lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock",
"lsd:components": "dist/components/components.jsonld",
"lsd:contexts": {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/components/context.jsonld": "dist/components/context.jsonld"
},
"lsd:importPaths": {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/components/": "dist/components/",
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/dist/": "dist/"
},
The inspected components
argument (at the breakpoint) looks like this:
{
name: "@antwika/lock",
version: "0.0.1",
moduleIri: "https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock",
componentsPath: "E:\\Dev\\antwika\\lock\\dist\\components\\components.jsonld",
contexts: {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/components/context.jsonld": "dist/components/context.jsonld",
},
importPaths: {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/components/": "dist/components/",
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/dist/": "dist/",
},
typesPath: "E:\\Dev\\antwika\\lock\\dist\\index",
prefix: undefined,
}
This works as expected.
Example 2
For a package.json
configured like this (notice the lsd:module
property is a boolean):
"lsd:module": true,
"lsd:components": "dist/components/components.jsonld",
"lsd:contexts": {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/components/context.jsonld": "dist/components/context.jsonld"
},
"lsd:importPaths": {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/components/": "dist/components/",
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/*/dist/": "dist/"
},
The inspected components
argument (at the breakpoint) looks like this:
{
name: "@antwika/lock",
version: "0.0.1",
moduleIri: "https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock",
componentsPath: "E:\\Dev\\antwika\\lock\\components\\components.jsonld",
contexts: {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/^0.0.0/components/context.jsonld": "components/context.jsonld",
},
importPaths: {
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/^0.0.0/components/": "components/",
"https://linkedsoftwaredependencies.org/bundles/npm/@antwika/lock/^0.0.0/config/": "config/",
},
typesPath: "E:\\Dev\\antwika\\lock\\dist\\index",
prefix: undefined,
}
This does not work and throws an error here
Could not find a valid import path for ${sourcePath}. 'lsd:importPaths' in package.json may be invalid.
Notice the absence of dist/
in the paths in the Example 2 componentsjs
argument.
I've not put in enough time/effort to figure out exactly why the paths look so different. 🤔
Thanks for the findings @ixuz!
I find that the componentsjs-generator does not adhere to the configured paths in my package.json whenever the lsd:module is set to true.
That is intentional (but perhaps shouldn't be). If lsd:module is set to true, then all other lsd: entries in the package.json will be overwritten: https://github.com/LinkedSoftwareDependencies/Components.js/blob/master/lib/loading/ModuleStateBuilder.ts#L175-L220
I'm definitely open to a change in this logic so that if lsd:module is true, only those lsd: entries that have not been explicitly defined will be generated.
Do the findings in https://github.com/LinkedSoftwareDependencies/Components.js/issues/111#issuecomment-1368811736 help resolving any problems here?
Issue type:
Description:
I'm following the tutorial. But I get this error when running the command npm run build I'm not able to generate MyActor.jsonld file automatically
Environment:
Crash log: