This is an attempt to compile a Comunica Query Engine by following the tutorial at https://comunica.dev/docs/modify/getting_started/
- npm init
- Add dependency npm install @comunica/query-sparql
- Copy code in query-sparql-engine.js
- Make sure to use an "await" function
- Run code with node query-sparql-engine.js
- Copy query-sparql-engine.jsintoquery-custom.js
- Create a config file in config/config.jsonand copy inside it the default Comunica config file found at https://github.com/comunica/comunica/blob/master/engines/config-query-sparql/config/config-default.json (/!\ do NOT use the one provided in the documentation)
- Adapt the code:
	const myEngine = await new QueryEngineFactory().create({
	    configPath: 'config/config.json', // Relative or absolute path 
	});- run with node query-custom.js
- Make a copy of the config file from https://github.com/comunica/comunica-feature-link-traversal/blob/2d170e26821d6f242ac1aefd4b7a2e011c5c87ee/engines/config-query-sparql-link-traversal/config/config-solid-single-pod.json
- Added the dependency : :
- @comunica/config-query-sparql-link-traversal
- @comunica/query-sparql-link-traversal
- @comunica/config-query-sparql-solid
- @comunica/query-sparql-link-traversal-solid
 
- Make a copy of query-custom.jsintoquery-custom-link-traversal.js
- Adapt the code:
	const myEngine = await new QueryEngineFactory().create({
	    // configPath: 'config/config.json', // Relative or absolute path 
	    configPath: 'config/config-spoty.json', // Relative or absolute path 
	});
	const bindingsStream = await myEngine.queryBindings(`
	  SELECT ?s ?p ?o WHERE {
	    ?s ?p ?o
	  } LIMIT 10`, {
	  sources: ['https://fragments.dbpedia.org/2015/en'],
	});- run with node query-custom-link-traversal.js
- Follow documentation at https://comunica.dev/docs/modify/getting_started/custom_init/
- Copy the config file into config-default.json : cp config/config-spoty.json config/config-default.json
- Added compile script in package.json:
{
  ...
  "scripts": {
    ...
    "build:engine": "comunica-compile-config config/config-default.json > engine-default.js",
    "build:lib": "tsc",
    "build": "npm run build:lib && npm run build:engine",
    "prepare": "npm run build"
  },
}- 
Compile with npm run build:engine
- 
Create libfolder
- 
Add in libfolderQueryEngine.ts,QueryEngineFactory.ts,index.tsandindex-browser.tswith the content as provided in the doc
- 
Added entries in the package.json file: 
"main": "lib/index.js",
  "types": "lib/index",
  "browser": {
    "./lib/index.js": "./lib/index-browser.js",
    "./lib/index.js.map": "./lib/index-browser.js.map"
  },- Added .npmignore and .gitignore as documented
- Added filessection in package.json as documented:
"files": [
    "components",
    "config",
    "bin/**/*.d.ts",
    "bin/**/*.js",
    "bin/**/*.js.map",
    "lib/**/*.d.ts",
    "lib/**/*.js",
    "lib/**/*.js.map",
    "engine-default.js"
  ]- added a tsconfig.jsonto allow Typescript compiling
- added Typescript dependency : npm i typescript --save-dev
- /!\ downgrade Typescript version to 5.5.4 to avoid error with LRUCache. See isaacs/node-lru-cache#354 (comment):
  "devDependencies": {
    "typescript": "5.5.4"
  }- See https://medium.com/dailyjs/how-to-use-npm-link-7375b6219557
- in spoty-query-engine, runsudo npm link
- Then in project spoty, link to the local dependency:
cd ../spoty
npm link spoty-query-engine
Use the dependency:
  import { QueryEngine } from 'spoty-query-engine';
  const myEngine = new QueryEngine();