Skip to content

Commit b99f75d

Browse files
committed
fix(bindgen): get typescript version from generated version.ts
Avoid symlinks, which cause issues on Windows. Simplify by generating a src/version.ts from the package.json at build time.
1 parent dd83f0b commit b99f75d

File tree

8 files changed

+170
-47
lines changed

8 files changed

+170
-47
lines changed

packages/compress-stringify/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
typescript/src/version.ts
12
micromamba/
23
test/pyodide-dispatch.tar.bz2
34
test/pyodide-emscripten.tar.bz2

packages/compress-stringify/typescript/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"cypress:open": "pnpm exec cypress open",
2727
"cypress:runChrome": "pnpm exec cypress run --browser chrome",
2828
"cypress:runFirefox": "pnpm exec cypress run --browser firefox",
29-
"build": "pnpm build:tsc && pnpm build:browser:workerEmbedded && pnpm build:browser:workerEmbeddedMin && pnpm build:demo",
29+
"build": "pnpm build:version && pnpm build:tsc && pnpm build:browser:workerEmbedded && pnpm build:browser:workerEmbeddedMin && pnpm build:demo",
30+
"build:version": "node -p \"'const version = ' + JSON.stringify(require('./package.json').version) + '\\nexport default version\\n'\" > src/version.ts",
3031
"build:browser:workerEmbedded": "esbuild --loader:.worker.js=dataurl --bundle --format=esm --outfile=./dist/bundle/index-worker-embedded.js ./src/index-worker-embedded.ts",
3132
"build:browser:workerEmbeddedMin": "esbuild --minify --loader:.worker.js=dataurl --bundle --format=esm --outfile=./dist/bundle/index-worker-embedded.min.js ./src/index-worker-embedded.min.ts",
3233
"build:tsc": "tsc --pretty",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Generated file. To retain edits, remove this comment.
22

3+
export { default as version } from './version.js'
34

45
export type { BinaryStream } from 'itk-wasm'

packages/compress-stringify/typescript/src/package.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/compress-stringify/typescript/src/pipelines-base-url.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { getPipelinesBaseUrl as itkWasmGetPipelinesBaseUrl } from 'itk-wasm'
2-
import packageJson from './package.json'
2+
import version from './version.js'
33

44
let pipelinesBaseUrl: string | URL | undefined
5-
let defaultPipelinesBaseUrl: string | URL = `https://cdn.jsdelivr.net/npm/@itk-wasm/compress-stringify@${packageJson.version}/dist/pipelines`
5+
let defaultPipelinesBaseUrl: string | URL = `https://cdn.jsdelivr.net/npm/@itk-wasm/compress-stringify@${version}/dist/pipelines`
66

