Skip to content
This repository has been archived by the owner on Nov 29, 2023. It is now read-only.

Refactor transform to be isomorphic (Node/web compatibility) #171

Merged
merged 24 commits into from
Mar 15, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e02efa9
Convert `transform` to async/await
eyelidlessness Feb 18, 2023
6242fbe
Initial Node/DOM compatibility
eyelidlessness Feb 19, 2023
916e2e3
Fix: consistent URL escaping in web environments
eyelidlessness Feb 19, 2023
a0238fe
Fix: HTML document/"fragment" hierarchy
eyelidlessness Feb 19, 2023
cda915a
Fix: namespaces on instance root nodes
eyelidlessness Feb 19, 2023
b46e7b5
Remove fatal errors from XSL from unsupported extensions
eyelidlessness Feb 19, 2023
29a733f
Fix: Firefox does not apply templates to attributes
eyelidlessness Feb 19, 2023
4227fe4
Fix: dynamic itemset itext translations
eyelidlessness Feb 19, 2023
3d93e1b
Fix: transform appearance classes in transformer.ts
eyelidlessness Feb 19, 2023
538bcfe
Add web demo
eyelidlessness Feb 21, 2023
d9ae798
Web test/benchmark setup refinements
eyelidlessness Feb 21, 2023
97c1513
Update README with web details
eyelidlessness Feb 21, 2023
9a4a1a1
Fix build/test in CI, improve types somewhat
eyelidlessness Feb 21, 2023
5c6f898
Fix: bundle for web, preserve modules for Node
eyelidlessness Feb 21, 2023
fdb904c
Move redundant config stuff to shared module again
eyelidlessness Feb 21, 2023
77eb952
Attempt to report summaries to PR
eyelidlessness Feb 21, 2023
51595b4
GitHub does not allow forks to write PR comments at all
eyelidlessness Feb 22, 2023
69109d0
Fix build paths (hopefully for good this time!)
eyelidlessness Mar 1, 2023
50d2f76
Don't show "Transforming..." in demo when not transforming
eyelidlessness Mar 1, 2023
13b1e9c
Address initial review feedback
eyelidlessness Mar 2, 2023
885eac7
Fix: isolation of global DOM types
eyelidlessness Mar 2, 2023
e480bfe
Process itemset itext labels in XForm doc, rather than injecting temp…
eyelidlessness Mar 2, 2023
671d5c6
Use single node XPath where appropriate
eyelidlessness Mar 2, 2023
6efd980
Demo tweaks
eyelidlessness Mar 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@
{
"devDependencies": [
"app.js",
"app.ts",
"vite.config.ts",
"src/api.ts",
"src/app.ts",
"test/**/*.ts"
],
"optionalDependencies": false,
Expand Down Expand Up @@ -95,10 +95,19 @@
{
"files": ["./**/*.ts"],
"rules": {
"consistent-return": "off",
"no-useless-constructor": "off",
"@typescript-eslint/no-useless-constructor": "error",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"no-dupe-class-members": "off",
"@typescript-eslint/no-dupe-class-members": "error",
"no-empty-function": "off",
"@typescript-eslint/no-empty-function": "error",
"no-undef": "off",
Expand Down Expand Up @@ -129,6 +138,7 @@
{
"files": ["./**/*.d.ts"],
"rules": {
"lines-between-class-members": "off",
"no-unused-vars": "off"
}
},
Expand Down
23 changes: 19 additions & 4 deletions .github/workflows/npmjs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,26 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
target: ['node']
node: ['14', '16']
include:
- target: web
node: 16
browser: firefox
- target: web
node: 16
browser: chromium
- target: web
node: 16
browser: webkit
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
id: cache
with:
path: node_modules
path: |
node_modules
~/.cache/ms-playwright
key: ${{ matrix.node }}-${{ hashFiles('**/package-lock.json') }}
- uses: actions/setup-node@v2
with:
Expand All @@ -27,9 +40,11 @@ jobs:
- run: npm install -g npm@^6
- if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- run: npm test
- run: npm run benchmarks
- if: github.event_name == 'release' && github.event.action == 'published' && matrix.node == '16'
- if: matrix.node == '16' && matrix.browser == 'webkit'
run: sudo npx playwright install-deps
- run: ENV=${{ matrix.target }} BROWSER=${{ matrix.browser }} npm test
- run: ENV=${{ matrix.target }} BROWSER=${{ matrix.browser }} npm run benchmarks
- if: github.event_name == 'release' && github.event.action == 'published' && matrix.node == '16' && matrix.target == 'node'
run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
4 changes: 2 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},

// Note: it would be nice to reverse this! But it's currently preventing a *ton* of whitespace diff noise
"[xml]": {
"editor.formatOnSave": false
Expand All @@ -32,5 +31,6 @@
},

// Code navigation
"javascript.referencesCodeLens.enabled": true
"javascript.referencesCodeLens.enabled": true,
"typescript.tsdk": "node_modules/typescript/lib"
}
64 changes: 1 addition & 63 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,63 +1 @@
// @ts-check

import { createServer } from 'vite';
import { VitePluginNode } from 'vite-plugin-node';
import {
config,
external,
resolvePath,
rootDir,
} from './config/build.shared.js';

const appPath = resolvePath('./app.ts');

const init = async () => {
/** @type {import('vite').UserConfig} */
const baseOptions = {
mode: 'development',
build: {
rollupOptions: {
external,
},
},
optimizeDeps: {
disabled: true,
},
root: rootDir,
ssr: {
target: 'node',
},
};

const servers = await Promise.all([
createServer({
...baseOptions,
configFile: false,
plugins: VitePluginNode({
adapter: 'express',
appPath,
exportName: 'app',
tsCompiler: 'esbuild',
}),
server: {
port: config.port,
},
}),
createServer({
...baseOptions,
configFile: false,
publicDir: resolvePath('./test/forms'),
server: {
port: 8081,
},
}),
]);

await Promise.all(servers.map((server) => server.listen()));

servers.forEach((server) => {
server.printUrls();
});
};

init();
import './dist/enketo-transformer/app.cjs';
7 changes: 0 additions & 7 deletions config/build.shared.d.ts

This file was deleted.

42 changes: 0 additions & 42 deletions config/build.shared.js

This file was deleted.

18 changes: 18 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="./icon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Enketo Transformer (web)</title>
</head>
<body>
<script type="module">
import { transform } from './src/transformer.ts';

globalThis.enketo = {
transformer: { transform },
};
</script>
</body>
</html>
Loading