@cloudpss/env 0.3.0-alpha.9 → 0.3.0-beta.4

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/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @cloudpss/env
2
+
3
+ Get/set urls for cloudpss from `process.env` (also `document.baseURI` or `location.href`).
4
+
5
+ All urls WILL NOT ends with '/', even if you set them with trailing '/'.
6
+
7
+ - `HOME_URL`: `process.env.CLOUDPSS_HOME_URL`
8
+ Home page url of cloudpss, defaults to `"https://cloudpss.net"`.
9
+ - `GQL_URL`: `process.env.CLOUDPSS_GQL_URL`
10
+ GraphQL API endpoint of cloudpss, defaults to `"https://cloudpss.net/graphql"`.
11
+ - `API_URL`: `process.env.CLOUDPSS_API_URL`
12
+ Common API endpoint of cloudpss, defaults to `"https://cloudpss.net/api"`
@@ -1,5 +1,5 @@
1
1
  /** 规范化 URL,转为 absolute URL,去除末尾 '/' */
2
- export declare function normalizeUrl(url: string | URL): string;
2
+ export declare function normalizeUrl(url: string | URL, base?: string | URL): string;
3
3
  declare const cloudpssEnv: {
4
4
  /** API 地址,eg: https://cloudpss.net/api */
5
5
  API_URL: string;
@@ -22,10 +22,12 @@ function env() {
22
22
  function baseUrl() {
23
23
  // 通过 DOM API 确定 baseUrl
24
24
  let webBase = 'https://cloudpss.net/';
25
- if (typeof document == 'object' && document.baseURI && document.baseURI.startsWith('http')) {
25
+ if (typeof document == 'object' && typeof document.baseURI == 'string' && document.baseURI.startsWith('http')) {
26
26
  webBase = document.baseURI;
27
27
  }
28
- else if (typeof location == 'object' && location.protocol.startsWith('http')) {
28
+ else if (typeof location == 'object' &&
29
+ typeof location.href == 'string' &&
30
+ location.protocol.startsWith('http')) {
29
31
  webBase = location.href;
30
32
  }
31
33
  //通过 env 确定 baseUrl
@@ -59,7 +61,7 @@ function getUrl(envName, defaults) {
59
61
  return u;
60
62
  }
61
63
  /** 规范化 URL,转为 absolute URL,去除末尾 '/' */
62
- export function normalizeUrl(url) {
64
+ export function normalizeUrl(url, base) {
63
65
  if (typeof url != 'string') {
64
66
  if (url && typeof url.href == 'string') {
65
67
  url = url.href;
@@ -68,10 +70,10 @@ export function normalizeUrl(url) {
68
70
  throw new Error('Invalid url, must be a string or a URL');
69
71
  }
70
72
  }
71
- const u = new URL(url, baseUrl());
72
- if (u.href.endsWith('/'))
73
- return u.href.slice(0, u.href.length - 1);
74
- return u.href;
73
+ const u = new URL(url, base ?? baseUrl()).href;
74
+ if (u.endsWith('/'))
75
+ return u.slice(0, -1);
76
+ return u;
75
77
  }
76
78
  const cloudpssEnv = {};
77
79
  const def = [
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,21 +1,23 @@
1
1
  {
2
2
  "name": "@cloudpss/env",
3
- "version": "0.3.0-alpha.9",
3
+ "version": "0.3.0-beta.4",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
- "main": "dist/cjs/index.js",
7
- "module": "dist/esm/index.js",
8
- "types": "dist/esm/index.d.ts",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "module": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
9
14
  "scripts": {
10
15
  "start": "yarn clean && tsc --watch",
11
- "build": "yarn clean && yarn build:cjs && yarn build:esm",
16
+ "build": "yarn clean && tsc",
12
17
  "prepublishOnly": "yarn build",
13
- "build:cjs": "tsc",
14
- "build:esm": "tsc --outDir dist/esm --module ESNext",
15
18
  "clean": "rimraf dist"
16
19
  },
17
20
  "devDependencies": {
18
- "@types/node": "^16.10.2",
19
- "@types/web": "^0.0.39"
21
+ "@types/node": "^16.11.11"
20
22
  }
21
23
  }
package/src/index.ts CHANGED
@@ -23,9 +23,13 @@ function env(): NodeJS.ProcessEnv {
23
23
  function baseUrl(): string {
24
24
  // 通过 DOM API 确定 baseUrl
25
25
  let webBase = 'https://cloudpss.net/';
26
- if (typeof document == 'object' && document.baseURI && document.baseURI.startsWith('http')) {
26
+ if (typeof document == 'object' && typeof document.baseURI == 'string' && document.baseURI.startsWith('http')) {
27
27
  webBase = document.baseURI;
28
- } else if (typeof location == 'object' && location.protocol.startsWith('http')) {
28
+ } else if (
29
+ typeof location == 'object' &&
30
+ typeof location.href == 'string' &&
31
+ location.protocol.startsWith('http')
32
+ ) {
29
33
  webBase = location.href;
30
34
  }
31
35
 
@@ -61,7 +65,7 @@ function getUrl(envName: string, defaults: string): string {
61
65
  }
62
66
 
63
67
  /** 规范化 URL,转为 absolute URL,去除末尾 '/' */
64
- export function normalizeUrl(url: string | URL): string {
68
+ export function normalizeUrl(url: string | URL, base?: string | URL): string {
65
69
  if (typeof url != 'string') {
66
70
  if (url && typeof url.href == 'string') {
67
71
  url = url.href;
@@ -69,9 +73,9 @@ export function normalizeUrl(url: string | URL): string {
69
73
  throw new Error('Invalid url, must be a string or a URL');
70
74
  }
71
75
  }
72
- const u = new URL(url, baseUrl());
73
- if (u.href.endsWith('/')) return u.href.slice(0, u.href.length - 1);
74
- return u.href;
76
+ const u = new URL(url, base ?? baseUrl()).href;
77
+ if (u.endsWith('/')) return u.slice(0, -1);
78
+ return u;
75
79
  }
76
80
 
77
81
  const cloudpssEnv = {} as {
package/tsconfig.json CHANGED
@@ -2,6 +2,6 @@
2
2
  "extends": "../../tsconfig",
3
3
  "include": ["./src/"],
4
4
  "compilerOptions": {
5
- "outDir": "./dist/cjs"
5
+ "outDir": "./dist"
6
6
  }
7
7
  }
package/dist/cjs/index.js DELETED
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeUrl = void 0;
4
- let fakeEnv = undefined;
5
- /** 获取环境变量 */
6
- function env() {
7
- if (typeof process == 'object' && process.env && typeof process.env == 'object') {
8
- if (fakeEnv) {
9
- // 通过 polyfill 加载了 process,将 fakeEnv 拷贝过去
10
- for (const key in fakeEnv) {
11
- process.env[key] = fakeEnv[key];
12
- }
13
- fakeEnv = undefined;
14
- }
15
- return process.env;
16
- }
17
- else {
18
- if (!fakeEnv) {
19
- fakeEnv = {};
20
- }
21
- return fakeEnv;
22
- }
23
- }
24
- /** 基址 */
25
- function baseUrl() {
26
- // 通过 DOM API 确定 baseUrl
27
- let webBase = 'https://cloudpss.net/';
28
- if (typeof document == 'object' && document.baseURI && document.baseURI.startsWith('http')) {
29
- webBase = document.baseURI;
30
- }
31
- else if (typeof location == 'object' && location.protocol.startsWith('http')) {
32
- webBase = location.href;
33
- }
34
- //通过 env 确定 baseUrl
35
- const homeUrl = env()['CLOUDPSS_HOME_URL'];
36
- if (homeUrl) {
37
- try {
38
- const home = new URL(homeUrl, webBase);
39
- return home.href;
40
- }
41
- catch {
42
- // ignore
43
- }
44
- }
45
- return webBase;
46
- }
47
- /** 获取 url */
48
- function getUrl(envName, defaults) {
49
- let url;
50
- const e = env();
51
- if (e[envName]) {
52
- url = e[envName];
53
- }
54
- else {
55
- url = defaults;
56
- }
57
- if (typeof url != 'string') {
58
- throw new Error('url must be a string');
59
- }
60
- const u = normalizeUrl(url);
61
- e[envName] = u;
62
- return u;
63
- }
64
- /** 规范化 URL,转为 absolute URL,去除末尾 '/' */
65
- function normalizeUrl(url) {
66
- if (typeof url != 'string') {
67
- if (url && typeof url.href == 'string') {
68
- url = url.href;
69
- }
70
- else {
71
- throw new Error('Invalid url, must be a string or a URL');
72
- }
73
- }
74
- const u = new URL(url, baseUrl());
75
- if (u.href.endsWith('/'))
76
- return u.href.slice(0, u.href.length - 1);
77
- return u.href;
78
- }
79
- exports.normalizeUrl = normalizeUrl;
80
- const cloudpssEnv = {};
81
- const def = [
82
- ['API_URL', '/api'],
83
- ['GQL_URL', '/graphql'],
84
- ['HOME_URL', '/'],
85
- ];
86
- for (const [name, defaults] of def) {
87
- const envName = `CLOUDPSS_${name}`;
88
- Object.defineProperty(cloudpssEnv, name, {
89
- get() {
90
- return getUrl(envName, defaults);
91
- },
92
- set(value) {
93
- const e = env();
94
- if (!value) {
95
- e[envName] = '';
96
- }
97
- else {
98
- e[envName] = String(value);
99
- }
100
- getUrl(envName, defaults);
101
- },
102
- enumerable: true,
103
- });
104
- }
105
- Object.freeze(cloudpssEnv);
106
- exports.default = cloudpssEnv;
107
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /** 规范化 URL,转为 absolute URL,去除末尾 '/' */
2
- export declare function normalizeUrl(url: string | URL): string;
3
- declare const cloudpssEnv: {
4
- /** API 地址,eg: https://cloudpss.net/api */
5
- API_URL: string;
6
- /** GraphQL 地址,eg: https://cloudpss.net/graphql */
7
- GQL_URL: string;
8
- /** 主页地址,eg: https://cloudpss.net */
9
- HOME_URL: string;
10
- };
11
- export default cloudpssEnv;
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}