@happyvertical/smrt-playground 0.57.31 → 0.57.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { existsSync, readFileSync } from "node:fs";
3
3
  import { createRequire } from "node:module";
4
4
  import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
5
5
  import { pathToFileURL } from "node:url";
6
- import fg from "fast-glob";
6
+ import { glob } from "tinyglobby";
7
7
  //#region src/discovery.ts
8
8
  var require = createRequire(import.meta.url);
9
9
  var TS_SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
@@ -37,8 +37,9 @@ function resolveNodeModulePackageDir(projectRoot, packageName) {
37
37
  return existsSync(packageJsonPath) ? dirname(packageJsonPath) : null;
38
38
  }
39
39
  async function discoverWorkspacePlaygrounds(workspaceRoot, packagesPattern = "packages/*/src/svelte/playground.ts") {
40
- const matches = await fg(packagesPattern, {
40
+ const matches = await glob(packagesPattern, {
41
41
  cwd: workspaceRoot,
42
+ expandDirectories: false,
42
43
  absolute: true
43
44
  });
44
45
  const discovered = [];
@@ -127,4 +128,4 @@ function describePlaygroundSource(target, cwd = process.cwd()) {
127
128
  //#endregion
128
129
  export { discoverWorkspacePlaygrounds as a, importPlaygroundModule as c, discoverPlaygroundTargets as i, detectPlaygroundMode as n, findSmrtWorkspaceRoot as o, discoverInstalledPlaygrounds as r, findWorkspaceRoot as s, describePlaygroundSource as t };
129
130
 
130
- //# sourceMappingURL=discovery-ZfRkQSmn.js.map
131
+ //# sourceMappingURL=discovery-Flzky12E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-Flzky12E.js","names":[],"sources":["../../src/discovery.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport {\n dirname,\n extname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { glob } from 'tinyglobby';\nimport { coercePlaygroundModules } from './runtime.js';\nimport type {\n DiscoveredInstalledPlayground,\n DiscoveredPlaygroundTarget,\n DiscoveredWorkspacePlayground,\n SmrtPlaygroundModule,\n} from './types.js';\n\nconst require = createRequire(import.meta.url);\nconst TS_SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts']);\n\nexport function findWorkspaceRoot(startDir = process.cwd()): string | null {\n let current = resolve(startDir);\n\n while (true) {\n if (existsSync(join(current, 'pnpm-workspace.yaml'))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nexport function findSmrtWorkspaceRoot(startDir = process.cwd()): string | null {\n const workspaceRoot = findWorkspaceRoot(startDir);\n if (!workspaceRoot) {\n return null;\n }\n\n const hostPackageJsonPath = join(\n workspaceRoot,\n 'packages',\n 'smrt-playground',\n 'host',\n 'package.json',\n );\n\n return existsSync(hostPackageJsonPath) ? workspaceRoot : null;\n}\n\nexport function detectPlaygroundMode(\n projectRoot = process.cwd(),\n): 'workspace' | 'consumer' {\n return findSmrtWorkspaceRoot(projectRoot) ? 'workspace' : 'consumer';\n}\n\nfunction readJson(path: string): any {\n return JSON.parse(readFileSync(path, 'utf-8'));\n}\n\nfunction resolveNodeModulePackageDir(\n projectRoot: string,\n packageName: string,\n): string | null {\n const packageJsonPath = join(\n projectRoot,\n 'node_modules',\n packageName,\n 'package.json',\n );\n return existsSync(packageJsonPath) ? dirname(packageJsonPath) : null;\n}\n\nexport async function discoverWorkspacePlaygrounds(\n workspaceRoot: string,\n packagesPattern = 'packages/*/src/svelte/playground.ts',\n): Promise<DiscoveredWorkspacePlayground[]> {\n const matches = await glob(packagesPattern, {\n cwd: workspaceRoot,\n expandDirectories: false,\n absolute: true,\n });\n\n const discovered: DiscoveredWorkspacePlayground[] = [];\n\n for (const sourcePath of matches.sort()) {\n const packageDir = dirname(dirname(dirname(sourcePath)));\n const packageJsonPath = join(packageDir, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n continue;\n }\n\n const packageJson = readJson(packageJsonPath);\n const runtimePath = join(packageDir, 'dist', 'playground.js');\n\n discovered.push({\n packageName: packageJson.name,\n packageDir,\n sourcePath,\n runtimePath: existsSync(runtimePath) ? runtimePath : null,\n });\n }\n\n return discovered;\n}\n\nexport async function discoverInstalledPlaygrounds(\n projectRoot = process.cwd(),\n): Promise<DiscoveredInstalledPlayground[]> {\n const packageJsonPath = join(projectRoot, 'package.json');\n if (!existsSync(packageJsonPath)) {\n return [];\n }\n\n const packageJson = readJson(packageJsonPath);\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies,\n };\n\n const discovered: DiscoveredInstalledPlayground[] = [];\n\n for (const dependencyName of Object.keys(dependencies).sort()) {\n if (\n !dependencyName.startsWith('@happyvertical/smrt-') ||\n dependencyName === '@happyvertical/smrt-playground'\n ) {\n continue;\n }\n\n const packageDir = resolveNodeModulePackageDir(projectRoot, dependencyName);\n if (!packageDir) {\n continue;\n }\n\n const dependencyPackageJson = readJson(join(packageDir, 'package.json'));\n if (dependencyPackageJson.exports?.['./playground']) {\n discovered.push({\n packageName: dependencyName,\n importSpecifier: `${dependencyName}/playground`,\n });\n }\n }\n\n return discovered;\n}\n\nexport async function discoverPlaygroundTargets(\n projectRoot = process.cwd(),\n mode: 'auto' | 'workspace' | 'consumer' = 'auto',\n localPlaygroundPath = 'src/playground.ts',\n): Promise<DiscoveredPlaygroundTarget[]> {\n const effectiveMode =\n mode === 'auto' ? detectPlaygroundMode(projectRoot) : mode;\n\n if (effectiveMode === 'workspace') {\n const workspaceRoot =\n mode === 'workspace'\n ? findWorkspaceRoot(projectRoot)\n : findSmrtWorkspaceRoot(projectRoot);\n if (!workspaceRoot) {\n return [];\n }\n\n const packages = await discoverWorkspacePlaygrounds(workspaceRoot);\n return packages.map((item) => ({\n packageName: item.packageName,\n source: 'workspace' as const,\n sourcePath: item.sourcePath,\n runtimePath: item.runtimePath ?? undefined,\n }));\n }\n\n const targets: DiscoveredPlaygroundTarget[] = [];\n const installed = await discoverInstalledPlaygrounds(projectRoot);\n\n for (const item of installed) {\n targets.push({\n packageName: item.packageName,\n source: 'package',\n importSpecifier: item.importSpecifier,\n });\n }\n\n const localPath = resolve(projectRoot, localPlaygroundPath);\n if (existsSync(localPath)) {\n targets.push({\n source: 'app',\n sourcePath: localPath,\n });\n }\n\n return targets;\n}\n\nexport async function importPlaygroundModule(\n input: string,\n): Promise<SmrtPlaygroundModule[]> {\n const imported =\n isAbsolute(input) || input.startsWith('.')\n ? await importPathModule(resolve(input))\n : await import(input);\n\n const module = imported.default ?? imported.playground ?? imported;\n return module && typeof module === 'object'\n ? coercePlaygroundModules(module as SmrtPlaygroundModule)\n : [];\n}\n\nasync function importPathModule(inputPath: string): Promise<unknown> {\n if (!TS_SOURCE_EXTENSIONS.has(extname(inputPath))) {\n return import(pathToFileURL(inputPath).href);\n }\n\n let tsxApiPath: string;\n try {\n tsxApiPath = require.resolve('tsx/esm/api');\n } catch (tsxError) {\n throw new Error(\n `Failed to load playground module from ${inputPath}: source playground discovery requires the \"tsx\" package.`,\n { cause: tsxError },\n );\n }\n\n const { tsImport } = await import(pathToFileURL(tsxApiPath).href);\n return tsImport(pathToFileURL(inputPath).href, {\n parentURL: import.meta.url,\n });\n}\n\nexport function describePlaygroundSource(\n target: DiscoveredPlaygroundTarget,\n cwd = process.cwd(),\n): string {\n if (target.source === 'package') {\n return target.importSpecifier || target.packageName || 'installed package';\n }\n\n const path = target.sourcePath || target.runtimePath;\n return path ? relative(cwd, path) || '.' : target.source;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,iBAAiB,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,IAAI,CAczE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,IAAI,CAe7E;AAED,wBAAgB,oBAAoB,CAClC,WAAW,SAAgB,GAC1B,WAAW,GAAG,UAAU,CAE1B;AAmBD,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,EACrB,eAAe,SAAwC,GACtD,OAAO,CAAC,6BAA6B,EAAE,CAAC,CA4B1C;AAED,wBAAsB,4BAA4B,CAChD,WAAW,SAAgB,GAC1B,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAsC1C;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,SAAgB,EAC3B,IAAI,GAAE,MAAM,GAAG,WAAW,GAAG,UAAmB,EAChD,mBAAmB,SAAsB,GACxC,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA0CvC;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAUjC;AAuBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,0BAA0B,EAClC,GAAG,SAAgB,GAClB,MAAM,CAOR"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,iBAAiB,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,IAAI,CAczE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,SAAgB,GAAG,MAAM,GAAG,IAAI,CAe7E;AAED,wBAAgB,oBAAoB,CAClC,WAAW,SAAgB,GAC1B,WAAW,GAAG,UAAU,CAE1B;AAmBD,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,EACrB,eAAe,SAAwC,GACtD,OAAO,CAAC,6BAA6B,EAAE,CAAC,CA6B1C;AAED,wBAAsB,4BAA4B,CAChD,WAAW,SAAgB,GAC1B,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAsC1C;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,SAAgB,EAC3B,IAAI,GAAE,MAAM,GAAG,WAAW,GAAG,UAAmB,EAChD,mBAAmB,SAAsB,GACxC,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA0CvC;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAUjC;AAuBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,0BAA0B,EAClC,GAAG,SAAgB,GAClB,MAAM,CAOR"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as displayNameForScopedPackage, i as qualifyPlaygroundEntryId, n as mergePlaygroundModules, o as displayNameForSmrtPackage, r as normalizePlaygroundModule, t as coercePlaygroundModules } from "./chunks/runtime-85Dv9ms7.js";
2
- import { a as discoverWorkspacePlaygrounds, c as importPlaygroundModule, i as discoverPlaygroundTargets, n as detectPlaygroundMode, o as findSmrtWorkspaceRoot, r as discoverInstalledPlaygrounds, s as findWorkspaceRoot, t as describePlaygroundSource } from "./chunks/discovery-ZfRkQSmn.js";
2
+ import { a as discoverWorkspacePlaygrounds, c as importPlaygroundModule, i as discoverPlaygroundTargets, n as detectPlaygroundMode, o as findSmrtWorkspaceRoot, r as discoverInstalledPlaygrounds, s as findWorkspaceRoot, t as describePlaygroundSource } from "./chunks/discovery-Flzky12E.js";
3
3
  //#region src/templates.ts
4
4
  function createPackagePlaygroundTemplate(packageName) {
5
5
  const displayName = displayNameForSmrtPackage(packageName);
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAMlD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAElE,QAAA,MAAM,4BAA4B,oCAAoC,CAAC;AA2EvE,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAiER;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAMlD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAElE,QAAA,MAAM,4BAA4B,oCAAoC,CAAC;AA4EvE,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAiER;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
package/dist/vite.js CHANGED
@@ -1,7 +1,7 @@
1
- import { n as detectPlaygroundMode, r as discoverInstalledPlaygrounds, s as findWorkspaceRoot } from "./chunks/discovery-ZfRkQSmn.js";
1
+ import { n as detectPlaygroundMode, r as discoverInstalledPlaygrounds, s as findWorkspaceRoot } from "./chunks/discovery-Flzky12E.js";
2
2
  import { existsSync } from "node:fs";
3
3
  import { isAbsolute, resolve } from "node:path";
4
- import fg from "fast-glob";
4
+ import { glob } from "tinyglobby";
5
5
  import { normalizePath } from "vite";
6
6
  //#region src/vite.ts
7
7
  var VIRTUAL_PLAYGROUND_MODULE_ID = "virtual:smrt-playground/modules";
@@ -27,8 +27,9 @@ export default playgroundModules;
27
27
  async function discoverWorkspaceSpecifiers(projectRoot, options) {
28
28
  const workspaceRoot = options.workspaceRoot || findWorkspaceRoot(projectRoot);
29
29
  if (!workspaceRoot) return [];
30
- return (await fg(options.packagesPattern || "packages/*/src/svelte/playground.ts", {
30
+ return (await glob(options.packagesPattern || "packages/*/src/svelte/playground.ts", {
31
31
  cwd: workspaceRoot,
32
+ expandDirectories: false,
32
33
  absolute: true
33
34
  })).sort().map((path) => normalizePath(path));
34
35
  }
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","names":[],"sources":["../src/vite.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { isAbsolute, resolve } from 'node:path';\nimport fg from 'fast-glob';\nimport { normalizePath, type Plugin } from 'vite';\nimport {\n detectPlaygroundMode,\n discoverInstalledPlaygrounds,\n findWorkspaceRoot,\n} from './discovery.js';\nimport type { SmrtPlaygroundVitePluginOptions } from './types.js';\n\nconst VIRTUAL_PLAYGROUND_MODULE_ID = 'virtual:smrt-playground/modules';\nconst RESOLVED_VIRTUAL_PLAYGROUND_MODULE_ID = `\\0${VIRTUAL_PLAYGROUND_MODULE_ID}`;\n\nfunction toViteImportSpecifier(specifier: string): string {\n if (!isAbsolute(specifier)) {\n return specifier;\n }\n\n return `/@fs/${normalizePath(specifier)}`;\n}\n\nfunction buildVirtualModuleCode(specifiers: string[]): string {\n const imports = specifiers\n .map(\n (specifier, index) =>\n `import module${index} from ${JSON.stringify(toViteImportSpecifier(specifier))};`,\n )\n .join('\\n');\n\n const moduleList = specifiers\n .map((_, index) => `...toModules(module${index})`)\n .join(', ');\n\n return `${imports}\n\nconst toModules = (value) => {\n if (!value) return [];\n if (Array.isArray(value)) return value.filter(Boolean);\n if (Array.isArray(value.modules)) return value.modules.filter(Boolean);\n return [value];\n};\n\nexport const playgroundModules = [${moduleList}].filter(Boolean);\nexport default playgroundModules;\n`;\n}\n\nasync function discoverWorkspaceSpecifiers(\n projectRoot: string,\n options: SmrtPlaygroundVitePluginOptions,\n): Promise<string[]> {\n const workspaceRoot = options.workspaceRoot || findWorkspaceRoot(projectRoot);\n if (!workspaceRoot) {\n return [];\n }\n\n const matches = await fg(\n options.packagesPattern || 'packages/*/src/svelte/playground.ts',\n {\n cwd: workspaceRoot,\n absolute: true,\n },\n );\n\n return matches.sort().map((path) => normalizePath(path));\n}\n\nasync function discoverConsumerSpecifiers(\n projectRoot: string,\n options: SmrtPlaygroundVitePluginOptions,\n): Promise<string[]> {\n const installed = await discoverInstalledPlaygrounds(projectRoot);\n const specifiers = installed.map((item) => item.importSpecifier);\n const localPlayground = resolve(\n projectRoot,\n options.localPlaygroundPath || 'src/playground.ts',\n );\n\n if (existsSync(localPlayground)) {\n specifiers.push(normalizePath(localPlayground));\n }\n\n return specifiers;\n}\n\nexport function smrtPlaygroundVitePlugin(\n options: SmrtPlaygroundVitePluginOptions = {},\n): Plugin {\n let projectRoot = process.cwd();\n\n return {\n name: 'smrt-playground-vite-plugin',\n enforce: 'pre',\n configResolved(config) {\n projectRoot = config.root ? resolve(config.root) : process.cwd();\n },\n resolveId(id) {\n if (id === VIRTUAL_PLAYGROUND_MODULE_ID) {\n return RESOLVED_VIRTUAL_PLAYGROUND_MODULE_ID;\n }\n return null;\n },\n async load(id) {\n if (id !== RESOLVED_VIRTUAL_PLAYGROUND_MODULE_ID) {\n return null;\n }\n\n const effectiveMode =\n options.mode === 'auto' || !options.mode\n ? detectPlaygroundMode(projectRoot)\n : options.mode;\n\n const specifiers =\n effectiveMode === 'workspace'\n ? await discoverWorkspaceSpecifiers(projectRoot, options)\n : await discoverConsumerSpecifiers(projectRoot, options);\n\n if (effectiveMode === 'workspace') {\n const workspaceRoot =\n options.workspaceRoot || findWorkspaceRoot(projectRoot);\n if (workspaceRoot) {\n const workspaceConfigPath = resolve(\n workspaceRoot,\n 'pnpm-workspace.yaml',\n );\n if (existsSync(workspaceConfigPath)) {\n this.addWatchFile(workspaceConfigPath);\n }\n }\n } else {\n const packageJsonPath = resolve(projectRoot, 'package.json');\n if (existsSync(packageJsonPath)) {\n this.addWatchFile(packageJsonPath);\n }\n const localPlayground = resolve(\n projectRoot,\n options.localPlaygroundPath || 'src/playground.ts',\n );\n if (existsSync(localPlayground)) {\n this.addWatchFile(localPlayground);\n }\n }\n\n for (const specifier of specifiers) {\n if (isAbsolute(specifier)) {\n this.addWatchFile(specifier);\n }\n }\n\n return buildVirtualModuleCode(specifiers);\n },\n };\n}\n\nexport { VIRTUAL_PLAYGROUND_MODULE_ID };\n"],"mappings":";;;;;;AAWA,IAAM,+BAA+B;AACrC,IAAM,wCAAwC,KAAK;AAEnD,SAAS,sBAAsB,WAA2B;CACxD,IAAI,CAAC,WAAW,SAAS,GACvB,OAAO;CAGT,OAAO,QAAQ,cAAc,SAAS;AACxC;AAEA,SAAS,uBAAuB,YAA8B;CAY5D,OAAO,GAXS,WACb,KACE,WAAW,UACV,gBAAgB,MAAK,QAAS,KAAK,UAAU,sBAAsB,SAAS,CAAC,EAAC,EAClF,CAAA,CACC,KAAK,IAME,EAAO;;;;;;;;;oCAJE,WAChB,KAAK,GAAG,UAAU,sBAAsB,MAAK,EAAG,CAAA,CAChD,KAAK,IAW0B,EAAU;;;AAG9C;AAEA,eAAe,4BACb,aACA,SACmB;CACnB,MAAM,gBAAgB,QAAQ,iBAAiB,kBAAkB,WAAW;CAC5E,IAAI,CAAC,eACH,OAAO,CAAC;CAWV,QAAO,MARe,GACpB,QAAQ,mBAAmB,uCAC3B;EACE,KAAK;EACL,UAAU;CACZ,CACF,EAAA,CAEe,KAAK,CAAA,CAAE,KAAK,SAAS,cAAc,IAAI,CAAC;AACzD;AAEA,eAAe,2BACb,aACA,SACmB;CAEnB,MAAM,cAAa,MADK,6BAA6B,WAAW,EAAA,CACnC,KAAK,SAAS,KAAK,eAAe;CAC/D,MAAM,kBAAkB,QACtB,aACA,QAAQ,uBAAuB,mBACjC;CAEA,IAAI,WAAW,eAAe,GAC5B,WAAW,KAAK,cAAc,eAAe,CAAC;CAGhD,OAAO;AACT;AAEO,SAAS,yBACd,UAA2C,CAAC,GACpC;CACR,IAAI,cAAc,QAAQ,IAAI;CAE9B,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,QAAQ;GACrB,cAAc,OAAO,OAAO,QAAQ,OAAO,IAAI,IAAI,QAAQ,IAAI;EACjE;EACA,UAAU,IAAI;GACZ,IAAI,OAAA,mCACF,OAAO;GAET,OAAO;EACT;EACA,MAAM,KAAK,IAAI;GACb,IAAI,OAAO,uCACT,OAAO;GAGT,MAAM,gBACJ,QAAQ,SAAS,UAAU,CAAC,QAAQ,OAChC,qBAAqB,WAAW,IAChC,QAAQ;GAEd,MAAM,aACJ,kBAAkB,cACd,MAAM,4BAA4B,aAAa,OAAO,IACtD,MAAM,2BAA2B,aAAa,OAAO;GAE3D,IAAI,kBAAkB,aAAa;IACjC,MAAM,gBACJ,QAAQ,iBAAiB,kBAAkB,WAAW;IACxD,IAAI,eAAe;KACjB,MAAM,sBAAsB,QAC1B,eACA,qBACF;KACA,IAAI,WAAW,mBAAmB,GAChC,KAAK,aAAa,mBAAmB;IAEzC;GACF,OAAO;IACL,MAAM,kBAAkB,QAAQ,aAAa,cAAc;IAC3D,IAAI,WAAW,eAAe,GAC5B,KAAK,aAAa,eAAe;IAEnC,MAAM,kBAAkB,QACtB,aACA,QAAQ,uBAAuB,mBACjC;IACA,IAAI,WAAW,eAAe,GAC5B,KAAK,aAAa,eAAe;GAErC;GAEA,KAAA,MAAW,aAAa,YACtB,IAAI,WAAW,SAAS,GACtB,KAAK,aAAa,SAAS;GAI/B,OAAO,uBAAuB,UAAU;EAC1C;CACF;AACF"}
1
+ {"version":3,"file":"vite.js","names":[],"sources":["../src/vite.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { isAbsolute, resolve } from 'node:path';\nimport { glob } from 'tinyglobby';\nimport { normalizePath, type Plugin } from 'vite';\nimport {\n detectPlaygroundMode,\n discoverInstalledPlaygrounds,\n findWorkspaceRoot,\n} from './discovery.js';\nimport type { SmrtPlaygroundVitePluginOptions } from './types.js';\n\nconst VIRTUAL_PLAYGROUND_MODULE_ID = 'virtual:smrt-playground/modules';\nconst RESOLVED_VIRTUAL_PLAYGROUND_MODULE_ID = `\\0${VIRTUAL_PLAYGROUND_MODULE_ID}`;\n\nfunction toViteImportSpecifier(specifier: string): string {\n if (!isAbsolute(specifier)) {\n return specifier;\n }\n\n return `/@fs/${normalizePath(specifier)}`;\n}\n\nfunction buildVirtualModuleCode(specifiers: string[]): string {\n const imports = specifiers\n .map(\n (specifier, index) =>\n `import module${index} from ${JSON.stringify(toViteImportSpecifier(specifier))};`,\n )\n .join('\\n');\n\n const moduleList = specifiers\n .map((_, index) => `...toModules(module${index})`)\n .join(', ');\n\n return `${imports}\n\nconst toModules = (value) => {\n if (!value) return [];\n if (Array.isArray(value)) return value.filter(Boolean);\n if (Array.isArray(value.modules)) return value.modules.filter(Boolean);\n return [value];\n};\n\nexport const playgroundModules = [${moduleList}].filter(Boolean);\nexport default playgroundModules;\n`;\n}\n\nasync function discoverWorkspaceSpecifiers(\n projectRoot: string,\n options: SmrtPlaygroundVitePluginOptions,\n): Promise<string[]> {\n const workspaceRoot = options.workspaceRoot || findWorkspaceRoot(projectRoot);\n if (!workspaceRoot) {\n return [];\n }\n\n const matches = await glob(\n options.packagesPattern || 'packages/*/src/svelte/playground.ts',\n {\n cwd: workspaceRoot,\n expandDirectories: false,\n absolute: true,\n },\n );\n\n return matches.sort().map((path) => normalizePath(path));\n}\n\nasync function discoverConsumerSpecifiers(\n projectRoot: string,\n options: SmrtPlaygroundVitePluginOptions,\n): Promise<string[]> {\n const installed = await discoverInstalledPlaygrounds(projectRoot);\n const specifiers = installed.map((item) => item.importSpecifier);\n const localPlayground = resolve(\n projectRoot,\n options.localPlaygroundPath || 'src/playground.ts',\n );\n\n if (existsSync(localPlayground)) {\n specifiers.push(normalizePath(localPlayground));\n }\n\n return specifiers;\n}\n\nexport function smrtPlaygroundVitePlugin(\n options: SmrtPlaygroundVitePluginOptions = {},\n): Plugin {\n let projectRoot = process.cwd();\n\n return {\n name: 'smrt-playground-vite-plugin',\n enforce: 'pre',\n configResolved(config) {\n projectRoot = config.root ? resolve(config.root) : process.cwd();\n },\n resolveId(id) {\n if (id === VIRTUAL_PLAYGROUND_MODULE_ID) {\n return RESOLVED_VIRTUAL_PLAYGROUND_MODULE_ID;\n }\n return null;\n },\n async load(id) {\n if (id !== RESOLVED_VIRTUAL_PLAYGROUND_MODULE_ID) {\n return null;\n }\n\n const effectiveMode =\n options.mode === 'auto' || !options.mode\n ? detectPlaygroundMode(projectRoot)\n : options.mode;\n\n const specifiers =\n effectiveMode === 'workspace'\n ? await discoverWorkspaceSpecifiers(projectRoot, options)\n : await discoverConsumerSpecifiers(projectRoot, options);\n\n if (effectiveMode === 'workspace') {\n const workspaceRoot =\n options.workspaceRoot || findWorkspaceRoot(projectRoot);\n if (workspaceRoot) {\n const workspaceConfigPath = resolve(\n workspaceRoot,\n 'pnpm-workspace.yaml',\n );\n if (existsSync(workspaceConfigPath)) {\n this.addWatchFile(workspaceConfigPath);\n }\n }\n } else {\n const packageJsonPath = resolve(projectRoot, 'package.json');\n if (existsSync(packageJsonPath)) {\n this.addWatchFile(packageJsonPath);\n }\n const localPlayground = resolve(\n projectRoot,\n options.localPlaygroundPath || 'src/playground.ts',\n );\n if (existsSync(localPlayground)) {\n this.addWatchFile(localPlayground);\n }\n }\n\n for (const specifier of specifiers) {\n if (isAbsolute(specifier)) {\n this.addWatchFile(specifier);\n }\n }\n\n return buildVirtualModuleCode(specifiers);\n },\n };\n}\n\nexport { VIRTUAL_PLAYGROUND_MODULE_ID };\n"],"mappings":";;;;;;AAWA,IAAM,+BAA+B;AACrC,IAAM,wCAAwC,KAAK;AAEnD,SAAS,sBAAsB,WAA2B;CACxD,IAAI,CAAC,WAAW,SAAS,GACvB,OAAO;CAGT,OAAO,QAAQ,cAAc,SAAS;AACxC;AAEA,SAAS,uBAAuB,YAA8B;CAY5D,OAAO,GAXS,WACb,KACE,WAAW,UACV,gBAAgB,MAAK,QAAS,KAAK,UAAU,sBAAsB,SAAS,CAAC,EAAC,EAClF,CAAA,CACC,KAAK,IAME,EAAO;;;;;;;;;oCAJE,WAChB,KAAK,GAAG,UAAU,sBAAsB,MAAK,EAAG,CAAA,CAChD,KAAK,IAW0B,EAAU;;;AAG9C;AAEA,eAAe,4BACb,aACA,SACmB;CACnB,MAAM,gBAAgB,QAAQ,iBAAiB,kBAAkB,WAAW;CAC5E,IAAI,CAAC,eACH,OAAO,CAAC;CAYV,QAAO,MATe,KACpB,QAAQ,mBAAmB,uCAC3B;EACE,KAAK;EACL,mBAAmB;EACnB,UAAU;CACZ,CACF,EAAA,CAEe,KAAK,CAAA,CAAE,KAAK,SAAS,cAAc,IAAI,CAAC;AACzD;AAEA,eAAe,2BACb,aACA,SACmB;CAEnB,MAAM,cAAa,MADK,6BAA6B,WAAW,EAAA,CACnC,KAAK,SAAS,KAAK,eAAe;CAC/D,MAAM,kBAAkB,QACtB,aACA,QAAQ,uBAAuB,mBACjC;CAEA,IAAI,WAAW,eAAe,GAC5B,WAAW,KAAK,cAAc,eAAe,CAAC;CAGhD,OAAO;AACT;AAEO,SAAS,yBACd,UAA2C,CAAC,GACpC;CACR,IAAI,cAAc,QAAQ,IAAI;CAE9B,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,QAAQ;GACrB,cAAc,OAAO,OAAO,QAAQ,OAAO,IAAI,IAAI,QAAQ,IAAI;EACjE;EACA,UAAU,IAAI;GACZ,IAAI,OAAA,mCACF,OAAO;GAET,OAAO;EACT;EACA,MAAM,KAAK,IAAI;GACb,IAAI,OAAO,uCACT,OAAO;GAGT,MAAM,gBACJ,QAAQ,SAAS,UAAU,CAAC,QAAQ,OAChC,qBAAqB,WAAW,IAChC,QAAQ;GAEd,MAAM,aACJ,kBAAkB,cACd,MAAM,4BAA4B,aAAa,OAAO,IACtD,MAAM,2BAA2B,aAAa,OAAO;GAE3D,IAAI,kBAAkB,aAAa;IACjC,MAAM,gBACJ,QAAQ,iBAAiB,kBAAkB,WAAW;IACxD,IAAI,eAAe;KACjB,MAAM,sBAAsB,QAC1B,eACA,qBACF;KACA,IAAI,WAAW,mBAAmB,GAChC,KAAK,aAAa,mBAAmB;IAEzC;GACF,OAAO;IACL,MAAM,kBAAkB,QAAQ,aAAa,cAAc;IAC3D,IAAI,WAAW,eAAe,GAC5B,KAAK,aAAa,eAAe;IAEnC,MAAM,kBAAkB,QACtB,aACA,QAAQ,uBAAuB,mBACjC;IACA,IAAI,WAAW,eAAe,GAC5B,KAAK,aAAa,eAAe;GAErC;GAEA,KAAA,MAAW,aAAa,YACtB,IAAI,WAAW,SAAS,GACtB,KAAK,aAAa,SAAS;GAI/B,OAAO,uBAAuB,UAAU;EAC1C;CACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-playground",
3
- "version": "0.57.31",
3
+ "version": "0.57.33",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Shared playground discovery, runtime, and host components for SMRT UI packages",
6
6
  "type": "module",
@@ -29,8 +29,8 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@happyvertical/smrt-ui": "0.57.31",
33
- "fast-glob": "3.3.3",
32
+ "@happyvertical/smrt-ui": "0.57.33",
33
+ "tinyglobby": "0.2.17",
34
34
  "tsx": "^4.23.13"
35
35
  },
36
36
  "peerDependencies": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery-ZfRkQSmn.js","names":[],"sources":["../../src/discovery.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport {\n dirname,\n extname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport fg from 'fast-glob';\nimport { coercePlaygroundModules } from './runtime.js';\nimport type {\n DiscoveredInstalledPlayground,\n DiscoveredPlaygroundTarget,\n DiscoveredWorkspacePlayground,\n SmrtPlaygroundModule,\n} from './types.js';\n\nconst require = createRequire(import.meta.url);\nconst TS_SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts']);\n\nexport function findWorkspaceRoot(startDir = process.cwd()): string | null {\n let current = resolve(startDir);\n\n while (true) {\n if (existsSync(join(current, 'pnpm-workspace.yaml'))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nexport function findSmrtWorkspaceRoot(startDir = process.cwd()): string | null {\n const workspaceRoot = findWorkspaceRoot(startDir);\n if (!workspaceRoot) {\n return null;\n }\n\n const hostPackageJsonPath = join(\n workspaceRoot,\n 'packages',\n 'smrt-playground',\n 'host',\n 'package.json',\n );\n\n return existsSync(hostPackageJsonPath) ? workspaceRoot : null;\n}\n\nexport function detectPlaygroundMode(\n projectRoot = process.cwd(),\n): 'workspace' | 'consumer' {\n return findSmrtWorkspaceRoot(projectRoot) ? 'workspace' : 'consumer';\n}\n\nfunction readJson(path: string): any {\n return JSON.parse(readFileSync(path, 'utf-8'));\n}\n\nfunction resolveNodeModulePackageDir(\n projectRoot: string,\n packageName: string,\n): string | null {\n const packageJsonPath = join(\n projectRoot,\n 'node_modules',\n packageName,\n 'package.json',\n );\n return existsSync(packageJsonPath) ? dirname(packageJsonPath) : null;\n}\n\nexport async function discoverWorkspacePlaygrounds(\n workspaceRoot: string,\n packagesPattern = 'packages/*/src/svelte/playground.ts',\n): Promise<DiscoveredWorkspacePlayground[]> {\n const matches = await fg(packagesPattern, {\n cwd: workspaceRoot,\n absolute: true,\n });\n\n const discovered: DiscoveredWorkspacePlayground[] = [];\n\n for (const sourcePath of matches.sort()) {\n const packageDir = dirname(dirname(dirname(sourcePath)));\n const packageJsonPath = join(packageDir, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n continue;\n }\n\n const packageJson = readJson(packageJsonPath);\n const runtimePath = join(packageDir, 'dist', 'playground.js');\n\n discovered.push({\n packageName: packageJson.name,\n packageDir,\n sourcePath,\n runtimePath: existsSync(runtimePath) ? runtimePath : null,\n });\n }\n\n return discovered;\n}\n\nexport async function discoverInstalledPlaygrounds(\n projectRoot = process.cwd(),\n): Promise<DiscoveredInstalledPlayground[]> {\n const packageJsonPath = join(projectRoot, 'package.json');\n if (!existsSync(packageJsonPath)) {\n return [];\n }\n\n const packageJson = readJson(packageJsonPath);\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies,\n };\n\n const discovered: DiscoveredInstalledPlayground[] = [];\n\n for (const dependencyName of Object.keys(dependencies).sort()) {\n if (\n !dependencyName.startsWith('@happyvertical/smrt-') ||\n dependencyName === '@happyvertical/smrt-playground'\n ) {\n continue;\n }\n\n const packageDir = resolveNodeModulePackageDir(projectRoot, dependencyName);\n if (!packageDir) {\n continue;\n }\n\n const dependencyPackageJson = readJson(join(packageDir, 'package.json'));\n if (dependencyPackageJson.exports?.['./playground']) {\n discovered.push({\n packageName: dependencyName,\n importSpecifier: `${dependencyName}/playground`,\n });\n }\n }\n\n return discovered;\n}\n\nexport async function discoverPlaygroundTargets(\n projectRoot = process.cwd(),\n mode: 'auto' | 'workspace' | 'consumer' = 'auto',\n localPlaygroundPath = 'src/playground.ts',\n): Promise<DiscoveredPlaygroundTarget[]> {\n const effectiveMode =\n mode === 'auto' ? detectPlaygroundMode(projectRoot) : mode;\n\n if (effectiveMode === 'workspace') {\n const workspaceRoot =\n mode === 'workspace'\n ? findWorkspaceRoot(projectRoot)\n : findSmrtWorkspaceRoot(projectRoot);\n if (!workspaceRoot) {\n return [];\n }\n\n const packages = await discoverWorkspacePlaygrounds(workspaceRoot);\n return packages.map((item) => ({\n packageName: item.packageName,\n source: 'workspace' as const,\n sourcePath: item.sourcePath,\n runtimePath: item.runtimePath ?? undefined,\n }));\n }\n\n const targets: DiscoveredPlaygroundTarget[] = [];\n const installed = await discoverInstalledPlaygrounds(projectRoot);\n\n for (const item of installed) {\n targets.push({\n packageName: item.packageName,\n source: 'package',\n importSpecifier: item.importSpecifier,\n });\n }\n\n const localPath = resolve(projectRoot, localPlaygroundPath);\n if (existsSync(localPath)) {\n targets.push({\n source: 'app',\n sourcePath: localPath,\n });\n }\n\n return targets;\n}\n\nexport async function importPlaygroundModule(\n input: string,\n): Promise<SmrtPlaygroundModule[]> {\n const imported =\n isAbsolute(input) || input.startsWith('.')\n ? await importPathModule(resolve(input))\n : await import(input);\n\n const module = imported.default ?? imported.playground ?? imported;\n return module && typeof module === 'object'\n ? coercePlaygroundModules(module as SmrtPlaygroundModule)\n : [];\n}\n\nasync function importPathModule(inputPath: string): Promise<unknown> {\n if (!TS_SOURCE_EXTENSIONS.has(extname(inputPath))) {\n return import(pathToFileURL(inputPath).href);\n }\n\n let tsxApiPath: string;\n try {\n tsxApiPath = require.resolve('tsx/esm/api');\n } catch (tsxError) {\n throw new Error(\n `Failed to load playground module from ${inputPath}: source playground discovery requires the \"tsx\" package.`,\n { cause: tsxError },\n );\n }\n\n const { tsImport } = await import(pathToFileURL(tsxApiPath).href);\n return tsImport(pathToFileURL(inputPath).href, {\n parentURL: import.meta.url,\n });\n}\n\nexport function describePlaygroundSource(\n target: DiscoveredPlaygroundTarget,\n cwd = process.cwd(),\n): string {\n if (target.source === 'package') {\n return target.importSpecifier || target.packageName || 'installed package';\n }\n\n const path = target.sourcePath || target.runtimePath;\n return path ? relative(cwd, path) || '.' : target.source;\n}\n"],"mappings":"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"}