77
export function setPipelinesBaseUrl (baseUrl: string | URL): void {
88
pipelinesBaseUrl = baseUrl

packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/pipelines-base-url.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
// Generated file. To retain edits, remove this comment.
22

33
import { getPipelinesBaseUrl as itkWasmGetPipelinesBaseUrl } from 'itk-wasm'
4-
import packageJson from './package.json'
4+
import version from './version.js'
55

66
let pipelinesBaseUrl: string | URL | undefined
7-
let defaultPipelinesBaseUrl: string | URL = `https://cdn.jsdelivr.net/npm/<bindgenPackageName>@${packageJson.version}/dist/pipelines`
7+
let defaultPipelinesBaseUrl: string | URL =
8+
`https://cdn.jsdelivr.net/npm/<bindgenPackageName>@${version}/dist/pipelines`
89

9-
export function setPipelinesBaseUrl (baseUrl: string | URL): void {
10+
export function setPipelinesBaseUrl(baseUrl: string | URL): void {
1011
pipelinesBaseUrl = baseUrl
1112
}
1213

13-
export function getPipelinesBaseUrl (): string | URL {
14+
export function getPipelinesBaseUrl(): string | URL {
1415
if (typeof pipelinesBaseUrl !== 'undefined') {
1516
return pipelinesBaseUrl
1617
}

packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
"scripts": {
1818
"start": "pnpm copyShoelaceAssets && vite",
1919
"test": "echo \"Error: no test specified\" && exit 1",
20-
"build": "pnpm build:tsc && pnpm build:browser:workerEmbedded && pnpm build:browser:workerEmbeddedMin && pnpm build:demo",
20+
"build": "pnpm build:version && pnpm build:tsc && pnpm build:browser:workerEmbedded && pnpm build:browser:workerEmbeddedMin && pnpm build:demo",
2121
"build:browser:workerEmbedded": "esbuild --loader:.worker.js=dataurl --bundle --format=esm --outfile=./dist/bundle/index-worker-embedded.js ./src/index-worker-embedded.ts",
2222
"build:browser:workerEmbeddedMin": "esbuild --minify --loader:.worker.js=dataurl --bundle --format=esm --outfile=./dist/bundle/index-worker-embedded.min.js ./src/index-worker-embedded.min.ts",
23+
"build:version": "node -p \"'const version = ' + JSON.stringify(require('./package.json').version) + '\\nexport default version\\n'\" > src/version.ts",
2324
"build:tsc": "tsc --pretty",
2425
"copyShoelaceAssets": "shx mkdir -p test/browser/demo-app/public && shx cp -r node_modules/@shoelace-style/shoelace/dist/assets test/browser/demo-app/public/",
2526
"build:demo": "pnpm copyShoelaceAssets && vite build"

packages/core/typescript/itk-wasm/src/bindgen/typescript/write-support-files.js

Lines changed: 157 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,108 @@ import path from 'path'
33

44
import writeIfOverrideNotPresent from '../write-if-override-not-present.js'
55

6-
function writeSupportFiles(outputDir, forNode, bindgenResource, packageName, packageDescription) {
6+
function writeSupportFiles(
7+
outputDir,
8+
forNode,
9+
bindgenResource,
10+
packageName,
11+
packageDescription
12+
) {
713
if (!forNode) {
814
try {
915
fs.mkdirSync(path.join(outputDir, 'build'), { recursive: true })
1016
} catch (err) {
1117
if (err.code !== 'EEXIST') throw err
1218
}
1319
try {
14-
fs.mkdirSync(path.join(outputDir, 'test', 'browser', 'demo-app'), { recursive: true })
20+
fs.mkdirSync(path.join(outputDir, 'test', 'browser', 'demo-app'), {
21+
recursive: true
22+
})
1523
} catch (err) {
1624
if (err.code !== 'EEXIST') throw err
1725
}
1826

19-
const pipelinesBaseUrlPath = path.join(outputDir, 'src', 'pipelines-base-url.ts')
27+
const pipelinesBaseUrlPath = path.join(
28+
outputDir,
29+
'src',
30+
'pipelines-base-url.ts'
31+
)
2032
if (!fs.existsSync(pipelinesBaseUrlPath)) {
21-
fs.copyFileSync(bindgenResource('pipelines-base-url.ts'), pipelinesBaseUrlPath)
22-
let pipelinesBaseUrlPathContent = fs.readFileSync(bindgenResource('pipelines-base-url.ts'), { encoding: 'utf8', flag: 'r' })
23-
pipelinesBaseUrlPathContent = pipelinesBaseUrlPathContent.replaceAll('<bindgenPackageName>', packageName)
24-
writeIfOverrideNotPresent(pipelinesBaseUrlPath, pipelinesBaseUrlPathContent)
33+
fs.copyFileSync(
34+
bindgenResource('pipelines-base-url.ts'),
35+
pipelinesBaseUrlPath
36+
)
37+
let pipelinesBaseUrlPathContent = fs.readFileSync(
38+
bindgenResource('pipelines-base-url.ts'),
39+
{ encoding: 'utf8', flag: 'r' }
40+
)
41+
pipelinesBaseUrlPathContent = pipelinesBaseUrlPathContent.replaceAll(
42+
'<bindgenPackageName>',
43+
packageName
44+
)
45+
writeIfOverrideNotPresent(
46+
pipelinesBaseUrlPath,
47+
pipelinesBaseUrlPathContent
48+
)
2549
}
26-
const pipelineWorkerUrlPath = path.join(outputDir, 'src', 'pipeline-worker-url.ts')
50+
const pipelineWorkerUrlPath = path.join(
51+
outputDir,
52+
'src',
53+
'pipeline-worker-url.ts'
54+
)
2755
if (!fs.existsSync(pipelineWorkerUrlPath)) {
28-
let pipelineWorkerUrlPathContent = fs.readFileSync(bindgenResource('pipeline-worker-url.ts'), { encoding: 'utf8', flag: 'r' })
29-
pipelineWorkerUrlPathContent = pipelineWorkerUrlPathContent.replaceAll('<bindgenPackageName>', packageName)
30-
writeIfOverrideNotPresent(pipelineWorkerUrlPath, pipelineWorkerUrlPathContent)
56+
let pipelineWorkerUrlPathContent = fs.readFileSync(
57+
bindgenResource('pipeline-worker-url.ts'),
58+
{ encoding: 'utf8', flag: 'r' }
59+
)
60+
pipelineWorkerUrlPathContent = pipelineWorkerUrlPathContent.replaceAll(
61+
'<bindgenPackageName>',
62+
packageName
63+
)
64+
writeIfOverrideNotPresent(
65+
pipelineWorkerUrlPath,
66+
pipelineWorkerUrlPathContent
67+
)
3168
}
32-
const defaultWebWorkerPath = path.join(outputDir, 'src', 'default-web-worker.ts')
69+
const defaultWebWorkerPath = path.join(
70+
outputDir,
71+
'src',
72+
'default-web-worker.ts'
73+
)
3374
if (!fs.existsSync(defaultWebWorkerPath)) {
34-
let defaultWebWorkerContent = fs.readFileSync(bindgenResource('default-web-worker.ts'), { encoding: 'utf8', flag: 'r' })
75+
let defaultWebWorkerContent = fs.readFileSync(
76+
bindgenResource('default-web-worker.ts'),
77+
{ encoding: 'utf8', flag: 'r' }
78+
)
3579
writeIfOverrideNotPresent(defaultWebWorkerPath, defaultWebWorkerContent)
3680
}
3781

38-
const indexWorkerEmbeddedPath = path.join(outputDir, 'src', 'index-worker-embedded.ts')
39-
const indexWorkerEmbeddedContent = fs.readFileSync(bindgenResource('index-worker-embedded.ts'), { encoding: 'utf8', flag: 'r' })
40-
writeIfOverrideNotPresent(indexWorkerEmbeddedPath, indexWorkerEmbeddedContent)
41-
const indexWorkerEmbeddedMinPath = path.join(outputDir, 'src', 'index-worker-embedded.min.ts')
42-
const indexWorkerEmbeddedMinContent = fs.readFileSync(bindgenResource('index-worker-embedded.min.ts'), { encoding: 'utf8', flag: 'r' })
43-
writeIfOverrideNotPresent(indexWorkerEmbeddedMinPath, indexWorkerEmbeddedMinContent)
44-
45-
const packageJsonSymlinkPath = path.join(outputDir, 'src', 'package.json')
46-
if (!fs.existsSync(packageJsonSymlinkPath)) {
47-
fs.symlinkSync('../package.json', packageJsonSymlinkPath)
48-
}
82+
const indexWorkerEmbeddedPath = path.join(
83+
outputDir,
84+
'src',
85+
'index-worker-embedded.ts'
86+
)
87+
const indexWorkerEmbeddedContent = fs.readFileSync(
88+
bindgenResource('index-worker-embedded.ts'),
89+
{ encoding: 'utf8', flag: 'r' }
90+
)
91+
writeIfOverrideNotPresent(
92+
indexWorkerEmbeddedPath,
93+
indexWorkerEmbeddedContent
94+
)
95+
const indexWorkerEmbeddedMinPath = path.join(
96+
outputDir,
97+
'src',
98+
'index-worker-embedded.min.ts'
99+
)
100+
const indexWorkerEmbeddedMinContent = fs.readFileSync(
101+
bindgenResource('index-worker-embedded.min.ts'),
102+
{ encoding: 'utf8', flag: 'r' }
103+
)
104+
writeIfOverrideNotPresent(
105+
indexWorkerEmbeddedMinPath,
106+
indexWorkerEmbeddedMinContent
107+
)
49108

50109
const npmIgnorePath = path.join(outputDir, '.npmignore')
51110
if (!fs.existsSync(npmIgnorePath)) {
@@ -54,29 +113,89 @@ function writeSupportFiles(outputDir, forNode, bindgenResource, packageName, pac
54113

55114
const docsIndexPath = path.join(outputDir, 'index.html')
56115
if (!fs.existsSync(docsIndexPath)) {
57-
let docsIndexContent = fs.readFileSync(bindgenResource('index.html'), { encoding: 'utf8', flag: 'r' })
58-
docsIndexContent = docsIndexContent.replaceAll('<bindgenPackageName>', packageName)
59-
docsIndexContent = docsIndexContent.replaceAll('<bindgenPackageDescription>', packageDescription)
116+
let docsIndexContent = fs.readFileSync(bindgenResource('index.html'), {
117+
encoding: 'utf8',
118+
flag: 'r'
119+
})
120+
docsIndexContent = docsIndexContent.replaceAll(
121+
'<bindgenPackageName>',
122+
packageName
123+
)
124+
docsIndexContent = docsIndexContent.replaceAll(
125+
'<bindgenPackageDescription>',
126+
packageDescription
127+
)
60128
fs.writeFileSync(docsIndexPath, docsIndexContent)
61-
fs.copyFileSync(bindgenResource('.nojekyll'), path.join(outputDir, '.nojekll'))
129+
fs.copyFileSync(
130+
bindgenResource('.nojekyll'),
131+
path.join(outputDir, '.nojekll')
132+
)
62133
}
63134

64-
const logoPath = path.join(outputDir, 'test', 'browser', 'demo-app', 'logo.svg')
135+
const logoPath = path.join(
136+
outputDir,
137+
'test',
138+
'browser',
139+
'demo-app',
140+
'logo.svg'
141+
)
65142
if (!fs.existsSync(logoPath)) {
66-
fs.copyFileSync(bindgenResource(path.join('demo-app', 'logo.svg')), logoPath)
67-
const jsLogoPath = path.join(outputDir, 'test', 'browser', 'demo-app', 'javascript-logo.svg')
68-
fs.copyFileSync(bindgenResource(path.join('demo-app', 'javascript-logo.svg')), jsLogoPath)
69-
const tsLogoPath = path.join(outputDir, 'test', 'browser', 'demo-app', 'typescript-logo.svg')
70-
fs.copyFileSync(bindgenResource(path.join('demo-app', 'typescript-logo.svg')), tsLogoPath)
143+
fs.copyFileSync(
144+
bindgenResource(path.join('demo-app', 'logo.svg')),
145+
logoPath
146+
)
147+
const jsLogoPath = path.join(
148+
outputDir,
149+
'test',
150+
'browser',
151+
'demo-app',
152+
'javascript-logo.svg'
153+
)
154+
fs.copyFileSync(
155+
bindgenResource(path.join('demo-app', 'javascript-logo.svg')),
156+
jsLogoPath
157+
)
158+
const tsLogoPath = path.join(
159+
outputDir,
160+
'test',
161+
'browser',
162+
'demo-app',
163+
'typescript-logo.svg'
164+
)
165+
fs.copyFileSync(
166+
bindgenResource(path.join('demo-app', 'typescript-logo.svg')),
167+
tsLogoPath
168+
)
71169
}
72170

73-
const demoStylePath = path.join(outputDir, 'test', 'browser', 'demo-app', 'style.css')
171+
const demoStylePath = path.join(
172+
outputDir,
173+
'test',
174+
'browser',
175+
'demo-app',
176+
'style.css'
177+
)
74178
if (!fs.existsSync(demoStylePath)) {
75-
fs.copyFileSync(bindgenResource(path.join('demo-app', 'style.css')), demoStylePath)
179+
fs.copyFileSync(
180+
bindgenResource(path.join('demo-app', 'style.css')),
181+
demoStylePath
182+
)
76183
}
77184

78-
const demoJsUtilities = path.join(outputDir, 'test', 'browser', 'demo-app', 'utilities.js')
79-
writeIfOverrideNotPresent(demoJsUtilities, fs.readFileSync(bindgenResource(path.join('demo-app', 'utilities.js')), { encoding: 'utf8', flag: 'r' }))
185+
const demoJsUtilities = path.join(
186+
outputDir,
187+
'test',
188+
'browser',
189+
'demo-app',
190+
'utilities.js'
191+
)
192+
writeIfOverrideNotPresent(
193+
demoJsUtilities,
194+
fs.readFileSync(bindgenResource(path.join('demo-app', 'utilities.js')), {
195+
encoding: 'utf8',
196+
flag: 'r'
197+
})
198+
)
80199

81200
const viteConfigPath = path.join(outputDir, 'vite.config.js')
82201
if (!fs.existsSync(viteConfigPath)) {

0 commit comments

Comments
 (0)