@_linked/cli 1.26.0 → 1.28.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.
- package/CHANGELOG.md +50 -0
- package/defaults/package/tsconfig.json +1 -0
- package/lib/esm/app-release/app-assets-store.js.map +1 -1
- package/lib/esm/app-release/build-backend.js.map +1 -1
- package/lib/esm/app-release/create-release-manifest.js.map +1 -1
- package/lib/esm/app-release/paths.js.map +1 -1
- package/lib/esm/app-release/publisher.js.map +1 -1
- package/lib/esm/app-release/resolve-build-target.js.map +1 -1
- package/lib/esm/app-release/static-assets.js.map +1 -1
- package/lib/esm/app-release/types.js.map +1 -1
- package/lib/esm/cli-methods.d.ts +2 -2
- package/lib/esm/cli-methods.d.ts.map +1 -1
- package/lib/esm/cli-methods.js +30 -70
- package/lib/esm/cli-methods.js.map +1 -1
- package/lib/esm/cli.js +1 -1
- package/lib/esm/cli.js.map +1 -1
- package/lib/esm/commands/build-app.js.map +1 -1
- package/lib/esm/commands/build-package.js.map +1 -1
- package/lib/esm/commands/publish-app.js.map +1 -1
- package/lib/esm/commands/safe-yarn.js.map +1 -1
- package/lib/esm/commands/serve-app.js.map +1 -1
- package/lib/esm/commands/setup-publish.js.map +1 -1
- package/lib/esm/commands/start.js.map +1 -1
- package/lib/esm/defineConfig.js.map +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interfaces.js.map +1 -1
- package/lib/esm/launch.js.map +1 -1
- package/lib/esm/lifecycle.d.ts +76 -0
- package/lib/esm/lifecycle.d.ts.map +1 -1
- package/lib/esm/lifecycle.js +189 -8
- package/lib/esm/lifecycle.js.map +1 -1
- package/lib/esm/loaders/css-loader.mjs.map +1 -1
- package/lib/esm/loaders/ts-loader.mjs.map +1 -1
- package/lib/esm/metadata.js.map +1 -1
- package/lib/esm/package-manifest.js.map +1 -1
- package/lib/esm/plugins/lincd-tailwind-sources.js.map +1 -1
- package/lib/esm/tailwind.config.js.map +1 -1
- package/lib/esm/utils/esmSpecifiers.js.map +1 -1
- package/lib/esm/utils/packageManager.js.map +1 -1
- package/lib/esm/utils/packageSetup.js.map +1 -1
- package/lib/esm/utils/shapeNames.d.ts +26 -0
- package/lib/esm/utils/shapeNames.d.ts.map +1 -0
- package/lib/esm/utils/shapeNames.js +81 -0
- package/lib/esm/utils/shapeNames.js.map +1 -0
- package/lib/esm/utils/shippedDotfiles.js.map +1 -1
- package/lib/esm/utils.js.map +1 -1
- package/lib/esm/vite-config.d.ts +10 -1
- package/lib/esm/vite-config.d.ts.map +1 -1
- package/lib/esm/vite-config.js +62 -31
- package/lib/esm/vite-config.js.map +1 -1
- package/lib/esm/workspace-globs.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.28.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#158](https://github.com/linked-fw/cli/pull/158) [`e821daf`](https://github.com/linked-fw/cli/commit/e821dafc4865dfc4db3404eeb20619fe1ad8fcd1) Thanks [@flyon](https://github.com/flyon)! - `linked build` gains a "Checking shape names" step that warns about compiled shapes without `@linkedShape({name})` whose module also reads `process.env` or `import.meta.env` — the ones a consumer's bundler can rename.
|
|
8
|
+
|
|
9
|
+
- [#158](https://github.com/linked-fw/cli/pull/158) [`ee391de`](https://github.com/linked-fw/cli/commit/ee391dea3b53ed0ae6e19d667397b1fc4433d05b) Thanks [@flyon](https://github.com/flyon)! - `createViteConfig` now applies its `process.env.*` defines (`NODE_ENV`, `SITE_ROOT`, `APP_NAME`, and anything passed as its `define` option) to the **client environment only** (`environments.client.define`), no longer to the top-level `define` that the SSR environment inherits.
|
|
10
|
+
|
|
11
|
+
A top-level define reached the server in two harmful ways. Vite's define pass runs `esbuild.transform` without `keepNames` over every SSR module containing a key, which renamed tsc-emitted decorated classes — `@_linked/server`'s `LinkedServer` and `LincdAPI` registered as `LinkedServer2` / `LincdAPI2` in dev, so their shape IRIs no longer matched. And in a release backend build it inlined the build machine's `SITE_ROOT` instead of reading the deployment's.
|
|
12
|
+
|
|
13
|
+
Behaviour change: server-side code loaded through Vite now reads `process.env.SITE_ROOT`, `APP_NAME` and `NODE_ENV` at runtime in dev as well, so those must be set in the server's environment (they already had to be for any externalised package). Apps that add their own top-level `define` in `vite.config` should move it to `environments.client.define`.
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [#158](https://github.com/linked-fw/cli/pull/158) [`1a8fe90`](https://github.com/linked-fw/cli/commit/1a8fe90a5f4b974dbae00425f976b77f880f0efa) Thanks [@flyon](https://github.com/flyon)! - The package template's tsconfig (and the CLI's own) now sets `inlineSources`, so published source maps carry their sources instead of pointing at an unshipped `src/`.
|
|
18
|
+
|
|
19
|
+
## 1.27.0
|
|
20
|
+
|
|
21
|
+
### Minor Changes
|
|
22
|
+
|
|
23
|
+
- [#154](https://github.com/linked-fw/cli/pull/154) [`4a1d419`](https://github.com/linked-fw/cli/commit/4a1d419decdd3c4247b0e0c723f94897838dbd67) Thanks [@flyon](https://github.com/flyon)! - `build-all`: find every local package, and never skip one silently
|
|
24
|
+
|
|
25
|
+
`build-all` discovered only packages declaring `linkedPackage: true`, only inside the
|
|
26
|
+
`workspaces` globs, and printed nothing about anything it passed over. Measured against
|
|
27
|
+
Create Now, that meant `Found 3 total LINCD packages in use by this app` and `exit 0` for a
|
|
28
|
+
workspace of six tracked members plus 25 localized checkouts — with `@_linked/maps`, a shipped
|
|
29
|
+
dependency that had simply never been given the flag, dropped from a green build in silence.
|
|
30
|
+
|
|
31
|
+
Three changes:
|
|
32
|
+
|
|
33
|
+
- **Discovery is by capability, not by declaration.** `build-all` invokes each package's own
|
|
34
|
+
`build` script, so any package with one is now built, flag or no flag. The flag still governs
|
|
35
|
+
`linked build` and the dev resolver, and is unchanged there.
|
|
36
|
+
- **`packages-local/` is scanned** alongside the workspace globs. That directory is deliberately
|
|
37
|
+
in no glob (`semantu localize` keeps npm from learning about the checkouts), so a walk of
|
|
38
|
+
`workspaces` alone could never see it.
|
|
39
|
+
- **Every package found but not built is named, with the reason** — no build script, is a linked
|
|
40
|
+
app, outside the repository, or not in this app's dependency tree. This alone would have
|
|
41
|
+
surfaced `@_linked/maps`.
|
|
42
|
+
|
|
43
|
+
New exports from `@_linked/cli`: `discoverLocalPackages()`, which returns every local package
|
|
44
|
+
with the facts callers filter on (`source`, `isLinkedPackage`, `isApp`, `hasBuildScript`), and
|
|
45
|
+
`planBuildAll()`, which returns what would be built and what would be skipped with reasons.
|
|
46
|
+
`getLincdPackages()` keeps its narrow meaning — flagged packages, workspace globs only — so the
|
|
47
|
+
dev resolver and the runtime are unaffected; it now also honours the legacy `lincd: true`
|
|
48
|
+
spelling of the flag, matching `linked build-package`.
|
|
49
|
+
|
|
50
|
+
Also: user-facing output saying "LINCD packages" or suggesting `lincd build-all --from=` now says
|
|
51
|
+
"linked" and `linked build-all --from=`.
|
|
52
|
+
|
|
3
53
|
## 1.26.0
|
|
4
54
|
|
|
5
55
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-assets-store.js","sourceRoot":"","sources":["../../../src/app-release/app-assets-store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAa/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAEd,EAAE,mDADvB,eAAkD,EAAE;IAEpD,MAAM,iBAAiB,GACrB,YAAY,CAAC,iBAAiB;QAC9B,CAAC,GAAS,EAAE;YACV,MAAM,EAAC,wBAAwB,EAAC,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACnE,OAAO,wBAAwB,EAAE,CAAC;QACpC,CAAC,CAAA,CAAC,CAAC;IACL,MAAM,iBAAiB,EAAE,CAAC;IAE1B,MAAM,QAAQ,GACZ,YAAY,CAAC,QAAQ;QACrB,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAA,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC9D,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"app-assets-store.js","sourceRoot":"","sources":["../../../src/app-release/app-assets-store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAa/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAEd,EAAE,mDADvB,eAAkD,EAAE;IAEpD,MAAM,iBAAiB,GACrB,YAAY,CAAC,iBAAiB;QAC9B,CAAC,GAAS,EAAE;YACV,MAAM,EAAC,wBAAwB,EAAC,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACnE,OAAO,wBAAwB,EAAE,CAAC;QACpC,CAAC,CAAA,CAAC,CAAC;IACL,MAAM,iBAAiB,EAAE,CAAC;IAE1B,MAAM,QAAQ,GACZ,YAAY,CAAC,QAAQ;QACrB,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAA,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC9D,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC","sourcesContent":["import {\n FileStorePurposes,\n LinkedFileStorage,\n} from '@_linked/core/utils/LinkedFileStorage';\nimport type {IFileStore} from '@_linked/core/interfaces/IFileStore';\n\nexport interface ResolveAppAssetsStoreDependencies {\n /**\n * Loads the app's storage bootstrap file. Importing it is what registers the\n * stores on `LinkedFileStorage`; the module's own exports are not inspected.\n */\n loadStorageConfig?: () => Promise<unknown>;\n /** Injection point for tests. Defaults to `LinkedFileStorage.getStore`. */\n getStore?: (purpose: string) => IFileStore;\n}\n\n/**\n * Resolve the store that release artifacts are published to.\n *\n * Apps that dedicate a CDN bucket to bundles configure\n * `LinkedFileStorage.setStore(FileStorePurposes.appAssets, …)`. Apps with a\n * single store configure only a default store and `getStore` falls back to it\n * — that is a supported setup, not an error, so there is no check for a\n * dedicated store here.\n */\nexport const resolveAppAssetsStore = async (\n dependencies: ResolveAppAssetsStoreDependencies = {},\n): Promise<IFileStore> => {\n const loadStorageConfig =\n dependencies.loadStorageConfig ||\n (async () => {\n const {loadBackendStorageConfig} = await import('../lifecycle.js');\n return loadBackendStorageConfig();\n });\n await loadStorageConfig();\n\n const getStore =\n dependencies.getStore ||\n ((purpose: string) => LinkedFileStorage.getStore(purpose));\n return getStore(FileStorePurposes.appAssets);\n};\n\n/** `accessURL` values are compared ignoring a trailing slash. */\nexport const normalizeAccessURL = (accessURL: string): string =>\n (accessURL || '').trim().replace(/\\/+$/, '');\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-backend.js","sourceRoot":"","sources":["../../../src/app-release/build-backend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build-backend.js","sourceRoot":"","sources":["../../../src/app-release/build-backend.ts"],"names":[],"mappings":"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","sourcesContent":["import {builtinModules} from 'module';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/**\n * The backend entry points a compiled app is started from.\n *\n * `serve-app` requires all three on disk and `startServer` imports `lib/App.js`\n * and `lib/routes.js` by those exact paths, so the names are a contract, not a\n * convention.\n */\nconst BACKEND_ENTRIES: Record<string, string[]> = {\n backend: ['src/backend.ts', 'src/backend.tsx'],\n App: ['src/App.tsx', 'src/App.ts'],\n routes: ['src/routes.tsx', 'src/routes.ts'],\n};\n\n/**\n * Vite's default server conditions minus the `development|production` token.\n *\n * See the note at the `resolve` option below: dropping the token is what stops\n * a workspace package resolving to its TypeScript source.\n */\nconst SERVER_CONDITIONS = ['module', 'node'];\n\n/** Both spellings, because a backend may use either. */\nconst NODE_BUILTINS = [\n ...builtinModules,\n ...builtinModules.map((name) => `node:${name}`),\n];\n\nexport const resolveBackendEntries = (\n appRoot: string,\n exists: (p: string) => boolean = fs.existsSync\n): Record<string, string> => {\n const entries: Record<string, string> = {};\n for (const [name, candidates] of Object.entries(BACKEND_ENTRIES)) {\n const found = candidates.find((candidate) =>\n exists(path.join(appRoot, candidate))\n );\n if (found) {\n entries[name] = path.join(appRoot, found);\n }\n }\n return entries;\n};\n\n/**\n * Workspace package names to list as `ssr.external`.\n *\n * Vite will not externalise these on its own, and the reason is worth\n * recording because it is entirely non-obvious. `node_modules/@_linked/core`\n * is a symlink into `packages/core`; Vite resolves package data with\n * `preserveSymlinks: false`, so the resolved id realpaths *out* of\n * `node_modules`; and Vite refuses to externalise anything that does not look\n * like it lives there:\n *\n * if (!configuredAsExternal && !isInNodeModules(resolved.id)) return false;\n *\n * So every workspace package got compiled into `lib/`. That is not merely\n * wasteful — `linked.backend.storage.js` is loaded from the APP ROOT by a raw\n * Node `import()` and resolves `@_linked/core` through node_modules, so the\n * storage config configured one copy of `LinkedStorage` while the compiled\n * backend queried another. `LinkedStorage`'s routing state is a per-copy\n * static, so the app's single-instance guard refuses to boot. The old `tsc`\n * build never hit this: it emitted bare specifiers and Node converged on one\n * copy. Naming the packages here restores that.\n *\n * `configuredAsExternal` is the one thing that overrides the symlink rule, and\n * it is keyed on exact package names — no regexes.\n */\nexport const workspacePackagesToExternalize = async (\n appRoot: string,\n discover: (\n globs: string[],\n cwd: string\n ) => Promise<{name: string}[]> = async (globs, cwd) => {\n const {discoverWorkspaces} = await import('../vite-config.js');\n return discoverWorkspaces(globs, cwd);\n }\n): Promise<string[]> => {\n const workspaces = await discover([], appRoot);\n return [...new Set(workspaces.map((w) => w.name))].sort();\n};\n\n/**\n * A relative import from `lib/` into `packages/` means a workspace package was\n * compiled in after all.\n *\n * Worth failing the build over rather than leaving to be discovered: the\n * output is perfectly valid JavaScript, and the symptom is the app refusing to\n * boot with a message about storage routing that points nowhere near here.\n */\nexport const findInlinedWorkspaceImports = (source: string): string[] => {\n // Both static `from \"…\"` and dynamic `import(\"…\")`: a lazily imported page\n // can drag a workspace package in on its own, and only the second form\n // appears in the output for it.\n const matches = source.matchAll(\n /(?:from|import)\\s*\\(?\\s*[\"'](\\.[^\"']*\\/packages\\/[^\"']+)[\"']/g\n );\n return [...new Set([...matches].map((m) => m[1]))].sort();\n};\n\nexport const assertNoInlinedWorkspaces = async (\n appRoot: string,\n readFile: (p: string) => Promise<string> = (p) => fs.readFile(p, 'utf8')\n): Promise<void> => {\n // Every entry, not just the backend: `App.js` and `routes.js` reach code the\n // backend never imports, so a package can be inlined through either of them.\n const inlined = new Set<string>();\n for (const name of Object.keys(BACKEND_ENTRIES)) {\n const entryPath = path.join(appRoot, 'lib', `${name}.js`);\n if (!fs.existsSync(entryPath)) continue;\n for (const found of findInlinedWorkspaceImports(await readFile(entryPath))) {\n inlined.add(found);\n }\n }\n if (inlined.size === 0) return;\n\n const named = [...inlined].sort();\n throw new Error(\n 'The compiled backend inlined workspace packages instead of importing ' +\n 'them: ' +\n named.slice(0, 3).join(', ') +\n (named.length > 3 ? `, and ${named.length - 3} more` : '') +\n '. Each one is a second copy of that package, and a second copy of ' +\n '@_linked/core splits LinkedStorage\\'s routing state from the one the ' +\n 'storage config configures. Check that the package is discoverable as a ' +\n 'workspace, so it can be named in ssr.external.'\n );\n};\n\n/**\n * Turn Rollup's unresolved-import error into one that names the actual cause.\n *\n * Externalizing a workspace package means the build now resolves it through\n * its published `exports` — its `lib/`, not its `src/`. A package whose `lib/`\n * is stale therefore fails here, on a file that plainly exists in source.\n * Rollup's own message (\"failed to resolve import X\") sends you looking at the\n * import, which is fine.\n */\nexport const explainUnresolvedWorkspaceImport = (\n message: string,\n externalWorkspaces: string[]\n): string | null => {\n const match = message.match(/failed to resolve import \"([^\"]+)\"/i);\n if (!match) return null;\n const specifier = match[1];\n const pkg = externalWorkspaces.find(\n (name) => specifier === name || specifier.startsWith(`${name}/`)\n );\n if (!pkg) return null;\n return (\n `${message}\\n\\n` +\n `\"${pkg}\" is a workspace package, so a release build resolves it through its ` +\n `published exports — its lib/, not its src/. If this file exists in ` +\n `${pkg}/src but not in its build output, that package's lib/ is stale. ` +\n `Build it first (\\`linked build\\` in the package, or \\`linked build-workspace\\`) ` +\n `and run build-app again.`\n );\n};\n\n/**\n * Strip the client build's `manualChunks` from the SSR output options.\n *\n * Rollup refuses `manualChunks` together with `preserveModules`, and passing\n * `undefined` in the inline config does not remove it — Vite's config merge\n * keeps the app's value. So it is cleared in the output hook instead, after\n * the merge. Chunk grouping is a client concern; the backend wants one output\n * file per source file.\n */\nconst dropManualChunks = () => ({\n name: 'linked:backend-no-manual-chunks',\n enforce: 'post' as const,\n outputOptions(options: Record<string, unknown>) {\n if (!options.manualChunks) return null;\n const {manualChunks: _dropped, ...rest} = options;\n return rest;\n },\n});\n\n/**\n * Compile the app's backend to `lib/`.\n *\n * This runs Vite in SSR mode against the app's own `vite.config`, which is the\n * point: `linked start` already loads `src/backend.ts`, `src/App.tsx` and\n * `src/routes.tsx` through `vite.ssrLoadModule`, so a production build that\n * used anything else was resolving the same source differently from dev. The\n * workspace resolver, the decorator transform and extensionless relative\n * imports all come along for free.\n *\n * `preserveModules` keeps `src/`'s file layout in `lib/`, so the entry paths\n * stay where `serve-app` and `startServer` look for them and lazily imported\n * pages keep their own files. `manualChunks` is cleared because Rollup refuses\n * to run it alongside `preserveModules` — and it is a client-side concern\n * anyway.\n *\n * Workspace packages are named as `ssr.external` explicitly; see\n * `workspacePackagesToExternalize` for why Vite does not do it on its own.\n * Node's built-ins are listed by hand for a related reason: Vite externalises\n * them for SSR only when it recognises the specifier, and a bare `crypto` —\n * which a backend written for Node may perfectly well import — resolved\n * instead to the abandoned `crypto` shim package sitting in node_modules, and\n * failed the build.\n *\n * `copyPublicDir` is off because `public/` is the client build's output, not\n * the backend's. Left on, it copied 38MB of already-built bundles into `lib/`.\n */\nexport const buildBackendWithVite = async (\n options: {appRoot?: string} = {},\n dependencies: {viteBuild?: (config: any) => Promise<unknown>} = {}\n): Promise<void> => {\n const appRoot = options.appRoot || process.cwd();\n const entries = resolveBackendEntries(appRoot);\n\n if (!entries.backend) {\n throw new Error(\n 'No backend entry found: expected src/backend.ts in ' + appRoot\n );\n }\n\n const viteBuild =\n dependencies.viteBuild ||\n (async (config: any) => {\n const {build} = await import('vite');\n return build(config);\n });\n\n const externalWorkspaces = await workspacePackagesToExternalize(appRoot);\n\n try {\n await viteBuild({\n root: appRoot,\n mode: 'production',\n isProduction: true,\n // The client build sets `base` to the release URL. The backend emits no\n // asset URLs of its own, so it must not inherit one.\n base: '/',\n // Never resolve a `development` export condition in a release build.\n //\n // The workspace-source convention is\n // \"development\": \"./src/*.ts\", \"import\": \"./lib/esm/*.js\"\n // and Vite expands its `development|production` token from NODE_ENV —\n // which during a release build is whatever the app's `.env` says,\n // routinely `development`. The package then resolves to TypeScript, which\n // cannot be externalised because Node could not load it, so it is\n // compiled in regardless of what `ssr.external` says.\n //\n // Dropping the token (rather than pinning it to `production`) leaves\n // `import` — which Vite always appends last — to win. Same treatment\n // `createViteConfig` already applies to a standalone install, for the\n // mirror-image reason.\n //\n // All three lists have to say it: `ssr.resolve.conditions` does not\n // inherit from `resolve.conditions` here, and `externalConditions`\n // governs the packages that end up external.\n resolve: {conditions: SERVER_CONDITIONS},\n ssr: {\n // Merged with the app's own ssr.external rather than replacing it.\n external: externalWorkspaces,\n resolve: {\n conditions: SERVER_CONDITIONS,\n externalConditions: SERVER_CONDITIONS,\n },\n },\n plugins: [dropManualChunks()],\n build: {\n ssr: true,\n outDir: 'lib',\n emptyOutDir: true,\n copyPublicDir: false,\n manifest: false,\n sourcemap: true,\n rollupOptions: {\n input: entries,\n external: NODE_BUILTINS,\n output: {\n format: 'es',\n preserveModules: true,\n preserveModulesRoot: path.join(appRoot, 'src'),\n entryFileNames: '[name].js',\n chunkFileNames: '[name].js',\n },\n },\n },\n });\n } catch (err) {\n const explained = explainUnresolvedWorkspaceImport(\n err instanceof Error ? err.message : String(err),\n externalWorkspaces\n );\n if (!explained) throw err;\n throw new Error(explained);\n }\n\n await assertNoInlinedWorkspaces(appRoot);\n};\n\n/**\n * Copy `src`'s CSS next to the compiled backend.\n *\n * The server reads stylesheets like `lib/css/theme.css` off disk by path, so\n * they have to exist as files whether or not any module imported them.\n */\nexport const copyBackendStylesheets = async (\n appRoot: string,\n listCssFiles: (dir: string) => Promise<string[]>\n): Promise<number> => {\n const sourceFolder = path.join(appRoot, 'src');\n const targetFolder = path.join(appRoot, 'lib');\n const cssFiles = await listCssFiles(sourceFolder);\n await Promise.all(\n cssFiles.map((file) => {\n const targetFile = file.replace(sourceFolder, targetFolder);\n fs.mkdirpSync(path.dirname(targetFile));\n return fs.copyFile(file, targetFile);\n })\n );\n return cssFiles.length;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-release-manifest.js","sourceRoot":"","sources":["../../../src/app-release/create-release-manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-release-manifest.js","sourceRoot":"","sources":["../../../src/app-release/create-release-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport {execFileSync} from 'child_process';\nimport fs from 'fs';\nimport path from 'path';\nimport {\n joinObjectKey,\n normalizeReleasePath,\n resolveExistingPathWithinRoot,\n} from './paths.js';\nimport {resolveDeclaredStaticAssets} from './static-assets.js';\nimport type {\n AppBuildTarget,\n LinkedAppReleaseFile,\n LinkedAppReleaseManifest,\n} from './types.js';\n\ninterface ViteManifestEntry {\n file: string;\n css?: string[];\n assets?: string[];\n imports?: string[];\n dynamicImports?: string[];\n}\n\ntype ViteManifest = Record<string, ViteManifestEntry>;\n\nexport interface CreateReleaseManifestOptions {\n appRoot: string;\n environmentNames: string[];\n target: AppBuildTarget;\n /**\n * `accessURL` of the store this release will be published to. Omitted (or\n * null) for a Capacitor build, which produces a local, non-publishable\n * manifest and never touches a file store.\n */\n accessURL?: string | null;\n staticAssets?: string[];\n /** Base key releases are nested under. Defaults to `releases`. */\n releasePrefix?: string;\n builtAt?: string;\n sourceRevision?: string;\n /** Allow a revision derived from a working tree with uncommitted changes. */\n allowDirty?: boolean;\n /**\n * Public URL every asset of this release is served from — the release\n * prefix resolved against the store's `accessURL`, and the value the client\n * bundle was built with as Vite's `base`. Empty for a Capacitor build.\n */\n baseURL?: string;\n}\n\nconst MIME_TYPES: Record<string, string> = {\n '.css': 'text/css; charset=utf-8',\n '.gif': 'image/gif',\n '.html': 'text/html; charset=utf-8',\n '.ico': 'image/x-icon',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.map': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n '.webp': 'image/webp',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n};\n\nexport const DEFAULT_RELEASE_PREFIX = 'releases';\nexport const MANIFEST_FILE_NAME = 'linked-release.json';\nexport const MANIFEST_SOURCE_PATH = `public/bundles/${MANIFEST_FILE_NAME}`;\nexport const MANIFEST_CONTENT_TYPE = 'application/json; charset=utf-8';\n\n/**\n * Cache-Control rule, decided by where a file came from rather than by what it\n * is called.\n *\n * Files listed in the Vite manifest are content-hashed by construction — Vite\n * emitted the name, so the bytes behind that key can never change and the\n * object is immutable for a year. Everything else (declared static assets, the\n * release manifest) is revalidated after a minute, so a re-published release is\n * picked up quickly. Guessing \"is this hashed?\" from the filename was tried and\n * removed: `og-image-1200x630.png`, `sw-v20260101.js` and `icon-FacebookRound.svg`\n * all read as hashed, and a year of immutable caching on those cannot be undone\n * without renaming the file.\n */\nexport const IMMUTABLE_CACHE_CONTROL = 'public, max-age=31536000, immutable';\nexport const ENTRY_CACHE_CONTROL = 'public, max-age=60, must-revalidate';\n\n/** Where a release file came from; this is what decides its cache policy. */\nexport type ReleaseFileOrigin = 'vite-bundle' | 'static-asset';\n\nconst getContentType = (filePath: string): string =>\n MIME_TYPES[path.extname(filePath).toLowerCase()] || 'application/octet-stream';\n\nexport const getCacheControl = (origin: ReleaseFileOrigin): string =>\n origin === 'vite-bundle' ? IMMUTABLE_CACHE_CONTROL : ENTRY_CACHE_CONTROL;\n\n/** A revision has to be safe to embed in an object key and a URL. */\nconst SAFE_REVISION = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;\n\nconst runGit = (appRoot: string, args: string[]): string =>\n execFileSync('git', args, {\n cwd: appRoot,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n\nexport interface ResolveSourceRevisionOptions {\n appRoot: string;\n /** `--revision`, or a caller-supplied value. Used verbatim when given. */\n revision?: string;\n /** `--allow-dirty`: build from a dirty tree, tagging the revision `-dirty`. */\n allowDirty?: boolean;\n env?: NodeJS.ProcessEnv;\n}\n\n/**\n * Determine the revision that identifies this release.\n *\n * An explicit `--revision`, then `LINKED_RELEASE_REVISION`, then `GITHUB_SHA`\n * win over Git, so a release can be built from an exported tarball or a CI\n * checkout that is not a working repository. Falling back to `git rev-parse`\n * requires a clean tree: two builds of the same uncommitted work would\n * otherwise share a release ID and a prefix, silently overwriting each other\n * while files removed in between linger under the prefix.\n */\nexport const resolveSourceRevision = ({\n appRoot,\n revision,\n allowDirty,\n env = process.env,\n}: ResolveSourceRevisionOptions): string => {\n const explicit = (\n revision ||\n env.LINKED_RELEASE_REVISION ||\n env.GITHUB_SHA ||\n ''\n ).trim();\n if (explicit) {\n if (!SAFE_REVISION.test(explicit)) {\n throw new Error(\n `Invalid release revision \"${explicit}\". Use letters, digits, \".\", \"-\" or \"_\".`,\n );\n }\n return explicit;\n }\n\n let head: string;\n try {\n head = runGit(appRoot, ['rev-parse', '--short=12', 'HEAD']).trim();\n } catch {\n throw new Error(\n 'Cannot determine the Git revision for this release. Build from a Git checkout, ' +\n 'or pass --revision <sha> (or set LINKED_RELEASE_REVISION / GITHUB_SHA).',\n );\n }\n\n let dirty = false;\n try {\n dirty = runGit(appRoot, ['status', '--porcelain']).trim().length > 0;\n } catch {\n // `rev-parse` worked, so this is a repository; treat an unreadable status\n // as clean rather than blocking the build on a Git quirk.\n }\n if (!dirty) return head;\n if (!allowDirty) {\n throw new Error(\n `The working tree has uncommitted changes, so release ${head} would not identify ` +\n 'what was built: a second build of the same edits reuses the prefix and overwrites it. ' +\n 'Commit or stash the changes, pass --allow-dirty to publish as ' +\n `\"${head}-dirty\", or pass --revision <sha>.`,\n );\n }\n return `${head}-dirty`;\n};\n\nconst collectViteOutputPaths = (manifest: ViteManifest): string[] => {\n const files = new Set<string>();\n\n for (const [entryName, entry] of Object.entries(manifest)) {\n if (!entry || typeof entry.file !== 'string') {\n throw new Error(`Invalid Vite manifest entry: ${entryName}`);\n }\n\n files.add(joinObjectKey('public/bundles', entry.file));\n for (const relativePath of [...(entry.css || []), ...(entry.assets || [])]) {\n files.add(joinObjectKey('public/bundles', relativePath));\n }\n\n for (const importedEntry of [\n ...(entry.imports || []),\n ...(entry.dynamicImports || []),\n ]) {\n if (!manifest[importedEntry]) {\n throw new Error(\n `Vite manifest entry ${entryName} references missing import ${importedEntry}`,\n );\n }\n }\n }\n\n return [...files];\n};\n\n/**\n * Build the key prefix for one release. Every object of a release lives under\n * it, so publishing a new release cannot overwrite the previous one and a\n * rollback is a matter of pointing at the older prefix.\n */\nexport const buildReleasePrefix = (\n releaseId: string,\n basePrefix: string = DEFAULT_RELEASE_PREFIX,\n): string => joinObjectKey(basePrefix, releaseId);\n\nexport const releaseObjectKey = (\n releasePrefix: string,\n sourcePath: string,\n): string => joinObjectKey(releasePrefix, sourcePath);\n\n/** Directory `vite build` writes the client bundle to. See the README. */\nexport const VITE_OUTPUT_DIR = 'public/bundles';\n\n/**\n * Public URL the client bundle of a release is served from. Object keys are\n * `<releasePrefix>/public/bundles/…` under the store's `accessURL`, and this is\n * the value the build passes to Vite as `base`, so the root-absolute URLs the\n * bundle emits for its own chunks and assets resolve under the release prefix\n * without any server rewrite.\n */\nexport const releaseBaseURL = (\n accessURL: string,\n releasePrefix: string,\n): string =>\n `${releaseStaticAccessURL(accessURL, releasePrefix)}/${VITE_OUTPUT_DIR}/`;\n\n/**\n * The release's root URL: `accessURL` plus the release prefix, without the\n * bundle directory. `@_linked/server` builds the HTML entry tags as\n * `${STATIC_ACCESS_URL}/public/bundles/<file>`, so pointing `STATIC_ACCESS_URL`\n * at this value is what makes a running app serve one particular release —\n * a value to deploy, not server code to write or a rewrite rule to configure.\n */\nexport const releaseStaticAccessURL = (\n accessURL: string,\n releasePrefix: string,\n): string =>\n `${(accessURL || '').trim().replace(/\\/+$/, '')}/${releasePrefix}`;\n\nexport interface ReleaseIdentity {\n appName: string;\n appVersion: string;\n sourceRevision: string;\n releaseId: string;\n releasePrefix: string;\n}\n\n/**\n * Work out the release ID and prefix before anything is built. The client\n * bundle has to be built with the release prefix as its `base`, so the prefix\n * cannot wait until the manifest is written.\n */\nexport const resolveReleaseIdentity = (options: {\n appRoot: string;\n releasePrefix?: string;\n sourceRevision?: string;\n allowDirty?: boolean;\n env?: NodeJS.ProcessEnv;\n}): ReleaseIdentity => {\n const packageJson = JSON.parse(\n fs.readFileSync(path.join(options.appRoot, 'package.json'), 'utf8'),\n );\n const sourceRevision = resolveSourceRevision({\n appRoot: options.appRoot,\n revision: options.sourceRevision,\n allowDirty: options.allowDirty,\n env: options.env,\n });\n const releaseId = `${packageJson.version}-${sourceRevision}`;\n return {\n appName: packageJson.name,\n appVersion: packageJson.version,\n sourceRevision,\n releaseId,\n releasePrefix: buildReleasePrefix(releaseId, options.releasePrefix),\n };\n};\n\nconst describeReleaseFile = (\n appRoot: string,\n releasePrefix: string,\n sourcePath: string,\n origin: ReleaseFileOrigin,\n): LinkedAppReleaseFile => {\n const normalizedSourcePath = normalizeReleasePath(sourcePath, 'source path');\n const absolutePath = resolveExistingPathWithinRoot(appRoot, normalizedSourcePath);\n const content = fs.readFileSync(absolutePath);\n\n return {\n sourcePath: normalizedSourcePath,\n objectKey: releaseObjectKey(releasePrefix, normalizedSourcePath),\n sha256: crypto.createHash('sha256').update(content).digest('hex'),\n size: content.byteLength,\n contentType: getContentType(normalizedSourcePath),\n cacheControl: getCacheControl(origin),\n };\n};\n\nexport const createReleaseManifest = (\n options: CreateReleaseManifestOptions,\n): LinkedAppReleaseManifest => {\n const identity = resolveReleaseIdentity({\n appRoot: options.appRoot,\n releasePrefix: options.releasePrefix,\n sourceRevision: options.sourceRevision,\n allowDirty: options.allowDirty,\n });\n const {releasePrefix} = identity;\n\n // A Capacitor build ships its assets inside the native app, so it produces a\n // manifest for local inspection only and is never uploaded. That is why it\n // needs no destination and is marked unpublishable.\n const publishable = options.target === 'web';\n if (publishable && options.accessURL === undefined) {\n throw new Error(\n 'A web release manifest requires the accessURL of the store it will be published to',\n );\n }\n\n // Origin decides the cache policy: Vite named these files after their own\n // content, so they are immutable; declared static assets keep their name\n // across releases and must be revalidated.\n const origins = new Map<string, ReleaseFileOrigin>();\n if (options.target === 'web') {\n const viteManifestPath = path.join(\n options.appRoot,\n `${VITE_OUTPUT_DIR}/.vite/manifest.json`,\n );\n const viteManifest = JSON.parse(\n fs.readFileSync(viteManifestPath, 'utf8'),\n ) as ViteManifest;\n for (const sourcePath of collectViteOutputPaths(viteManifest)) {\n origins.set(sourcePath, 'vite-bundle');\n }\n }\n for (const sourcePath of resolveDeclaredStaticAssets(\n options.appRoot,\n options.staticAssets,\n )) {\n if (!origins.has(sourcePath)) origins.set(sourcePath, 'static-asset');\n }\n\n const files = [...origins.entries()]\n .map(([sourcePath, origin]) =>\n describeReleaseFile(options.appRoot, releasePrefix, sourcePath, origin),\n )\n .sort((a, b) => a.objectKey.localeCompare(b.objectKey));\n\n return {\n schemaVersion: 1,\n appName: identity.appName,\n appVersion: identity.appVersion,\n releaseId: identity.releaseId,\n target: options.target,\n publishable,\n builtAt: options.builtAt || new Date().toISOString(),\n environmentNames: [...options.environmentNames],\n destination: {\n accessURL: options.accessURL || '',\n releasePrefix,\n baseURL:\n options.baseURL ??\n (options.accessURL\n ? releaseBaseURL(options.accessURL, releasePrefix)\n : ''),\n },\n files,\n };\n};\n\nexport const serializeReleaseManifest = (\n manifest: LinkedAppReleaseManifest,\n): string => `${JSON.stringify(manifest, null, 2)}\\n`;\n\nexport const writeReleaseManifest = (\n appRoot: string,\n manifest: LinkedAppReleaseManifest,\n): string => {\n const outputPath = path.join(appRoot, MANIFEST_SOURCE_PATH);\n fs.writeFileSync(outputPath, serializeReleaseManifest(manifest));\n return outputPath;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/app-release/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAa,EACb,QAAgB,cAAc,EACtB,EAAE;IACV,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sBAAsB,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2CAA2C,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,QAAkB,EAAU,EAAE;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,OAAe,EACf,YAAoB,EACZ,EAAE;IACV,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAEtE,IACE,cAAc,KAAK,IAAI;QACvB,cAAc,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,aAAqB,EACrB,SAAiB,EACT,EAAE;IACV,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,GAAG,iBAAiB,IAAI,mBAAmB,EAAE,CAAC;AACvD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/app-release/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAa,EACb,QAAgB,cAAc,EACtB,EAAE;IACV,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sBAAsB,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2CAA2C,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,QAAkB,EAAU,EAAE;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,OAAe,EACf,YAAoB,EACZ,EAAE;IACV,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAEtE,IACE,cAAc,KAAK,IAAI;QACvB,cAAc,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,aAAqB,EACrB,SAAiB,EACT,EAAE;IACV,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,GAAG,iBAAiB,IAAI,mBAAmB,EAAE,CAAC;AACvD,CAAC,CAAC","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nconst WINDOWS_ABSOLUTE_PATH = /^[a-zA-Z]:[\\\\/]/;\n\nexport const normalizeReleasePath = (\n value: string,\n label: string = 'release path',\n): string => {\n const slashPath = value.replace(/\\\\/g, '/').trim();\n\n if (!slashPath || slashPath === '.') {\n throw new Error(`${label} must not be empty`);\n }\n\n if (path.posix.isAbsolute(slashPath) || WINDOWS_ABSOLUTE_PATH.test(value)) {\n throw new Error(`${label} must be relative: ${value}`);\n }\n\n const normalized = path.posix.normalize(slashPath).replace(/^\\.\\//, '');\n if (normalized === '..' || normalized.startsWith('../')) {\n throw new Error(`${label} must stay inside the application root: ${value}`);\n }\n\n return normalized;\n};\n\nexport const joinObjectKey = (...segments: string[]): string => {\n if (segments.length === 0) {\n throw new Error('object key must not be empty');\n }\n\n return normalizeReleasePath(segments.join('/'), 'object key');\n};\n\nexport const resolveExistingPathWithinRoot = (\n appRoot: string,\n relativePath: string,\n): string => {\n const normalized = normalizeReleasePath(relativePath, 'source path');\n const rootRealPath = fs.realpathSync(appRoot);\n const candidateRealPath = fs.realpathSync(path.resolve(rootRealPath, normalized));\n const relativeToRoot = path.relative(rootRealPath, candidateRealPath);\n\n if (\n relativeToRoot === '..' ||\n relativeToRoot.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relativeToRoot)\n ) {\n throw new Error(`source path escapes the application root: ${relativePath}`);\n }\n\n return candidateRealPath;\n};\n\nexport const joinStaticAssetUrl = (\n publicBaseUrl: string,\n assetPath: string,\n): string => {\n const normalizedAssetPath = normalizeReleasePath(assetPath, 'asset path');\n const normalizedBaseUrl = publicBaseUrl.trim().replace(/\\/+$/, '');\n\n if (!normalizedBaseUrl) {\n throw new Error('public base URL must not be empty');\n }\n\n return `${normalizedBaseUrl}/${normalizedAssetPath}`;\n};\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../src/app-release/publisher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../src/app-release/publisher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAC,oBAAoB,EAAE,6BAA6B,EAAC,MAAM,YAAY,CAAC;AA+B/E;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAAG,CACxB,aAAqB,EACrB,IAA0B,EACpB,EAAE;;IACR,MAAM,UAAU,GAAG,oBAAoB,CACrC,MAAM,CAAC,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE,CAAC,EAC7B,aAAa,CACd,CAAC;IACF,MAAM,SAAS,GAAG,oBAAoB,CACpC,MAAM,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC,EAC5B,YAAY,CACb,CAAC;IACF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,+DAA+D;YAC7D,IAAI,IAAI,CAAC,SAAS,gBAAgB,QAAQ,2BAA2B;YACrE,+CAA+C,CAClD,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAAe,EACf,YAAY,GAAG,oBAAoB,EACZ,EAAE;;IACzB,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CACV,CAAC;IAE9B,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,CAAC,aAAa,EAAE,CACjE,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,CAAA,MAAA,QAAQ,CAAC,WAAW,0CAAE,aAAa,CAAA,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,aAAa,GAAG,oBAAoB,CACxC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAClC,gBAAgB,CACjB,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,CAAC;AAClC,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,CAC1B,QAAkC,EAClC,KAAiB,EACjB,EAAE;IACF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,2EACE,QAAQ,IAAI,SACd,8CAA8C,MAAM,IAAI,SAAS,GAAG,CACrE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE,CAC7C,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE5D;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CACxB,OAAe,EACf,IAA0B,EAClB,EAAE;IACV,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAkC,EACrB,EAAE;IACf,MAAM,EAAC,YAAY,EAAE,QAAQ,EAAC,GAAG,mBAAmB,CAClD,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,YAAY,CACrB,CAAC;IACF,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,YAAY;QAC1B,iBAAiB,EAAE,gBAAgB,CACjC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAClC,oBAAoB,CACrB;QACD,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACzE,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,YAAY,GAAG,CACnB,KAAiB,EACjB,SAAiB,EACjB,QAAwC,EACS,EAAE;IACnD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,aAAa,CAAC;IAE/D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,uDAAuD,SAAS,EAAE,CACnE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAA8B,EACN,EAAE;;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;;QAC3D,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,IAAI,uBAAuB;YAAE,OAAO;QACpC,uBAAuB,GAAG,IAAI,CAAC;QAC/B,MAAA,OAAO,CAAC,SAAS,wDACf,+CAA+C,MAAM,qBAAqB;YACxE,gFAAgF,CACnF,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CACb,SAAiB,EACjB,OAAe,EACf,WAAmB,EACnB,YAAoB,EACpB,MAAc,EACd,EAAE;QACF,4EAA4E;QAC5E,2EAA2E;QAC3E,oEAAoE;QACpE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE;YACjE,QAAQ,EAAE,WAAW;YACrB,YAAY;YACZ,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;QACH,yEAAyE;QACzE,0EAA0E;QAC1E,sEAAsE;QACtE,sCAAsC;QACtC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CACb,qEAAqE;gBACnE,kCAAkC,SAAS,WAAW,SAAS,KAAK;gBACpE,iDAAiD,CACpD,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE;YAC3D,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,MAAM;SACP,CAAC,CAAC;QACH,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9B,cAAc,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,cAAc,CAAC,SAAS,EAAE,gDAAgD,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB;;;;;OAKG;IACH,MAAM,eAAe,GAAG,CACtB,KAAc,EACd,IAAY,EACZ,SAAiB,EACV,EAAE;QACT,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,yCAAyC,IAAI,QAAQ,SAAS,IAAI;YAChE,UAAU,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,gBAAgB,MAAM,KAAK,CAAC,OAAO,IAAI;YAC5E,GAAG,gBAAgB,OAAO,YAAY,uCAAuC;YAC7E,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,mDAAmD;YACrF,6EAA6E;YAC7E,gFAAgF,CACnF,CAAC;QACD,OAAqC,CAAC,KAAK,GAAG,KAAK,CAAC;QACrD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;YACzB,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,gBAAgB,KAAK,CAAC,KAAK,EAAE;YACjD,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,6BAA6B,CAChD,OAAO,CAAC,OAAO,EACf,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,MAAM,CACV,IAAI,CAAC,SAAS,EACd,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAC7B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,CACZ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC;QACD,gBAAgB,IAAI,CAAC,CAAC;QACtB,MAAA,OAAO,CAAC,UAAU,wDAAG;YACnB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,2BAA2B;IAC3B,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,MAAM,CACV,IAAI,CAAC,iBAAiB,EACtB,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,CAAC,YAAY,CAAC,CACzB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/E,CAAC;IACD,gBAAgB,IAAI,CAAC,CAAC;IACtB,MAAA,OAAO,CAAC,UAAU,wDAAG;QACnB,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,IAAI,CAAC,iBAAiB;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,YAAY;QAC3B,aAAa,EAAE,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU;QACxD,MAAM,EAAE,KAAK;QACb,UAAU;KACX,CAAC;AACJ,CAAC,CAAA,CAAC","sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport type {IFileStore} from '@_linked/core/interfaces/IFileStore';\nimport {normalizeAccessURL} from './app-assets-store.js';\nimport {\n MANIFEST_CONTENT_TYPE,\n MANIFEST_SOURCE_PATH,\n ENTRY_CACHE_CONTROL,\n releaseObjectKey,\n} from './create-release-manifest.js';\nimport {normalizeReleasePath, resolveExistingPathWithinRoot} from './paths.js';\nimport type {\n LinkedAppReleaseFile,\n LinkedAppReleaseManifest,\n PublishPlan,\n PublishResult,\n} from './types.js';\n\nexport interface PlanReleasePublishOptions {\n appRoot: string;\n manifestPath?: string;\n store: IFileStore;\n}\n\nexport interface LoadedReleaseManifest {\n absolutePath: string;\n manifest: LinkedAppReleaseManifest;\n}\n\nexport interface PublishReleaseOptions extends PlanReleasePublishOptions {\n yes?: boolean;\n onProgress?: (progress: PublishProgress) => void;\n onWarning?: (message: string) => void;\n}\n\nexport interface PublishProgress {\n completed: number;\n total: number;\n objectKey: string;\n}\n\n/**\n * Every object of a release must land under that release's own prefix.\n *\n * The manifest is a plain file on disk: a hand-edited or foreign one can name\n * any `objectKey` it likes, and nothing else catches it — the `accessURL` check\n * only proves the store is the right store, and the stored-location check only\n * proves the store kept the key it was handed. So the key is not merely checked\n * for shape, it is recomputed: it has to be exactly what this release prefix and\n * this source path produce, or a release could overwrite a *different* release.\n */\nconst validateObjectKey = (\n releasePrefix: string,\n file: LinkedAppReleaseFile,\n): void => {\n const sourcePath = normalizeReleasePath(\n String(file.sourcePath ?? ''),\n 'source path',\n );\n const objectKey = normalizeReleasePath(\n String(file.objectKey ?? ''),\n 'object key',\n );\n const expected = releaseObjectKey(releasePrefix, sourcePath);\n if (objectKey !== expected) {\n throw new Error(\n `Release manifest object key is not under the release prefix: ` +\n `\"${file.objectKey}\" (expected \"${expected}\"). Rebuild the release; ` +\n 'a manifest may only upload to its own prefix.',\n );\n }\n};\n\nexport const loadReleaseManifest = (\n appRoot: string,\n manifestPath = MANIFEST_SOURCE_PATH,\n): LoadedReleaseManifest => {\n const absolutePath = resolveExistingPathWithinRoot(appRoot, manifestPath);\n const manifest = JSON.parse(\n fs.readFileSync(absolutePath, 'utf8'),\n ) as LinkedAppReleaseManifest;\n\n if (manifest.schemaVersion !== 1) {\n throw new Error(\n `Unsupported release manifest schema: ${manifest.schemaVersion}`,\n );\n }\n if (manifest.target !== 'web' || manifest.publishable !== true) {\n throw new Error('Only publishable web release manifests may be uploaded');\n }\n if (!Array.isArray(manifest.files) || manifest.files.length === 0) {\n throw new Error('Release manifest contains no files');\n }\n if (!manifest.destination?.releasePrefix) {\n throw new Error('Release manifest has no release prefix');\n }\n const releasePrefix = normalizeReleasePath(\n manifest.destination.releasePrefix,\n 'release prefix',\n );\n for (const file of manifest.files) {\n validateObjectKey(releasePrefix, file);\n }\n\n return {absolutePath, manifest};\n};\n\n/**\n * The manifest records the `accessURL` of the store it was built for. If the\n * configured store now writes somewhere else, the release is not the one that\n * was built and publishing stops. Trailing slashes are not significant.\n */\nconst validateDestination = (\n manifest: LinkedAppReleaseManifest,\n store: IFileStore,\n) => {\n const expected = normalizeAccessURL(manifest.destination.accessURL);\n const actual = normalizeAccessURL(store.accessURL);\n if (expected !== actual) {\n throw new Error(\n `Release destination does not match the manifest (manifest was built for ${\n expected || '(empty)'\n }, the configured appAssets store writes to ${actual || '(empty)'})`,\n );\n }\n};\n\nconst hashBuffer = (content: Buffer): string =>\n crypto.createHash('sha256').update(content).digest('hex');\n\n/**\n * Re-hash the file on disk before uploading. This needs no support from the\n * store and is what actually guarantees the bytes match the manifest.\n */\nconst validateLocalFile = (\n appRoot: string,\n file: LinkedAppReleaseFile,\n): string => {\n // `resolveExistingPathWithinRoot` resolves symlinks, so a source path that\n // points out of the app root through one is refused here too.\n const absolutePath = resolveExistingPathWithinRoot(appRoot, file.sourcePath);\n const content = fs.readFileSync(absolutePath);\n if (content.byteLength !== file.size || hashBuffer(content) !== file.sha256) {\n throw new Error(`Release artifact changed after build: ${file.sourcePath}`);\n }\n return absolutePath;\n};\n\nexport const planReleasePublish = (\n options: PlanReleasePublishOptions,\n): PublishPlan => {\n const {absolutePath, manifest} = loadReleaseManifest(\n options.appRoot,\n options.manifestPath,\n );\n validateDestination(manifest, options.store);\n\n for (const file of manifest.files) {\n validateLocalFile(options.appRoot, file);\n }\n\n return {\n releaseId: manifest.releaseId,\n manifestPath: absolutePath,\n manifestObjectKey: releaseObjectKey(\n manifest.destination.releasePrefix,\n MANIFEST_SOURCE_PATH,\n ),\n destination: manifest.destination,\n files: manifest.files,\n totalBytes: manifest.files.reduce((total, file) => total + file.size, 0),\n };\n};\n\n/**\n * Verify one uploaded object against the hash in the manifest.\n *\n * `statFile` is optional on `IFileStore`, and a store that has it may still\n * report no `sha256` (S3 only returns one when the object carries a checksum).\n * Neither case is a failure: verification is skipped, the key is reported back\n * as unverified, and the caller warns once. An `etag` is deliberately not used\n * as a substitute — it is not a content hash.\n */\nconst verifyUpload = async (\n store: IFileStore,\n objectKey: string,\n expected: {size: number; sha256: string},\n): Promise<'verified' | 'unsupported' | 'no-hash'> => {\n if (typeof store.statFile !== 'function') return 'unsupported';\n\n const stat = await store.statFile(objectKey);\n if (!stat) {\n throw new Error(`Uploaded artifact is missing from the store: ${objectKey}`);\n }\n if (stat.size !== expected.size) {\n throw new Error(\n `Uploaded artifact size does not match the manifest: ${objectKey}`,\n );\n }\n if (!stat.sha256) return 'no-hash';\n if (stat.sha256 !== expected.sha256) {\n throw new Error(`Uploaded artifact verification failed: ${objectKey}`);\n }\n return 'verified';\n};\n\nexport const publishRelease = async (\n options: PublishReleaseOptions,\n): Promise<PublishResult> => {\n const plan = planReleasePublish(options);\n\n if (!options.yes) {\n return {\n releaseId: plan.releaseId,\n uploadedFiles: 0,\n uploadedBytes: 0,\n dryRun: true,\n unverified: [],\n };\n }\n\n const unverified: string[] = [];\n let warnedAboutVerification = false;\n const noteUnverified = (objectKey: string, reason: string) => {\n unverified.push(objectKey);\n if (warnedAboutVerification) return;\n warnedAboutVerification = true;\n options.onWarning?.(\n `Cannot verify uploads against a store hash (${reason}). Files are still ` +\n 'checked against the manifest before upload; the remote copy is not re-checked.',\n );\n };\n\n const upload = async (\n objectKey: string,\n content: Buffer,\n contentType: string,\n cacheControl: string,\n sha256: string,\n ) => {\n // `preventDuplicates: false` is explicit: a release key must be exactly the\n // key in the manifest. `LocalFileStore` otherwise appends a random suffix,\n // which would both break the URL and make verification meaningless.\n const storedURL = await options.store.saveFile(objectKey, content, {\n mimeType: contentType,\n cacheControl,\n preventDuplicates: false,\n });\n // A release key has to survive the round trip verbatim, or the published\n // URLs in the bundle point at nothing. Some stores sanitise or suffix the\n // path they are given; say so plainly instead of failing later with a\n // confusing \"missing from the store\".\n if (typeof storedURL === 'string' && !storedURL.endsWith(objectKey)) {\n throw new Error(\n `The file store did not store the release object under its own key. ` +\n `Expected a location ending in \"${objectKey}\", got \"${storedURL}\". ` +\n 'A release store must keep object keys verbatim.',\n );\n }\n const outcome = await verifyUpload(options.store, objectKey, {\n size: content.byteLength,\n sha256,\n });\n if (outcome === 'unsupported') {\n noteUnverified(objectKey, 'this store does not implement statFile');\n } else if (outcome === 'no-hash') {\n noteUnverified(objectKey, 'the store reports no sha256 for stored objects');\n }\n };\n\n const totalUploads = plan.files.length + 1;\n let completedUploads = 0;\n\n /**\n * A failure halfway through leaves a partial prefix behind, so the message\n * has to say which object failed, where it was going and how much is already\n * there — and that a re-run finishes the job, since keys are deterministic\n * and every object is overwritten with identical bytes.\n */\n const describeFailure = (\n error: unknown,\n what: string,\n objectKey: string,\n ): Error => {\n const cause = error instanceof Error ? error : new Error(String(error));\n const failure = new Error(\n `Release upload failed while uploading ${what} to \"${objectKey}\" ` +\n `(store ${options.store.accessURL || '(no accessURL)'}): ${cause.message}. ` +\n `${completedUploads} of ${totalUploads} objects were already uploaded under ` +\n `\"${plan.destination.releasePrefix}\"; the release manifest was not uploaded, so the ` +\n 'release is incomplete. Re-running publish-app resumes it — object keys are ' +\n 'deterministic and already-uploaded objects are rewritten with identical bytes.',\n );\n (failure as Error & {cause?: unknown}).cause = cause;\n failure.stack = cause.stack\n ? `${failure.message}\\nCaused by: ${cause.stack}`\n : failure.stack;\n return failure;\n };\n\n for (const file of plan.files) {\n const absolutePath = resolveExistingPathWithinRoot(\n options.appRoot,\n file.sourcePath,\n );\n try {\n await upload(\n file.objectKey,\n fs.readFileSync(absolutePath),\n file.contentType,\n file.cacheControl,\n file.sha256,\n );\n } catch (error) {\n throw describeFailure(error, file.sourcePath, file.objectKey);\n }\n completedUploads += 1;\n options.onProgress?.({\n completed: completedUploads,\n total: totalUploads,\n objectKey: file.objectKey,\n });\n }\n\n // The manifest goes last: its presence under the release prefix is what marks\n // the release as complete.\n const manifestBody = fs.readFileSync(plan.manifestPath);\n try {\n await upload(\n plan.manifestObjectKey,\n manifestBody,\n MANIFEST_CONTENT_TYPE,\n ENTRY_CACHE_CONTROL,\n hashBuffer(manifestBody),\n );\n } catch (error) {\n throw describeFailure(error, 'the release manifest', plan.manifestObjectKey);\n }\n completedUploads += 1;\n options.onProgress?.({\n completed: completedUploads,\n total: totalUploads,\n objectKey: plan.manifestObjectKey,\n });\n\n return {\n releaseId: plan.releaseId,\n uploadedFiles: totalUploads,\n uploadedBytes: plan.totalBytes + manifestBody.byteLength,\n dryRun: false,\n unverified,\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-build-target.js","sourceRoot":"","sources":["../../../src/app-release/resolve-build-target.ts"],"names":[],"mappings":"AAOA,4DAA4D;AAC5D,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,MAAM,EACN,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,MACC,EAAE,EAAkB,EAAE;IACnD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,6BAA6B,MAAM,CAAC,MAAM,CAAC,mCAAmC,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,sBAAsB,GAC1B,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC;IAE5D,8DAA8D;IAC9D,2EAA2E;IAC3E,IAAI,MAAM,KAAK,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AACtD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolve-build-target.js","sourceRoot":"","sources":["../../../src/app-release/resolve-build-target.ts"],"names":[],"mappings":"AAOA,4DAA4D;AAC5D,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,MAAM,EACN,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,MACC,EAAE,EAAkB,EAAE;IACnD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,6BAA6B,MAAM,CAAC,MAAM,CAAC,mCAAmC,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,sBAAsB,GAC1B,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC;IAE5D,8DAA8D;IAC9D,2EAA2E;IAC3E,IAAI,MAAM,KAAK,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AACtD,CAAC,CAAC","sourcesContent":["import type {AppBuildTarget} from './types.js';\n\nexport interface ResolveBuildTargetOptions {\n target?: AppBuildTarget;\n appEnv?: string;\n}\n\n/** The only `APP_ENV` value that selects a native build. */\nconst CAPACITOR_APP_ENV = 'capacitor';\n\n/**\n * Resolve the app build target.\n *\n * `APP_ENV` selects the Capacitor target only when it literally says\n * `capacitor`. It used to be read as a boolean — any non-empty value meant\n * \"native\" — which quietly hijacked the far more common `APP_ENV=production`\n * into a near-empty, non-publishable manifest, and then made `--target web`\n * fail outright. Nothing else in this monorepo reads `APP_ENV`, so there is no\n * boolean contract left to preserve; an unrelated value is ignored and the\n * build defaults to web, exactly as it does with `APP_ENV` unset. Pass\n * `--target` to be explicit.\n */\nexport const resolveBuildTarget = ({\n target,\n appEnv = process.env.APP_ENV,\n}: ResolveBuildTargetOptions = {}): AppBuildTarget => {\n if (target !== undefined && target !== 'web' && target !== 'capacitor') {\n throw new Error(\n `Unknown app build target \"${String(target)}\". Expected \"web\" or \"capacitor\".`,\n );\n }\n const isCapacitorEnvironment =\n (appEnv || '').trim().toLowerCase() === CAPACITOR_APP_ENV;\n\n // An explicit web target cannot silently override an explicit\n // `APP_ENV=capacitor`, because that would make a native build publishable.\n if (target === 'web' && isCapacitorEnvironment) {\n throw new Error(\n 'Cannot build target \"web\" while APP_ENV=capacitor. Unset APP_ENV or use --target capacitor.',\n );\n }\n\n if (target) {\n return target;\n }\n\n return isCapacitorEnvironment ? 'capacitor' : 'web';\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-assets.js","sourceRoot":"","sources":["../../../src/app-release/static-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,QAAQ,EAAC,MAAM,MAAM,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAe,EACf,WAAqB,EAAE,EACb,EAAE;IACZ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kCAAkC,WAAW,uBAAuB,OAAO,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAEnD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAChF,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,kDAAkD,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,iBAAiB,EAAE;YAC9C,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,KAAK;YACV,MAAM,EAAE,KAAK;SACd,CAAC,EAAE,CAAC;YACH,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,6BAA6B,CACjD,OAAO,EACP,eAAe,CAChB,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YACtE,IACE,CAAC,iBAAiB,CAAC,eAAe,CAAC;gBACnC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACjC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,mBAAmB,OAAO,4BAA4B,CAC7E,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,cAAsB,EAAW,EAAE,CAC5D,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAkB,EAClB,sBAA8B,EACtB,EAAE;IACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;QACnD,CAAC,CAAC,sBAAsB,CAAC;IAC3B,OAAO,oBAAoB,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"static-assets.js","sourceRoot":"","sources":["../../../src/app-release/static-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,QAAQ,EAAC,MAAM,MAAM,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAe,EACf,WAAqB,EAAE,EACb,EAAE;IACZ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kCAAkC,WAAW,uBAAuB,OAAO,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAEnD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAChF,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,kDAAkD,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,iBAAiB,EAAE;YAC9C,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,KAAK;YACV,MAAM,EAAE,KAAK;SACd,CAAC,EAAE,CAAC;YACH,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,6BAA6B,CACjD,OAAO,EACP,eAAe,CAChB,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YACtE,IACE,CAAC,iBAAiB,CAAC,eAAe,CAAC;gBACnC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACjC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,mBAAmB,OAAO,4BAA4B,CAC7E,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,cAAsB,EAAW,EAAE,CAC5D,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAkB,EAClB,sBAA8B,EACtB,EAAE;IACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;QACnD,CAAC,CAAC,sBAAsB,CAAC;IAC3B,OAAO,oBAAoB,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC,CAAC","sourcesContent":["import fs from 'fs';\nimport {globSync} from 'glob';\nimport path from 'path';\nimport {\n normalizeReleasePath,\n resolveExistingPathWithinRoot,\n} from './paths.js';\n\nexport const PUBLIC_ROOT = 'public';\n\n/**\n * Resolve `publish.staticAssets` globs to files under the app's `public/`.\n *\n * Both the pattern and every match are checked. Checking only the pattern is\n * not enough: brace expansion escapes it, and `public/{,../}secret/**` expands\n * to `public/../secret/**`, which glob returns as plain `secret/…` paths — a\n * prefix test on the pattern sees `public/` and lets them through. So each\n * match is resolved (following symlinks) and has to land inside `public/`.\n */\nexport const resolveDeclaredStaticAssets = (\n appRoot: string,\n patterns: string[] = [],\n): string[] => {\n const matches = new Set<string>();\n if (patterns.length === 0) return [];\n const publicPath = path.join(appRoot, PUBLIC_ROOT);\n if (!fs.existsSync(publicPath)) {\n throw new Error(\n `static assets are declared but ${PUBLIC_ROOT}/ does not exist in ${appRoot}`,\n );\n }\n const publicRealPath = fs.realpathSync(publicPath);\n\n for (const pattern of patterns) {\n const normalizedPattern = normalizeReleasePath(pattern, 'static asset pattern');\n if (!isUnderPublicRoot(normalizedPattern)) {\n throw new Error(\n `static asset pattern must stay inside public/: ${pattern}`,\n );\n }\n\n for (const match of globSync(normalizedPattern, {\n cwd: appRoot,\n nodir: true,\n dot: false,\n follow: false,\n })) {\n const normalizedMatch = normalizeReleasePath(match, 'static asset path');\n const absoluteMatch = resolveExistingPathWithinRoot(\n appRoot,\n normalizedMatch,\n );\n const relativeToPublic = path.relative(publicRealPath, absoluteMatch);\n if (\n !isUnderPublicRoot(normalizedMatch) ||\n relativeToPublic.startsWith('..') ||\n path.isAbsolute(relativeToPublic)\n ) {\n throw new Error(\n `static asset \"${match}\" (from pattern ${pattern}) resolves outside public/`,\n );\n }\n matches.add(normalizedMatch);\n }\n }\n\n return [...matches].sort((a, b) => a.localeCompare(b));\n};\n\nconst isUnderPublicRoot = (normalizedPath: string): boolean =>\n normalizedPath.startsWith(`${PUBLIC_ROOT}/`);\n\nexport const relativePublicAssetPath = (\n publicRoot: string,\n absoluteOrRelativePath: string,\n): string => {\n const relativePath = path.isAbsolute(absoluteOrRelativePath)\n ? path.relative(publicRoot, absoluteOrRelativePath)\n : absoluteOrRelativePath;\n return normalizeReleasePath(relativePath, 'public asset path');\n};\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/app-release/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/app-release/types.ts"],"names":[],"mappings":"","sourcesContent":["export type AppBuildTarget = 'web' | 'capacitor';\n\nexport interface BuildAppOptions {\n environments: string[];\n target?: AppBuildTarget;\n}\n\nexport interface AppPublishConfig {\n /** Extra files under `public/` to ship besides the Vite bundle output. */\n staticAssets?: string[];\n /**\n * Base key every release is nested under. The release prefix becomes\n * `<releasePrefix>/<releaseId>`. Defaults to `releases`.\n */\n releasePrefix?: string;\n}\n\n/**\n * Where a release was built for. `accessURL` is the base URL of the file store\n * that produced the manifest (see `IFileStore.accessURL`); publishing refuses\n * to run against a store whose `accessURL` no longer matches, so a staging\n * build can never be pushed to production by swapping config.\n */\nexport interface LinkedAppReleaseDestination {\n accessURL: string;\n /** Key prefix every object of this release lives under. */\n releasePrefix: string;\n /**\n * Public URL the release's client bundle is served from — `accessURL`,\n * the release prefix and the Vite output directory joined. The build passes\n * it to Vite as `base`, so the bundle's own asset URLs resolve under the\n * release prefix with no server rewrite. Empty for a Capacitor build.\n */\n baseURL: string;\n}\n\nexport interface LinkedAppReleaseFile {\n /** Path relative to the app root, used to read the file back at publish time. */\n sourcePath: string;\n /** Key in the file store, always under the release prefix. */\n objectKey: string;\n sha256: string;\n size: number;\n contentType: string;\n cacheControl: string;\n}\n\nexport interface LinkedAppReleaseManifest {\n schemaVersion: 1;\n appName: string;\n appVersion: string;\n releaseId: string;\n target: AppBuildTarget;\n publishable: boolean;\n builtAt: string;\n environmentNames: string[];\n destination: LinkedAppReleaseDestination;\n files: LinkedAppReleaseFile[];\n}\n\nexport interface PublishPlan {\n releaseId: string;\n manifestPath: string;\n manifestObjectKey: string;\n destination: LinkedAppReleaseDestination;\n files: LinkedAppReleaseFile[];\n totalBytes: number;\n}\n\nexport interface PublishResult {\n releaseId: string;\n uploadedFiles: number;\n uploadedBytes: number;\n dryRun: boolean;\n /** Object keys whose upload could not be verified against a store hash. */\n unverified: string[];\n}\n"]}
|
package/lib/esm/cli-methods.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ import type { PackageDetails } from './interfaces.js';
|
|
|
6
6
|
* `scripts/storage-config.js` (pre-rename). The fallback chain lets older
|
|
7
7
|
* app clones keep booting through the rename.
|
|
8
8
|
*/
|
|
9
|
-
import { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages } from './lifecycle.js';
|
|
10
|
-
export { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages };
|
|
9
|
+
import { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages, discoverLocalPackages, planBuildAll } from './lifecycle.js';
|
|
10
|
+
export { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages, discoverLocalPackages, planBuildAll, };
|
|
11
11
|
export type AppTemplate = 'web' | 'react-native';
|
|
12
12
|
type AppIdentity = {
|
|
13
13
|
appName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-methods.d.ts","sourceRoot":"","sources":["../../src/cli-methods.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-methods.d.ts","sourceRoot":"","sources":["../../src/cli-methods.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAepD;;;;;;GAMG;AAKH,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,GACb,CAAC;AAoBF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,cAAc,CAAC;AAEjD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,SAAI,EAAE,iBAAwB,EAAE,UAAS;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,CAAA;CAAM,kBA4LtL,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAcR;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAkBrD,2EAA2E;AAC3E,eAAO,MAAM,eAAe,eAAe,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3E;AA8BD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,WAAW,EACf,OAAO,GAAE;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAM,GAC1D,OAAO,CAAC,IAAI,CAAC,CAkGf;AAGD,eAAO,MAAM,oBAAoB;;CAA2B,CAAC;AAW7D;;;;;;;;;GASG;AACH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,QASzD;AAuED,wBAAgB,IAAI,CAAC,GAAG,QAAQ,OAAA,QAK/B;AACD,wBAAgB,QAAQ,CAAC,GAAG,MAAM,OAAA,QAIjC;AACD,wBAAgB,cAAc,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,QAyB1C;AAOD,wBAAgB,kCAAkC,CAChD,aAAa,KAAA,EACb,YAAY,EAAE,CACZ,YAAY,KAAA,EACZ,YAAY,KAAA,KACT,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1C,UAAU,KAAA,EACV,IAAI,UAAQ,GACX,OAAO,CAAC,IAAI,CAAC,CAqNf;AA+GD,wBAAgB,QAAQ,CAAC,OAAO,KAAA,QAqS/B;AA2ED,eAAO,MAAM,cAAc,GACzB,WAAM,EACN,aAAQ,EACR,iBAAwB,kBAoHzB,CAAC;AAmBF,eAAO,MAAM,gBAAgB,GAAa,iBAAiB,MAAM,EAAE,OAAM,MAAsB,WAkB9F,CAAC;AAIF,eAAO,MAAM,cAAc,GACzB,SAAI,EACJ,mBAAmB,MAAM,EACzB,OAAM,MAAsB,EAC5B,gBAAe,OAAe,WAsC/B,CAAC;AA+BF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,cAAsB,CAAC;AAEhE,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAI5D;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAE1D;AAyBD,eAAO,MAAM,gBAAgB,GAAa,SAAI;;;;;CAc7C,CAAC;AAgBF;;GAEG;AACH,eAAO,MAAM,YAAY,cAaxB,CAAC;AACF,eAAO,MAAM,WAAW,GAAU,SAAI,EAAE,iBAAwB,kBA0B/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,SAAI,EAAE,iBAAwB,kBAmCtE,CAAC;AACF,eAAO,MAAM,eAAe,GAAU,SAAI,EAAE,iBAAwB,kBAuCnE,CAAC;AAMF,eAAO,MAAM,YAAY,GACvB,eAAc,MAA0B,EACxC,QAAO,MAAU,EAAE,wDAAwD;AAC3E,iBAAgB,GAAG,CAAC,MAAM,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,EAAE,CAAa,qBA2F9E,CAAC;AAEF,eAAO,MAAM,cAAc,qBAuB1B,CAAC;AACF,eAAO,MAAM,QAAQ,GAAU,cAAa,MAAsB,qBAwDjE,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,YAAY,MAAM,EAClB,SAAS;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,mBAoB1B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,SAAS;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,kBA+G1B,CAAC;AACF,eAAO,MAAM,WAAW,GACtB,WAAU,OAAe,EACzB,iBAAkB,iBA6DnB,CAAC;AACF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,wBAyCxB,CAAC;AAEF,eAAO,MAAM,eAAe,qBAoK3B,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAI,EACJ,aAAQ,EACR,iBAAwB,kBAuIzB,CAAC;AAqBF,eAAO,MAAM,QAAQ,GAAa,gBAAW,kBAuD5C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,WAAM,EACN,YAAO,EACP,oBAA2B,EAC3B,aAAY,OAAc,qBAyK3B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/B,CAAC;AAmCF,eAAO,MAAM,cAAc,GAAI,YAAO,EAAE,aAAa,MAAM,KAAG,SAAS,EA2ItE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,oBAA2B,kBAyB/D,CAAC;AACF,eAAO,MAAM,iBAAiB,GAAU,oBAA2B,qBAWlE,CAAC;AACF,eAAO,MAAM,iBAAiB,GAAU,oBAA2B;;EAyBlE,CAAC;AAEF,eAAO,IAAI,cAAc,GAAa,OAAM,OAAe,kBA0K1D,CAAC;AAsBF,eAAO,IAAI,cAAc,GACvB,SAAI,EACJ,UAAK,EACL,UAAK,EACL,oBAAe,oBAmEhB,CAAC;AAEF,eAAO,IAAI,YAAY,GACrB,SAAI,EACJ,WAAM,EACN,YAAO,EACP,wBAAuB,OAAe,EACtC,OAAM,OAAe,kBAiHtB,CAAC;AAeF,eAAO,IAAI,4BAA4B,GACrC,aAAQ,EACR,YAAO,EACP,iBAAY,EACZ,gBAAW,qBA4CZ,CAAC;AAOF,eAAO,IAAI,cAAc,GAAa,aAAQ,EAAE,YAAO,SAMtD,CAAC;AACF,eAAO,IAAI,YAAY,GAAmB,iBAAwB,kBA8FjE,CAAC;AAEF,eAAO,IAAI,wBAAwB,GAAa,gBAAW,EAAE,YAAO,SAsCnE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,gBAAW,qBA8B/C,CAAC"}
|
package/lib/esm/cli-methods.js
CHANGED
|
@@ -19,6 +19,7 @@ import { renameShippedDotfiles } from './utils/shippedDotfiles.js';
|
|
|
19
19
|
import { planPackageSetup } from './utils/packageSetup.js';
|
|
20
20
|
import { detectPackageManager, execBinCommand, runScriptCommand, } from './utils/packageManager.js';
|
|
21
21
|
import { rewriteExtensionlessImports } from './utils/esmSpecifiers.js';
|
|
22
|
+
import { checkShapeNames } from './utils/shapeNames.js';
|
|
22
23
|
import { spawn as spawnChild } from 'child_process';
|
|
23
24
|
import { findNearestPackageJson } from 'find-nearest-package-json';
|
|
24
25
|
import { statSync } from 'fs';
|
|
@@ -43,8 +44,8 @@ let dirname__ = typeof __dirname !== 'undefined'
|
|
|
43
44
|
// have to graph-walk the rest of cli-methods.ts (which contains many
|
|
44
45
|
// dynamic imports Vite can't analyze). We import for internal callers
|
|
45
46
|
// AND re-export so external consumers can keep importing from here.
|
|
46
|
-
import { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages, } from './lifecycle.js';
|
|
47
|
-
export { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages };
|
|
47
|
+
import { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages, discoverLocalPackages, planBuildAll, } from './lifecycle.js';
|
|
48
|
+
export { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages, discoverLocalPackages, planBuildAll, };
|
|
48
49
|
var variables = {};
|
|
49
50
|
/**
|
|
50
51
|
* Prompt user for input
|
|
@@ -718,73 +719,27 @@ function findAppRoot(startPath = process.cwd()) {
|
|
|
718
719
|
return appRoot;
|
|
719
720
|
}
|
|
720
721
|
/**
|
|
721
|
-
*
|
|
722
|
+
* Print the discovery result in full: what will be built, and every package
|
|
723
|
+
* that was found and will not be. Nothing is discovered silently.
|
|
722
724
|
*/
|
|
723
|
-
function
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
const
|
|
730
|
-
|
|
731
|
-
if (appPackageJson.dependencies) {
|
|
732
|
-
Object.keys(appPackageJson.dependencies).forEach((dep) => {
|
|
733
|
-
if (allPackages.has(dep)) {
|
|
734
|
-
packagesToCheck.add(dep);
|
|
735
|
-
}
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
// Recursively add dependencies
|
|
739
|
-
const processedPackages = new Set();
|
|
740
|
-
while (packagesToCheck.size > 0) {
|
|
741
|
-
const packageName = Array.from(packagesToCheck)[0];
|
|
742
|
-
packagesToCheck.delete(packageName);
|
|
743
|
-
if (processedPackages.has(packageName)) {
|
|
744
|
-
continue;
|
|
745
|
-
}
|
|
746
|
-
processedPackages.add(packageName);
|
|
747
|
-
const packageDetails = allPackages.get(packageName);
|
|
748
|
-
if (packageDetails) {
|
|
749
|
-
relevantPackages.set(packageName, packageDetails);
|
|
750
|
-
// Get this package's dependencies
|
|
751
|
-
const packageJson = getPackageJSON(packageDetails.path);
|
|
752
|
-
if (packageJson && packageJson.dependencies) {
|
|
753
|
-
Object.keys(packageJson.dependencies).forEach((dep) => {
|
|
754
|
-
if (allPackages.has(dep) && !processedPackages.has(dep)) {
|
|
755
|
-
packagesToCheck.add(dep);
|
|
756
|
-
}
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
}
|
|
725
|
+
function printBuildAllPlan(plan) {
|
|
726
|
+
console.log(chalk.magenta(`Found ${plan.build.size} linked package${plan.build.size === 1 ? '' : 's'} to build: ` +
|
|
727
|
+
Array.from(plan.build.keys()).join(', ')));
|
|
728
|
+
if (plan.skipped.length === 0)
|
|
729
|
+
return;
|
|
730
|
+
console.log(chalk.yellow(`Skipping ${plan.skipped.length} package${plan.skipped.length === 1 ? '' : 's'} found but not built:`));
|
|
731
|
+
for (const skip of [...plan.skipped].sort((a, b) => a.packageName.localeCompare(b.packageName))) {
|
|
732
|
+
console.log(chalk.yellow(` - ${skip.packageName}: ${skip.reason}`));
|
|
760
733
|
}
|
|
761
|
-
return relevantPackages;
|
|
762
734
|
}
|
|
763
735
|
export function buildAll(options) {
|
|
764
|
-
console.log('Building all
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
// Check if this is an app (not a lincd package itself) with lincd dependencies
|
|
772
|
-
const isAppWithLincdDeps = appPackageJson &&
|
|
773
|
-
appPackageJson.lincd !== true &&
|
|
774
|
-
appPackageJson.dependencies &&
|
|
775
|
-
Object.keys(appPackageJson.dependencies).some((dep) => lincdPackages.has(dep));
|
|
776
|
-
if (isAppWithLincdDeps) {
|
|
777
|
-
debugInfo(chalk.blue(`Found app root at: ${appRoot}`));
|
|
778
|
-
const filteredPackages = filterPackagesByDependencyTree(lincdPackages, appRoot);
|
|
779
|
-
console.log(chalk.magenta(`Found ${filteredPackages.size} total LINCD packages in use by this app`));
|
|
780
|
-
lincdPackages = filteredPackages;
|
|
781
|
-
}
|
|
782
|
-
else {
|
|
783
|
-
debugInfo(chalk.blue(`Building all ${originalPackageCount} packages from workspace`));
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
else {
|
|
787
|
-
debugInfo(chalk.blue(`No workspace root found, building all ${originalPackageCount} packages`));
|
|
736
|
+
console.log('Building all linked packages of this repository in order of dependencies');
|
|
737
|
+
const plan = planBuildAll('./', findAppRoot() || undefined);
|
|
738
|
+
printBuildAllPlan(plan);
|
|
739
|
+
let lincdPackages = plan.build;
|
|
740
|
+
if (lincdPackages.size === 0) {
|
|
741
|
+
console.log(chalk.yellow('Nothing to build.'));
|
|
742
|
+
return;
|
|
788
743
|
}
|
|
789
744
|
let startFrom;
|
|
790
745
|
//by default start building
|
|
@@ -892,7 +847,7 @@ export function buildAll(options) {
|
|
|
892
847
|
dependentModules.length +
|
|
893
848
|
' other packages depend on.'); //"+dependentModules.map(d => d.packageName).join(", ")));
|
|
894
849
|
log('Run ' +
|
|
895
|
-
chalk.greenBright(`
|
|
850
|
+
chalk.greenBright(`linked build-all --from=${pkg.packageName}`) +
|
|
896
851
|
' to build only the remaining packages'); //"+dependentModules.map(d => d.packageName).join(", ")));
|
|
897
852
|
process.exit(1);
|
|
898
853
|
}
|
|
@@ -942,7 +897,7 @@ export function buildAll(options) {
|
|
|
942
897
|
); //"+dependentModules.map(d => d.packageName).join(", ")));
|
|
943
898
|
log(
|
|
944
899
|
'Run ' +
|
|
945
|
-
chalk.greenBright(`
|
|
900
|
+
chalk.greenBright(`linked build-all --from=${pkg.packageName}`) +
|
|
946
901
|
' to build only the remaining packages',
|
|
947
902
|
); //"+dependentModules.map(d => d.packageName).join(", ")));
|
|
948
903
|
process.exit(1);
|
|
@@ -1474,7 +1429,7 @@ export const depCheck = (...args_1) => __awaiter(void 0, [...args_1], void 0, fu
|
|
|
1474
1429
|
//currently just missing LINCD packages cause a hard failure exit code
|
|
1475
1430
|
if (missingLincdPackages.length > 0) {
|
|
1476
1431
|
reject(chalk.red(packagePath.split('/').pop() +
|
|
1477
|
-
'\n[ERROR] These
|
|
1432
|
+
'\n[ERROR] These linked packages are imported but they are not listed in package.json:\n- ' +
|
|
1478
1433
|
missingLincdPackages
|
|
1479
1434
|
.map((missedKey) => {
|
|
1480
1435
|
const files = results.missing[missedKey];
|
|
@@ -1899,7 +1854,7 @@ export const createPackage = (name_1, uriBase_1, ...args_1) => __awaiter(void 0,
|
|
|
1899
1854
|
//extra variable for clarity (will be same as 'name')
|
|
1900
1855
|
setVariable('output_file_name', name);
|
|
1901
1856
|
let { hyphenName, camelCaseName, underscoreName } = setNameVariables(cleanPackageName);
|
|
1902
|
-
log("Creating new
|
|
1857
|
+
log("Creating new linked package '" + name + "'");
|
|
1903
1858
|
fs.copySync(path.join(getScriptDir(), '..', '..', 'defaults', 'package'), targetFolder);
|
|
1904
1859
|
renameShippedDotfiles(targetFolder);
|
|
1905
1860
|
//replace variables in some of the copied files
|
|
@@ -1957,7 +1912,7 @@ export const createPackage = (name_1, uriBase_1, ...args_1) => __awaiter(void 0,
|
|
|
1957
1912
|
process.exitCode = 1;
|
|
1958
1913
|
});
|
|
1959
1914
|
}
|
|
1960
|
-
log(`Prepared a new
|
|
1915
|
+
log(`Prepared a new linked package in ${chalk.magenta(targetFolder)}`, `Run ${chalk.blueBright(runScriptCommand(setup.packageManager, 'build'))} from this directory to build once`, `Or ${chalk.blueBright(runScriptCommand(setup.packageManager, 'start'))} to continuously rebuild on file changes`);
|
|
1961
1916
|
});
|
|
1962
1917
|
var getNextVersion = function (version) {
|
|
1963
1918
|
let parts = version.split('.');
|
|
@@ -2313,6 +2268,11 @@ export const planBuildSteps = (pkgJson, packagePath) => [
|
|
|
2313
2268
|
return changed > 0 ? { info: `rewrote ${changed} file(s)` } : true;
|
|
2314
2269
|
}),
|
|
2315
2270
|
},
|
|
2271
|
+
{
|
|
2272
|
+
// Reads the emitted lib/esm, so it runs after everything that writes it.
|
|
2273
|
+
name: 'Checking shape names',
|
|
2274
|
+
apply: () => checkShapeNames(packagePath),
|
|
2275
|
+
},
|
|
2316
2276
|
{
|
|
2317
2277
|
name: 'Checking dependencies',
|
|
2318
2278
|
apply: () => depCheck(packagePath),
|