php-wasm-xmlreader 0.1.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/8.0.mjs +13 -0
- package/8.1.mjs +13 -0
- package/8.2.mjs +13 -0
- package/8.3.mjs +13 -0
- package/8.4.mjs +13 -0
- package/8.5.mjs +13 -0
- package/README.md +52 -0
- package/index.d.ts +13 -0
- package/index.mjs +24 -0
- package/package.json +20 -0
- package/php8.0-xmlreader.so +0 -0
- package/php8.1-xmlreader.so +0 -0
- package/php8.2-xmlreader.so +0 -0
- package/php8.3-xmlreader.so +0 -0
- package/php8.4-xmlreader.so +0 -0
- package/php8.5-xmlreader.so +0 -0
- package/static.mak +47 -0
- package/test/basic.mjs +61 -0
package/8.0.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const importMeta = import.meta;
|
|
2
|
+
const url = new URL(importMeta.url ?? 'http://example.com#this-is-an-error-supression-hack');
|
|
3
|
+
const ini = !!(Number(url.searchParams.get('ini') ?? true));
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the shared library definitions for this package build.
|
|
7
|
+
* @returns {Array<object>} Shared library definitions for the current package version.
|
|
8
|
+
*/
|
|
9
|
+
export const getLibs = () => [
|
|
10
|
+
{name: 'php8.0-xmlreader.so', url: new URL('./php8.0-xmlreader.so', import.meta.url), ini}
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
export default {getLibs};
|
package/8.1.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const importMeta = import.meta;
|
|
2
|
+
const url = new URL(importMeta.url ?? 'http://example.com#this-is-an-error-supression-hack');
|
|
3
|
+
const ini = !!(Number(url.searchParams.get('ini') ?? true));
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the shared library definitions for this package build.
|
|
7
|
+
* @returns {Array<object>} Shared library definitions for the current package version.
|
|
8
|
+
*/
|
|
9
|
+
export const getLibs = () => [
|
|
10
|
+
{name: 'php8.1-xmlreader.so', url: new URL('./php8.1-xmlreader.so', import.meta.url), ini}
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
export default {getLibs};
|
package/8.2.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const importMeta = import.meta;
|
|
2
|
+
const url = new URL(importMeta.url ?? 'http://example.com#this-is-an-error-supression-hack');
|
|
3
|
+
const ini = !!(Number(url.searchParams.get('ini') ?? true));
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the shared library definitions for this package build.
|
|
7
|
+
* @returns {Array<object>} Shared library definitions for the current package version.
|
|
8
|
+
*/
|
|
9
|
+
export const getLibs = () => [
|
|
10
|
+
{name: 'php8.2-xmlreader.so', url: new URL('./php8.2-xmlreader.so', import.meta.url), ini}
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
export default {getLibs};
|
package/8.3.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const importMeta = import.meta;
|
|
2
|
+
const url = new URL(importMeta.url ?? 'http://example.com#this-is-an-error-supression-hack');
|
|
3
|
+
const ini = !!(Number(url.searchParams.get('ini') ?? true));
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the shared library definitions for this package build.
|
|
7
|
+
* @returns {Array<object>} Shared library definitions for the current package version.
|
|
8
|
+
*/
|
|
9
|
+
export const getLibs = () => [
|
|
10
|
+
{name: 'php8.3-xmlreader.so', url: new URL('./php8.3-xmlreader.so', import.meta.url), ini}
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
export default {getLibs};
|
package/8.4.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const importMeta = import.meta;
|
|
2
|
+
const url = new URL(importMeta.url ?? 'http://example.com#this-is-an-error-supression-hack');
|
|
3
|
+
const ini = !!(Number(url.searchParams.get('ini') ?? true));
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the shared library definitions for this package build.
|
|
7
|
+
* @returns {Array<object>} Shared library definitions for the current package version.
|
|
8
|
+
*/
|
|
9
|
+
export const getLibs = () => [
|
|
10
|
+
{name: 'php8.4-xmlreader.so', url: new URL('./php8.4-xmlreader.so', import.meta.url), ini}
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
export default {getLibs};
|
package/8.5.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const importMeta = import.meta;
|
|
2
|
+
const url = new URL(importMeta.url ?? 'http://example.com#this-is-an-error-supression-hack');
|
|
3
|
+
const ini = !!(Number(url.searchParams.get('ini') ?? true));
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the shared library definitions for this package build.
|
|
7
|
+
* @returns {Array<object>} Shared library definitions for the current package version.
|
|
8
|
+
*/
|
|
9
|
+
export const getLibs = () => [
|
|
10
|
+
{name: 'php8.5-xmlreader.so', url: new URL('./php8.5-xmlreader.so', import.meta.url), ini}
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
export default {getLibs};
|
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# php-wasm-xmlreader
|
|
2
|
+
|
|
3
|
+
`php-wasm-xmlreader` provides the `xmlreader` extension for `php-wasm`.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install php-wasm php-wasm-libxml php-wasm-dom php-wasm-xmlreader
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## What It Loads
|
|
12
|
+
|
|
13
|
+
Dynamic builds resolve the active runtime version to `php8.x-xmlreader.so`.
|
|
14
|
+
Load `php-wasm-libxml` and `php-wasm-dom` alongside it when those dependencies are also dynamic.
|
|
15
|
+
|
|
16
|
+
Shared and static builds may already include some or all of the `libxml`, `dom`, and `xmlreader` pieces in the base runtime. In those modes, callers should only explicitly load the packages whose own `WITH_*` mode is `dynamic`.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
import { PhpWeb } from 'php-wasm/PhpWeb.mjs';
|
|
22
|
+
import libxml from 'php-wasm-libxml';
|
|
23
|
+
import dom from 'php-wasm-dom';
|
|
24
|
+
import xmlreader from 'php-wasm-xmlreader';
|
|
25
|
+
|
|
26
|
+
const php = new PhpWeb({
|
|
27
|
+
version: '8.4',
|
|
28
|
+
sharedLibs: [libxml, dom, xmlreader],
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
await php.run(`<?php var_dump(extension_loaded('xmlreader'));`);
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Custom Builds
|
|
35
|
+
|
|
36
|
+
Enable `WITH_XMLREADER` in `.php-wasm-rc`.
|
|
37
|
+
Static XMLReader builds also need `WITH_LIBXML=static` and `WITH_DOM=static`.
|
|
38
|
+
Dynamic XMLReader builds require both `libxml` and `dom` to be enabled in the build.
|
|
39
|
+
Shared XMLReader builds require `WITH_LIBXML=shared` and `WITH_DOM=shared`, but the extensions remain built in.
|
|
40
|
+
|
|
41
|
+
## Build Options
|
|
42
|
+
|
|
43
|
+
- `WITH_XMLREADER`: defaults to `dynamic`. Allowed values: `0`, `1`, `static`, `dynamic`.
|
|
44
|
+
- `WITH_LIBXML`: `WITH_XMLREADER=static` requires `WITH_LIBXML=static`. Dynamic XMLReader builds require libxml to be enabled in the build.
|
|
45
|
+
- `WITH_DOM`: `WITH_XMLREADER=static` requires `WITH_DOM=static`. Dynamic XMLReader builds require DOM to be enabled in the build.
|
|
46
|
+
|
|
47
|
+
In mixed-mode builds, follow each dependency's own mode:
|
|
48
|
+
|
|
49
|
+
- if `WITH_XMLREADER=dynamic`, load `php-wasm-xmlreader`
|
|
50
|
+
- if `WITH_DOM=dynamic`, load `php-wasm-dom`
|
|
51
|
+
- if `WITH_LIBXML=dynamic`, load `php-wasm-libxml`
|
|
52
|
+
- if any of those are `shared` or `static`, do not explicitly load that extension package at runtime
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SharedLibraryDefinition {
|
|
2
|
+
name?: string;
|
|
3
|
+
url: URL | string;
|
|
4
|
+
ini?: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function getLibs(php: { phpVersion: string }): SharedLibraryDefinition[];
|
|
8
|
+
|
|
9
|
+
declare const xmlreader: {
|
|
10
|
+
getLibs: typeof getLibs;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default xmlreader;
|
package/index.mjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import xmlreader8_5 from './8.5.mjs';
|
|
2
|
+
import xmlreader8_4 from './8.4.mjs';
|
|
3
|
+
import xmlreader8_3 from './8.3.mjs';
|
|
4
|
+
import xmlreader8_2 from './8.2.mjs';
|
|
5
|
+
import xmlreader8_1 from './8.1.mjs';
|
|
6
|
+
import xmlreader8_0 from './8.0.mjs';
|
|
7
|
+
|
|
8
|
+
const versionTable = {
|
|
9
|
+
'8.5': xmlreader8_5,
|
|
10
|
+
'8.4': xmlreader8_4,
|
|
11
|
+
'8.3': xmlreader8_3,
|
|
12
|
+
'8.2': xmlreader8_2,
|
|
13
|
+
'8.1': xmlreader8_1,
|
|
14
|
+
'8.0': xmlreader8_0
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Returns the shared library definitions for the active PHP version.
|
|
19
|
+
* @param {object} php PHP runtime wrapper used to select the versioned package build.
|
|
20
|
+
* @returns {Array<object>} Shared library definitions for the active PHP version.
|
|
21
|
+
*/
|
|
22
|
+
export const getLibs = php => versionTable[php.phpVersion].getLibs();
|
|
23
|
+
|
|
24
|
+
export default {getLibs};
|
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "php-wasm-xmlreader",
|
|
3
|
+
"description": "xmlreader for php-wasm.",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/seanmorris/php-wasm.git"
|
|
7
|
+
},
|
|
8
|
+
"author": "Sean Morris <php-wasm@seanmorr.is>",
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"main": "index.mjs",
|
|
11
|
+
"types": "index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"*.mjs",
|
|
14
|
+
"index.d.ts",
|
|
15
|
+
"test/basic.mjs",
|
|
16
|
+
"README.md",
|
|
17
|
+
"static.mak",
|
|
18
|
+
"*.so"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/static.mak
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env make
|
|
2
|
+
|
|
3
|
+
DOCKER_RUN_IN_EXT_XMLREADER =${DOCKER_ENV} -e NOCONFIGURE=1 -e EMCC_CFLAGS='-fPIC -flto -O${SUB_OPTIMIZE}' -w /src/third_party/php${PHP_VERSION}-xmlreader/ emscripten-builder
|
|
4
|
+
|
|
5
|
+
WITH_XMLREADER?=dynamic
|
|
6
|
+
|
|
7
|
+
ifeq ($(filter ${WITH_XMLREADER},0 1 static dynamic),)
|
|
8
|
+
$(error WITH_XMLREADER MUST BE 0, 1, static, OR dynamic. WITH_XMLREADER: '${WITH_XMLREADER}' PLEASE CHECK YOUR SETTINGS FILE: $(abspath ${ENV_FILE}))
|
|
9
|
+
endif
|
|
10
|
+
|
|
11
|
+
ifeq (${WITH_XMLREADER},1)
|
|
12
|
+
WITH_XMLREADER=dynamic
|
|
13
|
+
endif
|
|
14
|
+
|
|
15
|
+
ifeq (${WITH_XMLREADER},static)
|
|
16
|
+
ifeq ($(filter ${WITH_LIBXML},static),)
|
|
17
|
+
$(error WITH_XMLREADER=static REQUIRES WITH_LIBXML=static. WITH_LIBXML: '${WITH_LIBXML}' WITH_XMLREADER: '${WITH_XMLREADER}' PLEASE CHECK YOUR SETTINGS FILE: $(abspath ${ENV_FILE}))
|
|
18
|
+
endif
|
|
19
|
+
ifeq ($(filter ${WITH_DOM},static),)
|
|
20
|
+
$(error WITH_XMLREADER=static REQUIRES WITH_DOM=static. WITH_DOM: '${WITH_DOM}' WITH_XMLREADER: '${WITH_XMLREADER}' PLEASE CHECK YOUR SETTINGS FILE: $(abspath ${ENV_FILE}))
|
|
21
|
+
endif
|
|
22
|
+
CONFIGURE_FLAGS+= --enable-xmlreader
|
|
23
|
+
TEST_LIST+=$(shell ls packages/xmlreader/test/*.mjs)
|
|
24
|
+
endif
|
|
25
|
+
|
|
26
|
+
ifeq (${WITH_XMLREADER},dynamic)
|
|
27
|
+
ifeq ($(filter ${WITH_LIBXML},1 static shared dynamic),)
|
|
28
|
+
$(error WITH_XMLREADER=dynamic REQUIRES WITH_LIBXML=[static|shared|dynamic]. WITH_LIBXML: '${WITH_LIBXML}' WITH_XMLREADER: '${WITH_XMLREADER}' PLEASE CHECK YOUR SETTINGS FILE: $(abspath ${ENV_FILE}))
|
|
29
|
+
endif
|
|
30
|
+
ifeq ($(filter ${WITH_DOM},1 static shared dynamic),)
|
|
31
|
+
$(error WITH_XMLREADER=dynamic REQUIRES WITH_DOM=[static|shared|dynamic]. WITH_DOM: '${WITH_DOM}' WITH_XMLREADER: '${WITH_XMLREADER}' PLEASE CHECK YOUR SETTINGS FILE: $(abspath ${ENV_FILE}))
|
|
32
|
+
endif
|
|
33
|
+
TEST_LIST+=$(shell ls packages/xmlreader/test/*.mjs)
|
|
34
|
+
EXTRA_MODULES+= packages/xmlreader/php${PHP_VERSION}-xmlreader.so
|
|
35
|
+
endif
|
|
36
|
+
|
|
37
|
+
third_party/php${PHP_VERSION}-xmlreader/config.m4: third_party/php${PHP_VERSION}-src/patched
|
|
38
|
+
${DOCKER_RUN} cp -Lprf /src/third_party/php${PHP_VERSION}-src/ext/xmlreader /src/third_party/php${PHP_VERSION}-xmlreader
|
|
39
|
+
|
|
40
|
+
packages/xmlreader/php${PHP_VERSION}-xmlreader.so: ${PHPIZE} third_party/php${PHP_VERSION}-xmlreader/config.m4
|
|
41
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} chmod +x /src/third_party/php${PHP_VERSION}-src/scripts/phpize;
|
|
42
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} /src/third_party/php${PHP_VERSION}-src/scripts/phpize;
|
|
43
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} emconfigure ./configure PKG_CONFIG_PATH=${PKG_CONFIG_PATH} --prefix='/src/lib/php${PHP_VERSION}' --with-php-config=/src/lib/php${PHP_VERSION}/bin/php-config;
|
|
44
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} sed -i 's#-shared#-static#g' Makefile;
|
|
45
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} sed -i 's#-export-dynamic##g' Makefile;
|
|
46
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} emmake make -j${CPU_COUNT} EXTRA_INCLUDES='-I/src/third_party/php${PHP_VERSION}-src';
|
|
47
|
+
${DOCKER_RUN_IN_EXT_XMLREADER} emcc -shared -o /src/$@ -fPIC -flto -sSIDE_MODULE=1 -O${SUB_OPTIMIZE} -Wl,--whole-archive .libs/xmlreader.a /src/packages/libxml/libxml2.so
|
package/test/basic.mjs
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import { strict as assert } from 'node:assert';
|
|
3
|
+
import { PhpNode } from '../../../test/lib/PhpNode.mjs';
|
|
4
|
+
import { env } from 'node:process';
|
|
5
|
+
|
|
6
|
+
import libxml from 'php-wasm-libxml';
|
|
7
|
+
import dom from 'php-wasm-dom';
|
|
8
|
+
import xmlreader from 'php-wasm-xmlreader';
|
|
9
|
+
|
|
10
|
+
const phpVersion = process.env.PHP_VERSION ?? '8.4';
|
|
11
|
+
const isDynamic = flag => env[flag] === 'dynamic';
|
|
12
|
+
|
|
13
|
+
const stringSharedLibs = [
|
|
14
|
+
isDynamic('WITH_LIBXML') && { url: './packages/libxml/libxml2.so', ini: false },
|
|
15
|
+
isDynamic('WITH_DOM') && `./packages/dom/php${phpVersion}-dom.so`,
|
|
16
|
+
isDynamic('WITH_XMLREADER') && `./packages/xmlreader/php${phpVersion}-xmlreader.so`
|
|
17
|
+
].filter(Boolean);
|
|
18
|
+
|
|
19
|
+
const moduleSharedLibs = [
|
|
20
|
+
isDynamic('WITH_LIBXML') && libxml,
|
|
21
|
+
isDynamic('WITH_DOM') && dom,
|
|
22
|
+
isDynamic('WITH_XMLREADER') && xmlreader
|
|
23
|
+
].filter(Boolean);
|
|
24
|
+
|
|
25
|
+
test('XMLReader Extension is enabled. (loaded via strings)', async () => {
|
|
26
|
+
const php = stringSharedLibs.length
|
|
27
|
+
? new PhpNode({ sharedLibs: stringSharedLibs })
|
|
28
|
+
: new PhpNode();
|
|
29
|
+
|
|
30
|
+
let stdOut = '', stdErr = '';
|
|
31
|
+
|
|
32
|
+
php.addEventListener('output', event => event.detail.forEach(line => void (stdOut += line)));
|
|
33
|
+
php.addEventListener('error', event => event.detail.forEach(line => void (stdErr += line)));
|
|
34
|
+
|
|
35
|
+
await php.binary;
|
|
36
|
+
|
|
37
|
+
const exitCode = await php.run(`<?php var_dump(extension_loaded('xmlreader'));`);
|
|
38
|
+
|
|
39
|
+
assert.equal(exitCode, 0);
|
|
40
|
+
assert.equal(stdOut, `bool(true)\n`);
|
|
41
|
+
assert.equal(stdErr, '');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('XMLReader Extension is enabled. (loaded via module)', async () => {
|
|
45
|
+
const php = moduleSharedLibs.length
|
|
46
|
+
? new PhpNode({ sharedLibs: moduleSharedLibs })
|
|
47
|
+
: new PhpNode();
|
|
48
|
+
|
|
49
|
+
let stdOut = '', stdErr = '';
|
|
50
|
+
|
|
51
|
+
php.addEventListener('output', event => event.detail.forEach(line => void (stdOut += line)));
|
|
52
|
+
php.addEventListener('error', event => event.detail.forEach(line => void (stdErr += line)));
|
|
53
|
+
|
|
54
|
+
await php.binary;
|
|
55
|
+
|
|
56
|
+
const exitCode = await php.run(`<?php var_dump(extension_loaded('xmlreader'));`);
|
|
57
|
+
|
|
58
|
+
assert.equal(exitCode, 0);
|
|
59
|
+
assert.equal(stdOut, `bool(true)\n`);
|
|
60
|
+
assert.equal(stdErr, '');
|
|
61
|
+
});
|