@_linked/cli 1.8.1 → 1.9.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.
Files changed (207) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/defaults/setup-publish/dual-branch/github/workflows/publish.yml +3 -0
  3. package/defaults/setup-publish/github/workflows/publish.yml +3 -0
  4. package/defaults/shape.ts +8 -2
  5. package/jest.config.cjs +8 -4
  6. package/lib/esm/cli-methods.d.ts +11 -3
  7. package/lib/esm/cli-methods.d.ts.map +1 -1
  8. package/lib/esm/cli-methods.js +51 -105
  9. package/lib/esm/cli-methods.js.map +1 -1
  10. package/lib/esm/cli.js +32 -8
  11. package/lib/esm/cli.js.map +1 -1
  12. package/lib/esm/commands/start.d.ts +6 -0
  13. package/lib/esm/commands/start.d.ts.map +1 -0
  14. package/lib/esm/commands/start.js +311 -0
  15. package/lib/esm/commands/start.js.map +1 -0
  16. package/lib/esm/config-webpack-app.d.ts +1 -1
  17. package/lib/esm/config-webpack-app.d.ts.map +1 -1
  18. package/lib/esm/config-webpack-app.js +1 -1
  19. package/lib/esm/config-webpack-app.js.map +1 -1
  20. package/lib/esm/config-webpack.d.ts +1 -1
  21. package/lib/esm/config-webpack.d.ts.map +1 -1
  22. package/lib/esm/config-webpack.js +4 -4
  23. package/lib/esm/config-webpack.js.map +1 -1
  24. package/lib/esm/defineConfig.d.ts +1 -1
  25. package/lib/esm/defineConfig.d.ts.map +1 -1
  26. package/lib/esm/index.d.ts +1 -1
  27. package/lib/esm/index.d.ts.map +1 -1
  28. package/lib/esm/index.js +1 -1
  29. package/lib/esm/index.js.map +1 -1
  30. package/lib/esm/interfaces.d.ts +9 -0
  31. package/lib/esm/interfaces.d.ts.map +1 -1
  32. package/lib/esm/lifecycle.d.ts +24 -0
  33. package/lib/esm/lifecycle.d.ts.map +1 -0
  34. package/lib/esm/lifecycle.js +156 -0
  35. package/lib/esm/lifecycle.js.map +1 -0
  36. package/lib/esm/loaders/ts-loader.d.mts.map +1 -1
  37. package/lib/esm/loaders/ts-loader.mjs +11 -2
  38. package/lib/esm/loaders/ts-loader.mjs.map +1 -1
  39. package/lib/esm/utils.d.ts +1 -1
  40. package/lib/esm/utils.d.ts.map +1 -1
  41. package/lib/esm/utils.js +9 -3
  42. package/lib/esm/utils.js.map +1 -1
  43. package/lib/esm/vite-config.d.ts +20 -0
  44. package/lib/esm/vite-config.d.ts.map +1 -0
  45. package/lib/esm/vite-config.js +410 -0
  46. package/lib/esm/vite-config.js.map +1 -0
  47. package/package.json +13 -14
  48. package/test-results/.last-run.json +6 -0
  49. package/test-results/create-app-Person-fixture-add-/342/206/222-edit-/342/206/222-delete-round-trip/error-context.md +16 -0
  50. package/test-results/create-app-Person-fixture-add-/342/206/222-edit-/342/206/222-delete-round-trip/trace.zip +0 -0
  51. package/tests/unit/safeYarn.test.ts +1 -1
  52. package/tsconfig-esm.json +1 -1
  53. package/defaults/app-with-backend/.env-cmdrc.json +0 -19
  54. package/defaults/app-with-backend/.eslintignore +0 -5
  55. package/defaults/app-with-backend/.eslintrc.json +0 -40
  56. package/defaults/app-with-backend/.prettierignore +0 -4
  57. package/defaults/app-with-backend/.prettierrc.json +0 -27
  58. package/defaults/app-with-backend/.vscode/launch.json +0 -12
  59. package/defaults/app-with-backend/.yarn/plugins/@yarnpkg/plugin-version.cjs +0 -550
  60. package/defaults/app-with-backend/.yarn/releases/yarn-3.6.1.cjs +0 -874
  61. package/defaults/app-with-backend/gitignore.template +0 -25
  62. package/defaults/app-with-backend/linked.backend.datasets.example.json +0 -17
  63. package/defaults/app-with-backend/linked.backend.storage.ts +0 -35
  64. package/defaults/app-with-backend/linked.config.js +0 -5
  65. package/defaults/app-with-backend/package.json +0 -70
  66. package/defaults/app-with-backend/pm2-staging.config.js +0 -12
  67. package/defaults/app-with-backend/pm2.config.js +0 -12
  68. package/defaults/app-with-backend/public/favicon-144x144.png +0 -0
  69. package/defaults/app-with-backend/public/favicon-57x57.png +0 -0
  70. package/defaults/app-with-backend/public/favicon-72x72.png +0 -0
  71. package/defaults/app-with-backend/public/favicon.ico +0 -0
  72. package/defaults/app-with-backend/readme.md +0 -93
  73. package/defaults/app-with-backend/src/App.module.css +0 -83
  74. package/defaults/app-with-backend/src/App.tsx +0 -30
  75. package/defaults/app-with-backend/src/backend.ts +0 -9
  76. package/defaults/app-with-backend/src/components/Error.module.css +0 -9
  77. package/defaults/app-with-backend/src/components/Error.tsx +0 -11
  78. package/defaults/app-with-backend/src/components/PersonOverview.module.css +0 -100
  79. package/defaults/app-with-backend/src/components/PersonOverview.tsx +0 -97
  80. package/defaults/app-with-backend/src/components/PersonOverviewContext.tsx +0 -12
  81. package/defaults/app-with-backend/src/components/PersonPreview.module.css +0 -97
  82. package/defaults/app-with-backend/src/components/PersonPreview.tsx +0 -109
  83. package/defaults/app-with-backend/src/components/Spinner.module.css +0 -17
  84. package/defaults/app-with-backend/src/components/Spinner.tsx +0 -12
  85. package/defaults/app-with-backend/src/index.tsx +0 -34
  86. package/defaults/app-with-backend/src/layout/DefaultLayout.module.css +0 -15
  87. package/defaults/app-with-backend/src/layout/DefaultLayout.tsx +0 -12
  88. package/defaults/app-with-backend/src/layout/Header.module.css +0 -46
  89. package/defaults/app-with-backend/src/layout/Header.tsx +0 -27
  90. package/defaults/app-with-backend/src/linked.frontend.datasets.json +0 -12
  91. package/defaults/app-with-backend/src/linked.frontend.storage.ts +0 -36
  92. package/defaults/app-with-backend/src/package.ts +0 -16
  93. package/defaults/app-with-backend/src/pages/Home.module.css +0 -23
  94. package/defaults/app-with-backend/src/pages/Home.tsx +0 -14
  95. package/defaults/app-with-backend/src/pages/Page1.module.css +0 -111
  96. package/defaults/app-with-backend/src/pages/Page1.tsx +0 -196
  97. package/defaults/app-with-backend/src/pages/PageNotFound.module.css +0 -19
  98. package/defaults/app-with-backend/src/pages/PageNotFound.tsx +0 -14
  99. package/defaults/app-with-backend/src/pages/Signin.module.css +0 -20
  100. package/defaults/app-with-backend/src/pages/Signin.tsx +0 -16
  101. package/defaults/app-with-backend/src/routes.tsx +0 -78
  102. package/defaults/app-with-backend/src/theme.css +0 -91
  103. package/defaults/app-with-backend/src/types.ts +0 -14
  104. package/defaults/app-with-backend/src/utils/lazyWithPreload.tsx +0 -42
  105. package/defaults/app-with-backend/src/utils/preloadRoutes.ts +0 -38
  106. package/defaults/app-with-backend/tsconfig.json +0 -24
  107. package/defaults/app-with-backend/yarnrc.yml.template +0 -8
  108. package/lib/cjs/cli-methods.d.ts +0 -67
  109. package/lib/cjs/cli-methods.d.ts.map +0 -1
  110. package/lib/cjs/cli-methods.js +0 -2718
  111. package/lib/cjs/cli-methods.js.map +0 -1
  112. package/lib/cjs/cli.d.ts +0 -3
  113. package/lib/cjs/cli.d.ts.map +0 -1
  114. package/lib/cjs/cli.js +0 -315
  115. package/lib/cjs/cli.js.map +0 -1
  116. package/lib/cjs/commands/build-package.d.ts +0 -9
  117. package/lib/cjs/commands/build-package.d.ts.map +0 -1
  118. package/lib/cjs/commands/build-package.js +0 -55
  119. package/lib/cjs/commands/build-package.js.map +0 -1
  120. package/lib/cjs/commands/safe-yarn.d.ts +0 -10
  121. package/lib/cjs/commands/safe-yarn.d.ts.map +0 -1
  122. package/lib/cjs/commands/safe-yarn.js +0 -66
  123. package/lib/cjs/commands/safe-yarn.js.map +0 -1
  124. package/lib/cjs/commands/setup-publish.d.ts +0 -23
  125. package/lib/cjs/commands/setup-publish.d.ts.map +0 -1
  126. package/lib/cjs/commands/setup-publish.js +0 -369
  127. package/lib/cjs/commands/setup-publish.js.map +0 -1
  128. package/lib/cjs/config-webpack-app.d.ts +0 -112
  129. package/lib/cjs/config-webpack-app.d.ts.map +0 -1
  130. package/lib/cjs/config-webpack-app.js +0 -427
  131. package/lib/cjs/config-webpack-app.js.map +0 -1
  132. package/lib/cjs/config-webpack.d.ts +0 -55
  133. package/lib/cjs/config-webpack.d.ts.map +0 -1
  134. package/lib/cjs/config-webpack.js +0 -417
  135. package/lib/cjs/config-webpack.js.map +0 -1
  136. package/lib/cjs/defineConfig.d.ts +0 -8
  137. package/lib/cjs/defineConfig.d.ts.map +0 -1
  138. package/lib/cjs/defineConfig.js +0 -12
  139. package/lib/cjs/defineConfig.js.map +0 -1
  140. package/lib/cjs/index.d.ts +0 -12
  141. package/lib/cjs/index.d.ts.map +0 -1
  142. package/lib/cjs/index.js +0 -43
  143. package/lib/cjs/index.js.map +0 -1
  144. package/lib/cjs/interfaces.d.ts +0 -131
  145. package/lib/cjs/interfaces.d.ts.map +0 -1
  146. package/lib/cjs/interfaces.js +0 -3
  147. package/lib/cjs/interfaces.js.map +0 -1
  148. package/lib/cjs/loaders/css-loader.d.mts +0 -2
  149. package/lib/cjs/loaders/css-loader.d.mts.map +0 -1
  150. package/lib/cjs/loaders/css-loader.mjs +0 -86
  151. package/lib/cjs/loaders/css-loader.mjs.map +0 -1
  152. package/lib/cjs/loaders/register-css-only.d.ts +0 -2
  153. package/lib/cjs/loaders/register-css-only.d.ts.map +0 -1
  154. package/lib/cjs/loaders/register-css-only.js +0 -11
  155. package/lib/cjs/loaders/register-css-only.js.map +0 -1
  156. package/lib/cjs/loaders/register.d.ts +0 -2
  157. package/lib/cjs/loaders/register.d.ts.map +0 -1
  158. package/lib/cjs/loaders/register.js +0 -11
  159. package/lib/cjs/loaders/register.js.map +0 -1
  160. package/lib/cjs/loaders/ts-loader.d.mts +0 -3
  161. package/lib/cjs/loaders/ts-loader.d.mts.map +0 -1
  162. package/lib/cjs/loaders/ts-loader.mjs +0 -116
  163. package/lib/cjs/loaders/ts-loader.mjs.map +0 -1
  164. package/lib/cjs/metadata.d.ts +0 -1
  165. package/lib/cjs/metadata.d.ts.map +0 -1
  166. package/lib/cjs/metadata.js +0 -155
  167. package/lib/cjs/metadata.js.map +0 -1
  168. package/lib/cjs/package.json +0 -139
  169. package/lib/cjs/plugins/check-imports.d.ts +0 -2
  170. package/lib/cjs/plugins/check-imports.d.ts.map +0 -1
  171. package/lib/cjs/plugins/check-imports.js +0 -68
  172. package/lib/cjs/plugins/check-imports.js.map +0 -1
  173. package/lib/cjs/plugins/declaration-plugin.d.ts +0 -15
  174. package/lib/cjs/plugins/declaration-plugin.d.ts.map +0 -1
  175. package/lib/cjs/plugins/declaration-plugin.js +0 -285
  176. package/lib/cjs/plugins/declaration-plugin.js.map +0 -1
  177. package/lib/cjs/plugins/externalise-modules.d.ts +0 -7
  178. package/lib/cjs/plugins/externalise-modules.d.ts.map +0 -1
  179. package/lib/cjs/plugins/externalise-modules.js +0 -190
  180. package/lib/cjs/plugins/externalise-modules.js.map +0 -1
  181. package/lib/cjs/plugins/lincd-tailwind-sources.d.ts +0 -3
  182. package/lib/cjs/plugins/lincd-tailwind-sources.d.ts.map +0 -1
  183. package/lib/cjs/plugins/lincd-tailwind-sources.js +0 -32
  184. package/lib/cjs/plugins/lincd-tailwind-sources.js.map +0 -1
  185. package/lib/cjs/plugins/watch-run.d.ts +0 -5
  186. package/lib/cjs/plugins/watch-run.d.ts.map +0 -1
  187. package/lib/cjs/plugins/watch-run.js +0 -45
  188. package/lib/cjs/plugins/watch-run.js.map +0 -1
  189. package/lib/cjs/preflight.css +0 -137
  190. package/lib/cjs/tailwind.config.d.ts +0 -8
  191. package/lib/cjs/tailwind.config.d.ts.map +0 -1
  192. package/lib/cjs/tailwind.config.js +0 -17
  193. package/lib/cjs/tailwind.config.js.map +0 -1
  194. package/lib/cjs/utils.d.ts +0 -77
  195. package/lib/cjs/utils.d.ts.map +0 -1
  196. package/lib/cjs/utils.js +0 -585
  197. package/lib/cjs/utils.js.map +0 -1
  198. package/lib/esm/loaders/register-css-only.d.ts +0 -2
  199. package/lib/esm/loaders/register-css-only.d.ts.map +0 -1
  200. package/lib/esm/loaders/register-css-only.js +0 -9
  201. package/lib/esm/loaders/register-css-only.js.map +0 -1
  202. package/lib/esm/loaders/register.d.ts +0 -2
  203. package/lib/esm/loaders/register.d.ts.map +0 -1
  204. package/lib/esm/loaders/register.js +0 -9
  205. package/lib/esm/loaders/register.js.map +0 -1
  206. package/lib/esm/package.json +0 -139
  207. /package/{babel.config.js → babel.config.cjs} +0 -0
