Skip to content

Commit d6a2e8f

Browse files
committed
As I feared, we have the build wrong
1 parent 2c59b5b commit d6a2e8f

File tree

4 files changed

+143
-144
lines changed

4 files changed

+143
-144
lines changed

packages/@glimmer-workspace/integration-node-tests/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
},
1616
"dependencies": {
1717
"@glimmer/syntax": "workspace:*",
18+
"execa": "^9.5.2",
1819
"prettier": "^3.4.2"
1920
},
2021
"devDependencies": {

packages/@glimmer-workspace/integration-node-tests/tests/prettier.test.ts

Lines changed: 110 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { describe, it, expect } from 'vitest';
22
import * as prettier from 'prettier';
33
import { createRequire } from 'node:module';
4+
import os from 'node:os';
5+
import { join } from 'node:path';
6+
import { $ } from 'execa';
7+
import { readFile, mkdtemp, writeFile } from 'node:fs/promises';
48

9+
const monorepoRoot = join(import.meta.dirname, '../../../../');
510
const require = createRequire(import.meta.url);
611

712
/**
@@ -15,7 +20,7 @@ describe('Prettier', () => {
1520
it(`SANITY: we've symlinked to the in-repo copy of @glimmer/syntax`, async () => {
1621
let workspacePath = require.resolve('@glimmer/syntax');
1722
let prettierPath = require.resolve('prettier');
18-
let prettierGlimmer = require.resolve('@glimmer/syntax', {paths: [prettierPath]});
23+
let prettierGlimmer = require.resolve('@glimmer/syntax', { paths: [prettierPath] });
1924

2025
expect(prettierGlimmer).toBe(workspacePath);
2126
});
@@ -34,4 +39,108 @@ describe('Prettier', () => {
3439
</div>"
3540
`);
3641
});
42+
43+
/**
44+
* This is important because we don't test the code we ship to npm
45+
* (the code we ship to npm goes through a build process, and we opted
46+
* to not do that for in-repo dev ergonomics)
47+
*
48+
* Process:
49+
* 1. build @glimmer/syntax (and dependencies)
50+
* 2. creat a tmp folder
51+
* 3. create a project in that tmp folder
52+
* 4. pack and add the tarballs to the project
53+
* 6. See if a basic import and call to pre-process works
54+
*/
55+
it('Uses the real build, and not our monorepo infra', async () => {
56+
/**
57+
* pnpm packs tgz's with the name format ${hyphenated-package-name}-${version}.tgz
58+
*/
59+
async function versionOf(name) {
60+
let manifestPath = join(monorepoRoot, 'packages', name, 'package.json');
61+
let manifestString = await readFile(manifestPath);
62+
return JSON.parse(manifestString.toString()).version;
63+
}
64+
65+
let tarballs = {
66+
syntax: `glimmer-syntax-${await versionOf('@glimmer/syntax')}`,
67+
util: `glimmer-util-${await versionOf('@glimmer/util')}`,
68+
wireFormat: `glimmer-wire-format-${await versionOf('@glimmer/wire-format')}`,
69+
};
70+
71+
let file = `console.log((await import('@glimmer/syntax')).preprocess('<h1></h1>'));`;
72+
let manifest = JSON.stringify({
73+
name: 'real-test',
74+
type: 'module',
75+
private: true,
76+
devDependencies: {
77+
'@glimmer/syntax': `file://./${tarballs.syntax}`,
78+
'@glimmer/util': `file://./${tarballs.util}`,
79+
'@glimmer/wire-format': `file://./${tarballs.wireFormat}`,
80+
},
81+
pnpm: {
82+
overrides: {
83+
'@glimmer/syntax': `file://./${tarballs.syntax}.tgz`,
84+
'@glimmer/util': `file://./${tarballs.util}.tgz`,
85+
'@glimmer/wire-format': `file://./${tarballs.wireFormat}.tgz`,
86+
},
87+
},
88+
});
89+
90+
async function newTmpDir() {
91+
const tmpDir = await mkdtemp(
92+
join(os.tmpdir(), `glimmer-node-integration-testing-${Date.now()}-`)
93+
);
94+
95+
return tmpDir;
96+
}
97+
98+
function inDir(dir: string, cmd: string) {
99+
return $({ cwd: dir, preferLocal: true, shell: true })(cmd);
100+
}
101+
function inRoot(cmd: string) {
102+
return inDir(monorepoRoot, cmd);
103+
}
104+
105+
function inTmp(cmd: string) {
106+
return inDir(tmp, cmd);
107+
}
108+
109+
//////////
110+
// 1 build
111+
// When turbo is set up with "dependsOn": "["^prepack"], we see these packages
112+
// - @glimmer/syntax
113+
// - @glimmer/util
114+
// - @glimmer/wire-format
115+
//
116+
// So these 3 packages need to be packed and installed
117+
await inRoot(`pnpm turbo --filter "@glimmer/syntax" prepack`);
118+
119+
//////////
120+
// 2 create a space that doesn't mess up the repo
121+
let tmp = await newTmpDir();
122+
123+
console.debug(`Project can be inspected at ${tmp}`);
124+
125+
//////////
126+
// 3 create a project that represents real consumer usage
127+
await writeFile(join(tmp, 'package.json'), manifest);
128+
await writeFile(join(tmp, 'index.js'), file);
129+
130+
//////////
131+
// 4 install the tarballs using stable names so we don't have to
132+
// dynamically build the package.json
133+
let packToTemp = `pnpm pack --pack-destination ${tmp}`;
134+
await inDir(join(monorepoRoot, 'packages/@glimmer/syntax'), packToTemp);
135+
await inDir(join(monorepoRoot, 'packages/@glimmer/util'), packToTemp);
136+
await inDir(join(monorepoRoot, 'packages/@glimmer/wire-format'), packToTemp);
137+
await inTmp(`pnpm install`);
138+
139+
//////////
140+
// 5 does it work?
141+
let result = await inTmp(`node index.js`);
142+
let stdout = result.stdout;
143+
144+
expect(stdout).toMatchInlineSnapshot();
145+
});
37146
});

0 commit comments

Comments
 (0)