@_linked/cli 1.39.0 → 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localized-dedupe.js","sourceRoot":"","sources":["../../src/localized-dedupe.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What Vite's `resolve.dedupe` lists: the packages a LOCALIZED checkout could\n * otherwise load a second copy of.\n *\n * The duplicates come from localization, not from being a linked package. A\n * localized checkout (`linked localize`) is a git clone under the app root with\n * its own `npm install`, so its `node_modules` holds its own copy of what it\n * depends on — often older than the app's, and a registry copy of any sibling\n * that is localized too. Vite serves the checkout's source and resolves its\n * imports from there, so without a dedupe the dev server loads those copies next\n * to the app's (measured: three `@_linked/core` in one SSR process).\n *\n * So the list is:\n *\n * - every localized package — always, whatever a range says: the live checkout\n * is the point of localizing it, for every importer;\n * - every runtime dependency a localized checkout declares (`dependencies`,\n * `peerDependencies`, `optionalDependencies` — what its source imports) that\n * the app has at a version satisfying EVERY localized checkout's range for it;\n * - `react` and `react-dom` when the app has them.\n *\n * A dedupe resolves the name from the app root for EVERY importer and checks no\n * version — measured: a checkout asking `motion@^13` got the app's 12.43.0. Two\n * cases are therefore left out:\n *\n * - a range the app's version does not satisfy: the checkout keeps its own copy\n * (reported, see `describeSkipped`);\n * - a name some registry install in the app nests its own copy of. npm only\n * nests when the hoisted copy does not satisfy that package, so deduping the\n * name would hand it the wrong version.\n *\n * Plain Node, `tsx` and test runners never read this list; for them\n * `linked localize` removes the checkout's copies from disk instead.\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport semver from 'semver';\nimport {readInstalledPkg} from './installed-packages.js';\nimport {localizedPackageNames} from './lifecycle.js';\n\nconst RUNTIME_FIELDS = [\n 'dependencies',\n 'peerDependencies',\n 'optionalDependencies',\n];\n\nexport interface SkippedDedupe {\n name: string;\n reason: 'range' | 'nested';\n /** For `range`: who asks what, and what the app has. */\n asks?: {from: string; range: string}[];\n appVersion?: string;\n /** For `nested`: one registry install that carries its own copy. */\n nestedAt?: string;\n}\n\nexport interface LocalizedDedupe {\n names: string[];\n skipped: SkippedDedupe[];\n}\n\nexport async function localizedDedupe(\n appRoot: string = process.cwd(),\n): Promise<LocalizedDedupe> {\n const localized = localizedPackageNames(appRoot).filter((name) =>\n fs.existsSync(path.join(appRoot, 'node_modules', name, 'package.json')),\n );\n const names = new Set<string>(localized);\n const skipped: SkippedDedupe[] = [];\n\n // name -> every localized checkout's runtime range for it\n const asks = new Map<string, {from: string; range: string}[]>();\n for (const from of localized) {\n const pkg =\n readJson(path.join(appRoot, 'node_modules', from, 'package.json')) ?? {};\n for (const field of RUNTIME_FIELDS) {\n for (const [dep, range] of Object.entries<string>(pkg[field] ?? {})) {\n if (names.has(dep)) continue;\n const list = asks.get(dep) ?? [];\n if (!list.some((a) => a.from === from)) list.push({from, range});\n asks.set(dep, list);\n }\n }\n }\n\n const nested = asks.size\n ? nestedCopies(path.join(appRoot, 'node_modules'))\n : new Map();\n for (const [name, ranges] of asks) {\n const app = await readInstalledPkg(name, appRoot);\n if (!app?.json?.version) continue; // nothing at the root to dedupe to\n const appVersion = app.json.version;\n const unmet = ranges.filter((a) => !satisfies(appVersion, a.range));\n if (unmet.length) {\n skipped.push({name, reason: 'range', asks: unmet, appVersion});\n } else if (nested.has(name)) {\n skipped.push({name, reason: 'nested', nestedAt: nested.get(name)});\n } else {\n names.add(name);\n }\n }\n\n for (const name of ['react', 'react-dom']) {\n if (await readInstalledPkg(name, appRoot)) names.add(name);\n }\n return {names: [...names].sort(), skipped};\n}\n\n/** One line for the dev log about the ranges the app does not satisfy; null when there are none. */\nexport function describeSkipped(skipped: SkippedDedupe[]): string | null {\n const range = skipped.filter((s) => s.reason === 'range');\n if (!range.length) return null;\n return (\n `[linked] dedupe: ${range.length} package${range.length === 1 ? '' : 's'} a localized checkout ` +\n `keeps its own copy of, because the app's version is outside its range: ` +\n range\n .map(\n (s) =>\n `${s.name} (${s.asks!.map((a) => `${a.from} asks ${a.range}`).join(', ')}; app ${s.appVersion})`,\n )\n .join(', ')\n );\n}\n\nfunction satisfies(version: string, range: string): boolean {\n try {\n return (\n semver.validRange(range) !== null && semver.satisfies(version, range)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Every package name nested below the top level of `nm` — a registry install's\n * private copy — mapped to one place it sits. Symlinks (localized checkouts,\n * workspaces) are not followed: their trees are not the app's install.\n */\nfunction nestedCopies(nm: string): Map<string, string> {\n const out = new Map<string, string>();\n const walk = (dir: string, depth: number) => {\n for (const name of packageNames(dir)) {\n const pkgDir = path.join(dir, name);\n let stat: fs.Stats;\n try {\n stat = fs.lstatSync(pkgDir);\n } catch {\n continue;\n }\n if (stat.isSymbolicLink()) continue;\n if (depth > 0 && !out.has(name))\n out.set(name, path.relative(path.dirname(nm), pkgDir));\n walk(path.join(pkgDir, 'node_modules'), depth + 1);\n }\n };\n walk(nm, 0);\n return out;\n}\n\nfunction packageNames(nm: string): string[] {\n let entries: string[];\n try {\n entries = fs.readdirSync(nm);\n } catch {\n return [];\n }\n const out: string[] = [];\n for (const entry of entries) {\n if (entry.startsWith('.')) continue;\n if (entry.startsWith('@')) {\n try {\n for (const sub of fs.readdirSync(path.join(nm, entry)))\n out.push(`${entry}/${sub}`);\n } catch {\n /* not a directory */\n }\n } else {\n out.push(entry);\n }\n }\n return out;\n}\n\nfunction readJson(file: string): any {\n try {\n return JSON.parse(fs.readFileSync(file, 'utf8'));\n } catch {\n return null;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,WAAW,EAAC,MAAM,eAAe,CAAC;AAKhD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAsBpD,eAAO,IAAI,cAAc,GAAmB,aAAQ,sBAwEnD,CAAC;AA4BF;;;;;;;;;;;;;GAaG;AACH,eAAO,IAAI,sBAAsB,GAAa,YAAY,MAAM,YAQ/D,CAAC;AACF;;;;;;;;GAQG;AACH,eAAO,IAAI,wBAAwB,GACjC,YAAY,MAAM,EAClB,cAAc,MAAM,YAerB,CAAC;AAEF,eAAO,IAAI,cAAc,GAAa,aAAoB,EAAE,eAAY,QAcvE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,IAAI,oBAAoB,GAC7B,iBAAY,EACZ,kBAAiB,GAAG,CAAC,MAAM,CAAa,KACvC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EA2I5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,gBAAW;;;;CAE3C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,gBAAW;;;;CAUpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,gBAAW,KACV,OAAO,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAoBzD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,aAAQ,EAAE,WAAW;;;;CAsBxD,CAAC;AAGF,eAAO,IAAI,oBAAoB,GAAa,gBAAW,EAAE,cAAS,QA2BjE,CAAC;AACF,wBAAgB,KAAK,CACnB,GAAG,KAAA,EACH,GAAG,GAAE,OAAe,EACpB,UAAU,GAAE,OAAe,EAC3B,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED,wBAAgB,WAAW,CACzB,OAAO,KAAA,EACP,GAAG,UAAQ,EACX,UAAU,GAAE,OAAe,EAC3B,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,wBAAgB,kBAAkB,CAAC,YAAY,KAAA,EAAE,QAAQ,KAAA,EAAE,GAAG,CAAC,KAAA,UAwB9D;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,cAAc,EACnB,uBAAuB,OAAO,EAC9B,MAAK,OAAe,qBAyCrB,CAAC;AAEF,wBAAgB,GAAG,CAAC,GAAG,QAAQ,OAAA,QAI9B;AAED,wBAAgB,KAAK,CAAC,MAAM,KAAA,EAAE,GAAG,QAAQ,OAAA,QAIxC;AAED,wBAAgB,SAAS,CAAC,GAAG,QAAQ,OAAA,QAiBpC;AAED,wBAAgB,IAAI,CAAC,GAAG,QAAQ,OAAA,QAI/B;AAED,wBAAgB,OAAO,CAAC,GAAG,KAAA,OAI1B;AAED,wBAAgB,uBAAuB;;;EAKtC;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,WAAW,EAAC,MAAM,eAAe,CAAC;AAKhD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAuBpD,eAAO,IAAI,cAAc,GAAmB,aAAQ,sBAwEnD,CAAC;AA4BF;;;;;;;;;;;;;GAaG;AACH,eAAO,IAAI,sBAAsB,GAAa,YAAY,MAAM,YAQ/D,CAAC;AACF;;;;;;;;GAQG;AACH,eAAO,IAAI,wBAAwB,GACjC,YAAY,MAAM,EAClB,cAAc,MAAM,YAerB,CAAC;AAEF,eAAO,IAAI,cAAc,GAAa,aAAoB,EAAE,eAAY,QAcvE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,IAAI,oBAAoB,GAC7B,iBAAY,EACZ,kBAAiB,GAAG,CAAC,MAAM,CAAa,KACvC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EA2I5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,gBAAW;;;;CAE3C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,gBAAW;;;;CAUpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,gBAAW,KACV,OAAO,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAoBzD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,aAAQ,EAAE,WAAW;;;;CAsBxD,CAAC;AAGF,eAAO,IAAI,oBAAoB,GAAa,gBAAW,EAAE,cAAS,QA2BjE,CAAC;AACF,wBAAgB,KAAK,CACnB,GAAG,KAAA,EACH,GAAG,GAAE,OAAe,EACpB,UAAU,GAAE,OAAe,EAC3B,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED,wBAAgB,WAAW,CACzB,OAAO,KAAA,EACP,GAAG,UAAQ,EACX,UAAU,GAAE,OAAe,EAC3B,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,wBAAgB,kBAAkB,CAAC,YAAY,KAAA,EAAE,QAAQ,KAAA,EAAE,GAAG,CAAC,KAAA,UAwB9D;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,cAAc,EACnB,uBAAuB,OAAO,EAC9B,MAAK,OAAe,qBAyCrB,CAAC;AAEF,wBAAgB,GAAG,CAAC,GAAG,QAAQ,OAAA,QAI9B;AAED,wBAAgB,KAAK,CAAC,MAAM,KAAA,EAAE,GAAG,QAAQ,OAAA,QAIxC;AAED,wBAAgB,SAAS,CAAC,GAAG,QAAQ,OAAA,QAiBpC;AAED,wBAAgB,IAAI,CAAC,GAAG,QAAQ,OAAA,QAI/B;AAED,wBAAgB,OAAO,CAAC,GAAG,KAAA,OAI1B;AAED,wBAAgB,uBAAuB;;;EAKtC;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
package/lib/esm/utils.js CHANGED
@@ -13,6 +13,7 @@ import * as fs from 'fs';
13
13
  import { builtinModules } from 'module';
14
14
  import * as path from 'path';
15
15
  import ts from 'typescript';
16
+ import { isLinkedPackageJson } from './installed-packages.js';
16
17
  import { findNearestPackageJsonSync } from 'find-nearest-package-json';
17
18
  import * as glob from 'glob';
18
19
  var gruntConfig;
@@ -194,7 +195,7 @@ export var getLINCDDependencies = function (packageJson, checkedPackages = new S
194
195
  if (!checkedPackages.has(dependency)) {
195
196
  let [modulePackageJson, modulePath] = getModulePackageJSON(dependency);
196
197
  checkedPackages.add(dependency);
197
- if (modulePackageJson === null || modulePackageJson === void 0 ? void 0 : modulePackageJson.lincd) {
198
+ if (isLinkedPackageJson(modulePackageJson)) {
198
199
  lincdPackagePaths.push([
199
200
  modulePackageJson.name,
200
201
  modulePath,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport {exec, ExecOptions} from 'child_process';\nimport * as fs from 'fs';\nimport {builtinModules} from 'module';\nimport * as path from 'path';\nimport ts from 'typescript';\nimport type {PackageDetails} from './interfaces.js';\n\nimport {findNearestPackageJsonSync} from 'find-nearest-package-json';\nimport * as glob from 'glob';\n\nvar gruntConfig;\n\n// Credit: https://gist.github.com/tinovyatkin/727ddbf7e7e10831a1eca9e4ff2fc32e\nconst tsHost = ts.createCompilerHost(\n {\n allowJs: true,\n noEmit: true,\n isolatedModules: true,\n resolveJsonModule: false,\n moduleResolution: ts.ModuleResolutionKind.Classic, // we don't want node_modules\n incremental: true,\n noLib: true,\n noResolve: true,\n },\n true,\n);\n\nexport var getFileImports = async function (filePath) {\n try {\n const importing: string[] = [];\n\n const add = (literal: ts.Node) => {\n const moduleName = literal.getText().replace(/['\"`]/g, '');\n if (\n !moduleName.startsWith('node:') &&\n !builtinModules.includes(moduleName)\n ) {\n importing.push(moduleName);\n }\n };\n // Every form that names a module: `import ... from 'x'`, `import 'x'`,\n // `export ... from 'x'`, `import('x')` (value and type position) and\n // `import x = require('x')`. Children are always visited, so specifiers\n // nested inside functions or a `declare module` body are found too.\n const delintNode = (node: ts.Node) => {\n if (\n (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) &&\n node.moduleSpecifier &&\n ts.isStringLiteralLike(node.moduleSpecifier)\n ) {\n add(node.moduleSpecifier);\n } else if (\n ts.isCallExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ImportKeyword &&\n node.arguments.length >= 1 &&\n ts.isStringLiteralLike(node.arguments[0])\n ) {\n // `import('x')` with a literal argument. A computed specifier cannot be\n // checked statically and is skipped.\n add(node.arguments[0]);\n } else if (\n // `type A = import('x').B`, and the same inside `typeof import('x')`.\n ts.isImportTypeNode(node) &&\n ts.isLiteralTypeNode(node.argument) &&\n ts.isStringLiteral(node.argument.literal)\n ) {\n add(node.argument.literal);\n } else if (\n // `import x = require('x')`.\n ts.isExternalModuleReference(node) &&\n ts.isStringLiteralLike(node.expression)\n ) {\n add(node.expression);\n }\n ts.forEachChild(node, delintNode);\n };\n const sourceFile = tsHost.getSourceFile(\n filePath,\n ts.ScriptTarget.Latest,\n (msg) => {\n throw new Error(`Failed to parse ${filePath}: ${msg}`);\n },\n );\n //check if its a directory, then we wanr that we can't parse it\n let stat = fs.lstatSync(filePath);\n if (stat.isDirectory()) {\n return importing;\n }\n\n if (!sourceFile) {\n console.warn(`Failed to find file ${filePath}`);\n return importing;\n }\n delintNode(sourceFile);\n return importing;\n } catch (err) {\n console.warn(`Error parsing file ${filePath}: ${err}`);\n return [];\n }\n};\n\n// The package name part of a bare specifier: '@scope/name' for a scoped\n// package, the first segment otherwise. Returns null for anything that is not a\n// bare specifier (relative and absolute paths). The 'node:' case is redundant\n// for callers that use getFileImports (which drops builtins already), and is\n// kept so the helper is correct standalone.\nvar barePackageName = function (importPath: string): string | null {\n if (\n importPath.startsWith('.') ||\n importPath.startsWith('/') ||\n importPath.startsWith('node:')\n ) {\n return null;\n }\n const segments = importPath.split('/');\n const name = importPath.startsWith('@')\n ? segments.slice(0, 2).join('/')\n : segments[0];\n return name || null;\n};\n\nvar isLinkedPackageName = function (name: string) {\n // The current '@_linked/*' scope, and the legacy 'lincd'-prefixed names\n // ('lincd', 'lincd-foo', ...).\n return name.startsWith('@_linked/') || /^lincd(-|$)/.test(name);\n};\n\n/**\n * True when the import reaches into ANOTHER Linked package's internals — a\n * '/src/' or '/lib/' path inside '@_linked/<pkg>' or a 'lincd'-prefixed package\n * — instead of going through that package's public subpath. Such an import\n * breaks when the other package changes its build layout, and it bypasses the\n * exports map, so the two are not interchangeable.\n *\n * Relative specifiers are exempt on purpose: the rule is about other packages,\n * and a relative path can only reach files inside the current package, where a\n * './lib/helpers' folder is a perfectly ordinary local module. Escaping the\n * package with '../' is already caught by isImportOutsideOfPackage.\n *\n * @param importPath The import path to check\n */\nexport var isInternalLinkedImport = function (importPath: string) {\n const name = barePackageName(importPath);\n if (!name || !isLinkedPackageName(name)) {\n return false;\n }\n // Match whole path segments, so '@_linked/core/library/x' is not a hit.\n const subPath = importPath.slice(name.length).split('/').filter(Boolean);\n return subPath.includes('src') || subPath.includes('lib');\n};\n/**\n * True when a relative import escapes the package source root. Normalising\n * first is what makes this correct: only leading '..' segments that survive\n * normalisation actually climb out, so './a..b' is an ordinary file name and\n * '../a/../b' climbs one level, not two.\n *\n * @param importPath The import path to check\n * @param curFileDepth How many folders deep the current file is (0 = src, 1 = src/foo, etc.)\n */\nexport var isImportOutsideOfPackage = function (\n importPath: string,\n curFileDepth: number,\n) {\n if (!importPath.startsWith('.')) {\n return false;\n }\n const segments = path.posix\n .normalize(importPath.split('\\\\').join('/'))\n .split('/');\n // How many folders the specifier climbs: the leading '..' segments that\n // normalisation could not cancel out.\n let climbs = 0;\n while (segments[climbs] === '..') {\n climbs++;\n }\n return climbs > curFileDepth;\n};\n\nexport var getPackageJSON = function (root = process.cwd(), error = true) {\n // console.log('Getting package.json from ' + chalk.cyan(root));\n //log stack trace\n let packagePath = path.join(root, 'package.json');\n if (fs.existsSync(packagePath)) {\n return JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n } else if (root === process.cwd()) {\n if (error) {\n console.warn(\n 'Could not find package.json. Make sure you run this command from the root of a linked package or a linked workspace',\n );\n process.exit();\n }\n }\n};\n\n/**\n * Scans package.json for dependencies that are LINCD packages\n * Also looks into dependencies of dependencies\n * If no packageJson is given, it will attempt to obtain it from the current working directory\n * Returns an array of lincd packages, with each entry containing an array with the package name and the local path to the package\n * @param packageJson\n */\nexport var getLINCDDependencies = function (\n packageJson?,\n checkedPackages: Set<string> = new Set(),\n): [string, string, string[]][] {\n if (!packageJson) {\n packageJson = getPackageJSON();\n }\n let dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n let lincdPackagePaths: [string, string, string[]][] = [];\n let firstTime = checkedPackages.size === 0;\n\n for (var dependency of Object.keys(dependencies)) {\n try {\n if (!checkedPackages.has(dependency)) {\n let [modulePackageJson, modulePath] = getModulePackageJSON(dependency);\n checkedPackages.add(dependency);\n\n if (modulePackageJson?.lincd) {\n lincdPackagePaths.push([\n modulePackageJson.name,\n modulePath,\n [\n ...Object.keys({\n ...modulePackageJson.dependencies,\n ...modulePackageJson.devDependencies,\n }),\n ],\n ]);\n //also check if this package has any dependencies that are lincd packages\n lincdPackagePaths = lincdPackagePaths.concat(\n getLINCDDependencies(modulePackageJson, checkedPackages),\n );\n }\n if (!modulePackageJson) {\n //this seems to only happen with yarn workspaces for some grunt related dependencies of lincd-cli\n // console.log(`could not find package.json of ${dependency}`);\n }\n }\n } catch (err) {\n console.log(\n `could not check if ${dependency} is a lincd package: ${err}`,\n );\n }\n }\n\n if (firstTime) {\n // let dependencyMap:Map<string,Set<string>> = new Map();\n let lincdPackageNames = new Set(\n lincdPackagePaths.map(\n ([packageName, modulePath, pkgDependencies]) => packageName,\n ),\n );\n //remove lincd-cli from the list of lincd packages\n lincdPackageNames.delete('lincd-cli');\n\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies], key) => {\n let lincdDependencies = pkgDependencies.filter((dependency) =>\n lincdPackageNames.has(dependency),\n );\n if (packageName === 'lincd-cli') {\n //remove lincd-modules from the dependencies of lincd-cli (it's not a hard dependency, and it messes things up)\n lincdDependencies.splice(\n lincdDependencies.indexOf('lincd-modules'),\n 1,\n );\n }\n // dependencyMap.set(packageName, new Set(lincdDependencies));\n //update dependencies to be the actual lincd package objects\n lincdPackagePaths[key][2] = lincdDependencies;\n },\n );\n\n // //add the nested dependencies for each lincd package\n // for (let [packageName,pkgDependencies] of dependencyMap) {\n // pkgDependencies.forEach((dependency) => {\n // if (dependencyMap.has(dependency)) {\n // dependencyMap.get(dependency).forEach((nestedDependency) => {\n // pkgDependencies.add(nestedDependency);\n // });\n // }\n // });\n // }\n //\n // dependencyMap.forEach((dependencies,packageName) => {\n // //check for circular dependencies\n // if([...dependencies].some(dependency => {\n // return dependencyMap.get(dependency).has(packageName);\n // }))\n // {\n // console.warn(`Circular dependency detected between ${packageName} and ${dependency}`);\n // }\n //\n // });\n\n // a simple sort with dependencyMap doesn't seem to work,so we start with LINCD (least dependencies) and from there add packages that have all their dependencies already added\n let sortedPackagePaths = [];\n let addedPackages = new Set();\n let lincdItself = lincdPackagePaths.find(([packageName]) => {\n return packageName === 'lincd';\n });\n if (lincdItself) {\n sortedPackagePaths.push(lincdItself);\n addedPackages = new Set(['lincd']);\n }\n\n while (addedPackages.size !== lincdPackagePaths.length) {\n let startSize = addedPackages.size;\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies]) => {\n if (\n !addedPackages.has(packageName) &&\n pkgDependencies.every((dependency) => addedPackages.has(dependency))\n ) {\n sortedPackagePaths.push([packageName, modulePath, pkgDependencies]);\n addedPackages.add(packageName);\n }\n },\n );\n if (startSize === addedPackages.size) {\n console.warn('Could not sort lincd packages, circular dependencies?');\n break;\n }\n }\n\n //sort the lincd packages by least dependent first\n // lincdPackagePaths = lincdPackagePaths.sort(([packageNameA],[packageNameB]) => {\n // //if package A depends on package B, then package B should come first\n // if (dependencyMap.get(packageNameA).has(packageNameB)) {\n // console.log(packageNameA+' depends on '+packageNameB+ ' (below)')\n // return 1;\n // }\n // console.log(packageNameA+' above '+packageNameB)\n // return -1;\n // });\n return sortedPackagePaths;\n }\n\n return lincdPackagePaths;\n};\n\nexport const getLastBuildTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(builds|lib|dist)/**/*.js');\n};\n\nexport const getLastModifiedSourceTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(src|data|css|modules)/**/*', {\n ignore: [\n packagePath + '/**/*.css.json',\n packagePath + '/**/*.d.ts',\n packagePath + '/**/node_modules/**/*',\n packagePath + '/**/lib/**/*',\n packagePath + '/**/dist/**/*',\n ],\n });\n};\n\nexport const getLastCommitTime = (\n packagePath,\n): Promise<{date: Date; changes: string; commitId: string}> => {\n // console.log(`git log -1 --format=%ci -- ${packagePath}`);\n // process.exit();\n return execPromise(`cd ${packagePath} && git log -1 --format=\"%h %ci\" -- .`)\n .then(async (result) => {\n let commitId = result.substring(0, result.indexOf(' '));\n let date = result.substring(commitId.length + 1);\n let lastCommitDate = new Date(date);\n\n let changes = await execPromise(\n `cd ${packagePath} && git show --stat --oneline ${commitId} -- .`,\n );\n // log(packagePath, result, lastCommitDate);\n // log(changes);\n return {date: lastCommitDate, changes, commitId};\n })\n .catch(({error, stdout, stderr}) => {\n debugInfo(chalk.red('Git error: ') + error.message.toString());\n return null;\n });\n};\n\nexport const getLastModifiedFile = (filePath, config = {}) => {\n var files = glob.sync(filePath, config);\n\n // console.log(files.join(\" - \"));\n var lastModifiedName;\n var lastModified: Date;\n var lastModifiedTime = 0;\n files.forEach((fileName) => {\n if (fs.lstatSync(fileName).isDirectory()) {\n // console.log(\"skipping directory \"+fileName);\n return;\n }\n let mtime = fs.statSync(path.join(fileName)).mtime;\n let modifiedTime = mtime.getTime();\n if (modifiedTime > lastModifiedTime) {\n // console.log(fileName,mtime);\n lastModifiedName = fileName;\n lastModified = mtime;\n lastModifiedTime = modifiedTime;\n }\n });\n return {lastModified, lastModifiedName, lastModifiedTime};\n};\n\n//from https://github.com/haalcala/node-packagejson/blob/master/index.js\nexport var getModulePackageJSON = function (module_name, work_dir?) {\n if (!work_dir) {\n work_dir = process.cwd();\n } else {\n work_dir = path.resolve(work_dir);\n }\n\n var package_json;\n\n if (fs.existsSync(path.resolve(work_dir, './node_modules'))) {\n var module_dir = path.resolve(work_dir, './node_modules/' + module_name);\n\n if (\n fs.existsSync(module_dir) &&\n fs.existsSync(module_dir + '/package.json')\n ) {\n package_json = JSON.parse(\n fs.readFileSync(module_dir + '/package.json', 'utf-8'),\n );\n }\n }\n\n if (!package_json && work_dir != '/') {\n return getModulePackageJSON(module_name, path.resolve(work_dir, '..'));\n }\n\n return [package_json, module_dir];\n};\nexport function execp(\n cmd,\n log: boolean = false,\n allowError: boolean = false,\n options: any = {},\n): Promise<null> {\n // opts || (opts = {});\n if (log) console.log(chalk.cyan(cmd));\n\n return new Promise((resolve, reject) => {\n var child = exec(cmd, options);\n\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n // process.stdin.pipe(child.stdin);\n\n child.on('close', function (code) {\n if (code === 0) {\n resolve(null);\n } else {\n reject();\n }\n // console.log('killing child');\n // child.kill('SIGHUP');\n // resolve(code);\n });\n // child.on('data', function (result) {\n // \t// if (log)\n // \t// {\n // \t// \tconsole.log(result);\n // \t// }\n // \tresolve(result);\n // \tconsole.log('resolve data');\n //\n // });\n\n child.on('error', function (err) {\n if (!allowError) {\n // console.log('reject err');\n reject(err);\n return;\n } else if (log) {\n console.warn(err);\n }\n // console.log('resolve err');\n resolve(null);\n });\n child.on('exit', function (code, signal) {\n if (code !== 0) {\n reject('Child process exited with error code ' + code);\n return;\n }\n // console.log('resolve exit');\n resolve(null);\n });\n });\n}\n\nexport function execPromise(\n command,\n log = false,\n allowError: boolean = false,\n options?: ExecOptions,\n pipeOutput: boolean = false,\n): Promise<string> {\n return new Promise(function (resolve, reject) {\n if (log) console.log(chalk.cyan(command));\n let child = exec(command, options, (error, stdout, stderr) => {\n if (error) {\n if (!allowError) {\n reject({error, stdout, stderr});\n return;\n } else if (log) {\n console.warn(error);\n }\n }\n //TODO: getting a typescript error for 'trim()', this worked before, is it still used? do we log anywhere?\n let result = stdout['trim']();\n if (log) {\n // console.log(chalk\"RESOLVING \"+command);\n console.log(result);\n // console.log('ERRORS:'+(result.indexOf('Aborted due to warnings') !== -1));\n // console.log('stderr:'+stderr);\n }\n resolve(result);\n });\n if (pipeOutput) {\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n }\n });\n}\n\nexport {generateScopedNameProduction} from './css-module-names.js';\nexport function generateScopedName(cssClassName, filepath, css?) {\n // Strip any Vite-style query suffix (?inline, ?raw, ?direct) before\n // computing the filename. Without this, dev-mode SSR CSS collection\n // via `?inline` produces selectors like\n // `._foo_SigninLayout.module.css?inline_leftSidebar` — the literal\n // `.module.css?inline` becomes part of the class name, which CSS\n // parsers split on `.` and `?`, breaking everything.\n const cleanFilepath = filepath.replace(/\\?.*$/, '');\n var filename = path\n .basename(cleanFilepath)\n .replace(/\\.module\\.css$/, '')\n .replace(/\\.css$/, '');\n let resolved = path.resolve(cleanFilepath).replace(/[\\w\\-_\\/]+\\/file\\:/, '');\n let nearestPackageJson = findNearestPackageJsonSync(resolved);\n let packageName = nearestPackageJson\n ? nearestPackageJson.data.name\n : 'unknown';\n return (\n packageName.replace(/[^a-zA-Z0-9_]+/g, '_') +\n '_' +\n filename +\n '_' +\n cssClassName\n );\n}\n\nexport const needsRebuilding = async function (\n pkg: PackageDetails,\n useGitForLastModified: boolean,\n log: boolean = false,\n) {\n let lastModifiedSourceDate: Date;\n let lastModifiedSourceName: string;\n\n if (useGitForLastModified) {\n const {changes, commitId, date} = await getLastCommitTime(pkg.path);\n\n lastModifiedSourceDate = date;\n lastModifiedSourceName = commitId;\n } else {\n const {lastModified, lastModifiedName, lastModifiedTime} =\n getLastModifiedSourceTime(pkg.path);\n lastModifiedSourceName = lastModifiedName;\n lastModifiedSourceDate = lastModified;\n }\n\n let lastModifiedBundle = getLastBuildTime(pkg.path);\n let result =\n lastModifiedSourceDate &&\n lastModifiedSourceDate.getTime() > lastModifiedBundle.lastModifiedTime;\n if (log) {\n console.log(\n chalk.cyan(\n 'Last modified source: ' +\n lastModifiedSourceName +\n ' on ' +\n lastModifiedSourceDate.toString(),\n ),\n );\n console.log(\n chalk.cyan(\n 'Last build: ' +\n (lastModifiedBundle &&\n typeof lastModifiedBundle.lastModified !== 'undefined'\n ? lastModifiedBundle.lastModified.toString()\n : 'never'),\n ),\n );\n }\n return result;\n};\n\nexport function log(...messages) {\n messages.forEach((message) => {\n console.log(chalk.cyan(message));\n });\n}\n\nexport function debug(config, ...messages) {\n if (config.debug) {\n log(...messages);\n }\n}\n\nexport function debugInfo(...messages) {\n // messages.forEach((message) => {\n // console.log(chalk.cyan('Info: ') + message);\n // });\n //@TODO: let packages also use linked.config.json? instead of gruntfile...\n // that way we can read \"analyse\" here and see if we need to log debug info\n // if(!gruntConfig)\n // {\n // gruntConfig = getGruntConfig();\n // console.log(gruntConfig);\n // process.exit();\n // }\n if (gruntConfig && gruntConfig.analyse === true) {\n messages.forEach((message) => {\n console.log(chalk.cyan('Info: ') + message);\n });\n }\n}\n\nexport function warn(...messages) {\n messages.forEach((message) => {\n console.log(chalk.red(message));\n });\n}\n\nexport function flatten(arr) {\n return arr.reduce(function (a, b) {\n return b ? a.concat(b) : a;\n }, []);\n}\n\nexport function getLinkedTailwindColors() {\n return {\n 'primary-color': 'var(--primary-color)',\n 'font-color': 'var(--font-color)',\n };\n}\n\n/**\n * Recursively get all files in a directory\n * https://stackoverflow.com/a/45130990/831465\n * @param dir The directory to get files from\n * @returns A promise that resolves to an array of file paths\n */\nexport async function getFiles(\n dir: string,\n filenameFilter?: string,\n): Promise<string[]> {\n const entries = await fs.promises.readdir(dir, {withFileTypes: true});\n let files = await Promise.all(\n entries.map((entry) => {\n const res = path.resolve(dir, entry.name);\n return entry.isDirectory() ? getFiles(res, filenameFilter) : res;\n }),\n );\n //flatten the array of arrays into a single array\n let flatFiles = flatten(files) as string[];\n if (filenameFilter) {\n //filter the files to only include those that match the filenameFilter\n flatFiles = flatFiles.filter((file) => file.includes(filenameFilter));\n }\n return flatFiles;\n}\n\n/**\n * Strip ANSI escape codes from a string\n * @param str The string to strip ANSI codes from\n * @returns The string with ANSI codes removed\n */\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport {exec, ExecOptions} from 'child_process';\nimport * as fs from 'fs';\nimport {builtinModules} from 'module';\nimport * as path from 'path';\nimport ts from 'typescript';\nimport type {PackageDetails} from './interfaces.js';\nimport {isLinkedPackageJson} from './installed-packages.js';\n\nimport {findNearestPackageJsonSync} from 'find-nearest-package-json';\nimport * as glob from 'glob';\n\nvar gruntConfig;\n\n// Credit: https://gist.github.com/tinovyatkin/727ddbf7e7e10831a1eca9e4ff2fc32e\nconst tsHost = ts.createCompilerHost(\n {\n allowJs: true,\n noEmit: true,\n isolatedModules: true,\n resolveJsonModule: false,\n moduleResolution: ts.ModuleResolutionKind.Classic, // we don't want node_modules\n incremental: true,\n noLib: true,\n noResolve: true,\n },\n true,\n);\n\nexport var getFileImports = async function (filePath) {\n try {\n const importing: string[] = [];\n\n const add = (literal: ts.Node) => {\n const moduleName = literal.getText().replace(/['\"`]/g, '');\n if (\n !moduleName.startsWith('node:') &&\n !builtinModules.includes(moduleName)\n ) {\n importing.push(moduleName);\n }\n };\n // Every form that names a module: `import ... from 'x'`, `import 'x'`,\n // `export ... from 'x'`, `import('x')` (value and type position) and\n // `import x = require('x')`. Children are always visited, so specifiers\n // nested inside functions or a `declare module` body are found too.\n const delintNode = (node: ts.Node) => {\n if (\n (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) &&\n node.moduleSpecifier &&\n ts.isStringLiteralLike(node.moduleSpecifier)\n ) {\n add(node.moduleSpecifier);\n } else if (\n ts.isCallExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ImportKeyword &&\n node.arguments.length >= 1 &&\n ts.isStringLiteralLike(node.arguments[0])\n ) {\n // `import('x')` with a literal argument. A computed specifier cannot be\n // checked statically and is skipped.\n add(node.arguments[0]);\n } else if (\n // `type A = import('x').B`, and the same inside `typeof import('x')`.\n ts.isImportTypeNode(node) &&\n ts.isLiteralTypeNode(node.argument) &&\n ts.isStringLiteral(node.argument.literal)\n ) {\n add(node.argument.literal);\n } else if (\n // `import x = require('x')`.\n ts.isExternalModuleReference(node) &&\n ts.isStringLiteralLike(node.expression)\n ) {\n add(node.expression);\n }\n ts.forEachChild(node, delintNode);\n };\n const sourceFile = tsHost.getSourceFile(\n filePath,\n ts.ScriptTarget.Latest,\n (msg) => {\n throw new Error(`Failed to parse ${filePath}: ${msg}`);\n },\n );\n //check if its a directory, then we wanr that we can't parse it\n let stat = fs.lstatSync(filePath);\n if (stat.isDirectory()) {\n return importing;\n }\n\n if (!sourceFile) {\n console.warn(`Failed to find file ${filePath}`);\n return importing;\n }\n delintNode(sourceFile);\n return importing;\n } catch (err) {\n console.warn(`Error parsing file ${filePath}: ${err}`);\n return [];\n }\n};\n\n// The package name part of a bare specifier: '@scope/name' for a scoped\n// package, the first segment otherwise. Returns null for anything that is not a\n// bare specifier (relative and absolute paths). The 'node:' case is redundant\n// for callers that use getFileImports (which drops builtins already), and is\n// kept so the helper is correct standalone.\nvar barePackageName = function (importPath: string): string | null {\n if (\n importPath.startsWith('.') ||\n importPath.startsWith('/') ||\n importPath.startsWith('node:')\n ) {\n return null;\n }\n const segments = importPath.split('/');\n const name = importPath.startsWith('@')\n ? segments.slice(0, 2).join('/')\n : segments[0];\n return name || null;\n};\n\nvar isLinkedPackageName = function (name: string) {\n // The current '@_linked/*' scope, and the legacy 'lincd'-prefixed names\n // ('lincd', 'lincd-foo', ...).\n return name.startsWith('@_linked/') || /^lincd(-|$)/.test(name);\n};\n\n/**\n * True when the import reaches into ANOTHER Linked package's internals — a\n * '/src/' or '/lib/' path inside '@_linked/<pkg>' or a 'lincd'-prefixed package\n * — instead of going through that package's public subpath. Such an import\n * breaks when the other package changes its build layout, and it bypasses the\n * exports map, so the two are not interchangeable.\n *\n * Relative specifiers are exempt on purpose: the rule is about other packages,\n * and a relative path can only reach files inside the current package, where a\n * './lib/helpers' folder is a perfectly ordinary local module. Escaping the\n * package with '../' is already caught by isImportOutsideOfPackage.\n *\n * @param importPath The import path to check\n */\nexport var isInternalLinkedImport = function (importPath: string) {\n const name = barePackageName(importPath);\n if (!name || !isLinkedPackageName(name)) {\n return false;\n }\n // Match whole path segments, so '@_linked/core/library/x' is not a hit.\n const subPath = importPath.slice(name.length).split('/').filter(Boolean);\n return subPath.includes('src') || subPath.includes('lib');\n};\n/**\n * True when a relative import escapes the package source root. Normalising\n * first is what makes this correct: only leading '..' segments that survive\n * normalisation actually climb out, so './a..b' is an ordinary file name and\n * '../a/../b' climbs one level, not two.\n *\n * @param importPath The import path to check\n * @param curFileDepth How many folders deep the current file is (0 = src, 1 = src/foo, etc.)\n */\nexport var isImportOutsideOfPackage = function (\n importPath: string,\n curFileDepth: number,\n) {\n if (!importPath.startsWith('.')) {\n return false;\n }\n const segments = path.posix\n .normalize(importPath.split('\\\\').join('/'))\n .split('/');\n // How many folders the specifier climbs: the leading '..' segments that\n // normalisation could not cancel out.\n let climbs = 0;\n while (segments[climbs] === '..') {\n climbs++;\n }\n return climbs > curFileDepth;\n};\n\nexport var getPackageJSON = function (root = process.cwd(), error = true) {\n // console.log('Getting package.json from ' + chalk.cyan(root));\n //log stack trace\n let packagePath = path.join(root, 'package.json');\n if (fs.existsSync(packagePath)) {\n return JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n } else if (root === process.cwd()) {\n if (error) {\n console.warn(\n 'Could not find package.json. Make sure you run this command from the root of a linked package or a linked workspace',\n );\n process.exit();\n }\n }\n};\n\n/**\n * Scans package.json for dependencies that are LINCD packages\n * Also looks into dependencies of dependencies\n * If no packageJson is given, it will attempt to obtain it from the current working directory\n * Returns an array of lincd packages, with each entry containing an array with the package name and the local path to the package\n * @param packageJson\n */\nexport var getLINCDDependencies = function (\n packageJson?,\n checkedPackages: Set<string> = new Set(),\n): [string, string, string[]][] {\n if (!packageJson) {\n packageJson = getPackageJSON();\n }\n let dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n let lincdPackagePaths: [string, string, string[]][] = [];\n let firstTime = checkedPackages.size === 0;\n\n for (var dependency of Object.keys(dependencies)) {\n try {\n if (!checkedPackages.has(dependency)) {\n let [modulePackageJson, modulePath] = getModulePackageJSON(dependency);\n checkedPackages.add(dependency);\n\n if (isLinkedPackageJson(modulePackageJson)) {\n lincdPackagePaths.push([\n modulePackageJson.name,\n modulePath,\n [\n ...Object.keys({\n ...modulePackageJson.dependencies,\n ...modulePackageJson.devDependencies,\n }),\n ],\n ]);\n //also check if this package has any dependencies that are lincd packages\n lincdPackagePaths = lincdPackagePaths.concat(\n getLINCDDependencies(modulePackageJson, checkedPackages),\n );\n }\n if (!modulePackageJson) {\n //this seems to only happen with yarn workspaces for some grunt related dependencies of lincd-cli\n // console.log(`could not find package.json of ${dependency}`);\n }\n }\n } catch (err) {\n console.log(\n `could not check if ${dependency} is a lincd package: ${err}`,\n );\n }\n }\n\n if (firstTime) {\n // let dependencyMap:Map<string,Set<string>> = new Map();\n let lincdPackageNames = new Set(\n lincdPackagePaths.map(\n ([packageName, modulePath, pkgDependencies]) => packageName,\n ),\n );\n //remove lincd-cli from the list of lincd packages\n lincdPackageNames.delete('lincd-cli');\n\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies], key) => {\n let lincdDependencies = pkgDependencies.filter((dependency) =>\n lincdPackageNames.has(dependency),\n );\n if (packageName === 'lincd-cli') {\n //remove lincd-modules from the dependencies of lincd-cli (it's not a hard dependency, and it messes things up)\n lincdDependencies.splice(\n lincdDependencies.indexOf('lincd-modules'),\n 1,\n );\n }\n // dependencyMap.set(packageName, new Set(lincdDependencies));\n //update dependencies to be the actual lincd package objects\n lincdPackagePaths[key][2] = lincdDependencies;\n },\n );\n\n // //add the nested dependencies for each lincd package\n // for (let [packageName,pkgDependencies] of dependencyMap) {\n // pkgDependencies.forEach((dependency) => {\n // if (dependencyMap.has(dependency)) {\n // dependencyMap.get(dependency).forEach((nestedDependency) => {\n // pkgDependencies.add(nestedDependency);\n // });\n // }\n // });\n // }\n //\n // dependencyMap.forEach((dependencies,packageName) => {\n // //check for circular dependencies\n // if([...dependencies].some(dependency => {\n // return dependencyMap.get(dependency).has(packageName);\n // }))\n // {\n // console.warn(`Circular dependency detected between ${packageName} and ${dependency}`);\n // }\n //\n // });\n\n // a simple sort with dependencyMap doesn't seem to work,so we start with LINCD (least dependencies) and from there add packages that have all their dependencies already added\n let sortedPackagePaths = [];\n let addedPackages = new Set();\n let lincdItself = lincdPackagePaths.find(([packageName]) => {\n return packageName === 'lincd';\n });\n if (lincdItself) {\n sortedPackagePaths.push(lincdItself);\n addedPackages = new Set(['lincd']);\n }\n\n while (addedPackages.size !== lincdPackagePaths.length) {\n let startSize = addedPackages.size;\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies]) => {\n if (\n !addedPackages.has(packageName) &&\n pkgDependencies.every((dependency) => addedPackages.has(dependency))\n ) {\n sortedPackagePaths.push([packageName, modulePath, pkgDependencies]);\n addedPackages.add(packageName);\n }\n },\n );\n if (startSize === addedPackages.size) {\n console.warn('Could not sort lincd packages, circular dependencies?');\n break;\n }\n }\n\n //sort the lincd packages by least dependent first\n // lincdPackagePaths = lincdPackagePaths.sort(([packageNameA],[packageNameB]) => {\n // //if package A depends on package B, then package B should come first\n // if (dependencyMap.get(packageNameA).has(packageNameB)) {\n // console.log(packageNameA+' depends on '+packageNameB+ ' (below)')\n // return 1;\n // }\n // console.log(packageNameA+' above '+packageNameB)\n // return -1;\n // });\n return sortedPackagePaths;\n }\n\n return lincdPackagePaths;\n};\n\nexport const getLastBuildTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(builds|lib|dist)/**/*.js');\n};\n\nexport const getLastModifiedSourceTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(src|data|css|modules)/**/*', {\n ignore: [\n packagePath + '/**/*.css.json',\n packagePath + '/**/*.d.ts',\n packagePath + '/**/node_modules/**/*',\n packagePath + '/**/lib/**/*',\n packagePath + '/**/dist/**/*',\n ],\n });\n};\n\nexport const getLastCommitTime = (\n packagePath,\n): Promise<{date: Date; changes: string; commitId: string}> => {\n // console.log(`git log -1 --format=%ci -- ${packagePath}`);\n // process.exit();\n return execPromise(`cd ${packagePath} && git log -1 --format=\"%h %ci\" -- .`)\n .then(async (result) => {\n let commitId = result.substring(0, result.indexOf(' '));\n let date = result.substring(commitId.length + 1);\n let lastCommitDate = new Date(date);\n\n let changes = await execPromise(\n `cd ${packagePath} && git show --stat --oneline ${commitId} -- .`,\n );\n // log(packagePath, result, lastCommitDate);\n // log(changes);\n return {date: lastCommitDate, changes, commitId};\n })\n .catch(({error, stdout, stderr}) => {\n debugInfo(chalk.red('Git error: ') + error.message.toString());\n return null;\n });\n};\n\nexport const getLastModifiedFile = (filePath, config = {}) => {\n var files = glob.sync(filePath, config);\n\n // console.log(files.join(\" - \"));\n var lastModifiedName;\n var lastModified: Date;\n var lastModifiedTime = 0;\n files.forEach((fileName) => {\n if (fs.lstatSync(fileName).isDirectory()) {\n // console.log(\"skipping directory \"+fileName);\n return;\n }\n let mtime = fs.statSync(path.join(fileName)).mtime;\n let modifiedTime = mtime.getTime();\n if (modifiedTime > lastModifiedTime) {\n // console.log(fileName,mtime);\n lastModifiedName = fileName;\n lastModified = mtime;\n lastModifiedTime = modifiedTime;\n }\n });\n return {lastModified, lastModifiedName, lastModifiedTime};\n};\n\n//from https://github.com/haalcala/node-packagejson/blob/master/index.js\nexport var getModulePackageJSON = function (module_name, work_dir?) {\n if (!work_dir) {\n work_dir = process.cwd();\n } else {\n work_dir = path.resolve(work_dir);\n }\n\n var package_json;\n\n if (fs.existsSync(path.resolve(work_dir, './node_modules'))) {\n var module_dir = path.resolve(work_dir, './node_modules/' + module_name);\n\n if (\n fs.existsSync(module_dir) &&\n fs.existsSync(module_dir + '/package.json')\n ) {\n package_json = JSON.parse(\n fs.readFileSync(module_dir + '/package.json', 'utf-8'),\n );\n }\n }\n\n if (!package_json && work_dir != '/') {\n return getModulePackageJSON(module_name, path.resolve(work_dir, '..'));\n }\n\n return [package_json, module_dir];\n};\nexport function execp(\n cmd,\n log: boolean = false,\n allowError: boolean = false,\n options: any = {},\n): Promise<null> {\n // opts || (opts = {});\n if (log) console.log(chalk.cyan(cmd));\n\n return new Promise((resolve, reject) => {\n var child = exec(cmd, options);\n\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n // process.stdin.pipe(child.stdin);\n\n child.on('close', function (code) {\n if (code === 0) {\n resolve(null);\n } else {\n reject();\n }\n // console.log('killing child');\n // child.kill('SIGHUP');\n // resolve(code);\n });\n // child.on('data', function (result) {\n // \t// if (log)\n // \t// {\n // \t// \tconsole.log(result);\n // \t// }\n // \tresolve(result);\n // \tconsole.log('resolve data');\n //\n // });\n\n child.on('error', function (err) {\n if (!allowError) {\n // console.log('reject err');\n reject(err);\n return;\n } else if (log) {\n console.warn(err);\n }\n // console.log('resolve err');\n resolve(null);\n });\n child.on('exit', function (code, signal) {\n if (code !== 0) {\n reject('Child process exited with error code ' + code);\n return;\n }\n // console.log('resolve exit');\n resolve(null);\n });\n });\n}\n\nexport function execPromise(\n command,\n log = false,\n allowError: boolean = false,\n options?: ExecOptions,\n pipeOutput: boolean = false,\n): Promise<string> {\n return new Promise(function (resolve, reject) {\n if (log) console.log(chalk.cyan(command));\n let child = exec(command, options, (error, stdout, stderr) => {\n if (error) {\n if (!allowError) {\n reject({error, stdout, stderr});\n return;\n } else if (log) {\n console.warn(error);\n }\n }\n //TODO: getting a typescript error for 'trim()', this worked before, is it still used? do we log anywhere?\n let result = stdout['trim']();\n if (log) {\n // console.log(chalk\"RESOLVING \"+command);\n console.log(result);\n // console.log('ERRORS:'+(result.indexOf('Aborted due to warnings') !== -1));\n // console.log('stderr:'+stderr);\n }\n resolve(result);\n });\n if (pipeOutput) {\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n }\n });\n}\n\nexport {generateScopedNameProduction} from './css-module-names.js';\nexport function generateScopedName(cssClassName, filepath, css?) {\n // Strip any Vite-style query suffix (?inline, ?raw, ?direct) before\n // computing the filename. Without this, dev-mode SSR CSS collection\n // via `?inline` produces selectors like\n // `._foo_SigninLayout.module.css?inline_leftSidebar` — the literal\n // `.module.css?inline` becomes part of the class name, which CSS\n // parsers split on `.` and `?`, breaking everything.\n const cleanFilepath = filepath.replace(/\\?.*$/, '');\n var filename = path\n .basename(cleanFilepath)\n .replace(/\\.module\\.css$/, '')\n .replace(/\\.css$/, '');\n let resolved = path.resolve(cleanFilepath).replace(/[\\w\\-_\\/]+\\/file\\:/, '');\n let nearestPackageJson = findNearestPackageJsonSync(resolved);\n let packageName = nearestPackageJson\n ? nearestPackageJson.data.name\n : 'unknown';\n return (\n packageName.replace(/[^a-zA-Z0-9_]+/g, '_') +\n '_' +\n filename +\n '_' +\n cssClassName\n );\n}\n\nexport const needsRebuilding = async function (\n pkg: PackageDetails,\n useGitForLastModified: boolean,\n log: boolean = false,\n) {\n let lastModifiedSourceDate: Date;\n let lastModifiedSourceName: string;\n\n if (useGitForLastModified) {\n const {changes, commitId, date} = await getLastCommitTime(pkg.path);\n\n lastModifiedSourceDate = date;\n lastModifiedSourceName = commitId;\n } else {\n const {lastModified, lastModifiedName, lastModifiedTime} =\n getLastModifiedSourceTime(pkg.path);\n lastModifiedSourceName = lastModifiedName;\n lastModifiedSourceDate = lastModified;\n }\n\n let lastModifiedBundle = getLastBuildTime(pkg.path);\n let result =\n lastModifiedSourceDate &&\n lastModifiedSourceDate.getTime() > lastModifiedBundle.lastModifiedTime;\n if (log) {\n console.log(\n chalk.cyan(\n 'Last modified source: ' +\n lastModifiedSourceName +\n ' on ' +\n lastModifiedSourceDate.toString(),\n ),\n );\n console.log(\n chalk.cyan(\n 'Last build: ' +\n (lastModifiedBundle &&\n typeof lastModifiedBundle.lastModified !== 'undefined'\n ? lastModifiedBundle.lastModified.toString()\n : 'never'),\n ),\n );\n }\n return result;\n};\n\nexport function log(...messages) {\n messages.forEach((message) => {\n console.log(chalk.cyan(message));\n });\n}\n\nexport function debug(config, ...messages) {\n if (config.debug) {\n log(...messages);\n }\n}\n\nexport function debugInfo(...messages) {\n // messages.forEach((message) => {\n // console.log(chalk.cyan('Info: ') + message);\n // });\n //@TODO: let packages also use linked.config.json? instead of gruntfile...\n // that way we can read \"analyse\" here and see if we need to log debug info\n // if(!gruntConfig)\n // {\n // gruntConfig = getGruntConfig();\n // console.log(gruntConfig);\n // process.exit();\n // }\n if (gruntConfig && gruntConfig.analyse === true) {\n messages.forEach((message) => {\n console.log(chalk.cyan('Info: ') + message);\n });\n }\n}\n\nexport function warn(...messages) {\n messages.forEach((message) => {\n console.log(chalk.red(message));\n });\n}\n\nexport function flatten(arr) {\n return arr.reduce(function (a, b) {\n return b ? a.concat(b) : a;\n }, []);\n}\n\nexport function getLinkedTailwindColors() {\n return {\n 'primary-color': 'var(--primary-color)',\n 'font-color': 'var(--font-color)',\n };\n}\n\n/**\n * Recursively get all files in a directory\n * https://stackoverflow.com/a/45130990/831465\n * @param dir The directory to get files from\n * @returns A promise that resolves to an array of file paths\n */\nexport async function getFiles(\n dir: string,\n filenameFilter?: string,\n): Promise<string[]> {\n const entries = await fs.promises.readdir(dir, {withFileTypes: true});\n let files = await Promise.all(\n entries.map((entry) => {\n const res = path.resolve(dir, entry.name);\n return entry.isDirectory() ? getFiles(res, filenameFilter) : res;\n }),\n );\n //flatten the array of arrays into a single array\n let flatFiles = flatten(files) as string[];\n if (filenameFilter) {\n //filter the files to only include those that match the filenameFilter\n flatFiles = flatFiles.filter((file) => file.includes(filenameFilter));\n }\n return flatFiles;\n}\n\n/**\n * Strip ANSI escape codes from a string\n * @param str The string to strip ANSI codes from\n * @returns The string with ANSI codes removed\n */\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n"]}
@@ -202,6 +202,14 @@ export declare const SSR_ENTRY_PACKAGES: string[];
202
202
  export declare function ssrNoExternal(workspaces: {
203
203
  name: string;
204
204
  }[], dependents?: string[]): (string | RegExp)[];
205
+ /**
206
+ * `resolve.dedupe` for every mode: the localized packages, what their checkouts
207
+ * import that the app has at a version they accept, and React — see
208
+ * `localizedDedupe`. Duplicates come from localization (a checkout's own
209
+ * `node_modules`), so that is what is detected; an app with nothing localized
210
+ * dedupes only React.
211
+ */
212
+ export { localizedDedupe } from './localized-dedupe.js';
205
213
  /**
206
214
  * The `process.env.*` values inlined into the browser bundle — and only there.
207
215
  * See the `environments.client.define` note in `createViteConfig` for why the
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/vite-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/vite-config.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,8 @@ import { generateScopedName } from './utils.js';
29
29
  import { generateScopedNameProduction } from './css-module-names.js';
30
30
  import { parseWorkspacePatterns, isWorkspacePathNegated } from './workspace-globs.js';
31
31
  import { pinCompiledClassNames } from './plugins/pin-compiled-class-names.js';
32
- import { isFrameworkPkg, readInstalledPkg } from './installed-packages.js';
32
+ import { describeSkipped, localizedDedupe } from './localized-dedupe.js';
33
+ import { discoverInstalledLinkedPackages, isLinkedPackageJson, readInstalledPkg, } from './installed-packages.js';
33
34
  import { linkedClientDepIncludesPlugin, resolveExportsSubpath, } from './client-dep-includes.js';
34
35
  /** Default dev server port, and Vite's default HMR websocket port. */
35
36
  const DEFAULT_DEV_PORT = 4040;
@@ -332,41 +333,17 @@ function readSourcePackage(root) {
332
333
  */
333
334
  export function discoverLinkedSourceDependencies() {
334
335
  return __awaiter(this, arguments, void 0, function* (cwd = process.cwd()) {
335
- const pkgPath = path.join(cwd, 'package.json');
336
- if (!(yield fsExtra.pathExists(pkgPath)))
337
- return [];
338
- const fs = yield import('node:fs/promises');
339
336
  const out = [];
340
337
  const seen = new Set();
341
- const visited = new Set();
342
- const walk = (deps, fromDir) => __awaiter(this, void 0, void 0, function* () {
343
- for (const name of Object.keys(deps !== null && deps !== void 0 ? deps : {})) {
344
- if (visited.has(name))
345
- continue;
346
- visited.add(name);
347
- const resolved = yield readInstalledPkg(name, fromDir);
348
- if (!resolved)
349
- continue;
350
- if (resolved.json.linkedPackage !== true)
351
- continue;
352
- let realRoot = resolved.root;
353
- try {
354
- realRoot = yield fs.realpath(resolved.root);
355
- }
356
- catch (_a) { }
357
- const entry = yield readSourcePackage(realRoot);
358
- if (entry && !seen.has(entry.name)) {
359
- seen.add(entry.name);
360
- out.push(entry);
361
- }
362
- // Recurse from the real location, so a symlinked clone resolves its own
363
- // dependencies from its source dir.
364
- yield walk(resolved.json.dependencies, realRoot);
338
+ // The walk (breadth-first, keyed on the installed directory) is shared with
339
+ // `resolve.dedupe` and `linked localize`; see discoverInstalledLinkedPackages.
340
+ for (const pkg of yield discoverInstalledLinkedPackages(cwd)) {
341
+ const entry = yield readSourcePackage(pkg.realRoot);
342
+ if (entry && !seen.has(entry.name)) {
343
+ seen.add(entry.name);
344
+ out.push(entry);
365
345
  }
366
- });
367
- const appPkg = yield fsExtra.readJson(pkgPath);
368
- yield walk(appPkg.dependencies, cwd);
369
- yield walk(appPkg.devDependencies, cwd);
346
+ }
370
347
  return out;
371
348
  });
372
349
  }
@@ -569,6 +546,20 @@ export function ssrNoExternal(workspaces, dependents = []) {
569
546
  }
570
547
  return [...new Set([...workspaces.map((w) => w.name), ...dependents, ...SSR_ENTRY_PACKAGES])];
571
548
  }
549
+ /**
550
+ * Packages a STANDALONE app has always deduped, installed or not: the two that
551
+ * hold React context the SSR tree must agree on. See the standalone `resolve`
552
+ * block in `createViteConfig`.
553
+ */
554
+ const STANDALONE_DEDUPE = ['@_linked/server-utils', '@_linked/react'];
555
+ /**
556
+ * `resolve.dedupe` for every mode: the localized packages, what their checkouts
557
+ * import that the app has at a version they accept, and React — see
558
+ * `localizedDedupe`. Duplicates come from localization (a checkout's own
559
+ * `node_modules`), so that is what is detected; an app with nothing localized
560
+ * dedupes only React.
561
+ */
562
+ export { localizedDedupe } from './localized-dedupe.js';
572
563
  /**
573
564
  * The `process.env.*` values inlined into the browser bundle — and only there.
574
565
  * See the `environments.client.define` note in `createViteConfig` for why the
@@ -596,6 +587,12 @@ export function createViteConfig(opts = {}) {
596
587
  // (CN monorepo or its workspace-member clones) this is false and none
597
588
  // of the standalone-gated branches below apply.
598
589
  const isStandalone = isDev && workspaces.length === 0;
590
+ const dedupe = yield localizedDedupe(process.cwd());
591
+ if (isDev) {
592
+ const skippedLine = describeSkipped(dedupe.skipped);
593
+ if (skippedLine)
594
+ console.warn(skippedLine);
595
+ }
599
596
  // The app's published framework deps — excluded from Vite's dep-optimizer below
600
597
  // (`optimizeDeps.exclude`) so the browser's native ESM graph loads ONE copy of each.
601
598
  // Without the exclude, esbuild inlines a duplicate `@_linked/core` into each
@@ -610,8 +607,10 @@ export function createViteConfig(opts = {}) {
610
607
  try {
611
608
  const appPkg = yield fsExtra.readJson(path.join(process.cwd(), 'package.json'));
612
609
  const allDeps = Object.assign(Object.assign({}, appPkg.dependencies), appPkg.devDependencies);
610
+ // A linked package by its own `linkedPackage` flag, not its scope.
613
611
  for (const name of Object.keys(allDeps)) {
614
- if (isFrameworkPkg(name))
612
+ const installed = yield readInstalledPkg(name, process.cwd());
613
+ if (installed && isLinkedPackageJson(installed.json))
615
614
  linkedDeps.push(name);
616
615
  }
617
616
  }
@@ -621,7 +620,7 @@ export function createViteConfig(opts = {}) {
621
620
  }
622
621
  const devPort = (_b = process.env.PORT) !== null && _b !== void 0 ? _b : opts.port;
623
622
  const clientDepIncludes = isDev && opts.clientDepIncludes !== false && process.env.LINKED_CLIENT_DEP_INCLUDES !== '0';
624
- const config = Object.assign(Object.assign(Object.assign({ server: {
623
+ const config = Object.assign({ server: {
625
624
  port: (_c = opts.port) !== null && _c !== void 0 ? _c : 4040,
626
625
  middlewareMode: true,
627
626
  // Unique HMR websocket port per app/worktree, derived from the dev port
@@ -763,18 +762,38 @@ export function createViteConfig(opts = {}) {
763
762
  // transform and its define pass both run esbuild with keepNames off.
764
763
  // `pinCompiledClassNames` above covers what those passes rename.
765
764
  keepNames: true,
766
- } }, (isStandalone
767
- ? {
768
- resolve: {
769
- conditions: ['module', 'node'],
770
- // Dedupe the context-holding packages so the two `ssrLoadModule` loads
771
- // (LinkedServer + the app graph) resolve to ONE `server-utils`/`react`
772
- // instance — otherwise their `AppContext` objects differ and
773
- // `useAppContext()` returns null. Pairs with `ssr.noExternal` below.
774
- dedupe: ['@_linked/server-utils', '@_linked/react'],
775
- },
776
- }
777
- : {})), {
765
+ },
766
+ // STANDALONE resolve conditions.
767
+ //
768
+ // The published `@_linked/*` / `lincd-*` packages export
769
+ // "development": "./src/*.ts", "import": "./lib/esm/*.js"
770
+ // In dev, Vite expands its special `development|production` condition
771
+ // token to `development`, so it resolves these to `./src/*.ts` — which
772
+ // doesn't exist in a lib-only npm install → boot crash
773
+ // ("Failed to load @_linked/server/shapes/LinkedServer").
774
+ //
775
+ // Dropping the dev/prod token from the condition list means Vite never
776
+ // adds `development`; `import` (always appended last by Vite) wins, so
777
+ // these packages resolve to `./lib/esm/*.js`. We start from Vite's
778
+ // default SERVER conditions (`module`, `node`, `development|production`)
779
+ // minus the dev/prod token. This governs BOTH the plugin pipeline
780
+ // (`resolve.conditions`) and the SSR module runner used by
781
+ // `ssrLoadModule('@_linked/server/shapes/LinkedServer')` in
782
+ // commands/start.ts (`ssr.resolve.conditions`).
783
+ //
784
+ // WORKSPACE-GATED: only applied standalone. In monorepo dev the packages
785
+ // ship `src`, and we WANT `development → src` for HMR — so we leave
786
+ // conditions at Vite's defaults there (undefined = untouched), keeping
787
+ // CN dev byte-for-byte unchanged.
788
+ //
789
+ // DEDUPE, every mode: see `localizedDedupe`. Standalone also keeps its two
790
+ // context-holding packages even when they are not found on disk, so the two
791
+ // `ssrLoadModule` loads (LinkedServer + the app graph) resolve to ONE
792
+ // `server-utils`/`react` instance — otherwise their `AppContext` objects
793
+ // differ and `useAppContext()` returns null. Pairs with `ssr.noExternal` below.
794
+ resolve: Object.assign(Object.assign({}, (isStandalone ? { conditions: ['module', 'node'] } : {})), { dedupe: [
795
+ ...new Set([...(isStandalone ? STANDALONE_DEDUPE : []), ...dedupe.names]),
796
+ ] }),
778
797
  // `ssr.external` is a minimal allowlist of
779
798
  // npm deps that genuinely can't (or shouldn't) go through Vite's
780
799
  // SSR transform. Workspace packages (`@_linked/*`, `lincd-*`) are
@@ -890,7 +909,7 @@ export function createViteConfig(opts = {}) {
890
909
  client: {
891
910
  define: clientDefine(opts),
892
911
  },
893
- } }), (workspaces.length > 0
912
+ } }, (workspaces.length > 0
894
913
  ? { optimizeDeps: { exclude: workspaces.map((w) => w.name) } }
895
914
  : isStandalone && linkedDeps.length > 0
896
915
  ? { optimizeDeps: { exclude: linkedDeps } }