@@ -0,0 +1,410 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ // Vite config helper for linked apps. Replaces webpack-based dev + build.
11
+ //
12
+ // Apps use this from their own vite.config.ts:
13
+ //
14
+ // import {createViteConfig} from '@_linked/cli/vite';
15
+ // export default createViteConfig({port: 4040, cssMode: 'tailwind'});
16
+ //
17
+ // The helper preserves the dev-mode `generateScopedName` (readable
18
+ // `_packageName_filename_className`) so CSS module class names match
19
+ // what the previous webpack chain produced for trace/debug. Production
20
+ // uses Vite's default scoping (content-hash, equivalent uniqueness).
21
+ import { defineConfig } from 'vite';
22
+ import react from '@vitejs/plugin-react';
23
+ import fsExtra from 'fs-extra';
24
+ import path from 'node:path';
25
+ import { generateScopedName } from './utils.js';
26
+ /**
27
+ * Walk the app's package.json `workspaces` field to build a lookup table
28
+ * from npm name → absolute src/ directory. Used by the resolver plugin
29
+ * to map bare specifiers like `@_linked/foo/bar` directly to source.
30
+ * No glob library: workspaces only support trailing `/*` patterns.
31
+ */
32
+ function discoverWorkspaces() {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ var _a, _b;
35
+ const fs = yield import('node:fs/promises');
36
+ const cwd = process.cwd();
37
+ const out = [];
38
+ const seen = new Set();
39
+ // Register a package root iff it ships a `src/` dir (source install). Published
40
+ // packages have only `lib/` and are skipped — they resolve via their exports.
41
+ const addFromRoot = (root) => __awaiter(this, void 0, void 0, function* () {
42
+ const subPkgPath = path.join(root, 'package.json');
43
+ if (!(yield fsExtra.pathExists(subPkgPath)))
44
+ return;
45
+ const srcDir = path.join(root, 'src');
46
+ if (!(yield fsExtra.pathExists(srcDir)))
47
+ return;
48
+ try {
49
+ const sub = yield fsExtra.readJson(subPkgPath);
50
+ if (sub.name && !seen.has(sub.name)) {
51
+ seen.add(sub.name);
52
+ out.push({ name: sub.name, srcDir });
53
+ }
54
+ }
55
+ catch (_a) { }
56
+ });
57
+ // 1. The app's own `workspaces` globs — the monorepo-root case (CN, or any app
58
+ // that is itself a workspace root). Only trailing `/*` patterns.
59
+ const pkgPath = path.join(cwd, 'package.json');
60
+ if (yield fsExtra.pathExists(pkgPath)) {
61
+ const pkg = yield fsExtra.readJson(pkgPath);
62
+ const patterns = Array.isArray(pkg.workspaces)
63
+ ? pkg.workspaces
64
+ : (_b = (_a = pkg.workspaces) === null || _a === void 0 ? void 0 : _a.packages) !== null && _b !== void 0 ? _b : [];
65
+ for (const pattern of patterns) {
66
+ const m = pattern.match(/^(.+?)\/\*$/);
67
+ if (m) {
68
+ const parent = path.join(cwd, m[1]);
69
+ if (yield fsExtra.pathExists(parent)) {
70
+ for (const ent of yield fs.readdir(parent, { withFileTypes: true })) {
71
+ if (ent.isDirectory() || ent.isSymbolicLink()) {
72
+ yield addFromRoot(path.join(parent, ent.name));
73
+ }
74
+ }
75
+ }
76
+ }
77
+ else {
78
+ yield addFromRoot(path.join(cwd, pattern));
79
+ }
80
+ }
81
+ }
82
+ // 2. Dependency-graph traversal from the app's package.json. Starting from the
83
+ // app's own `dependencies` (+ `devDependencies`), keep the deps whose
84
+ // resolved package.json is marked `"linkedPackage": true` — the same marker
85
+ // the CLI keys on (see cli-methods.ts) — and recurse into THOSE packages'
86
+ // `dependencies`, with a visited-set to avoid cycles/rework.
87
+ //
88
+ // A dep is REGISTERED only if it ships `src/` (a symlinked workspace clone,
89
+ // or a `link:`/`portal:` dev install) — that's what lets a STANDALONE app
90
+ // (not itself a workspace root — e.g. a per-branch clone under /apps) resolve
91
+ // a linked package's `.tsx` sources with extension probing, instead of
92
+ // falling through to the package's `development → ./src/*.ts` export (which
93
+ // misses `.tsx` like LinkedServer). A prod/ejected app installs PUBLISHED
94
+ // packages (no `src/`) → not registered, resolved via each package's `lib`.
95
+ //
96
+ // The marker — NOT the npm scope — drives discovery, so a user's own
97
+ // custom-scope published linked package (e.g. `@acme/foo` with
98
+ // `linkedPackage:true`) is picked up too, and linked packages present in
99
+ // node_modules but not depended upon are ignored.
100
+ const nm = path.join(cwd, 'node_modules');
101
+ // Resolve a dependency name to its installed package.json path. A symlinked
102
+ // workspace clone resolves under the app's node_modules just like a normal
103
+ // install. Returns null when the package isn't installed (e.g. an optional
104
+ // or unhoisted dep) — we skip rather than throw.
105
+ const readInstalledPkg = (name) => __awaiter(this, void 0, void 0, function* () {
106
+ const root = path.join(nm, name);
107
+ const pkgJson = path.join(root, 'package.json');
108
+ if (!(yield fsExtra.pathExists(pkgJson)))
109
+ return null;
110
+ try {
111
+ return { root, json: yield fsExtra.readJson(pkgJson) };
112
+ }
113
+ catch (_a) {
114
+ return null;
115
+ }
116
+ });
117
+ const visited = new Set();
118
+ const walk = (deps) => __awaiter(this, void 0, void 0, function* () {
119
+ for (const name of Object.keys(deps !== null && deps !== void 0 ? deps : {})) {
120
+ if (visited.has(name))
121
+ continue;
122
+ visited.add(name);
123
+ const resolved = yield readInstalledPkg(name);
124
+ if (!resolved)
125
+ continue;
126
+ if (resolved.json.linkedPackage !== true)
127
+ continue;
128
+ // Register if it ships source (addFromRoot gates on src/ existing).
129
+ yield addFromRoot(resolved.root);
130
+ // Recurse into this linked package's own dependencies.
131
+ yield walk(resolved.json.dependencies);
132
+ }
133
+ });
134
+ if (yield fsExtra.pathExists(pkgPath)) {
135
+ const appPkg = yield fsExtra.readJson(pkgPath);
136
+ yield walk(appPkg.dependencies);
137
+ yield walk(appPkg.devDependencies);
138
+ }
139
+ return out;
140
+ });
141
+ }
142
+ /**
143
+ * Resolve a bare specifier like `@_linked/foo/bar`, `lincd-rdfs/Foo`, or
144
+ * `pkg/utils/Bar.js` against the workspace lookup. Tries extensions in
145
+ * order: .ts, .tsx, then the literal id (for files that already include
146
+ * an extension or for non-TS assets). Returns null when the specifier
147
+ * doesn't match any workspace package or no candidate exists on disk.
148
+ */
149
+ function resolveWorkspaceSpecifier(specifier, workspaces) {
150
+ return __awaiter(this, void 0, void 0, function* () {
151
+ for (const ws of workspaces) {
152
+ if (specifier === ws.name) {
153
+ for (const ext of ['index.ts', 'index.tsx']) {
154
+ const p = path.join(ws.srcDir, ext);
155
+ if (yield fsExtra.pathExists(p))
156
+ return p;
157
+ }
158
+ return null;
159
+ }
160
+ if (specifier.startsWith(ws.name + '/')) {
161
+ const subpath = specifier.slice(ws.name.length + 1);
162
+ // Strip .js/.jsx suffix — workspace src uses TS published-output
163
+ // convention (./Sibling.js) but we want the TS source.
164
+ const base = subpath.replace(/\.jsx?$/, '');
165
+ for (const ext of ['.tsx', '.ts']) {
166
+ const p = path.join(ws.srcDir, base + ext);
167
+ if (yield fsExtra.pathExists(p))
168
+ return p;
169
+ }
170
+ // Files that already include an extension Vite handles (.css, .json,
171
+ // .svg, etc.) — return the literal path under src.
172
+ const literal = path.join(ws.srcDir, subpath);
173
+ if (yield fsExtra.pathExists(literal))
174
+ return literal;
175
+ return null;
176
+ }
177
+ }
178
+ return null;
179
+ });
180
+ }
181
+ export function createViteConfig(opts = {}) {
182
+ return defineConfig((_a) => __awaiter(this, [_a], void 0, function* ({ mode }) {
183
+ var _b, _c, _d, _e, _f, _g;
184
+ const isDev = mode === 'development';
185
+ const workspaces = isDev ? yield discoverWorkspaces() : [];
186
+ // STANDALONE = dev mode with no source-shipping workspaces discovered
187
+ // (an app installed from npm outside the monorepo — its `@_linked/*` /
188
+ // `lincd-*` deps are lib-only). discoverWorkspaces() only registers
189
+ // packages that ship `src/` on disk, so `length === 0` is the exact
190
+ // standalone signal used elsewhere in this file. In WORKSPACE mode
191
+ // (CN monorepo or its workspace-member clones) this is false and none
192
+ // of the standalone-gated branches below apply.
193
+ const isStandalone = isDev && workspaces.length === 0;
194
+ const config = Object.assign(Object.assign({ server: {
195
+ port: (_b = opts.port) !== null && _b !== void 0 ? _b : 4040,
196
+ middlewareMode: true,
197
+ }, build: {
198
+ outDir: (_c = opts.outDir) !== null && _c !== void 0 ? _c : 'public/bundles',
199
+ manifest: true,
200
+ // Bump chunk-size warning so it doesn't fire on every build for
201
+ // the linked vendor bundle. Real chunking happens via
202
+ // manualChunks below.
203
+ chunkSizeWarningLimit: 1000,
204
+ rollupOptions: {
205
+ input: (_d = opts.entry) !== null && _d !== void 0 ? _d : 'src/index.tsx',
206
+ output: {
207
+ entryFileNames: 'assets/[name]-[hash].js',
208
+ chunkFileNames: 'assets/[name]-[hash].js',
209
+ assetFileNames: 'assets/[name]-[hash][extname]',
210
+ // Split large/common deps so route chunks don't all carry
211
+ // their own copy AND the main entry doesn't end up at 5MB+.
212
+ // Each manualChunk becomes its own assets/<name>-<hash>.js
213
+ // file the browser caches independently — incremental dev
214
+ // builds + cache wins on prod deploys both improve.
215
+ manualChunks: (id) => {
216
+ if (!id.includes('node_modules')) {
217
+ // Linked workspaces ship as @_linked/* / lincd-* —
218
+ // group all linked-framework code into a single chunk.
219
+ if (id.includes('/packages/core/') ||
220
+ id.includes('/packages/react/') ||
221
+ id.includes('/packages/server-utils/') ||
222
+ id.includes('/packages/primitives/') ||
223
+ id.includes('/packages/css/') ||
224
+ /\/packages\/(auth|org|schema|fuseki|owl|xsd|dcat|dcmi|s3|sentry|ui)\//.test(id)) {
225
+ return 'linked';
226
+ }
227
+ return undefined;
228
+ }
229
+ // React + React-DOM in their own chunk — every route uses them
230
+ if (/[\\/]node_modules[\\/](react|react-dom|react-router-dom|scheduler)[\\/]/.test(id)) {
231
+ return 'react-vendor';
232
+ }
233
+ // Heavy editor deps — only loaded on pages that need them,
234
+ // but worth isolating so they don't get pulled into main.
235
+ if (/[\\/]node_modules[\\/]@monaco-editor[\\/]/.test(id)) {
236
+ return 'monaco';
237
+ }
238
+ // Charting/visualization
239
+ if (/[\\/]node_modules[\\/](recharts|react-flow|@xyflow|d3-)[\\/]/.test(id)) {
240
+ return 'viz';
241
+ }
242
+ // Animation
243
+ if (/[\\/]node_modules[\\/]framer-motion[\\/]/.test(id)) {
244
+ return 'motion';
245
+ }
246
+ // Catch-all for other node_modules in a vendor chunk
247
+ return 'vendor';
248
+ },
249
+ },
250
+ },
251
+ sourcemap: true,
252
+ }, plugins: [
253
+ // Plan-011 phase 3a — Direct workspace specifier resolver.
254
+ //
255
+ // The package.json `"./*": { "development": "./src/*.ts" }` wildcard
256
+ // can't express "try .ts, fall back to .tsx" (Node's exports spec
257
+ // resolves to a single literal path). For React-heavy packages like
258
+ // @_linked/primitives, @_linked/server-utils, and @_linked/auth,
259
+ // most files are .tsx — the wildcard fails before any Vite plugin
260
+ // gets a chance to fix it up.
261
+ //
262
+ // This plugin intercepts BARE workspace specifiers like
263
+ // `@_linked/foo/bar` and `pkg-name/utils/Baz.js` BEFORE Vite's
264
+ // package.json resolver runs, mapping them straight to source with
265
+ // proper extension fallback (.tsx → .ts → literal). It also covers
266
+ // the `./Sibling.js` published-output convention for imports made
267
+ // from within workspace `src/` trees.
268
+ isDev
269
+ ? {
270
+ name: 'linked:resolve-workspace-ts',
271
+ enforce: 'pre',
272
+ resolveId(id, importer) {
273
+ return __awaiter(this, void 0, void 0, function* () {
274
+ if (id.startsWith('\0'))
275
+ return null;
276
+ // Workspace-internal `./Sibling.js` → `.tsx` / `.ts` rewrite.
277
+ if (importer &&
278
+ importer.includes(`${path.sep}packages${path.sep}`) &&
279
+ /\.(jsx?)$/.test(id) &&
280
+ (id.startsWith('.') || id.startsWith('/'))) {
281
+ const importerDir = path.dirname(importer);
282
+ const base = path.resolve(importerDir, id);
283
+ for (const ext of ['.tsx', '.ts']) {
284
+ const candidate = base.replace(/\.jsx?$/, ext);
285
+ if (yield fsExtra.pathExists(candidate))
286
+ return candidate;
287
+ }
288
+ }
289
+ // Bare workspace specifier — resolve directly to src/.
290
+ if (!id.startsWith('.') &&
291
+ !id.startsWith('/') &&
292
+ workspaces.length > 0) {
293
+ const resolved = yield resolveWorkspaceSpecifier(id, workspaces);
294
+ if (resolved)
295
+ return resolved;
296
+ }
297
+ // STANDALONE (no workspaces): the linked packages are installed
298
+ // from npm as lib-only (no `src`). We DON'T intercept them here —
299
+ // instead the standalone `resolve.conditions` / `ssr.resolve.conditions`
300
+ // (set on the config below, dropping Vite's `development` token)
301
+ // let Vite's normal resolver pick each package's `import → lib/esm`
302
+ // export. Bundling those lib files through the SSR runner works
303
+ // (they're plain ESM); marking them external instead would leave a
304
+ // bare specifier that `vite.ssrLoadModule` can't load
305
+ // ("Failed to load url @_linked/server/shapes/LinkedServer").
306
+ return null;
307
+ });
308
+ },
309
+ }
310
+ : null,
311
+ react({
312
+ babel: {
313
+ parserOpts: {
314
+ plugins: ['decorators-legacy', 'classProperties'],
315
+ },
316
+ },
317
+ }),
318
+ // Dev-only: log every file the watcher sees change. Without this,
319
+ // backend edits look silent (no JS rebuild step, no Node restart —
320
+ // see plan-010 §"Rebuild chain") and it's hard to tell whether
321
+ // Vite picked up the change at all.
322
+ isDev
323
+ ? {
324
+ name: 'linked:reload-log',
325
+ configureServer(server) {
326
+ server.watcher.on('change', (file) => {
327
+ const rel = file.replace(process.cwd() + '/', '');
328
+ console.log(`[linked] reloaded ${rel}`);
329
+ });
330
+ },
331
+ }
332
+ : null,
333
+ ...((_e = opts.plugins) !== null && _e !== void 0 ? _e : []),
334
+ ].filter(Boolean), css: {
335
+ modules: {
336
+ generateScopedName: isDev ? generateScopedName : undefined,
337
+ },
338
+ postcss: opts.postcssPlugins
339
+ ? { plugins: opts.postcssPlugins }
340
+ : undefined,
341
+ }, esbuild: {
342
+ tsconfigRaw: {
343
+ compilerOptions: {
344
+ experimentalDecorators: true,
345
+ },
346
+ },
347
+ jsx: 'automatic',
348
+ } }, (isStandalone
349
+ ? { resolve: { conditions: ['module', 'node'] } }
350
+ : {})), {
351
+ // Plan-011 phase 3a — `ssr.external` is now a minimal allowlist of
352
+ // npm deps that genuinely can't (or shouldn't) go through Vite's
353
+ // SSR transform. Workspace packages (`@_linked/*`, `lincd-*`) are
354
+ // DELIBERATELY removed so Vite resolves them via each package's
355
+ // `development → ./src/*.ts` conditional export and HMR works on
356
+ // source changes (see plan-011 §I1).
357
+ //
358
+ // "Multiple LINCD" warnings may resurface during the interim until
359
+ // LINCD eradication completes (plan-011 §I2 — accepted).
360
+ ssr: Object.assign({
361
+ // NOTE: Vite's `ssr.external` only accepts exact package-name strings
362
+ // (not regex). Standalone `@_linked/*` / `lincd-*` are NOT force-listed
363
+ // here — they auto-externalize (or bundle) and resolve via the
364
+ // standalone `import → lib/esm` conditions set below.
365
+ external: [
366
+ 'react',
367
+ 'react-dom',
368
+ 'react-dom/server',
369
+ 'react-router-dom',
370
+ 'scheduler',
371
+ 'express',
372
+ ],
373
+ // Vite 7 auto-externalizes node_modules packages for SSR (loading them
374
+ // via Node → the `import`→`lib/esm` condition), which would bypass the
375
+ // `linked:resolve-workspace-ts` resolver and create a SECOND module
376
+ // instance of each workspace package (breaking the single-`src`-instance
377
+ // invariant — `LinkedStorage` state set on one instance, read on the
378
+ // other → "No query dispatch configured"). Force the workspace packages
379
+ // to be BUNDLED so they resolve via each package's `development → src`.
380
+ //
381
+ // WORKSPACE-GATED: only force-bundle when workspaces are actually
382
+ // present (the monorepo / CN + CN's workspace-member clones, where the
383
+ // `@_linked/*` packages have `src` on disk). A STANDALONE app (CLI-
384
+ // created, no workspaces) installs `@_linked/*` from npm as lib-only —
385
+ // those have NO `src`, so bundling them via the `development → src`
386
+ // condition fails ("Failed to load @_linked/server/shapes/LinkedServer").
387
+ // Leaving them EXTERNAL lets Node resolve `import → lib/esm`. Single-
388
+ // instance is not a concern standalone (one node_modules copy each) and
389
+ // core's query dispatch is global-backed regardless.
390
+ noExternal: workspaces.length > 0 ? [/^@_linked\//, /^lincd-/] : [] }, (isStandalone ? { resolve: { conditions: ['module', 'node'] } } : {})), define: (_f = opts.define) !== null && _f !== void 0 ? _f : {} });
391
+ // Tailwind plugin (only if explicitly enabled — adds a heavy plugin).
392
+ if (opts.cssMode === 'tailwind') {
393
+ // Try ESM dynamic import first (works when @tailwindcss/vite is
394
+ // installed in the app or hoisted). Surface a CLEAR warning when
395
+ // it's not — the app needs the dep for theme variables to load.
396
+ try {
397
+ const tailwind = yield import('@tailwindcss/vite');
398
+ const tailwindPlugin = (_g = tailwind.default) !== null && _g !== void 0 ? _g : tailwind;
399
+ config.plugins.push(tailwindPlugin());
400
+ }
401
+ catch (err) {
402
+ console.warn('[createViteConfig] cssMode=tailwind but @tailwindcss/vite ' +
403
+ 'could not be loaded. Theme variables won\'t apply at runtime. ' +
404
+ 'Add `@tailwindcss/vite` to your app\'s package.json.');
405
+ }
406
+ }
407
+ return config;
408
+ }));
409
+ }
410
+ //# sourceMappingURL=vite-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../src/vite-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,25 +1,23 @@
1
1
  {
2
2
  "name": "@_linked/cli",
3
- "version": "1.8.1",
3
+ "version": "1.9.0",
4
4
  "description": "Command line tools for the @_linked/* packages and apps",
5
- "main": "lib/cjs/index.js",
5
+ "main": "lib/esm/index.js",
6
+ "types": "./lib/esm/index.d.ts",
6
7
  "module": "lib/esm/index.js",
7
8
  "exports": {
8
9
  ".": {
9
10
  "types": "./lib/esm/index.d.ts",
10
- "import": "./lib/esm/index.js",
11
- "require": "./lib/cjs/index.js"
11
+ "import": "./lib/esm/index.js"
12
12
  },
13
13
  "./*.css": "./lib/esm/*.css",
14
14
  "./*.js": {
15
15
  "types": "./lib/esm/*.d.ts",
16
- "import": "./lib/esm/*.js",
17
- "require": "./lib/cjs/*.js"
16
+ "import": "./lib/esm/*.js"
18
17
  },
19
18
  "./*": {
20
19
  "types": "./lib/esm/*.d.ts",
21
- "import": "./lib/esm/*.js",
22
- "require": "./lib/cjs/*.js"
20
+ "import": "./lib/esm/*.js"
23
21
  }
24
22
  },
25
23
  "typesVersions": {
@@ -30,13 +28,10 @@
30
28
  }
31
29
  },
32
30
  "scripts": {
33
- "build": "rimraf ./lib && yarn build-esm && yarn build-cjs && yarn copy-to-lib && yarn dual-package",
34
- "build-cjs": "echo \"compiling CJS\" && rimraf ./lib/cjs && yarn tsc -p tsconfig-cjs.json",
31
+ "build": "rimraf ./lib && yarn build-esm && yarn copy-to-lib",
35
32
  "build-esm": "echo \"compiling ESM\" && rimraf ./lib/esm && yarn tsc -p tsconfig-esm.json",
36
- "dual-package": "echo 'adding package.json to each lib folder for dual output support' && yarn tsconfig-to-dual-package ./tsconfig-cjs.json ./tsconfig-esm.json",
37
- "copy-to-lib": "echo '💫 Copying CSS assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' lib/esm && yarn copyfiles -u 1 'src/**/*.css' lib/cjs",
33
+ "copy-to-lib": "echo '💫 Copying CSS assets to lib folder' && yarn copyfiles -u 1 'src/**/*.css' lib/esm",
38
34
  "dev": "yarn tsc -p tsconfig-esm.json -w",
39
- "dev-cjs": "yarn tsc -p tsconfig-cjs.json -w",
40
35
  "test": "yarn test:unit && yarn test:e2e",
41
36
  "test:unit": "jest --config jest.config.cjs",
42
37
  "test:e2e": "playwright test --config playwright.config.ts",
@@ -84,12 +79,15 @@
84
79
  "@babel/register": "^7.23.7",
85
80
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
86
81
  "@tailwindcss/postcss": "^4.1.4",
82
+ "@tailwindcss/vite": "^4.1.4",
87
83
  "@types/node": "^20.12.7",
88
84
  "@types/react": "^18.0.17",
89
85
  "@types/react-dom": "^18.0.6",
86
+ "@vitejs/plugin-react": "^4.3.0",
90
87
  "babel-loader": "^9.1.3",
91
88
  "chalk": "^4.1.2",
92
89
  "child-process-promise": "^2.2.1",
90
+ "chokidar": "^4.0.0",
93
91
  "colors": "^1.4.0",
94
92
  "commander": "^11.0.0",
95
93
  "copy-webpack-plugin": "^12.0.2",
@@ -101,6 +99,7 @@
101
99
  "depcheck": "^1.4.7",
102
100
  "env-cmd": "^10.1.0",
103
101
  "esbuild": "^0.28.0",
102
+ "express": "^4.19.2",
104
103
  "find-nearest-package-json": "^2.0.1",
105
104
  "fs-extra": "^11.2.0",
106
105
  "glob": "^10.3.12",
@@ -132,9 +131,9 @@
132
131
  "ts-loader": "^9.5.1",
133
132
  "tsconfig-paths-webpack-plugin": "^4.1.0",
134
133
  "tsconfig-to-dual-package": "^1.2.0",
135
- "tsx": "^4.19.3",
136
134
  "typescript": "^5.4.0",
137
135
  "typescript-plugin-css-modules": "^5.1.0",
136
+ "vite": "^6.0.0",
138
137
  "webpack": "^5.90.3",
139
138
  "webpack-bundle-analyzer": "^4.10.1",
140
139
  "webpack-license-plugin": "^4.4.2",
@@ -0,0 +1,6 @@
1
+ {
2
+ "status": "failed",
3
+ "failedTests": [
4
+ "08b008892d366eb7d5e3-5956bfb1baadbc8122fc"
5
+ ]
6
+ }
@@ -0,0 +1,16 @@
1
+ # Instructions
2
+
3
+ - Following Playwright test failed.
4
+ - Explain why, be concise, respect Playwright best practices.
5
+ - Provide a snippet of code with the fix, if possible.
6
+
7
+ # Test info
8
+
9
+ - Name: create-app.spec.ts >> Person fixture: add → edit → delete round-trip
10
+ - Location: tests/e2e/create-app.spec.ts:113:1
11
+
12
+ # Error details
13
+
14
+ ```
15
+ Error: Log message "/Started.*Server/" not received after 60000ms
16
+ ```
@@ -2,7 +2,7 @@
2
2
  // command and the parsed args, then returns without executing yarn or
3
3
  // touching mrgit-related lockfiles. Covers a deferred gap from
4
4
  // docs/backlog/010-cli-test-harness.md.
5
- import {safeYarn} from '../../lib/cjs/commands/safe-yarn.js';
5
+ import {safeYarn} from '../../src/commands/safe-yarn.js';
6
6
 
7
7
  describe('safeYarn (dry-run)', () => {
8
8
  const originalEnv = process.env.LINKED_YARN_DRY_RUN;
package/tsconfig-esm.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "module": "esnext",
5
5
  "target": "es6",
6
6
  "outDir": "lib/esm",
7
- "moduleResolution": "node",
7
+ "moduleResolution": "bundler",
8
8
  "allowSyntheticDefaultImports": true,
9
9
  }
10
10
  }
@@ -1,19 +0,0 @@
1
- {
2
- "_main": {
3
- "DATA_ROOT": "https://${app_domain}/data",
4
- "APP_PREFIX": "${app_prefix}",
5
- "APP_NAME": "${app_name}",
6
- "SOURCE_PATH": "./src",
7
- "FUSEKI_USER": "admin",
8
- "FUSEKI_PASSWORD": "admin"
9
- },
10
- "development": {
11
- "NODE_ENV": "development",
12
- "SITE_ROOT": "http://localhost:4000"
13
- },
14
- "production": {
15
- "PORT": "4000",
16
- "NODE_ENV": "production",
17
- "SITE_ROOT": "https://${app_domain}"
18
- }
19
- }
@@ -1,5 +0,0 @@
1
- node_modules
2
- public
3
- build
4
- data
5
- web
@@ -1,40 +0,0 @@
1
- {
2
- "env": {
3
- "browser": true,
4
- "es2021": true,
5
- "jest": true
6
- },
7
- "extends": ["plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:import/recommended", "prettier"],
8
- "overrides": [],
9
- "parser": "@typescript-eslint/parser",
10
- "parserOptions": {
11
- "ecmaFeatures": {
12
- "jsx": true
13
- },
14
- "ecmaVersion": 12,
15
- "sourceType": "module"
16
- },
17
- "plugins": ["react", "@typescript-eslint", "react-hooks"],
18
- "rules": {
19
- "no-var": "off",
20
- "no-use-before-define": "off",
21
- "react/react-in-jsx-scope": "off",
22
- "@typescript-eslint/explicit-function-return-type": "off",
23
- "@typescript-eslint/no-use-before-define": ["error"],
24
- "@typescript-eslint/no-shadow": "off",
25
- "react/jsx-filename-extension": ["warn", {"extensions": [".tsx"]}],
26
- "import/extensions": ["error", "ignorePackages", {"ts": "never", "tsx": "never"}],
27
- "no-shadow": "off",
28
- "max-len": ["warn", {"code": 100, "ignoreComments": true, "ignoreUrls": true}],
29
- "react-hooks/rules-of-hooks": "error",
30
- "react-hooks/exhaustive-deps": "warn",
31
- "import/prefer-default-export": "off",
32
- "prefer-const": "off",
33
- "react/prop-types": "off"
34
- },
35
- "settings": {
36
- "import/resolver": {
37
- "typescript": {}
38
- }
39
- }
40
- }
@@ -1,4 +0,0 @@
1
- node_modules
2
- *.scss.json
3
- build
4
- package.json