@undefineds.co/xpod 0.3.42 → 0.3.43

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.
@@ -18,6 +18,10 @@ const oidc_issuer_1 = require("./oidc-issuer");
18
18
  const NodeRuntimePlatform_1 = require("./platform/node/NodeRuntimePlatform");
19
19
  const env_utils_1 = require("./env-utils");
20
20
  const AuthMode_1 = require("../authorization/AuthMode");
21
+ const component_parameter_keys_1 = require("./component-parameter-keys");
22
+ const config_asset_paths_1 = require("./config-asset-paths");
23
+ const CSS_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/config/';
24
+ const XPOD_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/config/';
21
25
  const CSS_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld';
22
26
  const ASYNC_HANDLERS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld';
23
27
  function ensureTrailingSlash(url) {
@@ -263,7 +267,9 @@ function createCssRuntimeConfig(state, _open, platform = NodeRuntimePlatform_1.n
263
267
  }
264
268
  function rewriteConfigForFileUrlImportsIfNeeded(configPath, outputDir, platform, rewritten = new Map()) {
265
269
  const normalizedConfigPath = normalizeWindowsAbsolutePath(configPath);
266
- if (isWindowsAbsolutePath(normalizedConfigPath) || !pathNeedsEscapedFileUrl(normalizedConfigPath)) {
270
+ const componentContext = readPackageComponentContext(normalizedConfigPath, platform);
271
+ if (isWindowsAbsolutePath(normalizedConfigPath) ||
272
+ (!pathNeedsEscapedFileUrl(normalizedConfigPath) && !componentContext)) {
267
273
  return normalizedConfigPath;
268
274
  }
269
275
  const existing = rewritten.get(normalizedConfigPath);
@@ -274,10 +280,65 @@ function rewriteConfigForFileUrlImportsIfNeeded(configPath, outputDir, platform,
274
280
  const outputPath = normalizeWindowsAbsolutePath(platform.joinPath(outputDir, node_path_1.default.posix.basename(normalizedConfigPath)));
275
281
  rewritten.set(normalizedConfigPath, outputPath);
276
282
  const parsed = JSON.parse(platform.readTextFile(normalizedConfigPath));
283
+ preserveConfigBase(parsed, normalizedConfigPath);
284
+ (0, component_parameter_keys_1.normalizeComponentParameterKeys)(parsed, componentContext);
285
+ (0, config_asset_paths_1.rewriteConfigAssetPaths)(parsed, normalizedConfigPath, resolveConfigAssetPath);
277
286
  parsed.import = rewriteConfigImports(normalizedConfigPath, parsed.import, outputDir, platform, rewritten);
278
287
  platform.writeTextFile(outputPath, `${JSON.stringify(parsed, null, 2)}\n`);
279
288
  return outputPath;
280
289
  }
290
+ function readPackageComponentContext(configPath, platform) {
291
+ const normalizedConfigPath = normalizeWindowsAbsolutePath(configPath);
292
+ const useWindowsPaths = isWindowsAbsolutePath(normalizedConfigPath);
293
+ const pathApi = useWindowsPaths ? node_path_1.default.win32 : node_path_1.default.posix;
294
+ const contextPath = normalizeWindowsAbsolutePath(pathApi.join(resolveConfigAssetBase(normalizedConfigPath), 'dist', 'components', 'context.jsonld'));
295
+ try {
296
+ return (0, component_parameter_keys_1.extractComponentParameterContext)(JSON.parse(platform.readTextFile(contextPath)));
297
+ }
298
+ catch {
299
+ return undefined;
300
+ }
301
+ }
302
+ function resolveConfigAssetPath(sourceConfigPath, assetPath) {
303
+ const normalizedSourcePath = normalizeWindowsAbsolutePath(sourceConfigPath);
304
+ const useWindowsPaths = isWindowsAbsolutePath(normalizedSourcePath);
305
+ const pathApi = useWindowsPaths ? node_path_1.default.win32 : node_path_1.default.posix;
306
+ return normalizeWindowsAbsolutePath(pathApi.resolve(resolveConfigAssetBase(normalizedSourcePath), assetPath));
307
+ }
308
+ function resolveConfigAssetBase(sourceConfigPath) {
309
+ const normalized = normalizeWindowsAbsolutePath(sourceConfigPath);
310
+ const useWindowsPaths = isWindowsAbsolutePath(normalized);
311
+ const pathApi = useWindowsPaths ? node_path_1.default.win32 : node_path_1.default.posix;
312
+ const normalizedForSearch = normalized.replace(/\\/g, '/');
313
+ const markerIndex = normalizedForSearch.lastIndexOf('/config/');
314
+ if (markerIndex >= 0) {
315
+ const packageRoot = normalizedForSearch.slice(0, markerIndex);
316
+ return useWindowsPaths ? packageRoot.replace(/\//g, '\\') : packageRoot;
317
+ }
318
+ return pathApi.dirname(normalized);
319
+ }
320
+ function preserveConfigBase(parsed, configPath) {
321
+ const context = parsed['@context'];
322
+ const contexts = Array.isArray(context)
323
+ ? [...context]
324
+ : context === undefined
325
+ ? []
326
+ : [context];
327
+ const withoutExistingBase = contexts.filter((entry) => (!entry || typeof entry !== 'object' || !('@base' in entry)));
328
+ withoutExistingBase.push({ '@base': resolveConfigBase(configPath) });
329
+ parsed['@context'] = withoutExistingBase;
330
+ delete parsed['@base'];
331
+ }
332
+ function resolveConfigBase(configPath) {
333
+ const normalized = normalizeWindowsAbsolutePath(configPath).replace(/\\/g, '/');
334
+ if (normalized.includes('/node_modules/@solid/community-server/config/')) {
335
+ return CSS_CONFIG_BASE;
336
+ }
337
+ if (normalized.includes('/node_modules/@undefineds.co/xpod/config/')) {
338
+ return XPOD_CONFIG_BASE;
339
+ }
340
+ return (0, node_url_1.pathToFileURL)(node_path_1.default.posix.dirname(normalized) + '/').href;
341
+ }
281
342
  function rewriteConfigImports(sourceConfigPath, imports, outputDir, platform, rewritten) {
282
343
  if (typeof imports === 'string') {
283
344
  return rewriteConfigImport(sourceConfigPath, imports, outputDir, platform, rewritten);
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":";;;;;AA6HA,4DAmBC;AAED,0DA0EC;AAED,0CAmCC;AAED,sDA4CC;AAED,wDAqCC;AAwED,8CASC;AAvaD,iEAA+D;AAC/D,0DAA6B;AAC7B,uCAAyC;AACzC,oFAAiF;AACjF,iDAA8C;AAE9C,+CAA6E;AAC7E,6EAA0E;AAE1E,2CAA0C;AAG1C,wDAAmF;AAEnF,MAAM,sBAAsB,GAAG,6GAA6G,CAAC;AAC7I,MAAM,sBAAsB,GAAG,2GAA2G,CAAC;AAuB3I,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AAC7C,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAgB;IACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,iBAAiB,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,cAAc,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IAC9D,OAAO,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mBAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjH,CAAC;AAED,SAAS,gCAAgC,CAAC,SAAiB,EAAE,UAAkB;IAC7E,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,SAAS,IAAI,UAAU,IAAI,SAAS,KAAK,UAAU,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,cAAc,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClF,OAAO,IAAI,GAAG,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAoB,EAAE,UAAkB;IACvE,MAAM,kBAAkB,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAC7I,OAAO,IAAA,wBAAa,EAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAI,CAAC,KAAK,CAAC;IAC1D,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC/F,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC;IAEnE,IAAI,eAAe,IAAI,gCAAgC,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE,CAAC;QACvF,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzF,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,YAAY,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA+D;IACzF,MAAM,MAAM,GAA8C,EAAE,CAAC;IAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAa,EACb,WAAiD,yCAAmB;IAEpE,IACE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3B,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QAC/B,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;QACjC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,kBAAkB,CACzB,WAA+B,EAC/B,QAA8D;IAE9D,OAAO,WAAW,CAAC,CAAC,CAAC,IAAA,uBAAW,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAkB;IACzD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,OAAO;gBACL,0CAA0C;gBAC1C,oCAAoC;aACrC,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,6CAA6C;gBAC7C,sCAAsC;aACvC,CAAC;QACJ,KAAK,KAAK,CAAC;QACX;YACE,OAAO;gBACL,uCAAuC;gBACvC,oCAAoC;aACrC,CAAC;IACN,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,EAAU,EACV,OAA2B,EAC3B,IAAiB,EACjB,WAA4B,yCAAmB;IAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;IACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;IACrI,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1G,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpI,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtH,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjI,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,WAAW,GAAG;QAClB,GAAG,QAAQ,CAAC,OAAO;QACnB,GAAG,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC5C,GAAG,OAAO,CAAC,GAAG;KACf,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAA,+BAAoB,EAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACrG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC;IAEpF,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9D,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,KAAK,GAAqB,SAAS,KAAK,MAAM;QAClD,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC;YACzB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QACpH,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QACxG,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CACjC,OAAO,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QACxC,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,UAAU,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAC;IAEF,OAAO;QACL,EAAE;QACF,IAAI;QACJ,IAAI;QACJ,SAAS;QACT,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,cAAc;QACd,YAAY;QACZ,aAAa;QACb,UAAU;QACV,WAAW;QACX,OAAO;QACP,QAAQ;QACR,OAAO;QACP,WAAW;QACX,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAC7B,KAA4B,EAC5B,OAA2B,EAC3B,cAAkD,EAAE;IAEpD,MAAM,SAAS,GAAG;QAChB,GAAG,WAAW;QACd,GAAG,OAAO,CAAC,GAAG;KACf,CAAC;IACF,MAAM,kBAAkB,GAAG,IAAA,uCAAyB,EAAC,SAAS,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG;QACjB,GAAG,SAAS;QACZ,aAAa,EAAE,KAAK,CAAC,WAAW;QAChC,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,YAAY,EAAE,KAAK,CAAC,OAAO;QAC3B,kBAAkB,EAAE,kBAAkB;YACpC,CAAC,CAAC,IAAA,+BAAiB,EAAC,kBAAkB,CAAC;YACvC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,aAAa;QACjC,kBAAkB,EAAE,KAAK,CAAC,YAAY;QACtC,kBAAkB,EAAE,KAAK,CAAC,YAAY;QACtC,mBAAmB,EAAE,KAAK,CAAC,cAAc;QACzC,eAAe,EAAE,KAAK,CAAC,cAAc;QACrC,mBAAmB,EAAE,KAAK,CAAC,aAAa;QACxC,YAAY,EAAE,KAAK,CAAC,aAAa;QACjC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7E,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7E,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG;QAClC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3F,YAAY,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;QAC3C,iBAAiB,EAAE,KAAK,CAAC,QAAQ;KAClC,CAAC;IAEF,OAAO,IAAA,2BAAgB,EAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,qBAAqB,CACnC,UAA8C,EAC9C,OAA2B,EAC3B,KAA4B,EAC5B,UAA8C,yCAAmB,CAAC,OAAO;IAEzE,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAsB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACtF,MAAM,kBAAkB,GAAG,IAAA,uCAAyB,EAAC;QACnD,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC;KACnC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,kBAAkB,CAAC;YACpB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YAC1D,CAAC,gBAAgB,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACpD,CAAC,gBAAgB,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACpD,CAAC,eAAe,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACjD,CAAC,iBAAiB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YACtD,CAAC,aAAa,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC7C,CAAC,eAAe,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACjD,CAAC,eAAe,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACjD,CAAC,iBAAiB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;YAC5D,CAAC,iBAAiB,EAAE,QAAQ,CAAC,uBAAuB,CAAC,IAAI,KAAK,CAAC;YAC/D,CAAC,qBAAqB,EAAE,QAAQ,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC;YACrE,CAAC,qBAAqB,EAAE,QAAQ,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC;YACrE,CAAC,YAAY,EAAE,kBAAkB,CAAC;YAClC,CAAC,cAAc,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC/C,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;YACpC,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAC1C,CAAC,cAAc,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;SACjD,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,WAAW;QAC3B,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;QACpD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;QACnD,yBAAyB,EAAE,OAAO,CAAC,yBAAyB,IAAI,KAAK;QACrE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,SAAgB,sBAAsB,CACpC,KAA4B,EAC5B,KAAe,EACf,WAA2G,yCAAmB;IAE9H,MAAM,UAAU,GAAG,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,2BAAY,EAAE,UAAU,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;IAC9G,MAAM,WAAW,GAAG,4BAA4B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,gCAAgC,CAAC,WAAW,EAAE,UAAU,CAAC;QACjF,CAAC,CAAC,CAAC,GAAG,EAAE;YACN,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CACrE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAC5B,IAAI,EACJ,eAAe,EACf,KAAK,CAAC,EAAE,CACT,CAAC,CAAC;YACH,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACrC,OAAO,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACtG,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC5F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7D,MAAM,uBAAuB,GAAG,sCAAsC,CACpE,UAAU,EACV,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAC7C,QAAQ,CACT,CAAC;IACF,QAAQ,CAAC,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC;QACvD,UAAU,EAAE;YACV,sBAAsB;YACtB,sBAAsB;SACvB;QACD,MAAM,EAAE;YACN,uBAAuB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;YACnE,GAAG,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC;SAC/C;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEb,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,sCAAsC,CAC7C,UAAkB,EAClB,SAAiB,EACjB,QAAwG,EACxG,YAAY,IAAI,GAAG,EAAkB;IAErC,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClG,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,mBAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzH,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAA4B,CAAC;IAClG,MAAM,CAAC,MAAM,GAAG,oBAAoB,CAClC,oBAAoB,EACpB,MAAM,CAAC,MAAM,EACb,SAAS,EACT,QAAQ,EACR,SAAS,CACV,CAAC;IACF,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAC3B,gBAAwB,EACxB,OAAgB,EAChB,SAAiB,EACjB,QAAwG,EACxG,SAA8B;IAE9B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ;YACrD,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;YAC9E,CAAC,CAAC,KAAK,CAAC,CAAC;IACb,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAC1B,gBAAwB,EACxB,WAAmB,EACnB,SAAiB,EACjB,QAAwG,EACxG,SAA8B;IAE9B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,4BAA4B,CAC7C,mBAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,mBAAmB,GAAG,sCAAsC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC/G,OAAO,IAAA,wBAAa,EAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAgB,iBAAiB,CAC/B,KAAa,EACb,WAAsD,yCAAmB;IAEzE,MAAM,aAAa,GAAG,IAAI,qDAAyB,CAAC,KAAK,EAAE;QACzD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC;QACnE,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,IAAA,8CAAsB,EAAC,aAAa,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import { setGlobalLoggerFactory } from 'global-logger-factory';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { ConfigurableLoggerFactory } from '../logging/ConfigurableLoggerFactory';\nimport { PACKAGE_ROOT } from './package-root';\nimport type { RuntimeHost } from './host/types';\nimport { oidcTokenEndpoint, resolveExternalOidcIssuer } from './oidc-issuer';\nimport { nodeRuntimePlatform } from './platform/node/NodeRuntimePlatform';\nimport type { RuntimePlatform } from './platform/types';\nimport { loadEnvFile } from './env-utils';\nimport type { XpodRuntimeOptions, XpodRuntimePorts, XpodRuntimeSockets } from './runtime-types';\nimport type { AuthMode } from '../authorization/AuthMode';\nimport { applyAuthModeEnv, resolveAuthModeInput } from '../authorization/AuthMode';\n\nconst CSS_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld';\nconst ASYNC_HANDLERS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld';\n\nexport interface RuntimeBootstrapState {\n id: string;\n host: RuntimeHost;\n mode: 'local' | 'cloud';\n transport: 'socket' | 'port';\n bindHost: string;\n runtimeRoot: string;\n rootFilePath: string;\n sparqlEndpoint: string;\n rdfIndexPath: string;\n identityDbUrl: string;\n usageDbUrl: string;\n cssAuthMode: AuthMode;\n apiOpen: boolean;\n logLevel: string;\n baseUrl: string;\n envFilePath?: string;\n ports: XpodRuntimePorts;\n sockets: XpodRuntimeSockets;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction normalizeWindowsAbsolutePath(filePath: string): string {\n return filePath.replace(/^[\\\\/]+(?=[A-Za-z]:[\\\\/])/, '');\n}\n\nfunction isWindowsAbsolutePath(filePath: string): boolean {\n return /^[A-Za-z]:[\\\\/]/.test(normalizeWindowsAbsolutePath(filePath));\n}\n\nfunction getWindowsDriveRoot(filePath: string): string | undefined {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath);\n return isWindowsAbsolutePath(normalizedPath) ? path.win32.parse(normalizedPath).root.toLowerCase() : undefined;\n}\n\nfunction arePathsOnDifferentWindowsDrives(firstPath: string, secondPath: string): boolean {\n const firstRoot = getWindowsDriveRoot(firstPath);\n const secondRoot = getWindowsDriveRoot(secondPath);\n return Boolean(firstRoot && secondRoot && firstRoot !== secondRoot);\n}\n\nfunction toWindowsFileUrl(filePath: string): string {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath).replace(/\\\\/g, '/');\n return new URL(`file:///${normalizedPath}`).href;\n}\n\nfunction toConfigImportSpecifier(fromFilePath: string, toFilePath: string): string {\n const normalizedFromPath = normalizeWindowsAbsolutePath(fromFilePath);\n const normalizedToPath = normalizeWindowsAbsolutePath(toFilePath);\n if (!isWindowsAbsolutePath(normalizedFromPath) && (pathNeedsEscapedFileUrl(normalizedFromPath) || pathNeedsEscapedFileUrl(normalizedToPath))) {\n return pathToFileURL(normalizedToPath).href;\n }\n\n const useWindowsPaths = isWindowsAbsolutePath(normalizedFromPath) || isWindowsAbsolutePath(normalizedToPath);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n const fromDirectoryPath = pathApi.dirname(useWindowsPaths ? normalizedFromPath : fromFilePath);\n const targetPath = useWindowsPaths ? normalizedToPath : toFilePath;\n\n if (useWindowsPaths && arePathsOnDifferentWindowsDrives(fromDirectoryPath, targetPath)) {\n return toWindowsFileUrl(targetPath);\n }\n\n const relativePath = pathApi.relative(fromDirectoryPath, targetPath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction pathNeedsEscapedFileUrl(filePath: string): boolean {\n return /\\s/.test(filePath);\n}\n\nfunction withDefinedEntries(entries: Array<[string, string | number | boolean | undefined]>): Record<string, string | number | boolean> {\n const result: Record<string, string | number | boolean> = {};\n for (const [key, value] of entries) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction normalizeDatabaseUrl(\n value: string,\n platform: Pick<RuntimePlatform, 'resolvePath'> = nodeRuntimePlatform,\n): string {\n if (\n value.startsWith('sqlite:') ||\n value.startsWith('postgres://') ||\n value.startsWith('postgresql://') ||\n value.startsWith('mysql://')\n ) {\n return value;\n }\n return `sqlite:${platform.resolvePath(value)}`;\n}\n\nfunction readRuntimeEnvFile(\n envFilePath: string | undefined,\n platform: Pick<RuntimePlatform, 'fileExists' | 'readTextFile'>,\n): Record<string, string> {\n return envFilePath ? loadEnvFile(envFilePath, platform) : {};\n}\n\nexport function cssAuthModeConfigImports(authMode: AuthMode): string[] {\n switch (authMode) {\n case 'acl':\n return [\n 'css:config/ldp/authorization/webacl.json',\n 'css:config/util/auxiliary/acl.json',\n ];\n case 'allow-all':\n return [\n 'css:config/ldp/authorization/allow-all.json',\n 'css:config/util/auxiliary/empty.json',\n ];\n case 'acp':\n default:\n return [\n 'css:config/ldp/authorization/acp.json',\n 'css:config/util/auxiliary/acr.json',\n ];\n }\n}\n\nexport async function resolveRuntimeBootstrap(\n id: string,\n options: XpodRuntimeOptions,\n host: RuntimeHost,\n platform: RuntimePlatform = nodeRuntimePlatform,\n): Promise<RuntimeBootstrapState> {\n const mode = options.mode ?? 'local';\n const transport = host.resolveTransport(options.transport);\n const bindHost = options.bindHost ?? '127.0.0.1';\n const runtimeRoot = platform.resolvePath(options.runtimeRoot ?? platform.joinPath(platform.cwd(), '.test-data', 'xpod-runtime', id));\n const rootFilePath = platform.resolvePath(options.rootFilePath ?? platform.joinPath(runtimeRoot, 'data'));\n const sparqlEndpoint = normalizeDatabaseUrl(options.sparqlEndpoint ?? platform.joinPath(runtimeRoot, 'quadstore.sqlite'), platform);\n const rdfIndexPath = platform.resolvePath(options.rdfIndexPath ?? platform.joinPath(runtimeRoot, 'rdf-index.sqlite'));\n const identityDbUrl = normalizeDatabaseUrl(options.identityDbUrl ?? platform.joinPath(runtimeRoot, 'identity.sqlite'), platform);\n const usageDbUrl = normalizeDatabaseUrl(options.usageDbUrl ?? platform.joinPath(runtimeRoot, 'usage.sqlite'), platform);\n const envFilePath = options.envFile ? platform.resolvePath(options.envFile) : undefined;\n const authModeEnv = {\n ...platform.baseEnv,\n ...readRuntimeEnvFile(envFilePath, platform),\n ...options.env,\n };\n const cssAuthMode = options.open ? 'allow-all' : resolveAuthModeInput(options.authMode, authModeEnv);\n const apiOpen = options.apiOpen ?? options.open ?? false;\n const logLevel = options.logLevel ?? platform.getEnv('CSS_LOGGING_LEVEL') ?? 'warn';\n\n platform.ensureDir(runtimeRoot);\n platform.ensureDir(rootFilePath);\n\n const socketsRoot = platform.joinPath(runtimeRoot, 'sockets');\n if (transport === 'socket') {\n platform.ensureDir(socketsRoot);\n }\n const ports: XpodRuntimePorts = transport === 'port'\n ? await host.allocatePorts({\n gatewayPort: options.gatewayPort,\n cssPort: options.cssPort,\n apiPort: options.apiPort,\n basePort: 5600,\n })\n : {};\n const sockets: XpodRuntimeSockets = {};\n\n if (transport === 'socket') {\n sockets.gateway = platform.resolvePath(options.gatewaySocketPath ?? platform.joinPath(socketsRoot, 'gateway.sock'));\n sockets.css = platform.resolvePath(options.cssSocketPath ?? platform.joinPath(socketsRoot, 'css.sock'));\n sockets.api = platform.resolvePath(options.apiSocketPath ?? platform.joinPath(socketsRoot, 'api.sock'));\n }\n\n const baseUrl = ensureTrailingSlash(\n options.baseUrl ?? (transport === 'socket'\n ? 'http://localhost'\n : `http://${bindHost}:${ports.gateway}`),\n );\n\n return {\n id,\n host,\n mode,\n transport,\n bindHost,\n runtimeRoot,\n rootFilePath,\n sparqlEndpoint,\n rdfIndexPath,\n identityDbUrl,\n usageDbUrl,\n cssAuthMode,\n apiOpen,\n logLevel,\n baseUrl,\n envFilePath,\n ports,\n sockets,\n };\n}\n\nexport function buildRuntimeEnv(\n state: RuntimeBootstrapState,\n options: XpodRuntimeOptions,\n envFromFile: Record<string, string | undefined> = {},\n): Record<string, string | undefined> {\n const mergedEnv = {\n ...envFromFile,\n ...options.env,\n };\n const externalOidcIssuer = resolveExternalOidcIssuer(mergedEnv);\n\n const runtimeEnv = {\n ...mergedEnv,\n XPOD_ENV_PATH: state.envFilePath,\n XPOD_EDITION: state.mode,\n CSS_BASE_URL: state.baseUrl,\n CSS_TOKEN_ENDPOINT: externalOidcIssuer\n ? oidcTokenEndpoint(externalOidcIssuer)\n : `${state.baseUrl}.oidc/token`,\n CSS_ROOT_FILE_PATH: state.rootFilePath,\n CSS_RDF_INDEX_PATH: state.rdfIndexPath,\n CSS_SPARQL_ENDPOINT: state.sparqlEndpoint,\n SPARQL_ENDPOINT: state.sparqlEndpoint,\n CSS_IDENTITY_DB_URL: state.identityDbUrl,\n DATABASE_URL: state.identityDbUrl,\n CSS_PORT: state.ports.css !== undefined ? String(state.ports.css) : undefined,\n API_PORT: state.ports.api !== undefined ? String(state.ports.api) : undefined,\n API_HOST: state.bindHost,\n API_SOCKET_PATH: state.sockets.api,\n XPOD_MAIN_PORT: state.ports.gateway !== undefined ? String(state.ports.gateway) : undefined,\n CORS_ORIGINS: new URL(state.baseUrl).origin,\n CSS_LOGGING_LEVEL: state.logLevel,\n };\n\n return applyAuthModeEnv(runtimeEnv, state.cssAuthMode);\n}\n\nexport function buildRuntimeShorthand(\n runtimeEnv: Record<string, string | undefined>,\n options: XpodRuntimeOptions,\n state: RuntimeBootstrapState,\n baseEnv: Record<string, string | undefined> = nodeRuntimePlatform.baseEnv,\n): Record<string, string | number | boolean> {\n const envValue = (key: string): string | undefined => runtimeEnv[key] ?? baseEnv[key];\n const externalOidcIssuer = resolveExternalOidcIssuer({\n oidcIssuer: envValue('oidcIssuer'),\n });\n\n return {\n ...withDefinedEntries([\n ['baseStorageDomain', envValue('CSS_BASE_STORAGE_DOMAIN')],\n ['minioAccessKey', envValue('CSS_MINIO_ACCESS_KEY')],\n ['minioSecretKey', envValue('CSS_MINIO_SECRET_KEY')],\n ['minioEndpoint', envValue('CSS_MINIO_ENDPOINT')],\n ['minioBucketName', envValue('CSS_MINIO_BUCKET_NAME')],\n ['redisClient', envValue('CSS_REDIS_CLIENT')],\n ['redisUsername', envValue('CSS_REDIS_USERNAME')],\n ['redisPassword', envValue('CSS_REDIS_PASSWORD')],\n ['emailConfigHost', envValue('CSS_EMAIL_CONFIG_HOST') ?? ''],\n ['emailConfigPort', envValue('CSS_EMAIL_CONFIG_PORT') ?? '587'],\n ['emailConfigAuthUser', envValue('CSS_EMAIL_CONFIG_AUTH_USER') ?? ''],\n ['emailConfigAuthPass', envValue('CSS_EMAIL_CONFIG_AUTH_PASS') ?? ''],\n ['oidcIssuer', externalOidcIssuer],\n ['allowedHosts', envValue('CSS_ALLOWED_HOSTS')],\n ['nodeId', envValue('XPOD_NODE_ID')],\n ['nodeToken', envValue('XPOD_NODE_TOKEN')],\n ['serviceToken', envValue('XPOD_SERVICE_TOKEN')],\n ]),\n baseUrl: state.baseUrl,\n rootFilePath: state.rootFilePath,\n sparqlEndpoint: state.sparqlEndpoint,\n rdfIndexPath: state.rdfIndexPath,\n identityDbUrl: state.identityDbUrl,\n usageDbUrl: state.usageDbUrl,\n logLevel: state.logLevel,\n authMode: state.cssAuthMode,\n edition: state.mode === 'cloud' ? 'server' : 'local',\n edgeNodesEnabled: options.edgeNodesEnabled ?? false,\n centerRegistrationEnabled: options.centerRegistrationEnabled ?? false,\n ...(options.shorthand ?? {}),\n };\n}\n\nexport function createCssRuntimeConfig(\n state: RuntimeBootstrapState,\n _open?: boolean,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'> = nodeRuntimePlatform,\n): string {\n const configPath = normalizeWindowsAbsolutePath(platform.joinPath(PACKAGE_ROOT, `config/${state.mode}.json`));\n const runtimeRoot = normalizeWindowsAbsolutePath(state.runtimeRoot);\n const runtimeConfigPath = arePathsOnDifferentWindowsDrives(runtimeRoot, configPath)\n ? (() => {\n const runtimeConfigDir = normalizeWindowsAbsolutePath(platform.joinPath(\n platform.dirname(configPath),\n '..',\n '.xpod-runtime',\n state.id,\n ));\n platform.ensureDir(runtimeConfigDir);\n return normalizeWindowsAbsolutePath(platform.joinPath(runtimeConfigDir, 'css-runtime.config.json'));\n })()\n : normalizeWindowsAbsolutePath(platform.joinPath(runtimeRoot, 'css-runtime.config.json'));\n const runtimeConfigDir = platform.dirname(runtimeConfigPath);\n const runtimeConfigImportPath = rewriteConfigForFileUrlImportsIfNeeded(\n configPath,\n platform.joinPath(runtimeConfigDir, 'config'),\n platform,\n );\n platform.writeTextFile(runtimeConfigPath, JSON.stringify({\n '@context': [\n CSS_COMPONENTS_CONTEXT,\n ASYNC_HANDLERS_CONTEXT,\n ],\n import: [\n toConfigImportSpecifier(runtimeConfigPath, runtimeConfigImportPath),\n ...cssAuthModeConfigImports(state.cssAuthMode),\n ],\n }, null, 2));\n\n return runtimeConfigPath;\n}\n\nfunction rewriteConfigForFileUrlImportsIfNeeded(\n configPath: string,\n outputDir: string,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'>,\n rewritten = new Map<string, string>(),\n): string {\n const normalizedConfigPath = normalizeWindowsAbsolutePath(configPath);\n if (isWindowsAbsolutePath(normalizedConfigPath) || !pathNeedsEscapedFileUrl(normalizedConfigPath)) {\n return normalizedConfigPath;\n }\n\n const existing = rewritten.get(normalizedConfigPath);\n if (existing) {\n return existing;\n }\n\n platform.ensureDir(outputDir);\n const outputPath = normalizeWindowsAbsolutePath(platform.joinPath(outputDir, path.posix.basename(normalizedConfigPath)));\n rewritten.set(normalizedConfigPath, outputPath);\n\n const parsed = JSON.parse(platform.readTextFile(normalizedConfigPath)) as Record<string, unknown>;\n parsed.import = rewriteConfigImports(\n normalizedConfigPath,\n parsed.import,\n outputDir,\n platform,\n rewritten,\n );\n platform.writeTextFile(outputPath, `${JSON.stringify(parsed, null, 2)}\\n`);\n return outputPath;\n}\n\nfunction rewriteConfigImports(\n sourceConfigPath: string,\n imports: unknown,\n outputDir: string,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'>,\n rewritten: Map<string, string>,\n): unknown {\n if (typeof imports === 'string') {\n return rewriteConfigImport(sourceConfigPath, imports, outputDir, platform, rewritten);\n }\n\n if (Array.isArray(imports)) {\n return imports.map((value) => typeof value === 'string'\n ? rewriteConfigImport(sourceConfigPath, value, outputDir, platform, rewritten)\n : value);\n }\n\n return imports;\n}\n\nfunction rewriteConfigImport(\n sourceConfigPath: string,\n importValue: string,\n outputDir: string,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'>,\n rewritten: Map<string, string>,\n): string {\n if (!importValue.startsWith('./') && !importValue.startsWith('../')) {\n return importValue;\n }\n\n const targetPath = normalizeWindowsAbsolutePath(\n path.posix.resolve(platform.dirname(sourceConfigPath), importValue),\n );\n const rewrittenTargetPath = rewriteConfigForFileUrlImportsIfNeeded(targetPath, outputDir, platform, rewritten);\n return pathToFileURL(rewrittenTargetPath).href;\n}\n\nexport function initRuntimeLogger(\n level: string,\n platform: Pick<RuntimePlatform, 'cwd' | 'joinPath'> = nodeRuntimePlatform,\n): void {\n const loggerFactory = new ConfigurableLoggerFactory(level, {\n fileName: platform.joinPath(platform.cwd(), 'logs/xpod-%DATE%.log'),\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n}\n"]}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { setGlobalLoggerFactory } from 'global-logger-factory';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { ConfigurableLoggerFactory } from '../logging/ConfigurableLoggerFactory';\nimport { PACKAGE_ROOT } from './package-root';\nimport type { RuntimeHost } from './host/types';\nimport { oidcTokenEndpoint, resolveExternalOidcIssuer } from './oidc-issuer';\nimport { nodeRuntimePlatform } from './platform/node/NodeRuntimePlatform';\nimport type { RuntimePlatform } from './platform/types';\nimport { loadEnvFile } from './env-utils';\nimport type { XpodRuntimeOptions, XpodRuntimePorts, XpodRuntimeSockets } from './runtime-types';\nimport type { AuthMode } from '../authorization/AuthMode';\nimport { applyAuthModeEnv, resolveAuthModeInput } from '../authorization/AuthMode';\nimport { extractComponentParameterContext, normalizeComponentParameterKeys } from './component-parameter-keys';\nimport { rewriteConfigAssetPaths } from './config-asset-paths';\n\nconst CSS_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/config/';\nconst XPOD_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/config/';\nconst CSS_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld';\nconst ASYNC_HANDLERS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld';\n\nexport interface RuntimeBootstrapState {\n id: string;\n host: RuntimeHost;\n mode: 'local' | 'cloud';\n transport: 'socket' | 'port';\n bindHost: string;\n runtimeRoot: string;\n rootFilePath: string;\n sparqlEndpoint: string;\n rdfIndexPath: string;\n identityDbUrl: string;\n usageDbUrl: string;\n cssAuthMode: AuthMode;\n apiOpen: boolean;\n logLevel: string;\n baseUrl: string;\n envFilePath?: string;\n ports: XpodRuntimePorts;\n sockets: XpodRuntimeSockets;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction normalizeWindowsAbsolutePath(filePath: string): string {\n return filePath.replace(/^[\\\\/]+(?=[A-Za-z]:[\\\\/])/, '');\n}\n\nfunction isWindowsAbsolutePath(filePath: string): boolean {\n return /^[A-Za-z]:[\\\\/]/.test(normalizeWindowsAbsolutePath(filePath));\n}\n\nfunction getWindowsDriveRoot(filePath: string): string | undefined {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath);\n return isWindowsAbsolutePath(normalizedPath) ? path.win32.parse(normalizedPath).root.toLowerCase() : undefined;\n}\n\nfunction arePathsOnDifferentWindowsDrives(firstPath: string, secondPath: string): boolean {\n const firstRoot = getWindowsDriveRoot(firstPath);\n const secondRoot = getWindowsDriveRoot(secondPath);\n return Boolean(firstRoot && secondRoot && firstRoot !== secondRoot);\n}\n\nfunction toWindowsFileUrl(filePath: string): string {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath).replace(/\\\\/g, '/');\n return new URL(`file:///${normalizedPath}`).href;\n}\n\nfunction toConfigImportSpecifier(fromFilePath: string, toFilePath: string): string {\n const normalizedFromPath = normalizeWindowsAbsolutePath(fromFilePath);\n const normalizedToPath = normalizeWindowsAbsolutePath(toFilePath);\n if (!isWindowsAbsolutePath(normalizedFromPath) && (pathNeedsEscapedFileUrl(normalizedFromPath) || pathNeedsEscapedFileUrl(normalizedToPath))) {\n return pathToFileURL(normalizedToPath).href;\n }\n\n const useWindowsPaths = isWindowsAbsolutePath(normalizedFromPath) || isWindowsAbsolutePath(normalizedToPath);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n const fromDirectoryPath = pathApi.dirname(useWindowsPaths ? normalizedFromPath : fromFilePath);\n const targetPath = useWindowsPaths ? normalizedToPath : toFilePath;\n\n if (useWindowsPaths && arePathsOnDifferentWindowsDrives(fromDirectoryPath, targetPath)) {\n return toWindowsFileUrl(targetPath);\n }\n\n const relativePath = pathApi.relative(fromDirectoryPath, targetPath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction pathNeedsEscapedFileUrl(filePath: string): boolean {\n return /\\s/.test(filePath);\n}\n\nfunction withDefinedEntries(entries: Array<[string, string | number | boolean | undefined]>): Record<string, string | number | boolean> {\n const result: Record<string, string | number | boolean> = {};\n for (const [key, value] of entries) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction normalizeDatabaseUrl(\n value: string,\n platform: Pick<RuntimePlatform, 'resolvePath'> = nodeRuntimePlatform,\n): string {\n if (\n value.startsWith('sqlite:') ||\n value.startsWith('postgres://') ||\n value.startsWith('postgresql://') ||\n value.startsWith('mysql://')\n ) {\n return value;\n }\n return `sqlite:${platform.resolvePath(value)}`;\n}\n\nfunction readRuntimeEnvFile(\n envFilePath: string | undefined,\n platform: Pick<RuntimePlatform, 'fileExists' | 'readTextFile'>,\n): Record<string, string> {\n return envFilePath ? loadEnvFile(envFilePath, platform) : {};\n}\n\nexport function cssAuthModeConfigImports(authMode: AuthMode): string[] {\n switch (authMode) {\n case 'acl':\n return [\n 'css:config/ldp/authorization/webacl.json',\n 'css:config/util/auxiliary/acl.json',\n ];\n case 'allow-all':\n return [\n 'css:config/ldp/authorization/allow-all.json',\n 'css:config/util/auxiliary/empty.json',\n ];\n case 'acp':\n default:\n return [\n 'css:config/ldp/authorization/acp.json',\n 'css:config/util/auxiliary/acr.json',\n ];\n }\n}\n\nexport async function resolveRuntimeBootstrap(\n id: string,\n options: XpodRuntimeOptions,\n host: RuntimeHost,\n platform: RuntimePlatform = nodeRuntimePlatform,\n): Promise<RuntimeBootstrapState> {\n const mode = options.mode ?? 'local';\n const transport = host.resolveTransport(options.transport);\n const bindHost = options.bindHost ?? '127.0.0.1';\n const runtimeRoot = platform.resolvePath(options.runtimeRoot ?? platform.joinPath(platform.cwd(), '.test-data', 'xpod-runtime', id));\n const rootFilePath = platform.resolvePath(options.rootFilePath ?? platform.joinPath(runtimeRoot, 'data'));\n const sparqlEndpoint = normalizeDatabaseUrl(options.sparqlEndpoint ?? platform.joinPath(runtimeRoot, 'quadstore.sqlite'), platform);\n const rdfIndexPath = platform.resolvePath(options.rdfIndexPath ?? platform.joinPath(runtimeRoot, 'rdf-index.sqlite'));\n const identityDbUrl = normalizeDatabaseUrl(options.identityDbUrl ?? platform.joinPath(runtimeRoot, 'identity.sqlite'), platform);\n const usageDbUrl = normalizeDatabaseUrl(options.usageDbUrl ?? platform.joinPath(runtimeRoot, 'usage.sqlite'), platform);\n const envFilePath = options.envFile ? platform.resolvePath(options.envFile) : undefined;\n const authModeEnv = {\n ...platform.baseEnv,\n ...readRuntimeEnvFile(envFilePath, platform),\n ...options.env,\n };\n const cssAuthMode = options.open ? 'allow-all' : resolveAuthModeInput(options.authMode, authModeEnv);\n const apiOpen = options.apiOpen ?? options.open ?? false;\n const logLevel = options.logLevel ?? platform.getEnv('CSS_LOGGING_LEVEL') ?? 'warn';\n\n platform.ensureDir(runtimeRoot);\n platform.ensureDir(rootFilePath);\n\n const socketsRoot = platform.joinPath(runtimeRoot, 'sockets');\n if (transport === 'socket') {\n platform.ensureDir(socketsRoot);\n }\n const ports: XpodRuntimePorts = transport === 'port'\n ? await host.allocatePorts({\n gatewayPort: options.gatewayPort,\n cssPort: options.cssPort,\n apiPort: options.apiPort,\n basePort: 5600,\n })\n : {};\n const sockets: XpodRuntimeSockets = {};\n\n if (transport === 'socket') {\n sockets.gateway = platform.resolvePath(options.gatewaySocketPath ?? platform.joinPath(socketsRoot, 'gateway.sock'));\n sockets.css = platform.resolvePath(options.cssSocketPath ?? platform.joinPath(socketsRoot, 'css.sock'));\n sockets.api = platform.resolvePath(options.apiSocketPath ?? platform.joinPath(socketsRoot, 'api.sock'));\n }\n\n const baseUrl = ensureTrailingSlash(\n options.baseUrl ?? (transport === 'socket'\n ? 'http://localhost'\n : `http://${bindHost}:${ports.gateway}`),\n );\n\n return {\n id,\n host,\n mode,\n transport,\n bindHost,\n runtimeRoot,\n rootFilePath,\n sparqlEndpoint,\n rdfIndexPath,\n identityDbUrl,\n usageDbUrl,\n cssAuthMode,\n apiOpen,\n logLevel,\n baseUrl,\n envFilePath,\n ports,\n sockets,\n };\n}\n\nexport function buildRuntimeEnv(\n state: RuntimeBootstrapState,\n options: XpodRuntimeOptions,\n envFromFile: Record<string, string | undefined> = {},\n): Record<string, string | undefined> {\n const mergedEnv = {\n ...envFromFile,\n ...options.env,\n };\n const externalOidcIssuer = resolveExternalOidcIssuer(mergedEnv);\n\n const runtimeEnv = {\n ...mergedEnv,\n XPOD_ENV_PATH: state.envFilePath,\n XPOD_EDITION: state.mode,\n CSS_BASE_URL: state.baseUrl,\n CSS_TOKEN_ENDPOINT: externalOidcIssuer\n ? oidcTokenEndpoint(externalOidcIssuer)\n : `${state.baseUrl}.oidc/token`,\n CSS_ROOT_FILE_PATH: state.rootFilePath,\n CSS_RDF_INDEX_PATH: state.rdfIndexPath,\n CSS_SPARQL_ENDPOINT: state.sparqlEndpoint,\n SPARQL_ENDPOINT: state.sparqlEndpoint,\n CSS_IDENTITY_DB_URL: state.identityDbUrl,\n DATABASE_URL: state.identityDbUrl,\n CSS_PORT: state.ports.css !== undefined ? String(state.ports.css) : undefined,\n API_PORT: state.ports.api !== undefined ? String(state.ports.api) : undefined,\n API_HOST: state.bindHost,\n API_SOCKET_PATH: state.sockets.api,\n XPOD_MAIN_PORT: state.ports.gateway !== undefined ? String(state.ports.gateway) : undefined,\n CORS_ORIGINS: new URL(state.baseUrl).origin,\n CSS_LOGGING_LEVEL: state.logLevel,\n };\n\n return applyAuthModeEnv(runtimeEnv, state.cssAuthMode);\n}\n\nexport function buildRuntimeShorthand(\n runtimeEnv: Record<string, string | undefined>,\n options: XpodRuntimeOptions,\n state: RuntimeBootstrapState,\n baseEnv: Record<string, string | undefined> = nodeRuntimePlatform.baseEnv,\n): Record<string, string | number | boolean> {\n const envValue = (key: string): string | undefined => runtimeEnv[key] ?? baseEnv[key];\n const externalOidcIssuer = resolveExternalOidcIssuer({\n oidcIssuer: envValue('oidcIssuer'),\n });\n\n return {\n ...withDefinedEntries([\n ['baseStorageDomain', envValue('CSS_BASE_STORAGE_DOMAIN')],\n ['minioAccessKey', envValue('CSS_MINIO_ACCESS_KEY')],\n ['minioSecretKey', envValue('CSS_MINIO_SECRET_KEY')],\n ['minioEndpoint', envValue('CSS_MINIO_ENDPOINT')],\n ['minioBucketName', envValue('CSS_MINIO_BUCKET_NAME')],\n ['redisClient', envValue('CSS_REDIS_CLIENT')],\n ['redisUsername', envValue('CSS_REDIS_USERNAME')],\n ['redisPassword', envValue('CSS_REDIS_PASSWORD')],\n ['emailConfigHost', envValue('CSS_EMAIL_CONFIG_HOST') ?? ''],\n ['emailConfigPort', envValue('CSS_EMAIL_CONFIG_PORT') ?? '587'],\n ['emailConfigAuthUser', envValue('CSS_EMAIL_CONFIG_AUTH_USER') ?? ''],\n ['emailConfigAuthPass', envValue('CSS_EMAIL_CONFIG_AUTH_PASS') ?? ''],\n ['oidcIssuer', externalOidcIssuer],\n ['allowedHosts', envValue('CSS_ALLOWED_HOSTS')],\n ['nodeId', envValue('XPOD_NODE_ID')],\n ['nodeToken', envValue('XPOD_NODE_TOKEN')],\n ['serviceToken', envValue('XPOD_SERVICE_TOKEN')],\n ]),\n baseUrl: state.baseUrl,\n rootFilePath: state.rootFilePath,\n sparqlEndpoint: state.sparqlEndpoint,\n rdfIndexPath: state.rdfIndexPath,\n identityDbUrl: state.identityDbUrl,\n usageDbUrl: state.usageDbUrl,\n logLevel: state.logLevel,\n authMode: state.cssAuthMode,\n edition: state.mode === 'cloud' ? 'server' : 'local',\n edgeNodesEnabled: options.edgeNodesEnabled ?? false,\n centerRegistrationEnabled: options.centerRegistrationEnabled ?? false,\n ...(options.shorthand ?? {}),\n };\n}\n\nexport function createCssRuntimeConfig(\n state: RuntimeBootstrapState,\n _open?: boolean,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'> = nodeRuntimePlatform,\n): string {\n const configPath = normalizeWindowsAbsolutePath(platform.joinPath(PACKAGE_ROOT, `config/${state.mode}.json`));\n const runtimeRoot = normalizeWindowsAbsolutePath(state.runtimeRoot);\n const runtimeConfigPath = arePathsOnDifferentWindowsDrives(runtimeRoot, configPath)\n ? (() => {\n const runtimeConfigDir = normalizeWindowsAbsolutePath(platform.joinPath(\n platform.dirname(configPath),\n '..',\n '.xpod-runtime',\n state.id,\n ));\n platform.ensureDir(runtimeConfigDir);\n return normalizeWindowsAbsolutePath(platform.joinPath(runtimeConfigDir, 'css-runtime.config.json'));\n })()\n : normalizeWindowsAbsolutePath(platform.joinPath(runtimeRoot, 'css-runtime.config.json'));\n const runtimeConfigDir = platform.dirname(runtimeConfigPath);\n const runtimeConfigImportPath = rewriteConfigForFileUrlImportsIfNeeded(\n configPath,\n platform.joinPath(runtimeConfigDir, 'config'),\n platform,\n );\n platform.writeTextFile(runtimeConfigPath, JSON.stringify({\n '@context': [\n CSS_COMPONENTS_CONTEXT,\n ASYNC_HANDLERS_CONTEXT,\n ],\n import: [\n toConfigImportSpecifier(runtimeConfigPath, runtimeConfigImportPath),\n ...cssAuthModeConfigImports(state.cssAuthMode),\n ],\n }, null, 2));\n\n return runtimeConfigPath;\n}\n\nfunction rewriteConfigForFileUrlImportsIfNeeded(\n configPath: string,\n outputDir: string,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'>,\n rewritten = new Map<string, string>(),\n): string {\n const normalizedConfigPath = normalizeWindowsAbsolutePath(configPath);\n const componentContext = readPackageComponentContext(normalizedConfigPath, platform);\n if (\n isWindowsAbsolutePath(normalizedConfigPath) ||\n (!pathNeedsEscapedFileUrl(normalizedConfigPath) && !componentContext)\n ) {\n return normalizedConfigPath;\n }\n\n const existing = rewritten.get(normalizedConfigPath);\n if (existing) {\n return existing;\n }\n\n platform.ensureDir(outputDir);\n const outputPath = normalizeWindowsAbsolutePath(platform.joinPath(outputDir, path.posix.basename(normalizedConfigPath)));\n rewritten.set(normalizedConfigPath, outputPath);\n\n const parsed = JSON.parse(platform.readTextFile(normalizedConfigPath)) as Record<string, unknown>;\n preserveConfigBase(parsed, normalizedConfigPath);\n normalizeComponentParameterKeys(parsed, componentContext);\n rewriteConfigAssetPaths(parsed, normalizedConfigPath, resolveConfigAssetPath);\n parsed.import = rewriteConfigImports(\n normalizedConfigPath,\n parsed.import,\n outputDir,\n platform,\n rewritten,\n );\n platform.writeTextFile(outputPath, `${JSON.stringify(parsed, null, 2)}\\n`);\n return outputPath;\n}\n\nfunction readPackageComponentContext(\n configPath: string,\n platform: Pick<RuntimePlatform, 'readTextFile'>,\n): ReturnType<typeof extractComponentParameterContext> {\n const normalizedConfigPath = normalizeWindowsAbsolutePath(configPath);\n const useWindowsPaths = isWindowsAbsolutePath(normalizedConfigPath);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n const contextPath = normalizeWindowsAbsolutePath(pathApi.join(\n resolveConfigAssetBase(normalizedConfigPath),\n 'dist',\n 'components',\n 'context.jsonld',\n ));\n try {\n return extractComponentParameterContext(JSON.parse(platform.readTextFile(contextPath)));\n } catch {\n return undefined;\n }\n}\n\nfunction resolveConfigAssetPath(sourceConfigPath: string, assetPath: string): string {\n const normalizedSourcePath = normalizeWindowsAbsolutePath(sourceConfigPath);\n const useWindowsPaths = isWindowsAbsolutePath(normalizedSourcePath);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n return normalizeWindowsAbsolutePath(pathApi.resolve(resolveConfigAssetBase(normalizedSourcePath), assetPath));\n}\n\nfunction resolveConfigAssetBase(sourceConfigPath: string): string {\n const normalized = normalizeWindowsAbsolutePath(sourceConfigPath);\n const useWindowsPaths = isWindowsAbsolutePath(normalized);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n const normalizedForSearch = normalized.replace(/\\\\/g, '/');\n const markerIndex = normalizedForSearch.lastIndexOf('/config/');\n if (markerIndex >= 0) {\n const packageRoot = normalizedForSearch.slice(0, markerIndex);\n return useWindowsPaths ? packageRoot.replace(/\\//g, '\\\\') : packageRoot;\n }\n return pathApi.dirname(normalized);\n}\n\nfunction preserveConfigBase(parsed: Record<string, unknown>, configPath: string): void {\n const context = parsed['@context'];\n const contexts = Array.isArray(context)\n ? [...context]\n : context === undefined\n ? []\n : [context];\n const withoutExistingBase = contexts.filter((entry) => (\n !entry || typeof entry !== 'object' || !('@base' in entry)\n ));\n withoutExistingBase.push({ '@base': resolveConfigBase(configPath) });\n parsed['@context'] = withoutExistingBase;\n delete parsed['@base'];\n}\n\nfunction resolveConfigBase(configPath: string): string {\n const normalized = normalizeWindowsAbsolutePath(configPath).replace(/\\\\/g, '/');\n if (normalized.includes('/node_modules/@solid/community-server/config/')) {\n return CSS_CONFIG_BASE;\n }\n if (normalized.includes('/node_modules/@undefineds.co/xpod/config/')) {\n return XPOD_CONFIG_BASE;\n }\n return pathToFileURL(path.posix.dirname(normalized) + '/').href;\n}\n\nfunction rewriteConfigImports(\n sourceConfigPath: string,\n imports: unknown,\n outputDir: string,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'>,\n rewritten: Map<string, string>,\n): unknown {\n if (typeof imports === 'string') {\n return rewriteConfigImport(sourceConfigPath, imports, outputDir, platform, rewritten);\n }\n\n if (Array.isArray(imports)) {\n return imports.map((value) => typeof value === 'string'\n ? rewriteConfigImport(sourceConfigPath, value, outputDir, platform, rewritten)\n : value);\n }\n\n return imports;\n}\n\nfunction rewriteConfigImport(\n sourceConfigPath: string,\n importValue: string,\n outputDir: string,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'readTextFile' | 'writeTextFile'>,\n rewritten: Map<string, string>,\n): string {\n if (!importValue.startsWith('./') && !importValue.startsWith('../')) {\n return importValue;\n }\n\n const targetPath = normalizeWindowsAbsolutePath(\n path.posix.resolve(platform.dirname(sourceConfigPath), importValue),\n );\n const rewrittenTargetPath = rewriteConfigForFileUrlImportsIfNeeded(targetPath, outputDir, platform, rewritten);\n return pathToFileURL(rewrittenTargetPath).href;\n}\n\nexport function initRuntimeLogger(\n level: string,\n platform: Pick<RuntimePlatform, 'cwd' | 'joinPath'> = nodeRuntimePlatform,\n): void {\n const loggerFactory = new ConfigurableLoggerFactory(level, {\n fileName: platform.joinPath(platform.cwd(), 'logs/xpod-%DATE%.log'),\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export type ComponentParameterContext = Record<string, {
2
+ '@id'?: string;
3
+ '@context'?: Record<string, unknown>;
4
+ }>;
5
+ export declare function extractComponentParameterContext(document: unknown): ComponentParameterContext | undefined;
6
+ export declare function normalizeComponentParameterKeys(document: unknown, componentContext: ComponentParameterContext | undefined): void;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractComponentParameterContext = extractComponentParameterContext;
4
+ exports.normalizeComponentParameterKeys = normalizeComponentParameterKeys;
5
+ function isObject(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ function extractComponentParameterContext(document) {
9
+ if (!isObject(document)) {
10
+ return undefined;
11
+ }
12
+ const result = {};
13
+ const contexts = Array.isArray(document['@context'])
14
+ ? document['@context']
15
+ : [document['@context']];
16
+ for (const context of contexts) {
17
+ if (!isObject(context)) {
18
+ continue;
19
+ }
20
+ for (const [key, value] of Object.entries(context)) {
21
+ if (isObject(value) && isObject(value['@context'])) {
22
+ result[key] = value;
23
+ }
24
+ }
25
+ }
26
+ return Object.keys(result).length > 0 ? result : undefined;
27
+ }
28
+ function normalizeComponentParameterKeys(document, componentContext) {
29
+ if (!componentContext) {
30
+ return;
31
+ }
32
+ const visit = (value) => {
33
+ if (Array.isArray(value)) {
34
+ for (const entry of value) {
35
+ visit(entry);
36
+ }
37
+ return;
38
+ }
39
+ if (!isObject(value)) {
40
+ return;
41
+ }
42
+ const type = value['@type'];
43
+ if (typeof type === 'string') {
44
+ const typeDefinition = componentContext[type];
45
+ const typeContext = typeDefinition?.['@context'];
46
+ if (typeContext) {
47
+ for (const key of Object.keys(value)) {
48
+ if (key.startsWith('@') ||
49
+ key === 'comment') {
50
+ continue;
51
+ }
52
+ const lookupKey = key.startsWith(`${type}:`)
53
+ ? key.slice(type.length + 1)
54
+ : key.includes(':')
55
+ ? undefined
56
+ : key;
57
+ const normalized = lookupKey
58
+ ? normalizedComponentKey(type, typeDefinition, typeContext, lookupKey)
59
+ : undefined;
60
+ if (!normalized || normalized.key === key) {
61
+ continue;
62
+ }
63
+ if (!(normalized.key in value)) {
64
+ value[normalized.key] = normalizeComponentValue(value[key], normalized.container);
65
+ }
66
+ delete value[key];
67
+ }
68
+ }
69
+ }
70
+ for (const entry of Object.values(value)) {
71
+ visit(entry);
72
+ }
73
+ };
74
+ visit(document);
75
+ }
76
+ function normalizedComponentKey(type, typeDefinition, typeContext, key) {
77
+ const termDefinition = typeContext[key];
78
+ if (!isObject(termDefinition)) {
79
+ return undefined;
80
+ }
81
+ const typeId = typeDefinition['@id'];
82
+ const termId = termDefinition['@id'];
83
+ if (typeof typeId !== 'string' || typeof termId !== 'string' || !termId.startsWith(typeId)) {
84
+ return undefined;
85
+ }
86
+ const localName = termId.slice(typeId.length);
87
+ return localName ? {
88
+ key: `${type}:${localName}`,
89
+ container: termDefinition['@container'],
90
+ } : undefined;
91
+ }
92
+ function normalizeComponentValue(value, container) {
93
+ if (container === '@list' &&
94
+ Array.isArray(value) &&
95
+ !(value.length === 1 && isObject(value[0]) && '@list' in value[0])) {
96
+ return { '@list': value };
97
+ }
98
+ return value;
99
+ }
100
+ //# sourceMappingURL=component-parameter-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-parameter-keys.js","sourceRoot":"","sources":["../../src/runtime/component-parameter-keys.ts"],"names":[],"mappings":"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","sourcesContent":["type JsonObject = Record<string, unknown>;\n\nexport type ComponentParameterContext = Record<string, {\n '@id'?: string\n '@context'?: Record<string, unknown>\n}>;\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function extractComponentParameterContext(document: unknown): ComponentParameterContext | undefined {\n if (!isObject(document)) {\n return undefined;\n }\n\n const result: ComponentParameterContext = {};\n const contexts = Array.isArray(document['@context'])\n ? document['@context']\n : [document['@context']];\n\n for (const context of contexts) {\n if (!isObject(context)) {\n continue;\n }\n\n for (const [key, value] of Object.entries(context)) {\n if (isObject(value) && isObject(value['@context'])) {\n result[key] = value as ComponentParameterContext[string];\n }\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nexport function normalizeComponentParameterKeys(\n document: unknown,\n componentContext: ComponentParameterContext | undefined,\n): void {\n if (!componentContext) {\n return;\n }\n\n const visit = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const entry of value) {\n visit(entry);\n }\n return;\n }\n\n if (!isObject(value)) {\n return;\n }\n\n const type = value['@type'];\n if (typeof type === 'string') {\n const typeDefinition = componentContext[type];\n const typeContext = typeDefinition?.['@context'];\n if (typeContext) {\n for (const key of Object.keys(value)) {\n if (\n key.startsWith('@') ||\n key === 'comment'\n ) {\n continue;\n }\n\n const lookupKey = key.startsWith(`${type}:`)\n ? key.slice(type.length + 1)\n : key.includes(':')\n ? undefined\n : key;\n const normalized = lookupKey\n ? normalizedComponentKey(type, typeDefinition, typeContext, lookupKey)\n : undefined;\n if (!normalized || normalized.key === key) {\n continue;\n }\n\n if (!(normalized.key in value)) {\n value[normalized.key] = normalizeComponentValue(value[key], normalized.container);\n }\n delete value[key];\n }\n }\n }\n\n for (const entry of Object.values(value)) {\n visit(entry);\n }\n };\n\n visit(document);\n}\n\nfunction normalizedComponentKey(\n type: string,\n typeDefinition: ComponentParameterContext[string],\n typeContext: Record<string, unknown>,\n key: string,\n): { key: string; container?: unknown } | undefined {\n const termDefinition = typeContext[key];\n if (!isObject(termDefinition)) {\n return undefined;\n }\n\n const typeId = typeDefinition['@id'];\n const termId = termDefinition['@id'];\n if (typeof typeId !== 'string' || typeof termId !== 'string' || !termId.startsWith(typeId)) {\n return undefined;\n }\n\n const localName = termId.slice(typeId.length);\n return localName ? {\n key: `${type}:${localName}`,\n container: termDefinition['@container'],\n } : undefined;\n}\n\nfunction normalizeComponentValue(value: unknown, container: unknown): unknown {\n if (\n container === '@list' &&\n Array.isArray(value) &&\n !(value.length === 1 && isObject(value[0]) && '@list' in value[0])\n ) {\n return { '@list': value };\n }\n return value;\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare function rewriteConfigAssetPaths(parsed: Record<string, unknown>, sourceConfigPath: string, resolveAssetPath: (sourceConfigPath: string, assetPath: string) => string): void;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rewriteConfigAssetPaths = rewriteConfigAssetPaths;
4
+ const CONFIG_ASSET_KEYS = new Set([
5
+ 'filePath',
6
+ 'htmlFile',
7
+ 'template',
8
+ 'templateFolder',
9
+ ]);
10
+ function isPlainObject(value) {
11
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
12
+ }
13
+ function isRelativeAssetPath(value) {
14
+ return value.startsWith('./') || value.startsWith('../');
15
+ }
16
+ function rewriteConfigAssetPaths(parsed, sourceConfigPath, resolveAssetPath) {
17
+ const visit = (value) => {
18
+ if (Array.isArray(value)) {
19
+ for (const entry of value) {
20
+ visit(entry);
21
+ }
22
+ return;
23
+ }
24
+ if (!isPlainObject(value)) {
25
+ return;
26
+ }
27
+ for (const [key, entry] of Object.entries(value)) {
28
+ if (CONFIG_ASSET_KEYS.has(key) && typeof entry === 'string' && isRelativeAssetPath(entry)) {
29
+ value[key] = resolveAssetPath(sourceConfigPath, entry);
30
+ continue;
31
+ }
32
+ visit(entry);
33
+ }
34
+ };
35
+ visit(parsed);
36
+ }
37
+ //# sourceMappingURL=config-asset-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-asset-paths.js","sourceRoot":"","sources":["../../src/runtime/config-asset-paths.ts"],"names":[],"mappings":";;AAeA,0DA2BC;AA1CD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,UAAU;IACV,UAAU;IACV,UAAU;IACV,gBAAgB;CACjB,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,uBAAuB,CACrC,MAA+B,EAC/B,gBAAwB,EACxB,gBAAyE;IAEzE,MAAM,KAAK,GAAG,CAAC,KAAc,EAAQ,EAAE;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,KAAK,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1F,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBACvD,SAAS;YACX,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,CAAC;AAChB,CAAC","sourcesContent":["const CONFIG_ASSET_KEYS = new Set([\n 'filePath',\n 'htmlFile',\n 'template',\n 'templateFolder',\n]);\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isRelativeAssetPath(value: string): boolean {\n return value.startsWith('./') || value.startsWith('../');\n}\n\nexport function rewriteConfigAssetPaths(\n parsed: Record<string, unknown>,\n sourceConfigPath: string,\n resolveAssetPath: (sourceConfigPath: string, assetPath: string) => string,\n): void {\n const visit = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const entry of value) {\n visit(entry);\n }\n return;\n }\n\n if (!isPlainObject(value)) {\n return;\n }\n\n for (const [key, entry] of Object.entries(value)) {\n if (CONFIG_ASSET_KEYS.has(key) && typeof entry === 'string' && isRelativeAssetPath(entry)) {\n value[key] = resolveAssetPath(sourceConfigPath, entry);\n continue;\n }\n visit(entry);\n }\n };\n\n visit(parsed);\n}\n"]}
@@ -10,9 +10,13 @@ exports.buildApiChildEnv = buildApiChildEnv;
10
10
  const node_fs_1 = __importDefault(require("node:fs"));
11
11
  const node_path_1 = __importDefault(require("node:path"));
12
12
  const node_url_1 = require("node:url");
13
+ const component_parameter_keys_1 = require("./component-parameter-keys");
14
+ const config_asset_paths_1 = require("./config-asset-paths");
13
15
  const oidc_issuer_1 = require("./oidc-issuer");
14
16
  const AuthMode_1 = require("../authorization/AuthMode");
15
17
  const bootstrap_1 = require("./bootstrap");
18
+ const CSS_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/config/';
19
+ const XPOD_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/config/';
16
20
  const CSS_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld';
17
21
  const XPOD_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld';
18
22
  const ASYNC_HANDLERS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld';
@@ -63,7 +67,7 @@ function pathNeedsEscapedFileUrl(filePath) {
63
67
  function createCssChildRuntimeConfig(options) {
64
68
  node_fs_1.default.mkdirSync(options.runtimeRoot, { recursive: true });
65
69
  const runtimeConfigPath = node_path_1.default.join(options.runtimeRoot, 'css-child-runtime.config.json');
66
- const configImportPath = rewriteConfigForFileUrlImportsIfNeeded(node_path_1.default.resolve(options.configPath), node_path_1.default.join(options.runtimeRoot, 'config'));
70
+ const configImportPath = rewriteConfigForFileUrlImportsIfNeeded(node_path_1.default.resolve(options.configPath), node_path_1.default.join(options.runtimeRoot, 'config'), Boolean(options.externalOidcIssuer));
67
71
  const authMode = (0, AuthMode_1.resolveAuthModeInput)(options.authMode, options.baseEnv);
68
72
  node_fs_1.default.writeFileSync(runtimeConfigPath, JSON.stringify({
69
73
  '@context': [
@@ -91,8 +95,9 @@ function createCssChildRuntimeConfig(options) {
91
95
  cwd: options.externalOidcIssuer ? options.runtimeRoot : undefined,
92
96
  };
93
97
  }
94
- function rewriteConfigForFileUrlImportsIfNeeded(configPath, outputDir, rewritten = new Map()) {
95
- if (!pathNeedsEscapedFileUrl(configPath)) {
98
+ function rewriteConfigForFileUrlImportsIfNeeded(configPath, outputDir, forceCopy = false, rewritten = new Map()) {
99
+ const componentContext = readPackageComponentContext(configPath);
100
+ if (!forceCopy && !pathNeedsEscapedFileUrl(configPath) && !componentContext) {
96
101
  return configPath;
97
102
  }
98
103
  const existing = rewritten.get(configPath);
@@ -103,10 +108,56 @@ function rewriteConfigForFileUrlImportsIfNeeded(configPath, outputDir, rewritten
103
108
  const outputPath = node_path_1.default.join(outputDir, node_path_1.default.basename(configPath));
104
109
  rewritten.set(configPath, outputPath);
105
110
  const parsed = JSON.parse(node_fs_1.default.readFileSync(configPath, 'utf-8'));
111
+ preserveConfigBase(parsed, configPath);
112
+ (0, component_parameter_keys_1.normalizeComponentParameterKeys)(parsed, componentContext);
113
+ (0, config_asset_paths_1.rewriteConfigAssetPaths)(parsed, configPath, resolveConfigAssetPath);
106
114
  parsed.import = rewriteConfigImports(configPath, parsed.import, outputDir, rewritten);
107
115
  node_fs_1.default.writeFileSync(outputPath, `${JSON.stringify(parsed, null, 2)}\n`, 'utf-8');
108
116
  return outputPath;
109
117
  }
118
+ function readPackageComponentContext(configPath) {
119
+ const contextPath = node_path_1.default.join(resolveConfigAssetBase(configPath), 'dist', 'components', 'context.jsonld');
120
+ try {
121
+ return (0, component_parameter_keys_1.extractComponentParameterContext)(JSON.parse(node_fs_1.default.readFileSync(contextPath, 'utf-8')));
122
+ }
123
+ catch {
124
+ return undefined;
125
+ }
126
+ }
127
+ function resolveConfigAssetPath(sourceConfigPath, assetPath) {
128
+ return node_path_1.default.resolve(resolveConfigAssetBase(sourceConfigPath), assetPath);
129
+ }
130
+ function resolveConfigAssetBase(sourceConfigPath) {
131
+ const normalized = sourceConfigPath.replace(/\\/g, '/');
132
+ const configMarker = '/config/';
133
+ const markerIndex = normalized.lastIndexOf(configMarker);
134
+ if (markerIndex >= 0) {
135
+ return normalized.slice(0, markerIndex);
136
+ }
137
+ return node_path_1.default.dirname(sourceConfigPath);
138
+ }
139
+ function preserveConfigBase(parsed, configPath) {
140
+ const context = parsed['@context'];
141
+ const contexts = Array.isArray(context)
142
+ ? [...context]
143
+ : context === undefined
144
+ ? []
145
+ : [context];
146
+ const withoutExistingBase = contexts.filter((entry) => (!entry || typeof entry !== 'object' || !('@base' in entry)));
147
+ withoutExistingBase.push({ '@base': resolveConfigBase(configPath) });
148
+ parsed['@context'] = withoutExistingBase;
149
+ delete parsed['@base'];
150
+ }
151
+ function resolveConfigBase(configPath) {
152
+ const normalized = configPath.replace(/\\/g, '/');
153
+ if (normalized.includes('/node_modules/@solid/community-server/config/')) {
154
+ return CSS_CONFIG_BASE;
155
+ }
156
+ if (normalized.includes('/node_modules/@undefineds.co/xpod/config/')) {
157
+ return XPOD_CONFIG_BASE;
158
+ }
159
+ return (0, node_url_1.pathToFileURL)(node_path_1.default.dirname(configPath) + node_path_1.default.sep).href;
160
+ }
110
161
  function rewriteConfigImports(sourceConfigPath, imports, outputDir, rewritten) {
111
162
  if (typeof imports === 'string') {
112
163
  return rewriteConfigImport(sourceConfigPath, imports, outputDir, rewritten);
@@ -123,7 +174,7 @@ function rewriteConfigImport(sourceConfigPath, importValue, outputDir, rewritten
123
174
  return importValue;
124
175
  }
125
176
  const targetPath = node_path_1.default.resolve(node_path_1.default.dirname(sourceConfigPath), importValue);
126
- const rewrittenTargetPath = rewriteConfigForFileUrlImportsIfNeeded(targetPath, outputDir, rewritten);
177
+ const rewrittenTargetPath = rewriteConfigForFileUrlImportsIfNeeded(targetPath, outputDir, true, rewritten);
127
178
  return (0, node_url_1.pathToFileURL)(rewrittenTargetPath).href;
128
179
  }
129
180
  function buildCssArgs(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"css-process.js","sourceRoot":"","sources":["../../src/runtime/css-process.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { oidcTokenEndpoint } from './oidc-issuer';\nimport type { AuthMode } from '../authorization/AuthMode';\nimport { applyAuthModeEnv, isAuthModeEnvKey, resolveAuthModeInput } from '../authorization/AuthMode';\nimport { cssAuthModeConfigImports } from './bootstrap';\n\nconst CSS_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld';\nconst XPOD_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld';\nconst ASYNC_HANDLERS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld';\n\n/**\n * Build the environment for the CSS child process.\n *\n * `oidcIssuer` is an xpod shorthand value, not a CSS CLI argument.\n * The legacy CSS child process path injects it through a generated\n * Components.js config instead of CSS_* env aliases.\n */\nexport function buildCssChildEnv(\n baseUrl: string,\n cssPort: number,\n oidcIssuer?: string,\n authModeInput?: AuthMode | string,\n baseEnv: NodeJS.ProcessEnv = process.env,\n): Record<string, string> {\n const authMode = resolveAuthModeInput(authModeInput, baseEnv);\n const env: Record<string, string> = {\n ...baseEnv,\n CSS_PORT: cssPort.toString(),\n CSS_BASE_URL: baseUrl,\n } as Record<string, string>;\n applyAuthModeEnv(env, authMode);\n\n for (const key of Object.keys(env)) {\n if (key === 'oidcIssuer' || (isExternalOidcPollutionKey(key) && !isAuthModeEnvKey(key))) {\n delete env[key];\n }\n }\n\n return env;\n}\n\nfunction isExternalOidcPollutionKey(key: string): boolean {\n const normalized = key.toUpperCase().replace(/[^A-Z0-9]/g, '');\n return normalized.includes('OIDCISSUER') ||\n normalized.includes('IDPURL') ||\n normalized.includes('IDPJWKSURL') ||\n normalized.includes('IDENTITYPROVIDERURL') ||\n normalized.includes('IDENTITYPROVIDERJWKSURL');\n}\n\nfunction toImportSpecifier(fromFilePath: string, toFilePath: string): string {\n if (pathNeedsEscapedFileUrl(fromFilePath) || pathNeedsEscapedFileUrl(toFilePath)) {\n return pathToFileURL(toFilePath).href;\n }\n\n const fromDirectory = path.dirname(fromFilePath);\n const relativePath = path.relative(fromDirectory, toFilePath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction pathNeedsEscapedFileUrl(filePath: string): boolean {\n return /\\s/.test(filePath);\n}\n\nexport function createCssChildRuntimeConfig(options: {\n configPath: string\n runtimeRoot: string\n authMode?: AuthMode | string\n externalOidcIssuer?: string\n baseEnv?: NodeJS.ProcessEnv\n}): { configPath: string; cwd?: string } {\n fs.mkdirSync(options.runtimeRoot, { recursive: true });\n const runtimeConfigPath = path.join(options.runtimeRoot, 'css-child-runtime.config.json');\n const configImportPath = rewriteConfigForFileUrlImportsIfNeeded(\n path.resolve(options.configPath),\n path.join(options.runtimeRoot, 'config'),\n );\n const authMode = resolveAuthModeInput(options.authMode, options.baseEnv);\n fs.writeFileSync(runtimeConfigPath, JSON.stringify({\n '@context': [\n CSS_COMPONENTS_CONTEXT,\n XPOD_COMPONENTS_CONTEXT,\n ASYNC_HANDLERS_CONTEXT,\n ],\n import: [\n toImportSpecifier(runtimeConfigPath, configImportPath),\n ...cssAuthModeConfigImports(authMode),\n ],\n '@graph': [],\n }, null, 2), 'utf-8');\n\n if (options.externalOidcIssuer) {\n fs.writeFileSync(path.join(options.runtimeRoot, 'package.json'), JSON.stringify({\n private: true,\n name: 'xpod-css-runtime',\n }, null, 2), 'utf-8');\n fs.writeFileSync(path.join(options.runtimeRoot, '.community-solid-server.config.json'), JSON.stringify({\n oidcIssuer: options.externalOidcIssuer,\n }, null, 2), 'utf-8');\n }\n\n return {\n configPath: runtimeConfigPath,\n cwd: options.externalOidcIssuer ? options.runtimeRoot : undefined,\n };\n}\n\nfunction rewriteConfigForFileUrlImportsIfNeeded(\n configPath: string,\n outputDir: string,\n rewritten = new Map<string, string>(),\n): string {\n if (!pathNeedsEscapedFileUrl(configPath)) {\n return configPath;\n }\n\n const existing = rewritten.get(configPath);\n if (existing) {\n return existing;\n }\n\n fs.mkdirSync(outputDir, { recursive: true });\n const outputPath = path.join(outputDir, path.basename(configPath));\n rewritten.set(configPath, outputPath);\n\n const parsed = JSON.parse(fs.readFileSync(configPath, 'utf-8')) as Record<string, unknown>;\n parsed.import = rewriteConfigImports(configPath, parsed.import, outputDir, rewritten);\n fs.writeFileSync(outputPath, `${JSON.stringify(parsed, null, 2)}\\n`, 'utf-8');\n\n return outputPath;\n}\n\nfunction rewriteConfigImports(\n sourceConfigPath: string,\n imports: unknown,\n outputDir: string,\n rewritten: Map<string, string>,\n): unknown {\n if (typeof imports === 'string') {\n return rewriteConfigImport(sourceConfigPath, imports, outputDir, rewritten);\n }\n\n if (Array.isArray(imports)) {\n return imports.map((value) => typeof value === 'string'\n ? rewriteConfigImport(sourceConfigPath, value, outputDir, rewritten)\n : value);\n }\n\n return imports;\n}\n\nfunction rewriteConfigImport(\n sourceConfigPath: string,\n importValue: string,\n outputDir: string,\n rewritten: Map<string, string>,\n): string {\n if (!importValue.startsWith('./') && !importValue.startsWith('../')) {\n return importValue;\n }\n\n const targetPath = path.resolve(path.dirname(sourceConfigPath), importValue);\n const rewrittenTargetPath = rewriteConfigForFileUrlImportsIfNeeded(targetPath, outputDir, rewritten);\n return pathToFileURL(rewrittenTargetPath).href;\n}\n\nexport function buildCssArgs(options: {\n cssBinary: string\n configPath: string\n cssModuleRoot: string\n cssPort: number\n baseUrl: string\n externalOidcIssuer?: string\n}): string[] {\n return [\n options.cssBinary,\n '-c', options.configPath,\n '-m', options.cssModuleRoot,\n '-p', options.cssPort.toString(),\n '-b', options.baseUrl,\n ];\n}\n\nexport function buildApiChildEnv(options: {\n apiPort: number\n mainPort: number\n cssPort: number\n baseUrl: string\n rdfIndexPath?: string\n authMode?: AuthMode | string\n externalOidcIssuer?: string\n baseEnv?: NodeJS.ProcessEnv\n}): Record<string, string> {\n const authMode = resolveAuthModeInput(options.authMode, options.baseEnv);\n const env = {\n ...(options.baseEnv ?? process.env),\n ...(options.externalOidcIssuer ? { oidcIssuer: options.externalOidcIssuer } : {}),\n API_PORT: options.apiPort.toString(),\n XPOD_MAIN_PORT: options.mainPort.toString(),\n CSS_INTERNAL_URL: `http://localhost:${options.cssPort}`,\n CSS_BASE_URL: options.baseUrl,\n ...(options.rdfIndexPath ? { CSS_RDF_INDEX_PATH: options.rdfIndexPath } : {}),\n CSS_TOKEN_ENDPOINT: options.externalOidcIssuer\n ? oidcTokenEndpoint(options.externalOidcIssuer)\n : `${options.baseUrl}.oidc/token`,\n } as Record<string, string>;\n\n return applyAuthModeEnv(env, authMode);\n}\n"]}
1
+ {"version":3,"file":"css-process.js","sourceRoot":"","sources":["../../src/runtime/css-process.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { extractComponentParameterContext, normalizeComponentParameterKeys } from './component-parameter-keys';\nimport { rewriteConfigAssetPaths } from './config-asset-paths';\nimport { oidcTokenEndpoint } from './oidc-issuer';\nimport type { AuthMode } from '../authorization/AuthMode';\nimport { applyAuthModeEnv, isAuthModeEnvKey, resolveAuthModeInput } from '../authorization/AuthMode';\nimport { cssAuthModeConfigImports } from './bootstrap';\n\nconst CSS_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/config/';\nconst XPOD_CONFIG_BASE = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/config/';\nconst CSS_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld';\nconst XPOD_COMPONENTS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld';\nconst ASYNC_HANDLERS_CONTEXT = 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld';\n\n/**\n * Build the environment for the CSS child process.\n *\n * `oidcIssuer` is an xpod shorthand value, not a CSS CLI argument.\n * The legacy CSS child process path injects it through a generated\n * Components.js config instead of CSS_* env aliases.\n */\nexport function buildCssChildEnv(\n baseUrl: string,\n cssPort: number,\n oidcIssuer?: string,\n authModeInput?: AuthMode | string,\n baseEnv: NodeJS.ProcessEnv = process.env,\n): Record<string, string> {\n const authMode = resolveAuthModeInput(authModeInput, baseEnv);\n const env: Record<string, string> = {\n ...baseEnv,\n CSS_PORT: cssPort.toString(),\n CSS_BASE_URL: baseUrl,\n } as Record<string, string>;\n applyAuthModeEnv(env, authMode);\n\n for (const key of Object.keys(env)) {\n if (key === 'oidcIssuer' || (isExternalOidcPollutionKey(key) && !isAuthModeEnvKey(key))) {\n delete env[key];\n }\n }\n\n return env;\n}\n\nfunction isExternalOidcPollutionKey(key: string): boolean {\n const normalized = key.toUpperCase().replace(/[^A-Z0-9]/g, '');\n return normalized.includes('OIDCISSUER') ||\n normalized.includes('IDPURL') ||\n normalized.includes('IDPJWKSURL') ||\n normalized.includes('IDENTITYPROVIDERURL') ||\n normalized.includes('IDENTITYPROVIDERJWKSURL');\n}\n\nfunction toImportSpecifier(fromFilePath: string, toFilePath: string): string {\n if (pathNeedsEscapedFileUrl(fromFilePath) || pathNeedsEscapedFileUrl(toFilePath)) {\n return pathToFileURL(toFilePath).href;\n }\n\n const fromDirectory = path.dirname(fromFilePath);\n const relativePath = path.relative(fromDirectory, toFilePath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction pathNeedsEscapedFileUrl(filePath: string): boolean {\n return /\\s/.test(filePath);\n}\n\nexport function createCssChildRuntimeConfig(options: {\n configPath: string\n runtimeRoot: string\n authMode?: AuthMode | string\n externalOidcIssuer?: string\n baseEnv?: NodeJS.ProcessEnv\n}): { configPath: string; cwd?: string } {\n fs.mkdirSync(options.runtimeRoot, { recursive: true });\n const runtimeConfigPath = path.join(options.runtimeRoot, 'css-child-runtime.config.json');\n const configImportPath = rewriteConfigForFileUrlImportsIfNeeded(\n path.resolve(options.configPath),\n path.join(options.runtimeRoot, 'config'),\n Boolean(options.externalOidcIssuer),\n );\n const authMode = resolveAuthModeInput(options.authMode, options.baseEnv);\n fs.writeFileSync(runtimeConfigPath, JSON.stringify({\n '@context': [\n CSS_COMPONENTS_CONTEXT,\n XPOD_COMPONENTS_CONTEXT,\n ASYNC_HANDLERS_CONTEXT,\n ],\n import: [\n toImportSpecifier(runtimeConfigPath, configImportPath),\n ...cssAuthModeConfigImports(authMode),\n ],\n '@graph': [],\n }, null, 2), 'utf-8');\n\n if (options.externalOidcIssuer) {\n fs.writeFileSync(path.join(options.runtimeRoot, 'package.json'), JSON.stringify({\n private: true,\n name: 'xpod-css-runtime',\n }, null, 2), 'utf-8');\n fs.writeFileSync(path.join(options.runtimeRoot, '.community-solid-server.config.json'), JSON.stringify({\n oidcIssuer: options.externalOidcIssuer,\n }, null, 2), 'utf-8');\n }\n\n return {\n configPath: runtimeConfigPath,\n cwd: options.externalOidcIssuer ? options.runtimeRoot : undefined,\n };\n}\n\nfunction rewriteConfigForFileUrlImportsIfNeeded(\n configPath: string,\n outputDir: string,\n forceCopy = false,\n rewritten = new Map<string, string>(),\n): string {\n const componentContext = readPackageComponentContext(configPath);\n if (!forceCopy && !pathNeedsEscapedFileUrl(configPath) && !componentContext) {\n return configPath;\n }\n\n const existing = rewritten.get(configPath);\n if (existing) {\n return existing;\n }\n\n fs.mkdirSync(outputDir, { recursive: true });\n const outputPath = path.join(outputDir, path.basename(configPath));\n rewritten.set(configPath, outputPath);\n\n const parsed = JSON.parse(fs.readFileSync(configPath, 'utf-8')) as Record<string, unknown>;\n preserveConfigBase(parsed, configPath);\n normalizeComponentParameterKeys(parsed, componentContext);\n rewriteConfigAssetPaths(parsed, configPath, resolveConfigAssetPath);\n parsed.import = rewriteConfigImports(configPath, parsed.import, outputDir, rewritten);\n fs.writeFileSync(outputPath, `${JSON.stringify(parsed, null, 2)}\\n`, 'utf-8');\n\n return outputPath;\n}\n\nfunction readPackageComponentContext(configPath: string): ReturnType<typeof extractComponentParameterContext> {\n const contextPath = path.join(resolveConfigAssetBase(configPath), 'dist', 'components', 'context.jsonld');\n try {\n return extractComponentParameterContext(JSON.parse(fs.readFileSync(contextPath, 'utf-8')));\n } catch {\n return undefined;\n }\n}\n\nfunction resolveConfigAssetPath(sourceConfigPath: string, assetPath: string): string {\n return path.resolve(resolveConfigAssetBase(sourceConfigPath), assetPath);\n}\n\nfunction resolveConfigAssetBase(sourceConfigPath: string): string {\n const normalized = sourceConfigPath.replace(/\\\\/g, '/');\n const configMarker = '/config/';\n const markerIndex = normalized.lastIndexOf(configMarker);\n if (markerIndex >= 0) {\n return normalized.slice(0, markerIndex);\n }\n return path.dirname(sourceConfigPath);\n}\n\nfunction preserveConfigBase(parsed: Record<string, unknown>, configPath: string): void {\n const context = parsed['@context'];\n const contexts = Array.isArray(context)\n ? [...context]\n : context === undefined\n ? []\n : [context];\n const withoutExistingBase = contexts.filter((entry) => (\n !entry || typeof entry !== 'object' || !('@base' in entry)\n ));\n withoutExistingBase.push({ '@base': resolveConfigBase(configPath) });\n parsed['@context'] = withoutExistingBase;\n delete parsed['@base'];\n}\n\nfunction resolveConfigBase(configPath: string): string {\n const normalized = configPath.replace(/\\\\/g, '/');\n if (normalized.includes('/node_modules/@solid/community-server/config/')) {\n return CSS_CONFIG_BASE;\n }\n if (normalized.includes('/node_modules/@undefineds.co/xpod/config/')) {\n return XPOD_CONFIG_BASE;\n }\n return pathToFileURL(path.dirname(configPath) + path.sep).href;\n}\n\nfunction rewriteConfigImports(\n sourceConfigPath: string,\n imports: unknown,\n outputDir: string,\n rewritten: Map<string, string>,\n): unknown {\n if (typeof imports === 'string') {\n return rewriteConfigImport(sourceConfigPath, imports, outputDir, rewritten);\n }\n\n if (Array.isArray(imports)) {\n return imports.map((value) => typeof value === 'string'\n ? rewriteConfigImport(sourceConfigPath, value, outputDir, rewritten)\n : value);\n }\n\n return imports;\n}\n\nfunction rewriteConfigImport(\n sourceConfigPath: string,\n importValue: string,\n outputDir: string,\n rewritten: Map<string, string>,\n): string {\n if (!importValue.startsWith('./') && !importValue.startsWith('../')) {\n return importValue;\n }\n\n const targetPath = path.resolve(path.dirname(sourceConfigPath), importValue);\n const rewrittenTargetPath = rewriteConfigForFileUrlImportsIfNeeded(targetPath, outputDir, true, rewritten);\n return pathToFileURL(rewrittenTargetPath).href;\n}\n\nexport function buildCssArgs(options: {\n cssBinary: string\n configPath: string\n cssModuleRoot: string\n cssPort: number\n baseUrl: string\n externalOidcIssuer?: string\n}): string[] {\n return [\n options.cssBinary,\n '-c', options.configPath,\n '-m', options.cssModuleRoot,\n '-p', options.cssPort.toString(),\n '-b', options.baseUrl,\n ];\n}\n\nexport function buildApiChildEnv(options: {\n apiPort: number\n mainPort: number\n cssPort: number\n baseUrl: string\n rdfIndexPath?: string\n authMode?: AuthMode | string\n externalOidcIssuer?: string\n baseEnv?: NodeJS.ProcessEnv\n}): Record<string, string> {\n const authMode = resolveAuthModeInput(options.authMode, options.baseEnv);\n const env = {\n ...(options.baseEnv ?? process.env),\n ...(options.externalOidcIssuer ? { oidcIssuer: options.externalOidcIssuer } : {}),\n API_PORT: options.apiPort.toString(),\n XPOD_MAIN_PORT: options.mainPort.toString(),\n CSS_INTERNAL_URL: `http://localhost:${options.cssPort}`,\n CSS_BASE_URL: options.baseUrl,\n ...(options.rdfIndexPath ? { CSS_RDF_INDEX_PATH: options.rdfIndexPath } : {}),\n CSS_TOKEN_ENDPOINT: options.externalOidcIssuer\n ? oidcTokenEndpoint(options.externalOidcIssuer)\n : `${options.baseUrl}.oidc/token`,\n } as Record<string, string>;\n\n return applyAuthModeEnv(env, authMode);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/xpod",
3
- "version": "0.3.42",
3
+ "version": "0.3.43",
4
4
  "description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
5
5
  "repository": "https://github.com/undefinedsco/xpod",
6
6
  "author": "developer@undefineds.co",